From 8e87b085adbca8afb6f3a6737a53ade4efdc14dd Mon Sep 17 00:00:00 2001
From: p31729568 <winse.wang@foxmail.com>
Date: Tue, 29 Oct 2019 15:51:19 +0800
Subject: [PATCH] admin: edit subject

---
 .../admins/modals/admin-edit-subject-modal.js |     18 +
 .../javascripts/admins/subjects/index.js      |     57 +
 app/assets/javascripts/common.js              |      4 +-
 app/controllers/admins/subjects_controller.rb |     63 +
 app/models/subject.rb                         |      2 +-
 app/views/admins/subjects/edit.js.erb         |      2 +
 .../shared/_edit_subject_modal.html.erb       |     33 +
 .../admins/subjects/shared/_list.html.erb     |     36 +-
 config/routes.rb                              |     11 +-
 ...fest-4627fa5586ef7fed55ca286af7c028e9.json |      2 +-
 ...321e4023837568abab1d3ee9a28b2faa5925.js.gz |    Bin 995576 -> 0 bytes
 ...083cf39b8e04f2318f67bfbf1923fe208456b3.js} |     79 +-
 ...3cf39b8e04f2318f67bfbf1923fe208456b3.js.gz |    Bin 0 -> 996102 bytes
 ...53ec090e49ba7ad885879ffa02a11b6efd79d74.js | 136259 +++++++++++++++
 ...c090e49ba7ad885879ffa02a11b6efd79d74.js.gz |    Bin 0 -> 966858 bytes
 15 files changed, 136541 insertions(+), 25 deletions(-)
 create mode 100644 app/assets/javascripts/admins/modals/admin-edit-subject-modal.js
 create mode 100644 app/views/admins/subjects/edit.js.erb
 create mode 100644 app/views/admins/subjects/shared/_edit_subject_modal.html.erb
 delete mode 100644 public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js.gz
 rename public/assets/{admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js => admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js} (99%)
 create mode 100644 public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js.gz
 create mode 100644 public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js
 create mode 100644 public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js.gz

diff --git a/app/assets/javascripts/admins/modals/admin-edit-subject-modal.js b/app/assets/javascripts/admins/modals/admin-edit-subject-modal.js
new file mode 100644
index 000000000..c76449936
--- /dev/null
+++ b/app/assets/javascripts/admins/modals/admin-edit-subject-modal.js
@@ -0,0 +1,18 @@
+$(document).on('turbolinks:load', function() {
+  $('.admin-modal-container').on('show.bs.modal', '.modal.admin-edit-subject-modal', function(){
+    var $modal = $('.modal.admin-edit-subject-modal');
+    var $form = $modal.find('form.admin-edit-subject-form');
+
+    $modal.on('click', '.submit-btn', function(){
+      $form.find('.error').html('');
+      var url = $form.attr('action');
+
+      $.ajax({
+        method: 'PATCH',
+        dataType: 'script',
+        url: url,
+        data: $form.serialize()
+      });
+    });
+  })
+});
\ No newline at end of file
diff --git a/app/assets/javascripts/admins/subjects/index.js b/app/assets/javascripts/admins/subjects/index.js
index 0d63ae4cd..6198d56aa 100644
--- a/app/assets/javascripts/admins/subjects/index.js
+++ b/app/assets/javascripts/admins/subjects/index.js
@@ -46,5 +46,62 @@ $(document).on('turbolinks:load', function() {
       $imageElement.show();
       $imageElement.next().html('重新上传');
     })
+
+    // 定义状态切换监听事件
+    var defineStatusChangeFunc = function(doElement, undoElement, url, callback){
+      $('.subject-list-container').on('click', doElement, function(){
+        var $doAction = $(this);
+        var $undoAction = $doAction.siblings(undoElement);
+
+        var subjectId = $doAction.data('id');
+        customConfirm({
+          content: '确认进行该操作吗?',
+          ok: function(){
+            $.ajax({
+              url: '/admins/subjects/' + subjectId + url,
+              method: 'POST',
+              dataType: 'json',
+              success: function() {
+                show_success_flash();
+                $doAction.hide();
+                $undoAction.show();
+                if(callback && typeof callback === "function"){
+                  callback(subjectId, url);
+                }
+              }
+            });
+          }
+        });
+      });
+    }
+    // 隐藏与取消隐藏
+    defineStatusChangeFunc('.hide-action', '.active-action', '/hide');
+    defineStatusChangeFunc('.active-action', '.hide-action', '/cancel_hide');
+
+    // 首页展示与取消首页展示
+    var homepageShowCallback = function(subjectId, url){
+      var $subjectItem = $('.subject-list-container').find('.subject-item-' + subjectId);
+
+      if(url === '/homepage_show'){
+        $subjectItem.find('.homepage-show-badge').show();
+      } else {
+        $subjectItem.find('.homepage-show-badge').hide();
+      }
+    }
+    defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage_show', homepageShowCallback);
+    defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage_show', homepageShowCallback);
+
+    // 设为金课与取消金课
+    var excellentCallback = function(subjectId, url){
+      var $subjectItem = $('.subject-list-container').find('.subject-item-' + subjectId);
+
+      if(url === '/excellent'){
+        $subjectItem.find('.excellent-badge').show();
+      } else {
+        $subjectItem.find('.excellent-badge').hide();
+      }
+    }
+    defineStatusChangeFunc('.excellent-action', '.cancel-excellent-action', '/excellent', excellentCallback);
+    defineStatusChangeFunc('.cancel-excellent-action', '.excellent-action', '/cancel_excellent', excellentCallback);
   }
 });
\ No newline at end of file
diff --git a/app/assets/javascripts/common.js b/app/assets/javascripts/common.js
index 66158b17e..a88ad5006 100644
--- a/app/assets/javascripts/common.js
+++ b/app/assets/javascripts/common.js
@@ -66,9 +66,9 @@ function customConfirm(opts){
   return $.confirm($.extend({}, defaultOpts, opts))
 }
 
-function show_success_flash(){
+function show_success_flash(message){
   $.notify({
-    message: '操作成功'
+    message: message || '操作成功'
   },{
     type: 'success'
   });
diff --git a/app/controllers/admins/subjects_controller.rb b/app/controllers/admins/subjects_controller.rb
index 6795440ac..ae0840f78 100644
--- a/app/controllers/admins/subjects_controller.rb
+++ b/app/controllers/admins/subjects_controller.rb
@@ -5,4 +5,67 @@ class Admins::SubjectsController < Admins::BaseController
     subjects = Admins::SubjectQuery.call(params)
     @subjects = paginate subjects.includes(:repertoire, :subject_level_system, user: { user_extension: :school })
   end
+
+  def edit
+    @subject = current_subject
+  end
+
+  def update
+    current_subject.update!(update_params)
+
+    flash[:success] = '保存成功'
+    redirect_to admins_subjects_path
+  end
+
+  def destroy
+    current_subject.destroy!
+
+    render_delete_success
+  end
+
+  # 隐藏
+  def hide
+    current_subject.update!(hidden: true)
+    render_ok
+  end
+
+  # 展示
+  def cancel_hide
+    current_subject.update!(hidden: false)
+    render_ok
+  end
+
+  # 设为主页展示
+  def homepage_show
+    current_subject.update!(homepage_show: true)
+    render_ok
+  end
+
+  # 取消主页展示
+  def cancel_homepage_show
+    current_subject.update!(homepage_show: false)
+    render_ok
+  end
+
+  # 设为金课
+  def excellent
+    current_subject.update!(excellent: true)
+    render_ok
+  end
+
+  # 取消金课
+  def cancel_excellent
+    current_subject.update!(excellent: false)
+    render_ok
+  end
+
+  private
+
+  def current_subject
+    @_current_subject ||= Subject.find(params[:id])
+  end
+
+  def update_params
+    params.require(:subject).permit(:repertoire_id, :subject_level_system_id, :student_count)
+  end
 end
\ No newline at end of file
diff --git a/app/models/subject.rb b/app/models/subject.rb
index d96b6b06c..e8f592419 100644
--- a/app/models/subject.rb
+++ b/app/models/subject.rb
@@ -5,7 +5,7 @@ class Subject < ApplicationRecord
   include Searchable::Subject
 
   #status :0 编辑中  1 审核中  2 发布
-  belongs_to :repertoire
+  belongs_to :repertoire, optional: true
   belongs_to :user
   belongs_to :subject_level_system, optional: true
 
diff --git a/app/views/admins/subjects/edit.js.erb b/app/views/admins/subjects/edit.js.erb
new file mode 100644
index 000000000..b2e12f9bb
--- /dev/null
+++ b/app/views/admins/subjects/edit.js.erb
@@ -0,0 +1,2 @@
+$('.admin-modal-container').html("<%= j( render partial: 'admins/subjects/shared/edit_subject_modal', locals: { subject: @subject } ) %>");
+$('.modal.admin-edit-subject-modal').modal('show');
\ No newline at end of file
diff --git a/app/views/admins/subjects/shared/_edit_subject_modal.html.erb b/app/views/admins/subjects/shared/_edit_subject_modal.html.erb
new file mode 100644
index 000000000..6e9aa871a
--- /dev/null
+++ b/app/views/admins/subjects/shared/_edit_subject_modal.html.erb
@@ -0,0 +1,33 @@
+<div class="modal fade admin-edit-subject-modal" tabindex="-1" role="dialog" aria-hidden="true">
+  <div class="modal-dialog modal-dialog-centered" role="document">
+    <div class="modal-content">
+      <div class="modal-header">
+        <h5 class="modal-title">编辑课程信息</h5>
+        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+      </div>
+      <div class="modal-body">
+        <%= simple_form_for([:admins, subject], html: { class: 'admin-edit-subject-form' }, defaults: { wrapper_html: { class: 'offset-md-1 col-md-10' } }) do |f| %>
+          <%= f.input :repertoire_id, label: '技术体系:' do %>
+            <% repertoire_options = Repertoire.order('CONVERT(name USING gbk) COLLATE gbk_chinese_ci ASC').map{|r| [r.name, r.id]} %>
+            <%= f.select :repertoire_id, [['请选择', '']] + repertoire_options, {}, class: 'form-control' %>
+          <% end %>
+
+          <%= f.input :subject_level_system_id, label: '等级体系:' do %>
+            <% level_options = SubjectLevelSystem.all.map{|r| [r.name, r.id]} %>
+            <%= f.select :subject_level_system_id, [['请选择', '']] + level_options, {}, class: 'form-control' %>
+          <% end %>
+
+          <%= f.input :student_count, as: :integer, label: '开课人数:' %>
+
+          <div class="error text-danger"></div>
+        <% end %>
+      </div>
+      <div class="modal-footer">
+        <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+        <button type="button" class="btn btn-primary submit-btn">确认</button>
+      </div>
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/app/views/admins/subjects/shared/_list.html.erb b/app/views/admins/subjects/shared/_list.html.erb
index 64fa91f1b..0d670604f 100644
--- a/app/views/admins/subjects/shared/_list.html.erb
+++ b/app/views/admins/subjects/shared/_list.html.erb
@@ -7,12 +7,12 @@
     <th width="8%">技术体系</th>
     <th width="8%">等级体系</th>
     <th width="8%">封面</th>
-    <th width="8%">创建者</th>
+    <th width="7%">创建者</th>
     <th width="10%">单位</th>
     <th width="8%">开课人数</th>
     <th width="10%"><%= sort_tag('创建时间', name: 'created_at', path: admins_subjects_path) %></th>
     <th width="7%">状态</th>
-    <th width="14%">操作</th>
+    <th width="15%">操作</th>
   </tr>
   </thead>
   <tbody>
@@ -40,26 +40,26 @@
         <td>
           <%= display_subject_status(subject) %>
         </td>
-        <td>
-          <%#= javascript_void_link('编辑', class: 'edit-action') %>
+        <td class="action-container">
+          <%= link_to('编辑', edit_admins_subject_path(subject), remote: true, class: 'edit-action') %>
 
-          <%#= javascript_void_link('隐藏', class: 'hide-action', style: subject.hidden? ? 'display:none' : '') %>
-          <%#= javascript_void_link('取消隐藏', class: 'active-action', style: subject.hidden? ? '' : 'display:none') %>
+          <%= javascript_void_link('隐藏', class: 'hide-action', data: { id: subject.id }, style: subject.hidden? ? 'display:none' : '') %>
+          <%= javascript_void_link('取消隐藏', class: 'active-action', data: { id: subject.id }, style: subject.hidden? ? '' : 'display:none') %>
 
-          <%# if subject.published? %>
-<!--            <div class="d-inline">-->
-              <%#= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
-<!--              <div class="dropdown-menu more-action-dropdown">-->
-                <%#= javascript_void_link('首页展示', class: 'dropdown-item homepage-show-action', style: subject.homepage_show? ? 'display:none' : '') %>
-                <%#= javascript_void_link('取消首页展示', class: 'dropdown-item homepage-hide-action', style: subject.homepage_show? ? '' : 'display:none') %>
+          <div class="d-inline">
+            <%= javascript_void_link('更多', class: 'action dropdown-toggle', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false) %>
+            <div class="dropdown-menu more-action-dropdown">
+              <% if subject.published? %>
+                <%= javascript_void_link('首页展示', class: 'dropdown-item homepage-show-action', data: { id: subject.id }, style: subject.homepage_show? ? 'display:none' : '') %>
+                <%= javascript_void_link('取消首页展示', class: 'dropdown-item homepage-hide-action', data: { id: subject.id }, style: subject.homepage_show? ? '' : 'display:none') %>
 
-                <%#= javascript_void_link('选为金课', class: 'dropdown-item excellent-action', style: subject.excellent? ? 'display:none' : '') %>
-                <%#= javascript_void_link('取消金课', class: 'dropdown-item cancel-excellent-action', style: subject.excellent? ? '' : 'display:none') %>
+                <%= javascript_void_link('选为金课', class: 'dropdown-item excellent-action', data: { id: subject.id }, style: subject.excellent? ? 'display:none' : '') %>
+                <%= javascript_void_link('取消金课', class: 'dropdown-item cancel-excellent-action', data: { id: subject.id }, style: subject.excellent? ? '' : 'display:none') %>
+              <% end %>
 
-                <%#= delete_link '删除', admins_subjects_path(subject, element: ".subject-item-#{subject.id}"), class: 'delete-subject-action' %>
-<!--              </div>-->
-<!--            </div>-->
-          <%# end %>
+              <%= delete_link '删除', admins_subject_path(subject, element: ".subject-item-#{subject.id}"), class: 'dropdown-item delete-subject-action' %>
+            </div>
+          </div>
         </td>
       </tr>
     <% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 6de79b36e..2f8f3d958 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1052,7 +1052,16 @@ Rails.application.routes.draw do
       post :drag, on: :collection
     end
 
-    resources :subjects, only: [:index]
+    resources :subjects, only: [:index, :edit, :update, :destroy] do
+      member do
+        post :hide
+        post :cancel_hide
+        post :homepage_show
+        post :cancel_homepage_show
+        post :excellent
+        post :cancel_excellent
+      end
+    end
   end
 
   namespace :cooperative do
diff --git a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json
index 153fec9a2..adc15be40 100644
--- a/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json
+++ b/public/assets/.sprockets-manifest-4627fa5586ef7fed55ca286af7c028e9.json
@@ -1 +1 @@
-{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-10-24T15:25:17+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-10-24T15:25:17+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="},"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js":{"logical_path":"admin.js","mtime":"2019-10-11T14:38:33+08:00","size":4394616,"digest":"2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888","integrity":"sha256-LNsjRC+nNQJThbiPKQDfBP7zi2FTAEGm2+N17w8K6Ig="},"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css":{"logical_path":"admin.css","mtime":"2019-10-10T17:12:05+08:00","size":846514,"digest":"2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc","integrity":"sha256-LChUuaAhWN7VqAmq9xRKhjCxA1SrTlb+zE3/zHE3lsw="},"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css":{"logical_path":"application.css","mtime":"2019-10-10T17:12:05+08:00","size":2001607,"digest":"50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af","integrity":"sha256-UAWa6SmGYEO0cBUShwL8+6U9MqLfFI5k4dlhwQZRxq8="},"admin-992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2.js":{"logical_path":"admin.js","mtime":"2019-10-16T16:11:32+08:00","size":4394790,"digest":"992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2","integrity":"sha256-mSzeCbbRfwCklXauLZ8c7RJyRLpAHvW31nfKuXQWiNI="},"admin-84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257.css":{"logical_path":"admin.css","mtime":"2019-10-16T19:25:40+08:00","size":846676,"digest":"84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257","integrity":"sha256-hPKneR4nXW+CBRQ3Cz+WgXa5lLnde4w7qL9IM2sD8lc="},"application-ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997.css":{"logical_path":"application.css","mtime":"2019-10-16T19:25:40+08:00","size":2001931,"digest":"ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997","integrity":"sha256-72urhIUrqvaakf5q+HW24bEYxVtMfRZWZcSI+sgMSZc="},"admin-c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a.js":{"logical_path":"admin.js","mtime":"2019-10-17T09:44:58+08:00","size":4394897,"digest":"c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a","integrity":"sha256-yZAw0wVmL3QKqEtskloa27qtqgf9dOJlXmTUS0uX/Eo="},"admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css":{"logical_path":"admin.css","mtime":"2019-10-17T10:22:41+08:00","size":846699,"digest":"534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d","integrity":"sha256-U0vehx1n9Nb8jaYRkX14vkBm/HWTulPukqoXBooZnW0="},"cooperative-04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T10:17:56+08:00","size":4330072,"digest":"04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7","integrity":"sha256-BM1qYNQSINOO5FzkCx0ATh0LzYfBMvsae6thRMHeuNc="},"cooperative-a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T10:21:41+08:00","size":830628,"digest":"a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3","integrity":"sha256-o0W7/Y44twyShezBdHAS/83kKRh5g+KupWV6u1a5tPM="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="},"cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T14:03:03+08:00","size":4338033,"digest":"149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b","integrity":"sha256-FJ9HuGddYKgBTM/1DwD5Mv9p4r4ob/t0NDvEo+/7E1s="},"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T11:13:07+08:00","size":832914,"digest":"6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8","integrity":"sha256-YnO3ZtbvEd1WF02Gi6tV5/F68XVGyIjSug3Qprzadsg="},"admin-82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6.js":{"logical_path":"admin.js","mtime":"2019-10-21T13:51:43+08:00","size":4397012,"digest":"82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6","integrity":"sha256-gvZsyAtWScZTClYlZ/KP6NBfe8O4Ih4GlbIhYlXFK6Y="},"admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js":{"logical_path":"admin.js","mtime":"2019-10-21T16:41:06+08:00","size":4397437,"digest":"1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec","integrity":"sha256-G1co2U9rzPvO9FKnYNlMO28xlmvGXX+Jvgd/wupRK+w="},"admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js":{"logical_path":"admin.js","mtime":"2019-10-22T09:53:29+08:00","size":4408150,"digest":"c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f","integrity":"sha256-yMEn/vpeypi8oZgywkZhkxgWTo8kJjXAcDPiQjzBim8="},"admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css":{"logical_path":"admin.css","mtime":"2019-10-22T09:43:20+08:00","size":851150,"digest":"60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e","integrity":"sha256-YNIAwfzfYaYFN9Kcz0R5xrHl6QQgiHCmO47md8lrNH4="},"cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js":{"logical_path":"cooperative.js","mtime":"2019-10-22T09:55:26+08:00","size":4338142,"digest":"9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286","integrity":"sha256-n7esStRAgfr9WtKjob+39DKayW8ovGRG0f9SseLnEoY="},"admin-a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1.js":{"logical_path":"admin.js","mtime":"2019-10-24T14:16:30+08:00","size":4524252,"digest":"a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1","integrity":"sha256-oRBmCB1gNl3fJdWGdWDRzN0xl9voKltulpzJQONCn/E="},"admin-7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6.css":{"logical_path":"admin.css","mtime":"2019-10-24T10:10:08+08:00","size":852772,"digest":"7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6","integrity":"sha256-fOPdcX99Evy8ZMrxQgAjCh5o20Ob4LoYeQd1mf8sMsY="},"college-93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747.css":{"logical_path":"college.css","mtime":"2019-10-24T10:10:08+08:00","size":579546,"digest":"93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747","integrity":"sha256-k5BMZdUsElrsCkY7n9mL7doAGLeHB/gGviJoXMpdN0c="},"cooperative-84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T14:17:15+08:00","size":4338225,"digest":"84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06","integrity":"sha256-hMedJqNq/1tJZVG20hsb+3JrG7xBU0NaNmEV6WwgTgY="},"cooperative-10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T10:10:08+08:00","size":833351,"digest":"10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3","integrity":"sha256-EKnuUXfhllclc8zqRg4TPHSAcuIj/bRz0F7nLJkfu+M="},"admin-441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60.js":{"logical_path":"admin.js","mtime":"2019-10-24T16:08:56+08:00","size":4525031,"digest":"441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60","integrity":"sha256-RB2PNyLl9z5XSKrrb1FxAUdMsetIqZ8RnlYfCLnp3GA="},"admin-76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316.css":{"logical_path":"admin.css","mtime":"2019-10-24T15:25:17+08:00","size":867945,"digest":"76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316","integrity":"sha256-dsUphlkfJ09jmtSN+7SAoa7ux2R7b6KPpUHnigZLYxY="},"cooperative-6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T17:56:20+08:00","size":4339039,"digest":"6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a","integrity":"sha256-bExmO2tQcVNbqyt2zF4Fq1aCZlhXdjp2v08Br+9Rvlo="},"admin-c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43.js":{"logical_path":"admin.js","mtime":"2019-10-24T18:12:33+08:00","size":4533182,"digest":"c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43","integrity":"sha256-xjrK3UMUNJedtQVAoL9+ZcdeHeDRtEmRnyzOiaBUjUM="},"admin-bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a.css":{"logical_path":"admin.css","mtime":"2019-10-24T17:56:20+08:00","size":861450,"digest":"bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a","integrity":"sha256-vYMrmjXrN0Pd6SGL6rYfm83hUIdnrWjb7bHImku2XDo="},"college-fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f.css":{"logical_path":"college.css","mtime":"2019-10-24T17:56:20+08:00","size":571936,"digest":"fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f","integrity":"sha256-+iAngPPn+Wy5tZFsbw192eA8t0aGS70t1JHtABwwrY8="},"cooperative-4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T17:56:20+08:00","size":825741,"digest":"4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0","integrity":"sha256-TyM+iWOwvYC8VrccIJ0xRk0xQkCsjWhoBrr5lRHFOtA="},"application-8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9.css":{"logical_path":"application.css","mtime":"2019-10-21T22:52:15+08:00","size":436995,"digest":"8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9","integrity":"sha256-jJ1rthxQkI9YSzBwx5rrlfJcEWbTngfaXpVDiznKDek="},"admin-bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152.js":{"logical_path":"admin.js","mtime":"2019-10-25T10:12:17+08:00","size":4533673,"digest":"bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152","integrity":"sha256-vyvYifAtFcSROqJgSX1yr+sm1wGqxJpO9qdWGa8DAVI="},"admin-46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd.css":{"logical_path":"admin.css","mtime":"2019-10-25T10:12:17+08:00","size":870355,"digest":"46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd","integrity":"sha256-RuVk0p/65cca6bXjbcC9XeV7EPOW6yAFv7nPUed0TN0="},"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css":{"logical_path":"college.css","mtime":"2019-10-25T10:12:17+08:00","size":580077,"digest":"2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e","integrity":"sha256-IpngX16bZA4zPs5iTUqximeP2r/wvBi2mpwuPeScuo4="},"cooperative-f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d.js":{"logical_path":"cooperative.js","mtime":"2019-10-25T11:01:38+08:00","size":4409145,"digest":"f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d","integrity":"sha256-8ayPFK1q3o0fecpJ6px5vnfUmq6dJwXKZy54RESBcA0="},"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T10:12:17+08:00","size":833882,"digest":"8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b","integrity":"sha256-gFet7iRU28nWSDBfr57emCT0DTvQGE6BboA1u38ecws="},"admin-6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d.js":{"logical_path":"admin.js","mtime":"2019-10-25T17:00:09+08:00","size":4554537,"digest":"6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d","integrity":"sha256-b5u5cg5+UECuVZqPrhFVMxP3dVKnZBazqf53GYRxlk0="},"admin-ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65.css":{"logical_path":"admin.css","mtime":"2019-10-25T09:55:22+08:00","size":862288,"digest":"ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65","integrity":"sha256-qz4PckCuTfjRWFyNXpnfQe3TMF7MKrrc+IIHluHZ/GU="},"college-2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870.css":{"logical_path":"college.css","mtime":"2019-10-25T09:55:22+08:00","size":572010,"digest":"2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870","integrity":"sha256-L9/FQxtGrUpFSiU4bby8OQRmiG92uF/bfj91AYGWqHA="},"cooperative-47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T09:55:22+08:00","size":825815,"digest":"47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf","integrity":"sha256-R9UWoJBNBjPoLB3jmm7EyebeCjeBOEPgHUus+X6LLr8="},"admin-839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf.js":{"logical_path":"admin.js","mtime":"2019-10-26T11:25:08+08:00","size":4554543,"digest":"839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf","integrity":"sha256-g5r3wNKReo+AGdA3bqF87AUO9NGdmMbBDekfXSvIGt8="},"admin-52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b.js":{"logical_path":"admin.js","mtime":"2019-10-26T17:16:18+08:00","size":4553202,"digest":"52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b","integrity":"sha256-UtaSYIxiCuR3F6KsiDd+Vbm1ivCs3z93eBSh/Ue2WUs="},"admin-b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403.js":{"logical_path":"admin.js","mtime":"2019-10-27T13:06:02+08:00","size":4553607,"digest":"b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403","integrity":"sha256-tYVVrmQbuqYeOvDd0nVqzDxd6QI8c3gVxyEyzGfJpAM="},"admin-b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224.js":{"logical_path":"admin.js","mtime":"2019-10-28T10:46:29+08:00","size":4554008,"digest":"b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224","integrity":"sha256-uVxI6lHzks58QCTQ2LLELf5IUooYmOw/eBjgzaKk8iQ="},"admin-1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94.js":{"logical_path":"admin.js","mtime":"2019-10-29T08:57:11+08:00","size":4554938,"digest":"1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94","integrity":"sha256-Hy5aKihGLfi83fvb++vcNqdhynqUlirnHTf7jAb8X5Q="},"admin-cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:06:13+08:00","size":4556541,"digest":"cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b","integrity":"sha256-yz1FQXWO8ry/4W9RjUj4UJfQVHpYfeIi0vwT291HS0s="},"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css":{"logical_path":"admin.css","mtime":"2019-10-29T14:22:47+08:00","size":871031,"digest":"6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6","integrity":"sha256-anbCW2aRtPQ2YIvihgbZDJB7qPAz9fR8bCDXvxElHLY="},"admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:43:01+08:00","size":4556622,"digest":"ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925","integrity":"sha256-upCd/g3k0ha+2zx0MUQyHkAjg3Voq6sdPumiiy+qWSU="}},"assets":{"admin.js":"admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js","admin.css":"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d.js","cooperative.css":"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css"}}
\ No newline at end of file
+{"files":{"admin-cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121.js":{"logical_path":"admin.js","mtime":"2019-09-11T16:20:07+08:00","size":4350881,"digest":"cd9ca8bacc973ce2dbace30c97f6c40bc08e2c2ee44972f668e738e1902c0121","integrity":"sha256-zZyousyXPOLbrOMMl/bEC8COLC7kSXL2aOc44ZAsASE="},"admin-a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa.css":{"logical_path":"admin.css","mtime":"2019-09-11T16:20:07+08:00","size":773445,"digest":"a1b3356efe50ff4717cf22475639b5333c5354ba03fd107c9b7a8d4ae76f47aa","integrity":"sha256-obM1bv5Q/0cXzyJHVjm1MzxTVLoD/RB8m3qNSudvR6o="},"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot":{"logical_path":"font-awesome/fontawesome-webfont.eot","mtime":"2019-08-14T17:22:43+08:00","size":165742,"digest":"7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979","integrity":"sha256-e/yrbbmdXPvxcFygU23ceFhUMsxfpBu9etDwCQM7KXk="},"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2":{"logical_path":"font-awesome/fontawesome-webfont.woff2","mtime":"2019-08-14T17:22:43+08:00","size":77160,"digest":"2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe","integrity":"sha256-Kt78vAQefRj88tQXh53FoJmXqmTWdbejxLbOM9oT8/4="},"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff":{"logical_path":"font-awesome/fontawesome-webfont.woff","mtime":"2019-08-14T17:22:43+08:00","size":98024,"digest":"ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07","integrity":"sha256-ugxZ3rVFD1y0Gz+TYJ7i0NmVQVh33foiPoqKdTNHTwc="},"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf":{"logical_path":"font-awesome/fontawesome-webfont.ttf","mtime":"2019-08-14T17:22:43+08:00","size":165548,"digest":"aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8","integrity":"sha256-qljzPyOaD7AvXHpsRcBD16msmgkzNYBmlOzW1O3A1qg="},"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg":{"logical_path":"font-awesome/fontawesome-webfont.svg","mtime":"2019-08-14T17:22:43+08:00","size":444379,"digest":"ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4","integrity":"sha256-rWFXkmwWIrpOHQPUePFUE2hSS/xG9R5C/g2UX37zI+Q="},"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js":{"logical_path":"college.js","mtime":"2019-10-24T15:25:17+08:00","size":3352744,"digest":"18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287","integrity":"sha256-GPXoQAMxY06JijWswhh4FcCWwl4Kt0q6NBrpFhZs0oc="},"college-944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9.css":{"logical_path":"college.css","mtime":"2019-09-11T16:20:07+08:00","size":546841,"digest":"944d4273f62c7538368b9017fdd3387b5e3bea31a87873770eb231324546d4d9","integrity":"sha256-lE1Cc/YsdTg2i5AX/dM4e1476jGoeHN3DrIxMkVG1Nk="},"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png":{"logical_path":"logo.png","mtime":"2019-09-03T08:55:53+08:00","size":2816,"digest":"7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423","integrity":"sha256-f/ESVocJv5f5iY/ockm3qPIA/x9I1TfYWvhyFfGHBCM="},"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js":{"logical_path":"application.js","mtime":"2019-10-24T15:25:17+08:00","size":600706,"digest":"9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb","integrity":"sha256-nPvD15JZmh0N5ce4QgnhwrLmAzbw8B4Z8FgWY5GHCPs="},"application-5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2.css":{"logical_path":"application.css","mtime":"2019-09-11T16:20:07+08:00","size":1844002,"digest":"5eb87c6e13676d0183317debce17fade27e68c4acee28c419438da15d53c94f2","integrity":"sha256-Xrh8bhNnbQGDMX3rzhf63ifmjErO4oxBlDjaFdU8lPI="},"admin-c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4.js":{"logical_path":"admin.js","mtime":"2019-09-21T15:28:08+08:00","size":4382031,"digest":"c9e5ebe6191548550e27514196ea125cfbb402820ec125a0c9acf99d2d378fe4","integrity":"sha256-yeXr5hkVSFUOJ1FBluoSXPu0AoIOwSWgyaz5nS03j+Q="},"admin-59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38.css":{"logical_path":"admin.css","mtime":"2019-09-21T14:49:04+08:00","size":840093,"digest":"59c59f8cae8bef4a8359286c985458110c9d03ea121516595c988943f4717c38","integrity":"sha256-WcWfjK6L70qDWShsmFRYEQydA+oSFRZZXJiJQ/RxfDg="},"college-38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437.css":{"logical_path":"college.css","mtime":"2019-09-16T13:56:09+08:00","size":579109,"digest":"38f953d6ba5b85d3fab63cb3c2bbf0d057ccc6454d07cfaafac3b06da37b8437","integrity":"sha256-OPlT1rpbhdP6tjyzwrvw0FfMxkVNB8+q+sOwbaN7hDc="},"application-646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3.css":{"logical_path":"application.css","mtime":"2019-09-21T14:49:04+08:00","size":1988767,"digest":"646b1158a4e8c1f13e684d6fe9025abc75f8d3ba5256e440802c0398223374f3","integrity":"sha256-ZGsRWKTowfE+aE1v6QJavHX407pSVuRAgCwDmCIzdPM="},"admin-a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:33:05+08:00","size":4383107,"digest":"a47e37c0ec7cf5f22380249776d1e82d65b6b6aa272ed7389185aa200fa40751","integrity":"sha256-pH43wOx89fIjgCSXdtHoLWW2tqonLtc4kYWqIA+kB1E="},"admin-432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9.js":{"logical_path":"admin.js","mtime":"2019-09-25T15:35:20+08:00","size":4383103,"digest":"432c4eac09b036c57ff1e88d902b8aa7df81164e4b419bac557cf1366c1d3ad9","integrity":"sha256-QyxOrAmwNsV/8eiNkCuKp9+BFk5LQZusVXzxNmwdOtk="},"admin-978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a.js":{"logical_path":"admin.js","mtime":"2019-09-30T14:43:41+08:00","size":4387200,"digest":"978e5ce607f77c26814a174f480da79ac246c2201868ef84654aa03bb6727b5a","integrity":"sha256-l45c5gf3fCaBShdPSA2nmsJGwiAYaO+EZUqgO7Zye1o="},"admin-896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7.css":{"logical_path":"admin.css","mtime":"2019-09-30T14:43:41+08:00","size":842269,"digest":"896281f4731722b0c084dbb1af21d0f34a5bc142d58aff57b391864ab71ddca7","integrity":"sha256-iWKB9HMXIrDAhNuxryHQ80pbwULViv9Xs5GGSrcd3Kc="},"application-97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd.css":{"logical_path":"application.css","mtime":"2019-09-30T14:43:41+08:00","size":1993118,"digest":"97f313e9bb7d25476649f7d7215959cf421480fd0a3785d1956953bf94a1e8bd","integrity":"sha256-l/MT6bt9JUdmSffXIVlZz0IUgP0KN4XRlWlTv5Sh6L0="},"admin-2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888.js":{"logical_path":"admin.js","mtime":"2019-10-11T14:38:33+08:00","size":4394616,"digest":"2cdb23442fa735025385b88f2900df04fef38b61530041a6dbe375ef0f0ae888","integrity":"sha256-LNsjRC+nNQJThbiPKQDfBP7zi2FTAEGm2+N17w8K6Ig="},"admin-2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc.css":{"logical_path":"admin.css","mtime":"2019-10-10T17:12:05+08:00","size":846514,"digest":"2c2854b9a02158ded5a809aaf7144a8630b10354ab4e56fecc4dffcc713796cc","integrity":"sha256-LChUuaAhWN7VqAmq9xRKhjCxA1SrTlb+zE3/zHE3lsw="},"application-50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af.css":{"logical_path":"application.css","mtime":"2019-10-10T17:12:05+08:00","size":2001607,"digest":"50059ae929866043b47015128702fcfba53d32a2df148e64e1d961c10651c6af","integrity":"sha256-UAWa6SmGYEO0cBUShwL8+6U9MqLfFI5k4dlhwQZRxq8="},"admin-992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2.js":{"logical_path":"admin.js","mtime":"2019-10-16T16:11:32+08:00","size":4394790,"digest":"992cde09b6d17f00a49576ae2d9f1ced127244ba401ef5b7d677cab9741688d2","integrity":"sha256-mSzeCbbRfwCklXauLZ8c7RJyRLpAHvW31nfKuXQWiNI="},"admin-84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257.css":{"logical_path":"admin.css","mtime":"2019-10-16T19:25:40+08:00","size":846676,"digest":"84f2a7791e275d6f820514370b3f968176b994b9dd7b8c3ba8bf48336b03f257","integrity":"sha256-hPKneR4nXW+CBRQ3Cz+WgXa5lLnde4w7qL9IM2sD8lc="},"application-ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997.css":{"logical_path":"application.css","mtime":"2019-10-16T19:25:40+08:00","size":2001931,"digest":"ef6bab84852baaf69a91fe6af875b6e1b118c55b4c7d165665c488fac80c4997","integrity":"sha256-72urhIUrqvaakf5q+HW24bEYxVtMfRZWZcSI+sgMSZc="},"admin-c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a.js":{"logical_path":"admin.js","mtime":"2019-10-17T09:44:58+08:00","size":4394897,"digest":"c99030d305662f740aa84b6c925a1adbbaadaa07fd74e2655e64d44b4b97fc4a","integrity":"sha256-yZAw0wVmL3QKqEtskloa27qtqgf9dOJlXmTUS0uX/Eo="},"admin-534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d.css":{"logical_path":"admin.css","mtime":"2019-10-17T10:22:41+08:00","size":846699,"digest":"534bde871d67f4d6fc8da611917d78be4066fc7593ba53ee92aa17068a199d6d","integrity":"sha256-U0vehx1n9Nb8jaYRkX14vkBm/HWTulPukqoXBooZnW0="},"cooperative-04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T10:17:56+08:00","size":4330072,"digest":"04cd6a60d41220d38ee45ce40b1d004e1d0bcd87c132fb1a7bab6144c1deb8d7","integrity":"sha256-BM1qYNQSINOO5FzkCx0ATh0LzYfBMvsae6thRMHeuNc="},"cooperative-a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T10:21:41+08:00","size":830628,"digest":"a345bbfd8e38b70c9285ecc1747012ffcde429187983e2aea5657abb56b9b4f3","integrity":"sha256-o0W7/Y44twyShezBdHAS/83kKRh5g+KupWV6u1a5tPM="},"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css":{"logical_path":"application.css","mtime":"2019-09-03T08:55:53+08:00","size":442932,"digest":"0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8","integrity":"sha256-DkF0eNVvQkZ+hXzRhrKcu8DWx8boXIpvQvOaxhiUPeg="},"cooperative-149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b.js":{"logical_path":"cooperative.js","mtime":"2019-10-17T14:03:03+08:00","size":4338033,"digest":"149f47b8675d60a8014ccff50f00f932ff69e2be286ffb74343bc4a3effb135b","integrity":"sha256-FJ9HuGddYKgBTM/1DwD5Mv9p4r4ob/t0NDvEo+/7E1s="},"cooperative-6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8.css":{"logical_path":"cooperative.css","mtime":"2019-10-17T11:13:07+08:00","size":832914,"digest":"6273b766d6ef11dd56174d868bab55e7f17af17546c888d2ba0dd0a6bcda76c8","integrity":"sha256-YnO3ZtbvEd1WF02Gi6tV5/F68XVGyIjSug3Qprzadsg="},"admin-82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6.js":{"logical_path":"admin.js","mtime":"2019-10-21T13:51:43+08:00","size":4397012,"digest":"82f66cc80b5649c6530a562567f28fe8d05f7bc3b8221e0695b2216255c52ba6","integrity":"sha256-gvZsyAtWScZTClYlZ/KP6NBfe8O4Ih4GlbIhYlXFK6Y="},"admin-1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec.js":{"logical_path":"admin.js","mtime":"2019-10-21T16:41:06+08:00","size":4397437,"digest":"1b5728d94f6bccfbcef452a760d94c3b6f31966bc65d7f89be077fc2ea512bec","integrity":"sha256-G1co2U9rzPvO9FKnYNlMO28xlmvGXX+Jvgd/wupRK+w="},"admin-c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f.js":{"logical_path":"admin.js","mtime":"2019-10-22T09:53:29+08:00","size":4408150,"digest":"c8c127fefa5eca98bca19832c246619318164e8f242635c07033e2423cc18a6f","integrity":"sha256-yMEn/vpeypi8oZgywkZhkxgWTo8kJjXAcDPiQjzBim8="},"admin-60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e.css":{"logical_path":"admin.css","mtime":"2019-10-22T09:43:20+08:00","size":851150,"digest":"60d200c1fcdf61a60537d29ccf4479c6b1e5e904208870a63b8ee677c96b347e","integrity":"sha256-YNIAwfzfYaYFN9Kcz0R5xrHl6QQgiHCmO47md8lrNH4="},"cooperative-9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286.js":{"logical_path":"cooperative.js","mtime":"2019-10-22T09:55:26+08:00","size":4338142,"digest":"9fb7ac4ad44081fafd5ad2a3a1bfb7f4329ac96f28bc6446d1ff52b1e2e71286","integrity":"sha256-n7esStRAgfr9WtKjob+39DKayW8ovGRG0f9SseLnEoY="},"admin-a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1.js":{"logical_path":"admin.js","mtime":"2019-10-24T14:16:30+08:00","size":4524252,"digest":"a11066081d60365ddf25d5867560d1ccdd3197dbe82a5b6e969cc940e3429ff1","integrity":"sha256-oRBmCB1gNl3fJdWGdWDRzN0xl9voKltulpzJQONCn/E="},"admin-7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6.css":{"logical_path":"admin.css","mtime":"2019-10-24T10:10:08+08:00","size":852772,"digest":"7ce3dd717f7d12fcbc64caf14200230a1e68db439be0ba1879077599ff2c32c6","integrity":"sha256-fOPdcX99Evy8ZMrxQgAjCh5o20Ob4LoYeQd1mf8sMsY="},"college-93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747.css":{"logical_path":"college.css","mtime":"2019-10-24T10:10:08+08:00","size":579546,"digest":"93904c65d52c125aec0a463b9fd98bedda0018b78707f806be22685cca5d3747","integrity":"sha256-k5BMZdUsElrsCkY7n9mL7doAGLeHB/gGviJoXMpdN0c="},"cooperative-84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T14:17:15+08:00","size":4338225,"digest":"84c79d26a36aff5b496551b6d21b1bfb726b1bbc4153435a366115e96c204e06","integrity":"sha256-hMedJqNq/1tJZVG20hsb+3JrG7xBU0NaNmEV6WwgTgY="},"cooperative-10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T10:10:08+08:00","size":833351,"digest":"10a9ee5177e196572573ccea460e133c748072e223fdb473d05ee72c991fbbe3","integrity":"sha256-EKnuUXfhllclc8zqRg4TPHSAcuIj/bRz0F7nLJkfu+M="},"admin-441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60.js":{"logical_path":"admin.js","mtime":"2019-10-24T16:08:56+08:00","size":4525031,"digest":"441d8f3722e5f73e5748aaeb6f517101474cb1eb48a99f119e561f08b9e9dc60","integrity":"sha256-RB2PNyLl9z5XSKrrb1FxAUdMsetIqZ8RnlYfCLnp3GA="},"admin-76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316.css":{"logical_path":"admin.css","mtime":"2019-10-24T15:25:17+08:00","size":867945,"digest":"76c52986591f274f639ad48dfbb480a1aeeec7647b6fa28fa541e78a064b6316","integrity":"sha256-dsUphlkfJ09jmtSN+7SAoa7ux2R7b6KPpUHnigZLYxY="},"cooperative-6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a.js":{"logical_path":"cooperative.js","mtime":"2019-10-24T17:56:20+08:00","size":4339039,"digest":"6c4c663b6b5071535bab2b76cc5e05ab5682665857763a76bf4f01afef51be5a","integrity":"sha256-bExmO2tQcVNbqyt2zF4Fq1aCZlhXdjp2v08Br+9Rvlo="},"admin-c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43.js":{"logical_path":"admin.js","mtime":"2019-10-24T18:12:33+08:00","size":4533182,"digest":"c63acadd431434979db50540a0bf7e65c75e1de0d1b449919f2cce89a0548d43","integrity":"sha256-xjrK3UMUNJedtQVAoL9+ZcdeHeDRtEmRnyzOiaBUjUM="},"admin-bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a.css":{"logical_path":"admin.css","mtime":"2019-10-24T17:56:20+08:00","size":861450,"digest":"bd832b9a35eb3743dde9218beab61f9bcde1508767ad68dbedb1c89a4bb65c3a","integrity":"sha256-vYMrmjXrN0Pd6SGL6rYfm83hUIdnrWjb7bHImku2XDo="},"college-fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f.css":{"logical_path":"college.css","mtime":"2019-10-24T17:56:20+08:00","size":571936,"digest":"fa202780f3e7f96cb9b5916c6f0d7dd9e03cb746864bbd2dd491ed001c30ad8f","integrity":"sha256-+iAngPPn+Wy5tZFsbw192eA8t0aGS70t1JHtABwwrY8="},"cooperative-4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0.css":{"logical_path":"cooperative.css","mtime":"2019-10-24T17:56:20+08:00","size":825741,"digest":"4f233e8963b0bd80bc56b71c209d31464d314240ac8d686806baf99511c53ad0","integrity":"sha256-TyM+iWOwvYC8VrccIJ0xRk0xQkCsjWhoBrr5lRHFOtA="},"application-8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9.css":{"logical_path":"application.css","mtime":"2019-10-21T22:52:15+08:00","size":436995,"digest":"8c9d6bb61c50908f584b3070c79aeb95f25c1166d39e07da5e95438b39ca0de9","integrity":"sha256-jJ1rthxQkI9YSzBwx5rrlfJcEWbTngfaXpVDiznKDek="},"admin-bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152.js":{"logical_path":"admin.js","mtime":"2019-10-25T10:12:17+08:00","size":4533673,"digest":"bf2bd889f02d15c4913aa260497d72afeb26d701aac49a4ef6a75619af030152","integrity":"sha256-vyvYifAtFcSROqJgSX1yr+sm1wGqxJpO9qdWGa8DAVI="},"admin-46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd.css":{"logical_path":"admin.css","mtime":"2019-10-25T10:12:17+08:00","size":870355,"digest":"46e564d29ffae5c71ae9b5e36dc0bd5de57b10f396eb2005bfb9cf51e7744cdd","integrity":"sha256-RuVk0p/65cca6bXjbcC9XeV7EPOW6yAFv7nPUed0TN0="},"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css":{"logical_path":"college.css","mtime":"2019-10-25T10:12:17+08:00","size":580077,"digest":"2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e","integrity":"sha256-IpngX16bZA4zPs5iTUqximeP2r/wvBi2mpwuPeScuo4="},"cooperative-f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d.js":{"logical_path":"cooperative.js","mtime":"2019-10-25T11:01:38+08:00","size":4409145,"digest":"f1ac8f14ad6ade8d1f79ca49ea9c79be77d49aae9d2705ca672e78444481700d","integrity":"sha256-8ayPFK1q3o0fecpJ6px5vnfUmq6dJwXKZy54RESBcA0="},"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T10:12:17+08:00","size":833882,"digest":"8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b","integrity":"sha256-gFet7iRU28nWSDBfr57emCT0DTvQGE6BboA1u38ecws="},"admin-6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d.js":{"logical_path":"admin.js","mtime":"2019-10-25T17:00:09+08:00","size":4554537,"digest":"6f9bb9720e7e5040ae559a8fae11553313f77552a76416b3a9fe77198471964d","integrity":"sha256-b5u5cg5+UECuVZqPrhFVMxP3dVKnZBazqf53GYRxlk0="},"admin-ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65.css":{"logical_path":"admin.css","mtime":"2019-10-25T09:55:22+08:00","size":862288,"digest":"ab3e0f7240ae4df8d1585c8d5e99df41edd3305ecc2abadcf8820796e1d9fc65","integrity":"sha256-qz4PckCuTfjRWFyNXpnfQe3TMF7MKrrc+IIHluHZ/GU="},"college-2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870.css":{"logical_path":"college.css","mtime":"2019-10-25T09:55:22+08:00","size":572010,"digest":"2fdfc5431b46ad4a454a25386dbcbc390466886f76b85fdb7e3f75018196a870","integrity":"sha256-L9/FQxtGrUpFSiU4bby8OQRmiG92uF/bfj91AYGWqHA="},"cooperative-47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf.css":{"logical_path":"cooperative.css","mtime":"2019-10-25T09:55:22+08:00","size":825815,"digest":"47d516a0904d0633e82c1de39a6ec4c9e6de0a37813843e01d4bacf97e8b2ebf","integrity":"sha256-R9UWoJBNBjPoLB3jmm7EyebeCjeBOEPgHUus+X6LLr8="},"admin-839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf.js":{"logical_path":"admin.js","mtime":"2019-10-26T11:25:08+08:00","size":4554543,"digest":"839af7c0d2917a8f8019d0376ea17cec050ef4d19d98c6c10de91f5d2bc81adf","integrity":"sha256-g5r3wNKReo+AGdA3bqF87AUO9NGdmMbBDekfXSvIGt8="},"admin-52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b.js":{"logical_path":"admin.js","mtime":"2019-10-26T17:16:18+08:00","size":4553202,"digest":"52d692608c620ae47717a2ac88377e55b9b58af0acdf3f777814a1fd47b6594b","integrity":"sha256-UtaSYIxiCuR3F6KsiDd+Vbm1ivCs3z93eBSh/Ue2WUs="},"admin-b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403.js":{"logical_path":"admin.js","mtime":"2019-10-27T13:06:02+08:00","size":4553607,"digest":"b58555ae641bbaa61e3af0ddd2756acc3c5de9023c737815c72132cc67c9a403","integrity":"sha256-tYVVrmQbuqYeOvDd0nVqzDxd6QI8c3gVxyEyzGfJpAM="},"admin-b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224.js":{"logical_path":"admin.js","mtime":"2019-10-28T10:46:29+08:00","size":4554008,"digest":"b95c48ea51f392ce7c4024d0d8b2c42dfe48528a1898ec3f7818e0cda2a4f224","integrity":"sha256-uVxI6lHzks58QCTQ2LLELf5IUooYmOw/eBjgzaKk8iQ="},"admin-1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94.js":{"logical_path":"admin.js","mtime":"2019-10-29T08:57:11+08:00","size":4554938,"digest":"1f2e5a2a28462df8bcddfbdbfbebdc36a761ca7a94962ae71d37fb8c06fc5f94","integrity":"sha256-Hy5aKihGLfi83fvb++vcNqdhynqUlirnHTf7jAb8X5Q="},"admin-cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:06:13+08:00","size":4556541,"digest":"cb3d4541758ef2bcbfe16f518d48f85097d0547a587de222d2fc13dbdd474b4b","integrity":"sha256-yz1FQXWO8ry/4W9RjUj4UJfQVHpYfeIi0vwT291HS0s="},"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css":{"logical_path":"admin.css","mtime":"2019-10-29T14:22:47+08:00","size":871031,"digest":"6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6","integrity":"sha256-anbCW2aRtPQ2YIvihgbZDJB7qPAz9fR8bCDXvxElHLY="},"admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js":{"logical_path":"admin.js","mtime":"2019-10-29T14:43:01+08:00","size":4556622,"digest":"ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925","integrity":"sha256-upCd/g3k0ha+2zx0MUQyHkAjg3Voq6sdPumiiy+qWSU="},"admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js":{"logical_path":"admin.js","mtime":"2019-10-29T15:50:27+08:00","size":4559454,"digest":"e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3","integrity":"sha256-6XXiA5IG6a4ragcv7gg885uOBPIxj2e/vxkj/iCEVrM="},"cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js":{"logical_path":"cooperative.js","mtime":"2019-10-29T15:50:27+08:00","size":4409163,"digest":"a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74","integrity":"sha256-ownSRc0LC5xlPbRxxT7AkOSbp62IWHn/oCoRtu/XnXQ="}},"assets":{"admin.js":"admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js","admin.css":"admin-6a76c25b6691b4f436608be28606d90c907ba8f033f5f47c6c20d7bf11251cb6.css","font-awesome/fontawesome-webfont.eot":"font-awesome/fontawesome-webfont-7bfcab6db99d5cfbf1705ca0536ddc78585432cc5fa41bbd7ad0f009033b2979.eot","font-awesome/fontawesome-webfont.woff2":"font-awesome/fontawesome-webfont-2adefcbc041e7d18fcf2d417879dc5a09997aa64d675b7a3c4b6ce33da13f3fe.woff2","font-awesome/fontawesome-webfont.woff":"font-awesome/fontawesome-webfont-ba0c59deb5450f5cb41b3f93609ee2d0d995415877ddfa223e8a8a7533474f07.woff","font-awesome/fontawesome-webfont.ttf":"font-awesome/fontawesome-webfont-aa58f33f239a0fb02f5c7a6c45c043d7a9ac9a093335806694ecd6d4edc0d6a8.ttf","font-awesome/fontawesome-webfont.svg":"font-awesome/fontawesome-webfont-ad6157926c1622ba4e1d03d478f1541368524bfc46f51e42fe0d945f7ef323e4.svg","college.js":"college-18f5e8400331634e898a35acc2187815c096c25e0ab74aba341ae916166cd287.js","college.css":"college-2299e05f5e9b640e333ece624d4ab18a678fdabff0bc18b69a9c2e3de49cba8e.css","logo.png":"logo-7ff112568709bf97f9898fe87249b7a8f200ff1f48d537d85af87215f1870423.png","application.js":"application-9cfbc3d792599a1d0de5c7b84209e1c2b2e60336f0f01e19f0581663918708fb.js","application.css":"application-0e417478d56f42467e857cd186b29cbbc0d6c7c6e85c8a6f42f39ac618943de8.css","cooperative.js":"cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js","cooperative.css":"cooperative-8057adee2454dbc9d648305faf9ede9824f40d3bd0184e816e8035bb7f1e730b.css"}}
\ No newline at end of file
diff --git a/public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js.gz b/public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js.gz
deleted file mode 100644
index 850f3ec3fff5dc419145fdbd3ec28e89cbc592cb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 995576
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%0AT?Cw^32XNyCnfQQV9&Kxtk)l!ULk8%qKTz?Ig9
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

diff --git a/public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js b/public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js
similarity index 99%
rename from public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js
rename to public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js
index 7790687b4..6ed7c146d 100644
--- a/public/assets/admin-ba909dfe0de4d216bedb3c743144321e4023837568abab1d3ee9a28b2faa5925.js
+++ b/public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js
@@ -29898,9 +29898,9 @@ function customConfirm(opts){
   return $.confirm($.extend({}, defaultOpts, opts))
 }
 
-function show_success_flash(){
+function show_success_flash(message){
   $.notify({
-    message: '操作成功'
+    message: message || '操作成功'
   },{
     type: 'success'
   });
@@ -137789,6 +137789,24 @@ $(document).on('turbolinks:load', function() {
     });
   })
 });
+$(document).on('turbolinks:load', function() {
+  $('.admin-modal-container').on('show.bs.modal', '.modal.admin-edit-subject-modal', function(){
+    var $modal = $('.modal.admin-edit-subject-modal');
+    var $form = $modal.find('form.admin-edit-subject-form');
+
+    $modal.on('click', '.submit-btn', function(){
+      $form.find('.error').html('');
+      var url = $form.attr('action');
+
+      $.ajax({
+        method: 'PATCH',
+        dataType: 'script',
+        url: url,
+        data: $form.serialize()
+      });
+    });
+  })
+});
 $(document).on('turbolinks:load', function() {
   var $modal = $('.modal.admin-import-course-member-modal');
   if ($modal.length > 0) {
@@ -138526,6 +138544,63 @@ $(document).on('turbolinks:load', function() {
       $imageElement.show();
       $imageElement.next().html('重新上传');
     })
+
+    // 定义状态切换监听事件
+    var defineStatusChangeFunc = function(doElement, undoElement, url, callback){
+      $('.subject-list-container').on('click', doElement, function(){
+        var $doAction = $(this);
+        var $undoAction = $doAction.siblings(undoElement);
+
+        var subjectId = $doAction.data('id');
+        customConfirm({
+          content: '确认进行该操作吗?',
+          ok: function(){
+            $.ajax({
+              url: '/admins/subjects/' + subjectId + url,
+              method: 'POST',
+              dataType: 'json',
+              success: function() {
+                show_success_flash();
+                $doAction.hide();
+                $undoAction.show();
+                if(callback && typeof callback === "function"){
+                  callback(subjectId, url);
+                }
+              }
+            });
+          }
+        });
+      });
+    }
+    // 隐藏与取消隐藏
+    defineStatusChangeFunc('.hide-action', '.active-action', '/hide');
+    defineStatusChangeFunc('.active-action', '.hide-action', '/cancel_hide');
+
+    // 首页展示与取消首页展示
+    var homepageShowCallback = function(subjectId, url){
+      var $subjectItem = $('.subject-list-container').find('.subject-item-' + subjectId);
+
+      if(url === '/homepage_show'){
+        $subjectItem.find('.homepage-show-badge').show();
+      } else {
+        $subjectItem.find('.homepage-show-badge').hide();
+      }
+    }
+    defineStatusChangeFunc('.homepage-show-action', '.homepage-hide-action', '/homepage_show', homepageShowCallback);
+    defineStatusChangeFunc('.homepage-hide-action', '.homepage-show-action', '/cancel_homepage_show', homepageShowCallback);
+
+    // 设为金课与取消金课
+    var excellentCallback = function(subjectId, url){
+      var $subjectItem = $('.subject-list-container').find('.subject-item-' + subjectId);
+
+      if(url === '/excellent'){
+        $subjectItem.find('.excellent-badge').show();
+      } else {
+        $subjectItem.find('.excellent-badge').hide();
+      }
+    }
+    defineStatusChangeFunc('.excellent-action', '.cancel-excellent-action', '/excellent', excellentCallback);
+    defineStatusChangeFunc('.cancel-excellent-action', '.excellent-action', '/cancel_excellent', excellentCallback);
   }
 });
 $(document).on('turbolinks:load', function() {
diff --git a/public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js.gz b/public/assets/admin-e975e2039206e9ae2b6a072fee083cf39b8e04f2318f67bfbf1923fe208456b3.js.gz
new file mode 100644
index 0000000000000000000000000000000000000000..73ad7510e60490ed68d282da9299fdb8b34f2c11
GIT binary patch
literal 996102
zcmV(pK=8jGiwFQi@3&n71LVE=e%r{gDEzne6c97V0xXaswTm*WpVy3YydB$fl6xiE
z1Cfw~F$FLHXju`J_xWDqd$L<qy*C;pWzXd1{>~&8$wn{L)z!6ibz$Sd$}d@dS{2hW
z{hD}xiND4lhDAE5RxYY)Qua4C&eQ5*dfFN0mm5W#j!XXcbex}VT*hUU6dUodO7rY%
znp|zflgUP0mPu7^{04oM)K|IkJ{c!*nT)(?HcASwx=6g&FF$(YbeLpivf@41SXo)|
z&!!pm<Okl(isyZe3vZZbRr0O!B50GAhbvHQS96tkRK4>aL4~%W(1Q`PFHd3EFCPG+
zVU-tsZ!JC^#Z}yfq0Z9cau9mF;4-N$@{#&oB$s)W4EkAK`NyNQj8DhOXb{Nfyr_Kz
z7#rB7gSAisaXPK4JhQ-1FnV68fMazX0G#CjD-5nz5L3`=XybZb@@+VtjuPk>AM&<q
zvcj#Zn`V<~_4Fdn&Jzt)3@`(lkX5zHaM9u-F)^osg2R89o?fPv);ktjbzTw})`Ai2
zY}D#{l0+qS1f$vy(#!Zf5#=0Fjuz|*LmECtwAQ<4_zdg)iwBMYtVi@qAIF;QGe#@g
zR5jch<ke3yB0qEe8>*O#(NL*A()>Xd^)H`Wb9|mHJ4La@=FL&nnKwyQ%Qefn<18FP
zRnRAzjuRr?+B~!P5-5gf1S{3JiPj17syan{AG4|V<6tb#o)^^{2=;MH+!;QD&M+R2
zedNHw;fgBYygZ<K$lL{c<_{RVz5|aZ0Z~rg<k>LcgL|?7`lbFlT7jbv)(f!u_)wPM
zFQ`4rhtta>t2%$5CdIWtoxg^UX&oczx}9O)gS9|4FOq6nWUQC__vy1kQ_QNvMYw97
zX!30mXQMpyF6C4&0m$d$gkYQ$d6gqsbuQy-c#)LeY}WixOs1hy{*Tv7)hm~(mM>N7
zDmnd<R#sIxRkoC3YT8OBtfNrMOnqt7GtU?09WML4)yT`H<8fd}T(M?sIclADRPV5&
ztBuw87#cC$ddav<?lP9%*diBCPyt|I?ep}v@)>NzH491SNrlBuBz;M)ZPG82vl{98
zPzddLvtvH!AP~6oj<DG=^fvJN-q$=GdELVrtPGrTJ~$x&F`g#&s@X$(k!#iJwY;0#
zI{M_i?D}j55d)!V0zc`XyQqwJ{<tXOYmJ~w)Na`tyE(~Ycq01?et<Rn6av>P&fdjE
ze969k%)ca=oX1a+7yhKNNnT6ild9zRXOzWRyTZ=Dms5IbiU!1@<PU*(f}MXq#0<)(
zAKt%s2UL*|d^)J#E(#mkiY=Tds`z@ywedAraG$UW^H>@Tf_w0N0#hxkpOY92Fn{fD
zZ3L@LeXfOUoVkpL%>{OSk(3wMmYSCHFh61Rc$X<n_-e|PwdZS37}mgNjYN?X2|xL|
z(Lf8_TJzTVc<bI;3s$)URi4Mg3$@Lty4j)ZlAd*lbD(u<P7=3oGdAzAwVzJQD!+XG
zmDnZNb_vLTCImxoQY2XZEIEs(<4S1-Qb-y?Q$E+aggRF#Fv6>jRwyeHeE}!S&x|&!
zz>3!dxNACg%$^myXV4R_OB0)<*nF*Y#KBK}gAPI8t`h3gU(*KAHzhUdq*+>N70h8f
zr_)nVR!jMN7=zk2Mg>+DjbJmUW20XoH*^p+0izA47{5ZQ^*|$YW96WMv!jl^z;lP~
z)H-!;Od<43qeqXIKr6GG8lh^WfgToxMpBHZY{Z(rV;v<Udjq{a{S9~_R!g%4IO8NK
zs%z>l^w#Xgz?{t1o(Bp}ziD#DvQ@=2IkX<$8ozIiS>4uG-bR#M{9Cb0a8t^?#(zlQ
z^3&f!57|xVq0MA-$mFXgH$3(enrF$CzQ#W5K%XY3<~~hPckrn7s6S)$-6u#^To?do
zJ7CpKkYQ+hs4o6isl2w(jVfT3PoTfz8rC>FH&}y?5k#J!bil-h6$VlO{kEUTW*?xF
z3DAQEjZO2u@eD^r>Wa@}MkuvuusSa<FOyLUOvYK+p34Yy1*ntEwLwC*lpkSRhTa9J
zn&ZT!G4ghucr+q(ze-C`BtSfCt=*{N$^v0Zr(jlss(YvY@aiIkZR)SW|9HJLD=Q=z
z;PBia3(z>@62liOp_Ej6v&r$;mkw}J=;Td4N}Bc+agL_Zk%w?}amK?TfXPQ7cFtn3
zrED1HQ9*678wf&&@%Bel@yEkqGT~YlurpKl1KpgY+24MCA4)%k5bH1r#NOKp)+Fhk
z50kQdpOh2$y@Y?m9!*xTfv9mT*|!0`;WuA<u-1n^8xJ(k68dbQ5I;61<2cQ<XBXAw
zSUkh;+M{puB%VybKB9%#fD-0h!*5#6-^x6*s$vnZtIij+Cage=tg3{b(Mv;lGQ4z_
ze`~8JYYmJc{w@Ayuzt3XHp>TfTw}Pb4wJgt>dVHeDzrnrSkRBC5zd$LXCX>3PC$mR
zr!pGYATytv{%AFbT9(-l7Qg=VBOp4Yl5?~&SfMa8o-)&@jl66vsHqUI<LaVwHqOEH
zA~U6mt7++Nc)f0yZTL-lvuipj$3Ul?4sixlza_BIs;dQ7eP2v~0nf&kld*V+&cPfW
z9Vc8#QRKzaP*LsghpDc)SkMgf%gH!Fxn%$ZOKR7^rLe~jYHl7=b0E`9baa}4A(ebc
zvXNn@t=6Bjp#-rzEjMEME|(4t$>=a1U4N)zKDEESe)V%zO}M$+dHe49o9EBw7{&mE
zfQvM=c{Z@QNf&H((d)DrLrwh`NZ4`CI7{ckaKDLK+>FqFcB=dr(0_`jF>F!`^JX(N
z&;I=U;~L`Jn3{nEy&V7r*3&5Y_V&zQI|7sLq1Ux3RiD5*jBteJv)=vTqAg<gaDQ$O
z4J&R)sAIh~vX}-pp<NBVrw`U#L?vp*Gz`>RFrIrI<Tzw1KUi}^!^c2WgdRxNL+|fV
zx6|#d&2eDzwhrf*5DX5g1luFelDUG2Nf)#`%>Cn=5~u^VT4s=2s4r_sCWqCe?t5Z5
zT?;Kt*q$wue~rk8jQA|80?YvmsqT>s@e^7~NBipPs*PTuHh`XFLr_{rhu-iaE}*06
zmya*n`)ffH=aI~8Smb5-EWZTxXBmk8*5(DtsQuTpx<IH*l)J|?bvWOY1~?R+);%qf
z5llCY=~Qi1!e~9SmNX*{io8A<(s_Tg>tH#a`|RzT=M7FXBt+j9Ww$QZiel1-4nAz?
zEIPbOfFk`kJd$Ms5{GGWPI^<Skw$CCO8IleW1Vy;dSYHTf8*p7HP(~Ujk@VnT-THV
zO)vY)hqrG!1h1TvE&svThcP^#R0rtZp`_Ho@sIkb{mxLK4HzC=(6J{DM;tTM{57r&
zTQIRwr2EGepyzZ7>ckqIkgh3<#}C}Cc%Y9<Vf7Ro7eIR**vKHcpMpU<@>%OZvpqX_
zPW?489v?1+9I!uTXs*o4ujhdaFN}gXuYC6Q^*j1)o19#JQ|F*FjANMe#$jiD19rQO
zvITU&24s}*qR1~l5Y^dqeizDUmM%8tZ4>8$*#@@XV~%G-S8wdz((<X|oqD&xj%$uG
z5Eeyxo@S4;;RX6vpbq=0DNkC3IfNVQ3!t|V(`(Sp<cQ1mZ7;0sKnw&04qx-C@B6E&
zF8OzdIcbfKQsPAYHKt%|BjhD><@m-7WwUi}ZDWJ<F9QM4ih6VmBwJX67)RX}+35~?
z^hsf{W5%YN_6H72<jF{t(_!q=M<Tp_qi1sQ32zcKpMMu1bklzbDsegv<IyO^l6Xv~
zUN-sDS(7}wI5dOwa9YQ_Crcp}jyyRI3$e4fn(T$6K~(SX&(f)pFj#Qxfep}72Wg~5
zu|qWUZzHj?Um_ODtwPN6D~jn-KcR?LTnieM5iwmhtT5r~z_TZH(_N|jJUpZhvo;z(
zWSUIN3%_2;qf>&urw|f4>d<LppX<cz?6FqsHn`J~hZ2QsXh7ibOESXcI9@B_QJSNQ
zN~NdyH~h{*8`lQXWMmDQzJ=VQ-D^PjJQOUNKA*aF>blfHj_stFv(Y>QKD*)^ql`DZ
zj3<g_CiUKNcq(S}?mV+s5je~s`Q`n~r}-raWfU)}F;Min*NR&3x49yVs|gm`<@zj|
zkl6VxPct7(_C_{Gp`Dyx=qwJ)n}f5&j%Br++{xOkSVb|W&RIIHK>yM>Y6C(QD|AL$
zSqJuwL0bkGOGNYhkUWEG`PF01YY(6sM`?$Rhmdwn`LLk_uHezx%TpFb-Y5-;b8E1%
zsW?~79L-PWy4SQW7igJ;oUFV;TMm(V8V|pO-X++C@p+;L`%r<3WJ4FVW|-(P^J^BP
zSmlk~#OTymJPwl=*<MTRkezNyK`e(g2dG;EvQOT^7l4@?dyd90FobY9f#?g@FR=Gx
zHr`+!!{Z=<$|<`3ffF+>?q4YW5jx6BS@<f=zQ~F!#N23GD=I~q(eliwz+)!0;F?mD
zG;Ej#l~Q&kAIPpt>p{Z^4Lj9@SnYMK(7Bm;;P=R-eb%fjR!2KTmyOu%8%Km@gSz%T
z`=5c$*6IhrO^m~33adDhXX0MpOBU$K3=~HIzMIX}=u0xKnoOB9oHJ72IFPp*)UQ*_
z15eu$-vwU%%FdFbm9F8M!YkP9|KD2vI%oRVt^ZvB{8v$cgMBYW0(Cqtp$BmPnn?;;
z;e6?@Uv{xo0KF5Zw$3@YCQvD4DN{X$a_ltAlH%u&uV0yQi}q9Ue>x^~Yg2hWXlQMS
z*W}i0c~TF1a)YgIF`1`0+TDZf?yJN6OYs;Fk!`mdD}_$Z7vj-A@YLI{&bb+2Al41b
za?3~~%v%oTa{i-M#2CJ|VP4F!y&P^VU1#8yS2I76?vVOeO9Axny@TCOGJY+#ekk(8
z`~40(zQJ0*3k=Ky;2vKDt~ZT6htvgKqFQJeLca@t`8|o*QjR1o*G5_fntx+%cQ-P=
z3vYDNpiM)Kjel<@t5Ke1VgC>#y@R#dU=4o1v*k4<8JMf+y6$!{bCCVzQ4XPZK>>fL
zwxTlx`#m%+6W8pxOEEY;bum{~!QmUhVwdjcT0MT;rOpt298T+V&RsO$s@8A;Os_^4
zeVWhcn2*t{&M^qBS`W#?Oz!At?K7W0^FBvw=y2sYTlZRPboLspU8JK?lC60gk6Knl
zoPyZ6u%zZ|#K$>~MSVn<wSjej*KLRqLNzJ@sll!WUIhN_O2cq#d^l>`VrKy@XuD=&
zv?EDtZIYLj{WKO{KJ$!~p2?VUB1$`qovP@ZOM}m<RaV#Igf29U>1+=J5fTj&Ng=2C
z=-LP=AX#JeX5AD#HV}Zf$4J?8+%jnNfqaig__z3*a0N@pl0h-}^F3YDH=J4K8Dyh-
zOADmNvrRhPW5=9-gyZXbz1E?}gRNEMwS@)w%)*W1FxGuat1iKDY%U@Fja$V0#A?3o
z%JL~V?w9(kvCbYu30}TK*|*jhr9pDV0ksV;(+}9qB=(nGIg!GX?O_VG2))K2vUyIz
zRe?T<vpf0IsSC?zjjP>fA;h+7<EmNKuMI7ZEv^UC%~?dO+#agh`cPWL>6{)aijGG|
zj|i(;%0IQx9m5v5QRQU3t1Z+-9YK<NFVT`>D21YclMpktRS*h+xkI0^xM8aGX<|>W
z(Ga%7F-V}8G1Mwj+E$Pmm>3l;gSSqOIuCxThi};t2r_a4_M8k9yqu1!bP^ZU21T3V
zlGlc0;jI)^h9-xOAIpHlVfex}93ivbxIp7|*_k@02&ZAV@QMQm(dLwD8CmDS-7El;
z2x~ULQq6P<{DB@gHP!8qB|W!BnyPtzTSsm!Yv;=SH-~G~b#p<va~eSfv&F(yozoc$
zd{_(SpPc{LTr{h}wI4Y6O91ISuLTKVM55rP?F)#JA0vARO`!TD4=otjty;VEBXuVw
ztInF`9hkn64?^9Baa=HJmW0?59^UFb41&NBSjq&SOHisV2DNxn2RpcfxNR1>HO8ak
zh+ov2bJv?x;^MqCJH!&8iJtc`!tbQxmz{BvomUs$k*7uN$)_P+c<CFVY>UvvfCG%-
za3<3;GVbAl{J-ZE2(*P05U~OOo^#M57ZyxInE`#%R-kxey{e`C^*!I#2X(!?{!D7<
z&M35HtwOJ+<vmeSW+}ZMTOO{|ltEKV=iU;o7?@3%`fd4L=XrXRZo<OUoTp_x*2^XQ
zO|oJkfx7;(;)n>;Rhk9)SDY~5*DQzTDe&n;!J=X0P5$5fvDWFL>6j`7@6D7?x{}*`
zC^UBfsr57tAVh00-(Gy3RPkccVy2?>FtQeRbvF8oyp2-w22Hmfx!7;&s4nv_wdo~j
znZ*B@T$5qZ8CJy@epn`#tk1GM5#;*K%GLUn$~$D0_@S`CpXzx9L{<tJC1r&}sjw&V
zvN(B)=20@@0L4!$l1LQ4R%D=iw8bysi>hUgnispMCD|~uZp`sAX-Uo;qsfQ0CrhVI
zumh7E;Yv3875vt!G{t7kiQKYQ#j0$rmGu79T|y13Z$y+iXrs<0oZQ1Cf_g1t6DxW?
zFLtf&xBo)-DhbaP=7`4BK%*9JH0_D<ptC}jbHVVT^9PipTHl>|xq#}>eu~|_0|K#P
zisdz0an2=kbXW=8mc1G(S;gF2oeeoj?9@7O(U|KAq2Z~hKGV!UkMnqBhw4=qMSew|
zhv$@oV2!G_LEgYxmR>xj+n!*tB$>zBuez-%K2$w01^6Fqx%_IaF<Zq?{^CR1IWgWi
zQRP*#PyL$hAY=1lzjG`Tmjh9N?TQrpH-uaNE;y>pO*tp(&7o`?5d2`b!e;!AUY#Lx
zzX!N;JN^NHYx(Cf3Y$j>Ioba2(<v7ZzfWh9+5c#Frd0fWfMY`Lcbh04b1zLUzx%>2
z)9oFWc7AtvUyWtJTYfzpUQxPvh6O)@#HISZ0~VL+Z~1B0PjS>8yC0bKGTq)`(#v%B
zd(F8i<(;yNKc<&SKCOJe(IsU@B1=hW-S`T<-qu~^qZ4-BgL?OU)ZFEdh%oo-Gky=Y
zv}DhBB(J$WI<1nx5zA56KA*jP&ErE}k@mXgFc0hA7nj~_1w7swmJDye-)RtW8v~6J
z@>{AIGyS?BR~2Z7PoPzrotLJvr|I^-t@$^;UV#^^80kzd^U-w7lYZrtca@APR@_Ox
zP4c3WhLTyTn@Lv24Ct7dXm&O+=$bv~#Fx^{U?ogdW)QDfFt5seT!l$+BOr|;J{X7S
z{{7k$2J(>!d6f7;UqK}+GeGX&S0Em7*p3G<Zog^VBmUXJ%ZXo;4?vn=(a<PWz3i5y
zvQ@0<M)<GgB!e6A-Anu|xJl3a;y4=wA`b_A7jrqJ`~MLZMK@_b3&;J{UdSKzZ*Ff7
zMGOTtBBZ9GZJ37YdlJBpakSc1Ww#W49o@)2lFnrWE6^E61^gXF+OiZOz?pP%{2I(=
z4LN+F+6`SQJf9Yngcf1VfbjXRZivZyv)kYn`p+UABMg@6{{5=+`EydfW(!-#qD(t`
z+jl(FrZV!2uobre+_1pm^2nqzUXjm4Wpx0f_w7|C=EUg~8ekujsMQKFNo^Tz!a^VG
zJ;FdYttsphObi56bST$Y&M%2#-$-N=Y8mHSYwOiIB_clrdPo8}5yQdR;@Rd~!L95+
z)hE<qd5IJe14{h_mbHq+&_M{xSiilT1X`c*o%^(t=_gumQ`Q?>WBV}Z(dPa8EV<xn
zq#hn`4vzF6K<i-^sTkl8HigXU9Y=+p(R&I%S+?UakDRH*TlCQi4s*&I&a)kd>1+lx
z8slF;67M6L&StPjs^a=a4IcqzS5~&<9A=FEp|MdhyA{dX6h3mK2qUXVTC$7fRd7`G
zS<zXMUmmHi@Tf1M@i<imx426)+OaA8J&j`c8%I<4n?(6-xHNs@>HyWP`bJt_pa|t1
z!Xs?vA!<F1vn;RZ_OBOv!*N`e9=eJ=mFTiYozOc_je{#!$H@Q~BJ}Gf4_I}En&Q#s
zQPJM)!_uVD=3)A<I84{qgX}nMZw@rVNe7B2CIgIv86#`Tg4<gl3s`033U%Hw1oe+j
zGNZ!Z4UmTXeINq(I0(Wr(i+IARcvYs_U>WvFyU|?762TPd=@3g#o#dOC{`HhKY-kN
zVb;+ZC-UhQooTgFSRmMLS?8)qEB-79n;3A`!I!GgTrH`SFdi;s3@}<hQEU&{WJYCB
zDNJr}{UAJxy5X>4;@Ddn+_204A#Q(6{hp4Z_4PCM9ba!1CG7jO7=uXR+2NTE7^MQj
z62Lyb0kHcmwnbYZJKM9x18^KXQHnb;-^;!nNUbML5(TPYpu}1#_{~=rX?fa-Ve-@v
zcMqNbAEr<u&ly@HP}+voFB8=K{+f=*Piep><NOrU_WkYW_pLDQpu;wlz$g$n05m8n
zPMivG<Qzth7Y&BmMDhZllVfFUtgJQ`kY93ymQBC%(G3pZR5>P(^MRWK70{mnEDtQ`
z^86sU;p(iR-Q2&=s17uYIDqclGzjxi0=yO8u(e$6^6dp|+usV1WBa|}kZ(v*bzPeh
zMglX9*LtR*$yGU~%9?$cg}pmXdNiB)Biwq;=7fm&2I8MrON-3`LJ3TE7~D*eck8ki
zpnCE4{cGfkJmeid&fkDuaR0tpd8+LO5gm{E0_rVFO&A9z`PXx#GlqpEImFEXv;{(w
z<!=H`#aI}yoq9{yFGha9aoB1hWeR_HiR;B|7kvYZtb96*VRfY1odx|Il?EMIxtc5|
zy^GFi01Mfwzn`(i^(L-mBs3u*g%1-$a>L$-wJT{dJZ?WsbdgQwP7*a-B4MMqu#IsI
z08yh~I*3|$<)8(Mf_}Ro(MPR}WQDrURN~xqg`=yUo!QTNw<z~BT2;{A{p}#UfDaH9
z<EX{&N#f>dPigm*ZJt9DwYren|KHRV=85G};~P7SZ*);Q{|}VMd8Cs)y*~1|zP1?S
zS$nNyt5JhVYC;@+EkbZJh9EW{h`Im(%IkTTD$PDaz=ZM!(ubE%m6Ye)ex8sIi-^5n
zhW4G#_|cbB<l}Kt!1g_4Dh1cVecp2r8eE-IPp7;{&ye$_N2$%9fZU5CALTV;1H3!f
zvaKNKLnpUE->-bvQ<ST>p{~9(KwFzIgRF{<mA<M_?l?XSZsal~0assK`Ra;5(>GFN
z?m$e370YXup+bP_fPh)dr+GbU_FB(rul00$t%vs7p<!YJ*q}8?3KLq7;7I+}dKKRA
zchn@`rM3KvIa982rr!T_&eUin)NKT$Z^2*4ND!8Rwr?cuDh*#467(eqt(}inJd0p&
zeLu@tAnrk1W#XP)nQVccL!KKoEf%Jz{RT1wbUz;b77w8(*&)*mPm}XBBL`Ij8>^wE
zrv7JSgdO=sQ~G0rqcOtIfTa~IU@`(un4V|J=yN)%^R}>J>_V^#wo`eU?`P=<i0Qll
zC1MU<JIr&w0jg?V#p4IPZubyWT5G-&+0l*o%2>d^jz=+e8Yyy1(3q_+0N|;{&RD)t
zlb_YunKc($3)h4!+$5~t4GSc%ZiCuuw`Q{#<V%HCf*NF@^}29iMx*UhXw)v)ngbYM
zh9VG+Bh^jUxwgD}%#zug^<hC>X6SX8T#ASsT1nDrB3?wBM&iY|MLueWZ&~eX(<AFv
z!CL<hNHATu-XjUt$^7(xtPDf4wbMJ#W>)EC{*MpN2kZsb^z1Imw&o=pUQDwuA3%gf
zo85!G-p;00{4}3tRYWgL8Ybyj$wgq`|425>_JP*$C1&Z3y1GmxKhb=T8x!0>Z3wfF
zIt3%?=^g!b{6&#0QzRZ5;P1=P&XeicS;AZp=+Yx6FDp~1c~9@npgJ$)Py4Zh8CWhN
zoe`*Zzy<I~m^i=^eR58`xKp+}Rj(L8`6l^RJ;n9V%!L{xE<~c=+(4MP*eM-F>>ZUs
zxat~AUkR-b>;N}b5uH{!x_``7Vy;A7ZzrttWtZ%vMfE&{2ru)4M3h8J*F$9I2FwmS
zN#H;c^h0ZB%x2vvvg+KwZ<J9zVRKnkADH_mOxRAlOkq~*)-!YGAqsPKn9WsH;FE?;
zr_mM8^>L{YyI<6{>-u`QDt7E@Z;l*U)vd!yKmWcpY;(7~N%T{>>bN_=12#~L!W2F>
z2Otls<1H{w*CRi>pU(c7-H(Iy1nRYS_q+Rhy9Zmlvo6fvFCISJn-z~9J=)v})-x!J
zp-FK+oBgx6pJJ2VpuM$!u(P|pvyV;U$d4aB>}}3sY|{<a3n)yXO?<zY{WHFwVVljt
z`fhi(*WKCg9pK~0Pod4;EQK~b7$=6p4BDjk<Jmvc`vtby8nk=e?d_e-ovp1dJ_pDj
zKHS`#W!MM?N)cddKHJb}Z+E-5zkjf|<a~Ap>%Glxx4Yln-duV@yD-l7-qz+;Z)>}^
z?2PsX?d_et?#{vf*0S^22jKShy4|gv?cTBrbO5j&?Cfv%wzqqG%TA~Vl(4<o-Q8Mt
zGQA!SbI{%H0%V)Z&Zh^I&;v~GcDHu-H<zV2AcgHNAiCG>Ej=Hkgq<!d?B?b{cj-wH
zF>LMbZ0&4q9?YLqJWKEYGv+&@x4W}<u)EXi$|>!zDedV~N@v;qf2M+dy1NHE-QMoj
zrkv9Oo6?p(rEFH*|7XTAzP`J?wFd;z)0SzQ&1herQ8A0}|Fhs5d}|N(>)uvZTcj?V
z&!&4mJA?LKx3>fP`=Gbve1Lq`xAtK+U83!!rUS$5?sm8L_P4fnmYvQvQo_#8*53a1
z{<70K7_9H??r(1c?)I0R4pL9Icd!p+O4PH=gpgtF?``dF9qjg&oe%DBAc37Npw-^8
z6T<xfn|phAzqh@+x8#&I2ko66>>|M2lJnU^-h&%qA2{8z6M_v6Y+(}?c5iQMd+v-r
zrJn@30aQS4awgksCi~h<K0$Scu=XZw>76~8zM`~VkIkf~&Eylb5!<G>zje^v>h2Ju
z;`7*L^Vrqq@d+A<<%fxP4|aBT)fBd93I~oEAOpba2f#qP%gkaM+05SN{sEBwa<kaO
zA$GP8_87ldVh&v-;R9H@?(TMXsab3Rf7u7P4tjgr%gh3K%g#P*#?8&mr6vJ%3w3uk
zdk1?5OHE>Tu)eq3-8|^+A1pHikbE%Lt=;YI{k>%-fW*4J+1u~!>=O%Gf|x)+z)J6J
z!z{W>O#y~DH~<x9AEd*aIi#O_5O{IG@d~VGcdH9bOHN~#O=DM0Bm3loyh{VIS9_bg
z`v<-4o;H&%o5`k{N%6@CahC;>%WWh3**@rMEO>{_W>3u~{^WxUF9N<@VfSqz8&>n_
zvF+V+Pl%*GXffNc%lCRqPKns*!8RZQRL7;KL{z^6_V(7Y^XVZ+0Ss&c;U6qJBjnq_
z>p}h7+BsNqLMZTHGxlJ2Z7(|?)Dw1gQ4)c4U3x~ak$b?7dON+{?WLzg#IOU1>+W@z
zoe?rVP@Xq?AXg5Sof8nl9w2XjZ*%8h*(t%!-U6Bf`q6ihIU%%qqGBCC=vQwLW$XAs
zzcvR^x{e?8Yikh2>-aI#PT~vc?10%H4-U~gmPFmd<l*l2VX_`=2gPv$^BP3>Zl$<*
znvasl=u}zv&4Tq_@bKY&y?8S~UQsXKg7VF6X=WC;j&Re3ARQ+I==c~0AMnB9`{qE5
z2tT$4O~a&Om@G`gIGl!gScYfl@@HXt!{``PflV|j4z|MfCg`BR(e@6)wk+NbMd>~R
zGm8Mk>|u0v2#dM99VGrR1Pph|=_w0A^)uksA<#rX^}&$0o?&dD1R;)&yW!mbp~>5Y
z5mOwn7sSUIB4%bTRtBi{v;WwB_;8D2Ok}Oz=DvCoW{-Au0zx)G9S6MU-mdI=fF4us
zhKu$eoQ2b9+NpB>N=HDscoU`Hd2kf?ottjBe;fR?fxbz40p!c9@~3E-L*1~{%X(Bc
z!|jADI?C~LXAqSk2WDu68<Elf`z>673s>O66>{M+ws0{E-o$k))VksChi6Atji8U7
zzF*R;+GjDJ-8-)*b4#ZP2O_=T>v>!NA^U~Ch=sn0{7G0?i^#fzMHK!0n=Il~-{h^9
zw#jLa_X2=-a$G%nwErMk-@cDJi1>*=9Q#?tT4|jL)U!U3Uqn-%B6g*Ji@h7H)v`mE
z*z=9!lPUU1+9%T&@ZVsgQ{j81s{mumqG^_t!+4Uo-eOh(v4oWo^CZ1h6ba6WA|>yz
z?oi9{D8nM8G~jfK%b97bY3%euPAfTz`>7gysCj$YQd3O!Q{I#Z8I#x48o1Kq*)D|R
zP6cS_RXeBGRq~3awVr4{BvkmOLEuNV5klt!JO|Kw35%nwpLI?NOA4s5DK9kKYJ`xr
zdq@MDLBZlkB-siE>?h%7fb=VYZN?LOg8pR*#K`B~<08SC1avoL5*@d?t+3UDf1B`c
z3;u1xza99u3;*`u-#+|1Xwd;z>lFSC;ok`UCGhX8B?!H>Guj4Ab~8R5Zl7+(d%LFx
zd%c6v0lJ6whC2tFt<@;X{nT$=B;#@33V=S%>mtlc>hJFCZ0+2yKsvH-($VWzOqur+
z{#no`Df+BxaT{v6EoA(=M!B<@_M?6h<vLSJjLR%l)SaO(JggpekC+QP{^nQfN!Shg
z%B79BS>}usnZeX_LMQ|U^PDT90>P0$wGx<9R7x@hWa1T(Aw0|ASrDE*8Xno(6hQLR
zXxKjEyH$TihmaOI$H+o$+NY~l7>qlm9gxG;59l~=q|J(*m_)8<HJlB5{3Old;@U51
zKVkW;qYqXos-1a!#!a;@4!1tD?X#{n64#R=RaxI+LhVVV+QaHy#N`F*KdO;S5z?nZ
zwW7ubu8G;0;hX^3fb0gD>>Y%##y3(XIbx=9&Y&AZ3kJ!XaG7jO1NKOYZ{ft1Ens6R
ze83cdvWjR7%vzqW5zD}9Ui!qSIBGb^XNYRGj0KCjp&ICJT95;==SlUU!kZ2?5N>er
zzJ^{ld|!tpL>T%CoLjT=vetR!nqWoT-khYAoZ4Kg4$)eD5+jh-MSiW%0q-qTiKmgM
zQ9=V6B|H?==$EgsamCOuC!zwiwCZ@OYiU!irA?KVrh!o*)94;fQC*udePxR3S_XQW
zfm)Ef%c*RsQqMA>vc-CtQrRj}*;4!jl`Re}$Z+<AY3C(G_DthIbl*@fja<?QO)!{D
zZs;vz(0}?Fw$>P`zJ7+7HLK0%ncQZGE_9A`%1`V=JWh_IROf3pGt|U}Fc@NKFlgw?
z{M2PR)XAHyi1^6X^*B&WnlZz|WmyPncO&3m%ojnY{{5MuduB^8MmMs4Pd@1e&BZg>
ziM@-n>X*o+IYRIcef9+{h{nO@@=(^#8SjUv+r@ts2z-;fhZ1bm!CD*J2o~vJn^qeK
zW8rrxowh;~!?^wTjZ~Xzk!r+e{s#uAP3K(2jM>ztEaGZTj9Dz=7R%@c%PGk!i^mE1
z)$-4j1)E)M3Xx@h#z2=oi+2g>Rq*BXvJVV~di-|5;<Ntt`qj@>HQ^DK@>vIPk@>B6
zZ$Er&fm~k|tOOqcBLZW;Og>Un^=~DRfqDo#jQ903Ma}>bG5Fe89W6evB~zC4e}mcv
z^BO-M4wFfB=VpIv^MYj5#*kL%z?|r!=9pxpO<6`-p}amh3j7wnjHg}EgFx%!4zX<0
zP9eittw1(+Pt6f*dRHoZO%QFoOvIlv%#UFu8~J!8wZklt^z7Qd!LZ`KMUi;*Plbf(
zGn*F}2fU}6mXD&%ZkGp^vyz8f-L4V+Ca4W$Xu^ZKKeKq<L$0n`#kC!i)FbjScb~Yx
zU`EeTk-CdZHwrl%HB8rMy<~{p8Vj+bRlyiL4DrTfIUZ({Frw|&*IFI#17W7`@rMji
zYIp{1<3**L+e5)y@eRA4g&yV}v<jg}ie@<u8+UG?H4zR~(~!f~uhvcr>B9v0c<n&v
zEO?hp76^Y3?ffW8j*32!Ch7Dd!u8)eXgijo@PD8TjGF_ic^IQZ{voe1E*!CVU5>@1
zwx7w2!J9@?_`D!a&ZC%@ly$!>5_MJbt!l~5l;dWa2F+q552wfZAUOOUAyNE(LZX-}
zB+?%j5?W|2S#Ecd2O6hGE`Us)F%VFA6K(%<Nl~DDICAi9P=@~~HjVdMC=z-Z=BzlN
z#*_vDCaK$au<~(QoaUIqvh;R3o1N~;(|mGWq~{lv_y7NY-e$MA?>&jjWEfvgLhse9
zrz_rrjg=MO$u$r4V&C=@sF9+Zayr2X<7DJu+lai?i06%fhA`J_Ix8SM>HdA=Imh7R
zEWIR6>_tJT4vacBY2yC>nwF`?`^jk}gYbv)vTcXz(c{~2I8Nf?X$*?118Sp{s)_s`
zwxPHr^dv5xCFA(I?+pIedT_KM!Z8w_$sdf7qr6f`Zd?pnFJzcu9?7@z;oy^N#(CY|
zio-(4Z6>pWjE?=o0)=&^&H*VWL0-b5MCL6JX%G|438A#A+2>&*#k{&kDZYpl=4^Q}
zbCeh>IC5-a?j|A9Ob$u5!ZyiAjCn>8U2=T>>iO&EZ$5s0^Y+<u*v$gEN+!Ml<iNgH
z*CKC8fS}oJ_`}pfYKcQCN*n?v5D4(98YgwsO7l4)reUF@ka&%H4{Mhbk8=CHCtXbK
z#L<%gN|MOAL9~0H^{jG=AQ?!NIFzJ&9E|dig{f<vE|)==hiO=%16E8Sjuc!sw;&T^
ze(?lYY^-P9%Hb!yAR?WYbE|A&B080H3mu2hQ$#96N*(Y4^P?OGOtmrY-(N+=qXfBZ
zrX>mOf+qJ?{qkgk+JXv1%dXuDZ=5>oYWEg1&lr0=^w~6~N7KH{l4fNLOJT~G*38~b
zj=ki@WTj!URnc8ZKqqM)^~5bzZT4(OTsnwBihM2qUE$dEjKwU!^ZA!Te8IzJ{+cwI
zI{hf?SNuBNYx_|Fk1oqvae~G9Kdf>#z3DU^IU(l}0eA=$B~kBiYxhx<99Gf#dV=8-
z2SAk7Y}VW6pZxbG{XS~7Tm9Y+`?}rgZ+7XcPlv2$;~aY4en3Bp7^K-H=rZg3fpO~4
z*Xs6mtjb1B#ib27qH~?3^NPO!vB@luGT{(W&kks-2y^!|Uwn`8DZPCSlMM-oxcV5M
zmiZWLykFkGidZEuy_hpn_{29KB}ck4g;njgeSc96t_^m>wz$~{4B;X##9-`kFJM6f
z36qh^A$(QD6Q_$;x7M)Rqlyj*@GA=KurgiFZ|U_9O^n5WcQOX;qqWfrw*np>v(c(|
z_zqTljv(bbq>7Z-G!Z3^txn*7$Dd9%1`mAva&$O&5NrgnDe#Iry9JL~1px*p2r}fR
zY?>Rd=m%<Mfy8>P&sTA2_Pd~4HNG!;ZTEuX?x5E5^KYOCmKKdKhcy>mzC8Fl=^TIR
z3?BT%u+}xOW+5#t@x{|~rX+z>-GB0r`m>V`{Jp3yXYg-4`-Xo5JY=-Hr#Fy%OGZzw
z=V={ikMKkj<@3K!<MBs~-<r+%>5xW^#JbHPc!TDE2yJIa5tn1tQDtmfjv}+~Dkt^%
zKa=Yw3@P%pTcRIkiQQ#4V@&DJ4asDCd$v?Nr@EN<mEsD1uwJQcg1V!t3CdR7J3v;|
zI&H^>q_mY}dBSxQz(OR3s^F^MwyKlO*dQ^O{pak?m35aXlSwF*R?sEE{LtJWPQg?7
z#EnIE36cD<2z6q3N(x>wiYnh#tY>`Tk5Ew`y`5H83sLN7@gh#^Bd|h8ZI&wBs?7==
zwS~!7YoQ+KtuPy=lGh}kK%v)mhUgp&l_Du>b@Ra3-&&%qzy18)mkybt^XB=-zrKC{
zpPyeme);N`_s=6xv^yVPzJC7pmyfcn-Gjo4**(!N*3b_*vr)5d%AFLTlQU;B5XBLj
zeU?}0+4W;}(DH=xdT=`V!19`hyp=?f-wiB(kgNkT1ig>7<gq??`wF^}NTe~6(NSd;
z_<`VC{PWhBFtaqGW}mb;VZga6AKGb-6LR)grx531GuyQ&nWp4WJ*pwcPNg$<I8MF|
z^8nQHrEn#1v({V6oXu|cA+y~z&(!_<Tiq@yd2$Kl=H;(07~!eed+vSnE7KX8e1ok@
zMd#@AWToQlO!-9Gg8nfZ8}xC;_A-z}eO$JsaZu(@!%#C{hdHdn5NHOn3!R*I{3tqA
zhP=DOKLl8-Vv1Icy{#7jFInZk3-}fXS^&P34U56II#_}WMJ|V+N=H;l3hZ-e+B}ii
z4ZZaF244p)^O8}HBF+;q@$P(J9-mc7!C`rxjqVN!rs%pm98ylqVRB0xas2uD$Ck>-
zW}I{gS<*|kcv=l@?fJu{4(jocWCPXY(9_TCNpoKRb~&DZ@~&}@_gs*+Ou4Ex&ohxd
zDw-p{c~#0!*Ps{hDs+YtHE0^Vj=)o+{=(~#bctMgk-4&JBQ)yu&|#B=w#X4gFW36<
zg$$Yk$;B;2E`g%!6hfNVYBpi0BZYOBa8DY9yIPhbhk*5sp4|{SqFU>^jV^tA!CkbE
z7ZjwGj1YHLksnxT&{eDe?L7Dep#I@%yLLzsxvv#)jUA7>zhGiKU;n9Vvy|}|rj`h2
zpPsq(gZ)s<U#yR#%{%iEzYC(d)IsH7eth(0KK<|^YIPKUY>S@Tr_k!=B=fvUUZyy!
zzDI`jA(rtB&3*55oDaWHQI${nUYEX(le0>Ezew;@t?zA3zR_<y&^s^kX*TM6f9iJk
zcF)eJ{2%QUbNBSU1Ne`1Sj3qa`6?Y%7hY?<SZ`gHUJ{o{8~LD@PvT)(UE`CDO?sxj
zQLQvnePQ0zKKnWbL~V`0K=knc0o1w0^wZiVyvVPbcs!ntp_0kA26w>mLK5pN)g8z>
zOz79Jg8X@HwFFgwocu`CLM}u0`V{q&m2{LWfKJ#IP!)RMe2e{%FrES9wE<XCiJ4~2
z6QDOZYrsQ^#16jpLqO4!s*7SXiOC56o6>AHF=Up6vyyTN-%90MsA^gV2l|Y6%kbQz
zOzH96TQxLWoTUXw7t9;#hQUHr(*jz1o99HQ9Uvly-BtKzh<ahuL4spaR#&R&X+F9R
z=Aza?K8;H?AL4Fko*s5~9u(GKO$4_r7S&1SQ6qNr%&)Fa8pzbxt5MU@zAgY>W}q$r
z^&Ytj`>w(W5G1~vvcyJ|vH2X(&?&vMD^bW--G+b(SA8fU-5Qoa>|bAP)^+2UW~0~b
zTF`S+b9A}jNOwNFnzyHV-Sva+gNg&#`j3`oQ6)9qe=Z|gaQZ0Dg=lm-eyn6X)5Z{U
zuR;kX@?(*@QBD6>LK_3~>%h&~8%u&VO1~0d6j=9$UaZxi9JC08KU~#%Qsh^_vmTG)
zNtF~$PErvuBtuDrixlO!uB~xJ%qrFuvWZq3EjdHmyJc6b@-P*s#0WUu(#xXM_ArDw
zlv!rGp-)q|4W6Cnpn!kOg}Vmb0FQ^}p`_uqHmA%O(SKuKu0F&mv^_3&?YSLmX<1Ga
z=^zN{ws&@({LJE$sD$$L<Eh2yLl#c}u{BQu4fEb`BrcQ_fNRA+=sf-+F707vGmL7*
zl*xGi7)Xe^JaVlt8E7n^hzF=y73KlG!2Q?=x8gf<I+vcl2G=H~UFQD3Io-HCM;6(X
zS1Ec!;M)*XV=wE|N8UHjmvBHoIOMFR-vr1UNVu)mh%3}y7h!$@R?dLp^Q-p>i#@e_
zn8fEGwt%0fqqu7JeTlhR=64g}EYdWfGFM?DU7KlQH~P+<SV3>|L0SS3YGTjK!uvAa
zU=!Hoq%#;Zs!zJ+e<VjweGDF+I2LCz+A93<$8C&nHAs=fK4#-V&w2I^2<jF2t$eFQ
zmmE-<PuP_>Rgagjdg^S+QXd;tD1HzlOif4L_I!el`J`pT5U%1|H5wwF?O9-5eLxH+
zvuF_1%0*E6Oo6@=gw7_*0@-u>r!Z_baz?pUwbMWm2QZx=uK;MFEeuU+wMoyDaXd`E
zw_D!a)w4!6_3Ofht|55IbUgZ*-VrSt`j`(U)q}za<H1p;xprh!hF?DuwKioyDhrdX
zRPb^H>yw_PiS-&n5vdG-Ol;NVy{oxjgn5JCQ`=_FIAMxBU0UJiU9mTRxsOO(m~3Q<
zC{jw+qf^|J^A8ObJfO6Q_ma1wNGal&+4`DbFnebd6xr8lND-A$JJF4{&Nt45>lYxi
z`Engs>n$3pHSjZ*&^}qffPr}efY0cS9Oc3wIiOn>1uO5dC(ObqBYF`n=B<<2J>o~%
zVYa>=Oe1^?b2wcPtn8Q3v;zVsDKL~MEUZu^F;H+^4vrG|)5kx6AiS2D`cv4LMLhhH
zjQTnL5Y_v~1H`-d$<p*p&7e4KCsJM>#E8rBVR-6gOq><Oi2*@FbT!}<)#gk95GyJO
zG+#anZYv`=$PCBx3<T8Tzdo{g^S(Z$=NTx9MKUKE%#O>Zcz9zFSWBKGj{qowBr1-p
zL5Jfw#9Ijrmz7Gxq|=zne`SOFVOXRSVP%(Z^6F()BfqL1KgR1*ENhybBOU2&!TP3t
zTcIOHv1Z)=p2Nz%okK6`z!`0xiFotF+*+1WEK7#Vk_Ty&<KDunS?qEce36yoRSL~@
zP@12Ck;OMdaokmT%j(nxnk8!Pc@~ewTp9wN8PJC!Tb2&Dx@nOGIc0T#ndA)Q6u)q?
zs^GgKLE2B{Y?dBX+6#<Wsx7Vx7Gb3VUHkSUEkxL!)@wk2-3x8*aD)GxfhfgB90^aZ
z(Tjqa1CAQsMJ~mmKDM);W(^@?eTXDU214nETpDCidYlgw-V#5<w-!(`IpCuD@&X=G
z7rA5H<dN7x{fzxmge@oH3XW_sO&^7x^Bq8%pNW>a71*JJRuHFr$!n(q#p5a|p2ldJ
zh628N%-<clAQv6>0P-4vqVM<b>$7!C1g6-s!WZRkRVQ$bqvGrAv0Dt3vU<jQZmlKa
z5|fVbkIcK^%It7Wpz}i%bovX4mfU_<40!!*_sk(f0uux_kAknb8%7ih4<uuaX61P+
z*yPB>Fb8_YY?@_EQxJ2sM@)<no8-Br006)3{C%1f*W$7SroM|ubRB^6gS1`+(c1z}
zkoKFvW;N)}rKWG$+6E?SQ+frvQ>HtE$9d+`WJMF*r|jFLP$LA^9cn4~&YQaAdY|W&
z>-Ge{ai_>$#+D1A`5~$B+C6L==mPOVQT8G8x{5CSqCO-!0{P29E#_R4%yN(+HfnRP
zORG@=zsQTn?0$rCA+@+RI@a-HE%I?Xiq=}|pkl8LLN7k1mmG=$7<U+RFWhZih9<>j
zoT(G3#w!Jl!#@U|fDrIk+v>i1(f7c0m%<wO$@R--|J|Iq|B0sgV`F0oKSqeY%<7!X
zurP2tl6aE@RqM*fBxJ{w))o`@2#X_oRM2Jq1hk?8Bw!N?e0+@|h{u#^K<c$bX<b&o
zz|-Hy(<-NTV`CKRf)mPlBovE&Y6!#kl-J3#e$wb5=-RCux-IcFO|B>jK@H4SmbWLY
z0{Pc@x3$gZ*Se)D&7IOtyknPiuF=pXS1hy+<)$ZR@|;c2D>nP8H72ZUgL+J18;Cww
z=C*)#@A!R^jglg14j(e3cF_NX4Q&2u-PX#qmvvGyXZ>}Zpp|SnZqruwZQ4z`O`F#|
z4w_RU(y(}_lJOQHibZj6R_zv^xF<*T1+S%M%pU{YYSXz5!d#2%f*)+k_=2z8J|xBm
z{|$86xNg!xh1830)?^6h;d{x|6BgZI$CFWYzBVJXvK`VPju%WY=0KsHNcirfW!>Oy
z)OlKG@wiNu(V`O=k8aEO&1w=?l~GYLPM-B&@GLH`vmr+B6m&`4zR&71NxAa}&qq~0
z8%*;jxN&N8;}YzX0x7R#3ALsXj~WPL?n1z$H8tTpoT{{j@e+s8lzz|zT66!aGi0F~
zMb)iHGD2o_66E5dd`20#F)4ilf0W&%?GZf}i?(0*PN_PdKbKPwjGsT7HPLvwxkWzz
z_9_z>st=V~U*{b9G;*<9*<7XtM!iTm$~9nsKo*JjEelZ~voW!zy3^0qWnFWG&TEad
z0qYHTkGRR)Lui6B)VE~4Z>{F7yfl`>Is-Sc*+(PmU~XZ~F9IGpcbOFDbhW~lF;RjC
z8Sj{HPAecz5D;>@SS?YGo);4KjVgpstV#=);~|7P4?>=z&r(9%#GEko#T&L*b-$OG
zre4YL$0<Be%#@-Qhabq%nX}fdwM-IUa{^i9NiL|>0t{^8QU%%7MCj-%)P2K<$UUpL
z#20(>Dr%|(&^!Edk&j{dMKko4Jw+>NR3Emorlpft)6(cPt*JhE%)>*obWd*ixJa0v
zADEMk#W__Q38S|4=Xj5O6zYzRKeveq;#@*(^da)p-$LV?N6DD+1+*Vbl#$6?UXMTx
z1EEtfFJsOmj2Y0$lKAp?KqYGOX7CMSx+~~5CH^j8Yr*7t|MY%{h6ydRrI(%CLdNjD
zlQd#Amsy)1n8ZAu^#>EzGMue$6xd2wY_CTXhn$MZfF+^SGd7ttikUy260hWS>Dy#P
zr)Wfj<_Hi8=QIAy*?R{FH7Wz~)F}k+#&aG10vjVV(LCyE@5ebzALWNROcY<-n-2&D
z99)<*sG!y`fTz;*jfvS5Wc@TvX|4crk)${<Vd}I-lur3oiY3gIhMn^z#1jBmLi3J^
z!4@*i!y_l5(Pe2(LKl$pV(CwHMGY&P{mj>U8s)y}O4NyPt}DhzA0r!6yKtPFE`g;)
zktMAy!8iXL(QlBlK_e)QB(eaE#uL=#L0Dc4ELI_wQ2OR_+vR7z+(^qZRmaTcF}=D2
z)3?dgIqUh{z?v{tcDR0pJrDig`pV4|gw^*PqR@F1+A3xJEGlfd9K7v`;?$0o;>Z&-
zZ-Gp>;rz9qgf@5WW4_yB&N-To=V<CyM{raKVZmf7`YFT~ze`l1mYR01M<8b&0hu~4
zXC8qZJp%bad*{@09)WD0N1$+e1Sl)!e0P9)zvAKd9F_5n1>m^Px(sVPai4a{Q$)W&
zL%dkt5dUry8)1H&jijY5B(B@u^P8{G+r7;RmC?|P$O*M87Kn#X&!uP*s*dT9UOKj@
zCV~>$0k_SQoD+s&DY`Y}q;r&89-lEsnaD9EAt@7i^PDgqP&-yB<^=)GQ#9<$T=RHi
zVerQ0qjcN1YsR{n!NPpY;ARrqOA~Cj`n{yZ2dVafro8`PH}dazs5!Ueg{Mba3upQT
zrIOi4{1%?9ersI8a4zcy@FgFCQj}BD0DAkLbgZ!zxr~c1k3|tGxFSEM#$@Ew^AJ_{
zzV?WvFD`0%z>IF4Xg#tgY6-*IDJef|3tKG?f!>xGyh}89qSJAdYGe<u`<KP>i$Udp
zojSFI+FFa?=fVjE;WBE-KWvCI_vl5q+(Fxq-V*?>laI%*<19X3c<0Pc%9UrVwYmeq
zew#N1cpa4^*R1?U+!QFO=avb93aS?+{vUS}U;zY+!unbBkNLd2#=O$YtjdK`+||W9
zp3}e;S)fOUeIwR#9rE~i(VXXTHlx@1k~T3|7RN0H_HVxRd8Zf}{<pVhXTTi7YrXJ)
zu|hisjoHzn6d|ITo<7>hx^X11B6@sESNy~cXkMtT$Wp;)bfUjNbm9wfgxLI&T$AI1
zJ>Z>Su(){+Zbd>YO!25*v?2Sf2{A_};^inXgs-K<7KaV=8UXQzlIie*Ml$=IOshGU
zHu1#|?A4?5dnuB5v|JiXIXzIx%syx=hcwkL54gI)lTABU<kZM>EM03>M;uMKq8-ZV
z@%9X*Zt|$z<Hr~D2y>wh6WB>&`%~#OD=z>|K(fEmGx9@;OX!!jT7zXvxo-7wB*k%$
zZDlL9)nP>uLD_MoJhs|<7<CNm-dcBd%i47yEw`utFOgw%YP3XB$@-mXc8xa5`F-f5
zz{Dx0P%{d3$(G9dCJ{>=EyRhqTI5LG$VcTjyzRS@yj+S1Am$ck?M~w{tfsgoR;8C|
zcK$lSlmwD(WQWU3QKL_Bq(#FWiJX+fycm7d#^KRLbfvi!7yxon)-tAM+_&Zy=aP98
zb?2w-+=9~diSl#_0ZTxI{mD~U`X$b{4X}qiHCC$uE`D$6u8_^g-}7u_VNZ;MFQRTt
z8^w_tSoei-zGjJ@ddq&tg;mKtZA{qrT~p@MVF~}1p9{OneN^ec7<}`yZ|Ya`=e=Qq
z-NB}6T-K{pMv<{u_3X$-?zba(p|P*A3}F446eSAPz%YHITluQZ`Ykoy*aWYxgX(z+
z8g)@RXn$#BFktUUiHt3BWZq~NId=F{o&!Ql@xb4X<eHF?8IO0sbFsSDOvFBpT$Z#>
zXRCfy<BYY&V5>`4fB|0+%w}3_s9au_2p&^Kskl<#RmD!Vpw^rk8-b*LAjqk*?w{Kk
z9OmcBsZGyT=Ifa!nyFq(WNvqgAwE$f#puyKe$#tOIA4W+HLKWOF5btDP$c?EDDj4<
zstZ<U*1W>SGDOHC-g+_$1oM+i!hm924-ncwmwK{?`Ku%n!5+=Qlg)gbm=fECaZA1_
z9q1!JPv01OY1~!waaXx<$5N%GW1rIJE?U*^gDja3S<(!dT1;3?xBN1aWi)5QV9)hy
z+#-n_>meD5K8{Q#5jA$;*aXa{&iFf?;ftz|F#)IR#`uEH=ZO&;ZWJW*5<l0n)3_2_
zx)d3`ed{iyXQkVAlp2!%F4?iaGhe6^LL+CW`@v#3ojI)=5-RAMNct`cJYj31hMHj^
z-|20r-*(m={=T8+yw!74>Nvqonum4gcNVX|cEM0frgKM<WZLx|2~vz|QKZbm+Pu`J
zwb-PY(Nj(Bl)6P^=oUv>?T<O*4#`Nm&_F3MDtyc*GPx5k;wp`^W@y0T@N+hdJNM;n
z_RD4@Z^AcY)_rXphay{WUFz8mOH{9$n3y@~`C{AB@0tgmrxY%P<YTj^c-|auzV*A|
zb-#OC+Y>gKFMBE5a1R8>6=sI0Ff&9oi0CEn&nN-$Im_E*E1IlW^Dnqxgecx5=sSkA
z?;-PCToud3rK~A=qv@_<vUNxu#iOri!?*gpTehu4x9HTmOP{x{gefoQ+Fngtc~v-6
zZS}jqTJwHr+F>IL(f!OLGZnA?N=lceX|}Cz`~_hNF8|3HCZk;R*1`F)3#<$N?m-q)
z(iE7WL(qgE>h6fuv;b1im-FiXKK{t3%FpO_N(z7EI30d@GCe)j-Z!I{>E1>ve+mL@
zT3D4up^@29<pdILOj)AW<IV?R`SV<dS_L}sWl!mlNl)i(oE)+`#%ZE&y#K}!511N<
z&p^FMwf3GD`C`-^OrCm&V?uZ$-aji}IwOwj>ZgT-#g+rj^tyt2{bz4q^Xp;^p)DKd
z+Bu(&4+evA=%{6vG!G&}{>qB@lnZQkcKWn*-xKxB=DpwRSaUwAoK1cJTbk+u-<xpN
zaD=KTt5Gh~Lr%Clqx5@SSE5Esf9Ls8btz2gEPM=M!zje2L}}VPDjuWJ#%{fU1XUib
z;K<NIUTPO(;F+HZ<tvX0E_H&Vye~zfLo1(`a}{5`4hFxK87->Z3eVistF@pDiXS|z
z@5>|YF8h0vIlRaV%_h$D_5N@1w&w80;wb(6)-{F3_e}`ivP_y&R<Uy6!Qq0|`)E7~
zswJUow(qUOCGoy&gO`Xxu1hWNg0Az01v65^<L0dABD{mjHQyX|)GrnsuT>T{*hSj!
zL&e>-(m#AUKe)JeO<(BZc85#Pii@5jE#h+SE??;1GPb|eyu*eBfX&^7Hs8oX^8^N!
z^kCuAaN}FBSSt;$!>VdLzF5|-BWZ;_@dR6R9jD=4a?E;px{P&!3Z4}asU@}WgTs|2
zO%^K$j&{oM)U-_Izxod=gDBJt8GZ^-2UNu4j^k3gi>1S~mPB*DNy4x@p?5MA0=I$V
ztsTpFA*_WID=22*2saH(|BuSoWcqj(x($|z8*^w{*09xGLdh0)t2uOB{aV3Tb90!P
zSNklELgATapSI9;2He)Rg9ylUWRW*=TQt5Bb~&zK=IdxgYUA7K7?6%m#b#(!OB@@<
z$VWhY){-$zF9Kt}fqI(Q`AK4%L0D!~kv-QQ*EEt{FV<MbrV-Y+JFE1(>JDgxdGE~Y
zbm*|wc;FZ{rlDV!c%2-C*D$8NNfw6K3DPcjm1bXnqr72nQ3PQL4+E^5IqGs0qZEQ>
zcznP|t(hh-=vWDD6R4=P1`Ml0M&7|lY=H3@OQG+}kT^`&GBn2s<vW`yKMQY|+0sv%
z&SjScWkLSIW+Hlu7_QHZLKRo#3rOCv3EJ<_TWG^AWMd86+F=WZtH}ar?lQrqm~`hW
zBssC)Fna1&p?ZsCVZQmAx!;hwNP$}F1)FnmHXpE4>Yz>3WWL<;N5CSq{Qy*pz*!P6
zmJYQ18$UT#Skkd&Uvk<ceCChAWTc!czp8~-8JB#YX@f_%@m;1g+){nd%dO61qVRN;
zyfh8Nv8?>|J5$x6kp5C_I{a`<Tv;p&GMdX&_O=AZ7%n@aQG2Z4MiZ71c3-b)dJC2#
z`<iB<4dnLn$gBhMeL-w$*-_TNxut~6Zj-DupP(*BSNcuEESyS5G|iQcl5x7z22+%c
z9v{Vh=|Y*-9MQ&UR*5yNfV`X<@fWO{8p`y}Z*y5frKxIXaDL!YEb6*}W5iXzs)>%-
zOy~z_=`q*r^AXbw@Y&TxI=pz)!>{qU`p@JVzYVKm%)jDIY5tW0*x`HK+;!<Cb1*VW
zEEgx)w<U!jhOPMc0#;zq2h91$4D><3evR@gdd==2Xf=i%Ht9X}#J5@kS2HoIoqrDD
zX$6*>K%YVp92HIQ7>dy{=Kq4^cTAJQq_T-}0o#nyz;NTt>3ta*=I!*R1002?<y(!S
zVm@T8`iZ9lS52?u0)nNtus*r=4fEN&21-%iX^EFEU0xTbp*ZKp>GwLRY9r6<Xjzw!
z9aCW*=3`Rbd1slcj^K^-%m=}z-;d`x9_YR>;Bu9vU2P^dbl}r_@vh<`!{paNfY(qC
zD<eh0VSx9F^ml&HJ2u688S@O}XVSqg{MP@<ryex)a2rF1o_Zg*hu3Mn*n7yXGe7cp
z4h2lbosRIbO5#1lj^&e%_Yu(G!T(_~PJz0vJzx{w)kR!+*D%gy0({b|a&MHco@6H(
za$I~+=r0aGnQnG_2c`Fy_-o7%<DE|N%_+vXc=g?YsKQi7HCRi$mc@a@Sz@NjDS89E
ztF*fC5>VAVG?zUV)80X-fLOdsP_m#YMi?<+<CRI$_b#exQua4C&Y|)26eA)x)Z%Dg
z|8$iXsQb5Zls1E@EkMFCXp-CfZ}x$&D(wT0FRgca?ScJ^-(v6AMTGFHCv#r{g8SZo
zl=zxq`SOxrnT(Z(%}2VFpO9&9i5B(%ik$v4!XW1`sl6)D2ug1V7m6Z&Dx(Mxdasp5
zU>>sT=W|l^G4Y||0K!UM`eBdEcRiA?--w&B-yx=r&r<zkfPW$;rz7?@(6QXgNwZNY
z>M!%r6knOlK0C=bJdP`m%%2eml3Ey@2Z}_RK~whGi7!XuJH~J5!yc||JXl@v9(cd~
z7p5lAchal$w1}bT>sDvG)5AJ~q<^C{21L?Oj89%>!|`;Kl-`H*AO8U8ek=9*B^CZw
z>MfpvE?3}NxV^u8@Lu4nw`ucuaW?XD*tUg7lz~*57u4H(*c5RI+i{8p25s%vFF$&C
zkuEC}2Yh*PzM-CC1q`U_d&o1|-JN!~_i?k=?{5EZc(k#y;wyKvcRmK5G!DJ97!x&I
zdx3YevU0CAEfWvlBmm2F2*1-a&-aYg@?gz9v69~X`{q-zXl5<e_q~k`54j0wrI&dI
zI6*{+AMJ7a1sGEHH7)Xt@v198Q3AVtLaA50Um5lN$~q#hO6h(=FZq@XX{Q6e#B{K4
zkbHd6J8E=ehzfb}C?~#r5r4(e#4wB{BCp|6gAeSNQ{a+u=}}IN-+-(=oO6k7<=~}-
z4n97~gLnw*RUz9g3F0h)1qaqjKgh13gtBMQAN&|gfOsDu&^sRPa8Aw<y`eWPKs+*{
zXa$^40OeDQ4+)?KlytzxpL*Ln+Xpn7<muS2y?C5DWC9KE2rAv<(^Irl71IP3w@(ix
zWnIyFLlL8%)hpGFcyJG|-(S&-5m=rFuf?asCj)5W+(xW}=mV(fkovf#zv380fOf?n
z-@@NpkbAH$IHUzSRk~eS0qnesg`@#!`H=7fDT476kjY84a_a?hBk)?QNaDCtsaDH7
z5)b;+U#M+1_8^2_|IEk79RZ_1AAz)e7<s)-ukH1=)<f?F%>FF@28F$SDBIqFvX{@j
zUKcC$LhnO-78j|v)9FFM0X$6Ke(-kjJ8&@QkzqFZHcTcsHf<x2DS6gr+Zvb-XbnD+
zQRqGX@DAUa>uq;-0wT;3lx@EMk%SZMQKc?NrkW(|qwsvpaoX-}ZEfuY9q-AsLb?a^
z@Ri)^bUhy!(Jt%|tw)cY!+EDb?6miBh$PFW=ND`{LgyaaV^x)0PJkRyRXLx=#R%2{
z6qp$3?%F#A?fpw<#bQ{vG2)^C3O*k2pOW|@A-_ZkufXz_fgTp|jOiUwg6sYEj8~%+
z@=yo5=jr5GIWTch)%XMUgFnGDe_oDXc`3h}%^&bzqAz^?^Ck`pk8f^yX_d40u|S!s
z&=IA)5=&EMR<Tl7v5IHeN7WyzVfV$*@Pd=CtgKox@yhGrW?~p(@iaQ<X(@Wa_TsB5
z^*xXgY&UrHAMz{KP2YP8q<o3nV`op_7dxA(?#s+8vCb(|VPMnoJ<9k(=_%ELxE^YM
z-a{srlv=F%^V3cO`{GxjWw=v!>5`2EogC!XprbnbYXTi)YoPLTMW2=?J-hZE#Mw2-
z>bI{wG=_2C#1cEA1EIe$NDxitP@3$8hw|lpj4fr;%To+ahQ4qq_*(px@h4*?SeaS}
z$x^XkH6m>khY|qbSZp653&p-cv=g<XI4-^>JZ+*h+fbZfxAY=F5*Z=<DvP1|0o-Yr
z=s#bRJYpqm6e(X2YtO-M@rjXzguoCNibIdzBKkd>dD>3DM?j__$j&hia*x>|tZr?6
zdCn>#ZBdnS^Wz3Xn{tIqH(Ea~){ww_FGU{Jj0~;|G07|_T@d%~HZXLO3BCPwSxYBy
zPElg3q0Z1E^tHI2R9$<3BnC0*9n{C$jH)uV6O6l2=>0Y=D{orj*8WxZoct=pA7{#O
zDLTO(ex<>5`wD8~WQoAz%tMxa?Xj0pk?cvn!jNetIyp^%?E@ZYLTD6HZo+RUm$HoR
z7D=E{adFs~Xh2_`Z(x$94Z4tAZftJt9=KXzolZGPh8@<36y`tC6x!<T2%_ajHouYi
z!nj|-8cv2^U=x>UfojTH8H382pNZzba$S?D7)YbP0&`+QErt2TsHS{DJ&^%`6OU6e
zZgEi2&DS(WJTeZ$Z~<Kb-C?C;Ag=*Zb`4D2qqRb$My@UqwSMKQ2kBs(s!Owe$SP?%
z7XG<qJFA{TnNyk<n3?8Ol4x0hX<RERAx)0#N@F|(A!9R)>(toMy4Py4Zj9aYI2#pc
zPd|({J6k~g<7-cb+N2<Y-zVqKzfFRbdkrjAFmpg_Gq*(zSc%qSDU`V=WV4{9k^S{K
z*JB+XuH1qpDiqKU*Oy>Jqg4hod4?(^(gEqAyasTQP6CPsn21BLGXP^(q&P8Fg&HyX
zXbRN0*e*trWNop}X{M`88Qb|3v=<^ZmPv96nqGW{c4p31T`@GFkWqOmOqmrXMS#}>
z7h>|fMP_p=WXti4brE~$RvmkIlA*N0m3z`$QCe}yvjm2o-~q}|#J$LyFm!rkI)U9Z
z2H1#q;e0WBh^HkA_12Q?0)5V-HP+9YgfIZLQmL6jPo%<*JfAv>@zC6(3(km((}XF}
z88$&im@?CU6ewy$%Y|?Ev#f*tJEw!h8a7hvHfYF*YI^<}SwlGmRrd<UFVaiz38)8X
z#=d#-;T_N}l||mhr{k0IWcuRyix(%~9(M=pGwb(H8>q%f;GhZrE?vSTkXHnjx!2Vb
z>#8*P(*(&16zmZ!AK8|DQ41%fp}o(WgsNM9(&Mp2Kg^!3EogV;9(&&Ry4beL9~VUo
z!zkaA&I3s8<{OSkQ%CTh6Gjqm(32@Wp;UB<XR5H=q8O#s+xJGRtBZW>u1Lxm2JmO7
zu*a}k7=56TG3Z(v;lAhZ#R2|>{py}qs~fIBKx>oX&7CbVKW!Yj6Y@+B#$44Tp^{3Y
zSs3Y|*9AKjdpoAz>pTLAEz*FSuI$-BL+(csTpV;<OgS&4P%?C2ivii^Y}_gyexZgw
z8(i=w+&2y+!_LA!K43E)wOFOpko#l`A_WDg+<va!xUL5yE8?fuviSAaFrxd04RXlG
zcsv?0gu+OiQq6gJK9K~S!zRFLI9s6bBW@8zG|-{BRDAy9>oz*lYaq+8uu8-GbMD%T
ziDRAO=*X8*r@C&Ua_A1!26X1@sFdxE9mTPOm3{8DP!$Cnm+@qAPwbw8SVUjqJ)ZbA
zcL)L=qH1E$yXcpbJg>yohtoc^kWkU~XyOz$G;A-iD{>qh>DJIYJ;N0Cb30A`?!z9E
z4KQ|aVf}VbHAw!h<5J)N=@m91Cmg;X$xH!7#9L2cqhe*YeX(Mn1JQ_n?@<I*Kq>qU
zT49SL@0f4y-(aKTRzDtSU}dBExKzZAYEo?*X*7#oR?u3KA_Fx5-7_fTI`rsCf?n3r
zBWEwL6XN!3pkgG|MLr5i+OlVId()E+;}3n}G=P?pBq@1f;2Rc97&TB4eP6j%QV?V@
z%ug``5ZSWGoHNCaFvl4{gKtCgz)}rKn_+)nmIO5Xz_@H&A{GQd{v7evKfpYxf;YEV
zA%$l>{KDC+R#RK)QIbp$9z4%JWSIOprjtHU_3#;KRAq{;V}Q@}%?lV%XFbhx6f-Sh
z5VL++4Z)H=d`Tz7G<aoV<M^9ZYnW9kW<}=j`nuA^Iiz^|nK>MJb5z=dF$iRVzM2Zd
z$vl6Omt}fN=a_1Gfpb=?)``Qa?myyn0zO*_HUW7nxF{{QQ2#2>)Xq@3BRv-dr<fxh
zE5s#fJOoHeDCO&BjlftuAfnyoLoo-yA#GHi;Lrm!X#(smjyOWMKDo8gEsK(WL%NYY
zdh=c>v;$vIV|^h4>75ZS1vOJzSzHT-HRYT@lBPG)^InB9NVFA+;$v2Ca40<$JYYvS
zNR=u%$;aa<qertQ+5K$*23LEW=M!axQs+dfpFdMipFcC>OA#@_BP~_br_*ej2%}Vt
z^&W&{0kcHUeX<6sGfH_J5A2*&n9wB>9_cNm0)Z$FNQuUQPbsg`@*TG2F<1hQ*^B|=
z>ns59MW4`yK4tAdQsX^xbjjUk;guFFBb}e0aS=+Tdm*0|!-Nq8t52Zo5a4F8V8HRT
z;qMWf;{I?d;HM(&Y{u@)jfJK@86!}A+Rve#s2~<n$DU+$92alMRfMhsSh5rr5=~LI
zhMe6ZUM~3wl7Ugh+ZkhLD=e5aUl>Ks&&Y{(N^A)T#j*QLJW+dOL#n1a%CZ5$%60b%
zXGNMW2zE6_;Ed!Z74nvI>Y4!ah1vE?mV!CPG(n8nFl}x0|6%_a$pM1>+XQ%X-WMlq
zEm9?fv9}I(XLZpju*xNfz(C&Y^EOVNZJdW*3*-nF?2pS57?5T~W1ie=;$-=hSs|>1
zdkpTS<$L@sJi7o4B@xr~pUd)GuvPm+kRA!OA_E3u>L*le(5c?9@@6yFG%%UadkUJ0
z5P;8;iZuJvuW3FlVcc_&s$Xg85y54mPF;97jY4pTwki7aQRDV5^0E?iD){y)0)Q;d
z<s~9{cFb)H2K%68DZ_kkaBer@=TqWfiuWWY^OiF@E>k?kp7}Z7ubgi)-;vM7#;*Y#
ztr4@7fU}`YU~u_#+tV0N4JJE-O>>6i0JMQe_)<{>TE{RR;b!9cq*yiR8&^o3N->=A
z#cOHmCL#;C6+O|_P+cEp8U*XGc5YHT$)bAfFvoTHCCD%>pQC$w5xpTRptZ4tuB_x(
zWgFSj0^~7Tq)0JWD!CFk4!Nso<(~378@3vqj+oNkIzYMc`0<OVg@--tYlohAx0;z?
zS(PxQ&^8FUErV(;>Q7#mP{GtG#`|A^iZ5`+5h7J%JYV9vlTusUDwPt6rsW7-kcvds
zqxivBmoToF_bF_MFE+E*gqe1vqpjW_GU|%q>t5D#h+aW`L8Kd1(G#6oaaEDxI9kj#
zeUH~(CmydDKY1D%<JX`ll5#q(D4g-kH1IHBkO6ZUe@Scy9;#lUY^^ASd1pj9u*&0s
zq7yvAUp1X#b@~z730BrsF4N-!<AhvLGnPQ%0mu=US;9Q~@ZT{#LAw|}sfb6C=(-Ks
zpM1TsV>b4oYYjC&PMXz_!kim~n$%n_1|DB6^c?g>!~h?c8c7eza&!`U?=Ir3$}j)&
z!RslXGtGuMMLvg2M@H*AVE*sYqhPgRit7AdlhgmiLp;K&J`?hoU_dBvqEXG8vChhE
zhensaA#<SSa>K8v4bR;c@I~!*s(eiQ9~CXuH~BN9bkh5SD(RuNB=k%m>>TL5=4w>D
z43L|Fl2mCk5|3WugOW`Dd(7unl721c#AYX9pq_OMh>o6rn=ohLDjQ3P^FQab04yRV
zVe1kyW3`OG3Rh}cLANXXU^cGEZlwqOjxXR*ldKE)s5Li)NfdF^2;RoY-Qa+t6)HB?
z<iw`rh+=s#v>qFF53jCKHz>smc+dRh#P)Uh#NKmnE*#@boE<eTM+G`_Igas`5>vwS
zGqo%p^B1QDDYT|ZZ}2eT;I^fpPBTl%K^ntT=(kpl&!1aB;w*TY*j$!-vT2c61@k1h
zh7sn8{*p+mgQ>M)vm8}E{eL0c3icOcj4MONb`6VDqE0HE1L{fuX!gQe3>%w-mCkA(
z3-#;Izr1_~^`}UYM4QqMIG?7YKDzy=0hdW4Y=cKw;L#eQ<SE8to`MO*Pic#s>DK@$
zQWjAXW7sUjBTb0H@EDi=VhAafB;V2!o&Ti}1^mkjsc<X0Z;c;7Te>l!Q+i2{d94l*
zbwM0uz{1uX5Ab-K;wkgVbR6?&TrHjr_UDRm+R%E!U5{@lR>|YmmW&r;UIL6~<_Gw~
zULgCB1JELGFGlQmWT$GLb>_ciGtv+4rR9Z|FjWBs2<$JM8vg85`Kui4mZx#aQjQSn
zw1}yi3VUP8UkcmBu+06=CJ#rz)dqo6fMGloUe7YUL`>yHK+S(mGZAV+bWx!l$9!pj
zdHInaPy6Q=?akiy4r{_={?Zb?8PteErbkn<PMOlFS+=CboyP^a<S<ZU4Adf=n*h+u
z=PMd>L>WM4EZ74rR@4%DFpCG%WEwwKHexzt{CGXw57a$7^2|_zgk6N2Rx{`rwbFJa
zhoJy8!lMrI(Q)F|9*9slgqasVVh1C>_}vDbDBx2=GDaM*D1R>!mk0Roryo9e;^l_k
z^XwcW9=>jNwmRGYS8oGg%5Bl(hT|r{cDuVzR{(rFCYg~h3yqU}1HQq2D?&Qz{s=Zg
zh^Ft~UcU<Qi2h5GrT;*oi7C+2F@9sA5AcPq*j(nA=$Y(Nepd4`n@sUL5bU!lyW5m-
z&iIO=MP!gJKvH6V)iYiKtwzRI4ARpIU($6uC@4;+=jYe|_2IGn{+cNf;fl~c2xbbp
zD*5Oyv$Dc)kv0a2;nh_SuNFzK83wtq#YAS&1FVXqwLUPLdlP;acl3;c4z2KF1Trm(
zDLL=E1TuL=@hdST%0+~-kGwJ>@gzra(?gE*qUkx9>=|u%L8eU=ab4aPNLhMJP8@ot
zd@nLfj5d)dG8Pc`yL1f6t=rYaq`)pe#Vd&bSd_AVa~oLk$pDiG-A3Hz6A?R|PeOM7
z_nFO1i>c-h%#vE9cDN#(dh9R?vyQb#6yd{zv12f7t2IzB<FcZ?26BlF#u%;KXqaf5
z-E_Oii#9dS&)Q#0Jk#IUL0eBmcPpGCn-#~{QUf&%1^AAYG=<O7_Y7r^76$7drvq9Z
zt!uds>7gFG#|zs%u{!+R4@t8{LMIu`*e-@Iae18$XR&ybJAIps<Leo}%2v)OpVf?~
z{2a|L($Of%W@!mheujrVGZ1Z6IvFQ3SleudZebLJGk(1T#u~zdk%%1w0S}_Ez?(F9
zjSqcKD-!X5_p7U`&eax0Z+?8gF)YiiwurVWH~w^W0cuD&iHERQ>O0Qt_~hi<X7}Wz
zIyos$PO_7evw;}W*)y>B&E5vg9=QO$2J}y)O}1gaZS{^VSZ4Vhhw+d4C-7fq2IF0|
z2eac(C*3v-9d`%8x)@MJYD&=iZYZ>=$skoVU)UvjXm#u4<QSQgHgV8r9{5<MK?!96
zfN9s{{@e-I;`|}YSLAJCPz&^O{NU41v(<kNj-tTbw56uS%pC6$Ba%*;s8j%y-m&O=
zXFx~6r0!|OTUaW7Y!6xtfTRAJuh9DmKi3AqgJ5lT(y||%wD8GEYv!7KFmuhI_2A@$
zk;J4-rlXuN+HXMK$%&6ocz|LK$`ojGOwnaZ2HJpfok%MuW1UM(5vKzr{vsXYyVX1<
zK-9@@pY`4Acz>VfXqw0c**a9X(Gj&n3+3M(Nx@7`WwV32C~Q_W+%D_ZYU>9;;DZ6S
z^fV$w^gPh|+v=co#m@Q31hmMi^MF-t1t%xCEJ71V*qv+Ci11)MDWMrE!bO~pSv0v=
zyO7TxOX>ax*4LJHco7#du(E<~2@d%>0Pe~7gZ*0=d;*0!voU;YAHnYRTIXb1$Oufm
zcI#7p@2$@eZ=X2M27y2#;K)(=Cp7{Lfmfp9CB}FVI?6bh(8p<-#YBTk^yD8uTK^|o
zQ}apCJj4jrhK0{Gqi*&{Op0wStFqW{)Stml>kyk;@h9FdDRro)@(U)dm(N;#tM#8;
zTbWJbUhC<r#~(h_n!rlUYxME)pKDDV^=HQq2C~iLk00OH8d;l&)qMBi`7h7jI_v5P
z1K59l`KmtMzE4t?9Gx=^O`B!a1^#Q}kD%=jF(!Wo8VedqoToY1B640dJ!ko71k`-I
z4ni&PPfkV;f^6oZ3+Rd0YUmBxuESn;wdG8}Yo!8TsGQW1%%qo8TyRl-(wp(nGmJO`
zPCKT%-RLPH)`sjAnLsBk{eV^eYeID?v=-H^cVMv-P4TFJUl}XMd%rF6uyC8kxjNRI
z*q-VuBqo2Kox_r_1ySpxmH_c&BNZNk8Ziov2=h&-^N*tAPk{QLBoeufSD*reA>(Kv
z{j`zNPD4wqq&RZuoqln>Z-#S=K~tLnK~{Md@D_OGgZAadr;C#j6+)@h#5X=2f4Uj0
zpWK|34^EDG@yXSOIKGU_bbQ^OfLTXLTsI2LBb0o_@7~L2D9T_*;Ro$TPg8RWP!-9K
zTnKRg<R7Dc1%%|ET)|)1sk{JyC9p80j9pgTIEEDvP@pct#7TK4<&TS?wvs0>#x!Ha
zHmf2D2?BByx6cMQy>R!ozG6o+-@#~S9kz5_(41)_C@bP~$fq!pU;e7PQHI4udXDx`
ztNRT{5<;}?b-(qx@E^Yv{w97y2}nv3op=&F$<wS_ao$UNxVg=@OkRA63v@M*KPpQo
zb^>&l0xV~8%Y(SB<PG+91VULK1R0(Y(3jcFF%3G46EM>uCDo<4R}sAP<n=pG2l(DS
zew2@4?@wW+=<QBykaaO_aZO!Jk8y-}?7bVuS)%&G`~5I8d_}i6iBt5=%^l#;BfOeD
zgJGWSce^1gybnLOUc6w%PrF^icZ{^il-~_aWR!qHd<!m*?bK|}Q4ycv-RrXC_t)SX
z*q?u5x2M~pAzr0RM`?~{Ld6j8adQgV0Gb4A<Xi9T<lElaVD_nf1S|zUe&Titf6_jg
zzJUL5KW&^N73!U65d{|^Sj&ikcZ4t9S6~(Mn8aV!X#w8+^6Hhm{rAf{4E4-=|NPyn
z$4{TXe*Wg8_w?t-?;k(?`24*(Ug93SlWxnlZd(NGv(}+JmLSwJ^Hf*=P?_{$Z82pZ
zfHj=}Wy+VUbG5ysOc8?W;*wpFCvqtD`1A|rP4K~Pr;u*kyP!|Q2Rs^bx_FFHgBKm$
zwJ5Jw`(AICHS=0VJPmXE=a~I0#S2c%9R<|+_`}neFZKB#q<BtJg7ml$D)Nek7Y>g`
zaKDuN&SFY0pJ5yjZ%JxiHb3BY_+>5+7^TY_(~M(u;xL|;6o=A!mlT&N+3DUhux-GQ
zr{>H@%{|Fe%7w-PgNs_A^*v*7byEI}yA)oe$#_(<0OZl=sZ?qG6+P92?)VTn8=*+N
zi)2LfLs=^B-)B$oisYM`m!BVl@G;riph|J$jnbm;wbb24;L{n%$v(Qo&w;2~-t7to
z3apSBjrkY<!2<KNvvp+M*cS8lf^f#{1vkuZ#Vf!_K68EPcYbv5Vuutr>;x1*(sml2
z5-_f4fQQ?i?ur)q24Weeg!lZob*11TKiqNC`0}!lymF3bBrFsTR)j4Fcgo#RDywT2
zm(SZBaiV{PM~8TR%iMLa<3&igvBWGI65VI=&`@&)$}1hbmWDrQ5Qu9d{S`~Fy?p-g
zK-+s)Df$NKTC2xiafn!$4+Z65k)gf%`Tji~^~9M{jHfd|gs}L63V3a<^P%DG`8<yF
zxApY_9RQcdDSV}a5jw;)#=&@3WG>wKdP}Eoa>KI23dfB^8Hhs}ym+_<PDI_b0s2ls
z!yrXC^v*%pPw*;4awYu9bVEP6;>s|^yRvT-PEB7s`Bjz_%7f1^Ei)AGtATW4c>s{4
z=pq)q=nsV_opJ*3#%jDHIh=gh_YMx}$cRN1IpT{{2yPM=Nd0(K4(WwQGo~y>x<noM
zT11SUets$|tm?5uFwUxcLMKv2UWT5yr7cSiY9+m%5S}uUh~}WKGkgRF0@x`pfRu;R
z$~#N(42gVr6u^h~)A9+uVTaBE$=OuW2^ZzR5NIv=j8-KrsA~sxBpYjr6BSkZ2B+Zh
zt#-;Eo!uMvW63=|tPzu)yn#jS8)rVcj`8x0-*@Dw2a~Rxo}Hx>yo7NxWCVtkIfmVq
z1}O&H>A{oh2Q5m(!Hy_+cRtUb1N8*dFMwCkgydFY`Kc(9n;mcP+zfOGA4o06UR*qR
zq}_$&DNURXCb3dG7MQ$|DFQ4d@km8N_~?zIu8w;Htv-uz=lGYzd#?siMD(Y^`dOzW
zQ{_Tv?}&JE{c_}cmj-C}Y_=LQXL5)EV_$gI2cBKw?X$Oi;U&2i5$L5>!yJkdCNM<F
z%ciH-BA8Z&WWRhSdLZyg$fr#3Uutu^Czyg3fh1x?G`&*owR`%#1^a?SL-kwjUI)LM
zX`o;Bva&qt7Gmy)5yyx^adae5P6VpdO$Yby3xtSsRbTB7uAHel^|e`9W^I~qeb2lM
zL?mr&68#1T+a{X>MH0G#CZ%GX>dPnBALDaW8TH*M!LxxA&^*Nh-ez#Lt-Cd#V0M1=
zZjMa7;Mfw2P5@Okh1BJzCtK5^HqOk90#ld5F~@I3ad>AQB?%CU!sGE+GC?uBzn8I?
z%BuUM`dDF^>?Cg>8u+X7h@a%F{MD&2L$JX+p~*^phk5%vSWsM+qr48{mbc6XMT1##
zTgkg76GFeGsBuV5bE1${_VrLatEo|ng#P}2n0xp3wv8-L_;2x3Kuo4XS|la;lGu`E
zuVXts-py@er!&thD=|ny5@Hfy6QpHztoiJ3ook&c0F<1#=h>c2A_9fF*Qs;;9XC!0
zZg2<R34VH%%k>I@Um+ZzT)-8zED=^VD+JIL9wNh@@YZv+vC2M0nxqB-xW#fuDA*wl
zv1u<d1gugR9>CZFJT?gKgb&>7a``r4JrIT(LRfF^2I$Dl0+Eu@^n<Q}{z^vcmsE<b
zM+EIx*xOCR>O~4gL$S`ihw4cIlh<)KAl`sa21xcR4_e}6oO6tl8g-g4KD>y<kWt$~
z;bqEMT*#%37wp9|;GtJI*ZGQkixDs+0~Eb<d1-FkUIA3ko<4)P)6Ja_*|*_!RNDR9
z_~ffHW{?=gOur@mjvK0K4Gp9(?BL>$yScjv?7DgVaN(#V$p+~4MFvhgfm|y{LR8K=
zvwEo~9}dmHsU&(eB;C)@KhJfR$iNQ7QgQXY#Fy-c5r*M$<EDQvb0@=f2VM0frQ;7%
zpbH9HN7Tng3tc;>qGPV_831I<)b&YkLW7KCLP@vuyqno))j%8lmi^&x<(T01tfZEZ
z@^Wh<MOVq)k!JF&)b(g4&{nJ@08pvv6e2cfIs!U#eBX;hRll}L2`s91AcAFW2&8m_
zCBL~!T?DCLzJK+Qme2P=!`><llMm}H^4BAnrMKDTkQ|CJkqH7^&hmK<#`((ac_{k7
z1Z+^#D)&ep9PriBzha@29Q4_b70e7t3i%cifL3Qh0xqT$pbpg0RllXUZpgtw1wB-j
z4^hH-pH2G`VUNnroJ1k)F3|NE=ndGV2_+4D^DUmnKGZ*T)3p+ETh1Iw1nf7r713i*
zl?s9XnCK1M^i=9B?~BqtaW4nrjg8CBPFOu~7spfGN6<I~!=98gM_N$bh*6AWNHT%u
z-u1cXRx81D=*egM_rB_jcnF<g7E)VqEkCLaTXvxY<iCYza0<z-z)u$ddT|PJiUr0Q
z;we3*W-!}?n}?Ig{jKK<DgSarlRyY)9__@Hvm5Ta6fRY-bwzr_YGANay1SM1I=JN=
zO-bj;AL3Z+4qt(=O9o!e@t4cD;Tpmd?~Cg`!HEDzZ#kbQ-m6c1aSPkamjXQKb_t<F
z(Z&=0q_uNDBCLW3IX3t=ux;fCrHV*FXEW?S)UjOoo@2g(S#s0{)ag~aNce@k^2oNg
zPf>?V<{2S`S+gf{K;1-Do{|2@9oU43JggFHusSM{h8F<tyx?Jom&g6VO@$uY=mnh2
zT^WeFCgu7Tjv68$a8vp9c`}_=3{L2X#W`!=VJ`t9700Nsvnv=o9NDexnvtR6ie4l?
z<_qvVgLklC$h1KSorg|rTyAOhmFh+)MCl@TeHdqy-yoYtYdd9QL5~_AXf?Xjq$9_-
z?DyaO(CrJviq|p2TGu%Yqyq3UHG}bfz(Jf~#4$D%P3BW@jI6vat3-EMn8b@xc!gjJ
zc;C6{YkWEmZwm^1@OQ(Ek{-CdzXzOT%DzhgmI<0z*x1Y9{V8UltFT@(liV}xz4hqD
zAhtD3;TU+86j5g&RQm`Y!=q81M;_Oo!46JGgirAT9A1;5D`tKls^tl!E?W@#{VvTh
z3mV*Y;}S#G(Q-jLKIl+z1mTHSe&VR0nz0T)<xgP{^rb4*X}Ip+Be2@Mq>1SVj<i_B
z`Zx#9vH{y6A)3kK1mZHGfZr@XDFw4Mn7vWNd56N+7J!y;xyTw%9=vF}dC`adN34gG
z(A3{Jk8JE`OkgXUj9(^d-XpVMC%bAk)98y8+I!gG@UbH&$C8g4_1E~xzj@fb+PDE>
zRi9C}yZui*8wZ?ZbN4{Zm3Cq{I_fG>TP8Bw_@O*H<QN}YThk<pQB|f<tJK(~|5JcB
zyjINhlA-)vRvjdAkseEt6USGP3G@K`%h;u?SM1#GCkK<X7;?c)OJy*TChlHO^TMk+
zyb@DJme`@wryFs8$pt+<%XSGj0c1Ax>Jj;1C{y++>M|WeveE^Rzpey4T3ZECFroxb
zenC+}zAoSjC=0yxL9d41Il3w`IR{+RExeJ*x<4N}=BRYsqT#F<b<(dYFCu@Q+;q%P
zeMRGiz>hP>hzzOazfu!mODtBy)6C8t4U6z6+J@oYqG10C8mETh4m^<*1lj>k4#JBn
z64|H|m>mq8CzK*^MDQpO3d<dh6T>P{CK7&9#)|fFN_gTGT3vUIX0vdUZMD5^;6fv>
z3B!>F{Z?|*sBCKWyNExFz`Lwo_Df7|A#V_U2ZdK5T;A5H!Z5(^=s~LOaKJ6Vgk@DH
z?xU&I_7W5`sv7!5Onb|WRHLRZ18#So76?YnAKglRcQT<{vEeU!`}cte8=Hr3612qI
z+NRn@>W(i;CTmkkQ+R`E=RgIr7GLCrqw%0U_S+4a@(KDUIIdi4p{%OpvLJc^eQEc;
zfYZOr9c7=BbJ8STLy#jxQ?4QWeU<cZ9}f7o7&wWbSY!PB<ZXX|Vb2iAj9EckPdLlX
zJJ4poM|lJFj&t}Ppqe3uj!&aViYQ%=I-!N7<!sz&w|b1-IRmtNxZ5R!)aK~0r595X
z-Au9U_@~$d@ltb@v<cNscm0q0ncVgwEGx8v(E(VPmNRRx*Plnpj{JRS@fjK`0X5n{
zz#9TbnSn=vKtTXwmq7f6@Ot=69B52Oyfcmc&Vq#yaCTtn#6ValBSwO5P9Jw#bkAg@
za@{yidcQ{vIvKH_7{ehJ`yHgl?H&)6e)5YN@&KwALggX}mMNu=fYnB?lYDhaaMK)Z
zEXL!yEct<Sh(}jJ8I>%<QXiC;e1(wdAbw!OAdF4m9)yiMAayFaLgC)MWbDCUmo;g)
zgZ*XPf!I}MlTo#nMag>+38KJrO0Ol@2@oNSQ|5}j1Ls3W={r9445w#{a?$X-lkZ!V
z{MUEive4N&wO2$op6Kn2Fp}OSDVT3R!N8+~1dAW%w8X^_-BqMfoKFm=_T81AP4bM0
zGZL*tGL1a=`KK2HO3v_{Z1!louY2pj)4s+g^H>if<N|jUKRmi`!Tzx4Xj_avb-y#j
z9k|Tc<z<jaYBWwwDM>V~->I-_<MmlJGFkR0LD}xz`*-f>PTIx*2DY>K86ejn9Ie|d
z{HF?en1KO$jWz_c_Aj%QSLF;HgN>ZBo7^0BKXBa>0!^I?l!+kY2W#H4S&m(ylW4bi
zy%8z=na+dj7NgEL?<T3!+6)@{vfD9ERc7Z04-HJcGJc#c3bI4H>kO7{Ojry9&7XsX
zA5%h++E&7sq1RWFYh8}{li(1DQypp{2_jNrjXUbuMYphN2J($WzH(sphsW_=4E06o
zHzqoxpBGcG<uGQ8F1ZI0APw?i#~dToDA$fm1U-QGO>lgB#_6r$U_BT@`Zh@JL+1;#
zt@-2Oz4F*5ME=tP#noMSm+L9HT$8(X<t{7&<os;^&VxH&3WRdtlNWg8A=BB@MGwYG
zs_TE`*#$eLaG}wvTwpE!GcUl~QTj28<A>CcPN$eA9Q<FiB2znKdx;)g3@{1ZK@xbA
z4@8tYZ0NxQkR=2jFJK8xO9-rkjWu+`zl2O*MROliNsoK%mJjcC+iLhp{)Z_$W3Oc*
z&i}}k;0cEOdyoVOpl4>6-kRd$3n{90W$b93$kXw~^ZOcI*H<i%Q4np;1{ixy@dReG
z(L~*lK#|rp?Bce28)oO$vR&bha27p_(5w1iU*7uUbE)d%Mh~y<t!`f@50QJkQ&6LW
zmT)oG%uJ9mDY8{T22`|Fb^8ILKhIfnC%retRRgU7-}Y<#$&L~Z;p6L7JJse`*3ioS
zUfYzS8=}l(?1ZQ(V#Z5w9Em>*ooN?2;2|ww+nzZx3Hhfd6d~iTP~-^++@qqqHBHbf
zDIJ5H8w>?U0b>oO23y>;c*0%;D+q5#){Vw4Tk}i`YqH^W&pSypEbohF?8uEL8C<?Q
zp=+It#u&TkgJTGcJ_&e%d}@U=IN>-Afya>qA!6c=z~5+-?md*S!!w^xyQI#b1~pGB
z{fm2COdI<f=7<uBtyRFlnP?C#8a&9icoweld(NlglVS#lNj2~f%BSHCMq&Edrq%c#
zS`L&RfMGk5*{ZD!ss!tkWfWL(X<Ex*Ito^MBFo6Ae$7kWX;lAxB{z26pP8K#9m|e<
z8>h>Jpa)S4{y(sNC=VqE(TJ<ojrLS0a9$5R5A~wYps-%W;-58Dd2rJTnM{@S1<I#&
zZLsX=x@+J!;6;E~&t*}kuYS-~<EWL;`NL#lrHt8@=Z&BsH4IAJ-)=hWn~%F?;NHpH
zOoJ4S4!h*ZI_uc22xt+g8rsA>JdQ%m&OUOtZqTMgM0vA&yK7nYqlqBVz!y}Q@U@H@
z*t6$fzxuwj6*Jl1)4Qehy3-=JtN`2?ueW(hgk;l6Tg?|9gV$iWV!ZgJ>+WK4>1xP}
z34~DqfJ~b7i2vx*I57MVR7()k+C21CS$0gcLfaN^nNPy}K?S_#zL^m3SNSz|pP<e8
zmS4O0RB-e0x$t(V$X~;6b2m#(Ar?*B+ZEOIXmA|8Vy*-k#9+r0s7mXew-F6Cs$3q&
z>wN9b_Z8llUT-=KCKzI3nO_OBL@DL}zI?LFn%|ci;qi$D6^L>GPA_Ul5nZuR^s;x5
zPJpKe83qbfEGJV&CQwcGUOa!Wi(y7iQXc_$Q~;HzuACTtkoFD`|7}BcoTB^oKE;p!
zl5sLk^uZrz7%@({A6+x#ymo*00ST_G*#O@`P-I{QnlSi{^2szLUZFRX1{4$3PYIu#
z^(Q2qlo+2teW1=Gjw(T86Jjw=EN5q2<@3zDpu!W!jriW!RKhI^%l$idzPfL~Cv^tN
z@!wLzR*@^FhdvrWQyxOi%j_(BFNP`iCwTpWHU2V5r{x0O0KggXS)QGh$&Ze4C~`35
zw2C$~!WpOH<P6S1`ewjNST8~QE)hSltU1A3gPZV+=U=!VAjXoOlk%lHF=m!ea*Clw
z;f&)XyvYvF9=LwW<voz17z~UKm1ymDKgcu)7D~!U%_Xl}nA>;mVNU1`5?oPaOIG1^
zAEu5aIQjxHQ&<e!NxEM=dbpcDVtAgd?!$`bt6p*l2!mfF^9nZ~1D+jy@rC)Ay&6RI
z2`?Y+(nI$LJ$}^H3&U{8_c=Du9opgk?a}_1T;%(bP}ckuN#z_5WLC3cf4St>BT&SC
zj{m-O)bY8maY=n*ZvpaK7jFx~%H&Rf$+iorgS%*l`6VxYdKE3oyqXrHc|KW|Re8F?
zb;*k1y4odJrpw(t+dV(O`{lhm_wSF=YVqD99sX8j0$Q&Qv^9>QdmK*muWm9=R4w8e
z4-FBcYp)A<h9^hO09IcBT;6L$`U+u1>_YG(!LE)JY+d9pyJRIUS9CNoaBg2Jr~t=Y
zH;+n|?<Qku0e*aZfSveI1Iub37g6ztw;v1)TEyK!@-jV5m-)l5MteI00JP@6G?&D~
z{n3LFC8}>9l$-Q?`rk+Kae<6S*9@`izKXg`p|N~}4U+?gE|mii1cH#KkoB)Io3w`h
zbbD`qfA^>7PlqA8=n$UoJ-Gc~_cLxwBF>-Rmm7>=PtaKeHUWA$!|Fqr!i=1D-N~x1
zS$i4FwJUE*wyY<uTXLUPEuj^PN#+GkB@W-s-o<b3;b?M}KX$Zj|IU~9@9oP#iy?SV
z2^?Cv{0!g`$dh*HLkTtN<_#i>RM%~a^s{J3?A*G+ju?G5+5up%u8|gq#olnwxemmn
z{(PC8I+CGYA4gxvUo8~Bu^?@)-HpVXj0#n9Klz?QTAnNxl_k2EISZ8Yz-d}~vIKQL
z&~DtyQ$o8mBXJ|n&kDxJAWUI2?YBomkaH_1@PNPL2tnu!AdwNCuMmt_flbZy<Bwqg
z@bR;*k$M_v=kvnd8WTzu>JD0gKBnOM0PI6B3D;Z!Q26LZq!PQ<fYPVvwl&)L%{R%N
z(LEqBH7{LUEt(;(+wR2=VEL*QkOHot|JMmeGu`0&{WO3ebh~{r^aHn6I;c&T9#}4S
zwD*qV^HZVGkKheJ_9a%>qtP1n%Q8bOxSESzwV65d&RL2wzG)J49G`X;nCseeGvJ3v
zsR{{5Y&9gvRxxq22NxfkdPi>!4&L(#jA`3obnAd#k;hO?h=@hOSfJ?nY(z4z@&uz!
z<sni2@1oj*BJ=WJ8{e0kzpkR!eFGY@Ss)=}61qsBLJ3jXRbPUbKuJyX#xG0u5q6?Q
zLAO6@{(4{%?vsU=rqP!9j)7PtJ&~jyACLw{$ruVg%w)jzrlIR>J|%V)QscPpmwv0@
z2_L8_jO1qq;V}85Y`e$RHZZepn<RFhd>158>TVyojjNEb!KSgYsNZ9JDnJoxKr8)w
zjFE<LDy%Km3WR;wRF{+q>O-x`Q-%onl&X>~@5j<4U*m3^(0ftpiG!q?G%ZvM^v^9T
zdcxt$A4&c_U4vO2!g7Zhphi@Z8Q=+cw+u`Gq+ffkkHdL=>Iq74DZT#ip|#swydNou
zO^ODx7hxuYqd0i$LGsu=ialixDC}!%YrI}aAlTS=ep`zY=YDVn!Em|V!#|<?deIOk
z*28MCGrsSfTQ7V{6$v2cR@%Bk7?IZUQY!gdLeg+wq2Ai&3W@2su2vnxJeVnnb*f`B
zWYx_idN0+&)a&^@`3$^t1jw;*pIlq`EDTYsq#2v!!)&_8ou)a`1X*X~RIiCXFg`V%
zeOyiun-D}js$u*<sW~bX{RUCVW3#ane|e5ToQ-QQ3HkKkZ@2HEVX{4LdwJN=oZ3`V
ztRTjxw*ODl*@V(tiF-DNB9@38hses~Y*r%ZzmLK-Fm}GnZW`;Jbt(J%yG>VrIc7?*
zwdqXYu@dG*{dq641avr*lNZ{zcOaDB*SyH_1zN>(^fyGq!Th1ya;3sHdzOLQ6b3aU
z<MtlP5V=4<jEpKvj{P7!6``r9FUEw^<hAK$7orQ)$IVW$-J{l>FrIFBA2`Xe=P^<!
z`@&K8{)X64OC)T2<3HctxYpi&$d-QRKEk`j=Shb{ZuYKbU1Ad4lT<f7|7w7XF>HJ@
zMhqOH(EbF62g7ZJyON_66U#vPM%s&B-1*8ohGNbPG^#;81Z_6?>lB6~oTG$}DPDD{
zA@TT_Z@~C*ik3vz1u`a%>E}4ne2_n4c?{O}L*S4Q@5D(_N%oMDHYDZily0v-YS*o9
zA(~jatK&EF0xGlR@TdIx#9N?affoJ1B@7-7FA%gjh3GZJHKahP$O#h{gV~C3{7qr&
zHI!r_X8_2b09S?~kQE~v<Vzp;#W4b~Q}YV%3<?HM51RwT8yJ9eF<KXd^g+SpidRWd
z^f#|*+*}i*s;9HJ2{LhLlUjoGUzTq{-E&Go2W}%RvxOVlrD-u;NdBiW{v~YA&Q5$@
zbJ_vOCjf33qa01danG+PM^+KGxXvX?PvPo7ivw-A;mV=<I1Eg;E^IHN?KHnKf`Bmk
z9X)O<!0-1C*(h6c{f4LP5bvd8BXdG}JFl#<@hbwJOGN-;L;mfHH`Q;%@;J{kR7Gu|
z$!!&;yCc-FY^u)iY{qX4;b?|e4bWB9wyzq5HU&c6LXKWvt;l>hjsTUfCop{9siGlz
z!cq-SK|lHoq*VA{6P}-b!W@EvWBK&qvH0vKTP1f8|G%heX7o@Z2dDZb#)qa4+HxIi
z*B=O`7s-Pc8Elq%eMBzP9NCv~#zD=7alr~s#peW#<;er%g=akYli<Oq2|zeN{8}03
znh@uv73GWezeo5AF)+eYqA3sgq^MJ*YU3WkEo}~s5r&NyNCX{v^8<4&Nb&W@#)1-G
z1<`DcxTe8qKx5r-?tKE<|M7DVXXF&L0yWf|dX8J-bntcn-!6#aJq5$z6g;*m7-`fD
z#N{JT?(ZQEmy;4Pt`oK>Wq0JW8FgdO)D0GIPJ{Uyc$aDQ;z8Q4o<4^DL-R0A`VMP^
zr|?NbM1%Fn08K!$zvk*G1xd|&Sr!x9?$J1#T@axlLXbjtMm_}fu_U}^FGS+32*b(j
zrG}gvm8eJsuLK@AI^6Bw1R>JajRpr>^}OP==%myJeIB9!_LA<)OSkpkiwbjHEVD^@
z1~`vXlc(_jp&7B3AlmMkz3~N`ZYk*{RJ9NUU}|FJD{(c$C^zo=8sR)&Qc$NKfH>nB
zJTP(!^lhkT;O`<5u+u38hZV@mJD&0u$jG;pkEJ{bz8c7Tf-#ZAXo`PICl*gsDyACr
z6*$g$p4^m!hc7V(7cog03t4iFkUmx(mH>a|wK_h@a?ptg1!<Gxpm#h5HcN^?`gOfU
zVA}jNum(D}4x6U2-+ffIc6vcW@pT+0ze9TW{V<3M+zB%^V=^)#Z=Y4ENNAd3J@U{x
zb0XLpH4nSw4#atwcNgx6?cTn9FPwflc%7PaquIniukslfCId`9PGBX#2zY1Efd)Uf
zg0jiO-+(G#3o^z%{y`DJVB&F;bE0J*#_1ol#sss(N~}<~s~dX|=1T~CLUq4vYY7$6
zUx53TqT~+9iO>DxPCKzN#J9*8?G7_O+2QsgnS*>`Qa~<Or&rHp!2ouS5+1Qcs>;qV
zvSXxl=1^3l@s6J;D<r5QuKuU&dIoE0979|QG_B*LuPg9)AXvVs1e;f+t0X(Mqmxb?
z3hu!D{d;%%k;^K<MVVHQY_^C7ObS!>uoGgfAeINuAvnm1brtVSOc!k2=0_-Gp+WT!
z9~=g64H}wd7K3FlKEhYmti_$$%-;=Ta&-^>15OHYSbl5d1p#r(&H(g_WvTJ8g`2N6
z9YESMoq(~01It<BGz405upSA()l;`?Ved|VUn64Dn1U+S6==;2H0VKcZx0fdFqj4!
z*bV}?3r#(FkZ1-<c;=a#gX9m)W&{q=@;7QO9g}@PsVX0J-5*WKg>cypi0#G{L{8Xh
zEXr?p?AxUyOXa%ag>9_uzc-YJR7TiY%}~p|<@}X~Yd{f#H;!bWFv%#ck6RK&CSYj7
zLY(D*_(F7aRVp+-xG|z)jq~9`e#e6T_D$b8L4CUZaC?#dzH9!zhktj$$LL0#3$q5`
zu>~hKIV`4SLZ{XTn%ye|>cRIWf!JN9aF`uO(|NW`@$M}JRY4zL-FV0R<q39bpS+1E
z2`D6*9F0bV0ezdG-J|@U`09>FT=D5DUr%qr{}-6l6H<3R_I2G&-b2Q~`Jyb?>GyrH
zb7^XUZyv+fALxU72{<ZILH{AX`Z9Un`1~vV<T845Ke=ppOmIt0J2Arii<Z_E@Jn)s
zO%q)=b$+EGbJ6O2cq`%D<&}=q2X1Za>Z_5^a@^9|p2C%T7%a)2_#Qdr%LMs^40F8!
zQ8$r;BV20v&RtF!=A1^`2&yr5@tjXm#4rZA0|?Fx(VzBq_szDw3p2FS^QYvoKO{Ts
zMsoZm9+-V6@g%n$17pq?&Jk>tu0LM#*lnJ!Pa>hUVslc(S0{R2?w=qedSfL@B+wd9
zfSGVFoaf_w<#T3t8Z&*ErP#O<^)qTtrDo%8IhH7HyoY;=Z0bUqfVtO6bS%A)k$C$B
zCz!QfzJIY6htYnG8R!Xu_Xus&8F6yTFt4JWZYIQ2wGDLAd+<4CWx>O=nFx^(>4;mG
zLrZ{YLk=rEQhlR2V$gqPC2e5?nmoPd#LxAz!W~UyrN`xL0s^U16j!!t%v3VT#54;m
zP%@d7$YapO>ga1;MRiM!BQ=q9`-la>k2TRFe*xB%=w+D7iOUf-P<BR6p;)<DoISrd
zdzM5=BZu)qYLhKxb<Z$F3mV(mdA?#blrTk{ubaco*;L<CM^#zs{)XG_j_2Qr6B2I1
zr_c_OX&}zZ=PmHZOJRMEYQ?U*$LnyfHdZ-kP(toVMPoBnCf3&@xniYFORRN`+m%4K
z>rzk3E4~~oW57Ae8$#vmG%YZ%J?Q)JHS6nrQC8X?T52cXu=cv=>j=^s_kL~54IfnB
zkk=S8Qkx^_dltm|T{D;5E2bG%tTJ#TR;ZHc_OBg1YYTmE3L0!cF2K6Fec>Q^nJfcW
zW06UBNm=<Y10x#SLWyrf$UdnfyhsDmMW|M`f#Xt|v>LTJlwQz8Z69?FLLD<OS|t9~
zJ2`29D7Lk8q?bf<Gmcq)>^pYE6Tm)SwI2Dh+ndY&ie;&QYRf!vmT88vd(Ac6x>*g6
zyj?x2;Pb``nD`Cxx%WuFX6XNob@f<?;Ho@f^9O3c*(^A##mDsbL-SIA=V8$GJ>I3#
z`5g=%_8&mlPFI>x*S3&c)#R8Js**tZ@X(Gdm=2N|@T!K4QJO}Es)#uAZQ;y`*K*A9
zMY^0uWrugABvj2s%Tv~bp$tSECP_fufFP33kvcSD=V%{2_NcX*bQ3T?Q84Hg{hM40
z+uISyuB6Q&<M~!>JW_kp`?)#M=-~o16j%^Yh(DztrK3|z{+pmE;NOT~IY_Eix?D;2
zASe4na5l{}OqI;!V>i8CE#wxuL8HKRFgWp1j2o;Ois;7XiQjwy$~WtZ#sbVU4B36P
zO%?c_W3B?;dB#JNyVDOcD<1T4JwL!QegJl-KWq|z1*eSW!$3laZWHFq=8-h2PM<z9
zR)oTTj`7m~x<XpxiFxcFW3?Mu1enr;rVpY}e^Vs(LXDDI+P{!9B;6t<Ko)iP0Zg5f
zej%^W1wro$>f;ogHLJ3(mEb-DV*ze4Mal0%6?nC7QwjH1u+?hmHXA%_6@^4wIW{|&
zc7RcO0zM%<gY~CJCx>Qx04yhLGd#n%FM6Qiz*J0G#p#nUMU$I|H&oXfyJMtrHyGWz
zabDCcdz-w0o$`jH8BFPcC(6y~gxn>G^*3L+ZlG(x*}w9|@N}7H#nkcY7wKgu+=0|5
zojXqfbpQFJK91J+;%5Mjs`=1rm^=?3_*{vs$Inh7KX!Ts_HY!P3eF%?GYFrZ5BI;?
zd!ReRkSZVx+S6k~WuezEo?%CIH}y7^i#k8ys!c=3v;j{f_p_NiN=0%c37z(m6NZ3Z
zI!U5J$4q*&@1bCX`uOjCvD-;le_V`rqR*jzY~K4_S)(F5J3%!T$%cuGM=kgGJP6N2
z5j5ySW;Y=EB*Xdfvs@dOyYP_H#d4!Xx#&e1e;FaYAgtwqq#9#bXLDRoTpTa6^lc{~
ze@&#zjcaEI`ywO7v~j^r8f_(AVW0)Pc)`7g)twm1hkZG$lRu>`ah_kc8`V#(cqZqy
ztTsV9;(#)2eZ(1WzGnXF8NcR`|HV`O=Z^VDo%4@4=zspC*N*yOZJ)qQHQXNNt+0o1
z{n-13pZD-Z|FI@cv7h@yNMYKDt#DUrfWfRR7l?{BMso@s{cFzspQANfe}!y_m(#zG
z`|-J^-T#=JL_87N0$~rWgl2&`Axi;6zL+?I=JujL-{!;i^ZY3e=JjXuuOH7peL_F>
zklut$*J!gjTmf`j^EFVT<(8Rk;&88GHWHx?CgsviIJnGU^2^iHDqDf$gS*^F=GBS5
zoXj%H_-Saw@Cc>E!!Rz)pIj6uVfpFVe;5&S54~^U=`KHgbi~d+CZKGyF@hAegE)5s
z42@n5QE^2$spx)+G52mj9Ce><Lc~xj`tE18woK3qeq83|($(@W%uNY3CpMZtFX-81
z?O5u$#;QUu(kW=0F@)A__-u*gW*I2@DpgZk^Ojo`GDugFGl|UuCfu451fH=e#``{U
zkz-M7<9Wn4zE*h|`$g(02yIARw}a`VW)ksDesJ7`jT<H(gJhmwB0#P6D*#IEC=j`9
z!8rLNW5`)%qML_&H<Xf=!lO_(FI#~>1m6a@2RMBMM53w{C`|GhnU+q21R$Zo;Oq4&
znM=Hpq*VaPu$)cNN}Hk$!8GK3e!V9$tPBzW*|YNBZrAMJlK@gQTBH#<l>W#GXnM_S
z)|Y$bV^Wj|e#Z2@=o&aOd&*f#=&Lw2iOo);)*c}S%_*+8TpIxGs_{0aJ5!s_n)8f6
zpAyP7BAxcnnm!ZAN)4}VQ%l*kCymn{j<E7HsBR%WEv#9GkJf>>Sp8Un-%^ec<Y1nk
zxy#j`&~8z#x(Ds4V?yH(dOPLJxyZW(Cy_0&`g|tz%R{)q5dooRmQn5rkU&;T$C_g}
zEJ2KcIu(qhiAS%gVh9z1lJr=Q@`NTGV|}O(*Cw16dSGp3+0q`z$DNz**iCvt4~Gf&
zuiwDjpwvVz`tIw28<XG4IcKm5^6NBZ*zr|6vj2uFf3qpCJMn$&f2N;fULA8XaKGna
zULE|2sY{w6S^JF!xwc8d#U<OSk*joia*BI1^P|qihdLSLBd-~wMGoxcl#lxM17WyK
zV`{ng%3$%0MLyY@{rYs<J6d=1vvMOqZi(3N+1sg95TOxwL&6{0`(iO!SLCqDY27~&
zka(}|MCmT@$V<^0M7T$fG)UJB$Sq*^7j`K#m<<?O%<1)LU#H2zEG^F5g;IH#5%3YM
zI7duX&N7Twx7*+gNVi^`t-*Vgawp+O;|z0%{d1kp#QT6kUQct^kEa}c0SQvGv%J8B
zW5^uE1(SR}&!&*#(X~uye$?CUu*><_Fy%6AXvA+kb>9dFyQ!NnEO)6wc0)j`i<rdO
zrKvpVk78Y5+#tILQ!Xpt0!DgtJ2zr9;iDm48L<7}XT0^yc7fOCzQCU}9>Fe@&iGz?
zT(YHqNY-Wi9!<Rc7U!XW@q^;T_EA54L^%FF!pDE!NnwL=7#@7<Dkr+(ZV(Gs(UZ3Z
z2+W4INOTK!^1wa`ZQhOm;t?RTcS8Ys8OZpiY5B8ZfT5!Vl|Q2ClBV!WJ<<4vtdDHj
z4W*={2{=3m!?h+Tt1$@p&Df-=B;&ihnq)KAi>zEDC$n;VQnm_YF}p~dU<rVQE-0tW
ztaMC1Lz+a7fUP~Z3y)t?{FJ)Xh#{8JNluMexGc-|j@VQM976t_FFyVpF>*iV`vy>6
zM1S##EnL69LF8S^;S@gXQDoHicF$*0mhA<geDLGH=~X&L#gg%|Fu<EOjm=h9u)Gdh
z5+1V(4LzV0>#MCWd5-b@$4HB96NE~H<mt<ocLr@>ln4$YuYes@bjnW-OBp##U6cIU
zXTR1@!pz@nvE~N)s>kwW2>{U+mcd!y7<sm77JWJ_j5^UYuk-Y6R_T-t$CpFSQ6;{i
z*aHkSXVlA!a`~3OH+ZXU8F1sox6+c=`_|K~>H=a4a5hou4rL~V_9fu&ZW{J=_aRo`
zFGRF!6R0mF#Q^U?VgQs4-A4_xz$;VSaSu46gXGR(G693;L2~ynftzmyiK0#ql6(Du
zrcxebZpanXiEg*<YmUk|NbVoDgk>BgU%47rlaXK?Dw%zle2EL<!N5)MW$$($&?2BY
z0^diO>=Q?|G{E9Rr(*96V<WGjIE72hK^WK3%<Vw=#5>`{M%Cz!VKTZ)vM2gEqX^(c
z*lc-SJ4-4iG4p}vp*@6jtgow#K#Z=f%&p(bo%>DqU-3~isAwQR{(`_4+$KgEX=#3F
zx(0iFW5-|v9(G!sH5*J1zDJ&5_+DXi@U9`P^~3w}@cZlnGily4@Y=|zx<inS&PId8
z5y^BpId{w!9|aTuni^v)mmbHQH!x=C+0^f=J0O4`xwlPYqwa^>QLvhv2r!&DAw%J~
zyLkHa-mGOBwtll6n^a|w6ni36qHEUmwFF6cA^o$(c-6Yq|9U@cB>U%|ZKAGE*T(e4
zLvRZ7KX;@X2azsQdjruDe{smDp3-bNL>mv?lZRXm{@$^er$N@_dem;9kK$ss&k%+2
ziMqW1Kh)*f>eDT{^gUd2QD(>M9zK60&spLMN^RME+Bzx2VU8A{!%sCAXaDxO*tq|L
z!R_qWHUG;4gz!;``t(;U_=cXuRv(}P;9&zS=5(6SePM1|)lXAbb6_O@NS5g|FDY)4
zePYMud-;8uLx?B+4GL+;-%RCqK2Ogw3Am(zhDN9y75B6(7>O=Y2afzI>_)X7&-0bk
z4eF`YP3!&|2O3q5*|gK@GI{dj3yNwMbvbzadrOPY_U)emQNQXKYm7$(IkHh|RkQ+!
zoyd&C@ddVKw>}!@qaN?(NnP^^Grz2|A0UcF1L9e)%)0Ucg$21?y<#8Is{AH(U!E<?
z^};>YC|5KYvR@Ae6S3i16|E+Ig1``|bP(h0d-NDw&$&#9;{d`0b_12|RJnUhUE<s^
zKK$0tr96QSh_Zv~@xYx=5r~?yLxMedxh^_Ee4^_xh;VbpJYFJl^~fEoiB=ZELIlBX
zUil5N@Q8!Kb`^}<PSK)*+BQa?<59wYWfC-^Nv{cT7=aT0)YDurJ?POI;>`37YMQam
zsW&i9fidWiI?N7NUbYN6GMS7Bu#G4Zb%eSlnmEV69q6v>sCS8*dna~HvSOMdtgtqV
zt~p?RqMT)JTORl+so9Re&A+2@CL1QyN1+9<a&nl34C7hN3wv0D)z+Evv5D-t5l<KD
zd;Bgn4p_vTN=5Y|x~Kf4Z=CgpX>Xi&p3If^7H10*moou7A2E}Rdr&(?0_rCoC?3Fs
zqw7G|&J__bq2j|+P#%^=hw3ku8JX>YdZ3NcqUa46YhH3>C5l|e#I4gne1y`C4A((J
zMs6h3Xd6?~K__;Pk~Vl5ICjg^U?yArfX2batoO&N)ZAoTn<v+bRpR<7bXTy&kz9K~
zJ%}`l*+=)s&W_?>37wXDj`I_OSqjj+JjuN>olK`wPdH>JK**Lp9H7z1cby#E{ri!7
zfL(r@FTxj~l7KgFvrE`<@E+8nR2(^r@5@5c&jF?+wBybfmIn#VqC+6Wej(~T_!F=m
z4OW>pOE<vdj=|J7E@KrYdSY<LU3W?+85+yI)7wq#sZC1vTFgUhRzkpLi-#X8Wz;g;
z)QQ9EAh#*7rZ#@a{nkGA>V|`dT~N-ZPdA6+5W-h>Ar5!e|4kP1<j^NK0^q4H(A~-L
z(c^ptsj@T(;lIB7mK1se$aalT&XkOEoE6z=z9Nq(laU7)5O#aOWw5sJ8!g_STs^})
zv@Kpk?$t2XqlT((9kc(foex|&spim?Gkz9&KW_Bm{7Vj;?Y^5h$iR0q>1}!+_L$<I
zfHFC{Llo?2qvFmkUVR0`oO2ku)Dw##M<({*26A^|{dc8cqtCW~xi2r}G({0OPcTOk
z@LhTet5V%MAW~uorh@bg9qUSU^bc$^))_&n!JrRV2JMRb-9Ky(Blsx;?YH}U@)vqh
zpEHuC@JSHL^Mo0#Ii`OjJ_9D{5K?DD0uy<mrh9a0!E?bh!&{W&L2o?TVZ2+z;Wn<g
zH_e@3Z)={D@1zghnGnQR9$Ht##~(r3y<4BwaoB0`Z?e4M5*Ux`NZ!Yo9FQy1y7x}P
zxtO~RlrLu4Q);QQ%o(>{4eAhy5$7c({XjRcT6H%f`5Y0Ut;f_=1Gt{)y!&qII5kA=
zFrxcnz}~G*t7F~V+^+oDc)5{(UNkhV+3=Nf(6E!Zu}HQ(5a5PEU+=(1n}DS%M*-=t
zYj%PiK|^9@zDBXPx_R91NLS`}PYBU#YY%7M@fUi0R7M+^B~=y}GF-`P`rEA;{~f}0
zP#~@rN0YGsS@%6QMUTP``4_y2Ox4i3sTzK^Rb5P5s%{!Vuv<6!Ve(dPBpt9jSJ~X{
z;C$e{G2IM*mzwnC&~o@-nPDQ7935xGGf*~c#{=W!MGoGz-W3x$KIoSkec!JHzP4h2
zPK5Spr4#7ybgQew@x0Pw$E^w`@(HN3WW3}wszCr5Z+dry0CKRn$FegeI@K-TQTAUr
zaHp6mGMf&CQdF14#0j}Y{;yPA*}0Avh1DUT)<H+KZ3I_RvU_rZqsOMd18QP+c(i5*
zYSF7`K-};TYY#5YQZwUY%6*vzd&%{JCIK_z!7eG67+{ROH5(d%4gF%vUcv^<uEmHE
z{PwXK|3UDrD`QWJKon?jp?k`{f`QQ<yawQh6D+8_Tg`*u(^4V)fnkwVqM&eLWaa6B
z^@x5^9IEEYakz_RJ_qrI6)~MqEC^L@{u+N#DE0XP_D@~r6ZO`U#bS18=0F+<W`*5S
z=OmTO2C)suX(U?eKko5Kc4xHK3EulZ7eivQPFWAC=W^_ZT?$0(Jduc89i!wYfhKOm
zUdY`8AB29>ek{i_7Vw(3Zq%;9+B@S@eO1?V;oh@1Tevy>o(wu^3TgM4a#73*B&sn-
z45Ef;P1Nrv*thOSX)6^*gEfA%sv7ZWST<LA7>scPw{$a)kzYD8?+6Rv7m)Lm<F`4v
zzycydY6mIb<07*<+b@XsY)_hf+YLeJu}^w0pijpq{Q+;%Kp`UJ3b8eXKWex#R$c@V
z_8)hvC&=VgwrOS?Cw9}ks)X0$^)u`HI1Y<p*Np=v<yZm2+!!ejqXwWZ+VKKlEl+Ih
zKp<!^5t*8)@e@LN*Y(-C?VcMJ!$d{Eyuqp{mFa9nuROfA4^h%d6^v{{;s^Cf_et~o
zD@=ZO*x7Ih>l;ajX(^%KM1lAUI~Ve^&MtdR-$e+){YXHea^JX3_X_p0bu}=GoKJ<q
zD(Ct82F)-B_x!||x?&|0jNN0=0q>oV^9)G_bC}|MWxk5*k-$K$sGD?Es)!3?5}IUB
zyk@{R9`O)Tvb5_(=Q@HIdl<+Vqz7I?)G@-oGt}W?ILqE;Ga+=nsxQJH&kva3LuK{N
z{C4deldn$_Psc$0Ub)F9#pR!CHAJR*8s+qmu#B5@fh?fM$xWqpLPB?PSiDxqIznNS
z5d@%*P)Rm-$K$D{2_ZLEvSZl+csaRmcw}=Jxm-&h?XmSU+a@0#idQTKwVkKM8HRJf
zeb^Ro6!ld@j=~f$SEO#fR@C)DZp|kvmy;FQPI<w??b5EX(evJCcd0s64ZREM9T3t)
zgw4Oz2+zX^`4SUyxbwMQpd_4;XtGcj8R=3dQe-!U&kC=rc%m{<9t#g}lhWd{kAe@m
zCBuSFB_I*AE9~s#hk|N`3-h}y%<sA|(w*i7`CaD2a4t4N-rRlO7^X`i9MmHMV%e}@
zQAuOpGhy{)^7OV9>|=5PE&|P#@d0=fXG<_jDOG@38_I5fb4#$7_%iU=a5?(^^&z9s
zBwh9XNZ3Bi6NB$>Cnv^@G66U|fcrcEG{-B}ulHM`Hv@a}QYYY{TO)z?ZMxv3hq=4T
z;7Id_ys#~wdUuDglHXCSTCbwXyo!a47nQ0pi3L^ptDe)Tec4+t^}mA!m_Mj`Q4L_I
z(miHw{PE>WB-G}m2||QXjxQy&<S4E)Dp{@Ff%;BKMXar{gw?P;O7{aKXC%eHdmhAk
zCp-mY5X~rw3_*9VE3nUA3yGYyTN#NK)-g^^2r>8SYbO?B4$Al%QeTo^IFc=$U8I+s
zosTn3VnfPKfNOw`$tZ$qnjk;3u9Hkyi|H|9@}Bfa6=Y^dd-5~pEnj74*-|Yr0A3+E
zLJ&SfzcVCsi%b8ErVF^9<?|iAQDq|7Uzs>7H*M#mB@o<s4=?4t(LVQw*g_my5Uotu
zdhyzB)oyuhxR$h4p1VKws|a)3N(|usX9R!U>Y^<%B1Na}9{ym!F)I@9Ud}SaA^~gv
zw>db47^C2e=Z;*_XuF5};X(4SSOZMPqrQ*&v|0#q#`4!aFg;8=tnsu$(MojTh8vLV
zwszNqFap0PJ{*sf;4+8e!XM@{Ysg~8=cFN%8U7D=qN6xXS8%O)gRo~Bq9r;0-DaiP
zY@@b;Ye+dFb2Ue9*Yx!<C`~BNw`@*5Ac>kd>8L~(w;aS*OHd|xlH&z?RIIL86It2C
z19EFMGOxgQ;39WN4JpbQ;5drF3+@q)8G>}5s_&>8<a#l9$uiqHvNUrz)PZRGlxig-
zKPk$WgxPrBfz_J_q@Wn2OI?{RSnZT0zfDUL%ly#%oBRzaZ7?Brf}l?cqeJ6VzRMjm
z2v&K((;5)y`4l-B$CkJw{l*UP4cAJMYUufekkz077JT<nC%#D>@ynGnB~_+bJZPl8
z#9aFOA6_|9@Cpd;gtFRz(H@LMl*$zVb^te~sS3xAj<V69c?1}sUcvPA!KFpgqD}KD
zc$wg&B)>VX>^EOs&TELkV+cbgabBz`*MKk;T$HPTX)Q{^oX}Xx$r4KubcYx`W|u=k
z_l7$cmoJ6bckC*WSOBPj%(het!R@hYim3xJ?EpiZPtIxQGaNF0*4=|@gDD|#9q^en
z*8wyJ;c<Z6KdU4hkMnmR=E=XZWjX4E=gu7uBD=xz+tg}%p(@SLFvB3l^h+t1v7LHe
zqs>>U({hGTI>PH6@1Jm~a5rYNd=9*N#<C8l#p3jAotUKZFdu<SpdQpVL>#;|de*Fp
zZoxX5SRuO=yh0t~g40aKfE^9a1|G>HuO<NCN+58^`k$9GP@HjS7F)D%H>H!+T4h6~
zhXHTrtqbOHO(zT7gPB#s8#L?L!n!&hS9Xf0v&#G;RqM$lBY8{Aee|rVPS-Pk>?-$a
zJ%g3Bix=Hah}FxitnY*2y;YGLt@ut8SKn7Cr~pmNXLPJBTu88ga2ErhHMph<>O6=c
zj$)t9$}x~E$LSOq=Jm2SR?CgM@xE>66^Ti$hXk*^jeRRfMos7caVG-yNdl3jFPTa8
z5z1N&E##vi{DY=o2r@(M-f{#Kk|nr}3j8{{1K-*;ejnsk>-kg>Nn-w0o@-D9H^00t
zE@C?fj6ma0K|F2hvnaZS(_}9Cloh0Wqpbzz30*e{ol%`rjl)f#eF`$cRMxhS`$^3h
z#)8p6l61@s@;N!{E8La|1!>X_*^@x5iOf!2%N|R)P34X8)B9-i%1kX5T=TN^>JA<s
zFT(f5#`_XDN1bGZ*`m2mgHDW$7q<y`F$tDa_D}I?H=j68;(}G-^bLZMt4}%X6ACKF
zAXz#gUsO63P>1iDZZMmM^CdD0ALLM8`QlIfpD-@aVhuM}?3e<_wb{PNX|*kC%1@Eb
z<D{Th$uSeblcsk-jZd(5A+IWCW$`G*Y@*c1I3Z#S@laO5+&XfEiE8*rD)=u4RDr1z
zqc3y^9!Z*&D#)uNZFcE0;buGj(CSU&PjAm`8>xR}eOBae-jN=rP5xpq;10=5D2Y1;
z#xXJf66Gx6MhMHCS9H-MroA-8?CmT^e|cqBvC^Jl_1&0>wLDw9Rddtn?&Ec(27``a
zjpR-Y0Q-^unyx3AilEdlg|WkAcWVU?fvy1qoxFg2aH=%ilsk%u2<0ZV_B3}j-$r!+
zDQS<q?W}K9rZ1jp0DR3+h*GZtnrVnOBnqaQu6jSvRd;-yXuL5>Dc9-=cUScJHd3ky
zQK>&LDc^AqBz<(7tf?m=m@#!x^o~usv6Xj1$-yyD?%$3j$xkmil3;m>KKYIVStRR)
zqZ&xO;#6o_pENy*d5kza2r(KBBvh7F)Wj4rMG-H}!C)EE2s+v*X+kJbes;bZu1ZI1
zPgklyvR5T#r~`JtVunZ))maBDjCTySRm<fXZL-`4KRg)&t|%v&0PVjq4|G~=A3Y8~
zr5%DfJ<Rp%bum{y#tk->Hz~PImPB?e;;#XVVZc{9oj+PBm^C?*6(fyAD3aU|PV^BH
zNj8nN?&B6{Fjn_3xgE)X6`Hm&7!Tg4MX|n>=p<OJaDduH78~p@Bzs158PvImNrA-c
zfh0y3YeBjccQDz73pIHtv{txzy$I1_ya*JDG0b7RkmN<J`gsn-KBJ$Dy=EzV6q#%w
z^$_y7CcYJQGO*Hm<GcRBJ;9zoi)H!FNhfqI{764oo$$s(le&Hx28nn2yqp36-86(b
zMRiJN%TNqlzX)w~pz*o=UWXiE=sH##LZmaLWZ~*^xNX#((Izu9|Iyov($zQQRCjV*
zkquY*+)XNmWsp(}UVsb;!0}_ux87llJ<N9ha)lleN5Ws@E?f1w-9EnVp%nYW68&99
zzn6IduPB0rKA@&m@BZ}M@w{2Ge|LE2-VVY7kZr|v31XUkj(Wa=A+arHyz$tx!gi<2
zyfTcbc6*ww-0VH`H8~b%`#i1m33cfODYt+ju^5evZ>6_s$EwEr(P)0j#&7f0!+UqW
z8r`{_3<U%0%hBHG&Mpu2_B|kb?=jVk4FC35{SF2rtw>ZLpeVP7=)&SQf&xq?w@~^*
zuh3h;%IL>OFnO6<3+tyrhn6yC88o#00qW4`SC!m#UBhNvlYL`|9MSw{GH^k#=y^mr
z!Z~2Jy4Q85Xf}0Ih1iXM1H_T5c(M?YhpzT_px#m}o?V3->!JhVq9heVx5E%!)xqxW
zyqY@dolll!Ri3V(gS%NVTvxlZd<=1VuE4!JU*5g_;6HBP|HsSG{d@m$`@tx!7VkSm
z&06QkjTSS{Bh%z~t%qp>NO(tIeD=kohr8*c?xCF+kAM}S{=hf9^ShsQ6Bs|$pH8Qg
zm%NuCG|&eq`Qbc+%m2egK82KOH5VI7Uzk@AbZ8tyw(XMuK`H1Ae_pg8Dj`4-oB3{g
zOSEEC1V*wBTOavc{DbgH3sTsj5-6AkWP!SUo^;u-26YUa$8WwC=*GT_YY<L;6^xgg
z9Y}h}>(@&@k(|@r<^_{_KW=?)kaARDts0in&h*XJ#*PfH1V<%Lk>eZ_USkD`+>4-`
zld7`ny0hWuF<fN@aa5G6#_5yRZ!&)%>bluJymqS}6aLtV!vDFQ+_2Nx<E!WDY=Y^6
zY3gw*PrPMaxe@v%AwTd~u?~o-=jz0*%P&cQ?(7KORlmmwqbM17IuuMgV#Zg>@l$t4
zE@L%;<70_%J_AT(xUZ(R_;J!b=%Np~dFatz_@USB`hsh50jTMJ^)nWSxB!DZ>swqA
zcP01|_(b0eTD4W1(i1;mWUhVUUnxk>al$%2!av?M5VxPK3nu{9P-j$U>UKnd86A$e
zBp81*!>k2x37`!ndbR<pb{hq3bIKc`Y>l_RcEMFe;})x^o3Ne^phZw>v!-5!F;Xk9
zx9d>uPUIk~VA_g-aTkbZ%X%Uf?jLYlY`}1&R4@(s!U~)j>y8k1y=ZcBs&{;8#oK6G
zlgh>xz%8PJfDqU)H7|%(N%E(YK{p^JLT|CJ;BGR@UZrQKE7|?^VedE{{_EuU*VntR
z_Z}U*et&!K_3HKVb@BT2<W~PU{QY|O@uS}3gNLr{{-Y25&v$dC5x|W?x(2lRdDQWV
zBV97o6gYE~e>vWZ^kFMM7mn%_<%MdH9nl4QGU96wP)_o3f_df5AzDaxBu^Z#!<iG4
zZKd&<%wyoqZLN`wf?Q6w;x=a7W`9^gWrC{>=hhn<u&cf@-GCq8%czSz@0o2!-_|cw
z0nhTcS)ll3lmHLb=32#)qHbhmtZ!l4rpf*UgJ4H*o@KMx#?^bnu)dLyIrWx;-Gy+;
zoQ)N>nB)=ByQvd(S|V+u_GtvT?eLxqN{6J~9rS?&4eCA>k3jX1A{5JxWTp}YBHy6h
z1NR7XpyLBfk<LR^l3j(m-!@G0hJ}I4TQo;rX+rxN+v{VvCiWL%H8Cj45WR+KWZbo-
zZ(H}6ocS(8TVxsnnksD-j)JbTV%meRq2+_5HG>748C(;n^y09O^V|k~fF|jbA0KL@
zT5NG>*y9>g5B0&#@Y2bxZ+m((`o8F1ijhpW1eOm08XLUk<>rkT5v=?ak@*JXD%r0m
z;4#<;0pN+nJEO>kcm&5MY>&IPdu9Vz1(N9<v=FohU4w-{=!B%k*7fKMx7jGP;A#M?
z4AZw^om*ByZVq@p2ttz~`cm>A_PG^z&^~n&6nCO6<kj^JY;SXwsMdyBMU(x)d&Szg
zf?bUbFs3&&Z&RkT>O5bF!HL=+O}%6-DwEH9-NgZ6@FFAUej$`@Ke<30AhVy4l%}98
z;Y=bIWzt<>l8~)NBb^)>$Y*caod#t;IWE->4@)S~)OI9Qd<Q)2)i!X|xgyph(u46n
zOUm)@t`>U#B$+s3zD&Vq>(pHs5O~R2I7ogV=U5a&ePWc{8@?d<5|vBkBE9sU1u#u0
z>(ltFPL$a0vwWJA@7#s)aFw1t^2*%*digSWm#0aP#3AW@_Tb*_{XQ`huENQRDhE^2
zS%Le&mD%6F{b28a9J?u(H7?P^ekVvU&)tO{V17Jww_2d}arw`6K6(3`Zl2v=9ZUDR
zy48Dl{QBbcFDE;X`p3UMI=S`Xvz~h}JlW|xMh_+doasD!>*zB-*lZIn^`=wyeZcrW
zWLf&pC*ME&_W1$q&TfC;{sS^9{-Ht-{=!|*@3blR&AGL9tM9Vac{xQ#Ku3(z$s}8>
z(DIqi(9>m=nWgT?Ntx&5$Oh&LNm<9^uGZtEcXmF!y}t)5wS@ybqH%&ETr1P@p)MiX
zCC!)5QN!iK-gZ>NqZxG{szKGiRO_AvwWi{aYQ@!ldz9Sq)*Qk-LUc|{oJbv(AL)|p
z*nmJqo9+?%isIlfHwC~y5d}JPOcx#!9|nQ3T@+~Lw+g!KvmGyRX;I)!-K~Nn8Mx+n
zH!sRFcD|a=!2SgOv<ZYxf+b4L;#J~xByb`=BM)~2SBkNIWd6qK1AX7bg!lQ0@;evW
z>?gxV?$4B2=%7-nNpJ3&-4>G}fGODR2Bu(-<sGfL;%At=YCkL(BM}UMNi|vKu(u(Y
zLMS*wL!l~s<!yDC+5xW=$1=}2xSrr4$K=O-f#xNIgv6CqI~69lV!wSl4)bhzmdUlq
z&-BBd_2<SpkYsVj$G-tML>`5n|0cZR!28!rSl4pRnN>AiUc(v<Fe0Mr8;;9M#C%l+
z3#JMXcVGTEb1c~pc(L@7a7R!dh>N0KloyG06fjr-Kl+#qx7t#OlB>?ZR+m=pMhB{e
zCM5Bt54>Hi{0mcm%&ne;$aq`9yPn@sS~|e|8jVJ9hCP4>;s{nI<%T-NM)+jd5Gu)g
zLgJg++U!yrQ1JR0b0@XmsW;9tmYQ|WvK8BOzP@}h)#bcxN2?N*T^l?au(&~9K9wyI
zOak779EP3ey(G#ExMf5TMX}d$M>m!sWPZ>jV||X<z5B60h&8~<k@@|f*t=Q|JZr1P
zD>>rjO`L1oy7xlD*FEx7ax?*PXER5g-=#BD{FLyKMmb{xP({B++AWg}XwaAl21HUl
zGY#D{unWG6&wluhm%HByXGib3NbeFXmT@U;Uafdj28|2n(`T1PVZDG5XpGV_OQ)An
z-|YD{j7*eF#jVo_zYbNv%t8Ct5f?2-=Q(>I*rb2?DfOp`q*tmK;4NMg=Y;0Fn-w)h
zmg6Jo6j*ao{{I~$6+$isXi@KcsVB$-z@t}8x<b?^xCb3Oj|Or0G{A{h-m_)_ud(<Y
z&xz@WJrg;m+FNo&r~orjxM6<u0iL;^KZCye!xP7q_IFtt_>Kv*`s+;zcd<k#yp+Ky
zk$|G%3Rx#~0f9&m`@XZ~>(Cg-KM>rP5*aakzj$W2e)%T_CT5af&|UgPtI()Pae{^w
zPAL<e#UH~5m6<boA}dS^7EmToK^s76k9C_WWJ4B`hQPs^K7<$zZktjT)R7UrM#MYm
zh;ZK7VgTbN5xp8Dp?e<!jI1e?SD^uE_>p!gHsfshiHz9%DpWEV8;dWYZqh#WhIv~+
zq?=r{gd~Jcs9(ULPJUCL=iiLe7U!(oAe$TI(uQTBS8h&t4sZ<)@c}S%Yf_;Jv&seC
zzvJX-%Av9U3`!1qJWrSDnL#ck_s8|p=HS}jCstkNS&~!AzC`UZ^^{e~2j;4$Oau$e
zZeJEd>kds8Jz-RBqoQ{eMrNaS6}C+@w}#sYElt?T!_BY@R}nFeHB|FB#->H>=0WHW
z{NHjm$fqY;&hvt(x9FdMS2YQ5LHJ``6Vfo8?8dBFw2i+n)yyzREY1shV&KluJ=$n1
z@Rv3?l*x~9Q#}^Sv#h|G7096@+C9xsd?3&<+^HAR0h6NF%H?WgX;BD=_KVO^IxsyB
z9BIETClUo`=axLTs(k5#Ejuj@#md4Qc#KKr?%OI>fDITp4Zz$@u40Ie5tv8e7$370
znS@RFyF)M#xG&OaqxwB2m(5$#D3HxY>@-V}z`*zVgBne=O(8?skNOAkRX5b@y3#$X
zbz#^5<pE*mke~-{$>9^d*nIuc5!Ok1m{c-DGbsS`Ja)yK@0B<P#`}QeY>Q3DM7*q*
z)*=P&b$GMWS!hXJ2NxL?sHe9*406zLls^3xbp%KX7da4!AW(QS!*sCG^5cdmHYb~v
zK(*#v336Kpbu(??IB`v#T2@s4$R};;oURpDX50u&50Sz8m}&%xyH*v{?}*dQXRNhD
zA63i7{`~2gw|$GJ9$NhKOB!`Iu3UUZZnP*>uOW}ClZXGfLUB{v>;~Rt1)A_|_|2M#
z(v13glzDHgC%$(^Tt2|P=&B6Z=yw-=Vs9OrQs4pTh4(R9$*sW;FO#qM?<d7{3C4-9
zm*qtTHjAUXqdSs*0K=fNl(Zv&jySWC-U!XK%+A&`$ZJucgXNg2sU(cv)j;_sM5FG6
zJ9W>A{9wA$Lf12;HdCu4s5Q9)ngmt4R=`5XnTXwre2=cmOt7u3nq2x$3u;e=C-1Ij
z%HlR0G?}5j9H7$jLd2HS!faq2I=Jg_IL`1M`#W^;$mlAYAPD^aFhX19x4;_Rz@$*?
zVtl0y0>;p^WHlr<Bpc(;=78bg{oj4WR4m}?j4F!31}-&J@&5#pPn9JlI_x7P8r>SV
z(EI@OV(8xF@6b}}`(UMf7JJy$D#{`?T2c$WC}wsu(=Cb*WB|w~tXzS@+1>T%$=6GE
zkADrEsdjeHyz`V3$ld{b8HJS&-MHou7&tZQshwa#42XSOWG2@hIkb~ez!4((RJ~D%
zCB)<%hq}Lsd*HGp#Pp)x_tlWD+y6KBW0s189aVfxkKmlJ{C#CznW+$Y0b`WzQ|vCp
zX*sSI5sooTa?N1AS)z{p35K$QSW+FhFWo;|+~EU|N$77UAmjJ2`5{Hxu*%>wJBbwd
z3&D32fJDra^YQ{J1FkQNx-rfGeWaoo-Z^0Rt{|x+w?s9H4j8+Xe0`~*7x9>|&D703
zI$?nrh4BMnA#_&4=yj+Ka^(V<S11OEd#Og;){g?PBl95BQcSV~K+1py2{<&Vj}2PE
zSk*Dg2Dp(Xjw7YsVTPHdd)ntp=k8=LFSS|%`b88WH`khKgfTBtv<$)&Q=X(t-?rnr
zF$9`&n4Ti$y9CFcr;y=0E4V)xSeT?>YA5#t3YCSlQ(f#1U<-GpF3E)4(tjc=@wAvV
zvh#tR<oPH{PtI&8uT)&E%Eb@GH(-}O*uub%<$6KOibhk^{F!znXodV4u#R2f;-7M%
z(EZh(VU92(LLo0uomit9O|-(1LD2n3@G->Vp$9|GA@n3AI$1`lR=t%zuvZBPORWS4
zJUP@0mNk#=s?`E;`2j@&CqAGV03Qu#O0JK%8vvPTy##^{PJQ{3f=cNR!OQ&?(j>xe
zp`C|!0cdjEf1LzLL0?cA+yS(M<;%t<5nOUcx^dit)F6b!g<mZ=_(!`nD<^M#u_uJ{
z5*#=v1Z|LNkjlB)S(85|YUzQRV4f}vtIZZ}VuKO<6N}plNO=Jk#Av2`+dYjA9ACo5
z-d)liomRXR`Z}vr+fg#y*YV~{Pd6%_4ZAtb-T%CB-F7F2OsPYi8lD>fKc+tb7LTtQ
zIAUsY5>th?NB&0uC6-YDtxgkVJ8<7DGqB{7Qr(Q9WULn=MN43p<{1-w<Ohht9La1Q
zd2O+1J#n%{ubspb<T(c1Rml;T57JJGjK8yEKYxhpIWjq}J$%x-Fq9Im0`)J#K-q+p
za+>0T`5LJ2IOw7R+EVvWp)=4QWYva~OkQ!S%amm?G%YfY{_pjCfk;k(W>%p0#2Gse
z;Lfee1QaWd$ImMACWDP2dem?h%`}MCQ)knpHEKj(`zC5v(_lh+D!MN6m1jPcwW0cJ
zi|3o87Ia(q#IQ(sAr1&)^TX!2G%V9uS$bCz-tX31<p03E33opRNE4m&2|@JmpRQMU
zJx!;$A52JiGy+dkytO<?{0WE@#PX5X3!C{u^Ep?72{Hpsb41Ym{iKF(_NV>BB3qi<
z4mqcZ<KZ$z?eWK(ZRt!MBlTin0m2T(!R9h+JSA*YTcnh=7$eOq3L8bLMa%|4@L8xa
z`WmpRcpZ%|N85e{;aT=99el>c<<*G-#=QY7L9JuDJhRCH11=oiMO?OfRD(LR#$$SK
zT|UBH&vr&mcykJFhD{&gHsFEaTlLjYXN|yq4Q1T4x&H+5_@F41>T8bFS|eUwNV`3Z
zlV&)?y%2Xo9Y*~0CjFidT!=h7u31-+?HWO?)f?k#5J|RXYZKhQ*}rtLHf-T|eb=?f
zh<K6FJ__3|N<G5i5?*M}3%0?#&j;9(0T<~fCe4LeU&U8|QjD?S={x%=@{C~_b@-uu
zM|ap!aNU?)WF9MMXOyE))~|iCDc34so+oE+UzkfVuPhHf^7fCy+m@gZex^ny$Acr>
zF@b=3VZ)Om#~u^X6x0}5$3+=rlI|5^XpENulsinU*xKl4-s9f2?5)|%@;>qQ!Ykui
z0vTTlH`&|IC=NCm5uJ3`I^5v_qzcM##AEK(xiND+E~8;UZ6um?5H$~5Y8ZtwiJr-&
z&huFGs+LQtVK}~lri(;e?xDg>6CmTBIbLQeFW@HjV5auk>5=I@2Q)FbYw#T)m7bnD
z;?}RtV)N|5@IPi&7`?8Y#<fk`)rQHV);3JtHkF7^D+>9+s;j)t$5;Ftfol}{Cv5mH
zuB<(7>NOtRk~Cn$QPDNA#86TE4`X%N=f`1Xq+m@Rn;#HjO`prB_By8?1aLB+;x5q%
zvs#(jq}3*>VPWt(mq`=_b8sVW?#U}J0Ec~{{B$e|qfSQrQda<71S&RguM$aW)1JWs
zUXN<9Eur@uLaY4I3yc|EIa2yA2;P4ON<%I63jC81a+@z7%5V?&WtfxQu|SAG&?6#*
z@O0(u9sWVK@uDO!2p?RGUR}`5l{-0q1nIvy{l*;pVpHN?$gYk$f&87jrOz_WeFYjZ
zR3YZxtAO+rfahx%xE?p^wk&~fNgI97qEQL9{!=ae5r`i>850<=(j4(?k>OYOAruH;
zfeRpJRpf?vvmPPR_Qvki<~HsCC}tWup`rsgBrVHX@`meqV|MZwozzjz$D8&uI?5B+
ziHy&Xyy2xpxFk+9aKLrnB1!JRkpvpA#k5O~9!cMIYV|u%3^aVUAAZ&+1`vOU?5%dX
zLH%>T>(sbHQZ0Cf!_rr~Pj=AT0X2Qudk9(aMgW>%x;!Z6cp@H^BUCtw{JkzNmg&N;
zz2a|ajE19*%ajxi?zUbm+!ao&Uq=#+gBtZSLR!Zd3Q>Rq+W2|_&ZCv@&<HgC6ZH1h
zxzt0X21qe7-W}~3(;`PZ&A}w=5nc1*T?s@V$YZ%)CAjByX_66InecmuEarM=H|o=-
z)er-qccV}j$<CGxJzxdhU)D`>y_g{~)3FNQDV7|d=ni)<AlD8&VbxR^qtPg#Lxp*K
z5G2(zu*91mQy#!-m9DZA{O~yGItDgBz3if0ygY-+?`q72%I7`SkYD=LGaHM5XZ%1~
z;B5>|0DWn$9+l%aXd@~Ixpt(1X*XyT77N-08un@1+#g8&*d}~O4dcuLbHq$pmow=S
z@ja4D7D_eTaC(ic5RGd~`KT?*w9@p+ls6SqZgW*L?XF$k4G{v=NEc68w?$G>Umh9^
zZZ*koby_Gw_8`<uE%HTk%n-b=E$upjT0C=OfZD!EbFB48-jE6xEu!pc!CV>*?J$h>
z;1!hfW)s5|*#$msQ<l&Hw30O7%)-Ms;0Cg@@^S6S!5N_XZh)Cr`xus~li%}iFkA@B
z_oY4>lN*w~GEX5-6gF|3+)Ylzk*oGNh_=!FAZ_&Qo=L`-7p(O201_<!Jt9h=si(sF
zaDUyrE@2^>E5oh%F_j@D_H{``IuW3OK52-M-|{*5D0KM<<{4*E=y(f{>qEKZ(}<&y
z=K*hJlwa}tUf;jl^2<}3{-7A0>e{RZW$2v8lVz1{aa`4w6xR6z|ID4F3tYb=XgyOs
z`Gxx5psH{ep3ce%$vbP~SM5`M#kxM9Q`Y}UXIV1?;yXWQ0fhpZV~Ivte6yaN<{(E5
z+>f7_B*WiIIs&>ePv1Xte9yVb4y3%jGHg>QG0@FAkPCI7N&0GF2~GPB?{n}CI7-4f
z^fD&v?extY4Adx!#3r$=rp=6gxP?FdAxmWVJ|`H_7;lg6(EkOW2$mpEdX+9_>k6R+
zKU<WJJsjS95R`v$R+MO}SUV1Ii1S9aMz9Ib7j_%q3Bn0Y9{Sl2M#OXI_ls(|?J05-
z!pq>#ZK^W;$Iik2$BqB){b)qKSCBW#kX+id(Ev%7bZ0IBRrYg;iFHiHD`uflYBjUi
zwMRFYi)%(!@$x$E<j&~cN3QVQk1PLGSpQF%<FqqJnBKsSd?T3UldNMV0pU{&H8mr<
z(W2cA%U|2aFQX4I@dOz_iM1zXq8AK+Pa(mE0AKyr>O>hVe3z=}CLcbSvRjQsJ>0y>
zHXU3O4QH8^=c%tt<gRExhLO80SpN}EFjFr#VUT_W!bf^^=kzJ)@*>R{fm=7DsezmV
zYZOoymqd5_RL3@mo-&~odSGd-sA~+d{fMtwjblEx-v(rY;zySAXhOL9J|<I2&dc&G
zCw%Ao#8eQd8@6fz&(pkGW@nJfhtl^LI_dS-O8I#(J3B!i{~w;%Kht#Zi5FdH69Vs1
zTd%D)LMTULHlxULe?;QRZCWOw2Gx38xt@WOh)B&8y;T+gGP!;Q3#-m^;voilD3}-3
z&GqAB!<D1?Qf8xmhLBe<n2hG7>YqK|)iybd1^_!6^)cAXUeymvJY%Oq-uqzU;x!D&
zo-8-y9+c(ca<pFYJ-k)p`cx*g6JKmNd8F(?KO16Yy|PN{k!~Mp4<Gxc4I6dfpEmPT
ztdq4zQNQkm8&I`SSxj7ms8SI-N80WG1S%4(_SVMIu8ruh@PJ1ZcnCwb#VnZZXbaq!
z5xi?zp&MSS@fXYvF3M_UnZbrt3mL*4C$&8~3c12y(0}ff{>gLNa8jA*)s}AaQ8kA(
z3r}ghNL%Je!A2LGOXGR6Co1^+Dv<wgwCekvk6{hJ>R3i^C^D#g5Fi1#n{rxC&oXud
zQ!Or9pG`fmq}e~$pqoUDn5t9XA9mV#`<oM4C+lhmGtS$1funwVQZ6~40i2)#d8k(G
zEXh07RwY*0FDe6FGJ}k5s1NrJmS-h+1%ipDvymK}Wh->=uTz7DvwgJj^Ins5y+!!S
z00I6gpJ(NI)l=%;;Pi6X2$OPC)tPtj5XR^?Ihqs)3F>G$UZf^NCBt!Y2Yd;q(_Say
z9CR3ap7KeP{)uID10mm#fAids|2h*ADPG|8$vf$J;L36;x`rDJb^lWjRTUlaSpAEJ
z!EPLnXs~ZEoZFvzIHIbFN2AZpV3-UyjAetmNVL#@2e2VEv66)6cpag<9q;|;ggM}X
zBy9=>IY+ix08d0$e)cppa6McyP*1rUWA!;a+t!TYk(J2393)<ycp!gUFG})C;qG(T
zO-DT?!9p}-EV79JK6O4$$<10OcKBcgq1toMI6<)i{_VZQr%Vz9fe;39bo3rTQUZNl
zTi=3OGkVLfLanbU<H3eVI>5eqxI5Ex^@rgvd!0Iu=ue88b-ba8GZrgN=r@*T6Om*S
z=NG0UvWExW5mk?++W1E7HPoq7qLwmpZto;R0MfwalM+o$DFtY6skun4p*xKY=_TR&
z3!XQf`t<-Eg;z}<YZqF+y~E#jJbAb>yE3Z8xMnqs(!8zDlDyR2BO3rrK(oIRdVoG}
z9``DeawElV(jWvQELU<Be=mGjTLnfeYpvn;DBogKfij`~`<kU?kI!69oN6p-Yzjnp
zt-{n1Ko384aARkqwy8ydl!<}3FttqL&5Fu&G?lz&wDBhjGtT&-fFj9hm1rvTj_N3x
z(_77#(h88#CAThgApqCb;!=Eqj8_4YH1?|T8W~%m59fa3>I9m+ZNlccV1VSp-=1f)
z1zgJ)kyVD`b&L}fTqm+-n%3SGM+|ki?42~=xN}V8U9sbHniq7#=zdUGq<T%v=4O#I
zV2=7`u1dc%jmg0$OulrL8mAjZGlJ`jU2$_(dU1h&kW}f&Ie6gk6r0_v4Z=Fl(+YwG
zo*A}-AJsVhUca%c-c3A(U}|LT)(h9^4EU-bzAvx27wfBcW>xBACFH9k;~EeSR^G>J
z!mvOs6XA~bJ4xE(6RRh~p<iZeF`;=0$XOEgQ$53Y4I*zzLnbtT!jKSVF-pewEyb7^
zCoN`EilSwydE|9rZ10htJ~UZPtT&+9^aEaPHs1P0qLt~7)U8d2ik^em`E4^PO6VY&
z5jk9-R{{HAIjO!ZrYU5R6>qGhH#r?8XXnE^dwY9*13`=JAm1U0mc&Cvj2EG4ySC_n
zz+HPfifs*=%>>({9@nx&e<ymGXdTYZKwn;43KZ$#1Zo0><|LkWHR@d*#On~vejS#O
zUt7__;)B0B&nn0WzDB<_CwfyrZ%Uj-I-diUn!5sk(ofgObWS1tYPleQSy#nH>Y7Q%
z;DhF-YMwlK`Q*oBnX+>w_|#pb60D8|#u^MhB0K=podCi`MIeLE-9h^x+15Y&1ks5f
zeiH1$4=*o^Rr>w|7$HCW{L_m*S|UH+^_YGws>>iP1$;9gC5jIqwm=~F9V_^No$$yB
z)2#)#1wzm%DNo!)xP4sCXyMBRL{<>~CwLN`gVP`wlhM5$0xdaP1uHlvT%+5P;gb<g
zC?v2z*kRnVIzf!jfDc9iN<%{>y`&pWiB}RGB$!VF>v8o~>6tsp^pjOfJUO&sD0vgt
zhVIYLrKbACGL%zYkrQ!S?41ms2qFSEL_5=8@R+jRHTCR=?-(<bHjex2TN3bU*H3`)
zNDkXab)PVBq~=Oohu9qq-tj5_1xQr$uycrC_jpz%xk+GXira4M1yw-X03vA!90mez
zL0O0MgseEZmAX@!PHh}uhq?AM*ELG04M8}g387Fl&bSK5VNbP;Vc!CF)Zk%SPft)N
zknu&Q9q9Hr!{vCKyv)$S8v(UT4)!P~5VSUeG!H+)2M44=)jR>n?f_vZ87AS}?SMI)
zkbITRG4@gIx8uzHJL?GZK^@Qlb9WY853=O5FTc9K&&&9W`}82$=hj$!#<MD;Km!qC
z&MvuoI+56}cgoeA$&|tzj=03AoR_mHqF+$3tHc8cm@S=hsLdp?8xHN-Kt~-zq43!_
zS0QYXWoduPD2;{RV&Pb}qKYJLyCYhmR7_Ry-A~a(A}2jrW&}WpAQjL(21NkO4Lhc7
z8IvPS4TE}wp5ra!cwuMLdn}A0FX{l}rzzGQuP;89Aq%C@=E<?3`Kh~dV$M8%K2mQD
zsf)c6n7r5>B^HyE^1!=u2+s5C1#6!Sl8o^CM8p(Zo5CEQLuKExgR`T*ZoZ!q9MiXD
zI?bltfv*7j%~Z1a>zVte_Jti`Pg6%eMXMgz0`PWn^ZU8a+98DzJOTq&;1drs!e~@F
z6&~&Z&okVmQF=<pK_XNZ`>BJC3*7_Uo2qnE27oLH<RNyapA)}=3;4UN3s<Hq0|>@w
zB=Pg-+Iva5CE)C2(8Ss`7sNPPm?Qy<)uhZL`GWzl-S3x^WjUKEpXUh#Bt$o{DP;da
zmPPXhpq3N|zb?S&4F;lYmg<>rxa;gP;m$Os9%hE2R@ir!5$28ARq1s4v0I8M?Wssw
zKvJoDZmHZC1B3NL9@)u7xqPdGXlSx&A705tjf}9*WG4|au33mep!2j6>m?win!tBC
ziTHN6BD9%>#!-wjp$Lf4f@Um#=OPaPSxc&_mQIoZ#olI@0|~>KoI8mGHF_jK{T*<d
zm+6HMaZ(Ut%8_N$iow(IdInsitJCL2CB6|LcJUGuuMGkO<Ct&wpdY$g^%=#Qdt`t%
zB-@nZF6cXw3UHLc&~hA|q`v}`>v&iuf(CmCdTQ)ory<ZOL{V?+pUL0)O-&jXvY%d<
z@pybRoIV4L@-_U1bPp-r0+6S}=IRF9&oYxNO(ej|YN5le$v{{Qq!)+$GVv=U?o7n{
z28K_Yciwy41fIsc>ZgUNIR<O=+pK0OfzMk&aDyISg#soiz=}r9={P&uY0>lP9z;&W
zF2Q{HWVf2=mVVgj<BxLKTHzzwg#ADnt!Y0AdRli$Etg&86B4>@Dd$2rf(abAozXmo
zCQ;gB+p#_0u>;-oEIUZ58%JxVX$A0egtLGg<-`e0v;1Fxbb<22y!vtJcKmx3JBRaX
zxa-dO625yfTb!rxct|-w`@3hvH~d@?WDr&b8AKBkFi$pmOrG8AdzRr;3-{n&8DPww
zcx31xSEy_#e|GYMrY5}#5b$_F5N;+F9+GG@zNA3aikv|aFlAm&*AP+Id~xp&lIP&z
zun(E-_wV7nN&a<&uPKqaKSyAj^DJK`?oOCuoF~p0q~rSPwi%=uV`Z#U8Vm%FMlv~m
z>IX^J&3hO1N%Bq?U|^<>?i?Zci`6q2V}J(+332@8{)E$60e^CUPuxHO-;(~8U!&*W
zKL76d_pg5Y{)cDJqgT&<c=~hnZph$azT}hQ(&P9+7h*_sz;&uWe}K3ny<{hP=Vf4>
zSr}=L!+G-xa_71=E`wyc_+ST1j@J1U{4d?sk)M>XgMQkK5inDTZ+6f!jREKc@<8~K
zLkfjQM1GNg(tN6K49myj$4Sub6C;)srMs&LDGhEXy<GxQDwX}=O(wrkuqJH;4-aI(
z>Jc;*K`|g~a_IqA1tDv^UKu1D>_`RD<o!E$?u|MD`aUnN!V}T(M|vyy{pe@Uf*TPG
zIc6+`UIAc2{+8X0#u*=t{Pc1NI*ui14;C3^#*-S{8BZ3FVaX92V5;YWSA^}yJ4kMz
z#@Uz1<px|NP{jhg5_Gn}&bsL=93Q$w>b{`dOqcTAq%2PJvo*cMgnN)73nW8jpV{{S
zKcmrhG=_>8Nm8UCR257#2tm^ZBqoLzC-#JsL|yX82f+vjs)5I0veMq9*3v#pHjp5Y
zr!kv===~8@Ia}3E%K%3ZasY@a?mCJs6Nn(^#lRoBQ^HJm5K+xl8lK_={pdP&Pr{Dy
zq!I2y%)58{-dFtyFc~Me3F#L5act=}7VSrSq^WOz$f`o3t}EZadg%J%(ryCG>s4gK
z@#PShQFcF}+3`*&#O%N)un)OYw5s(!V=?M8lsu*fCzexDY<T#Xm+`D|89m3%pAfHK
z%P-Whj+{W_rYqEPIGqUF_#zlG_40&ALZU(QU<S2N^A|;+Bgk?%{0I1s3M9$?2r^PY
zBY^v;83E<>?GdE=q#M3gXn=IJD7jtnLNfKg5}R=sE{|@qNLS<~?I{L`jb4bHO3DrT
zo)qj<J#t&HP6Guz1hlNSQN8j)MYQE)V6POfZ&fY{)dM=@hADO7$*S)Pwm$XvrN^3<
zqUP|qmwcr~BA4757ET!wJ_Nhds?&ZE%_h9zq*W=e%^;C{-zmOUz#;k+6mVwMKtcyJ
zMb!Q#J+yMb0&|2>pFmhz=Jkny{SxM_ob+JB)Vt8(V^oDBG-8n&J}10mTv6UIWMF|L
zS{J2e0ffbc)LG!~TZ#IdrxFwi3-Zas1s<ntQK0>VmBLO2LsxNp>m(xnags59dH_A<
zb6A5ps}mK<#BDExb_R(=D=O9?n#amj-IsMaz7x1qvk?;W-GYm*M}p=vO`F!EgQMHP
zD6iOkfaSrEz2W@_EE&~KbvT(@3jLCat_ikUKo=opbjf!=s;1~8JUQ^5K;i>AAm$IK
zY)m2#Z5QbjD3%ZozG8FU0Eu<J8Z|&gGIy#&bCMPUfx}b*gM={PSX<a@j~&bc_%S{`
z5fQw{Lu<zr58&N%o(q#utjT)3MSNAl_oOI@g8Q&z!PWR=;KmbM2W84aTyOR!X{CDJ
zg7F+!V@&{x1MfF%zXK;vEX#T3#LzqUob+_}p0f1gw~q1rTk`cRFWx4Oh9EpMoc(Hj
zdJ4f3Y;<)4MBH;rXwdx)km10-fvi7ns){UBzQ=55>x4lA<Mo-l&Y@rVdOmWp@9tt(
ze(vT~wa%(tcMYZa>~TIly7SfjFZaGmdhRQ@b`YF}JtsG@<89n{7=96KYhKJ2B4Jc9
z158~95=gTo$GO@z6P=JxiU<kl);F%Tn2Dhw*fl>cb4VEo;ld=p9(MHI&lP$M1@A!7
zvGoG<%OKpKO3>|@`8-{Mbpc+wn?|sdpZxd&vKOBM0V4(T91<f=5`yN)De{$0`~K*`
z=)DvF+*Ue=YTR|?npw)`CoRbrpuf#Aj~<83!a;W|z<MHx`@j;UXBkwn1=j`IDpU5D
zar_FPDCgB23?*B4MylVhz(yYzf=?yUM|Xi48L}>pr0XcrvWv5XHQgO0zkLr`7k-0d
zTDnSodA!JAd&6{2K(g$;`r+9R2gx&Ffqx^J<ToO$FwcFc@SeMkG0QquhqmW%(rKe(
zR1#J!LB_r8Y^0>ZA3m(~%Mtjw0ILUz0E9cl8x=VDsQUHdY?)4xcl#wv-va)Kqm;Mz
z_V04a$uUQcQ0nzRDDV2M*H<52AIsk-m~?$>iJ?)?AUV7%e*9$k|DB+gP8BDPc_OLY
z%MfI9QjrKGz;2WTi}N#dYK75~9hDY@<c8v)evV2@Rw&X?Q6x9(_HZ*fVH>QxXzEa`
zD$d71dyv4x!<KgNubreDwT91a-)L^xg@orM_~L)R{Na1bP%ZC6O)OPtq2%Dn6HIMv
zG~s@_VMW19g$*U7^1-_kn5|Q=`ywRS674-;$3Q*7X-2V=<a<N<9l`yC+}Zc=+3=Rn
zz8ud<K)Eo#O{A5haia%~TPv&%9Ae;(HA+g^V1uMP{QPgArCgQYLKufAXdRIzJtVf_
zHrx~Gkt9*^+}w2nxsT!GI-~u|7eo-hY4W>EM)wO!t!lByQT^oi(v%X)cDN-V$Ha!$
z*6^?sUP;`s;Lbu@Ky8QA{7IT_sD^x8(jP9ZWgv8yua)?nc=b*jY9DasBBMo!Te7yb
zu((w0NoaHRT(Q<j<--!j^_YnC_bBaxdl*B6;)Q}#8*c(bxJlGOxJlldl&AvlH%h|o
zYtYM=!)7o7sLD8f3Irv(^1$#rZuhs3pE6v4>!<9ukC-#8vTe>nw~jDfZ`}Ku8IA-l
z)4_qsm8Cf-@gY!>iqEmq44>Rxq){+q;fkrXu!T3~GhNFJ)en!j?wK<=e=4_VBKCTY
z)nr@e?aZIsE}sh^K~>j!BZKsS0}S&D!~#U89)J7dxuiq$FF{K})1{eVd2?YrSnsp_
zyZ0a5?OS+kEG`*|HD;8luYWnByTZnwVg@kI@!3;CP3H8yAOMwXGg6?<9(GSKB{^m}
zy0`om@d>!<(WXI)dR>C5Z3)OOAE}m&hKKKGpNJ0q2*P;p=<-l~Qs_w#=!_^lt{&ME
zka`MJQI(Qtz^&R_PC4giYxceuo?dM;uNW{FF8Ltes^cKpHpA(F`=YZ#vkHIS1KNjT
zC^-L-ZONzBB_K}rrsU(>PxuqA;mtcjJJrNk$ZJ45dOA^OMaG<<i(CV`#yHUqkR=>*
z`bNKdLpetx`oTIR_)23Xz_B$o=m8YkBG6K#xlAEm2I&CFP&o)8)65%|gcdcc3%v&B
ziLVuOry;*2b~#-f(t~*CpRv(X12={;*=8DLH;!SvntVv=yIrHT!=87ic{Kr}SJ$L3
zDWo8AeUr75!seFwtKyDE%;=}+<S$^>f=oef$-pb=JYBM)TRSSeI_i@~od^$1nY5RN
zFJt9c+lg&ZoUKaDSf<NGs_E9l9XgrF86Pm<B|Ann#lc7sC14vEp_<iX0~M<AND&>n
z3U2)dE)sFb>nsJ3$AD!4x`bst|7~+;vjv>!DlnJb)AvA3ofL&%5iGpG%QxM&E4J2m
z6qXA7)EADyqOZn?!b@6ow^jbR&L?jn#Nw192;D!3R+V~hakEK7cz3GMbu!Y$1|nQj
zcSAmn=14PdzRjX)4jT-w7WUmpA>K|ZYp#7Hu=y+D$+Ha$#y#h?uq%Pns!Qly9q?yZ
zg&@{0SKrd^JqmJE;cIl-3NlgQV}RADeC5Ak35XS`8k&GSzD)t6{4ozS-W@iCi@cwc
z)Au|o4B*E<9XUzG*Fe>>8hKuU(W=O1#w`q4fV@zsWAzg&8dGkW>7nc+H6ODeO;N37
zo7*iI0^Ty?j8g}JU1{wIbh^qXNGWA_o)Z=>mX8}vA$53NP?w{Dg%p%>X{;BV^{`rT
zM<6wqcMSEqQ(R(9+(lW;tfQHuahL;vwn3E5b=z(!cL#GJ>M_-d48+JMI=J#8-uI5%
zSggm6^-PA23>4tx2)Z%9!!!wfxwKX)P9{R$FlIw;JV0<z$nby<g@)mW-NOd?ExyPD
z={h7Dc!~UB60KYdEKQ;0jqGQGq<0+lxjSGpiQZVXOQBH|tWlZ93!x&vyQAcGO)ImK
zJnpephItEke`szFqEeV^0_u#9RqalFD2;~<dq~&3NNNa(Wyu@#Tk4QNmZeP+Ks!OD
zTiDK-H=aG0oS<|B6nq3fwInd0pT5RWpbaU2J6QM;@zL8YRIN^A!`l6Yq#4B<?j3Vr
zuIE#(YtXlZ>hAx0!^WgGbJY#R)F-qf#Cj2|4zhmX_u@sLEx}%am373X4~G<3)t)2K
zImIntV?O4x-)RDQp{4gwF9`cPXYVBpQ9pvXDuE1Wj`wEW3TgxlTyQR)Pv%B$hJomW
zk=4|&VQ{7vKAHl8q(Pu0+W1MhD{g++VFK!BJyv(Nax4uNSvQG|3?%eZocHTQoBL0F
zb~S)Q$$UXKj(3KF=>b>IEoz4^BqYBIu^l-=aaxYU2phqJG~gES)E3>?iuIh+bngsL
z9)nqCdh7M*L;v-3$Nf0Yo}b_g_wz%4*IfWrxn5!dQ#9yIs_J{J0PKA~WoOUdFWj90
z)}0=F)<62t?}6$an{m_7N000OIJwpT9P%FIT@nS*f>~A1(E^3Iblq3w0!sV@P>1lx
z*X7D_AMn?=+3Bi_o)oB`2xEa@JzBzq&=5&#!|Dm=KCAirH<NIH@Ppt5*4d$v^_fPi
zsivBskHAh@R)l<%$PaQzOs)>=(a7Yoy%YFs-*-RrA6_Q=d!s!J#Twl<@yh76OX=H4
za{|8Ij-xwIr{x8j$ua6KUFI2E*42#${M7E;+XD@r?S`~93|o4R8CdCM0_ou~m_w|a
zZ>S3|vDr859p)apbMRAHuE5Ru%>e6hWE6udAqo(&^hO~2Vgw>MylbAJ;M0-VeWGYD
zQ-)XT-?E<K_a(+3X|tzm%9_f06^E4cX^ULi^XfnI=`<^Vrsc(}WtKHWnPfBL$k*@%
zLVl7u2a(i}Ij7NlcAC$C`H(6PxsrlR5a1FxP$e5GhsGHrGbk(5QO$XVNUHEdMVn&g
z=%eGpFK6fjJYS%eJd6ez;cLKET0rO=8A&0N3QuEOnXaI0N1i#jC19f0<i2z{%VK8}
zNYs2<LSn|dcdWO`Gte~^1v!KTT5L46Xr<hb190`p(4~a(TA?5Da!#{{vyzJ&3g=-|
z3WIc9H=ph}9+GS}&v19SO;K{w6v0kmYF1sOi-z67SxtRX9h)hR@%CBI?HVp;9(64Y
zFwOwznU&8J4eSm9TBy%6B;l?*Zmi^_i>mUx2y(Gw<*G$LGD|NH4?A|TO;N7Klw;#F
z>h)<@0-R5y_9^Z(^zo<copjfaWOIj`JL5+YTEUkZY!u{F19i^RmoKGf==@Es|L7!1
z;2tlstnlkWU!eD;8yl|5JbnLSr2%nHOu=YGmI?pCaS&9^<4zM8u<)8tWaPdR+!B%v
z+KSgVA$7j1;x}|7FY*;Y6dxtFL&Wz%RIGT7<7icFjlU3543?>9+WH=y9mHWfc?``R
zB;CdPE~5@%>MQp-+zO<|q;pA*Bp5I7&ow42$NY08gv3Gzu``aFVKam8`itUc>St(G
zBOv<?U2`4BI+0^skl3;#(;-0k%;$_Cvar`OrKDx+NXl5-DM-s=AJCMMvO2&eXrOJF
z_5l6#XRJHQWfvuG0?#D;)~a#P>w+Ow=%#RcH(5jQ8F2;``K#~WMN6JveEDmag=nxU
zEJ2eA{e(4v-cd-Jp9H@}@IP)s>x0$1g!+!2-0rL|%lG*lQLZSFwIhfB%9dqP$<{!B
z--boj6>_cZ2kd!p%#7_5xEYuza`>Dw)=uKMS$7?}5uU9<Db~Y`A<#1Z&MLYEuv6uF
z)tBg@Z(RG;xkOIk8Bg4Xg@AYnMFe)teY>CZ=IL8;GIKQN7SLEX>gjs2LJw1L(}L-s
zig`|vScRuG9RCjQ8!tyda=sz=qo3U3-#va3pXy{cG4r=KLi;J;MtP%aOs)1*)~KyT
z_<NVy#5Ez6$;RThV5j|=k$38zF}$QG7b6`tktygDlc4(05VC-(iGEvMs?0m)Gh22c
zKX4V;eYvNor<k^HnayzLI|2U`e0X|0N4vwLKI|bIhaopd&^N*neO#aYouHdkYzIA{
zZUxV8i*xc$^z=}rXMce?ffMf-bE*&hQ#_mTI-2(xN^mlaniG+Kam9ik>n@%VYxEs5
zK*+oVzJ5U=%iE(iBO`T&W6Y8!h8*6(mGC{e5$F~1J#$RTlGZzOoal!qO5UY>=s`md
zc?Ut4NEjWB%jx9^p@ODQ9hI7*NHZema~5iPz7;ao_#WBY2FGc+$U|-k9Q#}~7}-iX
zSZ)cs(XVyf@aOESqwRIa08oldDX7{uOa}~4#@wmRg7qY<&dUoY(qvYp1JC>l@@FKd
z4CIs|M*RsfD3k+UARNdTB()jWd4zxDs3K%(Wn^?qij5y-0;KI;3I+GMjt|GDtnUd|
zO}{lVU!^70_F!>;p0+*TsX=)qSX>Nrf}ixdc%&8SJc;~+F*6r96!*uwyb_n_^#Vh+
z9sQkV!*i4%&3rrgM`7^E6Qi1y7n1aq1TM>W<)qeRp$Gz3<80t~Uz6G@oa7z_6RFUI
z@}rwp1d<!B%HbF>`Y{g6`_{MaP1y`O$t_k}D_uGI>+`jlz++R1Y95<p(=d7XRp7SK
zCdW3&?MkTHN772%ymrr6ZG)NGzR669jM>rr2rLd>AW{sXT!CxG#WG*9t*_brNoIH8
z$zO~aVcj6OOi3(~o;i#@X6*xRDsYZQr*%NLTcwVDb*!)3nQ{{K<X?9r{he*bFF@uz
zKeh8(Tlc7fLq9m9?VyaFS1tA`II*=vsDhQCl#s0s#s_1|o!RVWAL=Ko^6YFDX!{Am
z+e``T#VZfL#Mz@`2Qw=1nDqJ39%hQiU(mB&&0@8|#=<$j>gR!apM(~6dCaZWqh+FE
zzB_zCBCYlk$r%KKzY<>%3^~BZ<MRE7Wjf8v{^z@SBC#vWReHwkfh+uwkU@@reZBj7
z@6qe`xA$JJUN2u4uTM{I_3c*#B4t|n{KKylcJld$*SoIC-_v*Lhio!W`&5)aM(mGY
zn2^HlGb<^m1pb|#RW^#`zraBXTrcn32FO%s7tmFiQ>rVJ0R@CqxFy3u9%DY>hgAm9
zOzMSr^o9KO#UoIxKis7Pk1$CwR!dD|)WEWGYzr!Q=jj>y0I>GR9&Ys217Kj7%Zv1q
zVeQhhq$<}7Q`IPWS#oA>sMM{z6D<oy1k5r0c{$I?$>!k-c&JBkhe#?dzNM4{0050F
zo$6Ruu=+eK{u{l4C*=&v-1cQ2x<_YA*Eue&Kf@1K%lJF$6gPo?M_*uX?$o|`xLV3r
z%SVl$g7-Gv2~Y#%kM5$z<^)w!ZOhG@V&qmG2jF&xd4!r_ErX4k0;|)qT$$f83HDJc
zkf8bz%=n?N^W46JR0jbI{{(z9I2qCacSOH!_YS>dvcRdaaZfG_kjRIcJe(uSA#M7E
zR3q-6bI63F5l)}&-*f-hS9Phf#9T9X4EPD=$*Zp~UolO<i&ia#CKLxm>kS|FaF}34
zyv5AA1?P%d{wI*Qmv{opB><h@q}BMN))xJzp^yv3YmuMu(D5_E>erSnxS7Q1EL)zr
zlE+dOte?<eze&L=U{1@o3d5IHKn&ru3-$~KMP#hBF({3WDf#=X9H%o-=qN^*;~HfC
zn^4~(%r}^s0C>y7ZUyX5Cj{SupWQQUp3<jp+s3WG4RWXEC0m7U1?UCC_ZLgVONbZ#
z|H=FE?zW9A-@nCA0W+BnX>-wH$2Jwk$MMqfn<Vzw?oQ89+zCX25@Hfy6QpD%)^~q(
z*Sb{zDJAKinfIp8=~x5`wb!k?{w~D5eev;6pFH~E;?CjFio+*sC)zz<rl%x1^7wU$
zctRoYpON@_NsbB7CVpbr&j`dxx1>Ehwmr5fg4+6L7}u2BF#C<9R*|c<6J3$8jl}l5
zrryX^G+B|0C)=h>h=B2KqYhBe3<Wg=SbfZj*IevdabU#bVzLAx^TpBK0fAull2=YV
zT$S_x^CmGN6OgrIU7fMn;>RAvkpluym;A&r)G{r`In3hs*~!1>E9+ImXNH5CL(TOg
zc6z|{)i!v<fQEqz5%&rv08JA-cLm~L?F6Le7H%m4m<~k}Y@OXe!)1Q!{v?y9d{XOy
zZ(XCaYs?$DNx*;I>dBr86(V7~suXcD$9dbgOTxY5AM$jT|B@jdMhbRraNk}yiBcj_
zsac?G5E;pw9c%A>%-OMCt4SACXY~NUogKun*K6$<2_RYx<f4<C+PiAxMUgF$aiZ@;
zEys%vQ-=6xV71l$+~K18lBb9VJI*iw!rjHEXINwb>=UEwEYT`FCd5$MSlZ^UWcCxy
z_|FDPz^};w94&DbV%PZp?&AQR8$-vw!(-iT5Mfc(TQ2%DfUQs1s?X3`G(z2OsK(%N
zM&57en~57wNC;xSFBfi%;BNKF-u}VE{jRPr>{Lc+^@@T}3T6ZbUN16lNLN})R~u?-
z5#0pvU|zP4#H3)?j*(Wr^Y{y}Q1A1F=fUOnWLve|#vYe7=>R%+|L*Psk0+&91zh`r
z1yHaLIo%b$NH_U1>F)(maKZfo59v2kl}MjaSA?bBeWPwpH)?b|3#FM!US;7fn~95H
za<=JaZ2Kx-0nJ#RXMAT0vjKy2A_(U&ksvqfA&)TPK~|(?_2FJm9J362i?B#B^M%ee
zGd$vrsMeL*io05mlb_9c`|R#s?leSwpiXN+gdjIqUkr<gW_dK3Mq<=r;U3rr!x^YE
z#5UGof`Adt%M(>lC;p`WU91~g^M$cMTO9>z#Op3PQr#UK#C}wy^}w{5Y|bM;0z$KK
zhktK>?|$Si^*y2~S3tsGTRQRL`|lr9nV;b6pU}kk6D-G11fK^WG{8=32svt^-B%b=
z`EVB`6C6TN$c+o?fLjVR7G$$;EQhKM1dP@{Hy4IJLP?ph3Al#aHKFO=IGJ!07y*so
z!HJ%GXoDHRz;R!AmdE9icr&0*vK!pNU`@vWOFx-W(mm)DRzfTYY04U&=mj?5#txf=
zN-I!$t09m^N9<Elh>LotD`p^a%b=8tj*bJQ12jLO8MF7i6Y;sKFF!a@UjBx=K?YZp
zII<@^BS*=tTg^lC1G3#X1oc)&+$G&veV<(-mN(*QxE}<YQM#SxA9o&&@X1Fsq-V>I
zd>y!XUw@pq1#tf<7u}EJSw4P`6~KOj?Li1qSjX|-2k&lo!8LTy8Qkf9>;}>Z(TulC
zG%R~iSc2NPsug?=pc+9*hS|7kZ9=oX123lT;8z`r2R)gA_Y0-uG2rgK#G*jElYEIq
zin3oW2;;tFq%f*YFgkq=KA(j6%jNz;C5(GaizA)5VGW4g7Sw{>=}<4UG8_-b1DYDa
zqY0H>yph2FLIF=jTZZvwB*AkZNVO(8$ciKf?*&~9nuj-+#kd}G!t2uUl2(;Yv&YzR
zA-G)@qyndZ7*0FsZdyypCh!=8P%zz)LgCxWvELMCyDkLUjXn)foqqlYJ9Ey5E4O{K
z)o}0N;NgK$6f|@jkaii1LoAk!oxr3u3dga;*pB2X*wA6TjtbnRVuk{gJJ2${HcQ8_
zKQDUhgie4F@TtVur^(z&8|=hh4JDgntLETdHA=Ctr|5P6B}X8IT}omAQF&c=n3s_4
zs6MU5#^nObAvJN_3|HIWUr(Yx?ivnoP*x}o`Hbfi3v*D>JD%FZ5C@bTS8I?xWCU`&
zEymY*lTa{eJxUJ5k#=@KJk|}vvVwM0|AyH<+CJNM<lH6dlSVK%Vzop7ty-CE#w``y
zboH)UL6{<?P^W=TDI1H@_-JBoDd7EvmBLHk!1vHuQFQ(on;)+@Gj&f=#I*8A&K0=C
zQi^oWz`;)6<V06YOYd^k=?=>2RBJsnMltG!IHoox0M#H+P*kJc;}n3otCF0xmw384
z_;ZbPk1EAc4NeKfo7=%(=uBxJs29j70)VqlHSoV~G{Z@V^*N^-v9V5^YJxV0E_qjz
zbvY7#yOrEdzQ!DyCZi7=;CWi4r!W$%x=Q+eyyO<(8pIY~4v{2ZM1ZD($^hOO@7<@F
zo0Dggi*z}uK1(DmNixe%mXI!x+fegyKFQJwY8bZcnArYB+SF0<D~4IQ%9<l8-H4f@
z)`v|S31~DGarEwmn;mS0Ad-6;Geu)|zk9wgMJj_IS31*XH0(|ps;Y<U3PfK+s-Aj6
z8hSK%IrV7?95u<HGUY2U#^JXRwC8xbp}PnTJbDM>F$j2<;Kc>+HSkb*Y9i9>Ih~&P
z{kupjGTvK2ScBOB?`C<nmKEbEkjD7uKvFSDu&tkLHwFCi(7##gQ!F#EB@CIeMJy?k
zaj2pv1?N~NvF8(A`-)i&h4VlJ5}s>H?H4+aavGC3@F*wrWr-LNjCBK9pLDXp>7b`y
zM%tHJrZ-1;Cj)kL786e`940!uK82;1aU`#pOetaduZ!IAPsxj?JxVhHdKK5;kO`HO
z<OE2Jc8jba5~N`HmW@Oz$PEUbgoY{ptYT8@?!fgJ6(zt015Beoq6SR?<I+Ka*YY8R
zd<@7|fawqTiE2JJmLUH^;v0hMIBAsmf_f9xxv^MqLj|@42ucAxHM$Fv_Y2JchI<Bd
z+OY+vr`eKZ9r+$vdbr!pS*GAPAj<QVy5o6DfI4f;1I0l5B8w6G!EiXSS<!3!g7#hI
zP%<N>(xV_&mkNT@4D8NY)P_l`8zG?DO~JFMm`J=h9<=!65;Xh_zsp>&a5bXk+J>@=
zs(om2#qpdLB1@EQt2mr9lz`c2Ae<*^;uHu&Vnv0di^^_~RqvkcQ^)6|-`BoZi&+l3
zs{#ISqEe@8p_bgKxDCpq+awzBRZ=o-LXcu<pbxTD;^hU|*DH%sYt^nEb>YQS_#<?H
zbmt8&7i?=SIHz>4h1v8ZT0B$WK?+vZYtSSy!R^A2g@1=xFlj$t81|UAOwZ%PM_ou4
zxkNQ<f(uGDE`3l87_Ib?)G+|~2*~1#OE%KSCyx3tsxO$pSwthojy%hy6ACb1WEbe!
zjhKvoWb}H0p|UBhm>>ffT{!8%rD@Z|sP`EUenb;Q@Wi}7M<MgU7<-DHC**vjG#H-(
zIoC%>-08W@?8r+iWKYbpNyT}v{X0u$J}j1WZU?q3E3*A{#?{Fl9~m}k@N=0Ld~zs=
z$?^ckPU&x+AQL2mv`pFm(cUk5Bj`RqV$!5*=XL9w%Nz-f&@#I3o^Z_luF2B^#}~zy
zC_$fwnArVa={ShMS0soTUsu`FZey+&63My~JPp87h#j_Us=esCk+5g7q!W~4+-VQp
z*Z5u_34%7l1nCAH9XTZKxvNPlH_w8x_~Q|PQ{2+$gC<tS9IHXZ*4UplxIcD1V1umZ
zZ)AmLZp^(zmcAmzcUkzI7Bhc-zrghX@P^GB=+2!Uc!mX|jV<r`C7FI|Wn~2ao@EQp
z+3WZOg1pn6c8-T<N$xnnD)z{Wp4b=1GSBm0)aoA4Jd(@Ik+6va1rp<FhMczYHsz8s
zR!pS_6dR_Fw@uj?nq@q%M45weWAavYO)TpDOwt%m=YN@a7lYqAy0}sFi{v!QDt0~N
zTNmVBVk97}8cH=_HuOq<QNtb5Ld{c5&WX;K$VdKfW4-=T04v}xUnfhK91Nk=qIe=H
zaJtG0=^kxlz(UohuG+5+ymbhq#3&+uDjIir4Un{n<NIyw$v=;i+Im@<Wfi{^S}qE|
z-3ib|I)DH8!w-Wlz>3rv0{5o#Xf(L}17Mgi=wAnZeA;arwt)RJG}{ODr^URIT+lyz
z;vb;vHhI)orcAy$b~U`ScTgvwM36jCx9^eBVhr@L1Rz5Qvq<3ZU3fzU-}0qqzGKfT
za$Nxy%NO=Upc{Upi)~c<QA4H(U-qGX`}S>=EgL@Q#+R<S>>N$r(~H~cj-ncb!Dzl5
z39`%M`36h`YdCxz;fu}8L^Ffpw-bWF<>QFgL@rbE-%$o_+;gDukX$T!G!SG|;c~&%
zxiZo3NWr0G1%X=QH3G6ElQkyy!4_Pha=JlaGigk8lLOv#w8bNUN|~HhmM$mdMN#7>
z<wc0TXIaUbGNp-~)STLyEIl*^)oKa+)ff^mq$`^e<0uY$lpzOmP`f3Wl}?^rBCjKt
zaC3f?_~PAwgV*LRQ}K2ZAPR~W#qu)+MhZW(HV#qgr3nOTVO~b=6BScTVER^=DS<vl
zpI=s)2ZVo`e~8*se9j!)fC*ZJw2%|a5y`efcr=1p2fPk~f@06H8d4r(bNY**6EQzz
zpJ?k$(M1IQnXH^L7e?<U_gVbeuYt9O1iufEoimutWr`N})mci${0<oJQOVK`Cb&hT
zCWt$}*06p_^$pos(aSlWiXhE1)sbTzT9DnJdH1r)O)gwQejx0%L!+%{bkXc7?<xfL
zQ}%>zA3jiU0NkMgP47vX&)@(|vI?SVS`opt^*Msk@R-j&t)AHCVhdpdU+P13je^5&
ztax3OR@EBxY`M3ayj~YZ^g;>$kQ_sR$-RJJLx{5id{OZ5Nl(f5@5Iq@NO7~S#E;#w
ztsOZH{-*yA!Z{SzOdzV%-Mo6`>wV+eSpb?|piCYxHiIrH*FI1TrbZV*%WudRhVRgx
zAa&H<ypRasjomV7)x6roa=sHxI#G}$p?4hRV#Wv@aBj*uEw0qYTLzRIMGin>a8E5!
z)o3_%bbtXj7gr!tLn3zJvua@OB<7Jl_o6IO$kg~9D3@0J<ux3UTuyfLSsu^*eP~Ot
zIo((1;qxW@rsHpuh*UN3fA56;$*rfnR!v(0;H;#Fw;M=+q5_5rI<f&OUHDXyLJ%ka
zhyr=)2igyup=UUfx#ROI@EF}5Gh5ETziMErLi;08w6a=VOVVm&%YGz&yAAJ}h*uoy
zYUe}nJmt8JV!s4SifpbDb9p*WR&Uj>Rh_^O#MoEa+fv9O-+Qq#v6&AhjL-E_?xq1j
z1_^z94sx!1U`a6f&IC<(oVLiXi=TcqOULi~XQkVuZ~pq{<O|0=eTg~wFwfs=nSo6j
zJ<s<J_8#nZxn}`X(-w%gee;g+tKCZW&+`&cRUG$=9*m$~o8)79LI&8yGKV~K2|GXn
zO5sX<;13>rzSoTs23}lT3@#2ZQ{daz!>2F5?SBK&1^t6QvIf=g6P(FD?6^L*+S-~|
z#l0B}1_F+lF2U9eFvxA{aT~}SI`@*(t=k2pe^bD^pQy_}fzLg{HXYnOz)p)UXy9G&
zuuc@a=naqdOLD6bdM43VurYuRAQO?$Hi0GaU?M0tQpC2gWtNm~3cRO{jl1Fy<p<rc
zpu1VY-%nPkM2rw%U=2E7=abJL?(OxGPaf=je$V~0w|DShAOF4oIcJ-pq^Wkp_>4K*
zCIUXu2H_p4NjwRQPNC7<@5JX(Eyp{S!`meeFE}m%d$&<NkgIyYPHb6BUGG<v0*bSv
zyGdM?I6MPtMDu;n_2PHZD4^d-+DTg*!ikJWb_^5=_|Fa3!p_DI?A>XsIbtz3!TU(_
zID#MH6>vQzoMaT0NB0Nwkz}nn#*f~CpR~<)q=|gC4zE6-ueYnnYng#;^<QrgoI{$;
zHUEmceFVMt_roZzD!FP_H26Catqo_WP)PFv2wg`a9{ULH*0qG34mC*$jb#0cWP|vB
z^C5U04yka$2D(W@`XO7nT&L+|0xUu(2Ses2yzi-3d>UwfzM_+G*$HGfe^ey%6Y<)G
zld6_L1qh0l(XWeXe!31G!*k3apI6VdBiser(>16?lL-tsx4eL`Ad%g9yUD;^Ma@OS
zRp;aIN1Cb^vKXDdDH?JGL*9@FYSXmyvGkL?VVavKn$nc9G9!41jgK^+xF)x;U?0$H
zC%FeXaT_MYcyXF(@P=qk)%!?PzyAACixtmybJZG=t}tIY!bZUZXXIT|UrBZib*ynL
z$!Ru#Vu6wCWPL*5gH9;Dzz`!WgB>Zqf|oo`3N;P4oN4JVs~iJk104{6E|dQohu?58
z4qRZ0lfujg?}T-53N_J!-0RQ5J9E8Sr!z$D1a>S)%PS$VJxOVp`~+L&C(b%Xg&;YO
zW4zreFEuy!PaHe{6Xj1yCzSejo~0PWFuP=wOA6WpD(Jq>vHubxJ9jj3niC4dKr<uY
z&4^bIx8P0hPiAR8_Z|SoaZ#kD08B>1?FOq*LGPa6a)iJMaC>QNnh_{D^{E9}>Iv7<
z1BNl-TOC4MAvf`NxTH}zAA1w2Ls8f1qifig#BrVlB;KA0PlhRiIZhN^J+0T6q`&38
zw!_=^f6vZ%jsR=qLUBSV>v#@Gyin%<U${@UEdRzO2cEon*-3K2^vy=!6}Sp6*Sh8{
zzov+2+UKw%MCw9Uj`3v=qmob{W1>T&a~D<#4#CBH!Ong>s|-Tz$~)h%{)^y*D9yBt
zdcu|V#alF`3HRtYO%VaIv@6l5g`%$+ZR3(rxp>+5X~WXd8@qh+O{ChEa<Y7?%xS1A
zZQCmk*Mhbn`FGMivtzXwqm9uKjUx5_?j7Cd{751<(-|N;u;UTU6a_*~^K3SefHrq7
zj7l!h7uC|s)7uRUOT){7ZS^QtzSIJj85GHc^Ai}vI79bZ@hq8%dlGs?6P<^&jKvx>
zlYPCOp|0w(aP_Rjn1^sws6be*7lceKd9)mln?puPReeINN40QA1kNASb(=QvZS~wo
zH}n<UHwLbxN4GSg1*dXJi&G|O0x<HB!wAbU9-D~}CW;W05t1sEdt{>iny3j|*EAl`
zqcVM)(+y$Xv3dn`wL%N=<`AU?#yU?8-4x;*N20VulN+{c^5j{E7>!PB6i@3>E`D6`
z4e3M04h>ktDa_ka@e-CLhCQI0yx5n#-dgmnz(08hO|Qmo?bL5}>I~~nUCZ0LEV;|s
z=@CEbwTyS>2AYTY*vr*ph#l>5ic|K~OwZ9;(PV0~S)2mhZ(hCS1^yE%k04DArm#{c
zNMkIJlVKSPR^OLvm|B0HynlN(Q6n1BDC{QXH9srYGuYfbXYNo{YgCF=U{MBbnr6g+
z>tebB2+L&5s0%*hE7U6vWEd+f*OaUxXw>c=+}rJ1lQ(q4io?pYy}>-4-o+jE0Jv?U
zdp=evXx|td9@`47Yj>2U)t&fR208B_4o-p1I^Hb~ht$P9709k2wu;t?wE<Z^!7V(+
zkPhLdnx|*LW_;cpD7>>OJPL5DA%fbJV)VTl7!Wd^_D#(ijWPDz2f~wwJ=$tYOzmU8
z<?Rguz~wfjGXNKdiE^%|72C1<SxpjZ^VoJ;j8h2?A8tJU5Rhl32VN-OJb#`j)H8JY
z&Zye)YFpc3qVFf5d7m{NLbD-_g{H|m=uI`-4Lu6)1|1ok6Jo(m$e+IO5j}uLj3*@O
z6H!&!^t^#pE_U~$yLMd%rA7{+ci+I4aHk`!Dz|fe%#(hhH>WVZl0?U_^edlCxwdb8
zip-RqEzS@z14V&T3|w-jdf<~WL)cO_J}Ve1^E6vg98<ZRP-_=%)4Kl-mV?y*IQ5@A
zW&A1WxC-e?HJz%@gC9+m+{Rd-+jQ)l2%x1QT%jvTje)bsvbkDj(U<5Xosh4?WDRau
zMntk9yqz1k3?|*sDKO&lHrN4eFpBPwNQ<G$lk~(9Gc?pKFUgY%InoORN`T32dA4@*
zKEtg=>p_gCCweh>TJv>4b{$L7h+S5aw)x2a8mPG%gTKr%-a-~JFcCvP{CK>j027f{
zjK_?#mTW%dtw8rK@gz8O&RW^5WR)-tzDPs|yyu_8$m!3nSLSJw@Do6|)tj@N)^3f~
zjcJs~1023wcPMMftV9c<j%m#K;^}SY(>89cESpFk8XHL4G7%7_kthga)9X&u^q~kc
zfgh6XaJ3v$QjE%X^f5~JWMy6D<h=qrq2vVSpB34~XJBr;a3`asp)GXA*fy(?fddiD
z0@Z0<1!_Cux#(ws!x<f%<rw{img9j<30+rSA3>QzdB+~d@|hT`pRph&WQ`LAOFS&P
z^q|2M0~O}!5~Q)T63UHkO+Z8;s!*dd0PZhAw?@R0TV~lI;*W!xl*9p2nc`U;NDuRh
z@4r`4H}`iEKV}iX@!e4*CT~OD+gIQ!t}T#|)i2|bce6s7XXJk~C<8lIAbOT)NW4ig
zN<;J}ou<p&HUGJzI`^dma6sroX49GPH29NA=aYN8cfo*rut(NvT3OM^bZB+yr)&|@
zumtAa12MXo0>(N$3SZ&qu%Xze3d#h}bhBYvmTVG~44xg@?M-ebhDnPytUnH~+zE8-
zr=x~BsJ0|jz?yH%LZXK1N5`M@8cn8~q;~#zNmGnjcPD$kKrgIfT+Y?QT~$1IPB0HO
z4ZwZ!20u9p4y`_Rcl%RUyIY)#j-Y}edT+jhBR0)H!0{q}x@KIFxF1&21jGh_z9pLS
z>C0~q<dmnC&x!*_7N+UhlW!ltA)vl*(&BUtA<tidMxr=vZFJz+-`zbJe*d&zcjV~9
ztKEZxy&=G}_X#Dhe?k=^N@r`sl?SL3JD9EjqSqk;(iU|0UY$OSEHnz1sC(em%WQGi
zs~3Kg&)2wbRc8R%fGxLP%PoKkaLM2skYs<98fl#;F$SL(T`~9@?Tq?5HcAfU1icfn
zg}<|(^-21jJ#FMtO;?+i<#+aZ%L@O2&TnRtuC(o@L8>bCMKPYO5eapMmYjJhA{o)0
z9Nz<7`FBB~15Wr`k3PqzcT68BY73&&xSpo7mHSeyzIdr;mHr;1=o%P?Im-NPxduE8
z|9G{W*_tNVD$Qs56FdFtEUkP+b63KC0niD53x55l{;JOMY0%O0JiE{zZP%w|+jpg$
z1l?Ueu@ByxTHN2kJ95*Cews1P05JD&(Qn^N$|&}?=(m5*zHcuk@e>LPm$8l=_fz~W
z`t56>J2syGRmngk=1EWjk!&}aC+L{4m)cR_w03CxT}ToJ4jeq^G+4`69;k!?`cimA
zF~oTXu_#WGU&(@L%9uy-ixEHI)jN!wa(pM*EWd{=3~1jDlYRVqo=+UxdFa?0_=V`r
zt<a~LDslbiIjNaa48r4<kztiw#h(;XOGmtS7{ym>(fzpS!N#I@<D&bfC_mb5_M^p7
z620lwOarelnWmS7m}ZayaKtc!dC~5n&PN`UV0v@4#cA*B+K8=6j3bS<Y4oLlpifDq
zU6t5@A*rCM>>q2iH~}^b2@S2fFNFmx+w6Bxa}MCB7y?){?g5($LceUe*zRMM5!M1@
z;v;{j^FZu7fUW~|&jB+Jo2~5IdtUGD@3DJFW^b~z+C4K0b`WN2CIyCPx$#5-XS5v7
zvh-Y$YzXTO--7ym2ts)(z(0LpuF3zVLW5(;38#rqr#4ZXFPG@oEa#+!j-sU81aB_N
zkBj7-`oKS^E2z4p2iOPsd%be?v>If+`wG*^52_6E#riS2$t{y|>SU2a&?Js(u$-Wc
zpXcj2a^Q=h{2b<0wa%&`UC@v6$<f{WyZiSZ5V$K@3mnIRTsWd@k}AkmnRN0M1xAv2
zwM4k#Cs1$Zv(l%Km~J-f4r;uH@4F)wx*U+X1ApK|=^IBz{QW2&nHe;1<wHNG?N&g6
zfa~jlaI}r^Kp`eP@y>H!!ts%CYJQ-mz^#@*2-|CU#|36YdrYs1XY`hJBk%TV;mlF+
z%b|4)sqOu-glw4bS7{HTgw`wc@jz`0$@5&>cVCT?@5&^U$Jq%1Tfv)jh;3!$0xSL~
z<SXZc?xj7%QIsF(=&lNfTas3jK_R{Cg_Q3aA93ql-VmmvJ|)3hiP7E$9T`>a*4Lxt
z+k`nJehBGl$~xz`J}ZN4hNO)gBZ~+VvgrfPHCGndzorEa`KCsu)2)qY^#N96Pf-RG
zZxz#&6ZAwVdHUzZ+1tXV%2`SzG&hP4jWL*_$_`sLVI97U!ZrzQG(2Y}@a$2HN2B3j
zcM!1RPGh**Xwz5GfgXftO||_BPXh#0aUQ>l&}=v35L@7228%rQYxs_FXgA{kvx*oH
zSz{pJ00P+Nl-ShS0Fyvs0h<ANW!E*00|qcH-Wdqp8v`D10?chf%(YO)Te2%QLWR_z
zT_a#fn<SAi<Xbz#+euc<-1XJx5E;my-k)U!Agyvf&rGlP(|mQdK0&~3`bz%ctNmbq
z|6yxq`2loiZ!!DM@Qco)TY!ZB@dU8vXCEPN%jDzP@?$<f{fG{8AHhlRBM9Xm0r+p;
z?QF}vc>MP--G6@=e(5^X3kHxC*njPJi2lEeX0u-MY;u|<d;9RqWP*56xMD+mM@-u?
zJIy{Mm;tXs!>+s6){xS@0)8~Z)VW|afT+}HlH83_fOo|_2d7ELDB*m$>Ze&YIZ4Ow
znFFeZd-o4MzqhwPbW>K8FThHvdB2Da`uGKAC;j*ZOwllBz$DIcaOCqmh$A=XV3%Xf
zFEHdkf2eME9*vIwe)R6+k^5WHBn-MxrTYMKfwEo|@cvzqFKz+a|M8QjkKaE2;rL^}
z-~9*=-u>_n{{GUH_;h$mJTPQ3LIg_6D2RS0;M+l3`h<`QP$;IG7GVpsiv+H2@0d1E
zi+ll^Ecb(mq!{Qpxe=WiJWAGS7SR>34fVT>lGYW*q5v$w-kuZerP7g>@#%q}!liM-
z4YJ$`Iuj)(awCKc9Wd}VKosnf72F_O2UypHivOA%pNE_PnK&WnU8<=;fHHAH8VQht
z83Z_cOtWQY%g-U7U|LC=A>F5jITCy2X+x3`SNN94E_YYW5Uv{i_^>t_li2}>Qg2xt
z%HrHKVkO?~CHEvF8;D@TwzZmam-TP?>K>z1s}aW7SQ|#QVJWotn1JI+xwy3EO(%)0
zOd7#nqV9PB1)08teS&{Ifmo=uK3nTE5(0hZbys1u69YcU8*=sr3G~KEs`)vHmxR(N
zsAL{{EL)8St;k<e!NtIeBmArM*!nb)zde^bltNE1S}as4K*#;4sjxzj$>V_^t<lQq
zh0f?K(gw2{cysEr0GqdU9a@%&zI1C-LzMC$8*zfcMt@NnqX8w<iU^fsL%JllSo^$K
zYmh@=C}u_eQX$}V!-}lK6~ThF6<PZgiBUeU{FY-ih*o3POe@grlIRul0j@-l)PY0D
zG|Mn36AeXnqR0!lo*U1D&{*id>}yN_SwN=0u@@!K!zp?WmmP*@fT&)vT|LMPgdoV2
zT1S)cz^z7c(WG%4MC6~S2K(HDVzkMZ-?$!dYES5{zar5t9ApjB-YOTCF(U;=N>WX*
z*_I9Z{xuB-eL-O`=+Hut;$bd?#v!2JpnWb$gxa?2L1Lo7=YW$0?Swf>CguEFxGg#+
z0UTjM^iWg>h9pc6O0(cDmlYyTU%J~G6))&->IT9nKknijrz;U|kKb9K37a9TN9s+J
zmeieyH}W@(7y;318AE+{`7C3J?@GxIH3Jr|*J3X!!p$KZ9)0*i12{3S-19iNkyreC
zOq3%TtI)4NQ&W*nj#(Gkv^}6llD*Jpoj1*q*GI>7@=J<PXL;jX-8D4(haj{xq`=Zm
z?RYiX&JvXwx#*a=isS`OV{i0AZnI9q>COJ3#ST@65|2oTr$sv=pBM|Cfz_bkF+~G<
zr)xztzZapvmR)GY6`o;9r(zP%MQL!kHXRrCa^QIMY$-YE*x9xhoQ0rOQpImh8%eU9
zy!6>A#XHa@FtL3l=%E0K3=^0qS&o4lz!3{mN)E83f2=UCfOJv0!Bxq@9jbjlp~xue
z9}dFNlPD{rBp%fJWS+XUh;t{}Jc+%KspQ4<2N)<2Cl~a&eFJbU^{&*(5M3{1IdhUi
zHs>$E9S!38Sno@NILT1%0yh)D!vIIe^@2Y*$<VK5?kFtkg@fdB<7|mXw#rwO&=JrQ
z9_-%V?G7vgMgx0*?n_4|2ci!Q$dPYTBBTrje<CVHc-djnhBi<|=2T~P1l&c*32a8V
zpnUzwB0&!^0RwZ_K2lFW5p@wlukYWUw)GDrZjDp7Dv_66MYG^{R1MvLa7uXxGcmD;
z81rRQEqMT2+%ya5c3Y19wmgpZCtMmaRj_$wS&6_O1-WVAtmyCpiO2f0YMKzA_*0h@
zxvHf}9RhnEe8G5OYltF#bP)&38%_tAYfS%!?4a;Lm>pDN6nAdbWCC8ZAV;|`UsIgJ
z?M+U9HgMH5YXkNuYv@JDFD8_lVqQ+xB+qMI2w{wzl%ph%|Ig#UIo=DhRZ;{hIJRFP
zbjosF=xn?8F(nbDg_epenB$L-?)5KAbQidVeJjduv2ly0uoIQ`gX)<=Zb=G+sHbWQ
z!X(3Ak*tj`+Y;Vwzzr;jNfZXM<D`B{G)q(H(*_SXjvB&`y&ea%T6Yb5m0SzBWo2Z4
z{^AUd7S+-#W#2n$<`W5tfM8R?8|+|3ccJvxz7|#+P_px$N8a<<;%WFM6*7jQvA>2r
zB4h^AZgIG7j2sjyQ*ru8RI|iONY<5J|5%lALbWazwn>}G*c^|YdiLOJh~-s_kGyG>
z)g7F!m8w6iEu<<t>S-c^EacYWf;z~6y~Nb<exHeY*Y)&^Pxrq3V)*I)mu-)Pf%jM)
zoE@l)yOEx;8e_r}rH?|Sv{?^C8}=-!Nc_}ah}^<r0IGg!DO9mYUc3Si(QPTESr`^!
zjnvq>e>Nm;MN)?CM*E3Xf6?PT1H-5&vVZ&b8+ZMvs?69MoHUYEuCEu#oBWqw94SKW
zGaC7`<rLf*fVMcXutE<p(K`QJ!E01CyWQk&(f)bWuds&UKB-{*44RDDG>^2;%#527
zX2$AT7xT$Bl}n&ZkPrB7w;i+EmH-D3R4nQ#U3suuWiMGI$Klv0;&^|FGOl^|#dBbP
zxz&xQWT!r_!B6vv&U3T&>W1^U)1a%o;dC;sxA#h187th)j<9QRqg?6Rc3GH!eaEXs
zqmetAd3Qsa^?(c{xA=s+18G;LPC>oUr79iawzHKHqv4q+V|*RNq|8z(GGLoXqU#Zf
zi8N{U7k{;J&Ub9WUv1W&Xtx3-r5{7ex*(fGfZZ+WPx0lk*Xw%Md;^20M`jQwCWth#
z&1C}U%^*lT;-fa^H&FS=2T)=dV0Gq*@OX_tMu>=>G}QE2g{G&ojNp=*c&KX;#wT@j
zam$hg(X4@_#jZ$S939+)9P{^l(DLJ|azeQA;51S$SsF<-PO4Z~$xo<zEzO?OxNeb|
zS$d}dX~$l#Y#002|DMiA{b=sINAuX|<AToJp(}Be5kP%rtVz5fLk1r4dLEhIQk$=b
z5?wW8r*Rb`T2U1nVAi;-R}%V}e`G~bXs;u%oFnfrfq8E`-3>ki7CNrZxHLT8@cf}U
z)D%4Ar4dmIMp$-4gayD6OY|DB;S~rF;;JXLfC^35En39LqpBAX>VQ=K6Neo@3pE+8
z8A#YL3GC@c17n`uypLe*oXGnB=>(9z<16&?RoY9hyrQ*vQph#<Uoa<iNp2^4-rQ|G
zeoZ~aF#P{n9UT<zjK0Y!Znm-0NIRNim{=O$#<Wo2-$rrV1WGrE;G#Mcn8djwx64aF
zLwO%);2H#U8lgB<b*&~36McaB%HyP>)}W<X=|Z~IZigIi=ug%x+1^m54dsxdNG>_j
za1$EGD149U=W7)oH8kcc3L6;J%N|A}B<*H=V+5WrqSmHud;Q1{!~F$1gMY>yDLYa(
z-L4={kUOK=5Xp*&gR`ayZ``VdUvJ!?Cd37cAfUw8Z@>K}Ori%)V3g|zOcg6i)}qWS
zIO6{d=vZjZkQ)36-(nz4Zdw1Z$P_55g^Ojn_%>Y}gZg)so}x9L5~xW@&dY|n!FS-U
z1e)+r0c&_fF{|?G2kN50f{MtHm%<WkF|5$B3#f%jf*PD#n>D)%;8$wI;Tqx+vi>(A
zAv-2<rLI%N*u=sB56mR=d?75duYwIJV8)VE<37dilr10$WQQsz%s7oPbphv+j&ow#
zTOwotiO(>rq&R{%Wx-h6_kF%PYrGW1vPf9zCOwhQ2V4opCtB$sSqQ}E$cJM_373^t
z_!46Y{R6iq^pQOfkK)_Y5CYN16`Ze#t=MWd{laS^wrnBh#Ch*f_&&9*JCJ^h64h{k
z0V83uifLe!n8wiHI~FV8RcN=4geD(liyPr>IZE2}Cq}Ojdx=l^Z+L8Z2ls~fE&t*%
zaW!q^Zs0MG#m#_wYW7PM14HQ0s;9GoFw;T+sY9HTPzV!>PkLVpvfvyT)H5YgwcNpI
zVm@Lko3Q|HU}pg60?pC^-6EaO5oqg<=(W3HanVM!v*cp*D7?}gYM2?LV?PP+RFiaA
zOL=iqt1Z9}0khpz8~N|D;F^yp(-(G(Yp%hz(@Aolya6OuN+g5(k0Vns@TgeN-AP}3
z;8b9mxAE^C@F!ik*Wg^*?L4}*_|OGc?|*xD=To?ra>~#MmALlbfa`NrgX}T+&>|P_
zJ)SL}G~{3xQY75lefR*7Nbc?t${$eYXJ%5=t744dd>CT3C>QGmqoF*1jxfWNddYt_
zUBcG&E*T7T*%o)KJiCBtd{WLAYga1{r_K8rqR7Q~5!j*!=4+Dy7Ry8SSNLO4E^Lxz
zu8U%z;srZz>V=U#uXw(fC*=ox7cJVjs-B_VM)GTZM7yFaRjbvBV>%I$3QXUKJXS))
zW&R<Xy(+65b;W;5psD;9_xg1<V}xdKJ#?FiTw)N-8FbLI^b+C}cO*J8y9BskGOU9`
z+R6t(VlXA7@=6)~xysxnGC>gP^-A!}yvr|52afnHG~V&M$|xRPA7|MLuIY;mVW1F8
zo!SSN6z=I*Ee^LP`T2%qXKXJA4^3!w;AZwMT!2RqKS*;kN>8eC=ITC#NVidc5B|6K
zaCnhV+%^39uKUxSAgH@NcQ;^O^jGC#1SJ;f1i%<ZyN4%;fHvAiX=VaGykTqjwKj;c
zZuxn32$4>1x<@Coa{S&^@&Rl|P$SjXcTWyMzdD_j7o%zn0I5-5M(KK0O7pf)d#2km
zl7BnIp8p&5lJ`C<_Cqa+PFvCqU*Jq@szUcmwl4$c*Ec<X;b@-Skbgx@y?j4_RB-5p
zfSqeK(`KN|efQskI>mwKck%qu-u@OR=Nq@4)X)+#bi9HNe4C{JS6p>`<8v*{PVsyD
zH|~Q%H9Z{c!5z0d*mFF>%Qx=HeJuKLaKKf8y0;?gI)=ZIy+8(RkvW#bP55a>EF$N_
zN&ryo^o%m+5$03z*(%szh-Cnq*)48cC;2O;D%A}JPc_iE4?aI^pz#EKXHcjhd*B$5
zU@OOexKfNDCysOzM-&PQ4u&hfaaSt=hdA4qFx{ZnxTCM>b*;nENdk*n=C&;$F#;Uz
z!RHSjc3T^?^q=2tnOs4jgL85s+NII&_?Hr}Zl_ZKs7nY3<a_KQ;@s};W5s^igc88Y
z3H8C{qn^=>Y@dgLZDojvU1saXhdXdvFo#=a?mH)+<Wn;C!hv;!KL_s~+H!z0hK^Sg
zK^|av(A`k<JrpKjU4Umm2^?$~<i?A^_8th7?CFRL2TifwiX14s&r8Fo=k!;ozW6p>
zoei)wvj0`~d{(9_TUZ=gQ8<ZcP%mlPedskEtV1uU9jx9aa?`Wd4iGtEGKkUPC2^O!
z8-1HtW}1g<3W}$EUgXu86YZAdayiTAIo!(~1Rtf)>~4}3=lQZM_>Ac-N&9a@1WXg+
zr4QC4LJ#MhY`7vq%C4`<H3&}fm`im&dGHWZlljdLbng^b?8z(#=(9Fc4j>G03ZQ7s
zw`AkT@P&GDJ1KFAUL$fXZEp6c)^Mu^!%5YW!&z;k)Fkws2L8rI^fqlZ1?vd+*Ke-7
zwmrj&Wy}A*dd-2+YU^A7H`m>GdbEMy2>#}};{$wXK}wS@M#-31wDt1In>RLzc2Ahq
ziTAF<OQ#13O}^*9(hvL>!alT`Q$E~7*jVy|SmxO|A_?R6WZV^P36hkbA)*3+bGVr&
zz-DldB1Xa8J1dW2OuPb>hM1F#yshlrTJbSJkq3XkHrED^eB0zSL)*uCAGx~Sb4fl$
z0WbkN>j=vv2{5~z&q!1GSvTqE9SlO?{=I|y-JoE<KVG{#WiB<lFFrZgy9-$dDdk`=
z{j7kHhl99Fr0^hZs}%BSw^}9vE1r8&@75jEj1b{<u$33ydfZHaL6u1SC_6*7(~AsN
zGC2bV@8r_4A8r+&O)k>qq-yg=%uasAP#UyrE6WLD=qW<25KG7~s^D~scRs>NLz^d=
zoTN)Su9&meid2A;%>iI;o4@=vnJm*OVa1JFK^9JYQNapboFb5n`>UJ}KXLbOIXllL
zecf}RuU<%gI+(UVH4>~kr)0M9LZn{tlBT6I-gvLw2A-cVmc8n4wCx?5fg?Ib#0=u$
zm!qk#<N>|q<Lck?162nBdMI-^AdXXmFvq~~rG8J6h8Lw|K4XJ=({XFkX+{=_xAaBO
zlh+XNzA}2<i5Y%apC5j$C&BP*-SWea9a!s`iXSy9e`=zEdn#M`mlqh^L{pVk5?phd
zVRk8K;SL<c5&b}SSx=Ci5c}tB^>take=$Xdb%Gbr^McY6J}-RC+*9l!Vc)n{pfval
z&=WCFYFU`57I0I?4B4N7)&t?;iHr?&;Bfj+vxcjTX_EFMO4|)RMZb5Ziyh3e{TZd~
zQRp(akvOVmvQ~6?_i)Y`U%YpHx5w@;uJC{z9x;{|Re@1HrO+NmUBPYurZO!cv?)+m
zgwOAzPbIUE*YE(n7?{hnqs;=+4$uEqfE|X-A;1ezXQ2`611c7ellJ%7$@_c-%ExcZ
zU*Mm4)y4=yG^Hr-ww)g)!VKV$Zqmx-D@4fTIA-s4m?rePzn~r{6!0ZPeCY=FThG@<
za0X1Bc(<W9GSX%$muR&J2}6v+I9+g<E<B`&xK;U=#X>E9ckoSw+77C5GgZcbD*5O0
zexI+Xg6cQLN#A`(8dq0OED4d^eriKQbHSyre6+I8-J%5k7*ojiIpwz)WU7j0ykRP2
zhHY50Bj62lN-?WQ-H+m$)k@*+bhE_vTIaYswQwj79y~(9=9)POr{GHIKtp?Ai)`K+
z5OIPPTzP;OM=3Add{K_aX~K#=I%);nX%Mx%Tyg3>3|PXi$VMsP8iKOXA7`^!8|*py
zAVo`N+vA{!zq&L<*M)agp8yIotjl0t{^Dfy6z}(}=>O%-(4Dku=vadxf9&Rg|Ek<5
z5S|3Y%j_dI-g$JZKR(XVciq9A?hvs|l$FD>{XRT(>-ffTvv4F6Rec(LM=v?gB~77w
zewI%h>1+370ALIQwJ5+#VrAbUsNmaWT2!DwVCXhS6&=I*W`PDz_suRC$#$kru=_p(
z)s}m7cXzi<I(OZVmE#|=OXt~lYv445zhe_^wLXDN<tqdEk3KD=w@o^ChW)Ov2MFpd
z+6@4~$MOV$=!6f}n7frnz&hIUlzte<)e=Uwo`+5Y9`r*B%KiK2wc{d{qx1K3TYBs!
zFdLi>dZd@ad_*bY7`k@gY5)cTbtdliM<ft#;W*iMd%O?M#4>ibuXm9zyQ8_6U9kf?
zk?qBYHv2)ciQa}RIS%hzC%n%dPr&(NZhU@KJBX^6o;wj=p;quK_(AGXFMIt}4mKLU
zQJm+miH}Ftr=2`<6m&%XCr)%<rs9m^I)HxIyDZ4~-eA@O#?LP@aDYj{k)DuNoy-Qc
zcWmEW8*NfwI+jHh2kkf{d{^{X#vkJ@{B!4sF<xmIzXA&lG&F}<s^HiI@N+_{Xd&Iw
z6V~;&4X%e9*BwhSWqRS0JKlc8(Fqg|%gX0KdU=7KGjOwWb}Y>NWAq|DP8aFKjrYK#
zwAsLb@JBi&@Hcl-Wdl2VhPMaIUasSsvG}I0ACbXEZ0b}GILhQi^VI0{qR~Oy(O}js
zos!z)J^?$6>~wo$@4i|?enHTaLcm%Ar|dmw)WD_%@#q(MmDR#UXh;9^`m%G~;u|e}
zM|ApkWXarL^uAl$7<wkkB~>486~8@ncy`g`YeRd@E(wo=Iem7$`hRp2SvET86b?Wt
zGCkb1p`!D;wST{R4J{td<M9}?z7r}fU2OIgvpy_2UBhijcLNxH31j3$5@o<T8rs`x
zILS_ax77K|Blgu{HIz3>4C(K$@fIe_E^1#v&$XT#gHcZwx)=7cM>*$YiYYQ;Jtyxj
z6eQ#Fx-Og&iroLORZKS1GABE@1M$Z=%V(XIMo_e=|FAH6>ol|S`r7dGaF-f2CC*jf
z(>wf=PB#9zJGkf1<hDs%7w-!<67XMgOL!p|DibFgF6SWVZCv!00z{xI9HmG}e#w@l
zkMQ{}{f<mw4?hP*+)kIc+uab$3x^Qi_ov+7mrLqu!);HaRetIXu)jody#5n5I9>LY
zxS`aPlA>pQE1ibCr<55QG6<CyJ#rA3X5hr9I(POFMRx)>ZpuHozu#qD*>musvvWuJ
zW!)F=F~=Fo@+8~4*}`X(xoDmFBt_cTcU1DoE68fP{|?S9P72C?=7=37aYf{9+DJUO
zU|T^}gh~*p^u)Yv0D5d&mH{KXKH>lc8ga9XQa#j0o0Hl8KXzUYBNLRj?cclG+OZ-j
zq}hZMO|IodA61W{k#oXi28KuU(u0uQ9;%)eAdxO1Gl#%g#mdQZ<TPy<yWg)tjF6y(
z(loWf{i03BgK@0ffkVsws@!~#k^Y{GE}bgz8PF)hAz9D!Vg{#L{hjc@6s14F6`KU`
z*xtLp*KKX|YuhuP3oXqJ4jQSA9fdBaogdA=*d1fyC(HTnez#^qeAu_<!<)5*6N99S
z4=qqUu@ebw6x0HKCYX-nH5eb=wgM;@)y<GB3DPXXf})O(5Jy*MWtB-rTgo*SXm!Dh
z`~*)n-i@SS_s2-l6}KL3#3Asf41uX|#~jI?p=Y<O$(r_{`?TSpvrxS0nA5r_V2FTC
z22&KJQVc21AEYhfNANu|lIeMxV-}g-=GDeC`5~VJXbV+@>+W~fz}5(&n%0_hNWy*d
z*FXEzqkfwhj}yHA5z=X~q=bxA>5?pQy5^X2T6o={8-r$|X((SVcn=|jS19}J2*DuU
z!hHVjFks}q6SV>8#-aDHSz7#YeY4QzY=m3Id18v;t}PWaTV9_FU*Dk{E0)uR143_I
zPxw8<g7EG)5siDTo%-bU)D%(m)a*i8+UPV=x;VoWz+@mWAhN3wCp%7OV-AC368Hdp
zZJ^y2roKc>)dg(PCP0psh@=2og^EE{4}+qch%h(~Er~le0E8_<!#YdPb0{-a>ntpr
zkmWS06*XC?hZ*6vC_!-r`Y+rgq3J=Pcmqr5PJ?|^V}~7e<m7;y;+hOs1?sryUP2HD
zZdMYaE)zCJ1-E{iOSKc9q*={FY)5r#zX!`MMy)WYn4y!&X$p3-JMNsA7vyo&A(7P-
z9I44na@k)O`3m#n+60NDCOZLVc$kHDS^({E)AYh^1N`F&NI*U<)Q;PUGk3|?9#5SB
z{*p&#AJ4K6e_oas@v}E)%e;6WJXPhQeR}G4$Ya2bjGjHgUNk>_R!o{-Aa@+UdL4F-
zA2rnBp4KXW`{C<ar_1_0&`Ay+EY8xRvX3ruCr$-V$l4b?Da$$k_B(-3n#sm^f!8q_
zPm;@W?HHWu4E6-1?;!sO@<itIR4(<H!BIr&f|~<%^&<>O!w>$Pt>hq*#Vb7AU}Hp3
zXYes<5kaaSJ@N!$ov;;P{H})j`C0^HBY69!<N@tNsXR{!5=<jr%|Y|y2k3t8y*D;^
zIZGH&Mfs4^73*doi4FRTNSF_Kd&00<K3|EX#09E^<QXjPY`_}3e`d(Jv$cbQII1UB
z<8So;fl1%f`kD*M@9FXY$lIhOA6WPOMOq*_#Xo?i`|UtBUeY)?YL-yv3<bvhlmng*
zde%ZZd%zLyvo3vLG?-?XJo9XLiws&iV}Ww@&yai^rd4lcHIZ@t9G2tPMf?J?&EWlG
zSu?yhtXZt~O8cSVVPvpG;g_^^axd}Gv7wov$)5+zaNsslQWcs{$^zXK+INmfN7g@T
z(_PJm61sQ*1oHmD-Fw|2?y?qd$qqWrCJ}ZW$yOLZX@cSzh87u^niCgC%80G~Ihvp$
zx6vmL_Ydw<2p^5FO<iq=TEJ+FVxTV^Z%~x5`3FMGm=3s6?(Kcvtp&W&cVNcUX%3=m
z8}0ZnrvBo-fPBi1(M1W2blI?*;G%TQFqsSy?4RK`VcUBeD>=*Fo`JY&wloP$Ebx%O
z!NjM$LSOd_Rx_bW1#a*@g#&Pva)YN%?!It>>v96w7{ym*(6HV-&Fp|xKVQ6}chFBp
zmz<4G9kb(!8?aj*m=R<_(KHp#ruY8r-{xeR<hbhHi_qoN@yp)NCiHQNol9NcOx!Sz
z2&ojJ@xGjP99OK3wpnKKag9g`jcwV9a8A<6SM7#ffFuO>0H-sS0M>LRmy_BLDB4+X
zJx%5-$DId7#04%F*H2X2xOJz8UCExU8<<`Y#(7{Sl`FB^KspS5Ytu5bJ5uEx`8xKx
z)zHiUO(>o;6CCVgIAild^AwT~KR9}oML$vj2+rBkPZ&*&TjKU<Fj*W2E~JYl%H+{t
z!TH*W3bRi6^?w<zt8_Z-Co?ya$=W-?+UYtpJh?kQo0uKaNP0<MVnNTr3Emyve+8fL
z&t?dmv@5|3|HC+fx68}WW5|(h$e8G}Z5vjA*|dKSA8^en*meT89)Li*QQQ7xxZ>S!
zCqnmi4;CkNow^i1%ZBb?7Q)I?J;Sy{coIQ(n%ugZjNr<~kkba<XkicH2DKy;eRi;j
zT~xx})ZT|j)0_c!&fHxvhN%JT2BbiMTtEL<r!%1D%Ww^WA%P}lxFGzkW&|OJ2)d%g
z;-Fi1J#SJgSx0*RJ=!_|-n@bk6adwQ&%5r{g@4gmWaKsEtw?F!7%P9Aw9iN;?Wr@z
zI~&HH8{0z=#O}Ace=pe_w`x&(;S6lhrNE|OUdqQQJ3a}0eSC{~F)i7!lo#mDG{Z<e
zG!D(BCh*yI<Y&IdbhF?rq*^X<)*=E<R1eiRCt2Zk^eVU;j7t`i&n=2#=9n9h=Qw2X
zfk&Ksi)vF+m!Pi@7s1ZL{fJgV8*ug~G#qLLZpOc2n~YaEce?DNye?3iV|?J)rFl^A
zoQ)~hx3AX)A_+A%L!!J@^`p?OALoUMI|tL}a#=39WfsXds>)UP-af#t<PO|{wb30%
z{%^eoNH|^7o7+tl0!6{+aHId0udg)IZq;-`YHAKv4YKD~&$F$Y?XpDMK~?~FI3~6}
z+>!H&qSx^mDc#QySQivNX+ASP(apA9TDKs$=d1PU>7_Nb25&naLOt#b*<#ciQM>=g
z4a)})AMO#*c-<o0(06MGzL_QXpJEGkGa~*HN4)C1jW<{YtYM&L8xZq={KzAfzb*j%
z&`rFn$^`4f5?FK89m$v-9k&EjJ6%%nF;J%4!L^;Lj5<x<(<)l?KJyxEc|xcoc5t$x
zz#_i{?k^21s6w4gX#XhkDf#Dml_0W>-q|#-;Z4|;f;aNS6#Gqm<8UqDpR%JFO0Q!5
z4`i9b$RjumY*O>SmKrXmGph51TAyp2VLjT`MlV$I;`?Bd7kF)B%pn+=F#_8%hsiJ<
zX2c>^-Pn0}Lk3}CUM%v!Q55qc)T|yP+4Eu28%#t^0d(H>XSYsd@bUd2{(%(%TdzO>
z&5&(kufJcDxd{#3O|BX*LJRP=tp$NL<pd7isK>@rP7VJSElDJquoQ=q6<Lci0uose
zvYFbJYKhAUSpz`ZT04TLLBAMiLp<|B%q0@sVEw0Y@^R0uQX$uUE+tGWb!)T@fX{&J
zQE9wT$l|f%9po|(q9Xc3PRaqs$R&GJ0tG=t!_5$QkJz)xv28ho-6ZJn?U;5d`_6*X
zdsk-zJtw_1qptZl`e{(Yw(>A_`m2xb>Hf(sr(OvTrnKje9eZnV^9{b4*RKz#s4$gA
zbm$MS0Zoo{EP-z8Cisgr3sjI!j2-12pGq5Ij$s-B9HRkTL!7liUNPR93Ao(O)6uDe
zyu=jB6ks}rpo3Wv!4A#=6_MhfU@_k{(pi09yLk?6q9P53SkxE2$#fCmHrL{J{d|sE
z&AgO}@{NpuHSE4GC5gIZcvhdtw-;Ha>&OWSdq{VBkWtJ1C&j2goG}SR$}Z@;fh)Hv
zG5snC+c&8O92|HkScRK#{MU6Vs**^KV~5;HUjuO4h)N>rT;3oWY;LwkMhIGULPPX`
z`iJstLHa-VN1t)GkEH)zjYSUzKeC^Ne!;x}_Z#|4-(W12Kn@ldb3_<%>m|VgP>Ti7
zOZQ)Wf_*=tA#5-&VAt!W1&m2rFB?%BMPaA2zF^wo=i;4(f>qU;s?TTx8*Q3J9gnKj
zd9o$Bhs(7^e30mJi}2^T%}GxiyGf@#GBU5iV6r9$47C{I7iC3ji<eZevd4+t0Pl!D
z=DzhdRDC<q0=vCrZ$q(`u&CB-(9j*OOME%aw&9_{R_P~ZZ*^S{=<7S?@rDVhR@ow$
z4Ew@lZX8&sXpk>GD5cMP6zz^GQ+!Kfl`$Whk#F27@i%qg<<?c5Y#=2Hs7O@6enL$W
zrIB_=P3pN7(kgSeEwc(wy-8`9296uXz0EP|oO}=smAM8plXC}`>Ty-#V2X-uDoGNB
zhvd+9P!~sfXJf|1(S>drw;0o%jLBNym<u!gV0dm!O6n_N0VOEubAbmC$eU^o1+rHu
zMUtl+>&grtIXE6HLCOXEMDUz*tT50y#%;2`SzH&SqIGq^<g3JhlCpy4qT!cYVAT#5
zMO_X}8|e1(`C=w87LKhNpFwxpd%HkOfl0@2(9;&%IOOj@fSCz`fcenvHpj|$_Lk|S
zOBK)*VWeX}uQ+lYHc`ZL_&MyEIi##@y5F9ed8-7u*RvKd0qnt>B6bT(z|{R+8#I55
zyWs8>>5O;&eT2$#+3A9Kv*}=%lYpc}T}p5jP!F;im_p3WlG&@G?QY+*FA*4C)Tb84
zg>a^`G<MJmTzUsFitqFTlC@|TNASIkg>;CACg^SBIU{gsP#DA-FuAB~`+OdE>W3||
z)0wZj=A3rp5il3IX$#TcaEILCzlkq8ti|(fBoRlxk}$%H0S#j44OEfinJ@CO+X@)!
z3trU#`V63)>L&*~84-eFC3zLoYgV4VMRu+E9cwGxV5-f8eB&yH^sk;<;ij{r6BBS2
z)Gu&#OoQZli%{fRFnd&8pk%+X-0lE!^N=F1tl;%+`t|CCD>zK{xgLMNwXw>!?b-B0
z{i4L1lvedCe}t1S_683U6d_UdMDgO`2@-${MjF_ee)tX;hrDn*`qa@AP}47`AE1$n
z;`SenR^{pGEc*y{sgGy*B<p^PLHhuQ;!6Buovkxm;7^A^h&%uztudP6R~DmvD|VR`
zrh}p`@SqZ~yIX9A1!d>$$Ktg6e5nW!fabHgOh@}sXK(mBw+-Ls^Q^=?cU-t<s1y4C
zt6dYXO8?SbdG9;jLl1qS&3j<t>arN0Ez6=@SHNh%eTf-Q?PG%_hF?90b)l(i=w>7|
z;37u(nXW7ffct`rJcSsh0;@)WuZ3=g1-L+G{&J_x#@G?Op&fBY*Z>)u4csf9f9S9W
zXkK6x`uA+q64<k|e0&xpig%pB5?Q<Cj4>9FAH3p7gcocOrI2<;O~cKrAy0eI!HHuZ
z0I5e*LLTV~cr|r=3BTM&()K=IpjUo^)Cj(P4IKgb)ePY%91+6=9BvBF?>9`q4vwCz
z_eODbD6??v6-sw#rjS<2I}?2DUlObAldLziir){|J6q~g#3xgMD3RcO7?MfL&q@f^
zUeH~o+rY2!ipBpOpMw^KAw3NPERiiMm53p)g}dh=Bk>qi$xTJuw=w4hZXQH~;teEe
z+fB+_RW13&!7os?M2Q*UcbIEdE}f$=cQt<ajs-0ptqk9r6@vVq;A=DiY!-Gj$}8(2
z6tLkIEl1~@?*NmngSZ5AHbfOl<>%Y<#PJSDpT)5%DQA<ZlWOQo(#uHV>!)NwSBw;i
z9EFJ${|V;a(78{%EA%0rUN<4EAi*HcWqzuv!@9FJJQc#8)b8@U`WoLs27<hJyUa3g
z4yFt|3<0Cb^o(;*d-?(HBoA%+A8-}*;czcVh*45}mj8?b2Vi-9pox;;bePxyUShm6
zB7dnL{RL+lw#hI_j$Rj7a1sk(@mnMyZrW&-)aePuEl8(Dwx#%?1=J7Xcy2}YtNxT5
z=ma?`L|P9&x^oAm7nrXB#r@Rq;YqY9*tsra;c5jSg^+l0iC!7*ynwlcP$}^QNHMh9
zZmxf)Hc$P&Ny{M#c=1)Z2sS8jXQyG}!tn<Qjs*V=!JT0z4S~Bc+eT=~g5&h)T!{9I
zY<~;Fc=EzDg$FYW6=nVL_$x4VwNH2GB*WpNKh)(LML&8-4!%)Bqz;Fyf}Rlufx1RM
z9C5ZTurP2~Du0Bsx4`G~XKepQZwgU&5cUWrCq)N8U=2zH_0rk%i)IZ%Sfe}cdZ5kU
zdLcAM4;bPB{$nOn59U!p1^};mCy(@9HGUbP{stFdFyiM$<n_zGsM?jI?LGCX=D;>U
zLSPt=`IQrU0q8NDW9loU`AC54b(@s`fiy2nw814s6HlX3;U)U#c4QkK3I+3@_}Jg*
z6C~2z4Y<v(GtgGJGtd@<a|#{xzF=%rnXH$T9^ylANYu&U!?tu>oADoe$+O96mh1rs
zwRcajZpS5XoNjp!6nGuk6vRrcG<}MzXHsUQw9AVrV}4@(t}}%f$KC2CxL^$x!H`b0
z;=kc|<=21WFYFUKP0w?1`C_14L=@G}Xp^gg1n&~<EkG5Lm%2RaMZf<RKlo4MaEslY
zUXpVfdcF~t4Hia-Ck4lq*(BQW#MLrVD@3V}Q#_O*1F&I(54a&u#-gvno2{|V+9mBB
z3gz;d=m%T<4}G#}Z5|zGDNfycUq;<f%p7ecED&l`gq%RQA5@LXJ6zRH)kU9b_o!T^
z%N#tn*rChg&XN7oP2JaUeBF8@^YX4|(+bt+$#X|C<E-V2yZKwDs;M6h`M@8uCqoPj
zfgo@2sE??5jdL$30j{$R&-)CwhcP$7h;N1a#%llUc&4Del}Hz}&^|jP)*6EP25^Ov
zTn28qa+)lFTWP-7m9_B1Q*RvPQzn=ls=?zVT(`#ErHsbTjm}Z9&O!Bu>g5ujwEB@?
z3uE}@mB}(4cRXCS7!(To9nv%EZb-189!6d~Y+b|R)xHd>_dXdBjjR{kYb^Mm^@98C
z8*ll&7r>FC?WcKX*b5ldP=_%a$d~D_8l?&9lbNZmau@7^V>aD=ubB>1eX?=$X*PEx
z%>kn?(=55%gA$%gQd&+=0_NB7K~18Sc#?$D6?kGPq-L}cui`MdH+Vo9K7}0G300IC
z+Nw-`8UWMiI39Y`>HY+H=pbx0Lv(Z2{ZjdE)LqpPI=RP>&o>VvQj*4k2v0jje9wJE
z7S*IqEZd1VH*q`3DtBmBeK#X$_HdlstSlFO*z3vdVXL);euOn-#l{LG*piTGQGZoJ
zkPEZ+UjG8j<ao74K!h_7Fu^lmg~V{Mo39F{6}l%RiF#e)_8vU7bFs6@dxq2&0ju34
zp7FtYl>zE9+f(sOK{^U^JOdS#3P3e>9iTmp>dJ5yw|wW#krF8_uII>WRK$G0VKe!1
z<TKLr-A?pSH3L^o+94?Xob^Ji5yIHaboR`60il;4Xs<LHkDY8-Q-s1XD@!!uF0Kif
zUv_d7Lm<Qs3l${oSR@S>wJ1I+hEuJ!m7pCPyc7x3tbo&Hirmj4X<Dnt=l*tRuGE*?
zHGxyCM}-m~h8D)Uu!upN)&DmX<4vcr%4@>z4(ow&H0h18aVCnEN`+Zs!=9M56$A;i
zO8&9V-TP13zmOe8E)akMZp(`$yhd*Yn9BFrrCQ%#XOs~4GaTP%DtBFE6y8J1pe1-w
zI8Ma1-1bhLx>dqxbvb&qo#gYbZdfui$3Vow?c__-j)?JO%=Oo}5rYqF2T;}1mX?u;
zTm9SoAtcK@X+%*&vRQ@g_1+6n{fcuSVGx6`XPuy)@)O7yyhT|@@FM7*LL{COQ;gV`
zd7^1o%?<){)<9hEu1E_D&l=Q^<cQDupUBxn_$Hoy#I&b~H85d8WoV9qWGmL%)#ExO
z^LvD{srMccOswjTd8*D{{h&1ySyY3y+gCU{c7R@v&(eJCx|LRE2=qXQB!wW`WL-%L
zhM)Ej>KY8ZgmV28q%7UP`|v*bmxI)ZvVja`*wjz>v}e875>S@(QRZYvT)Sn=rb$C%
zNti7CW(E-AQ*0&P^08c7Z$HBT$!;7JCFmwVZ7=8HIIxt6vz?!Tcg9EN#gud=pH;~m
zB|0$X^^(gxoB1FQY5xmy+lUms8t~5b*I*Bb#8Ki966;O>s>=dEqW~H#Wj1RerfD2n
zt~r~TTt&^_bRzb8nCd=alV4Lh96XPnn?tZ!L`p=r8!(K`)(qz28{||v8(P%1;*)qK
zrkj+Fb6TMr_&kRzTk|H55{=VZ5G+!Rdv;~%9|!A$>{TmC0o=@DTdF%!XY-7IH+%2m
zycr6szyachLwy)odTfilqz^~xgG_=W(~r?MN+jo0ztxl5Q&$sLF=w?l%xK^eA|B5M
zpk%3LN9%7btLcv=%&7I5W^F)NU=UqqUPm33^M2k<hadAphaOcmn<Z@`ywdCtPs>&L
zEE=F8TpCGBc75=AJ1tREDMeX>nR*3%0emAs?~9S1*f*`g8}(gzG~$z;)vYF#Q35G_
zdbEjDvL%1hMHcz98YK#q6LZAQZ=ko=5!}5fYQYc+fzbh}J0tKOOlgkUtPlOX0KpXy
z4;om!IKPi_-I)ILw83}H5G<x1=;&{#rq#48SDsH<Z~~vyFjVddTsjTX)3!rIH`UFS
zRUJi}__!^;1c7ls?2HjmxpvEP<<)aNdGs0;Ds_*;z;NwbXd*IV|E8Lb<OFEtgOePH
zx%9?!c6tk|BP!|HxC?U#=i@ON`WU#7Xpog1SiCyyL(k4F4KI0uqrq9dALZ&pBQ?0a
zRsv+nYCo%-8wf8@>xeQ5z~-@zCn^FDYxAq-a{Lb5n`_^}LwYS-eN=!EIlCs&C_13c
z-LCdNX?pQGuD#cIr9-tNvlZbPuK%cUSF|{465ADbAt`4;Q6C%TBI?Xzzwbdl5eFZJ
z;=J94puqUbti`O!ok@{7R`nBnfSc36xmk}}D%cn$+zYP0nzv5!j-ijZ@9`B68(iGl
zjf0Wh(~*>`#aTmfsO%QyI0M(G*ke&%<G%xx?Es40k^j|vc5wzmyw{+qpHQnNNa!_5
z6&c~-hIg3>$O=^-J6k-yj;?hFyQYT0x~R_bDa0M?Tw7QwPk3QN#ST@FAkLJrD=5{W
zadqLDH3|MSk9Hd6^-Uc!YuET4F<tf1gn^;%azd8FcNm{|_1@ID;<=Mcsy0M>knmit
z0?b7O^92T@2CkmUL748ZEy_LtWNQR10GP=XeGD|>jxf5OhutEiMe1S8a?$!oIR2<M
z`HP_ae61SisD(K;7mP2ZVI#p)b%h}S(+|jJmeXk~4mNPlcq!dXd0CtTUd@Ur@SvN%
zpy(}&Lujw&pp@buqU$vbT@`w9%W=8muqIaJ1$@*sH3Y$rQLYyc5e}8m&EH3McBt+*
zL$pu!zeF!9Zw%zp29eS}WQZp}x%>hv@fR_A>ER+m8E|1hyPe*VFk1V&u6wGHR;fsd
zD?c!?a&cIk?;n4{Q#i@k%Z%cwO)(o4&i8|Rdl>lY2NB%UbdtR-NA+X7D*e$7ZjF|=
zVx`5USQWgDehOqvp^VwP7XpXE0K9>Ckk;KR!QmG88bxjfF5mHeXCU<|l8Q$=@ECXs
z1qp?~t^xW-D(FU=C=j{(Na#q@C^_VTzpP8j8$a|hr>M+1N;W%3d4&YXkv<VKRNdL!
z0tx-4<zs4!Rm3M+kh^?I=|mQn=xYG&RwZbyywQp&7wHgBoXl2MD;1I1kJc!bY0GWU
zwE&C4BQl7z&qB>sg*hJG5zZ?NN@QWJO7i(Un?M2+)^!rL8-5Jl9D(Bwb)!wSw5?tq
zEt_b*4IEs&Z>gQW0abvBSRZ?a(Qj34o`z-U2!($<()d?`*04*%vCR0E53H@F7Z#Ry
zok(#({#1y|`XBUFC@m9GLb>=4reprg$UZ~GJkaTi;?zZ}9zCTA)TWTGm`Gr{aaIx=
zs&E?IntXR;I*!%)pWek^;fZZ%2(A}ly!cO;Rlp```fUKR&_pN!e&LRw_t1Sm2J17+
z6&nm-nwYw>`XtnGbMrpV6@K4I+Fp!h*eMiwjA@O2_tbD*^F$N+?`3E*PFi~ueBo_K
z>=ftacNVb~N0v85{9SjGzeQva!)|JIH|_wqRxQ^BdlkzltZ&lxep!E@t5$5Nb4!3T
zIS82ke*Z9>DJtZ9Mt}`RB$z3{m|`|7s}O%@*aj$R{FHa%qK57S#|Dp>>?m(^k_r%c
zW-P|&o>j1gPAe&=N-qF@pY3E+Er%tevJD+EF478!Il*d*k@PL?NVYmjkk^>CnEBGX
z%d7gKM*%%t0hX7c0Nx`a#Zlv~whVQqIB*|7E5(5?kF|Ww%nZ%5)tfP4BuX8V#vm56
znKpQAcOeT6cmP}I0WHjRCzlGyI@8V$r~@VcHYgMgWr%`E!EH1|rDJOG5&awJjWr+w
zeR%wRJDsJc3A$_K=fEO}6FU6s??dm&t~a>fahPk~Fr>8=6vA7_miG5d5=K>^4$t$#
zO`c7|<Qs_!2i7wkBmTZ+EHHGRh9Hhq{{rf9J(>9RS{h+_lix-P!a4BqLrfDu#-RRO
zI~lvz+XHYuu)2WmhfieJ=(rnS*94t-U~f@eaiVXyR}GV5wy5=)Y)0MXP?R3WcJ#zG
zEe78W6SX_Z<GGbq3*!t^d$vvA5lIDttH(MHf8*42A17t$Se~Lyye0N$kS-RpOF0;d
z&lGT&D(7&xD>+xuHoHdF5$HY}XN%DZ<MoQNLou4T@j;CN<*J#R+^6M5F_I2QY)_A0
z{$=4`(Mss6x42aPH7^|&015SltJR2aT=NybeYswRuc>x<EtT66(!f=SZbx%woW}kM
zD;_S6_lvuJIRdf|3RkxW!>I0>+5vUYP(FxdZoWv+epCy&K8!MZ#{^Sp1HMp-$`QjY
z!7?VxC>FsCMd>s{z+CXu1PB{67GfxB2mMy?u)AhKqFjQj0~SqZU3G&bBSJSIzX&D6
zUC{eJqNV-5Qc~+Sek&MQh?Ivo1mORR)TJqOJ-|K~$W$2C#P=webFpC4>%&&iqT}$O
z$*^vX>_1BO4h~yU`Pv3(#xMw?smxoo5PKkmxP2BHqgHGcK*?%fkuH%SG~DuzlFxT{
z@jO=UtnTmbO4c;e0MdD|AQN|Ycd<%>j{w*YxEM+X;F+yY-EDVrnLGhE<>c#ZHU-Xz
z!kQP5CAgx*hVJXL)oM|VhQo{OWRNb$XO3kUl*?22J>1{j+uc3bzq`A4_x|1cLn!J>
zp14XURetKWAzH<Tc#jPhXAAei?!)2k{o&7;kE!pjrSx)WG;8>vwi9}WEm)CrnFr2z
z)Sz0$LhnQ%aqJxY<CdwBmu&@<#z?^dWpf9s7pMe;R6yY0QPKe5K%Za-@bnnYt?p^Z
z-=nauHAwZMKA;O5m$lPCxbk9weNnItGN3&p)nW&NL0kb&x=4<J+e%XjF3uJQd^Di+
zK2Of_*`%}idosJCZVBzb(D*<yDPdY6$qKqD8Lde}D;u3tPhhG8sYB8ko@B03$R4lR
zc%Z<`0x=$-aSsF8uC*J2%0rR`2n(ce2_APg!31`gJp?i^@L^NGB`W2cchBGOhphgV
zdaiB!alxxOD=X0KttttALiO-T=8hG^j;E8n<k`K++8@eFh{tgo(+P#EgO$Q#MHq$$
zf8{TN?~k|!w>9zd1IU>KSTK;qKnc8BEx*S2aceSOEC>F@Cfz!e_#N=5To-(OV_?o6
zQUSPJA2&4Gz>qYHyWF&|N%~~KLK}JR&4b<q@v4dWe5##-qH)9M+`}Lfp%b`=fDUMa
zY&j!gPty@%Mp=0uCMPVyT!clKgV6un-<*T+xdDbll{a!SravjC^5w0Ewg{^<6&UEp
z+C|)h%3QP~Fl(M-XsdBHZRdQQ9v*rEU^#P)SLgIQkc(#t$)QamK4ATq>4_uyuocrK
zrG^FV4)ADBV&mS0Gby-$CJOv--+uG791B8505IVX5S|?$X)suo-$0)j7yg}3&SeiA
zx)KcFXa<Ru+yyGf)m@Y(I6t(dZOQ%@K>-9|j}0dxhR<zCZ5IViRM)4|s^=Y30OMxN
zfyQK76trvhR!DU2FbZG<EW81Wvz7%c*_Z(==xZ2$ZF?z7c*FlVwgGoTJgqGb3n}^-
z@qy>spD{raM%+S3Orhpt@O>}*UJa7@QqLZl$&{SFNI!K`l3xKFS58^HIh9BhFVb+`
zgc<bcVp0V(5GR7@<JdL1<-96|^O6Z!G|2u<tKEiPx1;=WKCP42!u!f7awX8c*LFuk
z%H!tSram>$f82wu9hFGMgzJekrpATjLjZjN;Ea%w=j*rMev_cbP~`;o4DzTz%7F}F
z4t5M{51vKn9XYr-OIH`C$luQ$Ym+b1(`*Qi^y!BIl={SPqW(TQVY%PmVe68wQWk8Z
z>yjK4|LGP)i5*1Of_&}?6Racu;W3KS@62*zHGXQ%84kka_5O8}@U^D!X2p>?C@rOo
zO<;yi<mT5_jUIY!x<&?|6kl(S?n2DVSkh;$n~_j!hT2HOOmTm*;o)HoClS_d!_`rh
z>*ZJ%clg7_o#81c$hN2iAsI8u_nzfzNKB`s?676I#zw`Fy~gp%tT9FSE&0L8ZOvH-
z>ldcqlDB+ia>g*rPl{>0Fryh{P+P>H5x6#tqgiP`eeOk?0ldhC6}BS`yGR~#Ti#>P
z(Mql%!sIt#V&Sxiv6bNN!<q=%p7ambHhIRpda!+%{ENno+5hF#Ng)(F&G3>)mp_vD
z^AXrh$62Kx-R@kKMfcNT4p@`pSw4PmKT1DBDR{j}LI9@j_e%)mjPjc$gjWrX-dIAA
z7(7?v*!JUj{=uFJlk@Kyc_E&He~r9g0)hT3<%QqODz`L;Gfg4)4V=Om5KiNmw@?0I
z1J`W;@1vZIH{y{08~9m;1|_iEFur*si2T2fag{VaW&+u%muHq)$Mgg>EzCYP<Z28s
zW18@$f{0Jt;8H0<Nm0Bf`r7N6&7`=5I@2r(X#5#D1)P8bxw{k{vC6><z%7(~ca5g>
z?%v+s=lcf-2VPS;ovrhU8$7tRVbPOWc?wF>2gBXH;qJrXDft2R*&nd)_H$n@o4y+n
z*<T40wGZ0c{?F-oT8)?aVl|Y00h~7-U~^90u$Ot}zJ!?8-TV7pAGgNUZjmzDQbs}1
zSwxpl;}9!^Z+`)bC@IoQ_I9IKD5!$J(hGz|RV7iBE?1$u{iU&?phyb%{A`&`IW<(+
zz1^lvGX1^7m}zHX!7&YvXKaJD%rUpm-Jd{H+v8bURqz!5_>N-b4Y%2>@}tal8R7CH
zwppNXRE$x8IRmE@#A{DZAYCP)^e;1D-&g84D&NBwoDG4rl$-!dc(M%99s#Z{RAwR)
zps9ln0R)9W0mxUrfX4)Lk}Lswxm}d~bpgq=`oJ@0XhEpjsQVxwm5GPTfei31O{nZn
z7bKd=CtzhG41byp(5e=W-)e>8p;fF}8<Bw__j=b2*<O<xT1(P6fDxwSYYS`(23#N_
zxm=tcpWH)*a0y2_>8}P5^PSq8L9pnx_$y)4n$iILR}CoYd(>f12R4uTM#B!JWgCCQ
z&IzrZwvcl;c5O%`3K>Q5$2|S;4Ki=|Yn;tyZ@_L1IWPJ5D@I(#Ps<DUx}bOEO#gP%
z_HDYrKQRFFE6#q1#V|+Yvq`>!ZQX9Yi__M{yah6Zv6AkHBOH}=CO<Vtx{+-GwBmFD
zVX$6;cgMnYgX3yZyoY1ovX_sOQ<iB>nEwPEOc!{4NWFb`P2_ps*X~mWVrGlQ<6`oJ
z%XVt4<f?q16)N;^koA4Qk6g0&)!^qcFF02m*;Fmo`05EzPP3=u{C{5UA$o(;P=`Y_
zn3@MePk?w0@3QJ`8R5)`>31s(O{CVjY6XhvhU|Ft&#s%PD;+NUyxL?LnM`n&Hl+eY
zM;scdM4^t?OZ?AYiJNq9fBD5pLOnu8pr@@MEnF=EBf{j_BJ3nTM+#tZTN+5uxwgPz
z&2`2vKWDS*YI+RMt@6mwJGyZ-efPOQgdprSN}Py{#IabJB(p^lcCalEr9chv+NU7F
z4SuKLENQ)%p)!ehD5%r}Y$;-t?KLi*AHEYLqn`V!2FPr^oJw!#Q*Ji-0s=#P!f9yw
z&XFyn8Kp(NsbTt<z!@?Log%jIB%e+*ydyL(^SYpnu8uizeSibO8MXb6LoCFG=?OKj
zI$!9U>OYROu~icl=mj4%c}UlN+e2~x|IveHI{!z`8ZllqwMawHNIuYMZ@2%aomh{$
z2Y8Lj5CMaV;Mb@ECbk${x$!k2z$Tq4gKWh_y1M^!&psaquVcRLmi)G3+#$WkSn_IX
zZP(I=FP#t+6Nn@HY?&=)DfoxgKI`el{=b)Ukb7h^<>*la>tEHJgzS`eOcG9lh(zVe
z<r5k5N_LrY7>;jfW?5>%M%rrVB#Q|eOe5jR){h?XArG%_3?jxCb#fCEk>5$+@=XNJ
z%yCCdeKD2G>r~E8e@`NP=z+~%{+pwoRNlu{olG<B`Dc}lONwV(=@P-Ax&xV?=aaST
zAbwBAJ)5!@`|KJ}1x@G_?pwWv-bQ4FK9X-53~YLWpMYOgk|ETFes`Lm1L_9}Dpdw~
zhCl$H<s1&l7(A}ugR`{aHSwPZAx=;z*iojOqAy#-8T!QU&W7?v!{aCW;>;ZbGtY67
zInUF3jVn8yN9RbdATyEi-T+=ep}#X&M0Vh2W(ix@zjS3q!RYZ?D-*!^<BwYS#~<6h
z`oKNT5CO6&Qt=t)d-Owxpwb-Bn?A#Iixv2c{)9%zpL!-sL?KSdP?woLtfG@M=o^Bv
zAxH|spPj%5ReJ8K%vark2H7gq(+MRV0KXuRS^+8;t8lmQc}_XC=yPZxEiN%%U03@B
z*(S9D!3wasEh)J<hD1QM2yjecRwgy8y#`DSO8m;-5WM&NoCmo)On|HV9{_g?5O`B0
zZn%&lywVrl8qB4dq~s_C5$KHh81tw^ofIR+GoW_QGUFmus1$HB4va#M8<`?Da%^IZ
zYJ$HqNS;NphbClAghmTqSA023+~8GYsN~m2$?%8e@N|=z(XHt=0f2Kdp>+-4z0j+!
zCl+~~uw9!Xc_U-3^B4wsd6m3thfPsr+<=+(87-R&iCR3?L|G0rFiGvyEI|_YxxpON
z#^JZ?W~xT5yV$CX-aT^Dk@L+Cr1P>`q1lmDRPHo`iP}K@Gp|GbO7*yE+q7q4c^7z@
z#Zpaf8r$JKr<!LDRI-Gp0mPHgLLy_FahpQu{wDjJLGuYV54hUanWn>QcoNSsvFnrJ
zJvfVWkd-(zAjVF3ahE*)-%OQ%5yutrX<%aNHYGVVRfIu`Z^3ohOfKcrtw5J2xpaB5
z5v!Hf*!H-Ve1V!Gr|&3>ta99(XCZ`q!7uMLe_H3e4HH8xT8K3Fq_=^HL>^=Dp7G9y
z0=8$PIyVvqQaTG^*zkTkO(3oT8~~_)l|Ruvyma-(B@aTeKefWlWoWkV#CC7I;-dWI
zJ(?y@M~)he-PrZm`|j!n-V!qUk>J-LXwmgnX75F~(IhHe4q!Fmo6rLXcgDzYe4#;b
zH?m$MBIbgSvLJAMbp}SiB>OPVIO?GD$===1AAH_R+`kX*J?I)<a*HWJOKtT5Y%&|f
zb=0qNiP&=e^|!fSA|HKn&CHvL2eFx^0Z0rdzvBtuE5l;HdcX;m?~R2?zAn`D#Yojy
zun)ObdPb&%HlX|?T1bV1-PxI^AM_nHc?T1S3Ye^gY__lzf#MYyF;@|n3I&@ys(uvN
zswtj%f%{^8dZwVNY5-O6LknW++J^>BG@{NYMXJCjJ|wZ(%_7*NFP=T<KUCL>^<siC
zu+j;NT5-+K!BXwWN#~ROd-wLbMlkHiHrJ0Fb;xm9#HGNoAEJm-2PF^EgnMCi2Knc~
zYhO&xAk`F<UyC1z{hF(~#qDYV;c|e_k(b6?spW*(f;zk-a_xg2MnYke?I5G5PfCRg
zM$k)R6X9g6_B(zv8mXUGjPKY(Q|tGbr_{|4DAK@cpTZ@DwZd+qIj*d&03I7nU)_V*
z>+mQ#YPQPzWQA8B8fnLNS3)+=8}(?dxUEVsh;QgO&S-e<{TpDvnMT}zK<L5NJNkVV
z>PUL#1U4OKk%;ns|E7niDYcB_XeNDDhe~c3g)a*Z1Y@=ecb^yB-{@xNff8RXTZHGW
zV#$f+N?mWA!T|KxYi%1c+C=>hY0`7>QV|E0iZW4RDhc%Sz<2~ePyuxUc&ejO6tk`g
zYb{z2&ELx1(=OKuyX!i;?1VVNc3;)Jzh6T@K}EMDhZDL<BJUXRd<3`M7#M+q5PBwv
zG1=q+5OP~+^#8SWlZ}0YoG77p9|b$w91_v~kc*Xwg>Q}o>BG?DB8tb5K*}J>J02Ts
zxSE%Cq~dKd*9W|w@VyW?I*LLzu0jDGtsExAi=sk(d;-DiD87EHC8I&-vK$VnYleRy
zUrIr^hk+OKx8-tiCLYOL82|Z*|1H<6li7ON{dCCKW8fW}o+8M@6OaCCCWU7t8$_i$
zj9n0Ot@866b1fjW?lM0;4Z%(MEohd+4hh32;dNQbor6)rY@%Gv7ro?Ued3PuTMTwC
z3krH>-+9U8(?eh+4kRUg1~m36Mfe;}Ed}^;9C^y<J8aQ7ORJX`g&;RmFDb|dBhT;&
zF<>KpEiSsqVpf}~&=R&DeTe7<5cN7}qlw~}NHCeN%y59(VG<8k(Zpj3ouMZswWB`J
z%v_Tjbl~`0SAn4ebp7#z&5@G0zlN~8Ac4l>49O_(z@giBhwQz_DqDz|oaRf(ftD;G
ztG9c4;qw*ier9J$#!j+3Y`~i<o5bds(3%6E8r$I@uog;EB3X_}!nGbULO8@NXQ$bR
z1;tWh`kHez0YZ;JLc~4T>DD#_wrf|{0^s?Q1A^+MxAt+l<flOEXva&fel#QTjR0q8
zphR~VYmXKN&NUc`(*pJ6#9#6xKEq)U{BAFK$^SaSgjr@GO^F|;DlX{R5xqM$kvDD@
zN_S~I(o;t|<RZHW+7q|}iIAo0EDkVuN}Y3}mli8oa7B`nd^Jz2_oL)bPH+JVTBL{y
z#W}yLL-%4IUoe&Ju-`PW30>*DyQHMTqmc4Ea$k><gF`K;s}U|3`-I7oQrV>~9Dn{u
zrs8#W`s~BPecbu`#~*$ebYZ>fHM=*Cf)8%He?NBHq+ag8k5BOzO)UCY@+xC+)_Ot4
z1e`p#&=~fcuYg54$q0QD94vj0B~?HG#z?m*AFy<J>KU2f84(~$1D?!)F9)D1cac%Z
zKVql>;StPg?H}Xsix076ZFhBx70%$Vc_kBc<CsVIj^?4x6VuJ&i|Iakj9HWTt`PbN
zxqg=E1ti4=uU?9pc9Q}0QHmagbcY`^pc`tee!cQ@7wjp5o`&K=t{NT*<`dn9490jA
zqubTV?o)~P=CLmP7443@yY%3=PtL)g0&^fG-yb}YaYGlJZ2Ryb$+m#Kf)^}qqf)Px
z9vRZy6XrOQ3#5SrYjHX&Pu%>J7e%&wDwitU+^*vL`**t==j4{mKv8nDgtGlTHd2d|
z@pr#Z+XnzF*(spzGenAFj8c>JJH*s-$AUbD?jn&-@s&+s<=*3eYDIlir!X9XrSAPa
z==z2#0u?g(m`o--!DQG3ctyJmNhcee4tjWVE@lul>&PY0>PZF>L+;vo`tsYZSDr&t
zZvXJ@9<GmNfVvwy?y4BDqy1m=3{w)pBN{R-6FlQi*AqKG&zGJui(@};Q`bt%xCj{2
zK6xrhSG>&*c85@J!-&42^fw(HM#wP9TpQNy$O*X+C`TGjvm-_}Cln?a3HKGR7T+v9
zupmsb6M;n{>)NK{##Yi_okVbKImvgT!fE=HY8J+UY+lruTH5fZkPrNds7JWPz6<Wj
zpwrA(xcPNoAIr~owH5)+(KH6XA@E_bdg|H}Z?Ir5`TJ#iFPRGsK8Z=6R0%eA_b(&t
zbh>pH{BW%;EA#^F>L=yoGT~Y{agjumq+|sJ);SND(K_*xo%mE!I#7KbPqA20sB})?
zu0$0VKi4b3A45PTYrGA3%h>sk=%uiJjzlw$<j6xZ&sJyUM9v~#<cOn%T0JmUQzT;L
z534#rs9X`w7anaQ0zFh|ekP_zz8l<akb@oum=Jd@e7<*ox7#wRJlTFhh6Rkf;{(#&
zel-LN*1p`a5d2d-fBBLrj^wLC2wXrYa<ANC(S)$?gbG*o6c`m36bPO1d_jdqiya7g
zYnZMfRQ}Y@II}|(T?F~aW)LBA$(I#4p^#5XU@ed3AG6cL1GSx6h6EFQl8{IL2DM%g
zrA@s0CS5@{8n0b8ujBo_y&>P7Kh&X(vt>Bmo3F5YeZ6a?rDNjw0{g(VeTjWUl>SLs
z0081SyOLJ<d_5ys)4P~DZo0)GkrTpS1}@|$<Z3#O0r&_kYxgJS=UO{bNgYw1*h&_v
zeBOduUZh5Ot?TtD_!nC>5itd;r^8&m;pQhJ6t`q<Xd5&wgxeH7hIP?E1vis{IW+KX
zY1Ags2n~MujghaS&iIOYHbIACQgcDR2ex(rXSe1^)8Hu+!ai;35Urrc5jKk9AW{>U
zu4(xJ5b5r=m<fa5V(db_cC>?J1EG!*R}hnRxvQbC7T1&Y=`Z<gmJa46{R<XXKxX~X
zy%~&8^GEsQ=<^5n??1Tj>Iu5^<ZM|wGUs~qz*TtnVJ~@;PTidVcDVtVkRJ~ATB1U#
z^$OHPncC!B2`A#Cnu%WbDBv@90!hvy&3RtVB<(JTE?-<+3@#3^&u?E3-A&m4#(h5P
zAM|mHSHn-Jwm!CifA{IX7)W>B%v6Ihj4@x&v5Cb{eh%}hT4&V|c=UV*Q*`(4!w2{7
zM<Jr3<F(3o#@eMZkCL{ietS52c~Am?P=IO+X-2^t{DaBg!kOk$xMNPyKWO2$9o$1A
zb~8tyQUNjKm0LFu=^+tjrP@4cSRBf@ilbP=n>3v^p-~;^VlS~8g<g0J+<RY<$w|>H
zh{J%zU;!43wZ)mR_BS^~N!eBtiqNTp6N})KWt9bh7hDck1<$axmEY1&d}hmX+;FAR
z3h}h{>Um3cHa6HJAR=mo(mbOHziV=#uCjDFL1gBC{qVv4;|5dEc#m(H1wR4wWy6d|
zDLgk%nD0?6DJViI+D~TXSW@gTx~V)lBm+xP7O2<@z?0GPg6Oa){SAM3G-QJhu;0tF
zs`?W5{$V~tU;$8~O2jST3;^(rJv#mtfy&)iYTv>)9z+~}-r5+z$=v8w9lSHZoIq~~
zanvap`{22wUT?@{5ru=iIEN?z#?pkF@DiJXF~PWjW#CzJwDlEK0pQKuK~$S)=GtJ7
z7`m@Hrq&T8&?tF(6IE=rk{-$#-nm(D|A3^-ykhm$<=ga>oEqBL>M~m{OYn_r1bxPr
zuILLMnOlVs`ueI^>SJ4R4X)VG=AND`Q@jGe5BK<ocW6voK6(AkbMnl6^g}T`g-6x;
zWS)af7SsrpSmo#`qX~V?=jmzo5#3BaP94b=cp?7wdQ_tK+2v_gbP;t(<AzVx`E25r
zA)Qy4Ef7yadGa$HvviU}88DTB%1L(`;m9-x7K5g#Yx99QA%+n6$WtR<W%GfVT)eul
zy#Q$IJg^s=uE2WAw6dm-dL0S0<ZFqc9KPWMLjx)&*riL7Ro%G!u+N2ND9O+e1Naym
zW6PpXpC=uv793B|7SV+?*8u;3B4gnw<uV_Wi_d`7M}DRmGJraMCutwUe)3M6H5<pd
zceYFNWP}dA@ZCFg=i-0uqA_`%Ol<s*u&J%U<@1)EVE|GuVI#_F2EA!oT6(8zOA1ib
z4zTW#7qelr>FBXI4GBIGB%P*xC|Yg1OhJEmiKIWlB4c;R;7;tY-=N}6<dy(kx-@qk
zs;|MltDM3o?jQ}>>m)BAxGy2P&UP<PveS7$uhU>K{ycHlz=nWm{ypk*@U3f;T^n95
z1E*#0&Z<5pseac3dR)Fo%MO@U))j3}>p{}8-iS@E*+GMkTIyuvpLf{I6hEia<YXER
z0|35@j>%tMzj#v47mjBHJD(dK?dT)77f3DGP-=@8vFG{-gE4ZI<^i`&D#sU7zv38@
zL!m)AWO#P0_&g)0JF<yw+#7>tGMJJI*ZnadNO;ssDZ<w)(8^2Jztnoq1v?V>?4Y%n
zaHhQ)>xP@1T%ak@hj%IVLTc^oKn#^VXH3eV1MPA)X}cM^Ogb1E<^I?k91Ql6^vx!y
zB6c-Qa*ToMnLPJg2_6L4bK|w+X`C!|>4^jr0kkx4CK7H%j-}`piXbcdT9L0fxi=vP
z(X4WwY>5LEE9#%xNq0*+O!+#i@yZbzGxS@-uJ{|;6J4LmFL<%3Myvxp>}!b}QDIx)
z&;=R@^*wFbCv9}8pv=KQye5;{K2pU4Qn;fKPMTx4e02dhuzvNZ!O2ixN(k+tB;nrC
z)SgXorlN!w=YBP!0Lqs;GT^=-E~;<~RVAIzX`am{jy505%Xi5|xg<n9JCk^w_(P~+
z9QB%6V{REM@hh>B1*~h1csJ{T()H0{l=quG*&u3Qi9b>{D1~2j&6I^309Yfd6N=sU
z!{C&|*4E&W2!F{&$7~G&33vR47?4^7$gg;zv+J9IaYO=cVwQkAc3ba<<qsHqdesyf
z@=vJJRfyIz8&<(g`~EKQ(f_u;OT776ih0k5pA2pj|DG1B{0T^k@U(OM=uhvuKOP<b
z{ZH?1<Lk35olsUC$BPecKkAN-lOI;^Zg-CV4n25x+cEC*Q&#nUa{u#t2fgHz2YdVX
z@Sl78BNQ-aaI#nBxSSzS`<ST~zIr8Z1W)v&bnJe*Sit}L5CaO5!r)FH2^csDqQC&M
z!^ew!;)dNF(NK!=31L1-Reyf=_T$&j9zP|&zvaTV^uzFn;Sl?MJJH1C?wlpJlf5p0
zuU(>ty5ljX>lqLr#~dxo$r=!vDNPheOeEnD@WjvQhvCmvSu6%WSDd*l$v&izZm^5>
z?qj`Gh82T7CYy}#h5KJW`Rdv8m#?3>+xop^2}<E^C@PR&eX+;S-#&Xyw@`QsxLyoU
zh(n&qN7Pn81wlLTlwYz-kgM>Zi>yjcMlTr;zPj7RXDFY7<*2%xpSYQ8-)^Hv)d|kb
z1dHD5x?#HO5IceC6DesAnb%|lT0OFEZ@+%_9im|8#TvA47wBgJwL=Ur!b(8hLz_t+
zlw4Q5VsE9|Dgk@78>%kdrV;Jmd_-<uNZkCbBRVZN4P)gytiur8V)jjhWW}@c6am0p
z`;O59#Y^Xtz1`i154wlR9DUOkiwvBb5IGLo&CcBc^-w5quH5KE@^0TAwg+yW-Kaa*
zudcLQjL#r=A*HRx3Yt(C3Yx0i)kpvG7h95-q;#{|;t1vl-khvc!rzCQ?<fJ3Hn&yR
z5XIa!{%Zp`O?oVGpyq|HzL)$RQ}DL*=lJE)?~qPHEr1gy@f^V5@!CBL5N61O-H|J3
zkgdHHFR5}_p~@<(gzgPte{JkyLxW8@h4J&FhSG<UyfUf;*0^nAQ<wU!#iBRgR*lt%
zk%iabpEZGn@VG6!FWC7&WufPUb2rvo55a@9yzgie#s%4!(YY>%U}AS*suc$@YaU<t
z7_Cqw_unx=#tqF3DoUre$C3TF1zOAOp<~~_cZ6@#@Ej+~UCQf%TwHm2e5|wwRiHFY
z4a(i$+a@_NNrTNmjdK3-0uf0O23_&cOBUjZ>cUa*)XSeZ{`A^2C*eMr5FIE(I(sP(
ze*VYbzJARsO1ZJHPC^9b5X21bL#-LruKqk@UcCRy-rN7Rab$U;Kbyaz&CHG@Bgx>r
zOadV+w(*2r+xP-`nM?SDMl{f|P;1qafk}M-_FLz*PF0r#B$?U0cb|FoiBWfTz1OMp
z`aPbsQeMBPhh{^WWa66R38E0W)o7X}#3m3@7tFn78h`5gIozAP%7MV$T1HnsHnZlM
zY<|<ed-}Y`QbcQlx-GF`PX2LYcG2IYIUTm5V}AlA;7U)a-|wj}#px+tmPDBd5F!le
zZuC0h<sY{*gDgA06(5SM0<_;1AAQC-?QmnfL|Kql*lB}{78A(omw5Hc$=mjhxG0ko
zv*+$L4Fg3G7bgx*og`Xk%jd&<x~$QY?GZUho`M5cG3H8&vksZPAu{SuUw-k$U(My{
z>fT}TUrdhmWZ-pnsE>on;K)I1dm5ByuH6F)8?XDe1bYBWI!)xhM!t5&6PgT;@YQh|
z7rmXCDy8I>_-U<UifuPi)Is52o9Isn|4&M9nnqNCBI&t{abyLN$(TUMvP=n;3)i0B
z(aJqxn28#JoLx@~<PCC~V7Y<TmmCM#16Z;%;zB9JLy1NEsyHk2DSCxXuK}l=k!pKW
z;U$Y3rh@WOhw7B@e&k~T{v3L7M*i*8p(S88gLS7a?@Nc>S}@({no)QP3~>;gRS`(d
zOW`Fb8TL!VT5zvnk3jxN`q5nq84Yt*Hbk9;xJ3C3TzoA94J#eY1ak{4y(}q%5S>0G
zY)|A~_oT?gmJpWHG!0XL=@sk#Re7cE)HpvNP|LJ^gHo_N#w=j=4k<P&)YK8+mZCGA
z75PvtiFx*Z1X7M2;gWWYx<V&N#;)^gZAbD@T?D~<HG0PCmw|P0PEcr*g8tE|<K*9m
zv6p5<;HFg+?46B%G`a2_4S{a#*`<&P<JBrh(Y9l_z?Vs$kGzK>?e3wwNEu+H1T&$Q
zZ%kp_lCdY7F1ZEA4Ga}x!d*#LuXa&W_*kbj?zZ~iN3+R|2It3AVxO8ytUvi4$0dQi
z13w@KxkeAd-)>kz?SZY}8WwH_X*bMzQA9eZS1p$=NL>(|V#Qil8jh_`%rK86(FBB@
zGj~Jy0<MR~_4><FdJ9K&HnQIE>K{b~kJVuI#O?5$&Kf5PtO+5H)$K^oi35fxf9Ag|
zwavDNH5`v=EgE`!^TQ86ur60TjEGkgjL#;WenA@$>9f?Ll)9`BW|ZU9XK;7rpJ9;b
zgo29PZw?m)CvT?Eyr)&?fNNY$-V0G0RAaOPd73TJQ;=^CPzfOPuR1Hw!RAa!(si!p
z(|VSpI!yClP&lFK&s9FAE@%d$Gq}3zCec{a9YALrDnSmz99bph<`Bc*2{8BYq+?~r
zhKloaS}No(5*iCb8@YKw;g%FNQ{d+ONixu_ipa0LP+yk!6>g9tEu~u>SN&*VNlGt8
zZ-d;J7@{EO_Z6v6T)XZT{ZO9y%$AQ~laTYdY%K`R>YK0BQ<EwEX7IXgcBx-^1IURD
zY)Y3mD6n_Y<SH1foic&~E+$2*CQo26hfsJB3`<IT6$8070DH0YD5}zO3KIFm9fHoP
zjYgJOM~?I7Mw4oVR7L2zTvIABt~Higu!hIn1;{xezvB^;)wFnzF436cMz<{W8aC}_
zX7@4HB{!DeB<>2ZrIw$B?>8*y<Ouv7@lNQXfaO{r=jFusxM91hJ@KdUS*8?pYNFVE
z)l{gOO~*4wCe8Ht$S^3O0mBxUSiIAT5NxKVOWVO&U|p{C2MHL3ixlj~r7+2N%p<l+
zcfJ9UNld6OD7{u@?L*K_-dtw|Y$``L$`APvmAt-EE$V9^9Y=tNobEl%vxaU&iYD-$
zsF8AA0&@i6lO%{3y2byq+cwbv?%G6;^fbwYZ1|Tc22@tH<I8>2zdRFVpMOjM(<s%`
zt|I;@NXcM<@zZRAZ*ca4VQAdSx1%9YLv)m*+`>5o&(cn!(3CFw?S=f$)l#%@NKo0s
z(9e{ir%=k%(RrY`;&gb=uM=K{f#p(X7y*^nL$ATEzQy0`G?1+ffFG9MR_5|2S_j)-
z4-M$aJ$=!o+eoinC~T+^RC-m@t+Y&W0PB97VWt@qB7ui%Hew8`?6Ml3iAjU-0)f$i
z&@CsxfEP;%5(E8Sr+lpd)0NlL-Wy<eO1I)<{dDs=Am0_o65ULNFI>Wy9Vxp`3d>@e
zU#v5;WpyS5qBffh*F#%KS99<#|83_G=fA99gI&}OIk1niSf^jBH50>BDCCR+P`Y^g
zs?E<o%<J3H!2e{y@sOH_D7=#DetOfpzP|2(lSR*UnLJ<4HqbKVSl!KU4`21ZSSEh*
z2@Jr=&W^mVlcj;y3&UFshv=U;F=j%hZg~REO731i^G|Tb{ZBeX>!c6F2i|GMJY{1w
zFU2FmX(Hm!3-HKYzU!G7$k=cE#`T;$b1}Y{4gr`w<T3nBPjB#HFjZH>Zl-R%SO|>3
zQ7L%D#eC|w<t4$;5)qy|iLE^S@znkM<LOh=9rq0Wcxsw)kKhkiPHPLfMqB5y$|rAL
zFWb?}^F#MD7=*m|kAuCpzP}K62-f7_-f|EB)3NZ1DxOgi+N=#igIHbN{CC*8R=a~i
zmg^}>5G;~#sD@w{`X<(mzYue1f-#LUs_QzfF#hS5nS8G`5%VD;GgcYQVAe*$zv*rX
zvLC=+$Ijp-fy<5sm*u!{B|G4g0fQrC88EfOOqom-{(E@gzK5wJhj6V0J;k*Ow>18v
z8*DRjl(!QPX0-rFufD8i!!ycy7;1#q>5JQHhHMc?_U`XVhKeY1Vvw3JZnZq84`6*T
zZWO;H;SJcsMsw^eXWR775TtSLgc@bujYtTE4$=09eaPW+AAR&7iH_t2>bB4MusFML
zjWB{~t<JjOxk|cP{0#TfX$2d~5MdmceoFFrUsNKjYz8YZdO$fo_<8~$n(P*972rzS
zgJ>JCTbCvR7dU;oCEMURI0wS^&Eo-~@1xP$r!@Ep%{(Sf@QttQuEkHWB~v<XBvGL#
z$32vJV3=QDY<D+SM7X2^)BPQvTB9Csg*Tw7k+@~3%TB%9P-<v2-luL|-5d6K6}%sf
zId%Q(t@S_4039y}n_gtIhff>s;sIo#E3v`*IYyKD=+En*@Fy1SHrkmbTUiyGRLGT3
zW<sgQxBIVggS#s?1NW^S@h9jLgvSYfx<Xx_%A9#8z96kwPpa)&Xl3(_*21?uhc4me
zK~E0dKNH`(38cg*^3iOZp$i($4!MJv9+7GdxxK7?S_~@4gh65cvoRotgJFzp&oh1m
zPA<bji8TLo2i2#GKrK56E*yf-p_IVIv&F1*7t0i2LzYPWTKo-5`e7natAy^O4nbeJ
z-A0HbWAFyzP<A&s93#Ke!mRW{uV>U6%JTXX-n6gH#%*9;{7&}Oain*hF}0+XriU-+
zkvGNMU|gFYloS9SHk=wr^BL9RrjPx^5jz1~L^F>p1rWpH!6$qthPb6Vp)R9Q8y;Q_
zbQIA$_AwXtd`&46_f!1zgUCo7^2_4f$uPxPO$oi}ho5kH%~9U6nO-&u>cqDJWy~Gr
ztKzDf+%B87IdHppR`<@(83jaO=_$5d<J%W7i!e3jCmwXIh0hy0rjzqwjfuMf%K}vX
zEWon#@r^oW60;jUm&`Jz{+EJYaSA4I_qxt63hLlw`;`0-mIt7n2G?Qz>{b50$Zjqt
zs+g2u(?^Kba6t0fYFCAEywz%<H2@5FN%369ctCj4p?PgR3=r|MD^NjnND7ih$?1>N
z={=6<S11FAuQnOID$3qPSa+M5c)#|+ztM}@0m;;Ghezo)j;J=&bVT}SQZyYaVl3xu
zc<ATs_v0&hq#l3#?Xy7166sPN>1gAY-6Eu$46q=Cz2Ry!oP|NS@v+1ubiHctqu((5
z`L#(802^a_I1Kkjorvm{hW$?1nzKaf2BO5Y`+@>w5rqxQbIzvezCB8ITN<})0}LK+
z$JjAlQ`sjDD8+>}%@lsW-uDx?2`G>;^<kV-KDmAp-4IOCo)fbs<(YAL2yOIc-YPEo
zh7IX4PQ(Ky%vj^CUG+X4UQCJ&Ew<eQYg9mO1_FV`oec`4=#NoE@1QR<UHthNB2Xr%
zWeqzb#I#R1jo8EyJ04Ic?U@ZjIGIn$|8d(BV=V+CYXcO31ffkRuz_G&Og^|ZtcC!m
zq6r37hku6F@^FxLu8ye8F(Sz}A9tzqT;_PO(stqMy};YY8eb`{^%MmLlRF9fa7avm
zSvO>~4w(t@Wq=jpJI=1^wBbPZ$opycvC+1vGDJmxbmnHV?e4uqiRKWO9tnzrN2NG3
z42t{>TD_|h(=&)~AAdv9QKa!>?Y7wTvbGVluF%_vyfGkzZOP`x0si`yB%%=~APD7X
z@;3iu-6MbxZb_Jiy`ypx*9zVOVEzWj1ZIUv3Mts?n19I2A@k97pM)g1VBs%xyWl?p
zl_-TyF4K)>0$*hK-GmO*eem?@vc<bB^IB2A2wfdC1n6v3BOoN>nfz((+3M=2*gp>1
z5-&gg+I3H!OqpS|?@W9b3EGo<Fg5mc#`HACadKhxCR1`W#$1W_bisz%Io6?O1H@Z6
ztFChNc_GQFL^6OVE~Lxx9t?_!LsvGsZm{i!3iQ3L8tZ;ZRY!zcrMkOg0+v#_DZW5B
zhHkcVc2Q(&&*0Z*692o?NTGu0QD_oS<W$%zKwpc=^cHp-OZr#&5VUz9icxKVA1Q!1
z9FXHUq^tEWR&Njy-y2wTND{YzJJj1rQv>iBHZ-iF<+xr*g5^7h(~bTy1Ax?r=xbaQ
zIsqkIuR}zuOLrrDz_}&EwaJ38i}+xygs-u8k2jgm@U=HTGcCJs*cCUlFNK*4Ck1O;
z(0~*KmVin^qLE3!G$YU~f#p<exRc^%aw$6{j|NY#RYGNej^u<i)65yoF-1zTm5_1g
za?geG?#EJS#<MY004c!PTKn_BNcg~;P*jSgrN`hh5d_aST{y-jChgH3zV^Os7u<)c
zhJUy!!-P6Oh&WzwXcR~E-`rP2Fmtq;OY`I{37mvBZ1=w}aQzUyD$>H#pfh0wO<uo8
zld6So$8SV0aUP%|!D4&Y%@VViY`=Ngn}HCU)q`S`Ps$4Jug})jFujt|?L;WXw4&5E
znVatov@bAIgpVNeReNVOU#Y7_ls9NZTv<V7;cB)JY;74eJrGW|94`B}<1u+c(OxHe
zyk1K5hr1%M7+nz?4J>3I2ZM=2nN`PnAO)pHM?Utkl5AGwhP2LuoRf!wveEm5wNR0E
zt8T4OV)tAPro98ea#SP2Q#YON?OVqw_1@qFvq2TKuYkR^WV2vnXevPhj)&lI2Bh&S
zAC=?TkmKA{wJD_8um|wDBnPB=-$0gDHE;k2B$1V}tTc#GWoC*2%Itg@S0vZf0!_&T
z-R(N;*q>|K@#7idD*y{_6@uDTjxCZQC_Il%;-&$d!Z?x10!=PJ5}6Evaf0H8=nFS%
ztcHvTS34qI9z{v$Q%JfL6I$kZ1(+2=dJ?~4c?B6A0BK-7TizlB7pl`=mw)>5^DmyQ
zODbAyPXgUbKuZPUJFE3P<4KvJf2F&U$#1y;nxhq4WMANj-BNNAt5^>nDw~9vp*ZIT
z#ID&@x;lPiX@s=fU4LFv1%_GQ`_ItwPn!gegQ!}V*K0-9%HjClp{l(mFB3C7_9un<
zaV9Z7^|bH-a9R7}vbXlvPo8z?9wN5euc&E{??iVt91(5(+q2acY^BypE5j7QC8~$n
z{7;w*h$76V1si(yIc2j80(9nHoD}S#@dC>K1_@;Ec14gpG^>r<mi{oS_smIX81`pr
z?E$CrYLKo)RI7_@$H@Ix{X?!G)tF}&%p2=)&KH687CG|k;XTS(`j7Na0M-?EbGdtW
zrI7==+(y&<;=zsksqhUqD{AmsGRw^O+G!LzN7)%_LwfDrF*F!|+g<ZmPq7iuYys;_
zn;KUT%F&H#Pwtj&@+6T<Od=mpxdOo6sB=P)<53iTKCc&O_NQve>!J}`hT~=zmZPlk
znzN2PT3lvD14`p};*YvTy4e+VjR9J<k^R@^YJYWYSuncR<F+u+O`&czU<BQ-SjDcX
z@krTJlJE9qsGFa+NM+ZT#T;!Br;J%G*pq>aJq6VvIh0^1RX%|n1E+|gAUo`|aGfa*
z;QI6=$v@;IMv=Kmo$>1clN^0)J!@=u1+uBIjB$n;LPXF|zrmQ1X01~=N_d1|4sc^;
z!)k;u-x--|lr^$e9IRzo`F;pGaF>Kv5V{R&wNJ6}tB<fta3bhA%{q0E)LwPJmVgBR
z>fG@x@QNfq-4mEQ(F0j{6&t{FEf#FN7r<SDjrj4Pp&Y@)XVa<|to!4JzK_PzTkE24
zqc$v;g>l2A0eXX%>-w5kYrsabqK*<>D=rA3ZCXrY;lNe53|U-sza7U}4epTSxROYW
zn`bwR1v!)Ane6+9gF+8Nc5G#LfUixGRO=An0Y%-p=9=0GD~{dw*)rE)%tWRsI}2WE
zV=M_KVAyDKYxHgjO(I=7k)4Gajr{_(P}#Vur#<g|VDkDdEwV?_$3>h8R^ZzU0vAKM
zn2^1wI=?H6#HFf;??6vchvc^0gx%mAg*fBbFo`YV^NPywE~i8|P}R5z0_|oIQO1CL
zi4JkgAb;TTwn0i)%zt!^iG`K$aeH3Yxfp?T2KWsi4U9gpO1HjqqnbTnSDv&z;_fgk
zz;lMT4QY#to00^1R{q<qDlPDa1^1PSZrQM8ctT#fqlKXL1FN1oN8}5*crNnEDJUpH
zrwR9AdxR;~Kn%Wgn*@lu2@_*&ys-8lBXyP@g`_hA@)vuiH`Lwb>;vgZc*T(gH}njA
zoQ2fQA%AS7g44g1eM%XRbyAEzg1622jKouoHu5!WX3thJi5oxoD*MF!Mw<=(#=Ly1
zpKA4gD@<q(@H4umjd)M%E`R@E=x~WeW9SzQQg4Ho1_)pIZ7SxEq6RPln<IXmrDjj=
z8}1imc-N^E{Ae<03?PQl=5r6j1$|7>A1m}M5PKdy5}E+2x4F^OfwR32`XQ5Rqsm8j
zi9DP7QD~{VS6@J$xpx;D!q1$hJ<&%t(5RVY^86Nmw)&~JCy`zTu*(c!O+Z<fM-|t$
zyb-oC)xIpn!93xKnqTu&YFG|p#3cNiRM?L4wrX(!cN8`OVH4CV+Z^rNVqUM69O!FR
z^>7f1eTNTZjSMY$Y+ig!f*y-yj;h4q71KN5$VcD;j!2~#=>hS5rwDmtds3ULEM7%G
z0ZCb=!`Y=k8@tbx?yXuM2wp15Bp=4j7)p)evdE(6?5t&+3<IA68Nf#ThI`j;+}NHF
z^PpCOtAbYG=?)BP4*hv#{O=&5wHkgXzAvYj2?^`Sa~ZYaQRq@sF4%4{Q!xy9ZoR@w
zn_6i}8@%;m4-z|P-~-V%{t#SK;O`gR(!WV6@YA`)5(39Yfn1Ib+%|U0kF^_oDJN}x
z-oRflH<faS>_eaLKe?KE@^^?q(w&4TBxjnv8erqI__h5X+dnvxgi&B7bk(uby}(vu
zefAdGX{zyZ0!3@7AvK{Bi@R4K*rVZ>PV{o1xtbDCyO{efQP_#57)Ih9@LkCR3?FJV
zbI%5JO9riQNK$4YMB|j|t`1NWfjAT<QwK#2yF{2&E=Th0H~{}nj#53uSmg#GqL34H
zb|uz8%BaduQ0(P6jT9OkCzIecHYxF}zww53q2{P`h1r|u&VR^$E^MO)PyWEKJ8M%?
z9?Ttzkd1g{f)>8hSQOY}?W_^YC;>7sQ%jn1iY7C_@-um;DC!QUb;;kW>pEBrA<EL2
z-7p@+|D``T#W};s@+UtPAM)Y1Xi8WRb&(vOMn2+r*fs|j6<QdI8&LL_ng|ZU195i6
zp^%D!Fg?4_c%Io9Y`tsGKF3U}Q3R!*9@*9=rZ5VI)ZjshpyUTjK0|4tF<(}^QXd4*
zmZL%BQ`af>kFpR9WbGmVdqVsIb=hoESP2|`sZfxgB2<WDPN^o2HIM{^KGNCM`+hh(
zyMU~DXnsVv=zb$`PUFjXLPCGqk4v0I$M@J$7awCBShj_P=R*qyq1!=VH3W)0jYWPv
z$;aEnp=}NW^gL7_l<@cvnpP|@vDmZEpKGGfDdtpxe^{|=s)+PmfMX<x-;np$wQLhc
z<`ck2K(I=9<8i8?@~*Ep$}rUF7ys1;=B_^&qBcfy{&;1CewoOt3vKl&cK<o*sOOCU
z3pO#<A3bX1W#cPUJl+v<8o`3taqES9VZ<K(GF>cCZy8K==G8iVGE}#1YPqGQ*hvzv
zHW<L}XcTTfvm5SM>IM1lveFy6LTqtuvmI}dE`B6DXR_mS((Ez7<aq<hyej}6ik#+3
zDR^3daV`(TEI$6@J|7&Jgecbwd9u68W%i|1fP1L3zTo)5&t0AKD5ZvJ`(Cr3n0y_B
zX=E$C7VBmdW&pEMJOsjVtVFSgeWH_P-}N0uc8ngFw88$oC}pDdm<`Ls3NsGAI|OiG
zgS?6H_Kt2-2p8^;>tc3R)&0xz%n2G{9yx`@7fj34habus5YXD1MbeSk1?BE&;jyI5
zK0mJuCrO>TUFWzZ^X!`for~q6BZ)7DrJK}!H=%C#8jlvF_d41jb{3@5&1jlMnJ*yz
zKCRXdZ(e^hosQWq*iK~4`iPBT&ale~i#rD*?f#-Exrc@KpJvtEEh+0*G)DLJRdrB&
zwz}#*U0sJigc}ImKfe^uPw;eE`}8wc7V-vyy10fCg4Ve9?Aa%zsV}F-mFF3H9mC6Y
z`Wr4_90E3CL(t;+LqZ`r6bBUsGCh7Ae2cz6%i!Mh!ijGLP~`;1a+C$dTt!k3Vpwiw
zQ4hjuH-aTqgPA?*0XK-T6w2eH-1$P8Z;tP-YA{-$&n5yq3EB$kj-?~Q{e|0s(ZYh6
zfDCETL_Aja0OKDT$Vi+#adZ~YL9rBhGpM;uOBT0jJ4*|)IQ*txIpWLtv8)q$H+&>~
zzJG$uX<UkNGor@=o*{X$B1{}Ij<a4m1Ok&p)V}Y87!iX!q0N3lDHthP=Qo?h@WmXZ
zs6-cKV6$h`#vn#8=%2;}xh2K9jRKB*hf;47^>kv(+z-8daiZ!0g}32NjJ%NYwXYE|
z3#02%A4+b$oC5;AYKKTSb27uCbL9IH0}}G==klV?ue0&&AO8Sgq3eSDA8*|>xDlWq
zYAJBPwG$UKD|wq8rJ0zW7UZ)Ep+Dnd(i8jeX<nC@^9%GFEM2G!)v-f^oZQWkU8862
zfLz4b^99^@*_A=IlQ9S+j~g6Ab>vu%Cwkd9B0XAMY|}jsh`@5Zil7uVwlBMhFXNC<
z*eOZ3lcv*&ZQ_L&ssjzeyok3rb3hzR7AkHYMYRTWlSp*mk;*DRGohpOP}J1)D`$TY
z`X%O26K+Z`a3xVG&&w<+-2*f;Z<ZkMk|0(LDl)Ds4HPl|v1F%=VA1AWtsce<_Vrah
z0{2i-QIpq0*M0CM2aDM94BrLEVRY*QF(`tBT~J9R4=tVHc%9gdJA^m{be1A0spS}q
zjcy2x2h$;L#DHq4FP2Q)E;B0YcW^4J8;HmIr!PKVg)}>BpFUgttEt8JxSM=>$lw9=
zzZCddqr1Mhw!VPbI<hl$%-3+UA7MATX7qP$0*VXz5*^z|RrbR-`_EA4;ZwMtmZN+E
ziQOjoptt6x<?~MPH4r)c3~W23yB>;*B4p!{l+HkK(Y5u{FTd#6*lg&$A|;9IDuNBU
z?SQ+3eptM~M`j;cl%+6eWXr77FFcU-;G68DpdD}_Ld<DY`!SmAWHfc#4{L5*xa6wx
z90lbtM&#2El6UQqB}PifgbJi7S4gCkEcvhP5lV$#eHp}DK}xj*5p&&SVJ%}yC?5a@
z6fHD(LeKDO_Le?8{FZ(u5$k2(LSiG{wt0%?lG;W-yhp~9(zslZf1*0IxKmKdy<FSN
zgm#4Y)NsB3G>%aw$4OZUVlF5l6=6nqO<6i);%E*OlP50^2ysw*T{)Hr)ZXC+K!(Rc
zs|Yt#2Rp-YHP8%b*9R2spb!oBaVT4Kt43S0ou+=Bjr39Q_rJ$>p$#yY!w{G)Ew?6b
zX%cxAb@F9Jh&L8@x{W%AD{wK%F;k53JnLBg1@t?@bcH_CHe&^11YrE8?9YVP8w<0a
zf8nH3RDMs`2TlS4T>XUo<tTw$C329+O~l`AF<n}?2!UH%VAiJVAddEyFXz-3)0{BT
zx#(Rm@y5Fe#ebo1sLxpj(J-hLuSraIw~H7hJmfDXRn>s&19$)84FORWsgzY#BxZgy
z5m8Hn@aYr!)DPpxC<8EVyj(`T%M%DfOCjoE&Gy3O2!IfSh&)E2dCqxjgGh{GaFzV-
zrsv-*lNuw$GnD3^{&?EnT8CzSg)chv9FYt8qrhM>&t8#Djdw-D6fyOo_@abkca4w1
ze6sZz%|fkObFyHh8~B5mg_^U(YF(PY*cx#Z-yr(VEcK!-!Zu8_afSQhc?lt6v?(B;
z+a;1(b+}F|Z02`;i7X+QC{Vl&Q85GgEI49r5NK^M6k_0HwA0&OKAlc#6E>L`5jr_h
z^V?Y3WM$&*Wi7OeR5U*&lrwsSM030R6+QZTSwM37(93qz3j|}*5|lai7lAxo*TOI8
z0VdE{=lE^^8FXqHnIXp0&63h#@xfwFP{n-;lk-=S`O?GJFc}OhF!G0c(QgP_TiK_p
z;GzktOkbjL%UN~{m@2;B0Rzm2Vd6E8i3<Ts(rtn_@RD3F96LLBUr6wtfC7Lp&4vgx
z8MS$#0~1#FpGf;*Z&kxHkD<ni$tRev6EmM~c7EJyZ*BhN*FSfD{c-EZt*3Oj1T>2Z
z3S35-=3<$3z|f**!0L?8q}|5AtbP=fXQqq&vD<*0cH8Up9bKw0j4+NO#0em?pjK#e
zm<d*rKUju>yu_TWUE={KT3n!mWg~n9^EBdw=s}-DAQ2lCi-wfOCo}U%lW{UQY40t9
zE`dG|@HpMQ;yq@8({UsP&<6>z7JTb53Xr<zgTzoDPRp$k&*bfZqSvzfdzl2R1@W<p
zW|s_LWD@Y3!Wbn>bJ#)lVsU+6hCi1j(#l_6<@tFt`wnYTYnuM?GEiurxyJ*vU|t_l
zqU-D-c~0e6;>x^}4me`#W+P~<3CBl+mT^2O(B~fhCdjP3uB!onA)V1Rf<B{mnf=lk
zq0!nK<F~wg(c?CUszr}YJXB$LcEWds%|JKVl{l4$^CFR^NB$8e6tTZe+$pxq5yLCN
zUJjy*_<oGHtA@2gx0*57x_27^*i@0D5Swwc0oDL}&KpM(6qnsTcN{Vy8t3Qmm~T^M
zmW5sQIS{x6d8r*YOnWgZpB~xBAWyEn?Qo_5Z|*uLJsruX%QmnzO7x>uYw`hwTp|!w
z9G8j8Z0>XRwwo6@w?r^!OoueW=_u?qHl2Qxn4aduY<kDHU=R@1GV0C7K2>KMJS%Hn
zD!(e7r5IhTp=9tGGs<dK^Z7h05!V?{EvB2pxc$-xfCYn3szrq9qT!>#94dK->{NUT
zmf~EfZZK0&ax_Rs!?$7X^qMY4e!W2c@Vw`csHN~Bado2_8#aNSYG8RGEy$$k%@ol_
zu1Nt@a%Z8q&M+3MHr_&ynnW$W{t}cb#Nh}CE%}elFa_$YCRIwvJYWvkCe<<CzOb*!
zhYdpr{iZ_n??$4xMv#r)ub4&1(`dU%yc?Ez+MaV_gD$3yMR@i?_sq<|p$rQQuY>yy
ziIeAlMC@s(22{Oxke}z1GW&v5j7S6gGvR1!Mnyl%K9so!zXHP@Iz|yX8I}3w@Xc#+
z1%vt^6f7UtVCOp(K$0sb@=_={m=6(aT_BMijYelI_5jrUZ+#T~ia`$GYxpvsk_#Ht
zGIO(Zn_U$-Zd_2AEBrC&-Vkv^Mujy2JXXE_^y%r$?ZxZj^nE$)SCfmU^<{PalY7`7
zT$Eeo+2-0OfBoc>zk26`#t<=xAf$1?%pq>X<^!gxO`s6)om(vU$8lC}8$cPL(_g`~
zef`x_`p5o&#pUJ3&%A?<IH+K_4LZ1@u^w}>ieoWxTE<U<m_L|ea6Y0HB>dsFqzmt?
zV|W%Q5HJpsR%()8kgGCB@yV7c$ty^z=`JCJzRxv&W;V<Fq8J~rZYpYya+hM|<!CUR
zofWFZ0+#@3s34yyMz*qf1$ZXIbmm>{R?xQBX_yqlDcmcb_@iT^(BMyG+K`z%ttz<9
z<TKmWrj*=R($oNfnuK>$4&J6X5{PuBkAVhgwkp*VvG)!HL(3FZkZgJgF^Z%TB%QXT
z@FG|WVtQaAuQ*kbxci*mvL$`aepaY~`NzbktmE-L^k@X(ny}6=Aq0vi(Ll1}bVtz#
zbwx%|oI3CDiY)oJ`>$&*20@Icn3+%TEV!Chjp#FIBKz|5&rtBe#&zWyFo5t{SU31v
zfbDe90RrTPnVE$00NZMW=r?E5<n`mRZe|loFLIb)FsL)hSgvTT+wZa6jqY-zl=m>x
zl$vCkU+^yDYQwERZxX1mWHdb9h<bJku-UJeXh66H_UzakNa<lmcX{nQ$$y6KqQZ^o
zmsZJS(k?MsxGE+WPIiGz=G3joxe>kko<4a3c`sjsk}GE{Q8es~0Ztt9T6#ZkHVZ}p
z11N#kalDGp$_~-xl!I8k%9qHSmED)&XLZiNh(_Sfmd)Hifv>aPnrKkP?Q;`p;dt9^
zC%%cXTLRAopRqcHlREf!t6h2>q*6sBE6+YHHNBK+ydE5ckyFXf(4%2lE^jGN|4{`S
zm?;UXisH(`G;g?(M9^1A!ypwQ)#7msrP^k$3sF12+dE*r^HLNHY8~b&Qz+m8zb`@*
zUryXUJeLjXVIvx`B4MxyH@7^+l*?j04DbNE6m5gLafvyyvGe^U!^)GWQ?WS<9pk*Y
zr)K;*%=XX-L@B3<Fcis1B2g$3Wu(z4HXOxglA?GWnt0-08Cs<oc5!I#F_j5|1kAt#
zmL3T`Fh|<Jb1zmdiGMis$T&rB*?8aFKL;7XFgQrA3zOblcL8EgpUtkWZXL7v!AIYQ
z9Ez%tcXzVZJ3tG-+)0jiAG!Kl?7kC7l*?ba`ap-TF6}Wh)0nYNAF{9q?%?a*`B0@!
zfiK1kLxjW;fCmV+^OAu%RU<7%{}g96^WG{&T|i1;VkRNF4qaa0FO<udmyBthlRcD(
zhyg4o@$|ZGIQ0ekD11QoKcPDqK{TgfY9?rzi~+pYL@}UL#t{R*^MZg*RYt*fNju3a
zv4XW3-ipt@4go=n1w_J6YFBYd;s{^s;_t61a;E>NLK_2V=WZfL?q7GNrDLR{R?J6t
zFs|IxpoxNgSHjrFrAG#rv#Y<VvHtMksQf^KZiA3q{S6>KOL2^(_X^ZIQZu>RYw|qu
zPsTt4aVzZN>mWui9aoT#%B!4lapwE|iv@L3jP*!?lL>e}&+ie11cAPC)aPg)*j7Z`
zWB-4O9-zD-?vFkExgK@Oz&n-3B<MuhcU6rZwV3Vtb#Xq$KVBRh99CoeQ~srj<t>-Y
zhXc&^q_w~f8}kqEV?U^C>Bq9XUFL`#SKkhWKnXFTS){5a)mSo#c)U1mfc$A3S?m$E
zYc+m4EHJi}9Cpzy7xEneyFb8+MSAd^BsmKTsN*3<VARvwVbM2(Sr#1WWmWg;yihXc
z9Usm?Rx_Q-^j!D|Xg{mzk}xbO8c#ZE1;X*<r*$=S;?*)xhw#;Tc|*n#L1*)QTrrCq
zVn)uU6?_6LpDe^%PGAn6M8Gq+KecDRNjKL;375eVdxwodI>bc+Bv#4s?910&K9eD!
z;Q;!)<Smua_(k0FyV)#<RLy2g+R^l0O7~s2<RveGeG9$CQ3n!{)PpzVE60pa?Np+1
zaW$&6S(Ij4%YIx+1>*Ur55uQ`l_7|2rYwUnpXh%^AR{FAWvC#iCTEZn64YLzk3lfg
zFFqwl%to#>4iTdrSauts)E^C95VqcrKtnPru)PG}_IRrC#b#8n=WE2@9omzJv_2o>
zx^W*RD<9H~M@4P*Lz?;(p?hKPmr(_=Y=SeQ{B(UR5KIvft4?aG;7-KztcAp5W+NTD
zyF`)6L`n$3z92_1Vg{W|b4m#aPOBSCzhIOItN~woR5fmcW*WbDoWew*j_`U1YdoG>
zoDOAfqlihquypGLW()GWMFwhJ|6C9}`Y5>3`g)lO$78QB@v`%q4(_uFTH3D}@ZQAa
zve8P>3jIZGk<Y|}w@;(`M=`00*EuWeK{XnY6&UChM-{dq<J~a7UB?XX9nYwv`sS0h
z)lMq5&8Ibhwq_%obH`ae2a|^T+sFN(i#><C+b)batBg<OARdCj2<Hb82CMfAkY&g+
zhIHBek$tqY0hValSUtG{J;gq~g=CXxOe%|O^k{N|h?D+dQ_3U%-No}4`^f1GrV{m>
z96FKfYfLskQIa<7yU#k^?_B+{9}^A+>PHH)0^6Yv>XW}S2LokjpjZg$fG_m}l@d1>
zPLJs?k@Qi#atEXw$x$pp2TEj-0%KdCHl|5(MZ6Ojg7*T;epbs7J}sQ!Usjk;+g%X;
z8k8=e!a;sCoL(4=Gmhhr_BguiU<cn}|GNAOfEx$NvqRh%7FLEQxo>FCX#eo$_U8f^
zGoBgL1;dDCkGO-2;2v)FKpVx;8DL(4gUFvPg^0^@7|V#$@u;z+7K(a@kobk-!k0rZ
z@3`qt?n}G^WCj**-{>0907F2$zpqH(P%csWHb7_{)h|Dp6#4K;xQ}Ft7#}4f`MB>U
zRiz38t{MGqb7q3weRZo7;FkvTePAf7V4Jy$lSgmEkA*gmma@+rN8>8!OYc}ui{A<`
zLQr14f5MtKQQ?e+Dukj=y^PvW&i0YrBjIju?iDKlkV!Qhq5WxaBqAK}Xh`92FzDd1
zieC71ozRoDFzw68kqCD<Fh&8dd(N2bNsK_dsIH@$O>0u9X_5-%2bzaigsz~goj`~Q
zzagp`3MtX-QcoSzhH>u8UB%>R)J4Si9+d%ymZ&X2M4z1!3LUk;^)OO3?+v2Ub?U~b
z{OEdFW5B%>#i7~`L6O0oGM7tbMi^Dd&*s($gViddn+Wd>tA^!)#HWDmljjvk1E{8P
z5^}wcb*yzTTx;qPSp?k}9+l_d!=_1)!{wN!o5yP1|KeV-VVzfm{7SIwGv5W~rGU*U
zrj+$T>6a_{36(?=P!VE=ymy>nzvycQ6>bbmAcxdL2MjYwbhSXWOI}4-)rA2a&aOd>
zqWEA;?l+op3<kst4YOf+j!I3`IMhp$(Va5Gofeea&23ov=!zX~&Wi~O$qYr@*Dm04
z4y%iD&;_j80>SP%c=BSFLw<~cc}^hu9N3gk$;eohW~FD8WZSM+gFUb+uOygF%o&8&
z6+NRXYYrLDek;|zi|B?uFs>{lfiy3l_~Q8(z_0m0BjQ$363@xm-~9v`p0;_U&HTlb
zUw1?DEaP(5f6H%}<y_7_T6G^|jiD&$&2uCUho8YDK`EGVqtr|yzkSGup%#(iyF_@3
z^?}j}`Al&N^I=gB3geA~E=zcFYuO?0=Z1lY`X1k^`qKbDGjCv_CCSAe7>3~9`!exa
z%;ocvV-3*nw3i$YAFA1c{~pmq9|Jg}tJF_lT;;V!gkUH7vYH&2`xsVe3maaK#RZP(
zOO^P$3KWVU5jfk0eWEO~{%#8vs+*9*t*ScVYW3CTUmY3zvcJ~NUN}k7(e<x3KY>S|
ze!0YXeh`C8G^g&^ep6NNYj(l#nh80(OK4yP7bZtOFV^qv+w|<q)h|9px2j<|dY|}q
z0NpERSNQe#sr-CeI-b3#pTgZx4xy&czWDN!PyY&4fp}Y8jlqrN0F<?g3IoZ$@WR0~
zfMQuA)|yB9^t75ztE;DIVcUS(9Fuj4$*1y>x3RkU09D#-Sa1pw@z-F!oZfY_p8<?;
zpb0w4DXQZdAdhJD5N&R3!0`0I(@<Ot-NBn6YCCxxp6;G|7nre=V}@1-AD{LCPg8*F
z7C(HX4>nmnX*F9mfMxfb3&b<-_Inqci8Lg&@|#~Aibu1nQ8gOhNJ1yyizp>MkrSi9
z)p=NPbn<3dVz#9Q!x6$sWAlwC^yK1(FiTzffgB~^QP8t%`suhHDTl-le-mWWoGXC}
zg9#e{a7&EE*8wC5c-D~qlQ)0ETqTvUroerSeFRr?`huBx#-+@bmt7I;n-rn=bmMbI
z<P*`EsRQJ!s;a*?q_zMI69__soofc)H6!<~1aJXqRpAvx+-sD>8|_S>S<DF~t3kpr
zdc=0sBvNC&%Hz<hji_ybWj7n2N<Z*=KpxsXq%P@`En&6M!JkA7b^E&4{Yh&OW-EuG
zx_gt)$^6SvgMt5Se7XHxKjpnA7unNGc0$B-PIxJu=98LJkv;pe)4)N2wK3)!-Xsza
zBX|gO^Mtz$u1WJ+h3i<#cHa$9+2KEo<G8Kfkd7Ae?>II;L5ny6tAl7TbUKMUWG|wL
zIkGc&oK?cjHlI`X!{=SC6!k191h~U-f%Jp(Wy?Ijao2_8p>NuDx<E>yunpH2KQ*XV
zOFd6~TQTn!f7^J@-_qN7F_tX;M2H{hkAhXz>&Ri*qScZ+PsJ|w&p>_VY>L7PM5$t6
zlG?ZeoxTxr>EzJqRi6<t?JjOPs1oh7iQ}ksbLb<#^E7Bn2*i2-*R1b58zOUOofxT?
zh%`7|4rdV1G?>-&UsoOe3nH_V@*vKS)!=Sv++BEfI;1}^`g{4R0^h0X+OZn&7q~jX
zzZesOe}P{V|23P^A0UeIGe-zrL8^*nLh{3LEWzoO<38ROw^+OT7o^x4{&0=3yQ7=S
z894jY<6${v-#)jW0&ZmFuL>U$NB+F0C2BhZnPk+w4#?#>c5Z0U|F4B4sUrqmcVN`(
z+Dg{7kOGO1B=|yk;3N+2CCuh};Bm2slD7MIHchyL`1zKyZnpf)xA{YNvB=vn=pk*<
zgLzwzaIEU?oOue|QtIY(kWT2)Y&56VbbaUNQH8#$B}@nk!5t~I&+fx|>px5M_+IUB
z3&g0<O4nlmoatnUITn489l<BZS!cmcBmJt`YcLzWp5-S`mV<3(XG`7OFr)mFWj~|{
zEWiZ&py#f77)yk~5WT|zGZFw9!KDjf<3<<|<NFN1#0hUw-P~gSslpxR0lFQzy4~Ze
z3KSSqcR2IOnd1mp)*&swco6&vc1Q<N8C1ih2wn9MtE0rdj{G>;6;w;$q?FZFrRWUQ
zhtQ8o-KUKf<7$jjYK=m}&8>P2r{WaC=mz&G)IU-mZ(=D-kOC?l&N2P?)!6&X{$Deo
zt0a6uh=<LP#Ng6kYjbk~<h?5jGngy<ULnxIj+y}<vO`(8;BLDvNP~z19&aqYHTn_|
zVcj*(ePmW#-uL;SyqeL>!{RJGf++*<Y4C++rvlvy-Rv3ew8jzyjW}Av{(&-Mz(ynQ
z3Y9}#=>Qy0l1*TbnT{^mxQB~biQ!SRQR%LHiR2JtC7>F@TM4+6_XxIbbIrrOcE%&<
zW1Z;S7X9TqEDm$-=gP{4_fF)^WV|IVtKr!`!X(;F2~SNxjsGck6{0tNpO;gp-fCj(
zdygVc9vX`5zdf1c&>;RRzc+%&A4pQ+O29w#Kwkrw%YoSPr>Qy#0&U)t9D#4?PklFV
z6%Ai-jEMZLZzVrN1smH>-w5k^>9!#J>7SSNTel@9<sg{W>hx#N3v6Smc`BcM(q9FI
zwR{BH?9wqHoPHhxV(^fY8j<k*9Gx0Zpiudtz+fTriigNrJdL?-oIwR@1tfOv{J2_u
z4VWGIb4bICWQPW6hRl8T;c6BqQE&!X(2S|kU;ZLyY-MJ%xB1%|T8B}B?tjX`<fNT|
zfwY&G+1;bx?*r+$DjiqoXpy7Y?u0qU0hp#9wJp=qrMmze+90LfWpU%?&wT@EFzw~l
z8&{RoTC;r%9Umd&8ccyWEnvKMQ{=knN;+EP{-ELa0+%yd#Ey0H-7hWxcWy!k4!C2_
zvh6o7Rjoy)MP6!M6d)wU$U_Zaszs>oyc`w`013!i;Au^iud8wb#B}D28ELA5K?%%`
z`y46*syV^C4K`0Tx&{8r^seq_+osD9o0*@3*Erf^Dj?U@siWFZ7o?KIAbc8bKYQ(N
z!U<Z9e#Y2;40))Hhq!NtSPul4#bCmTTkSJ)Ux4w_>n^s+6NOhRpnV{)&(M{ha31z-
zDDBF0;pcsTD8p-rqs>9!lsIV4zN5+A&%yP?bniL`murIF1G4Vgeo>9i9hpaH+e^*z
z;kr??Hz0MitM)NSY|+OZ@wS?B+zhY;PQG;))l~*sM)r*8x(#|d$tR_(G}xSBWqI%v
z+(}b480Hw-U0gZ#3C>7vmy(x}rj8;O7z4&l6ptE5i<)XTV2F4kiJUESeKX^E05a7_
zqam8#+#!L*ASY+X)!T^N3%7k|r;v;H>CcnX+2nok6lB|SQv6&$y)NIEPrn_X;ZpP@
zX1=Gx{}UAG!FZOIg78h;^6Z1cBoy#X_(eaz;ya0c1Ck5wK}g1Ab;5~ELn@RC@(xkt
zH~AO?X>>ZgMO4DNi={_D@mtLu%ex?|1NPjX=T-4%|Mj2kWuiMS5CDr}Y%XK@4rhk@
zLSyuAvY-CUOcH*AHMp4zIz0D#9p6uWw&FNEqJ9`PGp^K!7PsJ^y$1~V=cDs@iAN2}
zxBv9lwbf^Tf@lX&!mhb%FSUzsCFP&76S1Ct_Ss*N`GzK5V64P{9N^(P1&-5Ac!8`S
zAnLaNwD!qopMTz=?eut5QDQF|WjshTX*x9A7V&st!#sWR<S|4R{yWedkXXU%D*I2z
zIOlcECmKm4#Z{71HsX7ZtMM3a+!1Ddy(~%)6eKOHICk~1ZXqyh{k2c~pW!25HUZ$k
z{r#dE-%>nNd(g?At*(8Zy()m54yx?`E<aR5as>zObyB+P0%DXh42Lu^OaPMT+CII_
zF3>i9)<w7p^l-ieUcZY{7Z}G~XMot9PT8v!M6vNL)F<(2b#*?y#&n`UfINPV=o)hl
zGJs314aZ{nfWKJobV=06hfpC)6!KPmCjfH8jgLr=*Wt=*<dhipOM<;%%uw~LMvedY
zw(A4`3LM{fb~-HU%PzQt(oDfc4G(duyOMF#kzDMYs|08@dq+qgiRywB36neJ>7vX$
zm+YCR<0-LM=WbWIhKV0Lt1<*4ol#;g76^>Hi9)rn^C}(^peHyQ>rMcWOUjW-D>C*g
z&9CaqoMH_*4xjGPaAXtc25<@>RO4MmIm5yc_oW}->|_UfuMWT8-rvb~53+ard*AK8
z+<BQTZy&hdV7%Eq{ATal!_1Y~-+p`e_iXP~w*B_+*?;c7ec8=+et5UPb8wLD?L%$5
zZ{EG$-Eoh1-@bVL?aSS_f6Jb`Pv7nxX0LbO>>j#$5BIQ5u5EYc0P1_Qv;X27_jCLC
z?(5ydzjvXoSG$LAq2^b6`;N7Fx4nP3`{LWz+xywOZ};Er9qhPHymU3c-F^FN-!-)J
zX6Nl;-!<%>Wjo)wAKAe-+pk|kYf#<xw{95w(9!J0-n+l=@BZzZ!|a>A*DrV6!{<A$
zf7{Pr?@()QbT3|S@4o3~FSp-p|7{1q+H)1*AfY66GyDFV9e4_@ZoB_`ak%Tm9XFmA
zdv6c--OsKY?*5^E{r&F2PB+`$-#vhtd9}ay21g3B>pt4UdfcaPcc>zm`EY?;5%~S>
z!H(9Mz1-P;?W#L~k9n+8zK=oDOKp$hLyQDiB|&|2ODR$4qAqS=uaMh%i-eGt3EXA=
z3XD%J72#W;KE@Y){aorMXsjj|(30M?A}(Nyf3&r8?tAWW{~Z!uTRU9*Z4&9t0NsdO
z|7rr$a3kP^EoJ?j@0U#(5ZjvK0r?TDxh5*YRYD@|LUMO=?FjeR+Bv%@THUO5IKe9v
z{(R+_sPpQkb-aP!GPLr`*(7HvcXeY4vj<>j@wfZut8^n0`{qilY=ZyVFH0GElK4@&
zQH=5r<ptcNn9gJS0s$Y`3YM()s66gKj_g&cFiZ4uZ3ADNx@+-0{P__sS)Kf=axkf;
zdHw!naay^DZY4)lmw@b1gdo9dWLcD}02dGIhp|v`c_M|W{g3!xt&orh;SqBI@4#Ea
zvAvuEw%zGN)ONesP?qQw{O=qCq_8Rc_v1z|(79u*!C`OqkYPU7Pkf(jEq-iSX27UZ
zL&?(3$0N$X{vIuD$ImMb6$eB96!jZe)<ZYs8ucw^i-ps@L5K}c#KRzW=b7f{%t~9i
zI`M$O1c(NZf#z~jjhq;SG9o2{brpe_%nQU!#g*e;Km<dLtYcX*+f;uETK#tpkH^12
ztKixqs?q;;S`KS?p|M`Sh)(IFn;Cc`t{eWvk|UjH!{$MNLb5p{Tg_dctp^)qLxC&^
zXuYJ1_@V@k+JX!iWQWWTC!0H-EEv%C==P&la9B}WJ>LLuv+xW*)6qUBH-e9j>8P(!
zmAM{vWecwm-EKy;8@1&R!9_t}l@zGj*#FWuw|}@~e_9=&0*Dl`jf(NsIO3$I(*AJ^
zH!4pp*lEE7NBw6s4@YIETP&x)VSab;%a1`7{w?+Yqc$7P8YI#M`>gn9z2j1CwIR!Q
zo|f|~?+pOA(3+ff1Aauu7L*lxhdb-p8lvcO_7QZuqE)#Tjj2?;AcTksHs(9$Gah@F
z`L2WItYg+$XMPK6IFg^>ap->AMce0H=$)c58>M(cgVKsu@As_RFtKpD|Me}k-&nSH
z+ASGydWA@n4f_<}AzINg72>8rYZX4Vi8wjm9U>XK;m?~avZb?wf$=Q={hR!Llf}0D
zIdgV^Z)xVjS@Y3^;NH>APPFt1Y2K#bX*kF!boW9sra)YnJNYN-P<%oP$8yRm@i=HD
zi=zM-+6^Y({ik*UC*&fCmrp)MMGr0Gx_R(?@8#e5L1P8Oqa>}#mw!?;t2v(s-NVd0
z$Sk5R(}})Hy0eqs%?XN!C%xMfBJB*G44(Q<4CIshQ;OiYvwRmF>U6n-pyWCqBDqM`
z)t3VC2S42T#Sif(f4}pSzi%w@LO*Roko>Q-5q^dD!~C}Ml$<BE(<`QK|Mw4_MW@mq
z%XkN;sX#~Bq_W=KSzC))qsNciOgY~i?2g=+-rz~(1oSBR#Li@IT>YI5U*~FE=TleJ
zPPVqn<4rL59nWmM6vJ;V9EWJw-2J`_mY9({UpqJBVKpfx_a_#F_4LbIG~9et#_kUG
z0tOUw61zKX{@T-2sSceJ;@gg9TBvBF_-d;7YD9E-wH%?9*J%<PL>m69>1)t<gTC&W
z=#J*CbQdjbxDN8}hix~i_QIGGTqKy-t&o_yyPWg3-GlQ;gh$39ERry0gX%kYUydab
z%7X@Cu;&>j2_(eWFwn()%27Ctz{qG^?kFkocZZQ@;($O>W!|D*%S4+2B)*N}a)PN<
zbN8aS$iBCQ%X;dUFh>Eafmc%V@d6ISt>YZ_FA7y#zk9=gX*U>(jV;4_dsx+Afjs=C
zn;pIcw(byBY-~)SDn?Z}AKskR&34^7PuX1eb9LJ9_jyi^T8H1Dg5@Rt7iw)Ct8ybb
zpOiJNx5i>e`Wg%)v|8e8-(nGj0<_|(jZdVlq!V8*;r_5Xg|env6ooiE+R+}0nHSwI
zi5(L4R}}+>Dke4%?5jD%rkR<YCP*(-Pf}l%7|jp*d<ezHK*YA}s4nQU-4zLB173Ij
zcsdIW&LOhep$387cW-baJynHYmQjbzgo00FFX+dncw-xkFj_h_P2s)6Xku(nm|j;t
zF%(o${}Ff4+8yto&6z*$+k(3aAo0k?m)b>ZU2Q?71HyqIHA&6sc|C$3XWCR_?5K$3
zL-!8B(Z!J))8dXGvshk(RwcL~kqOWrUd}d8p9Md($V0DI@HK=u+UtTssR-h|!fg($
zJ4Aj$!ZsU%OpZT@%S}MstN?RoMXpuEyU|m(1{POX1)=E@0oC@i{Fe-NWB=vei*LbN
z^3%J$gI%yR{Pb$?_3ORwci;X^WPj`tg2zK6dTXq4*dSCVMIj8VQSg~BxF%czCh?$6
zlaB_7zmN7!q;_1{gi{sjoRS50A0Cqe6H5Rb4kGBav7_B=HGH=-I%~Ur$#c|ZV9VRw
zu*G_(ujag$&OfiFmvrU`LXjfGRkT|QbpmThAm%mc`HyD{%Rzn=7+#-esfICitoFEh
zY0Rms6D!iQx#J~8@S+=TUK@79o5M-729O#wX-f3FNFkW9b05ft;yFYDy{R-+9%D0h
zuAv;NOX7=eG5OKY3?0G|h!^DjtLny`eAb~3sg1;|DXj*_BE&|wo}71ji1XHlfLf6L
zAz-rehlw9eB__6ZG6g-0JEAAh+(~!|j9B{1uMnk$(i&E%sK@BbdX7@4$<tt4o2fVm
zWYzTf(b{p89(5~xxt_ILk6RnUaL-^C4ybl&1Xvp=;=XLDDyan@`XKh!#_!{`?%>9u
zW<+GzydNLFp<k)WZ>J%Lgf%n@x*kE38+Jd(g^qN#j$>A(NR+@0jfUpg6+0Xd*oeKs
z>=v)H_D~=N+!Az1f0y&_M(rM{_aCf>*u&30QXRc)-&d90Rx?tep>6_*y!{Z?B|Z<X
zf<rR`1!dBW4F1r~0~~ZnRUSGiJw)FG9uC~7-NvyU3#P7FsQ|M?!-QTEreQIOrq8Na
z$Vr5c9>Kvi51@1)c?h3{hw#~=L--61AxjracGn)N@-ZL+T{@0>LmTLcbZOW^zPOHm
z(~n^bB)oMpQ+v>}P1BDj`kj`c*!Me&2|ADIW}*~%@+>aKsiX!|bCSL(hGPmPIKvcq
z3UGuL)88l%@s@mXaDejeOLRfa$?S;%gEgtW0EPt`I+-UKpGfFovm@Mw+#UIiyXbq_
z$qn5dw<p0imU}}6M>|=5VVq!a8A5I3!(#7}=T!c{6>rlpx>z#2RkmSALvN4_-yqpX
z5)Tyr5U&bf_&MJa+f<s$xexYXIq{3<xJ&4M5lfeMC#P;4wP+|UNRWoLtz<2Xscjv1
zQ9-$K_eam;k3u~GED;PGhSp^}3ea~CYk(_Aa}h`9VpMI5L^fy-DmkWFj`$WdkD=P5
z76sEb9ycnX$Bjyi3K56C>-eT*4LUiy#A5of9JMG!6^gd~l2Vv5E|Xm3xNe=_RTZx@
z)JBUB)vafVWuU+lSd3a#8h#7LX^6zgV_1Mif+LG82F}B1V@Zb<+GC;4j@_Naaa=MO
zgKQfa>Y}aFWnUTuZO{*COD_5@@E&obrmi9N7g_r^jsFX#`E=4lH*>N>?QTWz=rS5?
zEs)6{0RL!;s)G{d_Z}73K2EK@{DN}2qw{}G-N=HpW6Q#pvm+OYm@ly4X2VTKf76x6
z6tQ$`PSJFXbSqs-IdKUHFFS3mtaxFJ984(I12cwT*`xAUe0BWGet`iu3>=Yu4k5VK
z@5hvKGUR!AF_Z7DUlC0DGBO<q@#{b8*b2buJ@GMdCjDS`Zgp<V_wS2a``fx4Ev3Aq
z%!1<_Pb;Xs?lN@aJ3H$z0$-%lTq{#q9}7|#y!mEBD+=mgR8!cMfWbDU#DA>K(a`Kv
zWTz|Gc8-&Sj99lE!0*q6dxi+ir$5WE({t}D@Vm@aw9bG4{LJr~bxQCh4sm9mgl}X6
z&{OLjXC-FW`jKm#v72T^Lj!*L^M)S1pC}+4&K-}%9m4VgGk5zLq0Pj{(Vnk0I$ts0
z8k{k_;j7tX5Qv$0!omZ~(@SOj35A*GzUjv4U*`4R^+;x%+?MD=ocWG*%A?-PoKPwJ
zrS5pigFv5gfCg(10tEphI)d)O$$u2402nonAUi(dsvIJW+8o^0-=I7Y5ro?f6$0|o
zpfwN6_XYQ-p$#z5uv}fhugJD&1FE`?lQlAQpYc-xES8@HT0~B&c#->(gnul*7<q-Z
zaOg*N%G1T5C@f!{|4t@6C2uB0Jkx4p-V)Hd4S|lqq%lbZs^ZX<!2RE=-5=JocTPBk
zun4lF=Joq-h<pk9bNb9+H@ag1HX1w~S4B1`CyrmCo4F>doapXJ|2`?)Q8}9pO7v_T
zQ4df(JuMkg_zFF}&f(RX`+hpP4b+;%=vbxYz^Xjvq73_6_1>aq_`$uzPw7!ZybNA8
z1;*fYLhKCQCnQO}GA+4%*wi4AajX$JK)LBv`!r#3V&W7i7(s&5i3+g9118aQxEFsV
z9H<?1PphHJk#>-Z@e1oiA|dKw;ICRGHurZzGiS}0TQQ5CRF?s3PhP6zBMEprn^Zs1
z66=yjC-ZxGOjBltjX#IHPRQpIY>!mPKN~fEqtCexGfVgzGjd3s)ujB#flg5DPeHxw
z(NLrxkgR$BC)|9GyDO_fp|zK{V+d$QtZcI`2){8!{QWN4wEz&}lucWhV-9%mJUb!T
z_Jpbw1K8A?`7|=hRS#FOqn#L_3fw=L?P_L!qJaa9nH^Se-=koCABQ(O7E#r`&3Rge
z){PK=a7q_^aog%_h&2TlleU%nB5ZZTmf@Y^3I**XT-D4Or*E5bDw!;x$Uf&CIIOlO
zr{xr)9MP!_b1zPcQJ2lQ{xU&Kc#}uwk5>^IS2rU18~TFN#*RZz4s*y=Q0D&c6DdrS
zKq;gRP`wMk8GA1de?_QIQ0ysaT3EX8MvPhr!NS8VIaFCcEW#Qh`?aEjFZf)`@b}Cq
zkYycwtqKZN7e@rlUwC5=J0+2G!uJKGvS8hHsU884nTU^WxQj4}H>{r=S-%jR21oT(
z;TtjM248S)o75+G2k|!_17|c|60_33_#4jdrT_umJct&-+?m1G0p7WN60d^2OoJK>
zLn{|)@IK&UGi7fTjGaQu;up;2tjfYGT0BF-XD0m3V5p<p1yXlPTZ|YHd9BVLOykcO
zz5!u0-Gbve7AOf#K#FezcL&V&ftNg{csa+o>ZvP*$hFcn3{f6Kl8Q4*FVZJ-h<R<I
zW2rK9f30prxf~5mL68u-gO7l_zr@|_G1I8V#zixPnd#<f)3<s~?N`lASixtMR!+`m
z7DzJgYKUk>&v#`bC@$Q@{lB11y4j#7J=5>-i;3J<i$B3{d^$xxcZgEr=R`M4O5z|k
z;uhV55KbfLiCvF5!wV)q9MQ+6B`<=|l0Ocq*OuHz>Xcz`1>h&g-tjcJFer7h{`MEz
z<A$rAr&6H}Pi5ipBKN|&!2*28S!L3!z|`^r4SBM-F+KQ$O!XlP@KB35$t%=<P2F)X
zMn{D?)|Q8CzuqD6)^ht@iGuPt$(W_C(_r*dReYm>%DxWI@~?K1*3!q}v~L-S6#EV)
ziKOB5jt^Cir3!*uQKdh;27PaO(QLCSC3@&dow*H7*BZ63>LyvuYZV{)QcT=~{_5M9
z%M;VU0u@gp3e%+hp(IGv#P}=a{7_vS|7gD(?^5X)tLo~7_la8^s+ld9^(*Mw)^a0C
z6COX%gZQ^PwWR!tp{Bc|9vdFkIMH#%Vr>YbIB0;2Vsjd<wd6<XBRYJ}GGae2(Msfq
z#i#}m)CQ3<A^RtWd{F0t#<`=Dm|bZa#9!GPYJPagzu3XnI?u8*wDCzoaj)|rS6Xoo
zG`lybcEg8&xI&8@{R^OjI@z-OAZ?*;K5nMjLJ+}ev#T^aZHSJ<B@-t)1Bg;UYeCQ(
zf&=uC6IZ`axl9;Eb6+c7ku4#P84R~S_haAn9d((Kzfc-L2NuNo2uGT9kqSAhUbc&S
zkEyLZzG}GetFggkapip)G?>tx<Eu8!P}fgIR|ei~j_^UskWWKS=+i}<(5E3Mv>=X3
z#e3a1bMg%)1FmBJbs@o^sR8a_j?Zgj?o@lgsMwnLl7oDJBs8}T9ylqghb|c5!}!)P
zb|)Bf(@5!iYel}(9CmO;#*V`7>bwqiRu-=Z#)NEUNJLk?C3()UtrXDmHjYMhiz89}
z0(7h)Kdhy{ARZ{$CN1xMyi(P0=`$J4880!ui$;3?RwLs_qozg|0*Cg72Iy{)A#9<W
zE#7CcyLLTbAka@#o1wg#d&LHO&*X&oai8TQ%Ld4#!T<%qW}#cjPoe#T#%m2CsY%xe
zaL;ISc((bHl}@&(h){7!HbXR4ODt!BN~0;mZ!|w-ZN{ebZpGG-C@)sHP`8oL1th+m
z@c3zTD?uH}?FcZYz!CwJf$EbCHL1Iz8AHUEiwZ9ItU>uyj1L?GI71cRR6vF#jqaxY
zMY+>Of&Px3QmnQ|zS7T->A{z%N>9vMT*sDvye@xHS!uYr#P_KJiY97Mt<rt!n5aY@
z)#CME_o;?UQ$3#5^Yt~9E8C9yZU5xRvF8-@IJl=)g=^0gyfPLyP1FWoK2ckoXCZ;<
z1IxLvS<1fRRyzS;gcCxkB$0+<2K@sBCk6~ysEo7w4gvVx73lvShY-kVz@EJLC%fN^
zTgn+E#hw9hY>}B35{@ODbF!DcVRz};dn4gwWBw^BmF5VeJ_xSP@K!vq&qB74{TH|0
z+`W^DYU`9Cle16tG&#lvjG{l62^R6QkVX7#5sUcQv8rj%#Z7vqvCb`6c9vgyF<yce
z4<gZH9_u&r#T!e;<D?FiM?w%;dt**x;xw$wJgafV(hwqoUF-ZazjkkorwS+bqLS83
zdDS6l6XG`Xz!4<qjdp?_*hYwDkD8F;Y9b1#@jVBj>M-(qo4E4_^vQVGy)SNS3<jw?
znDx~A*@5R;xP!bS7Psz-tiykJFtqgO&E~xg9W#=zD`E5{I@V>d(}&KP#&fsDqSjCQ
zP?ejC9RJv0E0;=R!zp+t$?(iz`}EG#4%GIUHQQJU{VZJ4h)6$EDs8$(pMR~Kt91==
z$D1pN-+!YOnQ@2@wGto{+0592)Ii~@qt#<rPe&xo==q^Gpg2LmCnyD>Y)7qLt8=t=
zY;T}ue^$^zlIz&Y+&Au#f3lvnS`8;U;j;M}YJepF=0GoSxeZhok>0~?7rgiAM<P<C
zsR-du8hs>~W3CC&Eiiot$q6*FvhF17jx`(Q!!#S)Be_M{$|UgjGOZLdD}6HNP~YPw
ztbvS=gq|85or}cX_8^VNC*gJW$)fA*lVb}U<D;_o{?!VLW@z&w5zt(R&HgrJ!0;g8
zszJ&@_F78@`?4HI?rtk$%kKQ~`ex;|8oP@q8gN)lyvFMD-b5gR@dRFVmi2uo&Y(KU
z+yOPH*0!6)ruJl%6~CtF9<Ay24(t1(sxUgJvyt|n<SRYpo41nPhIXu^H{MEiLsz*8
z7=#v*+iQ#@#WMTBF2m6JhwmiCw3J%Itt79{ho!6HEGQOj7w%tz#rFH=GOsUDtx3F5
zYr<hl%<_@dva9SF`tNp$*=(J1%$A)lf74A0{JV{rj(^4aex)ydh5W}CT@z|>1+K9k
zi<j$yz8&$a<Bg=#cy!+x9sF;(<i`Hy08~@`301!{_YpuOGV#B|9B}8g=p&57TcU9}
z%19r4IX3nasA0T`=|es&&+HanB<NAQzKj2q3-g_Aq<N3*sWV2no5zNcOY&Q*#}*QW
zrx2l$tdlc6_wI>?=<=PnVYNb%@489IA@TIg>pdk>+%&SMD$#&?`5vU)(9GM&5|7z#
zAU!yyM7^~e&!{5`LUDuOe4_RlSi+>2^$@BAIB4$&<{d-9a~7f2g-Q^4@EBlbNeK5#
zqsHCdU{naHXNzGWgvjW<RDg4`V*;AxhZ09THF3mOj`yBTWaUli%R-}waUPp3ya_&i
zy!cz#Vs_b%WK0lW6z@*+awYN7w|ksD&7Og;qAqLW?MAGIARi|?P3qDabTBBA>}6CU
z=tgRmjvFSOhqjo!m%_0$urPu)><#dyyebFeWpDy)=m~4OfVN>)yx)ZA4Ih4V?DHgi
z0gPGr1Ox2?LW$=9d<S}KO-!z~tFlX80O}Y3-gYCR-3ZF#)|t`H;cCHUr!;>)2oB0c
z7p1EhAGfJ;3kU=aoRIK(f+Pu3(fGuP==@n?ifW$2rKnmI>8WBQp)qhL*2M#-D+RA?
zAVLoX7x@<~!Y;g|m4Lc}XwT+)VCnlV3KpKTGSsYRcm}gc6B=qZLD=qNJl`6{sk)nR
zMPawEWG75{PoP&P+R_O-jM#1y8HNy~O|u<?0NAMW5L24y&_^rD!2pH&W9<Qp_PVOZ
z*>qCPE-rCr3`+tRzfw&zx?s%6{{p?(!H*Twvp|+>-ceT!Qw{#e#aT)0w^2CvAI$N=
z$5xSU-|^nlKBkx{jGpafdz?<!qoQCkXfa;bQ_qhoFJ+nzx2Ky1)xfv4bxB?fEqb<H
zUmsTcGf)vwIB%o^@YB5R|L$Y*)%I%FoCnid3r5i5_K4RB8|$A}lO4!FZrFD&VB^B&
z*^y5?bKJ2OyTbKjH0_<0H5f#CLvUU>tERnCWo)w;7+qJxqJN!FM(x&#RNI$YPr{tU
zT{<7W*y!YOt7G$*pn?UaEY(9WK$&kh?%h#4<bHuU+|S5!-DhqXb%F^%{!yiUB+g!%
z;ef5;3R8w%jfcgw;270?3p^y18UO#&;v7Om@cih$lqv}X5jew1;pqO1jG|{%!4arj
z-4!^&py|q$tqa9QB6tJ0A^T#K9ZQCw&;vA4M*Ss%cV5C-SViRbBGq8x-Zq^O-G#=0
z8$feFvB0#4)-g_mAhI6cVIp=AlPqElU|z@~VZJuboQ?U?_&sVX`d^(+vZr5T;yCO&
z!01z!7;5!|@*JMb_?NiegPph;i+2}+3keC;+15+V?M+@KJSw##$hUA(C>WWWLx;li
z*#vFpR0H32n1&pcmi@ARDW8XTMPTaUg<)F2SR(6`2O6J|LI*-X>9@N?s_TRJ;gl20
znP;r@VE?VIb=rqQRumHHrm0@mNcx2vv7xs0(?H$?ec2-T!ze2$Z99q4ec4y2N$td)
z12bY~44(k(X!S|#3LRZ{U8=-Wca^U>;|$)BCt3|M2jp~0Uy|SBIgtg)oBht(u-`*!
zW)$Qlt2XmlG-p=UP8xH=Iq(Ba&-g<o)Zb&U8Tt+T=;GpRSJj1}38!=ylENmQ{gcKF
zo#@_a%-v=*LD&#IvO591LgsFhc$XMKe$L*tL^xER1QR=N_QNiBe4oSmwU-Nf58^X9
zl!Nq~pSs)I4WcE3VrI{>S3)oX1_&F7xFB6N?^mt_6wd&n51mvaN`-ZTzfW^Wk04)>
zZ%_sK8G<i_Dw{9RsX8EjRPC9^L2AAWV0wZ{l3ulWB#|H;m8JfevgY1m&^qx*!Lu3!
zR_Lwo=soiy4`7iSp$~DCgDlbxRc*OP`O{~1;k(zcpVd_nnTV~0ctmj$=%)jJd-Jex
zRs52F2KHgYc#Xt;&vq%TL}qq~%!Dd3`7i{i>UU}KrK0x0)iivO*F`6-)Yo1lJ^_jL
zU0%Bl`huWDRM*EEYPa%d5Xz5rbed4GGB9z+hY4wi8L&_{NqxYaige9pt*aW8ecu<S
z?@Ltsy{Y~I|LnDnH!SWe=erpzK+k19*`BsnJN;?(Efj#Bx6!&IMMxM~qm!LR@uKd`
z0~w<C*eVrN6fey9SP2dqmvh9ah3(_771Qr^?UeT<j#5%0np_{bmm{wEI8Ia95bL?1
z^(yp$^k|g*XtKv3cU2pb|1j2%xjW|l(wv);D5i?l%n1tMEs3GQphrNq7WuK06fMzM
z&6p6xG`r<1YIOpt$zz)oSB?$d7EZ6-y6NdPBvP9#PrS9chFYz8g(#$b{(BB!pI<<{
zQ0JFWpV;|D;Es85$>{2Hiyh59o;F(MSgSxz8*5>qbjO|j>Fctdg7aV9)_aoX*D?@p
z;bxfc`)2G;9ym7U^?ME}LN?QJ$s`BqW@6Jqh1en}T~oDQXu;e*EJF$b^=ZO_n~gr*
z8}V*TZ3>^jflFhq3(LuLqJSWHl_KhF6gOG5MWnqeBrs{kClBk74a!Q-n>P8t1V7I-
zZ**y4`K@fO2|rusp@mMdIfi#1RyKMejFYB>^6npDbGkunv{5jX^>aefOvg_9um-sR
z2sn*$XTg_S;g^fXVhcibR8`-x>cPHlH~RidHU{9j4~&f`;y!~1KsRK6rKcv2^x%d~
z29Y}_Om<@Mv_GEJmx7;XH|Bv`=&{8AVa=!##Z#;N96Rk=^Bohs2dFtG<p*-uGF!EV
z)+173qyRpm1h43RQ$Ns8)#MRGUzxD$Kr3iJ!bIS8W4?7;!u*2y@<+yNb(*W)nqXV4
zZnMg{D-W0&6oB3AVURts4q~`HxO==KLhq$T2Ta9J!QxH!n;tc{kbUlZ6a4nYaBTIC
zvcr0t3(P!}vfFN#vqZT$&S+Mj)@GVWmqocpK#e*a%)p<3)LLo9m?~2cBg8$wMFbFc
zk6&DXo8-f|7UC=7OUxtF8a^f%ds7gDNlWbVMH+=}*3j&Ps=9{!wNJO|zx@2tZ8-k`
z;}FbI#a>SCJh92+m}qO!iPYoAt=9KGg^3f9urOFGQoSIOeVl*#I>rN-NEx{PkzZ?)
zY)NXoL>ECgI-Y-U!!P6W8mB0qdtN7Y2@^;5x+2&|IkL$OH}8Z(E3P9I*TOGSx)4we
zLj((&<z}NH*aje(0_jdf0mG*Et9&$b&u<?nx1{-4B>{I)fB~qOhufp_3QaPvCcr$;
zJIfKlNFJ*s#h?QglY_%zIK*t9k}#lz#G{nYo5H*vY@U4bkt<2$_nfbnc?;0O<)A$Z
zG%q8PP$huzZT_}xd@I2wMP{mUR5}T46!R<ODu7Vv?6yUNe5kA4d?wq(vI8Unh>Ss_
zbK;hKCIxyzynU`VW@B1|v%(2c7CNLA!-OYg&1eR-2hgCVX_jqx2R~2HFX)WbTFl&J
z8;KBf^6qZNr=|Mk%`jSVM5~H};21`}iq9Q6sIKvz&Ll(QHN(Y=2UAyEHoealyKN@C
zx3H5wVWZzsoH7BO0gMq-Mlrr=SqrPkIV9V%2SH}*0L6>@wyBPj4d;zN|LR>AwEW+{
z^;9=vwx91}a|@bx_t=KC$u>=mv_4(~MkQcR;H~A?UKiQ)u}v;Dac!Ms(5_Sv>wvJ2
zp$XUTkAIi3gzNq$@YVQjv69h6wxFgyyUzEr*Sz3Fs?4(YWYPWJs#0FSa~d$4&^MwF
z|ComUptw);A~Ta3?qII~BvXbkr(kSW9XDs51^1s5GruQ`{f5~JT9W!FyUuUH3BoY~
z>N}BrGC@3_>8*7*a&(pepCkeT(F{4=plj>eu}NL?!JwKA&(K;w5nHU8e{r^9pE~iX
zpz4O02OO!j>!DQn7#KsnRB*szBo8fhe4Plxx_Hj~mbu@&Ax9_$ffLSaLX0$fFGL}t
zZX1HMpzDSVSzu$Z^Y3`nFPS`arSLug2nmG%gf<uk$q`j<t8w>~rGLJ_0bj;sHxR-V
zO}wp2x^6y>JyBy161lF7+S(jbal~<3=XQz?kw^eNBq#5!Q}P%?Cz1*`sGw>F3#U&(
ze}wN&i%ePnGtN2yA3#lmYJw2uq2c&WGhou|Ee&ME1hwg4A%buaKXC^<l7>q_mADUM
zB$#FeO-jat__;Q8D@l#^Mz5><%nHx4eN`(UGqD$_#gu~G$G?Okl%l|n%?AYqYKQ*+
z=ShOrySp4o5<Vn}NRauncDK98eLO|PSYvsez*c3WQ8YdTuj3P0w-a+SGi7iTy-61s
z&)0F3)odF2rU^Z#d(H{%7c+MfM$@9u<8Huh>foM{Ir>GbThAWizY+P;@u&Zzc(eaL
zBn!{s=zj916fjQ9Oy7t*!>xI!3Ch%sC*gb(DcF#s7#0`#;MQB*Muq@>cqZ<6RO)Zz
z+4f-IXcSEaQ8jS|4{vf~!JY5p8~Jtg)!)JzeHnA$B5Yd%S{8LIh-OwTPv8su{r3Lb
z-M4>R&rYKHPk3fCm?^x8PV71vn>H%ZfaHN`6Z0sD^9O{D&!*rk>u&EFx0Synf3Df5
zSiljZ4!CK(_t@NVTU6E`(#9mFVdvtk(J3aalY*>Uh{zuRUa6^t#o#cUSmJ_&$V9$l
z)<<(2k=ss(v&qECEyc|gF>7j|i03oV5<^mBw-nRj0_ZY*^a^}j;6)ESSBb@;su3^+
zVoTXDKgRo@&L%J(xv@xG>M~*_Xh5D$IPjWEpAV}FvhPsAegnYXW@<s)Vf;W~y)a3%
z$=iY@ume&867hzZC(SbSrW2sAG~2=#oe+A2GjQI}QIrT>6Ki)W2{pqkoVWDBL=!S<
ztQ|cvTztIQ9U<aOyC-0YI-zvK3X=q{<ybMl0T&oL5@0FdUOzcI3Dq#3cMMqIYrY<V
z-2qiEsGt#>i8O}BcZ(gV`1A&Ri}7+gGr8dI<%A*g;J6xqfCN;16gP8s0E%(O>hiP9
zt&{s>$~jjc$aFBQ>cVxleLX$j>Tu?VbM`%TTil0_^H?vO90K~jfr9^|0*vMb{I^AF
z1yuG+H+87z&!<5huxGEz8o84*>t!zP>fAP`k9X5`PC7*l3r*mMAe^lr*W&2h73sLe
zD+Jqfe}6ze^SaXOxP5~&a@*;$3M>b;rFY2$st$U_2*i}J8HjD{>wH~Xen_Po*e7F3
z+S}-JSM&m|I;sZJ<l=UPT<a#-!p^*V?yeapXO$R`F-AxBB8S*QJ_*yBPjFu^T68HQ
zI7+$b$q&gxRAQ<_pYoQEW5*+8qP->{>TZs|0ub@9gOh=4R7bJj1$RkSxE@Sk*R%<p
zT*4SMp-@M)&u)R>4s6zdDDi&vX#lo+{RJ4+GW=ffL6ClFB}$l()D<RbF%i)7>S(yw
zVl5GF;YYJ3&n*$O!A$obFYkfWfWMF63@0AmC>n065+4sfr;2#ATuBU`s4(FX75~d$
z8Z=RLCZf3yU!y;oq2O(BtYmcg*7&BI!EeH>$DgYmwi0lCcnXdsQ%dmodE;^9N#`kY
z3S_pLUS1cI5?ojLrXhP$4zk}Fo%?Qf0)2&lY17cXb%IlR5^A2<C29m&p(sy4^8^P;
z(Cr7DAfU0oq7ULpnPNJ0Z8JSZL&|gR8=605ni!kb1*@=OrCzVc)XeAsh3N@I-t{PK
zz%q7ZY$eU)iK$6UXR*dl;thf}gLIU(j;4k&3-t2Qr;-ya)Tw3-ZD0IdAcSGLq=s<5
zcJTgw`sB-9Q_8)3q(KTMjBIyGmf%{dU@tQ3pNozbq)vUf+y9*CS0_z3qIOdev6JGz
z9J>r&Lr5EY<bdzK@-MW41>YBE>Ceqb9~Pvr@4hc5VU$AH*KXLhP3fsUXE`}38Q&Gb
z5JV`bm>l*Y0;el$={Dd}JT@J1WO{BW#l1!JaIQ_2HgZ*;VMuoNmFY1(GJR%`OX;+o
zjh}*9Y@M_a5F^+tEAZHpO~2w%dG4<%9w-F-cdkTmE+#UWPP~NrY@foi9DokT^}3q8
z?`m>IFcMKtAkf>h{w`6MQ4DC(44IaHk+ST6DCjFv&3QVqpWykQnb`gri>lcRekg@>
z6}>Nt@nPj8o6E$C`OVlM0CSaGEo=fVMq72OktGAkyNPoR>`-2vR}6jRU)t^k!r}zA
z6)3SvdbS)<r<{;jKmzlnAOt0B3*qds3S~W`&ZN{neYa63w+CE*+kRm%)D!&$$>5wE
zSSe;W4&qZr`EgKb910^dnBZ2aVRXO<8^?Uf8TMSKMzbMON)-`$r6LwW&oHP30iH1X
zN;yPe7?9fx_>=E?a>_K_STHa@vUw^=EG}E&L=&~9dclPr+a$-S=~_zIOhOhcM!QO!
ztw^~nQmSg6gTj4pF{W<$2<fn#zA-o0cfdYF`dR>tVi-AQeHQ{osW3glU;?dXA)=F8
z?icyEoaV#wA9!(uA0D#u>vaG$Mfg(Dw@xm6U0qA4nv~6lQ-!0l6(<p?s&TTc2nt50
z)}$kVG}Ztf3-;cTn;AheBMQSzYe*Os*yk#L4|kIXexRjBcd}_MaYC}P2o6?^5U~Zd
ztdy6i8vU&I6|^g%V`D`3!#QMnrBxl#GytkpV}M_AFHn+ESdfI(g9-qMeE9o*?dVnP
z`bx9Uy53}eYliD;^!96MoLjoPzbgj$YJR=Fs9x#qZ^zdNZNdXr7)}3y0iFP0=~b$m
z{t0X}h9_(E9dXI1xfdo(9V+<_UB*a_56_4nIctWn!wv$?Tj1UR+btgq+->9YQ6jhr
zTm%GNhZ*lj=aq-kmr>OVlm0F=h0xD8*atqo#!c4MeAJ>2iu7z~#&M7im};V|)N^X0
zbe)NsfQ3XoQ7f#|&+DeFU2oBOX%45?=$EV?_$;C0ioJMI5~XyrtUCrK0B%FaB384S
z9L@YK2DWC?M@`5`f0QG(S<s$p?x(K*y3>{9j7?{s&EUh0_^c4CxamZ)COZjA3=ry3
z!K_;%QINXQwN@G5x6b`);On9b5Z&DrbGuM)umE7z!+-x%pk{sj_XM2{K1jpQekUb7
znz{GuHz4W2)4FRcPD9wjxFoCQOMFLV;xD1LNEp-a0+cdwupA7EaR32=URFSX@>={X
zdETv03^D#jSMyznsfyW=*WpEv6Nd2Lpoio?N$to#SRu*3P)+InhM(ZiYi1v;8b}j!
zvorAMl7E03n6%r&Ig&bi1tR@Dq2BVBlEv9k7e^CdB8t2&DJC4^J-}Dxy+X3(6s3;$
zzni5AVUa$`t|#Tx@gvzVA6?Ayi=ysl2&)N<G#KmJWOhMiD-YD2krV13YO$b3e9fIi
z5gw|yQ_PGNR){lX)wf}VQ_ggZ^}z!*+mI6<cp4H6ZgG<X)K;)y?rWT_tnIB##?gov
z3itH|I4aoH<Qd2Bs8skRb}Rf&G|})0{oQ49@5{gjG9BVe*XNm`)H42V>{27RUqp&N
zy*2(yJPrR2E@<Td{{*2^RDt-Q7|pz{j%h=F27m#E?wB1vH{vG{U@(jdbE(i=frNmW
zRrp^RCPy&%0vyi3%c4SsFQ9=A^qdRPbcVmobNw3jl9Upu1)os~;Jg_@cv7My$0>kL
z{4jVc>Ow8Ct9|K{JJc4WSRna6fm=cD0Ho_VutVjvbOJ=+07qn5@?F)l(;AdefR7oh
zz+hMn-d~rFezhwA{hz^3>gm&toPghdZ}hV529k8UoH9wRJ#}JiYG0RTrR46pst(AT
z00VnLt&<Pmhe?%cDXc>YuPfGJoARW)V~(^m$vGkqQLQkAl`cK}XC&h$(9+F#n<NBf
zBQ++<(@vt=R<gAYC@=<&?M#<j?NY-X3+XAt+(K|qU=AmU+OiJ6@!o{ypYMFL{oU@~
z{sCKuUcKIZ=OkO;5L%!xc=3Ag#eaUkd$8jk>a5b6y>H(h?(7EzqUCHYecbq8tSW^`
zOle9<Np^y%%#+A0UGEwyR?ict?8Iv7(%3EYwWHYFVr{6p<_m-9&O!_nx4Ah7GtKxu
z)J1UxY>N{Lp(eb%C%1TPD{!e9<J6tH9;27gq-c?Hk`)$o^WlozYLFcCh*GY(YqDOb
z&|Q$DYeB4oK214oOCB$IkZ?e5qQiMZ&_i{7`dYYe)+H@S1+kIHS2Vw=HH1iQwR}D(
zH@|zRfv1pY5Ck1B;@DL6-4<1p57u>iQ|U(^DF>?<gWAlM*BIBa=8bfW2!ks{^?Cx6
zs60jJ?@?t;y6#tV7w@uE{S1VXswbX3-KknA5#R?-XhPGC|BBy6a4Dgunp;I*5#M5P
zM*Y>XNPAB{o)6fZ*>BsL9_A~`n2_|4_7=qRIVD3yHREZczbQCYs=_IqdIS9I*dE{(
zZctvi8ypBONKHV6E-I!}U=%1}6)}ypf(~O7o5qpT_ZS@ShWWVOFU~DzNYX7SnH@>B
z-k*Ec1*qc~5PIo{POhl1&QW#jeln*%`s%A@b=*+1KJ+Y|QyV+7rn(1yu!-74OFpMU
z{3_AAQ^_zCOey#>*6e_D_h6&cf1QnHUHc3Qc8`^a(<7#;BWI#J#~Eg3OjYz;pvdmC
z2#utP$!U9TFT;5|GMwZ^do7y6`P(R%oQ3-%8ofW#$U9IFz1(T#xq1P3|E$nP#eyX_
za7R)TfB89f=R0$CK7K5O8(tdSitBLOwCH{&l~~DHUHBactLYhj{LuDz${#<hz30Iu
zLVrm^&Rl(|J;nEroxK1ZouJG~I3&;DDX{N|QVq)s+@Qr17tYhbA>F?>HaEMy)%1ou
z(rfY9r(riu%pXb?FjjZyMH_WD(3Zy!Ob;1NXqc_3HqmJ)I$Y-zw1?5flMm?Yk`F7)
zQ#ZZzb-^kCXUo|SG%6YF@;SbefM^P$SqL0I-|0@+>;|gw0&e_nc;g0we1JPVR}Lb1
zj0D^WpJ1*g|9_w8YHiRa<p00T58<H#RGLZqy|;yNHwb+KChE`-#pTTLA-GotEc*fZ
zNx&EEJmIriTZ5tDs6wlHXOXd6Ebp6hzxFont2m2P*bS-b>qb@e@8|}7dsh_yiwgax
zy<e8iW=8-hD~!!Ef*_@Ae8Z0oyi@w5|Dpus|DjHQjNsi;YE{<>H*eqBhN)k3%G>qt
zWhb=ICx91yg3Et0hdcya;+!&Zuysf!-s1RwHFg2&wIlxIJko_;07yW$zi8w)&o0Db
zRf>vJ07SygbdnFIF)^7|Se=t<9d$RO?1o)$hJ>rStS-RKcq(v8Xc~hFl`{z>0I`WC
zeav3ee%fwtt^e5j^~aUY){kdTe(b}4JMI3H&Qqf)AtUz+etxv(L9huAi5@@Gbc4I+
z<lhG}qCkSN#~%bz15K~o0C%$sHz9&_@z^A$GDvZgK<5Sx`lR&##u@2Xt^aMIrgI;I
z<W)3KfpKO7ZAa_h#;tV^x~`u`S=gk2QD$fb`aS=i=z~b#Ve60AFi<r}zWatBj7?H&
za<(?p=&h};y6x$cSb1AAtr~E)9~`B045E2(Z6mW>VRYX7a0$Em!!>JL1$&Q7asMc?
z(;Phh1(m%lt|6vShf$M<mtBoUFZ_~lY4xX2D02CO)rdh*RabKQqUx3dt=zy?(@0DY
zYy<sM!X_xR$+i&eT5=dluRuJzBZa2s@L!l1oaqa1b3?Zxm@wd9faUOzX^ra2E3S?z
z!gB}VNErKFNFRR&2hFe&bs3Njn=9iTIP^g6Cq&jygth@@1`xAxg?j=b4bd2Qd!j&Y
z0Tjz0cx_P0KbqDz+kx%<E}fiM()MBe=KygLb9hA7X^sO`eOftUVi+0W&|8Z7z>#-%
z68vu1D}%wU?B>yGH}ffAzje#U(Swj4$>XH3|A9N;Y}p4tNlF7)XRDMy1Wl^wm<Id4
zi9_YnlW-6#Vhqe^$K*F9#Xljvz|5EAzeBJeTrkL0BG*e@@L67zgEg86<5mkH`*`7*
z@LIoZIWwe3vEvJxL<Dz9IT4M+e^EPn;ikk1dQMWT3-yjseD(1VQj0m>v>drV>hb~|
z``rBthT)Ypw-&u;?mxwJ&=Jmil3$2voI1xG`qTE0E5H8Oa~H6qPGh6&hA*NE5+3#4
zkgnPh+UrYFAFz*kICzzY9cP!96Ek)<0LK%$GQ+~J5h7<Pa+7cvD3n2-`W(JOOO&L;
zDnFE@($^vCVqsK~KDJRs^9ENJ`2_fs?yo=APpypcvEyTLw8kTD{22AAji;V>=rZrn
zTT6p&h(0|S?)4?8@o}te$8&)mJkG?I^PIH19f_dsw}O0@jysYWatDLM48Y^F{2+)$
z3w9)`hOneA&J}d6!Ug^T%l^G@*}Z+-xtrP3AL}Pw_y65It~~W(7fPnwABMu*%8vZX
zso|UpsfGP0F}<{beX}5G9(TIg{mQN#A4}zN`_e<O({#X_z}I-}{c=&P@wXZuPq+sO
zFOac)#L*ibL1;eat&V_%Xky%dqcd2=<|fzho2s7LTN;DZZ-pUp(tzt`-ozAF4k?sp
z*_i=0CoIKdPX*UKMeNKC50EM+7sdB(^zS6?p@CsGphhx;Lm=h(#f2ktm?97qUMDLg
zQ}s@Wo?+Mt#AdgqYVj$~l%cPsuA+a@Uw7P(TdbAOvdyovBOre(?*BeJ#xi~P*=%4V
z`Eqxkc^(i>bbgeJm9CeqQASq6^gU{=z%9_TSAft3tA=dUkezxiJ~cl+kCjbmt13#*
zKsP>K)a=Tg?V5F2(C{yf0&-SPjT#mI>(1M;A{~4K^5!+7PUz|2dw>rK3i&Lh@uM~f
zv^P{obO7A9iIhLTRc;Lu{_5owr_t3El)zgNJuGgDfjHsQ4)g~%VJB`J+iILB1vG`r
zJqx#^hX%%b$}Tu}jx^@D-cZD`iLOz4_{?nKo{xi%m#x!CHe5ARfd79^!|Lk@l_zTN
zr$KJ6BDA>YRY>WOV*<~?q&)SQqb7<R-i({>+rL$rOHH#Uk`HtCe6@r*)31#?b*`ep
z{clkP2aK^brNo-xhUgHYxA?ukLPd1@8)0Kb1Q${*2Sm#kn=k1EV1^+}A83H0L8)=J
zqc~gwIt3?D&Zhcgc+e_{v69zo$B~L8(MkxCa{p#l9@Y%#xuZtnYNA%44-Xtm1j2Lw
zcAA4R={|Y;dgqjXy^-jDEN&vl9PP0wc3xO`!&}b!MK#|2`s;ns?^N=Lah9ejK-(_q
zi7?oJEu>VzMTKzu=ub7H7z2^rM}TG*)Sg>7EvbQFv=oBMz(i}>Zvr^OtQ(3fhAxt)
zlj?mjvhJ5nS47<4jj58Io|@ly3Y#BW>Fw>_;m$e+T7#>%>ms{6VNfY0Ggk&56mJ6E
zRaYLXOw^2|D1?}n5ZGA3t2|~HmP}_Pa`HwoJeRCwf)m84DesB#W_`{S93~kbj(9Sd
zCLZ!pahQc$&&y&s2IYra%7J8wr-YPar3q9s5Rz^P{1m)~X9^~!sCr?cqhOrJ2D8?;
zq3I?XwI|<1RdShszN72|9Axj@et>~ohv35vr2hOIeBCWqjR92%wkJ8E)3eC{VyWpA
zu&u=tst<59O}duZlk3@%$Uk&EDc$I%_Xm;1PzKJ5$`{_GyvirH>zSd?_#}>ki1S9U
z0ai<?bBwX<`j^>PW<2&eWTsK{jCzodQ6yB1?9iDe3NUT7(oHuKNf-V$4#PRY2gUg9
zk`a!jGEQEPD%)_n^x3=#yUKl3aneIBW!s-K+fvsZll}D{J=s2pS9>sLt|2~u-Y}VN
z5|W*w!;<Qz^MFN?K16GzC}h<f59!7N8Q%<#Qvpk`z^4P2i;oDdn67`zvWT&7lMq8Z
zeB_(Z4&0Jd=1)6HnKS%<SV@2OF3a<2<Z3iu0^NA1FvuGO8nKRibAlrb=nsApe+Xc>
z<6?lr=%!$F5Q;MRCIHjAhunNGq1YE*C}tbK;K=>S2T+DbWsdbJI%sz|HT_n%CbL$1
z5ngjf`7PH|q=e%AW3M5ZB6oc6|5bpW5qKaZ9id30_>nt*5BEqRA$E*M;eNT>-|2s!
zSK_5x8$%)<jt~YFz-Eu+*1Ivn+-_iC^?7k9hNJ$c!12djW=#Hwvt%e7M44p(VCL44
z+jXL~yhRq5nF~&mZr(y+dCB#dw^UpzrsxYb8xb1(Y&0r>lXsV?<?CJlK9qHNS`Hy+
z`DKo{U;_j<JyRbVoVQCPF`Hz+xI2i+d}Ayg5ya?G>!w%DroHOC=jW|u60%3WEPwP+
zqTFlu8H=%^+<P$k&By=4V}x*`;N<kr<}v=8aM}=@V<AY}e2)^mZfB?Hy!o1A2)%Fg
zV#kzCUk%@k(wCSeI1X^Cf@)CIh<dP<sIS2<fX&>(4B6GZN5JfTAiAu!an4zi4XlK{
zn-zfY;&p%?;Kf*FNKuF&9i(;A<Y8cJKRF*Me)X+^OmUmOF0>k->j_X)$X^lLrZd=O
zWn_^<8Zyw-0Rjxb7(!L3trSE#N-PY?II77Ns7E;(dn#E1^wogC<%jOf58l^`KA|I%
z>3B7Yjy}xW|0qIYJ9JNC60bR-?Tm*r%;_c|(fLr+Q3~K!A^MIec51VtKHJX>e6VuN
z!{Lg5Y2ceNnun4y2wsRgLFGU<LheXWN!d&pQu_3ky>3n??&^|d`nJZr&bSW<jZLD3
zg4~EFD0l;`I&4GqeXKCq8tqAPd)(%pkcXSq#!ZTF33&6VyVdl%aC?t&t%1p*n12gR
zO&~LV21o?J+0X2mlPM=b&1jMZRtE$I@c1Z33fZY-i0YCYrm`eiki0uTi-Hgn*insh
z%2luy9Lx(viL*qQP2_<>Ff)BB?eAbS3-|)BE&LmhB5|DS!lXPwe^SS-{X(t|A4y}f
z30}IrY!`iQWQJ^34%9xnw#eZCMunBL!Ug<XIQ4~TK`~w!reYJJU3%H~mxNUrSg}2t
z1&kGZ=D7iWx{hpGqYY0xKFSB@qjehe5-RWPCOE{M%C5TswWZx)4qQf9OqaO+;JiuG
zt}7)FH$g^b@_SmRLOr+QH@I@}v<H@)ZUD0d*$vSJOUwToE%d*^LHd8$d-t`ru4G^I
zf1YBRW<^pW1imEc79rjkNWy9iEWk-;6BeFG6PU4(v^6E$w9Wd?L!4(hFL2)EJjoeV
zHEuO7Q&U`=w446=i^UxGTa6lZ`IYDcU_hnknHTIs8rH~t6^hm(s~gTzj~hN#R`T|p
zs00v-l}S69zbbzUnd!pKB&}?9F3Ji~oMfwr<_J&RjLyp?nxVcA#5OUPH0volJBQA-
zB`rRgg)bqH!30adt)@K->RyzH!e1&cnwB^f<k0}APlP!Jbr9qjSeDyGwI7bXU49j`
z6E>Nq$jZ2sB&~I^5nhv72vtqCApmEFmZ;o1m8ygyGMh9>L;{`~TU4MSfd2&GU=7=5
zvv4L(%z$_$&=E{6OHO%<+JQ^OaVFbKAl8#Y-Ia3uR3Qa+Ml+SSPgqlH+I6&dh4ZG)
zkn$-dO{e1P@WW{)NPi|+sQe6fIqfKU7?Yg=+CGW(zMS;NIavIsrXrY^LIK>t&7}iH
z*^BdY2m%h*|MhG7@pzg3tvz1;kDC4oK%M5V|KNXug{GZZoRP2JLI{_q`s3o`<srBh
zi|@_kYw>e2`9>w`roT_V{Bq~TmtVF)YmHZMR^)_BPeHTPyFq-gxdnt%l}70>JK~3m
zc66ywCsYf{csn13bl{V|VB*G;ehM1tCiVfBn=o0y3b&xBp+4wPOSPc(Ki-W9RyUAl
z^D0!9VA_jGc3i(0kB3EjY3W?_X>!^Un|bMn?4Li6QgQVy4He(Bgt?2Qr{6wp*h^XU
zN~B4fdM7@)<(>HC&vhqCOCvY8YmcVw&=O4_ZfJ{^sQETCzU<%09%H6}X{|fShNab!
z(2~JqtfSjXk;aw19oCXU+<bx!1LvH)5U1oF=!u<6lMDwG-aQ-!IVcM+!=_@t$f#oC
zNabUUSv^nsw60TXKKcLtum2ks4xNltrg_ft$#a1B%R7qhLffo^=#JK|kW*1yAWux(
zVcQz*B48!JOHKlT+GC`6y?DdUgO?KYBk_g_*Nv(R{HVsNG4a$KjQBibm2yl(K^UJr
zZ*}Y!h-~&cpmTg}VhCCx1g(`REMpj|OD#D?VKW`KV+8_rQeY1f0a07jh_m-LYfxQ$
z@GPW+oGWoHiU~E5)U)n+=5bv&AwZ6Bb}A)$dP_?5^v^|!oZ;(Yiss1D(yi=BnL4a0
zS(S2vB8iiB#y?i&_pF^T9$nc)MQ;qlvyV|gA{&97AowWhu-a5Liah<M3Ei%1k#9zg
zU2Cvn@jmpdT3$1%s0P;dq;LlCR1GdRNou1=OPbZMRr=Z`f~kwHNQX+kZ&EZ<x}03X
z4L&9zjpViX!BF)n-!*v)OO9JG6@?#Up!W_8)PXjFUm1vgRR2_Mc3W_)3iZ^MURlyF
zM9&nJZYN*I=7H|7k1V>pH~p(Mih)QrZZ%bfg-?UCBqbr5k4e_)S^nBC4YCe$hJCHK
z$!qoeK|UV5M?e9f#06|bUf;l;!0Ftyo07@n9CB|(8WGETC2kh*3Wxgvr7u*Y3O5d9
z5sm`%_&go5)fvAVw31C!U#qCAXOkYqtJHy81c8vE5lJP`<r8>CDJ;tRvY+ragV?>f
zgxL<p8*Nzv5wPU~#Ni}8Rguxj$r2ysnzt;*nk!X2FkvGj7XF;K>3BShXcwwdbQ=I=
zDmj04OLG3~&qdDdv4><XwsmW6WS%mhc_yRgC<^I_Bjh%xx^NHW_?Wl&Kzmueb#xDd
zx5K#9ZUEs|n4PK9I}9vjfT=FT-oF&bhN_bub)uvdI)#7&QO4@Xkbpq;#o0JJlTNDQ
z52rZ_w2SZi8FwVsGj%I|eao%*^`C1iQXmF5bLei!)QxcTei2I@*ARnRhMF2sm?)Z)
zw2)Lzbxl)jQ@8@T*7$VBE?SGHkenjoOFAOLC|~I^S`P|Vf+UI(r7=SxCC!|{vSghy
zgdKv~@DOTtZC`$g7Peo0>DZ>@SwRuzXfh;P+?k9>EJG$BovThS(?TKDagwR$WBIJ0
zvs37JmV9!wx^%Yv4i!w@?%&*UyMOcN+U_vsDGZThqLo@{m5|Kr*S*#_sR<#Ygvd^9
zIcf@wi%rZAN`C}bq@i%}4+rC0az-{l1j8Q4yQ)45$GwjENF|r{IIO(QQ^}FofaEjr
z%!kf1lF+De&tBwm!)k7|5{G|Re5+zC*~+Oaj^e9hkFCvYy>0oGs;<sfY}kDOe}@H@
zF@V&oTUMj6?fo|b1RT$Xc+6khT)}H=-#4bR!S+}yvB0*ZsHbDN<7cE1QB8>?F)z%6
zPw}-5&myIqU0>4R&5{u=+?J=rzowG3Z*NJ`zO6#i&_w9wG!2VaC2DFCrY-%2lKrXW
zper=M%R>+O9+vDH6|@9>njr+SRGPdFm`quLt>wWJ)KI-Ic;_T_v%`B%>9Bf6!AnQ<
z)auzi-1U_=A`E8gKK$z~_u*gvTvzJ_9c5<|%HVQ^v=q4N$tSHM1)!A4jlj_HQ4?R!
zGsVtna}o2Bu@~8>wgM~|3~oG_bO;w<WA`P>rcll-w!<(T**%o)Dc8H#s5nCBBu58M
z8l`+JWjhk{McS{^v!ANUr9u=Q_=<lM%>o(Z)yo6W5gi*`A|w}1M5=F};2RO1MX&$*
z_3~@fa*|<*R6ZcZ&k2kDG!+~L(0P#WiYm#n(g-$C=7-=C5XuDgfF{1p@8Ya)z8}K7
z%icr<?M94RE^UYsGO?0O5uh0%wyo&L?*Ip9Rn4tuW)=!dw=<l&>8I`MTb{PB|5T^V
z9(#;a(%m~BPS!ddaj0l_VmDRZtutyD&I4LUL8pNLKix2ncd3M#G=8a;U{lq!t02FO
zieCp;F`>-J9>AC~G3LhUs52$b@CvDbJ9@vWg}y4wFQm5`h&DSH@)G$68B5f4^f0g-
zfQ~g<$=cu7M7mVlkrSjI*Sg~F^Fl^=8#%hAa}?--0=b(5rXoy`(Z8d5$;7I&hWp;&
z*;W}O*@>17@mDoO*XlwJ@z;ADqKeIDjqpkb@%68UH6;DC;gkodB*5Y8fT=2_WgLi$
zFVlWL1RrP}o3EE&=3{lMSd>x{YE7LLVWv85@hiO9&k+&T7!T%%T?8hkqx3QZwgB-h
z1@o<_n3Cd3nkwt+iv9yUk~S>#JB@PP@NFi83L3KkYdlSDZR&`&L#9b^OORYo`Ib}s
zu-6LT>a}8k%#h)h>ypeF#{0<X;eSG_!CsLq3DH*EN`rSuJkriZo=FiVnPqgPDDNiJ
z-&~thY5(7D$!Y!VPbRa|Blk-DAVsJ;KiQPpWp?q4Pj4(crXmN{THe&j<JRNl*0Oxa
zDFk~mS%TeT-$bu@r2Eh6D$*h92;$VlT|*m5W9a-^;;Hfw0;nvK#~)%ctAQx>nc=eL
z6niHt0D*Q|Xcd4qitcNs`SqZ`KFZLJTiOx7l4jjtvJPBdVeEht)6+S%KDeUH14VmP
z;pi9%#LrGqWeelD2pFdhi_KRccJT_l$Y)kXDy?^=r78mo{^-=GcN~j)aR`SLfJ})#
z0!c&!1C@R%qh^?GTv91MSyhc;T?)OU`OCDaE*~)&Z~Ed|B?*f6K6lz?0xv)0^Nufk
z2lGb!5g83zaCz~r^{?>A>0D}-k=rPJwV^B^!zThA-TzGArUz)<BuJj<WJla~a6#3x
z^H%bj^o%cLWZSZ?;UErf-9MU)d+VhoJycG$T#9H*|Kims`$RZ*mJ2La=0RTJd8aj&
zJFZII$`J=iVN=q<rZV4c8f1KBKRdlf)1y1AloUli#a6yvq~#`=IvHxJ^>;YaW#(A2
zL6S@D)}qvfuv;w7M<j{c2t-hxZ;+DalRrl{>&xJ1M2xB0*E)_Ve?(h#Ssoz>a8Hg+
z1-$yNkmg(0hz1NU1PzDM)H&FwO0upSR{k|I^7PYDSNElb2IbOr7b7>L<t(_gypx>-
z_f~YEZUS5NC4f(=OQ)^AgbcDA;bn47S@ECihSijenk<*x4XGRphAdajb5q&#6)tl&
z=OJg_=tit~xBA^^?95b>{W7zg!<f71RVD-PO7<LieWQWb%n4{H(OR;f)Xo5srv}rR
z%>|hwhTTIVWYaS{O$&(at|`tF7p4F=Wzfot4TVNB4H>i?qa=&{C0DBz?g`bgX|cAt
zBP>ZVuHF;{W(QsX6EUNy3P?_d@2-H?yu~_-VR|iI3**t?O8KcpI!*QM_BSZEGl5QO
za0=HYzodNqw9Ss}9~f97r`2UfskS<Vj4kBTsy|p947o`^`8N9;6`k<cjQM)a2ddb-
zYh#x!zgQ4E>QlXue7K%@bflE-%6GD2AC;{ym6HPZzT{<bL*@TOc6JG8$3rY`Ca1sz
z5w*6$a8pgxX7R_&C~?a6jM5i2qx2~-quWvqYuNIM&8S~7ye#>+)}EkYCQ3V*Txsu@
zOA9C3@kZo#3mcp6lNp>v$j#f@jv%cUT<s#drqfY+={uLQOVut)(^aA9QbJMF0Sg-s
zc7ddRPx%QO7>5QY`qVivmNfU4z4U4(1TUwzhMFAek;P4aH0Z)^fCuS6>+|*6^xl7j
zM%z)rC1j<L!s|<mXf?ho?ym?wPI?0M)%7tItWlvEWN`x>sY~>@{ug<?3TfLdU3N`N
z`V>)bjoWbOF{ms`)Os0CLgCj*CvO|02d~jpyiM)6nsO|`;PFp*@c1WX!Q-ER>-vXl
z8J`$70?@y8z?7;(n@!nE73L1UwF<CapY$@?!htQwqUQ)AR*cvBIlbk70I6Udht(pQ
zrogsL#7&gaO%yrlX7DEHfR<b-n{r7fN0UA}`_S1Jc@{-i7sbu_#&mX~I;rZZTc2B}
zfRF+obRa*Bn<3`$!!-hX;~A1i$mKHCDoBwhxg=7nW`P*uj@%Y%hZ&Gk(|Ar1x{x;L
z2_MrCG-!4q?`KB~4k>i%-S4&yupn$l$L^eCJRJ67;?hyUDiNIj@BcN)Mpwx@^!FG^
zQyJ`~jTB*ii@j)^8h-yjSopbxz_1KEkRjN}>Kvpps7SeLsahm716IK>rZ7fFHY7xN
zTMeh&@11pOF$ZsX9O#g@-egxry=)b2OdYSjMk4?l2O=hOQcl7>If7irQ+AM-{o_Zt
zfBk-l*^0FQ1i-?IR};7|nt+ELYAscf8W~m9X>K6?09t}syTG1Fdj`XUbfd8FnUOTa
zOn?R&gM4lLufq6imd~Repc-B=7`aMXi1Y!nY(nOT4ACeGI!pkG#TS!P`sGifsh)fr
z!M0tZ^<a1>LfTJ9r}-F_Bb@<xX!Wf-1P&+A1qtZ`y$3BlW(BD^Rigdo;Pq?d^`Mqu
z0%sm|2EwZXakFp}h}X)^HN!v@R2?rileJ&g_BY!SzyT_<?%3DfLLiLPYvghvU47q`
zFY-r$Jrp=QPB9)yz)5T=eS)AJd7;GqUM>><v$zA{Eb`v6ZtN3_R5?4a=~klBk(vkM
z6X<}`xztaQLxQ}(!hDoka>ByGhq-(8)$M@X>|HAP3Vmc)q6sF)KC`gOf@7ZysZOK|
z!2Xci+?8~bf}0$iEnp+6fnev=%fGK63_FSVG)WD8mV=-r+=Mo^RTK3FL#i^f+H%L|
z4M{;wlfPvRnMz`O>=U4z({UuUz2OYv7}YVOdUVn8fFN|l&52PA#T`C5J0ooEgS-z<
zy0LiE%|ZLbRjfnN`kvf7M>Ma3R<@HGO_kJlqb$&RYEk0C!egJ?l3WcuGl;9PfJ~c-
z-GUSrM4FJP!8T-Cl}18q7ilq+HQ0P8W2FI;61Gxjf_cM}5y~0pj;lyKkSsJxFXgHk
zw~<L-Ne&SC{neH_JL%gr??HoFiTA%GoC4>`tyD))D3y0!ht>sqm}y9;$vBr!XWK99
z9e6TAh%<Un87i$u1qS($0|m-PHTtavfWp3l>Q4=X7<rO_scP~*K(vDqB6fNadQ*sd
zP^;cwYoGnss%=&F%P%)J_x3l}*ABOKcL3qwP{+|5D9k*X3w%|h6|UCl+D?f|O3r{M
z9$~1zvDWrc9bzKH%uAaO7>x`~rmEYRXwZ=hL8s|SD0u)Wv7nhTeu~&0)-L0M3KFEM
zJD-T>ZhxFf+y(G*K(A9ljxXPWhDrAEGD*kAv|yAMWSNlIvSh7)ma!n^-;VHky7K$4
z&W@8Zi>cdCoQ-2UD9@hc;;-@6vUSIf{J~Km<FinTf+$cYxCfkp>7cUX>q%LcW~=7p
zO7}qS1fo<4M}n~x7&=Uf0UOXF1>AQm^@Q>hq|3r=ar?GT)m^O+XnM366~I<!Ab7PL
zpfIpYwizT{Jrc7`H4lX`8eYNN#lMUyD(rbvLI%);!o;g0@N4IVJT7M$Y4`Gi;hR9$
zwqRcSqT`$Ihdpr?N6F)5OK<M9<|wd?;RVVY71qC?7zXJM5xop4#)VZ#X`w0e))&bp
zA^p4#wqOa!S?`oN4ED{6PK!P2Cz}V~024rnYN__{qZnNmGJK~x&u{aQU}kzjWBqB3
zQV_a|tx7<oD$N4bmz$sH)@o9RgD%RF$1%!@YFbbP0P8ZLot*aur)jUzvgqE*oToOj
zaVbr@rIk`Y#o=~N{M>Z|WH3u#0+9me>A|=FPzk(?;1TrpS?g)*abmz+vhk_Pgpe+c
zIl9P(SHulJS$_O@QT*p`NI*=5YZI~h;yo6Eg&Ds)EtYh(OXuQ07sV1#Wwgy7kiY|E
z+MTQq;z*dSQSx%@uu65OViK1wQ*k?tmbSOnH+K#;u{yCb)(eNGx|z`P`-*rDxlq}A
zIEn><@e=LBxP3BN-bDU7QbJ1?SC!XCWc6RKkx&INh})()Y5#?-sSaX$l+a2qL7Yf`
z)Q?mh$5!8=GC3l^w4@&&Kcc>`DgVapX!S{cB}o%(ifbv0G;_2dW<?CKpm2K~3E90M
zDp`Q;EwnDuV)tENV{F%?B)0~!9T$%DpCJ8MSYhgl#XI|-)Y9mUSEnu9XsbP~^don;
zm+pQ5OZPE3QY}qvM{)>uYj|01iu?GdtT)v5jCVW~2{U`RzqWI*1uWvp=FSEnFOPK>
zvVOOwP;_6e{o~}-7G!w5jQ`UKTie@P2b=4=I~xZlFJEmRZtZPvZSKpA7{ccOFc845
zX{~=gDb_*$YOU*F&^qre4d1`}uOEkvIa@6-9vq6pR~Ludf#d#g-5L+b28>=9kfn8*
zjv<2YZ$<qmUHs?qSB<3{Vh4z<+k<!6XkD-pbpztATY=a`1iru~A0IMxw_*9_0bx1x
zt?kU85;7|j-m*Lwg5&DhZ!P*jLIzs`1CoaY`rH!F3en$2D=(z1-pXelhM1MA6WoXV
zHEN+zrz9X+@zKB~%8H)g6Bp$pZm|cnZisj1B6t@sqF$-cP044R{oYnIHd<YOuxQ&v
zS`r_BO~z~`F2U}3FsgT@+^vFINUE$EUiSh`Sxao}I?&mcvo1m9jjqUmm@5&n;J^;^
z%S>$SdZ;9#;Zt#Ym9S;8b<fYU5!-MiQuBkX>QS?px-?#Q-k?i%oiZqw?$tu;tl!FT
zJ~K{gR>N~HXO5&vEeTR`6qvnZ83inUlBl=$c)jdRPJ4L=CpcLf=J#|3D8eakYMNI*
z7hnujuqlwz6){1AhPD~)5g+Ps((?Camvjf#hVhRRh(h$4I?cymxoiTDU|kSG@qhlO
zjuD0+p!eWX?13*86{j;l|3CjTpQK>dh@!bvoE5l3DJ;=hPdqF{85#JCA_Tv?$OTVT
zSApf=*&>zIFRr$_Y8Xn&s`n~=XVIQut4NQ{A4Y>q?VHS~vY(-z^#W0#wD0GtX7WYx
zHRVMrSRV1DSR~R}GrhwDs>>25ChGw%?=LkTvuTuEh;cxz(RLt1tzlv;TOHG71y81b
zKcaR7Bc?t9Wq_q>%LoXJ*aFm+7oS-#26CKg&g!aZ;PP}g+DU)X>zRnp9k?-*dNvw0
z{EAstXYI`9-jLKOx{9S){q@8}@xJO#Et}4Z9sDC0`RMu=6{S>fK;_OdXYG}-*B#)L
zbw662qNvvbb(&>$YRP)()s!kA3okEDR~ncZ6}t8ZNUr-`Ev-X#BwPU`(y8B<6A3e|
z%t;3Ji1dY{%(%`#Zom#rtoslHE!3^43%PZs0A@4YJh^5`hM`Fc6s-%Io3leVx|8UC
zRG}f7Iy8h+Sk9jFC0tAnp<cdL$ya4-fz&w6Ix|8k=mOfy>LW!T{DY%-KS`L#ii`v(
ztillM(Y86S0B7PgX6<%apw6#A9@|f>@Zs*pZd+_VG~omZGGT&9iCPisPB7h9K1iF+
z(oW=sPoMNR`;lQ5SbPMN3UM{y0|P{kz|r&h6d%w^XdP9<_EhqeI*8}sQ8k9hs7<L#
zR{ui1mJ0Vw9LYL{Ls9ZE5Qc_w(vg(*1zP*&y!z>tWR-8~ik&9}sz%Y>A;T9A@YYtj
zBUS8p#VMqM8dByd`JgTc0FGq@)j)>QECz)hga9LQn?Z;X`5IJV39V|8CV`-LKRe%i
zKdiI<iybN+Fm>ImGhWb{f<FWl-yDs^&B>NYJRV<xRE{2x;z-Z8lX>w^eV$a=$#3)U
zr(PwI;kS9qMF7T0S<JX8&wK-`0UH3-UpqTr11!>-Z#3-Lyq<G^v1=MaUL9Pd-NC#4
z!NA`1JRx!gYqmoDkZaQ-%vLHtjcb5|573U#BH3eLv1BCLC748DU6XuV<Dy*E=A3=&
zD7l~EyrBE&$Hb*_F58B!t%eHLt@%_|dXQOJDvIXJM1idq{NpfDb{Dl9SEzhovSfZX
zU!-5mq{0JdF16>4&57caT0^vFLsiB!PL9(!JbB?AVOPq+fF|*GrX7_BswQc6NSK}W
z#DRH`W`8nib~DkRT1!&udM7gOW@1%1v%q@|wn0qd&BWpn@plvV+1(1k6ZN{sf7Ja{
zRtIF@)yUm%31?1Nv`Yx;O;1v~i}jVRul`(gV0lIS^PLRwLw3#L%U56V2e3kg$CoDN
zJ<9dPYZ6;oUy#)i8XK%ezKiv-L}skCwtb`WMj%GCXdZ7kggrNf8g>O>H4!K*c^4-Z
zsG1wA{G05`{@W%>e4=fuqIKh#*CgvCXhQ5EQvC1PQ;!j!b(Th8#jM&4vt`%YFxFzM
zfzqmYXPBJN%4LkU?neiKO{M+uz3Llw)?RLcmI2AX)-L?Kxql#-c1Xb6KqqXh9j=}H
zee+jHIW1be)aK8dJBKn=a7ThmQrTJYwY@D>MGGZC=`h!I{O5nY+T8#3WM}t8Ji~qv
z#QPA4M(eD91U=P31P_cPhqlVb*1^lIg9Csl#X7rrahVsz>O6LFp72U_N8eHeJSw`r
zy?d}J*vL+AP-M_+J&vYH-%uI4!5mxbe?L)!!<>2N4a=w|Lk`~V4W5e~3}h;Mw6?vu
zf7n)wLT&u8wy_B~k7-v~-yQt4`wM_*Uku*WT%)PG+$^{k(U@=p&P;9vySVFi$nHkR
zT$Gm)9<jfiob0{Y-#j_tt}6QNslQ+$pNmFQ%oD{Cu5w;aNw3DB-7{K?6Qm;|GuCMc
zjIoF%88`k#nOnF?Y|j(?5EhgI|G24p#Co_A;A0sp87L|_X;+r#v6`rmK}$Jx5U9Kq
z9jrr#Nl9R}!sWD9@fP@e;61xXPQ_Wb-tf6zUwVpdk`bHgGH=gz1d+2Vj`h%)U-`)r
zLM*hX)(t@j>TFh<nj-00arcE`&T&)hS@vhVE6#M=U5c$lOiGUI%oGW`Eo!8PfYGK|
z3uENWW&w2eX|n0yBkB<q4_0VPSz*_RhdmK~P19OP%WP?#`{JR>f~)QCNH)v<ehp4^
z$1c6lqMWpKk+kb!2c&4GY{QW@nv`(Y*~Vtw=3744<$xBIb&sl$43(a0xDXt5id9Ci
z%WeU<Q`k|Z!yxUb{T(>%NJj<wYJ*o(J_OdIf{xhJ(<>jHvOzUTId67;BdCsz%l_SE
z=gqKnk4$Swh)a=;>SiBW+jT=NzxFjin+{_(D|<wD)(O4bwzScy-6JPW3M4(bD|tI`
zXBStfvtTIbLY*nj<&y{^$FAyZ$oSPQV$7tck4y+^^*>o2#Da9eJ8dM9s+(BS%6QG2
zq9M~88;^9&Z}*5Y9lLF6F`u&+<jj+q#|AN?Y~EQ)9l5+MDWdWwzhr}J7Z~1UvJH?3
zAM$Fhhi8B_O(dKT^4i(u_Dc?j*~AM|JBdi2hI#pbm{-O%=b591tOri2EaWITkJavw
zxv*J$d(oio>GcK71DGv1D6aSO76ajkR^tP;(+A#uSTyysrzM{|&EQ_En^V$g+~*t-
z{kX5^sd@Ej4&0?!D=b^fdYr2wE4-#we*oGa!LyHp-r=lG|1G-WZNy-gu5Gca>PAHF
zdO8`82mJ@Z>t}67`~nyGk2WNJkbFK!J|85XuH=&l@XVr5r`RWyeFo%(>xWxEgLDw0
zNWWF`!56O%4|jLK_;K7<Ld4zmS0E!j6RbwTM54Yx6}o%4`{R$>n<wjQ`}@0xTDCeK
zoS*ly|6ZM^Iha3|wOd7;yeey<^KR|zy@DF^{%|sG_Xp$p5p3Yq`3pqkn?G*IjCyRX
z@Zef7x-#MJtfE<KrcPdLzuLD8<Ghs>2Fn0xkZ{_YjLNb$K2Mpgy6R>V+ES@ImfBLK
z)x@^6Pi>x%zSQ~srbJE%xUQwA))fMo(r$Ncl&5>63~_(`3|x4-z-5$1lxDbnbFfH~
zW?go+$kch0<Jocr%Z}_%w}A)JeTZWX{B@~6x6nEUIj2$D%?CBtkjLcgfYlX&UGTmj
zMge%Ix1@WqEuEs1@7V_>;YDD)g0kPp0LjuVj!T5J#H@iei?Iok-C>qaYM87#zr*ml
z<5?mSJlzH_eLWZZ>)N%u^5-VLEP{cwjk0CPC$Wx#^|B|VET3Fpe;rHeE6?puAD1=;
z2A(8*pRFd3X5VML{sp=BwFIt40a0p>$=96Q2fQNcESE<QoV|J-61($4zK~W8tzZ`K
z5GZbONM&lxn@mGk2~fVRJPJm%bIR_%{!=J;e8H)_Ha?Z)R7pmqH`FZzqw*5<C8MFL
zXAz9ja+XO(D@aAzTZp>)>4k^X?!UeC(Bti+ij*>8GVI<{CE2k3A?2J)4HRVwDxipq
zw@ALO&J^>wAz6q4*hJ1O*;(tlnr18G7O>_j!0+E|!q}v^ZlbZVX!WQWc9?`>H=D`Q
zf73OS_Z!a_mdK)7wuC0tG`i12@*7#&QqiwE=JzK1E$I{!{_2iIq`#eXG?*0G1B}GK
zz2WV;+zAi1w+|BN2MKg#33OyfU4gGyGr?Js-b-d!;wwgowO!1@6K^W9d3J>4!+)Ck
ztJyYoFfc?cu(pburgi~+cNu3cz5wSp(UoK6r^WamIYS~(U}lJn9tb8b?aI9rJYbLM
zfVsfkfkRddCL??i8NBWsz`T*4XE5Hm4dX2#!r%4(o?W>pyi_GOUy|flW)t1EXwJda
z<>{bTl=vE%cH}QOwViZaFRM@Wqji?|#4TpsTE*365ZxnK+lD@wvO=+~MR|+5SP!Pa
zn_KnRN0}9qWq0EwLMm|6Qq#C=EDNX5#!-CxXQbCrtkuk#9k1Xg)a}6A;+K={%^$G6
z_1z5^%F}PrQ(SC_(?L2S{Eild;wFzxIK>cKNyd^A>pjQn+u!=}CsyI#DpW{3rdQ+P
z?yL2mXhzm|U+%3Pp8T@51%vroq6+~A3s!JBKm=O^!BbIf01^^Fgwr#`jf0TRs^WuR
zw)Qqp4u9I;JossM8<35jX;32-^GRuS5JORPwGFMx;Er$PXlxo=^e~dQ1vozh^xSq*
zyMRawQkMjX@pdWfmL|#9PA8<VtlN=VodEMbo|5mg(qEZw)nrPI^{rNypFdKpSXEAS
zv`(MhYN^jom9pddE9<?E`>OiBv-uCuzyW%REWfwE`Lp-}uYLIicB1%#p=;?2?j;r$
zHmrC%*xmw%g?Suiz-I!|WpW@@{Mgw2Wk+NX^Vb#BFp%fv?yG}M@nv&gWW&t{#^<A0
z&h5=L&?8b#F+FcXy~5pnaJUBU7xOrs1t7=9a=zTfDlsDnBxCsygod(Z{m^*#cDG<4
za?Ha4?yJbSW!_hNCg)@r$hWb-_Tz~fOLvr>$A+@KyS8C#IeUY&J6%J1*G@0%Yx}rN
zZHsg_OVrzPgVk_@Ih#{eu$Ygt%SGC%Y(w)5*7lZ%f~WgOgr{2vX6tbCrJG)3>vn?E
z1ILWkZV^dixiUVY1gFm@vQ3%R3bn1W#L`Z-UjFE%C;8>MH7zG{>@9zCnn^1@BRd;g
z>uZO*`v<&izngae(yFkn2h^gH@c=HZcu8A-Esh7w++g3%50P_L=T#Gq)7KtNHzVJ8
zINKl<6em+H(<Yb|472`c>QrR}4YR4}RXJli?<ze=(*o;XFg=S-k(XsK(bdQXiWht7
zB%nZ3sRv?z0K|7F85dZh!-XoxbOZ_i2TB^ew2iDcPW`kKr6w^hSQ=dfCugOKA%mG9
zbtWQSVR7ZXI%7_QG%gL33^KL8xz=hZpokz#fcT@IzRk~}L#@m7{UMaYQ&c41yYnE4
znc@Ky01Tn@w)X5)QLp^`^1x0oZ$G&sy4^@{g(-F)YNuAS{6HXkOCAh=yRd=I7W1{S
zNSo@K$7%t+ELU_wGrtIK;OD%^Pr2oZlT>GsEjAE`0%I#;&rKA-^jzU$zomkv(0~G(
zE6NCeV<>s@;|dkxpd)0Ih2le3)teXfT3ePC&+kwc1mMCfh%7I1q5PIAt$CA43s5?F
zaJ|?w27ljr&ER^Q(kzDFu-k<Xt`7zQfw($ykA~S|Kdx)9a^m%c+^7a-$(Lk>cdK*N
z5!(zp<Vzw%N;=w-l)KIed7}b-ccu`VV(zin_RXe{(fPm}>V8_4R2t8e8!ONhk^7b|
z0MKi^zk!jM+KX(g`(*GO&6zpCIBU<%0kKI(+k9?VapRgvuxsU890{mp16LQ-W$!C^
zCx&nFN_*L2W6d34thBbE2lfrSB{&THSPwMHC5YI2aa&oei3&%!m^>x}Cdlz!vRuJs
z+1gnlvf>dw@LD9{3h=dIKwHmKQO~(8AzZ1_H8x#>!a7T*qSqnK3X_28?VyUq5+$e!
zw%dN5@QYAvP)=o?O+$oO*V?pK>j)b-zKu7yw<>36b^Sy&&Ze{56va7R%@z7dSs900
z#vogCFO+Dw-y8AP0nT$KPxy5;V&(+Td0_+MtTJ=e1cV3NP+@}|{+Vtz2f+_Srv|vs
zlFxb0+L$Hmu}iLV2k-J>7I4zU?~W00dRpLf0EiNT^NJ63_o=|?kSX%rsw?TNKzQ6!
zXR2HB-Y6)9EpRv>*RXqGs`#GMJ0c9oL^1F)ss`mJbK#1<3sh8rf%BPrHunM6-@k#L
zxL1&O8!OrC6e2BYw3IoP`jm58{iJmw#gldJMsAbrII|$xN#uo599^xSM(#ONS8ZO^
z?x#~Rib-dx*yiA7n*iLkK3^nOAK#kc*I&tw3Y2oURj^`zZ#@m|tw*6Zb;Z+*?`^v?
z_#y1mO+9el)PkY3Bv?me?KKcbGw-K8TEC%5=Qx?ieEDSkT;>s~kfQ$l!&+2QN#kUM
zdU?ZkNHAU;EguJ(G@j_zbRul6HJgZs;7uk#wf75%7X^e2Zbyv6B-k=im0*x9fK(P~
zoePofyVi$$3ae3)Y$9Gij?aiMQ3`r21dCLgM8V?vOE7I_GYmdpML+ER@td@C+*JoV
z=hVzEc*oFM<*7oc6N#9ek82PJ44Yq6@m;&w+Z?q2MnAQLx+etF2307;jptPjfl{dG
zdzKDWJ_VI36_H~h4C^=@iox6R9bVr%jHX+R2Sa>p!!elj!I(>A9YN`#=mf|`F(mH_
zFAVVpFwh@GQANeB(qlEjTCbOPatJLrRAEUYy{M-J%q&h4LeFMmZoA1Cw8f%&7z6-7
zkL{^q%41%gc!2Kg9?}dp@Ens$ImH@bG<Aq%htUUJWwe|~ULjXdH=s|}=pg6{EQ_2#
zf1m1CmE(_N?@1|tb{$+$BB3Iegz`r{P6C-pmf*)h$wIC`_C5YIa*t!olZev)tHe1c
z0YQpSWfsaLTx-3aCDxXjsfNX*7_BB_QbK6HQ4EypMu2CG-D7b^%u?D`W0>qaKm59%
z+SseTYE2os%^Qk%5gE@Q!6RAr=1ga4y$zgeD&B3QP{02v(kl6CO<6p{jar(9KQ(nN
z%D7qiu3+pde`_#d=@L4heH@FIm$+EcrJVT$pmCS@=N#6w3O1i$mnag6u?%7|REPrV
zn<}+u03iy#Ine_ILR4G()M|^FG2Ngs{w@tQCXJTcrAuQ=AYFln5lu#1nU%~)iGhHT
z^x(ad=gHA=s}Pru^kDI`Ore@!&o1g%3Am$4DJaU-cF!Epwa8dsT-oMB-iWPaTZ|X+
zibZqNVn-~7U8yDB5Ns9~Ag-{I05e&oB$G5&5+_Fl$xv2MM7HW-fimytkK#r-KOFo5
zJ{hZC$HmIK0^4O2NIO##$j3Uv<=w1NqlA$6GgyrUZb~-pu<!{u@F{aGcJ1P0vF-RQ
zSaZe%)L&7ZjpRQ9bLs3`s}j+wXyiE)5r@~}Sm{NSAX!y%T#7Xba@081q)Dw~%;c<l
zC=G6j_NWO#Ld%f@Fki{$WA*XP2SLlHYC&dDvhdmqd&C?c6U}j&Y{OWcZ1X>jS-ajP
z?ZC8{Y%r|08JtNN58C#8&AC^m?{6%fw9Qal39v~CuRgd@tKCVG@DPM!G*>ukM?|*n
z<20xYqA^bRBQ=yzf7gwhT-jCmslWrQV{l>Wks6}s^`>)?_qyU{Itpw~H8ID|3!Bx=
z*`@_25qQ$6ND0@acQ!6RUrJZ$6bE8`<_ZHt2oiUp>6EqI?1q9l+jQ-V;6mX&)fgPJ
z+}*K;N_uML;>Gh~T}mO0nNUOx&(t1iPp>}nCK+`B0yvQ3lb)5Z4#Q_S?EM((02mqR
ztq3fz*@wJ8EThfJB!TWFb~o%=z4zACJ|U}IsZ+!yRqPb2mdW+)-G??n_WFlhzXRwl
zQw;ga<?Hq(#^B7YE8FT*@WSRu+Pd6L5zbLe&QG5>j*sk_;lk>J0Sd$NQMaEJ1<1HA
zKswhKlL5{=Ad@;x^IkP%b$cGk)`;<m@(@ll4{$1tUx3l`4)Yl2E=rgSd$n%HTKH6z
z^B68A3yX(5ZX>Xpkx^=Ju@O4~`U>Mm(YnA;!!4r;^2v;X2<b{g^neu%_hm{kkJxML
z1Pr9O#aBHP<5f{~@Vb7y+z7A$PTialU~d=sHn)0Fnk-IQ(EMp7R=;h0;diW5M-!{(
zmL0t2+}JIU)!o}Xx}#=_#U0pMHg_4kq!d1$a||l6cr(IiMcUGzr|f<yUVm14BTbDu
z&K@BPbya2X<+2$Py)ScR{cPy;K~e3^kjP>*q@>8y`@HlW$7kcZ+U@0-v0azpJZUrW
zKO52$K0K<}NU@q4E_s#S(>9Qk1k`XettCyJ@TjPbC~-=aG%nC8c`yP>hy2=B^|p}7
znhE4eyP**J#fjIk8{%CB`b`d<0oW_B(ex+8*ha{@QuDk}bKqksD##H))1m^$RKmcU
z#3Q7F7M-G`&hHG8%WQlx=q7z}7`rlTsq6yAE1i!k67AOO;W33QoYgn*y9&&bXK5<G
zd$y)A$S`w4q1@UqUk4Y%pHOc<;;}XSbXQF>L(CnCpcaZtU(wu$q*r*@bx9Yw^O4L1
zZ-NDd%MfBNm1kt5V&f&}*|bA6BThr~ql&%p13aE`%c}*RPg|}9vd<%hZTO?KSs{AK
zVOWG|YTM4(HRXlVY?bi(Ql?!Bg4?Oi-#@&ac|B3pvUjspEelOS&QpVWz|K={s?Box
zgj2L2J>aaGnYVR_vBo1TYxX6=;TT>_1gsrn^>OAnO3kE~!BwprF+eZLcaRo9d|Bui
ze5!@IE_sw6o1-`F(025>&_4~?(eOo|32a?-GD?B#%qhD!=(^I5G4ML8GcowOL9dq%
zi|hfu?%y81PVR&U___!9x(E2W2l%=N___!9x(E2W+rZb!3w3t*I=A2_gs*dP+6ctj
zCL3hI*iLG-Y0zq_tb=i;D^S2_N_bp`MTU{m=OI#h2#M?`LfwMo5Z=~L1Y~v*#xWDA
z8-N(30vFwXba*@NyKG^1dwXpUg4mmF!&0_(el%$yhvelptb$z!HBQWJVWY<VvbAvt
zkV)_I?pQ%4{j@1@w=Oad6)u8hg<w!H1b~im`&AZ5O7)Y_ojyl=Ce2CDh|eU;O~q#_
zjPfW3moyEiXg1U%snuB<jnb<b<Qem9;eXRB|J(fW(Zwh`6QBM9r%2gc<z13<A2%rg
zS4nY7!Am1r%Y38343VfJ@R7K&Oh$%qGF(DfE@N7nBAAhOPNL_ml=WhmIn=zP{wFrV
zn3Yu>w-$N_IFYk~c=|$>L4HK1B5UOAKF5c}4tS4`YUJO<Bae04cw;Vy%nPi^Q9qd%
zm%oQw!%1=B&enC<U`9eLIko`u>vMB{_V7y`%=QU)!S_36WrJSR5HM)1-&K@AYG@rW
z3x7P7JhfqSd5x+VX#ss}89tYi8r@Z7w#rsI;^y=%&fsFN#}($72X3k<4(O1DIe24{
z>A*QQs0^pf;sJl7QI)8MNcUf?_@6-P9`cIwcALx}F;%AgQ|*%vLWCjnXoB^MItd-1
zxN6lnUx`XXYAdQil!7`!l}DAOcEzO;wG?~RC?Q{RHWiIRFAzQwGv79BODt*_We%*@
zhB7`-Sy~Wulas(H(WmU1v{wrL>FwPRX)o!zMo5Sl3c?PbZv3w+aI}H?`)v$412e1X
zSWHP-Hq}i8z{_f0h%akeT~jMvpJUko8>2C0db<`UuWudA-dmo_-u#9Qg!JYPnF5(-
zM;HLJRgABC*^%zkF~J~s)Q8==bVNd~x$H8V(%%iyVL=LHsJ!g`Fzt6SR$dtXj;OzF
zUnh3Ag34n$cTiT2IkcVpR_A>_nPq-q3QJ}<JpJsvB+1Ftxv$k$9DD?S%=k*McdI`V
zbrQ{~-7z!Drz;)i<FuFmGwa$<Ox-C!v0&&BXs;&|>DH+~X6$*<8HwX~AZi3L2mJ+n
zeW)eI*5BN!GK{GhM1c$1RI2?kyH(%R1!WnI%-kHq<7W7NKIjB>;rPf9V>A=+Qh<ed
zbk{sg$wdL8nm_WQn2FHNwurDDU%=Z)OzS#Ap6rW@q~5TL*lWuT$}4Wwa#B9^CJ3i9
zYGegbMsmF^`JN<7@K*wHNbRD|vo54_^GkUTY1Xq~ci5|XHghtn#RmuR-mWeWi<TGi
zeZNqj{qgNaE2fBy$hlTIgnF0A0hC=t(R)?h8}Sgv<xl9lynH2MS>?O!$=zMk{B9(v
zao}>SbXEUL-(K#s*;xzrgm%{{`pSrjHk~gkpEBfd2?(f`3eAQO>IhOpFre-P{HZ`Z
znJ~$6|Kvg@1h8BmWT2v@w>@c$i@AHp0<~{ycN(lKoUufLkp2R?5N+8X;&gQ37V1yj
zKIuB1Cr(bp&Q)JX&l2tWp4wHc-&(Rb9pn&Fl<>p4baB4(f)frdjkJkunaC5@c8h@0
z=+T_e?g<*>2P$ZhwUTQ>#c!>$9_UcJ?8b40e!7P6EgPJJFtch{gsBP%s%Mof_e0_?
zshF@Y0Ofk`iQ{5|IKvzmlCLUhxE?Hdz%AYY=tU*YMlb@m5UN>RJp)wPOpfGFU%#)9
zhAoT>Kz;^0;DUaJdub%%w)nt-so5Q7GLZAM*GrU74GS)q$RZr<S+iEn<Pr5G#$(CU
zYHm-Zi{ny{`0CxnvBKpx6gY<}{XBNwjQd495L+NBh`TROt_3N`Ur??hAvZ6q=nkB`
zOg#YUA9d;ik*xe|Ia+=2B+lqwWqa?)>sWkQ0-eQ2c=pSf;&O_D{$iG5hI{p0&*aXf
zwALl=T>eDfz?rL(0~QsyO8}WbX1@n4*@a3DShDpho>7inB+cRH<!>Sf_26%!4F{rV
zg8&-K+>??)zjuYAknhs()fHYOb&B!Xxk&rxgw^_Lf4hMQ$hqJ!yAr=un&W_ZuPi#p
zF_Aly5nRfL3|Ej2&6;&sN*$++UU<PsT^K!`-C@ryRouv8f$A}idqpFD9Z>&`vmd(-
z*kwR-<z5E?r#&q39AeS|d98sNyPP0-2^fEyDf%a6Ovz{}QIgNb%O*Aj<z6<Lw%nhW
zO<BjdmyPL6#LK2T8VmvW^TEsJkMOb?4nPZqUN-mXdt;ipog>bM+$>WaarUsmYJNE?
z?|t~^P~D=u{DBzqI2UC#Q5IeueS7fvdGPsp@cDW0`FZg9dGPu97xVd1jNZ&XKVHF4
z=<~CAu)empsbJYfmM7n$l>hHC_|~SukS8jDCwQ~yq{A$!i+>xi@@gs$_SV+z%AP){
zP+2hqS)WzQ;o1wUj=xo?LeMn30s@?WwP*L_uNA793<V(p;gDAsM2WC!d$wGmHss^H
z`UnOegLR#}cy)NVyL0l(Ph0ChK_9Wwm*BM@8Rmry=avXQehi0GT(Xl((6ObIuy}z&
zWeS+m&~0x1xcLv94H$=%-R)=Ro9~BpZ?3*d=0C!g3k+N(@lDeRyKUXp@#=PNUnr3Y
zdTZU(t&7UZIkZd4zz&tlih1TGC&Qb&l5K1qti9Mq|F3RdV8o(YGvZ{nvA?_bYOhUH
zYBIFG?o014NWeX0r2&ksOoC{HGUesw&MUhVjDAtvzLQ0}Jmj*<n@m<sd%Mym;oxxX
zaBIB{4=K`rFA`H$?u=IEX{OqoKbCF%u)F{AWc{bDZI~}jbKzWFT0OSYu)8vCXYJ<~
zYx^hSAIQ;9-=3zUMe&bJ{(0+QODqLqLmzl`B<4@Rv2TMxaZ4>(1OII6KiQDi#$$0C
z184IR!w}H84|icD$AjS_1%hv?ubVp?G9l}$z3^gJ5Sf?gi79BtB`ZQ{R7xhBf@+D0
zu-L^gg-TJPDI`}M)|eH6?^FVlpg_QdRF80Qc2<BidYMX}_41+3%ASHLT{^mgJ&x9q
zq$Zbbjk2>${MpIcS`J4EU>MR%p;Y&(pI$oKE9Azi`cbPBoZLt0wyM~pM$PV^<Lqkn
z(sOt9dm71N`Yd%IpQqoX5q!+%H>t`^^P8OF5;;_2jFM=;mAobKxLbK&iocbd+Y7k9
zgJeW!?`C5`-{_-fX&MNsx>CtsOU=-o`fG7RH$}Uu`aG$NtEy41w&&1eF{UwPMsds*
zfRL{(J0Do83I+kDO$_x03tH5jIOVePio;<@*_zY@FtpitjIp8hEEX4h-07y7xKT-z
z{erZ4F*enz9>=6weV)~#8ur!(Z3?k}#%Zs2rNn~27s$%$^Pcw;+VOJ%r%8207}B~T
zeUe;(6&Y43C6L{0C~g-)RIlu8GI23c5^gQAZ4E|NL_nlBo<KlJIm;BwA+>T%OYDEE
z6<QNeC_%I}C-q>zmKwD<Xsf<FB4I3CKv~-)NtdNDX?Hp<Zt&`Ned{cQ(K0hLT~lLf
z3*mBPRER6BqEJfvGj%w^W&z>aDp{e;&^u<7#!RARY*EDsKuiEo*S@xyme=6ao1wXE
zqPSlOWcivn;MaDD0UZ<*ql>~-BfiXM_!^(5z?@jKTqrS3vgtf4?0TlFd2;cv%!;Ka
z&z^k!c&=n4>7n6dGG@&6e^W#!U}){U1HyaWy{W}Xqw`aDSE^}U#!bsh8*|IsyTN0n
zZ_#Ff6$%G|h42lc=SlWn%+H(&JbF1CU(s_LLd(iPs}Q<ctPCv3>7aWh)*-*V%(}TC
z#@gm@#Z-d&{(hFh%l$O#U@TU#drwD$H)3NT!G(BR**V#WL!{N+gE?<C-@SX+0=n|1
zxP%yUKtE1<gY%_yB-(rntGWF6+0ycpCG74A)_Za)*8gIB*<<9lHt6FV5C@N11*Ljd
zKUlaBwX~hypa9DwZU11NO^v9Ntg)zQ!DKabK%zQYSk(07)|83NLaRR*3}aC)6jyR4
zYAxa(JItv#;!fz8)f2}MHurP9T=fkb&#Z4>|K{FtukMKTeYw;69WrWmfpWg-PtOD0
z9bb9>eAJ(P15WWdyyFe{=uf%>FQO6nenOz(Pq_mxtPpzEDqP$)8qz1-fg~KRwgvCr
z|HpTtIy<Xt32mdg!;h2&c!)5JkqJ2u+8J71aiNX|S9L%9b5LjzL^qiXyD4|Dqc3&O
z2dkn?V)kJaor?_YcV5Yc1J>>(?oFQb!*vpHWh2v(TjKGdQ8!Q;9C}*FVoEQ@gCXci
zQ{vm$3Z8@!c;bP4@5;N20<Bn<6iz%6YeJOOx+CbS;J_7Y<OUvHmH^EiJd>@lOXrbA
ztQ_P2TT)zUr{dx2IA=cOzhk&!P&AYwez1VgP-EO_te19zbE6Ynb64t_WoPCryA`FH
zS-1|ZmY7zeMM?yGq7!(2LOLcEg^f2Gyy{Uy#eLDDZ65CKIZHB?H_%!uM+i~c$mY&Q
z)Zc7|ary1WTjfz2XKo4<Efre|1gX5mOitS%)>OJ1T^9}SbNdeBabwu!<hlZR^h~`@
zmHw{Qu)yV_M{E~WK<@dXua)pM&;&_U^5HsUaKuC^DsSA*2s5<Kn3HQg?5HDaD}r}{
zouR4R>v=co;XK-nOt9r2u9;_yoc%5$lIf!p1!$9l(GwJyirBWXQ$w`T68CuIk%@xX
zA`W@6zy@zyA|*p+jgj5upqroNf(>c2<xsjrU0Cg*rj>~liChpV1yOB2H;|JBo3m*e
zaVEQOvk?G@xD^_qpuFvzs+CYLF4R=QeIvjYyZK#~T%>QaB$XDGN_RQu;UsusM43}L
zd!g!|5f^JwT6%t4>2TP)Isljjwo=xVp*?M28@d$8s(+=-|I%;`f9kMvC60!cdm($7
zRPp!I+SdCI-}ZTV{DqW=Y{yu-Md!7l9k)Q#DqXn9FbqZ=H765<nevX&o&hEZ&5h8V
z!L9{fZkEMeRq+WuU5ZbGrdw2k(yh$eQ=KgOk#^%6XYZvmn8_7!{F)|5@+C>SN}D3F
zlb~1HT|Bf;^E7l;^)1Yy<WN{V?$s*?%BzEqd4G~cHI7Pw`H~(vvJ&+~;Vl^XPc^Kf
z(#At)z?~X&fzJEG$@nAmN;IA><>Ux03owVrM)ec2>YNbrl+lo(G|pyXx6+t#W@i;4
z`dYOT0pP46z+itXE6GUGhPp3XS2jgkM%pz|5s-m=_aG@IL-6x*bdS{)Q?B;0M8|Y?
zRzb<cRgwB2PthaQkpHN$6|+xKCDb*0nM<<YM40Nz3(F~I7@TG*yacxzxDnvQoDaL!
zm;vxbmx=O!Q~{6#PYh!5gPFMK`r}2Z#aM)x%8Nbl7$i8Y_xboL%q+?XgMTMe;gT4r
zJcr8*&>19;Z$apm6rpRI^kgwv>vu6vnn=eZ*Z%u^nXHXqMfWd7i>#Hh7DTeP+OJX_
z6~W#V$v}_>uw_sC30W>!`FKvKb}~$qEq#@SWChA8-Exd4$=sAGV1vzci9Gji3ho1;
zFB!vZIW8A2R|i=Fw)X+9%`@Fcr5d}2e2qNH9yO><J9)%6hdowosR}<>E)Jh24A+lA
zUpe^6tp`ht2B)zz9Q0oo6=TuALkzsL8=U>(Z74QqgXs{fF94FM3_Qz4)HaXqJnsnS
zP2V;(w6loVsi|eunI#*$Qf1-5R=%hVjitNJZ1Ee8r6yDvwL~fFi;Sa872sdHXZ)<O
zhTLWG&Z^i8RHuW0Du~!CBiF$!i;F=_^KcU`(V#}YOW4R4lgCb*8{%B>R=@fx*s7|J
zbz05NvR?$6J;L;3W04aD!%;`{Um6T2QZ>jPZdCmt+H9BN?WlSCH^JL+y|7}4J5w02
zYBj=*IZIXCwG2c_3Ho@cb}S#TW>7G6SHMDL*K+x#9F=nF0PaB5o7%lbqS938xADSa
z-PT<Wb?Nf~yot_hDd3Gc-1i1}Q`#{Gcw==Y0(f&d=mK8J1KQ2McTDM*unispN<V<h
zJb=qQfXh69%RGR~Jb=sG0$c`}s+o~xc&UF`SQ!@`;56;L0RgT}fZoWO?QbY=us?t!
zhNe!Xj{l~KT3veeOW%Lxm~R?%-2P>&&R1$$e~gE_{$p`de%M`qb+83Fa2R<g&;I7Y
z*8he+j<O>EXBJ0S**bW+b#S1-RY1ObnHNPMzkYq|5)xFUqzu|Tz*}0EK^@*?IIWD+
z5|*0M)}03dU*89G_!o#<f`@dmo2R|O`678x0!dX+E|?XZ=w5EF9lYA#+}A}YF94BT
zW@#}QsUk1d*8dKspgN=4%rYI!T6LPBv}%j~um(G?c9wRt0FF#K63f=w_AW#zZ`q?!
zxGK9FYuhI;b~k=C8PF|qdc1JVtRY-5r(QXkRj!(w_lK>2Y;FLNIur{8?VjcDv#zLk
z*i7VaLOc<F=EWj@5kCvTti8E{Y-$P)#nS(3S7c@RJh3?B%WXCw4lFbcg=01>jVYKN
zw8u<pRF#2y)2Uk>iAW%xg9`=1>IGNNix*<=D$~kn4EFrIKNw{%WHakPFJkpoi0H15
zx(ZgaTn+pKSLK$-AKY*tXv3&y?71D3IcZzrmqQjTRoq!4tyc=jOnnj$-{4GF3>{m=
zO%W)kADTL_wD#+mN1B=9#TxZaWPf^LSmIF>!=9?%%-z~`)jd%(1Dq;=AJKu@;hx8K
zk&WYtY4`U@G2TE@5GqM5CCz6bc^^3#H+hO{n7V>oalHOq;yETy&51cC*;^KV$Xhxh
zb5<WbCZ?H$&4>LEuMiH-s>E<lrF~ZCfLj*ig<HLAc6(Ar3GI{M7?`uk;43CJk*X+S
zGtDL#3n=}5*oN+U2G3?^X39gV&ge9F9fH5PJq4R?TsWOpM0|?<PTtzfxb*tv5fe)T
zwmFp93GSq-xG}-LEp@Rpn&4WDGbSHi@ztncC>Zu!_6b*<#_0SWk*P9?_Y%``mZ+Ac
zM9iiPPg*CiStZl@mbZ63dq`)`t%-VU+Gv#eXIFA!KN8HQc&9cK$AR5m!sCF94bWWz
zMzPvU&Q6c`x*L*gp>KVeyjC0eHN-$no)C#ElGkiYzfRJASAF9z>DQ*NjR9Kbq3y6$
zZ{AN{TOBN31EOwvWy)=hlXrQqr_7GS%}5NL@kKfYj%L#9LjE+@CNJ~^n&EWbX+Y63
z5CQ$l@sldPVM1yC6DE)=cyG@Zwlw;F@x#EWix=%FUU`58_ID4qz~ut}BoR~ZFVv~U
z*Rbx#`JIXZMDO5&eH8O2H++nr*6NG@pad3F;rL~9d-Ej_q8-PM5v|qwHAyQ-#9bsC
zyDv3-n$F6M{=r)?>vz||@;`FdT$coLHa?0;?X)-Oys1TyrHC@PP5~sZt<3;OMI&>u
zsO%@Hy0$|msanDqc$ZSSC^~@_*EL#nZV!>hEKj-Y^iYCjrgIO|Bi>&}A7}wgxj<M?
z<~|GJZGURAzPLa;*$=j*V&JLXkH6J-Ztz$S9>DcLTy#IR?ivKE_^z>Wnh3BSP+Gu%
zSLK}|rP7bhrx960f0I9RKNUAAkBHAqnrC%{m-MIlF4)4r`jv8qY(p|q&v&X%-k<q^
zH)Wg+3KA#jsGFqc;MN8%CMb5!NTHSV1_Nc6Y-AC#bSdWzE38^Z>Tb&sFqA2F*RVmM
zJaT(I<Cl>ml8D)LCvFp=Enkkn!ykM6&UM~_{!)BBT}TNQVK#YE+C?Ysa6~NS=+7!h
zb7pZHh>I?KanILM_B&OyWAH|}9HD%`dfPf9o^puzTijhe_DuIz@0+Qs$NNmrG;4K8
zUpm9<^c%(n2i~Vq`eL=Nr;3`NGDG^M$|lEpzxwm?tvfGMn5MoUwYBQ(k7Sr!{-+AB
zMVymcCVGX<Dq{4UNyDNUP_ufFU*EP)Mj4D2Uo7~ftw%G3#NPU*{WfsZ+8&=%LB*)o
zFU%v-tUFH%B08$aXXw1@G&wUiIVgR)UPm80!EUm(0?Tx$Hn3Cw8hYuZ{rr;Nn3bP7
z$@7GNN!m%RHUm`;O`10$dUKJnqvB_3-TZAWI+3l8Wn^GFsZ0SJUvN405P%u45D@i%
zxz;60yu9pnr>EB8z&R-^749-e#WM9KqZJN{D}oA%zgE)ChQ!n!3W&K#C8J_E7ZzmM
zM;4!2t?H_?aiRb@_VA)iPT<0@%1yhtr|%&D1*dmJ)qOMV9jEXsyu%)vR~Pjn*lAT&
zJ%C~r#cNPKKD_PwBrrk#tVG`^dK$tnlXx$u^I?W|%|hv?Egpib$WHH*#MUC{Jf$9B
z;s4t5?xq#@=!Ex1Y@x5CP%Jl6{L5SCKK6$PvNY2cp*f9gl#>cOB}hEn6)Ocx3@wbm
zC>9{>9U3`7@PrF^%J!tho3NjXBpqc57ytrZKXKj3z!HojD_Q6&2HinYKTF3AFm1`e
zD}}TPf>Sw7PkUF%DFC35%ZsRUFc~N0<bxhjs+v0-mxq&U1mO-ut}P*FEK*(|i_g^o
zA(7rs8G31bAH`e&2qN(h<qPYIUBv@<D0}TU;<812R1C#6A+l{}X9h9Q(J*|K%n#qs
zhoz74t~|PNU-ofoDt0E!jq_K5!;ia9hH!YR;QZ8TD|40muQI#c<2E`Ry38@(VVi4|
zbr>!S3gQLrdjSxGqTO}eG5aEy7al91q=MR75I{~$DgGwE!S51!^|tbUKchLHqJGl$
zhX*XB9+&=v$Ic&V{>$TUWwHZje2$J|XE4s%pw>WTNMNyuMJbT334${bZ+9}KAB@B@
zLQ9}fEwrFn0;IgV$OVmCsLPrgt&X_SYO-b-!Lh+A7c{zqmqyn#upFu%hK+`_>wpY~
zf|i-V;h5cS!@*i3)7x9r&aHVx^)M%Nu&Cz*Y9=a|6Jj%~_RtzGZX-e*G?OfZK84Rs
zT%kRx)iPT37k0%dX{O(lUZ@*X+raX1#10PV?c{Cpo(1b`0$50q{m>hv<GR<KhB%D0
z*&~FHi>|C0r{&aBekmSHdEcIKw%#|K@|RevH{;aUlnK{m-T9`{m8P3zZL&^<DvQju
zERZbTaH@gs`g=OGF*&I&+n({w>4L45Zc#7${cY2d+c~6Ubov!|oJtvA^g<8c8m@59
z#`oIK3g8_h)ac&n?2V}$AuR>yQ)o5W>N^&08|C>+xfj)e=lWOMVt?d`P&3S_k1ZOM
zZOj60ir}&FYi7<FY%$}^UIqwJfV{YJ5(P3qrAy=8l~TB-tb(smj0j$b=Q~7#++9<F
z5?GTN6vLP9pJ~Kx${q@!j32nHC9@@R*-QJRk1yUQ-PSwtyu7fj3$VmS{<f+lSQm(h
zfPDwD@MPH5F}h9`0>a~>P16yMzV!}sF0xKSGUL&CKcpZj(hsR7<6S95>?RkO8^CqD
zkeQzjy}QK1jMda=mH~Z>_pJPEL4JSmB)R2?-=zI}fcv)KzGGOtmZVFG?Lk2mh{+Ij
zh$^*2u(2<2S^lL#(p&^H9MQiCeA%r~y|irM@iG@KpuLnvK9~t;*M`0fW9*I<ym>W*
z-D}e&P1P0@T8Bdh1$k09VuC>Vw9hHmaEYMZaf+%%;H*R@)@s`9lz-pfT(c-gnRAXc
zm<2r#rdP(Pid^+9kPYo*#}w$*ed@%8whOUgN7*?bWsjsO)`&Q&5!8mVWio-M7m~;h
zJw&6ssZsqToUIvxLW>SxX`~jByANH!YVEgqk%PN>BcQH%yj;Q3s!@7TYs5L4Z60In
zvjT?;kG~WdP7=*~gN2KCiDAO2ZbSg##)Cm`oDUx$;r<9nI2}*^eu3glGq*#HJEXlb
z6*rCo4^@MaQ+e+LPHs=d;FLc^B{C*bSxuCMS4ZC-AnG0<>K-8K9w6!-AnG0<>h6Mn
zH5^l&crUPA5qE5{RHT3@^iRCBDes-~Lw7%xB?(V78RcN`jnerV*bbeKK=cTVM<*X=
z@bASaJA;1#eIE8S{O%3<=Rm)STY>JvuVREB-uLqUn>H5H7<Oy>TjG6wc(}jy;??2i
z$)5PRxeu6oOaF~l=10H1TRi@9VJUZT<bJsj%|c`&jgAGbHN@_u%2K^ZQm{k<8=-!Z
z_OCGBQ7;#ND=(PSOr*E4eC^9xTZ|RuyU^Qij(yK@%)PXK4*!k@fEgC)^)Zpa6sn=E
zXHU~OA7k0tDC^Z!RtWl%9Lc{<t)C<FyEEw7e{?hRS2ura{>U!P?+dH^#bfLD6YKX=
z>-RJ3_t)0%Z_Mx9`gwT{gOux<_Qq_0D38XWqm7apY|pB|9@5bIIkE;<SU)etLRx<g
z)4uiB<kbGdst#hh_s`AW6YD2d=R%9ECBqb8p8Dj)KFT_S^S(H~5Q+<8*bG2UAQ;=T
zNe`NZV5)+WzuMm}r~ufx73o>lk`=0Y4=x7cNi-RQ{o7jqe9{ve`P(FL>{CkA|Khp-
zw)Ld-Y-uPCVS1jy8*7v;iK$n_1!ZeXlTq))P#eO_v{1(+q}<vMn<t{X?3~q~x5fXl
zGtWO>rs9Sed^{TuKZ^79QQQ|<qy6#dzrScNJ^#z`mm=d4{P?)gXo!9@nSe8Sm+823
zA!ZKdgM{5MPc4$QsKoqI3`sCEc{dv%f<Zdz<^y~v6*!5q?muV(4MZpk(%hMYQNi5d
zD1KWKzfLcQAJ6l%kG~JIbMc?^kHh}?$8mmk_VHbII&6Hzfnv@}$Z<J*_Hl524vCkI
zk2rRj_*8sPF>NrM6yh#DO^fWCXU(H@@t@0!fBS0b_^VYSi#Agv$(?c40aDoXK7+%7
zE$M_@Ql$ky(M=rHTI0dCC^%YAi>z)-07Dh(crB{72EMKrA9J~!x>zb?*Z24f!t<=_
z&ixFmVhcA>-QCj|b1<0GUBgB+Qki+YSYpXhcE0%@9?ikgdz=+?VLv<1-g`PNodS`w
z#%aF;?BG7uuBCNwogttBOj-(U<DSpn3ldor(12i<bMRb~wrQ#}t+}~ipieaHgC=;C
zPlpZ0#gz*pXN^ihgwDXqaO57J1Jf@}&b+I0_S5*XSD*BOM8MA`*v-*=Hg%pK`t~cw
zWR5tZ%7#rowvPB}(-m9tAnRj{_f}d_ozv=!FU0N+F89DtW+Zid(s*)X_a%K+(pr?>
z<7>9Nq5OAOP3aa{+l&U62dKPbvsHueX-k0IQnPA%r&y!FdqmH#l|O2T;dF~M$DUD!
z;G48|0M#bo!^||l@S&b#uvz}#%6i6P%ob=+nxsfsubdvyqOw7o&{46n4P0eTY(!=Y
zD#O;0XFV^LRx+=`cg_d#3sRdncrz=SGE6E{|LbvB^hK_WeCO#UJQ6d148%_GH0IzO
z(ZtCFU3bcfmG=OHbXN)SC~}<y`{-yUvYzKQ%C43Qy4Y~6VzphS1S`g!I6@^7+kb4+
zPzJFP%wjg2u&kV%1y2OpL;rO6a{IHwLYMl4nbFYQa?|n9E25pRZ?7F3ob2sy{;>5A
zYHQJL>&3zPw#ssXAr~d_rOUNGU;poqzx`G;pckw<FirUF;H!B-QqPH$;>flR*0#5I
zf7#qHZ@mM25UV=?UpwmL;Y(Lv4(5p)LOv%aIdSql2y^k69)it6Tbpah@9??;pmh5B
zQJ#a3>If^ubm^t+7Vl=g^a_giCzq$$=p#wbR3W%Rd@yxM<gG?!231USw1d5{vbg;j
zoShZf*lIbFPeyvqMu9Op&7MhjroBM(2wbKzo`T3C9bNfVsvK&){K4ymq^|dRUXS&{
zx3z-FerpNBCrB(b_A(vng<pGhxGVCf;x!|yIYbO`gN2R3=EWCj6i8s>yN8FnFR_z=
zrY*m2Z~g!o!BwLcfZ7jjHY2FD_Stvc{B44AkJWj3q~;TlbeKQCuZc6lGKz^Fyqo|2
zyCw0>PnG2skv6JaGOxQ&FEC0q1-RsUo$uXcd#@s6>F!hOqrElF+^WsE?Cm+LXlQ$#
z_41*=smMT%f}DCA$_j{J?IkoOa<`8w)3O)yCzu^DxU+!mEx>pQHvbAXf_NYQX+s`t
z?Hp|GA8u}lEaK6Vjl?Y)3jq*B{;wW50rTL5P$n@eu^<KF3n2YdbONvp8O3sLZ?65k
zsd5T3@s`hFc_4yYK>i=@?rtA$0fEpLYtv3R+1lB`U<EC9;$$WaRtkxDSXoPlGIq1x
z9lJkcJr@+7-OMC(+&Y?ag=C0XIYVnZuhzC9*g@K#q`l7+uwN_9XM^mQ#p0m-4D6Gh
z{J{B2Rd+W7gW;^-vCueW(xR4sX}f^dV03PwZF)K<rAUvPc81J4Yg)hYTdh!rCWW$d
zP^$RfEjtm`p`}L6@`PVnN`?|I(nXHh>{DcFt~{pHaekSB{LezWljyHDeRRDrQw#}h
z?e%M(K2(MUh>t>8mV>c4f?1b!t~^M>OaT|j?t<`GTqt9>4Ki_j3kI)Q5_v#wu4=Id
zvc6Q!>%B=|JU`d)O898HZguigX?>RIfm0z_Ct5jqganyTTKOaAQ%O645Db}bMCevn
zF`9t~qN1$S|DIi`ZPKyq4D1(?<@E(VGw;a^GK6<RmYK3zAH0J~J1`u&N;u(eKSHfE
z&8FTEd;c7)E@*Q%T#vkIU2Ll6!#3+O(K)oOjs%W*RF>`xUT4jVU-I$Anq8pY2u=xL
z0D}CMjJ*RL4Zt#}lE@FlOU7WtEcgq+smO=QP`D8W8wHe)5SWnNylrDV6=Ow#ahh>!
zbI;p>Xk(P+L!#JqM!!q2ojKHY=y<q@>I|{YE9C=hyTv*^(d}Yfm*J9XR8b8$<d%->
z7C<)@6gL3V0$)8SuIu<6=i@h<JI+sI*PNg1UUck!G4Am4z5_)I<nUn^<i*|1Ky`W*
z9S6TR!#Aau6vyVa@5HJhYbr*m@zxyN?j&AbjikVYnHOe)Bm=Z3HgtgyCfGQb6G)3}
zEsv}<Du<l$x2iU559~IgVbWJr3|m761#cyHyrEDu%-R1U?GE1U3kFYlF9@End!WDa
z>Ui0_*y<l%WE+D^9GrYj7j>&nwbPR4c1vxxS6br5n2k0fa3{^g=>emk<yQV61Ak<C
zSsBL)ojh<)hN$z3n{TUYd49aw+VB?`1erFfoM72F7$aJlU{x;oTnTt18A_gJ-P5aB
z=>mDtF^`R5Z7%6Tr6okJyDAd3fJ?RnB#+FU7QVm?(#ykc%}VAb(9gr!NM}Me$D%{d
zj!?VFE#)}=rCJ<kGwMc2SJwsYiNcIx{3ajGgsIH~-cm9p=RH6l9gInw-mbm^LzkX^
zrz3l39k-d!60{m#Xay*!2T=+s=Mk9*VN<dn4_DD#BZAb@Gt%V+V7cv{T5>(J22Cr2
zxV7`MT)dasj>Dpo{pm&7#SisHlVt-*pIbCZPP2>jZ4NR<d#`ztLRRXUSBx?kzh*hq
zw((CxsZCi;(t%2$+5~z_BFa1~HdXC*x0M8ww=oxKZ_r;yt(WD4s6N$wuU3gf4Gx$C
zu`BX^+S9Xxw*e-Zv*z_(#*`wIFxnHkf_3rrT(-JWwfBVY%X%*%e?z_Jk*#LxMF@ep
zjE2&E4{!A?qL1Q2O;Yh1opdf1Gs!1*v$uICOWtLPs38$Ai&1Jju4R|Q@l}FSNtB}Z
zlmr0`rNAx(Lx6&v)n(SrfqU$LMq515R_tofuC1SCUD4uc)=7cU5k&iRG<cKsWn7mo
zJ^yG1lYIBUu0RQX-o1O*0;$lO;u4hTApJS*4bGR+k!bgARxCYPe*A1{`N<M?`2=e|
zIh~xgK&sD4Tusm*n2KVYj>a`~I*5=pmzKG}D00MgbPlcQ$*L*W-i20w5JS%-lJ3U{
z=!7BzSg4{?ZdSd|&+_*M4zM0~j>c<MoO`AYIC0+wD|7xqiai|c;B_7)KPll+cYHKR
zw`by<n?GB-uMQ)lx1X*j?D1I%H4;x&b->8m#yNoIe7Ah+MI0LP#&HcILI*dZfhA$6
z9AmEp#`#GwV9iu!I2HmgvX5j;ytx}3GJV9Ju+9C5?>X40_*4SvsJ7~H#3w9`S^V&&
zc0+ZDmO;eP7ZX8S&jS~K(kcf}w^{c9?D&(&iF^{C$_<WzZqHE3i{A_;_UiXACBmq$
zA<WlnF9u1BX^aFuymgpEdGVG(=2pIYW!y8kQ0*(Y^a7?UTT}zu9C2Nu^TA*=wg-8$
zJFfJG0}0mDE6x$;FzL~elB}Yt?>HPPIa~r2hBK8wwd1iDCEzAB{<ai8ANpL|Jy3Oz
zrgs7{YNl(r94bHYLb*-cAa1iu0gKK>2F}nb9$WxC*r>~VoLnZjvb*L=v>XFlW$kUQ
zn=vSr!U%Bw+uUxc{N=72j!EGS)9x6HErRx+$p8XfW7XNca@yevE$ga<pC3P}-bsd1
z+3hrrmXB8gSV^K#Scs}6K}?it$%hy(F#X0?@+Fy|s=<>}0*S{A7aEOb5?<yh^c&+s
zh=oYdlrI#h)gM0Zs51-hC~S58*wYIdY^AXlV_6sjb(vt|?TKYn-^iWcMIceV!fOb^
z>_Jh$fK4rQjG*ieUQYfa<k5oaL__j8b%YXGh{cgs2`#+Q>Pi@-Yl$%CK8LC+0zFvW
z>IVMZ2s0NY%G9#4y6MW&Dxl)S6=!}2@^h2PMl1(}P{lv=BN8z+=nJdnk_bX<j=bzq
zYBJ`EYjbLxvrGAyVDOyDk3o2`s01{N<hkbtn1qk)Zcx?w5?z^8Ce6hxMv@y7-(t3?
zTaHPr5O|d2doEa@lKNE))j3d=e7Fudaob&2S>vwTn4xvnXOJ;rWH?z{5d^BUGc;B7
zK-P<TFpHjZL5@CL2SRaR%`5h^JF<c0Q1tBh^AKA@JM}skEmn)q-GH%5gzmF6vSmy5
zzA9PDfX@<Ro`WO@S-!krkAJs`Mlj5CIBRS!Y}_(XyOkCXOxBvM(_pg|)N8nm7PC-3
zGU}G`;1%$H<SBC;1#8#VN-kKtWyVw?Vj}VF_#7ylog_cEieWDw*K3K<v8n<APZpWv
zT@y+-4#$(M7hSobj9+L+OOl`bS2sS6nu$rrTS789Qvxb+Df6=yvp-_@Y#8`Z4Fwo@
z^^hVPOkd`Om2UOXlFLj0dwvN*9UZ1IlLgecST1RnyAo=97Y!P2-Z)y`PHlYm)#1vt
zwUkqFM~f!yW<ram8xv!{tJX+TI%SJ^f#fS#y!2gzmoiv7XI4YeKivRV*M0<Ek8AUQ
z5M7HA{|dCyxq{I66-aAjTN`A#wA89ZdNeY6VzbJli>Q2z9-6{Fk0xD$Y+mA~>{>}-
znH>=tb*qmec(5fl2cb?hlWGmuYSru-G=@ZNYQ)~L!y{Pd(U{?J5UuJKn8r|2{lbU%
z3}%=yBh33U!Mu?HX1UdB*y8d?2IIrMi@YwmVgSR>1c8ERdtyHBFV3WWs<q0tkor*#
zUA%~DpD1r&R7|es6j+(|GG!)?x=Po|v0__+Eu&~7`aYo@Qz*g1K318?L~i;hoQ}g2
z8K$3x6~6~=FzxZa=^H}t&%hYNTqxd(+}GUPlMhtjlT!ikK&wIqn0|mYU)^;3eh(%x
zls7+@zy*aS(dCXl{kim%@v*K=JC-=a@UaZ69Xq7Kwbh-{e*fyxkoQA6q@Wzo*`%_D
z;~>PHeHYnEbpA+=JFFN-pMb2wa{uwD4+C~^S#*Nic91g>yMq^P1fISshdVVvM|KU8
zVM_S`Jm`E2T6y01k^1wv?DbKBeK(|6#a`eI-7fZm7Y0EdTeA8_cl4TbO07(68sHLY
zvkdmT0?q<Y4am^qy|Too@m?wME0d>=2ND*hQK1>8u822e#O3@$Sz{<MgVxZ2QSN`R
zdgf5#p(Tgs2w$=iVZNgT3yAdXWYxGW)sGAG-IGr_qeq|L!Y&DL?`TE@^uch2%H~mP
z4_XsM3Go`q#_MpWnNU{Ygj>Z4MAHr7YmyQ_cSH|#gE?d-G(6ZPH?CoGw?LZ7h|1PB
zM;fQ6s%j{Nh&y$O@7R#wRz6~gLp@X-+K~ZlisVNLLBmWlpdnjjsq_9m$outLtuf_Y
zTVip_rl`y^mDKkeOs|0UgZO<*VvYfjw9eR4NMr%O9A2z7ln~m?Mj>Vn6|<iY8sMAW
z7@2j1!(e8Up1j2}sGL!$jczT1GSIPIQ^uQ)Tv{7-^1ULKo(n+UFY1BR8bN!Do7gTf
z--}?kf)+TOza#BEdx^!W3d~1oEGXrae1m9EpD_GW6}}=A#0gTDq|4(+nA0V3-4tUr
zfXY5b)1yKu<ba2`P*z;1Sz|cKN&J_N;^bBheAR6ALWybpmD^{=4m%Q)Nad)hnXP6l
zGOb$W;yYv2s#vupgnfLYWjsVchSGpsa(mu?NUr+~vE#<riCqAtQFio9+*_QTvTm_R
zJEkj<SUZAK0fEXxtern1)=q25ggUybz&fnXnZxPq(RP>`PDk#mXb2sZe#g;sOtc^M
zOH`u{Ls?}q53kZbrw@T|9s=Jy1ipC)eDe_a=Fc7Y#?rj>FEX)7i|qj*_7oEmPBp<d
zDI4K$)f<&&Xn|Q_B0_aj$Yhe;@k`q>Nf6u03{LhF67ZayU=~&VX9cV*na7!dmECgp
z39Rh4b!WiJ9zw0J8d98z)(Cy@09|cpTx0KLLsCkWg~5=Gz}?D$-U#mY;;B>1;)NIk
z!QEaw^{Y_1!0gz8#GTXjaXw)5)EPR&d-{Vj?l?{~Z|rX2O1BQTp=^uKh{6ut-8mF{
z)=o!wf(OjnKM1q-Gel|CZ?RI8))Vv8B9S4#7iA^QMCVf>2~-U-hwr?oN`U)R?@GS%
zH2>64VY0n&AsW(C)*OQL1i+V(I10sGcv(7bcRGHz^0lzkA`dQ?pTy;Iie?jbz%PVB
zN3MCu?SsErLN^3rzFej`x{V~i7i525%uVsvgw2Z1C&on+sCdvbbIw60<zQMq(pbz_
zGRWXFyMr;q{qg|lu4f;WynPzRrBhqUyGq-c{7k1iq6Ibqo360ZD{crb`(HDMmK$n(
z-s<+`dpq3IO;qk-wWT7w|FUXJ%Lt0WfBqrLOLaj$C@*iJywrS1CFP|B75<>je9&h8
z0oqKtUrC#3Sm)0|sTsQ-N|l;=LheneS=KG4)HGd*C^adVO)<QBP;34%YRw7Q(B7p^
zQ&l*#Lh}H(!ol!rs!9{=exv$KOuS=dCe$f0ouC4=J1(mOGVp5P%Y*jvL3{b2y?oGK
zK4>rh1+<r+gVIkkS2L^q{F2iZfB5&>-j=Ec-`I=kFt5$18gwH`Dh&0<GJqnzi+Mat
zT0M!da9tJzRfh(ZzDQ1;Jp8Gu)eGbq*B-5{A8!4;b_hBUbPE($Pe=>2zQ4P@4Qe2q
z=|GO{-L;JqHK!tDZ;*0DkXiyc<>k=;H}-e;Hg<p6IoUeggpi(Haay|Kh%M&hOhxw8
zd0uYryt4C%Ax~6rKNuY-+sNgyTrr2;JJ|bGWJlk<MX{k))rgPX8e6hT`n<FD^U3zs
z!Qsh|`@63&6k$Jo+e}&jb-H*y8cc>P<Idj?WS+%d-hX4I!GLv|HCn7(Cz@(QGXgo(
zY`Bx9t0<k)!`&Z$BqgQJMgTl)1_>tYCCPo%EbjjB!@(v-+Qd{@^WH8YgSJ7pPktw#
zX$VB?T`*e^L|rf*1~D4NM@FeCjlg$8J9*R1)EcMfbok(6ezCjpE4<I%<$ba2f)xl>
zHB&Udlfs-dyLgM}l~x^SErdQJkko{vdZlvaj8MTw<&yk(INdiWb4SNcFe<Drlp<ZM
zsku-vDq4)6G87D00UM<ffiD(95J_-(q{OAjNIX1);O;w_cuH_sq-#FLQFb=UiVN2%
zO&6{hYEf_DYQYv|tG0YcccdcdI^3z600p=CYVdnY?(gS}h_#4#iCxdWD&n=`VIDe7
z%UvcV;dq|#(gz0HbhI7H?brPx#Sn75AyH+pYYIpbjv}qX;b2$?;K=3MZ)Rt&It|hH
zx})bZb+rny>=M;d!wP!Xx13TK23ywDx=e=_PaOc)GR>|8zFC*Og1T0pY=G-X1T9{N
z1CX!IczA4X*|^q*J@efDzgXXgnaAJI`4<qLMzDD6y<9Z8FY2!Q5hrv}vD>@j3)F<_
zPZzjsu5w45)5G13-K2h&jvH-->0Z3a#+?iCS1(7eSg`~o<4V+JzC`;fgwA%fpvHD&
z@8#oqqct831r;{iz3Hr0)REeybvAvy4m<^c#|e-~_-qv`1|u6dByA?AfkNrg@^P}5
zoLYts*CC(@w@npDK%T(Xa3bg&WD*qxVk4;YXytnxcog0s@}wVD@<ekSu`rU}eROtK
z_k%~eY)I_d+bqcukAP_N5q_c}Y=NMWnjA%=LRP-1tq6>jtQx9ApOip>XgkllMf#Am
zD~5B2Vx}(Y-&ui%v|Gr#H818`-gT7BZrnd7%wJMcc~g{*#=*7vFP`{+0d_9$-UM@l
zLu|}~ZlNz)cY*C2IArw@;88R`5@J?{>3R06glcXFa}=t@DV^2ZIM82pkyq$)iyaDa
zue?mh7vhe7&!cXzY|Uug4wfyB<VzC}9)X>9gGr|!t-RmQMzVqMJV&lxd7Fm2E}3Z7
zWzAS~DXq1kg6!N^oOM(<(OwnPc{QtuST;&^`B;fu{S~it(Txu1Rcer?SV15&Y^7aD
zP3sjB!09oQ^ZlynbC?CxBaxK<i2bFEq!yFM$Dx3q{7yhPm;iHTWd%nMndL^v{k%az
z$jw;4<JTMT9y++K_06&OD!JO6JO~BHc*jU*&BJ7yW^a}ELg^mnT!gY*KVr6(c4BdH
z#k*&UHQw9UO0Z?kkNIqU?{rFLU`X^PP3-K)p1Bh$dZW`%W!zhjcfNd^IQ_30qD<Go
z$cVf9xXrG+0o3zou51IqV!#U~&kFOTR&o*vGTuaEMf*V(f+v>5S95J&CG#X#rGBiE
zjhGS1{5F4#!X8%OLJ);e&iNG|GZ}3$L7s{%OVyXB9IUj26hmt?I4Q#_LkO!(YQzi!
zsfa?7_QXsL$L!XTy9Og+lHl2fvBWl}=kx%Z!Ln1#qjU<&x(QBMS|qexsy7g>sYoc6
zN)f0M%(HVrJ5C4UKi^Gy-zRCmn|#+#-+nJh`smGMn542eM0tT&Vh}blA54k_LWzrO
z7h-Ov{i{TjN#HSBhzXo?`Ybz8cO;5RJl|+RrS*usF(y-NOq+_I5N;|dhFK?1dr1f6
zH}5X8exl|4Fs8g;K(s+E-@k*t%kJq2Xa2yd?5OLx@+Y5)MMrW-r8jD_0}mbm-9xE{
zqVrn*U?uY7Sz6mpBR7>G`BH$s6Wve=4<N81+F%3vorxJ8pQ+Guzgp$=@-C~o6gJ8T
zSU*qTsHmy5QI0$qOW(p+T2JG@G}e=AQmaRG{}4eSGfUQnd6GjwLLfw`QZ3$(d2OAZ
zrj`bXY1%`9D9kfZOvx-Vc*BoKO}G-n^BOh(Z$5G6pRxXKIhXxMrma9T%7wbgOsuiY
z6DNB#Bq-m+S|l{EZC&@TYFzEuILGIp)VkU_8~0{kUEVcjVQqIOVq-l{PamwS|J|*t
z57W~JyXptK>Ib{(%68SCg9WJA2s7J$+GReW)#slHg9FhuY~xEGX5(homor#aN&~{J
zgS8jifCf_Q<^@KGmnpXZOeryItZa4}G25iiC$F|e%J)exPrgrh2Ani)4JpN!XbHJG
zFLvI%xY+o|VGhQk?pNrKHX*HGW$9#;-CX}^YkLEG+G0zh`}}!YR3a}hn=Pd%;@b$7
z8c9wwZ4)(CGirnV%%Cg~KYY3gr%?uFTI&mvz#WKjtyMmLnu(tc3>tpf+}?Z%=YD5*
zV-q<YUU4v5n3O|Vz#gU9)j_WkZOFIGLZE#q*R{XFF)_9wUOzl}x+5C3EOPM0TFvH*
zH^SD#>W`<d8fTXlrLuD3f*6C^SKFvkif7o}298~iNs}bOE;=8Luty8U;cB`}-(+i}
zQF>KhU_B-!gWXX(3YJxc`gx>&a0O{#IpLyHH{b%r7?siqxCzT-!uDi)wy3yj;=F{b
zh6|&lYSsC0EKQZlv^3_cmTv2j#pU9eD-qXS=1uC)t-O$eti2JM;bvU|6Vi<Zb5uB5
z*i0xg=oF*G!Zk<aSTU};Qk#d_+si?^0eKkLPO5L7OqtlA=>8GBQq%F<Vheo|+C)6c
ztJ+BY_)aQs!`V!{_Q<|bV`4c^O7@JC-HCJK>5_v62g+p9x)GXs=Hog*vo@unR_@-O
zFm56^&77`W0dD(DP)Km`Gwt<G)6Sd9#^lIF$^BhOj3tVd4n_p}uP}v=B@6nF0tHjv
zRsU*|5BAzDpRdw$^hKuI;M>Xi@7#uYVM4xu8g*4q4-8J$fy@H^4qp2*tjbLezU`F&
z)~&iT>ngWiLh69Ee&G{h`s|F&vkB6P8<UZW*rHg1Lod;04&+?eCt6KU7z_(huUdnC
zR>uYo_t$pFLjPoQXTv&~t?Y6F6vs5b39;?H&fNM42WFa`pqUmzH*e;jU#R7i<JmBv
zoJu}r)?u$B+eejH6fJ5mVLyzB{bR~KR<#?+o+noAv7<heUF85|fRifDJf40KPw<vy
z5gyYy9p&jF-OBJ}CUIM%B=X{de&3X;_U)jhL9n#4zJ|k3yIlpTT_o7uC_C$k*H4hQ
zR+X13-jUvfx@1a;(bt2Zb8gJm;HzpO@V!xL>jN^8hNmT$d&z#h#GftN3@E;1H$&0m
z?UoKvPyjRFEBJUFWqLlx?#NN6`)yUTOtQ{M$rj4q57U0PWD8-KLyz(#ni|!sVb;OR
z{Zm;>EXbF=G(}hmno?jzQA3IfF|X27xB4Vh>x1b73v!j7-oMd<7rH1t{Tyu))T`36
zO5if+X2NX=h`vO<Rw+*Qke<HsA*@YOL+4kj{plDqr4SkC_;XSBhell<8w$4C{l$ff
zbce@;!Y;(r`h!&5)(?vPe|N<`Y=Z~Y{)1}&LACz?nf3sg_5hjo0GW0hgBiF@XE&K)
zrS2?75;uvF4}z_Oms<x1$|eOA3YU3NgpFkW5EGhmQyAZDh5A{8eg+I#%$Kd5ALU1Q
zQBQ+;)3L-w8Np{lumM>Y0LMUMUP3qPrB?<RF3>`#c0-#@#pau=^Xuj1=}2jMX{A|=
zTv`Yam7=xFXKIZ?4D5{dC{QSl>s1N9Yc|ZSaekQ%CZ5}`a*`T@G%xFCqsrJ$IE4E(
zfr%>Ejn+2gWG=nc^(OaqrqiUxQmqv*bf~P}I*GO9d3;IY;6c7j?<SvsGVQXZ=5}R^
zCw$T*5#YBz<$>=(F<TgRu58ReG#gWk`J-j?RBgp?sqk~Hfw*&-HPwG26(1~=y+Lu|
z-sR&9K>!Yk4pdQrqvScZHUZ@fZpR8nDpQU%-y6`0Sl5lqIvOBEr_H5+MW*VCi0%#O
zl2bMMv9UdeH{=}{O`w;n>J{s7HA3#23(mGyGm)zbwonKNWlMsIJ1{s>cVi?{f)e#d
zz%hB#K<;NZ#A&JwS)}4wY0<<DF^p_JfXxbL5PaJ4bn4aZDh6mfxOxHoIeac{n~|q<
zA8}P-)T!J#f9hQOBY74w1e)#Ee>VLt<1|j++|SC0qImBF3}0qFw-0w`MJ+M1x1UT;
zoH<s`5mm8T=ReBrp584bF89F>e%^{_XSu2=pJ5*VFrWLo3}^KT-THCT?q7ZWDFbAM
zsZ6<EmuBJqG`rC*aow)$1`2ZR|1Ev_NP)rroc8iAT^W15$$8#S7L&J+TaW+NdMti@
zv-J4uB~ateiHTM^R?;cH)dgFF(fQIGQ~%aGjRdv7|M~y^KcXZ5JI&6{vQai#G0Iy|
z+ro4|Qd3b+8z1J?AM>lLOyT*(7e>GNTxmDwsVDQt&9u>;C#q=*lG^o)FSz>kIsbDt
z)mm6pTcgoV>ohx!>$=^$RFo3@RkxmswQ7ElGmy1)p3}yM{7k;bNJr6-OYwG)ck8EL
zd~qrsBd3$|FTRlIg}@LFpqKJT>s>nP1LYHS^v@GzvIpjz{n|KDO*Z8cL!Lh6ZHbPr
zAS1Mz5^0BS94#L==VhtENRUg#VLtD)>4rz-&iVd8RXyLd|7bKjt3Z|0mae3J+LSdn
zn(>yJ9Z?ia$i|{?h2S2F$?0W2{^AR2RZNzYE?e!kDbIY<o={N<etj_+j|ctL(^h9P
z0;@l=`fsKZKt`MY&36D{syE*dO?6uI#{t%``e?b)goQ|!AFZycf;9fK!RXQ+cCheu
zqp3Sjow9mw_u0H5>x~b{8#FUL^K3lWj-Dk-Axx^#$B!LQvs_a9ViQ28x}x9n-{t+G
zcwNFiU#*dFy|(oIyc!E!mh(;CP76LZpu6?7&XedXgs8^o%ZCFPInD78qWMOn`6$}Q
zFTQwWCE?a?eEe9?R$~Ro2&mI!O*Bs%&8|4%iXpaENt}$Vac!oKH3i4XH9%_eWqa-|
z<Krf{>9lEX>y77~7K~a{x-aNJR$vJ>?PBGdj~+MLqF5W#I+J3nj|(rF6Dfkcirs$Q
z#7~A8(8`}SJI$_Idwo(Gt-PR3H{W=Ex{A9>ZKZlccC9T|`{=lN3LWUI>av*Hu(CIO
z?o~8?D%K#gn0&E&PMfD<ak{HrrEnBEfYU-NQP|zq->cn5^Ypqo611|g2%H$G+R)9j
z=6Um?nKyr5Rp<ZB>bz$0<{z!v2#&NhWgzFQOX_7fXY**vAabvk<y#SS6*#d+tG|m=
z@aT7(gfG5$BmSV@R9czs%Bh7u{f=ATt{l&YSTk84%_mas(?;<whj`9iMMEi-kx;z}
zo0*tNoS^2}szo4MWGJu?DfQpQGzub?iXn>U<$PP;A!kjyNME!f{`hAGrNr$i4n&5p
z*|XMVRut*EXe2wLu^g|SiIq~Hfhg!dbPnB&pJtU6H^!;pc;BpG|LFA1xAhfK&sRTO
zi*Dl9>PR5TrQeFBhM{&T3@<-A6`d0Q(Y+SG#eT|R57QUj`R18E&*!VrDJbfC1lR?W
z4WG|?Ztav*87l`<VL5{de6<=)k$m2gOo5<E^@~;Wry8I2<=o8m2lcUiaos#`P(7D}
zai(j5KkPd2Z>xs$<_G#HYJl?B*VoWl&2|W`Wz-rL*`zxtK7ORXkLKHg1Nv~<OZ#sa
zD?+pUC<QUaWqp4Bt5kfI#QwT@miKyDmlcrQgU+>LA@z&%*%8#<strh<C=3EGrykWX
zR0Nhz;yhEX`38+gPyQ;WEGp<d9xpR1g8n(1KpJrsaC6YXH@C@ZhdzOZvEJb2;4r6S
zr&T%1$Kr|VnwUIys5$Uf#&uWcHf&XE(l0LZv#}U@pkcUTdlC*$OkbO>Ini$C`DwfE
zHvat+!4}#gL$L<fFfa{~j*w45{c!^?!bs7h4zg}^tnH)RfotPb?8{*fgeAcE?Puqk
z@5KuK_S*-sfxZ&|UJFj`eBL4fdIme!aEYAaoa-&C=b-sPty=qoB0z1it_b;nzv!|N
zKkybpcCI~-zvr9sl9nIkU-NY5%8&Sao(fCxR(rmeo(g8LiMRGTXyPZsw%`HmTf8my
z7qzII_{0O?NK6r3hERc<qS#p|nx6~Gm9^*F(#%1AILybr44M*;K4>iOx9ztCy%EIw
zj8KSI(<a;eExW^tY1WC8{)KpE_28-X#TU^e;<a$IxwV@Kb`s2d%7X<0+{25kkZ#3T
zun@;gi~*>K9Nb_s_D6?@9<Fck<>SXkVlTi202Xf4rp4D1TRnv0z@dul)SB|>!<OD;
zS7Px3yvXX&<8PXezimGLYxBu+^Xb>kr{6T6e%pNd*XGl|HJ>dvpMBkY{Onot$&;^-
zSN;a4t@Z9A?_3DpL%bGO?UsH912%DXfwty-I$RyF16v0l-EKo1qs7O9hdPZ6<>N;u
zC8sT>hNuQ~iUYz2P@BIn!}UIQrbDm*Ye1C05jL7cu#D5BT|%_3cL|$NF~kq^qqLh3
zU}jEHr9o|jGvA9VkW$ORTW&=i?uplh2lQ!KI$Rug&;h&Bj@6#(Ks^2Wx+%8&hN4II
z<rN}b_I-2RG{j5a_w$Ef8gZ6qy)NJdtM9G(ro7JQ_ry^y1Y?xH$7Q0tB0alI^PWxy
zo_Ca_^v+K(EfL)wi55lP$tafd)&90fM`1)b10=~DTL-%(nUcClZ-}g9q7=zViBMsF
zo{I_Oxd#2-RYEB+!v8Z#dxrxj55Pnhuy4_3G)d0|c@>#2)Aw}wwf)<(&THrol1o8n
zMNMfx`LKMQbS~0S+5uabmbjiS^M2Ku(s2TRjsvxf(*Ai?xgI%~(`@`M%cxU;mHpwd
zU2W1EptOeS{{P8)*EJ`OWKr}tJVmwKMk-XgHO);zXqu)mJqFC8!5&+ZaY<ED7cHqY
zDmBnXTHkt&{eAoVIL~t4WIf4=h`dy0R+gm3_RRj)_6(rPdqze^MnpzL{-IWBp8n_E
z+nC^+76h<(;n2c3%NSea5Zk?_F=@&dxs4^uaK1}xQ`lC~d=g@aa8?z#hs$MrOzpox
z5G8nuN+YJ`7i8>IF<WX|1}PJ3lS6fl&qh&nOVO6p@-Z=VC{AdSL`7wbFiM3;9@Tpg
zB55GbBa%sJE}^Q<%SxjldKThYq0C67WZi1N3jILMD?q7nJCuifYup|6ftMFUh?3H{
z%9s`a0%kJKA*A6V$y;-7MdgI}3=Ez^=az(OLNHfAS=*MTIKRseEIkiS;*!bX3!Yz;
zN$g`uhe0>HyN*^KpeXzb&CF$Z4BT=klXRU?yRN0mQvCFn-$2Lla)qgBVX@7Ld0bDy
zSYoKw;#|5uc9!kwoKS&X$EEu3A@TZ}*q+PvhaeKP2gJS)+j?hA!I7;uz@vJIf`7gq
zBfthN>qi<?&J{~VmLoXHG=(@mO+$<*<T+iY`kcdI{wZDr=+VTJK&lP#lPS(U2g?K7
z<I4iv@;0rJg#Kc9t|TnOiSh+!uJT1Evht0?LSr8zN%@=tcB!oc3BOP~%T~su$|Qy@
zsASMtp?nYHNxabVfn`$jk@p_NpDD?pUumfUDS(Up0&H@-N?yQ`@#Z^pSCAsP#2~&4
zq{=uCA$Yk8(l})dn;Jts29$1QWzkduc}B|AR3z0mxk8~{`g2#`x2g`xR*oxytu#s)
zhwzc=(<^xNx=~+%3ZqVuWL45zUVCy1>Kqxd0a_2J&8F9aR>@z+2U;}H2#bg<qX{}_
zLOkgD{gz)YyD6+nm?pIu`bc=qtj5R-1l>XdIZTH`NmXe>VRl=Ca$|^x5gjb&?Y(+S
zxgR4<$f(2BW9mY5nT*rtS5|!H!h~g{>wx5Zeas0|irO7<9V7@xDrGeZDk(JwFd8fe
z>;S6<^fYXbt&<w_sgG4L1tnw;FEFHlHWm|trpD%Y*`tvF9#j>w)xh)k+*PPDOCF&d
z3Ovzy8_vw3H|%Jz;&X%oO?x^&tQaNyVZ^l{3F0vW$1;8nQh!_dogSd+q3ha^mkEBv
z(@?+&-g&{>L!I_Hh+VR@d2K3rH!|(gx2xE9lDMSz6h6Ibq?ghclA)N;IW>KW$wN)3
zL<ViWmQ279-+JRc0JA$UndzP?xO0`KqT>Lz$zAKTE1i2MFGJDU=u^^X?XsoiV(FQ(
z0&9<$43lEujdfM#*lDoLF1dF0CCeFUG$>UViNO$~GcXB{YE@bgQQ1iIQV@AZSqySp
zDGMdG4Czs{6iu5#y(6!lt0HreY!2G>mJf_fYanRhHf<W-bmS`3kli*l7Fffgw8+)H
zwa75e-%vR1aK|Rsp1I-kPEBS=!CrnSX<Dqcr{-m04P>fLC(!_RfbXW4?J)maxA;8*
z`@p}6i~$KNm!$$7HB$nCGDn`FjAXRQWmPEMRHntt4ArV4OIVVN1cdFU1>St4Mw7cw
zSgvyU@ajT7OMu12g7|M99OZ81^37V;IxDp@D5@58my4?}Li_`idLfm@C8;MhdJ?KX
zk&L&-eE+Rh-M(}pEi^wy_(T_OJYmbq`0`9bGy}<e=;P%mkkmEaAE`shTzj_-1-Dq>
z!L3_#(W1~)IZO*hg*_n56-jJHogn^LyK<@n$(khgQ2<tgB&A)!>x7R2l@-XS!YVnK
z{4)RtF-zF1cutdO5d0fW;e>&IMIdcn(qLhksBL=k3R97`R1yfjQr8jyv-KBiH~3)|
zpnZjDagk@Y6f%>|Z)4}&Pf#~U=O7Rsm@N#`V^Lqi>nlnEK~1qnJGK8|=U8d46d<h`
zu2y>kopOoRNq{W@FNX4PHy{RRuZ~<5aM#GSS?(?!pYsFk4k!n)Y}A;G+XV-fo?a&`
zR8y-ftD1rzU1ca(9%L0J;)EkJzZooHhAOJOO1E$FM_LMS67uX`#>h9c*@c$M_fZP(
zHPe|smQpV3O-(55fxV%U-m`MWRC296r)=}Ylt%pB+GST)l4KCukt5RhOp;-mH4s{C
zyDr>izlB?NT6*CzTCEB~mZtCAyAMgh<<&a7vu_sIF;BH&5SB3y7+Vl6uR7_^>c9_9
zkpgxKul!eqX2_c>4cp^R$PP_cq<RI^v#<dcj+?#S$iIM9S)TWL1-f4Y!kEB}>t5pk
zEv)z_e4tI!kdB2@7})0@Mx{axNLui?T~Ese<%X>wG;S>kl0`GC{enVL8QNRa#>kg7
zheD#(mVA&et!iSeRNOJ+CuS+Z$qNW$OcEJer4MHyPb@D&+3kb%-mzsdfE}kwwMA#t
zRzI7T;yQ&%%L4TqwevCo&(V?!1YP2C2WSK%%~X_P#M}|V9lKw`_7`TJ-wZt1l7N<Y
zz0n*4ja|2pX#uuosA&gT@dOGe-1G-;;8EaE-T+`%5TYhEoDHuk(<qrD*Fkv2c!zUf
zm{4_q+bNn|hHL1DU@FZ5u&iczn<v)F!#O1m1AIyr_4~2~dHndxqgikSR0#%*mVcZd
zx<JZ<?h86}w;Y(0cw8!+d>)3RS##nc(a?asK1w)>#=XMl1Qq;IP%d~Zi>}X#g>uM2
zS}qj1t3<WnUAW!_K3Td%yGOtX=}`eod?9SV%I!kcasG<_q4zZ|$zJ5<N)=;qA+DTV
zO#cBScdrhc^fFn-Qxp+ja<ScNvqL+OZbu5!WLzi@t9Z|Lv@F$ue~sTETYv1M6Iof1
z4471@ftfGjPa=~Pcv?fQ7(u3Y+S93?B3*82X6N^%FvF~fQ!5<6%QG56XV^s5xy#t-
zr;I{tcUq}BujN0=M7}|-9e_BMuVh>szb~M!rma1$DzHN{=k7pk@8OzJKF*pdLl(@m
z0xEt&k(D9VmK=hypxCo4vS;Iv$$|!X&?Wv@t=McmouF`_i>CTs;So$Go{b;><dc1T
z(;+t^D#x7(0tzpLD2*d67arAk6=JSyz5Pz_OQ{!>-QK!37H71@GoeGKw33hw6(R;$
z(!^5}xLRSioxKYU<Ovmeg)jS!HJaP2ln{t8Q*aB)laGh``cihwkPT^nNj2C|s=<7Z
zuk(Ndaqa3XW7p@Z!=a%EN;B48Do8giVw}FdpIAYFiw|%?K2KPul&l3&k?KnvKC`G0
z87yGd-jL2H+&6{{%$424b|&4><>cB{*>pkD$oi`-tWfz!7m=m3Eoq|bO7&G%#xJRC
zyz+aavNpBKC&KG$z*4BOb~lg?(NfIau3=LyC20C5d6y7d6mNs<V(kLw*4E>n0nVbq
z%qWS};#C$Tg{zBBEJ_INGRjc*%g(uWEd>g+Xrx)%^bNFdiTlh`MX`2J<dti=$*RAd
zVTyojWrGcVSa5wg@UW)3p9TIKgu&nnq?>bLMO!-GO-GrUXyqz9z4Pk%aymg1`DW>y
zykQFEO;UC07lYRjQMpiI7Nxs%#=8Qc3?+~DxtB-AAdl+~IZjZXWo*1kxj_CpoaTwm
zX|;;z*s_?b4jQ^y#{L?Q6r6l#Q>L=50=l+wn*pF=5-yfUBNQzM2y1jxVJ5V0=REb5
zDxhgUDnrlt97M4$WVVZZ)_@HDJUmX4mmx4#kqcZR>dqwn8nw^Ur2%y6e5ewyZx|jA
ztj&$wGUXxnR{8+!EF9<~w+S+gw+SmzveB$8x&wYEh`K3$Gs*7;$97ALVVnGt0QI`0
zp@Qj-jlm7rT)nZbXv`av3I=p1LZ7RldHQgwi@pS@4m-oSS?l1^*^ylw15Imk=^WSy
z*V}Z?oV!9t22-?n6IfQxq$9YsHWCulcxu=+MCf`>HqE(R5X^T#*R>&vEZ<lWh~AG7
z3WB7J8Uifps>~0np}3|6?-{fPnpSPKY_int_4W$i?0<W!SaNTdy=t%4Y&~i}?)<IS
z?e%~C?aONYpM4j5?e+E>C~*jo<nm7(VL8(!ZfjLD>ki9n`T$?FVJ2M>Kc95XhE3^d
zG&exTb<obyK=HfYT=h0-Pi144In_w(wG!&CTEy68pVVz!GGblY6|{MJe7PwtYtHv2
zv<^@(Z?R}|a|f`Yd=SVG6`3m+yCjgVQa}orflO04?4tjx5Z0&$-7XZGf>lbP3<sH}
zXGj4(%vbgC3nigjk{3)&aniJDp!T?!Kt7%T;iM}r4*L8S$(lz^h=wVz`K7>v8WyZu
z09Xv7Nmhw{550oCA@^Yv!%l@O>(EKeU#~skAdpLD3}u>hfXZl~r2Cf2$$N<KR^1a$
z$zLqFwV&3#YWF9O60tLNBf)an)6L@bZKFE4xSp+9azTcX#PjSxr1zBGXQg5@SA0|#
z!h>nXD7AjJ{=JM*{iYef`6X{l^=|mVra9RvX(hK)vh8jrb(S<MP2oiC^XohAgQJsx
zj2|>Rn{5UV-2FH^zBYOQ?_GCJr9WsFmKg$Ff28&jcBR;`ZPVu<7t5Rx3c_uF;F;zZ
zcxKqMyf5)2Xi_i~=`<x&2{r}9z*DqGYoZ{iWVy260|^^Fn`Pi=R4SzAfV%aF>Xyr>
zzbskdeg~Do<Px*>c0_JLN9aOcZL@JSq<?$v&vIH9*}2V|_4C?4!C`FagvxB~No&dM
zj$89@>(MNh+i6~V8~WYe<u1MPR@Qj6%l(AUIDJywb<$s`Yi2GuU)VpGfPOY#@Gtxz
zr<yPHxA;U4nlIu9CUReyFZ^FB#~fq6@PA3Cy}+Blp}&9uD8C_#v}ecCvDw(x1G@^D
zUriaaM1$;MQ@5VW6rv-2XzNd$r(f1OQ%;4`i|o{XGEgqOJ!5Z^5s=MwTa1HRVFMj{
z8%uJsh?bB5ZgC-Xq<Va7tON5Tt4*WXYU+Ppp*Kp6@s~s7YLSkiF~Mq8V{5h|1M3ya
zRlMB5WqR9Jln>H^7bUO!S3;f3l+h@=tX6m?1RWo3=!52fT~rmQLA?DP;5mSKbbRYh
z>Nz*h0R0iWejc|6`r~f}r04~95jQje%()x4An==R!a6Wqqm>~@js<4lS_&vG3jDnn
zxXqwFVk<u6N01%XrO+D_hy_A~Rq45P>sGDOSRFJD?;k$6bMNr}>h8he!Gi}JtV%%_
zgZi-G0BNEZ(jN2wO7P$$*<BA_-hTD1kqN?U!HZZ*5qBVW1M<T->-HlzqT#5)UBh!7
zGK}JawS$BIi?O$Clqj{y!mU3@_dBc#S+Svk7O*L*Q8!=WK{x25qL|<Gu2vzJHxf4E
z5#H!>;Y-?9$P!HGVoXgFih>j&a}8-ijcB2W6>V8whM;lRqYe(MEsf8W!O@RqiLb!W
z5(Y%KMD^969oQ-lbzp@Q^$Ie2@=PS7rFS8{Xh*scba0<G!?c-hK{_=Syn@^^g}zF7
z2aHsr=+1r#3dTRloLn}j_%}k6jAm)g5jM8cMsd{4FIu$M5&d-ajwnEsk<{qB{j9A<
z+WN4~f2VqsE~-oV%zi`oGIe{2*Du#x&+K}rb~>c)_<WTxA%=G$KMwYQlmK{zmFfUV
z5(2SGKxua=*P~<^=7goCAO2?%Rfci|Jycqhx=-FN`{u243aAv+d*b<Of1Hw1tR8La
zn%4DMpr@2Zc$p3CAzskUi-8$f73irwl!^ypTwXFh-*n@)8GayhV!yy0h;2xiA2f3c
z!DeSuesl+!2W3@N1`39dPXh-o`Eb*K6i(0_zI5?qWCJ#?)YMpY1T6wG(+iOeRGtEf
zJ9VN*x)x=HJVkiqkNVoKk{h~=?UULoqRWr#O$ob!G_$5?bFw|o<yzG%dh`X1eo*_h
z>sNk1s{B%~Jgn}K67zPsS8I2EeNT$ZO27QKv_!wuX{KM5{+GIUud!D0L89+8d(~^z
zaBuH(mI2N6kQ?85?9e#-KSeC;tVYYZ+jKj<TCe8fK+ekWH~e$k?fi{~R_g4*-;MgJ
zad4kXRC~dfhIeP}et|zc_uj)^_2BN|s`2okS8d#TU=%!{f{pu-iKV;uU>2)`Ua-2;
ztyh2$SxPs%4JgzLI;%!6fRYE@dZUm3!jH-wUIiQLP`!gSmZ%(3k-PBgE)X|pNfgVr
zrj$K|vMUA^1at4QUiTZ7-sK4XLx5LqySJ?wWjT!N*1MfsvH#`3Tf1(x<I+L|@OgJl
zE79%MI^XnZY4)W?*yU1~dD{=HhS)rIK4rBk`O@EMSHmn8ff1iA{0)2kO~jxDc?S0V
zA{;_uKpyy?qRGS=gbtHR$t><;xJb~Ps(4VXSL?-UZ^r%IgBasC;_G*4FrGxSA^w7@
zlPFA_ct#dgPtoahsJ=Nyfl7L_L3r+egmND-WM>djFwNO=a^?8LMVutgU=e>xFtz{=
zi+o4Jr0Tp&_#8k^{jE1cld#Ya&|5#Ak;6Uq$x1uPJRC-&Xvk+vvfFQz7yV8*2T2W@
zz~+AgQX8@TRuSsd56N#;d2=Fn;}FBX)VLeN3WO)Vq49bTr;6g`GG^i|-g>V~u9UBL
z-t2%qhigEaUZr2EcW4i+8nBTL`mT}Mg|sfBCT>aCkt%)RlKXW?Oa*pjc~$A~Jq;-y
z{DjS2=Hw17h&pN~To-VSsg>30X+#V2tP*hoBx?pt87KWs%X!hV_KB+%K5hqVB?!k~
z*U=;FNR6)Xm(B^;LO5NaPhbfNkcP5g!!r1f(YgtvZ0ug;5msU0J+9Rc4HIkAFe!wF
z6)YtF4ux)piM(i_eg-uhsbN5>l12)}>+x~{sn{%DI?3f6<KI$<8el&QsQAFhugrEl
zl?0-8<}QB3@7=u*Xkfm_iS#-1b^sc1(a!jVwJG|X%WwB<>|DU@f&0T%T!RKM@ecka
zRvH+WN!xPE^wM9RR~PXm#_73DAM^NAsZj^%3U>+$lfaLCaMQTrET;H4Ww+WFsMIN4
z0Q4V+s}-)ox04dZc&ek0XNr=ng`!Q@GNero&Xxil9hE4!BE|uE1)~p9uD)7G3SoL-
zl&hUa?|J;0Rd1_YykI%Wog4Xh6nKdRU5hY9`h>VpZ-QVW7aV3UACR$4FCWN~l!p#&
z3n$X_q5%Z+Fb8^yv8Q&;mRq2WI*q6rFM#gC(D~IwJCnliKXcpZhNjh-r35s~Q@tPy
zgW%RJ(kKV()hZxg0a7q1Q7%!>&;)@hAdQ1d1D{|#nDb7=R;^iLN$1?Xo{vennMAD}
zMIRYU5TGRFfABw-v}lS`kWHEee*h$);2|MsO58$q7#Z;5Fz~{+S@@8|Gm0JMH^<(P
zxg|A6THq3HFp_Zz4QQc1w0%?z)d36eEfAEC{MKk2IE_{EK6Faw?U8;d=8du*Nh4wE
zH&QIvhM2D3rvV(Z_UBYixXcfwD?JufysXJR1>xKV9&=>geGTQ^SExEh3;-L`HYK{W
z$F?5pdXE7i1ars!fLZA+Fm(3;FFde_^nh?Na%f99<tpxvgbc42Au}rI7~duBxKd7G
z#E}+97;@i43?hfR5RNSTyGofDfEia0Bfm6DgEniQ<6uh2Wy_@kHdMg(h)L+jVnXNd
zQYV1yr2=-JSBQqjNs=63*ny#qXlNsKXd~DWY81{iawcWE&754+A+6aP>Hm`==X-@J
zACx>gP|@@+i>Pl(Z(1-ft69~fYWLSikNdYfk5MJ)6ci(_TeCqjZ>?^9)3{e})y9#L
z-K_!!w3>UJZ@<|u_6qOIZ4?jw`@jD8fB)D2^WXpVzxubCj&W^hm6&#`gzDCx;zf`Y
zw9rYoM{+q&oPywadV}7la&J%@i<6xg;H?4DFxVT0I7(1zn@|`)*HC9FLyTsB>JT6A
zG(;_W9*uR=7>TjW86_hLI3(Eg>2Nl%_I&6gWyFltH!}q5zjZdY*nM(R>r(E#{DJ=l
z_&Oj-uQ(5#<$@`UySOhUi(;Y8L}v9NYCbt{wbzgVeZqFV6+Q}DVYz+B9l&3=;YdkB
zIPi%0dX2hUzOSW~8!S~zJD@ZHO0Fp!eA~cl4`8zGVICK3Ml#%E{_Kb7M^^B1q!ltL
z&+<f_K()Z+E}8}Mp|9O82=-7}aRig}DvL<tDjZQW@({(`K3DG%DtMCsd;Uvr-7EFn
zUb)u+A-&i8wYT3}^|>YHEtO<=n7C3?pgPfsTJ<(L>tOc@hH0iB;?WOsdKhb>Q?*kn
zl+VircOQsuL^iFsu6jjSWb*48wRt)&@ZN}p_G1`5c2gALKkB<|QXaMupJ|lKJB@%d
z!KOFtSAQ};_vvx)Xjt%eS6zH6Yx=vw3-(H_$8iaM;O;{2<V7-!7o-E5Tsd<ZbUvaD
z{MiK{8wh^OS1-)*WMq|r1Qv;dd$nIl|MTVHdR1b-4%QCpc-hCDb*gSjp{)4)wv~g(
zVfYFxVBJHul&>INJj2osADy>`u$sVTRzRd_kCdC_p*JjpXgMyogWEDN#`xPtL*I)`
zC3hv43+L|e$#XDn1{81?(IU2iD_<2cBpa}-!K4Ow)g{NvtD*I6)YvjfIP0+X?vuS1
zZkD=7m0$W_?yd3P16X+Y_toplFQ_DROaA~gSV789KeL;NF29jLm3^ws)9nN{%;(AJ
zu`@&#H+S$*{N&6WegQSbh%Uf?wbJ(tRi5bE145ULNUuBfDD;S+@Z|XE$+PdC|NZ+H
zFJHa>k2h!Ue*6gl&<noYU%RwFjw*jgHR(7)_a9%u;JVi!_aD_f!h3+aA2sQL_t5nw
zus^2oXV$KZQ_km`WwqKn&+a#JF^9szqYq+J1+bCAwmi>1bOSogydek@ol<zaec;W?
z?eI~f-U*vw<)Pc0!l&3-llHVcLouRJuS^t$vj`$kX}GE$8cNEZM%c~chn+&b&_s{_
z!rukZP79(sl+mh3f}a8apFHo^+|C6CN@%9(-@pEkGm$=SUa+_i^pTH8$EVM>AH&1h
z`I9#~=K&!1+nQU#fA0P5oBeNpy>+|f0uTJ#mo*)Wl~u3TY!x3pMn{E?(|609zBL-k
zis@95D~ULE)d5FniBam41~ncc9n;`84tPkEfr|&WzT$8k0^lDaIfY~KVXIsYy-H=|
zo|oI@l58(@Z;!ZfPx~AQrZ;@tZq&(e0J}eMX&kJrhSpZOY;Q~0(Xi$MY_0>?*9<D{
z$m44YoCSX{C!mo_#5vfo@sD3U-%7WJv-t;o!7_V)+nJ^<Zui$-(3cB$Xk9pDn(Eqr
z#6GQ7g@*Q@NIlU06RCH!|3vDc_Mb?-tNkZZ?`i*u)ce|hBK3jxpGbYE{a481lz6d&
zfuM3g7F8+{8zLK~CZYBRkZ0T;R_+5T4O<{lG+O7CiaRQ!uQ$V-VddPtJ+4%|@uLHB
z8hgl8Em3;}Nc8BSQ*SmJ75q&MD=dQ~D50`5fV8CJ9hL!ME#s5Jku&-L!}@^3`j8pc
zhs>}9ubdef>=xUw8Z;~$Rv*85{ddkpZbj?)=+DIJKa*so!CR=GVG05j@(<~BX^>f@
zwLk+7Kn5yg?JPd|jrwgL*I&FXQ)lnz(8z|X71ApV>IqWVnwb$ILT}!amJMmyjh3xw
z*@u=*XxV|5?PuA0mW>C*w>5gye%Knp!3}J#6^5fq!y6F{Z<i1$NxBP5W3;pR!UQNH
z<JeN8zI#&#m6WVwbAfnoYOk?@TEBj_9j&F!_U?j5uBi~vYGAOOUIpm&2AP9EfE0jH
zZf#%mo^pH_sQ##N2U&5h3TZsl7e%3jKyDtRi~<BCNDu3w#`*+=-D7mq1^x<{ApBJU
zn&O4!Hg2FjshA13s1X?89E98sJdA`gil(}jh{P5Nyd2nBVZ`H?)YFHWrhWor#D36#
zchzp7IR7z9eD-;OpZ+xb%svnCGoVlk!^!1<B|e}R^Jb_e33(&;SUC`BKQhPgRr?M#
z^<l^>-J_;1XBV^h(~Q?Tpq4;FB3t5vyLSPXZ{fIrO~2c19Nam)+jr$uNrpM-V(Pv7
zO1j%=+-s+VuX%t?K+(grh*9E@m$=hCR2%9v?y998h*G6G+Ew6SR^59K`mS2zP_5Cp
z$EzHa>W#xy<M5%I+xi_b%zJepsd*#4Cx^Pd$U);yW7T+2ujlr;w+Cbbrse)Q7)$qH
z!>cT+a`DUJj|Dp|q#!``K5nJGaJ9lqe`(It9vNCFdg)=@8I=ot5JlkcP66*3f9=wR
ze2FYvzBITZqwXE7OTC^a)EYn*d%bF!=XO?Rg>|MxJ(H3qG$;XeS%E552IhS^3fzIB
z1<Ikm5`wuf#+!*}N7oSYVSZ@*29xjAO3Vc4ULSvQbG#LTjN1dj2e%P&(MYb;fYgIN
zCElk*sCTEHTSGG>ve~WTjc&McYNu~AbJMsLjFpZo8<{&H@Ow4&$KiUvCRsg+^Cd;w
zOhNYAiblBJ=iG~u#`MPOAu#MRy|KrXnPjwue^uYTJqE!ygmV|pi36{W|8rUB@^QF?
z+-H}Q$<Lv`D7h>Up-6v;?;%hkR8EtrWlRm+Ce1awrsrP^+^nK-lX6J47Gu_%4YVYy
z=2)2VbXFQ*j;5D?5FzNE9<2zo1Z9JVryB22=&hTD`E0!UFb_N9)i@dzEKv2WAvdZe
z3aB8I)$Z47nB`P9shIPWlv}qrCq?(yD!lV(%(WDXs@I|Sr&{?~JRUb%`q(@qGuA%#
z;btv<9!q;4bM3@)PPB&AodCl;K>sr6Xnv!+f=G8>-2^9d^cG;X|1h+ofj_&}C51us
z@o{DE!kbv`9dre>H*FUR-VDt~V*EA7zy8_2i!#GRNC*Galt9DwMAJ2p?(ECaizaOU
z;LC$`7ycnVdE?%?;2k~9rXOJXTb9lW{n9MR?87ytAJifJ$q6rnHJ&_&LcB!U)*<E`
zDQ!J@!#)n~kea?PibBqJX#-f|UfRq9sCdjPHtxg6bM@o+XZzfaf8kx>Sf75+Yv72U
z{-Ae7B~DJ1VLtmoDgNwK{SaN(mF^m>8OZ+bM1j@8S~mDpw2pK6?$idWyO_gUzi-Ut
zyBEq3zI&^!N7@}u<M}&2Yb<$s#y@aqrze?Zq~=aV+Yj;MEgxEDj@ZQa9He)Y^gEdT
zlVw8G>5Ct2Q^h(jp0Kve3B2IYzH9XTLPg0J@9YD4`F%FME*IzJTYcTtE^u95rpO5&
z@ASd|9`;F@#~ZQW<<l${PzNd&yn11DfU|!k5U&9rufNZ(7|#CnS$0EG`4`ICzvl3w
zoHsw%mI2#3d%0=B&-mUwFd+5jOqs~p_sT{)6PpFm`Q%K^IZ-~2pW9dY?JK3w+c()l
zxZ{sb#41aWeD}lvCW7F{@2v1c`@Zw;u<zNTXrpFCw~qd`t1Kgou{<spkb#2pL0Cyo
z+{{InN`((SL9E@fPMr_&x~<;&@F);>Vjt*EOe%jrxL%=7!N$>_kxZ9ot5s=QZWox$
ze((N+hw}1@uKa$$JHNN@e*EblKmSswMm)@R=&}oz3+V3R(NuJI0o{$-Q_<apOJ__u
zE|1{EnScB6eoJ{qJI-grPM;jT+HhdP0Xx=>XSOhb<b|Q}e@D(dP9l7B0`HM$;n=6&
zvv^hsU@TLA!r8yA#s<;+<KcBg2kw-WdS0RI&_Riy;{r?l*JbOb7FLbM>1*fXVfvQr
zra9lc&YVm9qWGC#86h)%xNf?5DjA6=R$B_*TQ_$sd3W8kBzJbKeQ2#sdW{`hxRcky
zon2cv$ZO$ncW9MLy+KK!0+ebHrGXy;E8r(r47hG@0C<BVzh<SJ-s>K&!M|t#&1T*Z
z{#7H$be}sS%j)G7zPIaAqg2~;ciq_ccG%c5B+;KMv6+F4HcD!ls7V<K%`(cYWcDam
zFvIFQ$Ypxuq`w9ryUVZkSWmg2*)F+0YX5Nnk+mM0<XuN0<5zy~+wJ~#v+m>Fq6%r?
zC(&>YJzul`UZv`l++v}Z<c<Umer)lQ+3xQ&u&Mu<>@l;rBElM4JYP2&r{<WBJ`OhP
z+E{>r?Azz8jZL=U{%3rvEIWaG2QPLN{}q#Pb=zgTjcaP*N{^{M4tBL`eHNj+GE{M<
zm&ua68N<)RFboI~gDY5Z2g6zH0F7n5wC(@D7$kV3+Zvf*88NVgWoi36VvzB!0h_lt
zAqE_b-Z_~t#K?!#Mj*ulsC+%`d8t=k)$65Rvg#$BUIqSgJMNu^o>1zQ>OB_?vXg!X
zZ<^eDCA|c@Wcl)7C(SM!=T@CAEB5A{^`b?)GcK)qE)1r;s_@I>+!+h|eY_oKv%kN(
zzk1-7OMC_(D9hV`;h!~!ci-nMiNA3gR_%W}esL3^#LuYLVKr90vU_-lKkDv%3Nr!H
zBnXpz;-Oae4h~&hIFhpYzcA%LKG#{eochVd^#riP)xq6^)xqHd_)}jU98kE96<)CS
zs&)2%C~=qMsob(KQMKrf<(0y_)Y#71aR6*Mre{&O#dLTVZL@9{+<p0vpMObjhVOe1
z*4?*nemeT@<<HMvKmEs(SAYNI>_2{d{^I!ilebumnFojMLSCT)+0Ap4$<zeJ&|tR|
z6jn@hbuIT^DYb5?r`Y@GA)L1In%U*gipY)dYxf`h8fr&eHSK3iYv^geVA=sXcC;TV
z_5vM0ebDTI+f=^L8b+u@(o0jkG5z-74&8ii*axppPqrHu%(hyG+c^;25hVsp4T5`O
zn-@wYuCS6zy_UA_u&k?JyR^PC4T!P3;+Jj@)}rdZORhGxY({E)k%t-u0Xp4iTmny8
zCIQg*(0Swg7ca4C*)qN&`=Adcuh~O`dT=+c&9hzBX8!txZf<REKEpg0VI+(c>sBL0
z!6yvb-Fx0$@4k27-SH0L*FEokAK%yYm~H$+GKwFT+ZapkwvW;E7<(~9<IYi=EV9B*
zy&0x9C5pkP-+kE6v-A`Yc)be*64T(^Fbr@1b@rUhsBN2l=D=Q}E=@ec_5m=djRRs#
zNA1vKpriLG4zP3ib%%U*&}r`WNNsmeYt&Wmx}ZHKWAb+JxY21eDnYYOww}QzXrI+y
zpPp?$6yxPdCbYv~i<74{0y>Wnp*!YyHj^kBZ-|MF9{WdODhDA&5=t=G*`}d?I*(xE
z&H)Lo<4JaA$Z@Y?hZ=IIrLCgd+()r5*OtOcH*?-Y)0F+d2?-ks7p?ci=>sF=5sw_k
zm2Uva{5+ohYZz>@TKOYPHVt(<L7-x<Gc(c|)1<5zWe(d4!%35KJBJS_R#^`w3%`3n
zsXG)??V$1i72pSzdlba!pmGTR9-?U%q~B$+o$g`mw7X=%b03N`bDf9X2AWXPg=uOk
zW#i|s1&A$hNdA3{I)V$Yy1j?%RrlZy^6K!*WZxeU`%ZW0WX85(+LssCnfbqI;v8!_
zb(ezHp?uPFJ4`A$T#J8KOjZ#YQf%>9)*;VgE!-8wg=n*)#I#wAT(=Q&*8$tvPGA%J
zXLoSHK5A4LVd$dABZ#L56f6)8+3=SO3z3uKRytjl1mLW6xVhmUpKzQk{Rz58W_?9A
zhkH9%S7|9K^mhk1Ra%lthkvWo>~w}iICL(j&hg1>=i~qP|H4q>>b7AW!?2F8Wo~-(
z<oHCmQocER`{O@;27qN!@v61&+|JAC1y+TB2Ea7NEpDYLd{5tA559MII}olni0fJQ
zA<-7b%dpRQU{JhU|5JyCC2~ns-gW0u<@KA&yPsgWgekC@WJ^D)JpaD(^VY1~CZW*Z
zzdw8X?x&5l(c=^m3egGemVt_ijHl4Ri&w9q76T+S^WEtiDpEf>%DHMXA^YxoN5Cx~
zvON6D`_UqvzNa^<He9iw(J>F;jW+SXmX^reSVU;29^ONf(9*o%c5>3w7Z3RJ_Grx(
zR?VnJa&gD{V?k77tw#}&a+9@3Z;a2C48^0tgAn+|_u{T5z?W1oLb)~1!(j0t3%RU}
zOb$tm#>;P@fwtBgFA7E&n^X(U!s2~WRyf%lq$RnC=I`Uhdu-(WG@3=z%jq9pLu@p&
zfGqJ(T|IO|#;|Ft)y9RSp8x%;7;QGKj$p|a4vtk@JiNrpTjA-(m0d#LCYzzTs-&h)
znzzaxh`=^8s9_Z&?Vq8QH=5bty@!^7-YvORquFqB8H8`c#Ug@%M(o}sn~Lra+ZuTp
zO`@g0xKdgWNs3$!NYNSJx^><G0q&@Kbn^WRIDLQVua3J%KfLX)o_3E<`m1LzR^N4x
z-t||{Pgkeiqo*%k^;h3_&wlQ&UL37nLc+=Es~=vULHSqR<EJOj|Ninv$orxD{QEck
z)$8sN{Qc&1bq0C;)!Xi?fAm-H-mZS^9-TsspWq)T4N_xs%m(rOi+|e)6d>3}aI~@e
zyxx!OU0ZsFng46M^@8@OqxmZ})h`y9=c_!JXkQgJY`aA?pNE0+enXD-hThzv=RN;G
z6fRVH`a`_!-arbL(KNhP)D#|^oMMx&7^6~Zl0{7~aLIPY#+>PQ8rZ2PgKX97Aiz-|
zpo2TjyAKN+$J#hJzZR!vxat@~E%lsE_vm&1<xWO6*gr<ZZX8t3<4Z`N*5*^L-^m~K
z<zjMhogu5?>M>Y-3E54wsQ{UCRay0_tM{w_Ty-&&`cb{oyL@{8*|Xl|vxjy3c=q%d
zKb}6Lk7p;(kWu`$+Y8972>HG4UT^<akwRbH?v=e(yT59>w=n{Ksf6}~4KDXtqQ|4|
zr1~!{gmzKs<gYX5uc`Hiz<m2_dUVk+?Y0=~SIqBUJh|)5tOMJv7u<H?Uqa)*7>ieb
zbIa7xU*FGd7iZNe^*aBOX<>sWb=Jm%XV0Ls+N#&VF_gaf*9<^*sF6vlS0m87Tw3@s
zn(1sOnb|b%?-*RDTR19sg(vXm82&tkKPT|#8T|PU{yc|2e}_LH$`@Y1pO^6G75sS(
zf8M|!=(z9}{=9=fKf<4%;Lktc&(HAZ7m9M;ZKxM*-UBcFzVAIW@*eiR5AE&)_>EU|
zhmd#RHP8k2p{FJGJv5@nYpMbKJ9yN%-x`$5{GqH5_?is`e3?W;d@pl=G2tGx*@JQ8
zw({T{3x~m@%E?!SnY~b;U+|*f(;fERFF`v(&xPQ2JLK(*-CMUFu*d02%&);^Z)L65
z;RIi(fTFF7GH@I6!tesGvFJK%L>FKHG?egIpelSJgTERP2F}OuJQ_~mkPP7D#D^r9
zbse{~Fa3D>%5~^PK*Ej<3b@~+IjLpNuB)^vRY*0dKe=Fx^4*#9%js(e)qBclHV%eG
z!ry%?59{3n;xl?*4tnbfSC=Xy`WYDr7)1rA$u7|b#9ZJV8ujKptRH;-T=@+DIm;Nn
z?((mKj6&?(yzRVR#2BBq={$+!C2*Mj+<6r*kt=OGAMaEf)jLq=DLtgl9;bHR!k`o6
zRc8T4Hc0FFlW?&_ctCfB?-uc=No5jUgay3blZ%;Dp}nI^fXt%lyo@iCuzqkK*tZMc
zc@x7bFP)deQ)nSMhjKhxag(AI^AAY=DI9=Y2+1NO@)#uCOMKySTAPX{YXdQ`${5FT
z6QdnVA=@d9e0&_`%5}cnyb+C@k{0jS0rYf=qHxi<b<0TuAXAkawVHGE@@W<M{wN_f
z4<Al}|Hrc{90U(^T!o?{U~-X#GR9ZuMenVfH`WgA9AykV2r?T4i=SMSoxXwvuN}wJ
zX*~P;86@$RWV~e2iL12Dt3F{5yg1`YJn$!pQkln9#u_)*3Xt}xTd2z3IwS1jamvve
zcNpHhK{CHcYExG?xb~vy6bEr|RrD~8`O_c*(fhxcgwt(0g=jX43zXnbCh@2DL6l6R
zBxyPr=AF_(z5>jDAJ5(|<9QQ+2a}=<3~mk>JVvwifxl3*=$?a(g2r?MHHpw0w7@!p
z-l8!Kr$8~Y3z)Q~jCeFkLa267XMN25A-+WJG}!m=@5##vzwb0CB?u?}6@J%Q31sva
z$~PQo@0b2!jExrG4<`QXg29B4^*u&;QJ~__qA5O9#D`5X1k~fn0ZcInPiIf#PczoY
zjqr1{Gz<K2xqLS-Ds!5h0jQK-Si($8IiAG0+02wcNs5NJ2()fRdS8`|VHr*V-Z<#u
zqaga|pt7n$+y1Iuz+nGAM!hLGR0UHemCs4#(7_+cv~s{`2m8AM!e_x*#FMaHpoGHX
zM+16yo1P$P7uZL^@fVR_VQ+P}*^>aWeH?Z{9|gy%!sA=GJW1<OjkWXm5iIabFN?E;
zUTc{1*s&B?M$1W9c>JZY-cX3MG*Ik76eHm9LC!he8snU&=v=UtuRxBYey9LbYcl|m
zoy9Ev)GpN3lxZ|GQ~b~E0^n=`X!{km^(hLL=S`>nZ3|%mBN2c5&iNvQgB+bx9fsKO
zakw^S0%(sFeO?W*aoxIk^9Hla;~EGc8L8rvP#y^i&~3<&k@Hdiiqt9wCV*n(L1v=`
z|2#^|2$sf)fTv-5hqVHK%WKaxIK`KOQ+7&`Q*jzD{DPEq!E*}ZDIAYV$59`NB2dK}
zH~4W4%^{h@iAXxhPt20T37_ZC0~h#%9qfrC>Gv5lGY95@@=@E$D)Wi+dV-MhPeBXB
zTj`F_TZ+=@IpK6fs$i*|rW_45Lbxl_s`RPUV&AZlId#Fkke0?Tr7(S_W$|$mnFk+A
zN&JF>-|&)x9LiqlTO9^VfGQP6#sv1<5D;xU`|^QmJSdzm>nz-9^)$yDdp&W2St`C)
zPB-xrGwHzATzZVL!>SZ21&)iGOB%jG>471TkMbFX=ac6c?k|w`e+mZ|(eg;-pJB2S
zr{(GU<(W}H&u1$GV9B<3G7FT}porQQW~zC#&u<C<F+??7pXh)ktYxe{=WZPM&t6hy
z-+*)1R>TweSN43Ky>5xYQK4uSElaN0&Jr!yj;sPLUB);8kGjXgO(*4z_`(vo3MV7J
zh=ii7^}%H{30Pay$tIM+jl>(2sB$_)n%EN9zo9m6u06oEZwh)FNXOs3d7(DK9!nCu
z5zk@61-1siWx`Cz0j$aW5XlDR;7`8e=k%yzO2dH%pMqrIIV?wvhZ8r-BkZM>xS=5l
z&!&CDZRemmm11RYhz7d+M;}^Z{qWXE2>oJ|hC=+OD8>Gf$BF0|#3xZlj{63CPTCO@
zOEYfZ6_vw$cA6sXhJ;U*J?O~%^ooqLDZ)vExRS0Q)^=N#+9O<zVmFsH=sS;{s>%fv
zUA;$*L)hAJHZz4<3U1p#r7xl~$4o`{tLBq7otaFwhjeW0?QVUQh@(qa30Hle4zISe
z8Rk^6UsRe$jMc#<nPUBwULtUeNmj51HWHTC7E5nVqX{VxHceT>dp^cJ)=vcBi>70c
z2h}m~L9iK9cG{TOA89f2PAevhVbR+N`Sr#%kPNTB4j|k;MF9#~H4P3VRsn-nvL)Yk
zvH)>vD08{i{Y2O2MYgIHY69jWy8h}N2z+gkJMR@WZrci|>JV|6*lJropmp)v;ub_k
zrn<S~Xt8Wxjt_bEE$e6Nkntg3*(a-ftzJ2cwQGM0F>uO7>iT>+oov`GYyA{J6r9J&
zKQu~!!B`j1LsSfuP&|-U`Z_9d)xd@ljQglc45M6-Mz}Jhggx^-CaB*SG9la$ibPe)
zEr}X8#dN5y!f)j8DXDZ}<s(vF0D*vva!Hfb4DLe+{hrYpW0^F0!ZU>uPZbP2gX?!)
zeIy*2ly$EN02a;8C2LbfeGhIaIxq4Hkq*dhF%E;Mre0FhNNLPfE=CGP1EL~rcu1Ht
zdIR)l78VVbu4FzejpXf7+o_}0(HM@Q?{b~hYHN{Q#;nmb$w?@DBOw^)NwdhA<xF=!
z5_da((_?T0|I9|49))sP+ndjxlDm#eIU2VOO*^J{ZGVoTze~kOFggdi0g6}7?*}NL
z<4>0D0@q03auuA~V{xjiZ|Dok1%&L1?ndMhz1egI{_tW<PwAdcNkdVDG9`NLlRd>X
zjz+Bk;K02@?@fL3-49PE=STl>^yKLDi2e7vR;yh-zx(9qgg#%e)F(&uefs3h(b0XE
z>kiI|E<+b^*ni8@CgBKE>hsS$AyqdQ{Xr5>fS?Q21FDdfl3dNDw)Xoe)9~tm=89jS
zCJln3Nu_on24A)eZXu^8$H&HdSAK6B+(9}xT4Y5LZmzN+yR!D#k##i99uwj);|EnD
z)evxMGa3g2jb@W*7FGt6c*wQfH*QRUtVc5jb;rM4#v&sHgh8Nry3=v;a+)T|;kq|=
zYeM%9P`fyaK8HckQ6cT}&X)^+mafBO;#BWq(1#?fM6(KT0Ai3E0j?h1=YAr!BB<At
zcM&%f<&)M5leYJDtdWNs<8J==`G%zm{U*kkVf`Q%0R_3%yzc^X8YZZGUAfLvMG1N*
zd+L8K$wV(@e)gHcDxrGLkX_`KvNbf0OD~dPw>Y8C)2V2;MR?-iEX9nrV|RKw!z{X+
zppWVY*<QH_JCv=bP#J7yI{1JXmyPs`^VlqbT}p8-c+)_rv3}lcKJ#Ijj5h0JNS8}W
zFI5}|v{i4VN$g44G%amqt<yhTboi5dR`Uz0Ds{>hZ=c~Ed)kR>9g$C(#=qk~G5t>P
zZ`idd`J$Z%XooKje-?lw{ul?+t@oMgtIG<Mi*i?<LeKQ$7$Z0r`*e>Wkcn+YD^Zc>
zu$(O~{|B%y_4Svj%5$3rQztNAZ1t>^(n`50MZQRzPFGBfdmp%-X9A>#*h061t_E5o
zGxhlu@VLQMs|rd0yIV3;*X*rvWii8#2w>imK|&FBe0{8Kg{Wz?x3tp?XRa<@nc3+i
zHIa)iK9qhNO+#3QEafCwLY<B5=(+>jab#ScWdrn_d-ZzC0-$Pl>*?RRc|CRp8Uj{6
z!c$&rnrmw_;_BKpI-uKcy!=j~CpU^X7MR+G#&C{Bp)Yo5i8gsF>JseK2p!G^?Ibak
zML8Ah+n$MSkDYpk9NAS*7M&JfNL&`OARvVpdz2mnv1K&^%=Ch(&UF1lUcZ1<6;lz6
zT`9`=OalrSTy7VGpdh0dy{XikfpqwD{}LgFGHPzQJ*Aw$chbm&iy_lgluCB3AOo3G
zvqI9jjheugx`FbSBG6QTY2iPr0OWHp)P7=SnzC=5!e7e&m6Bzl6tXa!g#JQe2g}ta
zq3MbQdGKt@Z^-#MDk!V8u%BEGhX9axfy}M66S=`vYWjI5*@R78mFwnn(<Y5#>&e+!
zWD}4!6t{CApCf)C+Vye#klg8@Bomq3lag}(Pd_RJoz%2GJI*}FKS5dkUvY${dsH8?
z<!(j}Gxs=U`6=1k;XF+dM%g8VIvaKhvw{q9oBX@QJx^Zfl9h|5`ksZKmq)N-Vz^%=
zW!akscKl<uX@an<kRyodf~C5EI)pq&(WrA8lrq|sSKgw`M;_ZMl`6afjG1BZetJuu
zYTWazf9PPFT#h5$ujn(zjRP2xSZcLWvm;iI_r@$1Wam#)0~HB4qie;6WoPRb;qaK+
zyr`Yhw$XYN*D$O{>%~5t_Nn_NG6w3MKhO!m1sEC;WH-05qf3xe$G}T+o|G+<)VFR>
zv6T53`0deG^}{Sk)-IV<?>Wo_w>pgDizswHHmZl!hO;6oX0$@y(}I18kJMF`0qEAP
z)a1A$Oo$7t=|bQ0-DZK=e5Dn+;c&;7*1)2?>o$F1<(nG#V*e6t2g<wP=hcP(spB`p
z8JW?)IX#Z2bF}Uu^K<J{;-X3rZmbe0RR*Q=>W3trb^d<#!>cMY`M~`EQ{%DwFcgxk
z8e-Ktg>)0|3=|7R5vh-PKr}oI3YbPY=@n{Y4@;?Oy&i@>fjn5R<>D%hk766UtO!*c
z^n_H$Or!+I>#v6tCS~A$S*If&l~T9pHUrS08A2f$s8Bs$hi(VoB5ww3tT1lZdKjYR
z93$8fBBgJ{hThnV$OYtM90d*rfg9htwWqZPgbWMdlk2Hl{CQPw^~m)KJiLm;p9qT1
z0c{dC<_~R|;9aD@<tuKjiz+|AOXZ95gL{YJ-P<3;L#a*>56Os9jJ`Vn$;>OX3tj+&
z^JH_KLdy{?7s@gjT~gj2ix`g0LIG;b{pC3p$A76T{$N=_JoTd)X0l(D&3>{1NjSV*
zgjj(6DnN3dJtbZ!0G9EPd6Rb7VL)vHyrykq79HbTJdM`^)M$45_&~iEx8;Ku@#9%*
zhTb|v`rFg)tS@S`3$FLi_OLXsCg;%zm7d<BJ?8_0OnS)n)~yim{h#iaNqbaUcw^yg
z6RuWlkdRwiV4jO%1}5Eq_S*}&0+V$sUGVl7bhzSHCk8&L&%()e1=<0+cJ><0Qu^%y
zKvk?7dSCdWH7gAug5I7|*IhGblf9cDl$}xJ=>zAmTCYC91mVHKLQ)@8xhF>yLnh|G
z3CWW-aPZhzkpBTv(FykjQCd)ZKzL*F-@zmv)Ywz4wHK$yC$G*<s?*>m(c+ffCB$*A
z?-POshC6$OVBw8^A&!%E3}KZuzYrV-Z<AAhWhlC@2qx-9HLhh5$H05=GlI9lz`)X|
zTX}k?C8(#=`{X~E_ld*M31%<mgmK1~qF~~D0vaBFa+a~$44E)M72acnmZ`HLa4Dbg
z?Ult8_}kw@=N#%m0!GPX^GVb;)NY8ga(MJUXnjc-#JdJr{$msXZbdlCSsc&RW?<sc
zvY7Bi3Y-%5$`;D`6fZ6kSC&>*h&R25D<ol6RDtD)$+ew~%T7y{TFYPDfoGTMw1k#M
z#J?GDAC}BFK1*eZYX$!#Hks~2IZdu_t{r7lsR#v)yu}59|Ifk@L7&99l0(=cbbiwE
zzy@+Av5)&5SmIGMzGOOk^6|$-kCvh>ba|VF6viZUlJocyux9`Zyg+q5tl8ko`EB51
z5hhE+(fyl?cAkEU_=qnzITACJH3qQ=DRSiy&Lk*@l>F?#X_s^h8*1PUNJK26eke(u
z(hy9R-UFWD7-1p-tM!V3Vj3sQ$(8WooA|TwC0g%O>~+`x=OJ&HH-<2bm$*g3#gdv*
zwki+>_NzLYX&+Ti6Rn9VArsTImtyP8%CvMy&@lF(Dw?L89aK4%ejvKU^RO5-{$<^g
zXeRe;8ykh@Yq#kL_!}qojz0l924_?CPW6s+9M7-V%@m*VGc-O(@g%00Hz-mqBG~uw
z0v9iHo+xLDM<<DXkjSyuSl{CGprfN!`wq_Pv6D>V`TPofEPXmVi)r-UqQjV47)JuM
z73mMl0NMi^2RcqT)<SE56QdZ-jl!S`b7#BENfjjAxs6UOguEP_Cw_XIShZ9?N1{UN
zsv=87RXq545x(^2Fm(XgBwQq(q#c6n;Tol>pZo}gWh0gCQX`QX$d*0#lOH~z{QCo)
zU#XFOmF2u%#B)ICtF(qc$8)ONXB>W-{vkQL9F3yS%%=y6)OxVJ_iG@C5oHn(fOfIb
z5*(O#Wf;#@YAl2o>YJ&m(sG;@vi1lY@xR;7chScXNys9cuxG*exjgeRE(!X)I@MYd
zV~|_`fTx^Xu>Hk>cbgi(cf_C;JG3}um@?vp2t}N3RaE!@<v<$08;BeJ)cL}g;<cz5
zrUSv0ywYfW^9pNZ`o$*b%U_I<u88JDOUpPNf}oM<AjISXwfCC72C`6z!AOinT?(=V
zhP2l}rvaz&=UF&r?o<GhA6eMo5pHwB*$FUoWSQY9hoi#^obrO`=R$>%`a@y_3=Wwq
zER|IWp1^2WuUbn3kqo#cfd_O`{8pdE)+)ki$$B1lMHN2u+=Pt@6;oIc`8R*wE#5Bn
z>8b=hBNRU5DENTR-Tv$<U1dayq^hwWGXt3TA1!H{{^3I{)>Iw?|C2xz1)1Q2ZgI*m
zI0JAB{Ea^&0x(0j^V6rOzk$(20}PUN<q>t8JFpEMQdfd}V737~(&^Kr>OA*hB7ovS
z%y=|B-aMk*>{O%Cyp7*2CT0tRaEKR1YzSnZnTQZ)*fBoW2N;Jxp?LtUSszj{$TS_S
zRV@<%$yW^<KMjs)c63&1#D+QI;|RMFfPL45zgPpM42QCkBGn6e4`lJ6FV#A;9^}Q9
zh{v*v)gp2j$XL;i7HFE8B8{Nl7g6o&{8q186v$0TZ<|dGgo)Wl^wgF60jU&PZ?Lt4
zqYy1(I0plGOIyv-P7*WHQ*|i3Y?!dmVgSb&ag;@g3xvijDxK`Mm{{86vJG$o3q^8}
zBZVf4@hq$@KgG4>`63L9L{}131W6myivl(k+4&9JD((U12`>ig$(D;4&&kpp;kckU
z#HCcTxRNDEobu3buHmYCN>aL84P;UGf3{h)83lfuQH?EF#(W21Ur(RL%fukH3v{7H
z(;)K2RS1Z5!!-wm2qAVs)XxqY5tNl-IB9D`Opd4;fCQ+zZT{4pQy~){GhLCbmEQ8Z
zW7LnImHb)`-vC>LA0rg&*|YT##>K#hiq)!@*UUv2QW(amBlZBW_UL#<8%sU+kz1Jh
zS9uMwo=_CcZNYQ!o)3D7FURM3?Jx}m&~oSwCV-E-u_wVmHufh~=X3^Jc`?SPPJ!QD
z<~6fmoOObm>I&JI0X>z5gP{}bA{t&ez{X-{;bIXls`dpN5lXeu{vA$3{=0#siE!qi
zudEdmV2Fe}pucqyIj;%_7+#gyauu|QgfT~6OBx2^06ga)2MZ-89^`a;b92ht*puji
zD|ck>nNO-j{m5Tyti^l|@+R^ioPmdF`yc&i;t$l5k&Hr8UI?u@7zg8W-o?gu2<nw#
zKI{ZUR!PYRg1^Q0Z{Equ`9rM%NhKqfD^qI)vtKc-jfWir(z9q5aIt$f4in|%OL*sW
zfC;gkvky6qoy8t9JUA>2pTdqbyiQ7%#FhY^p5Si=ganVQl-66@BnW=cjtK$54-A4I
zav`X&tHfMGE69mj4xA5eicEbAEYlfgpaYVX5D<YUM_`g-jnXl~yY09%k4?m({Czbd
zKAL8*X_ncU($B7fNB!2u+Sloc4gV#ghH!=E0$0q$t?(0nKXYp{LgG;d-P*0vDO8EJ
zm*ob%n~JP&UN6T+(5yR9OfC<eIb*Z52E6Hc2uBR=2%kt4k+vyY0%YCj7&?z90c}0h
z#o0L1h&atf$h5-AdAz_=OyBJ2^|oMYL`ndO$kLL)`X!#uBmW}|jBMTrsl@=RR<P`;
z(kmI-WqxXin+HCvnYOj6ec?%7wxiE_6Tg@ao{v@?fo+rucB@5OH*+zXhSu6Ph)sy4
z92Rpy;xx4Z*30LoWo^p=s{=?G7gsc4WlgOlRV1j3d&4#Qz)QU%JqaN5Fg&}O4J|q=
zQ~#`@-jM@{me9+zBhvRU&8nvJ1`aU+ehqP$1gDIwSgSFv7I##%45wU1L-vjdnXyrP
z62})n?3jKcRabD5m(vTXeSp10W&wmTrh=34cRZ)=X7muih>xNLDn*#O3WY>@7s3>-
z=q=#0gPZMSe4y8822USo!Q*@{4v{2TipWbsHF2vBjtJe`kP}8-yU~nKMvs!2$7Yxs
zm+5^`&cf!0@dAa#tipj`93comC}%fEd=j{SFkOgw#0lFFnhMP?lk*aeB^MnP<N<i0
zOT*-f>4!bm1Q!dtS^Vp}Di@iL!LOvEkGHWAacx>Fu~7_-p=fTWQM`!#pcI7jtpoUI
zJIlH1yUQCurOikE)XnJ{G39AE&rA!KS!kiT2A%0QGb$rxGw^~$s|_L@fT*<$H<w__
zca|ruLv>y#nq^VIE-MI2Oqu})51#=!DQj8zvs<1o;!ni-oS*<$D!z&xv}QEa5NmV2
z#DXXj6-xQqTYkyR?Bn(pVG>^g&LYw2vNXgUme}WYNMVK>l^f&HqYCNOw!>I}RGnR`
z1rgIlouk%LbjJOUsyY&ou=AR7GKfG{Ae5zZ9+9GfbvlgUl_pMmAkQ|PilW3I@sz4O
zhIA9ktOF@~DUTJhehl)UX^CZF>FMgJTAfXc#GS2Jd2^Lm_()nO5)37wWw$6KF|Zp>
zM%hUxgE#jK(5Fv5-cS+_@eWYr%jG_OT6K<+1Wt`aHi#mIKY^YD)JKF0O$n;Dvv)$L
z`Ub)!8t!O|EXy~YZa?qJ=q2<(Rt8ufuLR^^5cLGMdHjkS(*%}@7DlAlRuqVc2D1=t
z@BPJ9)%kAW4-x|B2$5f}yo^EeWQrcN@SN&8NPb(xZv!=>5J`M9VsdKCs^jvUOa7UC
z;MuX1%EQU$8K=PH4PV<=3_-;hx(!tV<=8vV=8$SnItbb~h&*Ei?i$@1TSeOL3PR7@
z&(W{Qv(WK}aQp|Vl#o9<%3&P=X_aQbys12P7GYo%<!hHYm9+_)yh7I8#I8$D5n}_q
z6h_$A?pL*$i(akG=w&5(DcWRKz`8cOAwjMTP^-P8t-XkXXm~k6z44r1chiUx+T`p-
zQXpGNJWEUxq>pFR6cg=;A7uv)41T5pMPeYW)keS<W?1hT&o>~~w4PD(rbbf~E~sVU
zz>Z1w%^ZMRMHgOxU&G-J;2O1@1jZA{i&Hy;CafDMTtV6sNes>1*iltFGuf3CPTZ_+
zTbuOe6^kZm@--I8Alz(CrVTUPaXSkzYa<{_jeI;#r^zI_9U+(PJPK@hhyPtJA{I>4
z%#eW92AnO&kfNDEL48gp7b7qjSz^oS2XX*<XK*nv6-A80aQGp4Nr0gmuQ)AZ#tUS5
zAWkrS*qq((8nY4Iy=9^JgeQd<gjSXqh7$&&mQHTC))85SSPWd*0+aM`rC<C)rKJ`T
zs(dSxq;+?UK{QAU&WA}C{LFYZ)c|-p<Dwmj`mA-dCwGxdzO={9DnVYOTpn|qPr=*6
z(uC0DY>1v%KCzMs6aL|Z1_m^+sX!8;!;rcFqZIeRA*n+eV{xSQ_`Lgk6%d^aVT~-D
z_V8aJ>LZ;KeetA@(=GD0(bJK)&Y~q?`^CP~q_$ccFKLxtFrl2IQkZguGqHpyOJgi#
zg%ixG$2ih6HFb5=vZ-jFF`EFGjj&2i9}-Yk#;z5WJ)pM`2Sp)I^+^hq2#J~?|H2f}
z#xEF`e_Br*(uMp>A~_ju2!?M(IE`v!*MadK@&;z^ajQJPX$EXqf7S#fp<^Ms&B?GP
zb^vllp&&IjtJS94h>R-bn)OmGg{Zh4hXk`HYHXYs;(zXq24z;!h?mOEJiF$XyeYk`
zHp|PN(b>_O8m!#W+J|WBY3K+6#?nD2IAmav!Q23eO}hC7g>#k%L?<P4Oc$je@JuHK
zbWI)ut(#VRCcCxL>B!;ko$^hMkC89;1AD#2!N66vn;>>&Lt0(Bw-F99q!h=agST0A
zjz(nZ044L=K@WpjB~>zMtx@}8h?hxdr+?|j!{b4GNN0{c;hzE7`SuUiY8uq@FxO-j
zGfi#W6u9u|2+=rPC29Gj33(W1<Ep@mtP4ri&X51<P9t7mK=oZsEtIj_Fbr>Zuh^a9
zASA^K88ma%D|7#g7Yg4~b$-ZRLVSuBiz~+;Ae$mBrlCu&XjBY~t2Z~U1>Z$^tgSQ_
zPyI&NFOA>L;dGUI01v|pn!0W2CN*bo)+o`tGn-W$6G)qqzJ1$D>JYKlksOLvMe07t
zxytad8Dnm>3&~S%ycVg|{*EgtpJb9Y-DvC=24n@r?rn$R%wI$?UF#Z65CHh4l+r}1
z+2h(vEK&ks&;?xJ8m&NO!YXdq{VKEes%A;+f>~DZ=T;J@iWX|ss!b>p$C=9Cc{+zL
z!RA&+s<fN#3dXRqE7a`nAYjlPIv3s9{_seTjxKSi0@ep7{RpyLtYVsrnRXHQpK1|L
zDhhU4f0~ahnJY1Gy>^zTnH?-9ekT$V=;0F$&z))L!_u)UNk8R@ubfGgEUT8rgn>AU
zk<xa-UxXSzZDZCGE7>sR&r~>USzsdMN4$32QT4!krek0yo!Qyt9FGWj#oI0V#eTYJ
zl!3~haJpzJCf%eSxB@Y90<tJ7Zi1PCA~nQGiFZ@8TxL$RP`YX(gAytm#nTjalD1~#
zHkOQB_GFo(V?K+fmuQXR_z4!xt|zmFuvifYg@?HP%hPhSHY;(3PLr`WzlV#MAJM{0
zpFLAEME^@X4?ht*g>HJxn=moSM$9eA@xEv&OF4zh`FP<6z_fvkeTdUSPpL&}c#HmY
zO`|dH(e>%mrz-aQX<UsL;~EM#N$pcOr~u2E)P|RfML1hl(2}+W&|F4y3|LEnkrE0f
z{!I{1E6lT#rB;ZmWL{ZW;{>t~_r=Jj(=do&G85S12oGtg5TPay?bJg*a4Ho?It<-3
zZQ#&G7(GtO;)prHapOVmBsK{@h7)Gwgw%C>=`Zlu3h`kUQ=xG=LkFb^IjoWKFf_`X
z<<L_xn$B4u7V%i0W)zeS)|1uXULUWRcF{Ss-=m}k3%a^lxm=^8I{?uxQEV^;h(?n*
zUNG1Q-z8*w@U0I&NnM=MdK#n25lg=)L*of~R;7>_j>gtY!+%mv?&y&NmY&Q|9396O
z>~b^+2bbe9Z7(!tiQ|bxk8~)EucK#*xW}F@DhcoPEqcuyrjBGk)hK1_rT$qcT{YjF
z96fz`(ga|0^A|Bo^7BSkKxJTZ4VB4fm=`4LBXJXNJ>qs}O;k?ALkphy0=CltjiT`s
zHVu6wi$94ljOYZ}E8*LohWs$>S#ke{+|<)i&g$yToYOYT`|uO9+y6th8Ji7HG+Pqv
z%!VTUJn15hgP>ipFwb1}j-x2QF5#WyP1P|t6-hoMtu!M|#zcw5!o_vXo055@0>iq3
z8jg~bCHT}Sr<8n1EHtyT-;^%3X*0r|-s|=~lgy!>|NXx7ibh6bpJ0HifEkPx;@4D3
z%tdwfvr29c0`gj7iNmbOy~dl)(M<X<;StLFBRvB9T@kK#(8nYiEPRYh;4`EyI%Uxy
z*)vwj{=i8t7u@6XD!wEh5jN)J5-+Aj2ZL~g4(!5t9cF%oFU=|q!nx_-0a-0l3U~Rx
zDe2vN0LYpzv4E%u#BsTdCJ6u*N((68?0b&!-Y5g}J1omzih?Bite#NJ5sj7|p93kO
zV1J$itYWyJ->Sp&`}cegP-}*tv3YrkK2pc{BHH2-ceZ-IQ6RISlGk?9&UK40@v_uK
zNDlqkadC_hBV%TdX)zCLYMV6esS8=SMbpxh($a!G@PQb!NxiML`e`z2B<)M9fHdA{
zu;gZHynmly!|&hcc5zcV9d!V*rIu?k4wvi=<phJzg_(t=HYvhfXzzsF-FXX)fa=S`
z@|YwrW6h;7rvhjsfXUsoXli7lMrL7Wq?O$_U5?gjePswFFev!7TO)ja%=|NLO?O@w
zx7e(#+_G#_Jq_V>Mj1lgRw^#?0&#Y01-xqTQbIXhw31P;C94sJSgR;I#oU=<m<(Oi
zjfqWO&M1r$v_`?imAC>tN3I&Tv7`v#P+T9RQcqb4abKo3fjbt)qLBj|zN_tMm?Otv
z_?hwXW-Ot%HLl*p+6K4FL^IfxX^5-oS;Rs)Ivv}Lp7`4kT-;Trp=6kgJzQ=hy*fJB
z`VVtx7_?n-Go*mskWQUP8g|N?(y8jsYTz)MBPn&d)09Ny4W+A80Ael|&bG)}S#6>z
z9?F5FJ6NFwa^U1NemRi0;_)H^@dEfFR#*l-LMDRmZ6<v<z~^4datatk3zh+BiWh^{
zMYCMcsCyyPdM-RQ`fMPvg;H(U4^~pY(QxT{^e2CZ>$6q&vowU(Cb4lZX6>^Css{|!
z12P8C>9<7pz(n^f{LH%DU<b4}Dv7HL@m(_Vt*2Oa=d&r|Fn<^%7!P|e2~AYIDd`Am
zQo|Xy2V1B0)4Iy)#kxfh#ZAr%&6#$M1U0S)?gVN^TyLc141y=qyHvi<&UizgZD{4J
z6_NQdgt+zQY4a$j*}1EyKlz7RFrL!W)1Knckj*BhXRy8@5dAtp1VZ+jHOr%Z`IArn
z6}s6l;^L>8^_xmq0U8IB(Nb8;@tNk^<nx~@)Ms(J$%H`=#|KpG`3^pa7n2~y6a_}l
zsvA$;?4GTyyxUKQa27IB{Tn@}_M3==!R+L@LP8zP&9qGn^6{P@e3W->42)(U;|m^3
z+(arbcRlqvU~k3S#jorO<KoyDjg8pLn$nP0w&-!-h~BkF<?9~$Uc(PrTrrh;gn33_
zi*%q-Un9r76LYwX<JPED`k|B<W1~Rhj?evt9;T6dVkp~i$jcOqCZ$)*zN}$6D2$jt
z3*ssEBOZ4mjcJK~vdj{`r*P+<JXlzV<+f6{x{P_KR#{Fb+Ek}yzyaSS(I$t#cp&W0
zlGJQCdohiJomaBpirMRX9x3Cgzx4I%Z%D|Xg*cSIXQI4Xh5-<SZ-l;5P6RxtC;<=X
z428NcP*snoC;Zl!BWxzu(Jxo}OEnE_sV`uum6jku55ppq5^XBgz36K<V-7vlNVn}N
zjhRp!54F^jD-jgjgLx$9l_W%T$Iv5#5GgR;*iXaBu~e|bf3jEIC8^;WFGQA&G7Z;o
z>ewq?q)S2IG_;vAU1&-)%W%E13p@@~&{s@z$V_XP&{bC3u9h{|I&C7ehTNSmr(Jy;
zF|^U~`P@&=hKqPI(U6(HkrhtV(6oU+$5qOh&p1PJ(1P{5a{hL9?g#NFXfm3Mg~u>4
zXt==ZW2q<6Wb(vE>lJ>{a<)VT_Q_}1>9cX@9AkK{H{r)9#9*z1BwBJa1|GOmiXIqp
zTZFzNZKdNcML~Xnhea0D6o&B}UWB|83exz`TI0^0I}g-xq8>B|lW06+(QtUUO-DNZ
zokhR@j%JRemxL_@YmW--RI1vih1)NM6Gd%-R$4$DKjEVS;e@?0R+Wj_azES3{VX{c
z7O!9s!<atPuyI=rCq9dIn#jXb=@yVRZCtVPDk)u}7U?_+f^bGA(?-t6C_$BRQQ0$s
zzOn~ajFVgMyqFN8*&60KnPyW<RUMN{0OBe|Z<X&XKO$&RJ1i|V=#+(j!e?~!vXtbS
zyCO`6{yco?FD@>1m$oS-sRt+z!Nz>w#PEx~Ua{#EZ+-Ldpd~#Linl1upU#!EN0c^M
zDoKwiX{;s{DCwV<v6|Q`vOexSR1#|}?eKo9sNWgZoTo8~=6F8{Xw9a`OpVw)Rr%fL
z!AEbJs!CSWey1nhU9gO8+4w2XftW_s@7{X!xKQlXdcA&a>}lX$4$m_kq#*B70YU7P
zWkh;KkM2oMUbzUt_<RWqbTy`Eoc#Tes$75eVBbp&oT#q8cxc3P_NfhpI`XC))%(@Y
zP7sF-j0rbC*~bvL{1rf#$J|pT3~1mP`acN22N}eg^XNms)Q}B=Ie4-L187aI5GC=)
zBiIRuN8}wIpbrLC)LD=H5C42cfIw1}o|F3+bh5<er!EC1sE3<co&Tf(Q8{@`DecaT
z(i(yY$O<5F_-YG!><^Lj6GX_IfpcW<hm;|#Az+>N>1`)`%_nreIlOat&rSI^URvG_
z5v$9z8nV!L;qu)q0#Kf?QJw0Hrg+yeU45tkYj#O>1U5ORX!$pipXYSH27L*4WPWav
zXD^&{yf%AQ0i$8Y80kD(is(>LAWx|!i%ZN5iPgZ<*iIBw6$z9=u}M$n@H2=U3E3(o
zXsvN2Yok3<Dx0$_H=4Fsm~pr~68-Xb-FUGI8l$u%9x9bhVVMm{1qeWcN9C?6?5yZB
z(jvv%Mim7uCD=JjOE!+wOWR4&)HF`owW)GB3KYWwb%d}CQmk>!`!$7_$vWm4bcP6!
z5i=wOVt4FX3<^@v64v0VFT<$}EJi5LgB#7mAwHlKs8o;Y&bU!qS_7GBi4?R+^7e<^
z6Dc0-X&bH^1&YCLCQD(oIYr16k>&+5o`wo77}91~DL{G?!m<EMok&9~$<wlV1B)5~
zi9u08aRF37#9lh00Egt3Md=c<9$#CzUxBi78by(CglTvFQsBPcxLjYeAi5zsrfgWD
zoC16i_RO8FAaqWh4bdO=<zU&He9Zet9E##heE#<3i@PMlZ~`dJVAePP#O4fIkT)s2
zZsrXccjh6YhJsiyNl_zEaN|#1_3T#5EFPC3x6V<8MZTQ|&>ws<Mz_?!Gp|_XHXMf8
zhR0fD<B{oaSTicq#orh6Xw{fFy3my9`|=rg$xyV?+<+~MQd!9qFP^nUFPw4V!$>U?
zw5wh9c|z@4oY|U`cx^AEx?_BiXgpOuE<$=*z;^vWJR1it@oZ9rxC9)++l+QW98SF0
z`}ce@1qWoE5Z~|%!@}c7wadw4X@Qfn_zE2GxGxo%L8~tCi6N-(mQp#^H%=~nOH-rh
zY>AW^@SnO-N17_oE(;}ky)^%hMh-EY&X-pucT-dR8u=wU6pwYSudeDPzk6LQ%mPd;
zP}Hs_Xvl&QpcD|Z$vclT2<aM6<ye$8o<zzLBB>}i1o{aGFzo{Rf-EpzT0t?k+JY2_
z2b0La17_GF`p-^qx$tMngy|THE~W7+2wqDxBxWHPdOj!>K&3P$04pn+BELPJ>1x9h
ztx^PXoE_Z<mqEU9GPC4Gi!BTGNiicGbv}yVLUH^^c0fAz24FRJJnB=a`JJ)>=4zNX
zV^B)Wq}dX=^+E$xx&OGe;cDfm={fgIl0L|34$=4u$W_VBslo>-pFHFhn*t7=#ys%U
zrc<2792&)xV{kKiPt~P{C+gGV&zyqvt<BrrbfKMvgXJ=t80)rHSiQYg7C_%YC9J5(
z!(w02-5vkhKrkiBrmt+~V~=>DQrBKA#A&pT_U-{b6mL0Oj+qM>okFr;4ps{apQ$TH
zn}R)mw75vQm`?I2i=%2INGwazS|L<XDr;x+)*hcvP+9m4Z!1pO%H|xs>88@wg)e9B
zwrAD4M66k681#$Ub`{A8a51@2G{G4Z^@?pgR@2(36d^sZ=DUSjE7>G(FVzx>9I<OP
z12Xg0+HA&iB*fB79)ZxZWlAk6ubtAH?ct0sl!eQ-+?MauHP1|2;R3HfTXV1NGBRcF
zg)_8zelGg`k*U8o6YeBjl4(iKSz)~HtR7B8QMf~q;v*vfVOWsy)YE`H%Zo}ok*0Fj
ziN&iVsoIqju8oM1?FBt=tt0$bqr9>l+H=iWv#6Ae?h7Vc%jc9>QvmQAbkfxn^$0U4
zI$`YDgx~5IZyxa1w)k@hQ{Y8ZcPc4*6)}DR_Ds4bJ<vTR3mIfDHRo5;tLb_g5hwKO
ziZ{T1HJXu`ObOLx%F4SehNCWqbEv8Oxu{|?<~fdeTUwyI9@~3^5`os6cgT7CiL)&m
z`0b4x&V;4Cj2AnzsUV;F3yQW~w6vt$-GD@ZLQKG1PsGIvFQ+G>%|KHfjF`hs#e|M9
zIqgQ}2zaVEMER%5+45w0=2{ur`66TouG;1%j@GsU8yQ-27`ySYatr65?y^YwJT585
zxmKf8oJ0cKIAW#%!fPly`6()kjEJlTa4VuHg%@Q)m`d-@bZl=5Y}fA6*h6^i<)Joz
zwX@1ct4v)Kk=s1KWb%@gJrj4z+v|J^2N%)OsHZUdjO(=!BR(vqyHE?k)@};qM~Pn{
zPkLhtX`*yd$<3&g2=HA4s8SWE=E{yy!^?<N<~o@=i!ApFJM?BY^PZv0X^>TiaU>&Z
zua~tqwTzaNFjJjUMGN#{uPx-Lv;mq%6;TvHF<!)%^P&x86Mqm+ihbD!5Tn+$0V3rf
zEKA0ZSV!kIKKf|Sz#7B9Q(=eCRl6p^5_B=)?mA)fte3Kol24P}KqKJvju~m^^cu@=
zAru0%>M%q<`z87%+hek9IGv+!IZecKL<zONn4KznD^MOXX>%x~O;KEmo5QTh6_pXI
zEGl$|eS;g?7v<CwhSF3vNDh$8ouYun>RlGqB*GHv8@UQm72%5nYowTYN=PR!qf(iL
z38JRu);Kc;DOpN9GWkkTLSH~5Gu!Y6lW1ezZL+#?XUB0^FrrLlZ3wBX$fm<HW8ydz
zg9RC0{@yHFNXAu`N6J=qiktZf#{1DFXCx6QZ30kBDs<o+DSEkloWrCCP5;T$_)>7K
zp9&!vvqg+J`C*Q#CgVDIq)1yO{T_B?k?k}0uv_Lu!`nW!zi1j8$H;G0whc{HT^hhw
zxbTv0Z*1?8ZC<TQT|KzBd7gR<97$*_(^uN0TwUKoR$CM^jWIpNEHuA*<u7OdH_S4I
zQRmDMgyf&jLtTf$?z_X8$1WVg&lENxz?+E6u%J%Rb~OaWeJq|8J#(vY`$JXIyt!qs
zP{t;0O)fBolQ;>l2@R?fWZ*%gy%s<WNqPr}Yyu$@$Bxo!_)7T4FbFa1Sm4i=#m%4)
zbZ;4t$CEsm5Mv-wk93wa3P9WEX(~U;3_Mrs<z5=(>>#bKuD)YeZ97bC<L3T%O-$JK
zXB1g#qxi%@MyHkO*`}{S^FM($CIyjT6q`Va4w_L5=`|!MO>6fi{cXLu*<ppmlc<04
z8f{W%a`i^Owvt$Irj-?sT}uTf*~x2*kk;dGUUQv1H^AeMJT2onKIS+pVo;lpXiC38
z<+oOI7N@Fjt^ZH>bn75=Dh-v%P)j`89rb1)HHv9zZK#iUivi8pWR&S{x)9iTXQ*SS
z+eHy9q5?krXGzvlZA>98Pr096&L2jjgd)o72oX~<-V(&}DLDbEw-gA3^|Ps5PSfmM
zhepU(r6gLc=p)j%xB?v$aCwc_&222&v2+HK=uT~>v%21v#(Mt~w)4i#QqF7^vG14Z
zbLK)MOqTu?yX&&9@?&K{y1(9*t^9A>B+}%>#Gd$aDLpiZ*Ky5#@+4j^<EeE^0Z@73
z)>d}fZAy2>7Wm7y8}IJ1vAzGo-8PDc#_4Iwg<MRP_VxkugfHc(Z7LOIJM744r6wL*
z<Wt@HDn|~L&JBdBpU%T@VtD_i2sh&hO{KK{Gf!?TiInGJjG<i{2t?H@ptM$Zb-$yE
z!>~832H|As|7_k`CP(}j5e4uL9+l}!qRuk)k#ZWQRppLJ%dy&ggpbT2o^uZ=<Fb+u
zL%%!RgyBjtbeASSZvJ#dNejprRuh;BMyB$|K8vJg4FR0aX175Y;Uu>&gB=b^Gk@N!
zZtCo=)qqDLCkQOS&F^||?kVodB9_9^I7BJBboQD&SGKTUlG8?`G3QAVHc`T^!LXT*
zX2l3a;i88W6b_yzxE@UhW~>Ltw}=|5uwlK{-YWB0LWkNlIh(|wO(V~YdTr9W9E@S-
z^Ph_}*FcO-T$uu3u7SAbd13{ud7gc-z|b?@b(&%WSfHD)WVg;M-waIWSF@&ITdZR2
z(-*eSO5R4J<q)sCu6DS)-{p$lt~a|D1U7T*I|_mplg>?scUw69ujBJ=jIXgLGg6-+
z8>$n{FPzi*^#nw+o}iSc$O=%1GHV6ax6*IL9B78ec5XWd%KDl5g@Zg6EXx)vN4`4P
z$0lHvA<&zAYGF-C&Fe73G_N;cy|~lU@SL^jIo7*1rG~}gh-b2nii+d^*EtOkB4Sh$
z@@A12kl6vMYb45>77Zzv&cX?Bwi_?SQK?hRtdn>#PBv(B_f~E~$P@qV%NNL&suupd
z0sGbJetI+Jic2)3g6VqnM)-#0IUiv(4)i?IU5wJeu-~8jd?pQno*W&2fA;$5_@wDP
zV28=uqbE)0A^Uyu>g~y!rqj5?KF^+?K6?wF_t@w0+cz)Z>puHBdVyKIk(0CIrgOk^
zc>8w_*yrn`?@r#odkqP9l!T{0{PYTv4n@aL;o~m*c>V*%z`nzKeQ|<gxWn6~c6g_6
zPQQDOS$y!U#lt%PI(c#O7MeM{X95)Akq=GwFMzN%@R3={dUOewF7ZY1xBGW_)S2Ps
zg&|?jL@yR!uWPt><#}*vU3{e<m)1s}H<#Yg?mk@-%DTr-GWTbu3y&-+9J+?_bPx~X
z&jmHgGP{^M_mg=%znt@nI!C*G61P>4m1>V_*rnkRM4)}Y^aoL@pf!98Ro+pq5xcR7
zCqYHj1<H{zwaT=9%@(tSORd4hm}?DSa|3$J0=XKZ99nr5J$oCJC!(8WtBNi>V@SGS
zprMNVFqlXsUF`Ne)ck7=Ok_f_rG!f%3Vyn?MaobyK9axfKp}Z4s{zv_A6?84g|UcL
z64TorOfDB&ntsn-eR%>UOFOm-G!t)@cO5enp97%MVXJ`?J}#^5DIh$uk=|D608(Xe
zER(0`_>**uOz~pkxcyFAM7yi%rk1-Hqd?Qm%Q@8BLDR^}8AdvPrICc6XCz?-%QiC!
zYbEFx*FkP6LzsRKMg8IVF)BKqv$u#!L(|&rud|BqbFCt_LcnSlk=EMT&|!zF1VaOG
zN_m4)m=F%auZ3_p<DSws5Zl3|oDr;d<&4<S6Su7X+OCR~M$w{2$vaUL`e(#{U2Z-`
zD6$*AtD<=51R+Q%_z)2bO2U>|#*g8lN(OOo#k_XtX5Al%<|xu%;t;V!#GJ<oYBsJM
ze-fjk4@P04$BTI62X1P=<)I=9q=gsvBFgP=cq;tHUGN;j6YMrw;x#?@N0abXXtiQo
zFKn9G1W!^kdt-Hg1=7v(_r>v;l(I!V$KJ3jeXDmgT$7uCpMT1^#v<@;MT#sXvU44q
zQDi@b6fU}(>PN{%l{3jzbkI^+i=0~^ra1Q(V^YKHm%=LhFz%UIt5||%SBcIg%T&c@
z+?($E6J|gz3rJm{995-4=ZkVF3zfFI!{uoCQ}1j<89rb_m27kttE!vFEEKYpRU^!^
zHJ7@5-KFh7oEw@);m(93OG`K7NERDLqg~Kphq2h*r;}6wwDZPk3C&_Y?Oan0(@P(w
zIFL1SmsvZEd#hg9c3|mT_71%;R%%0N0^?0D4A}V_tMr?AD`3i>z7_9|;freIzA$8_
zoz<c;5H8qg<Jm=NfsyhiR<#A!XIw*tVbcIuH5zBssiM;ma4|A+G!gkx`LkLHqeWwo
zY^R#New|t(f9$LkO@We;a5E+bGOtqMYh<a0k0<V^4SD~b4I>ONs0q_zD0+=8b$vk7
zPeP%B+=6()P}PoLI|FN(N43FLEy@PbJb!`y4B<R~;jr~wY`cbFZxw5eJ21;a6$KMw
zc$(;`<fn-uQTTZ|h(DW^h=WJN%6K-pGDRnIOiC5<44Q<&;7W6Eu?gq$JjoZ&fg{An
zxls<A$Mn>qGYLmaz_@65kyxekJu^o4PVAR7%-(d{y!mGNTDlUL*t-Ns1QiPt5vy6Q
z{vTDCi1x$J7;SGu)4D*jWz;)(X>6DBOm)ci-I^bhiU(I=crR6q*V`;I%nD0TBU`D-
zs(8yajuiNg4G!M`T}E?UN2<TWtkRnz{jmQdS7c`<`}6g;WSp*QcTR@0UOLX5meI<>
zW!F@O8f2%7Jau;JV+#W%J!S3J<k@gyxmV}v5l#`}>wPuu%%6gj*wP4}lwT_L032;f
zD$6V?%A?*yX2J5x)-vd=tJ#(POTN~tm70WaKx9}*V@-BpBBdeIj%?&koTI@rzT|!E
zaub#*`zJ7xnKrGgWVYw8V<tDv;E%GCsoB{!hB6y8F^8SZ#7f-2%xwbEpTW*;0^N3o
z&UQi*ld|j8!=KH7+?1~4Gzjr&BRj+MI2wkyGI+vmvu|To_~Ti;2-C-nSb%%f&52+W
zTWlEBU>Mg?rLZxoni?%zyToH<t8<^CKABd>cE>PX$(Idvw3ChHW(&(5T)Euc(Ek5e
zzG$b>{}1JVHcfd)4v0mF&>};q!AkRKE8EGYY`sNB*SG(6VI5!FSVq$@Y3bc$l>^xr
zsDi#Lx6Ql2ZL3;LW!rXP^z!T>C0Ok55}N@na|2msxI;6FrCNYR)6AeoN%O_oi4RP4
zuEIRs?L6QHYl~gjKrQTi8l=NYNtG6DBNPEUb-k><LVuX3DIrDDr$|b&T@{K+mdnjx
z=`MUOJ*jdYPXaVF?`~jeZ4B(|w6c>v!|6Gj?YWdL1*B%U?vv>EP-(HG(Lr^bt^k$n
zGUXg?olEXlX<gaDw$8Qv{N8hv?p1k>8%%05vKme5b5^`4f~Hd}rbjRfEvJ+=-euKD
zl~OE42KyXY*rdD(DobaXDB-qc(d=Y_9l=U*#(-;dLG45w+G>pry#D+58YXDoA^FY-
znIk1*f`1KI+9-Ysz)TQZl09|Eiz8D%1)PQmt%h-~BMMPwZkQ^64n|=irslR!M9?T1
z>b0SqJeJ}}I?YjLUSG2AHPxWzX5M+1hd&vdESa-)|A3xZ-lXa688q{?y6oGjCCohj
zbd0mJTg5Uv<jsl!ygah&1CC_t#BVW>riq(`N(BMGLcX-Ft-T%d;Q*cV8D^ID=LLdr
zaEY`Lke%CJpaKKq-a!igSq<?L(Rj`>%}|{Jiwu(wn)F2AZ|M^KCPGZ|=YGYDeh~$F
z1rQPg=@|T@eDCi!Won|SY8sq8^SIAWcL{bOmm$<P*;X|)qzT$A4RxKlVl=pe_2T#c
zKYMSx-qwvXivG`4D0<RJikB2g{+6S7%U^A#O_OQT>C8BubV*vWmB^B-CB<=L@8?|2
zxv+C32LL}7NN`DV+RlD|?Ah;bEG!ZPNe~1<5J+yilX%*<$lV7AzEM2LnVdd<6J-sr
zeooKfp}-kEPjNO!(bc7hnh+LlJ4EYvGQ+U4l+UW0Bx4()H+%d<cve^Q@uDd3+VsI<
zvj8;`FbPl^Z5>$U9~8>bbx{5kkDSC5&WFIh!|@v9f=+q!<w4MVaL2H-2bjd{4hojH
zhJ%g2Di4A!No9RpWEj8SK`Ez$yo+#d%9OM0YU{1`4<iv`(EMtWey5WHXpFG^Qub2a
zKV*AKMb%BR*wg0vCh6B6gz_pd`;Ir1esFcovY6o14yXx3qt*trKbbqJ*p^MhsuLlv
zIEAn@C^8PAJgsgXm4GdBRZ-+fwSY(p*mRbK?+dV(?}n|su+<A3RIubX`wYo{mXIUi
z7k74brF4-Z=Stj_WTm5yv+M%gVe$Uf4sE#`jaH8HZEIjiJiN>WOwQTd8fRB^5TUhE
zERcDjjTv?_s_>a+$+Kk%!;|m{3ECnQPR9_zC*!MBUmF!%A(v`z#zHGOR8a`^zv3O(
z8^XMr?clzLeT94RWtGM0-C7Y<OKqD}%Kcfb4#y)HM&Hgk9AC|6VGQrz4~EI84~zyx
z;ztA)3&t0_U92{W4zfZ#pG`1T0S0?+7bk;3QG=#az{?@=)o@0pjdl@Ve0q4&t7J6l
zVI~pduWyn~DZd;2c+72XG)!m3!qX+jRKvE|7so47f%Zh9?3-qB8ZkFv3bU^Tn8ACx
zh9Y8+Oy9;`dc0h&h<sxT8N0dn8Rq}^DQo4oDaNyfIuLei`HCkW4p!XZOY(&Uefx@+
z8TY4jrKb~S2Cvu=Au5>gQO=ns#36t9Jw>>E^iNxieU;~HUo~p?f4xO*tn_qi*k9S(
zZ0H|;xv>0;p6yX_&}+ZG<v;YQ@BVErI{&Tu98l2>Uw;NPT5ZSY`G9(u>W6>!gBM&6
zU(U2MP1Si~NZ*9&iWVCoC3M7~l6c5q4hV;2f-SV2s)vpbpf=`Wjq(D=fRg_l!fPX#
z?P_5jArC>$RlAKzjFhXSuByD3?QPk^OBO=PWi2{L-k?uuA9mfI3McsDxbP{Nrp%;8
zhfMPx;^m~D{8~WalT2qAYA~J|T=Xz$f?KC{=Cp4p)axsJ#)!VGm>it+DP<;u1~Db^
zFg18m3LF9jQ8ymbDHl}e{siqHF<RHAh4>r~o1|6LoEKh}FnsMbnHAzs@o<C^5?ea%
zpC?hF3px`1RRDPnJ)a~go>4F2Pl>@q&t1Cn^DHs$WjaiFf(SkunUP!z;}@t@km~~)
z$*C%)M!|odwF`|#Hu}FzrXS<!WUezZcc+tU=v`V+XSn`^x{%JVt}uxmO#>+``k?Q0
zoC3F+qkexf2Rf>H9pku72C7aPYDl+W@O3A~I0@@<e)TI&kJGY#)V9FuhDvMJrD+O!
z;J6ZN6}OvX)zKNZe{jmwW4+k93WL!hlPsW&IWnyif({A{Iw{~=Ej<}C#jfcb*hL51
zgkkHcY+gfUrUUJYBXh@x@%6_fxhmk^bZ*A8<_HtXG@*!fY>@FK5+B}z9BU`I+yajx
zbdnyE0!qtuel;5QP<OO5pYd5PDO6IoUXpG+%NT`McY5-F8D?dMLGgkc0G=n*wy4iF
z|20Nhw6QBmr)-gfX_DX$phm<<B(zFiPWqUXoY16Bf0a_80}f!I9JF+CAco8FVVxh|
zuIyKbA~f!HDM6nOf2~xqJ}e26o<<m=(gmB}MVuzNB);t&tlYB7wLopDb0Jdz1FmpS
zpFBa(6D9HWYd6i_>X>1kDXWMhvB{gHh8Vw@1F6E3IpF}Cs<*_9!?6*%=u(@8`(3}H
zrgajh3LTcXnhq~xP%89W<#9So;y!La&QoP}exRzV{{Mo?pFsZ5ucx8IvN%sIHni}w
ze@-xz{O9SFg>QXAuh?@=_<zJLBG3cJnTFT#{n7;?_w*^C>fgov6Pn7lLkp;^$noJv
z-~sbYkoHn(p^wcUwNMJT4SL+AF6@J*Bd0Mq_Y8kG%aYw4xx?b$87)3N=T8k60{KsD
zeVQy$50yR2J&}2-rO7zx&Z4=V3*P;hG(hY&CYfHg6ru$&Y2~?)EF%l}Ql4<~c$5x4
zd_)#`BCA_8tP(y^+YzALsCMy~^q^cUFIrW6QWiwb)a~`qW9WL=pIzVrXl`D8cFd3T
zg)+eg?n!bMQiY!U@uRT8@>O<y3b^+RVkn1W>(PN|I38ZkFMshG%9zR=ih1;ULsr?T
z{iIN@ZEs>o%2IM!+6y^4$dRLe18;D&;dl9U199h17z4z;a`5gIysLy`TZ=i*WWc|~
ztef3dK@0X+d1|y{ZLp<((H$_#9zH0eEB)bou`9*II^rMMLb88*c-7sy`U5}Fmov{J
z0DY%HO$`%F2pMG#C0@IE4gFC|_Y=oPHjXb7V{>$KmOHvC+B=M01P|xkM9qtR@1X+9
zo1DrDE1NlGwyLi3K9^4Ri6SYP;b~pB8;`Ez8*~SO<3eH5{Qv{y#NUU()_;If{KfGb
z_%?ywqYi-D*oVI($LnK|(eSjNlXLQ;Hw2$3PDzcrVHZ>jFDz9jv;L^YTl!y_cTpWg
z{2O`4z-XR5D<RDJ$)1<Uj|bfiCgWtm*b7#?#|&r-^wmlxPTz4!OQcLV<Vz)X(;T?}
zoF>1`htovfc<K+Hh<ckL!?R*<=4?X<KtmS(qq#$OnAKxqOvRhYeWPk|X8jK1QGswW
zJfI`wp*n?cXUp&<^tjML$wo2M<wv?s`O95YU}dq3<w}&5<p-{(g*W&Dq-UE+eUjey
zVmK<J_l_hNvs%B7XBS>3@+|2Jscr<p^S?w}aaB0(kpMXL{40!h=}0W6SO8P`^7<iH
zZ;Y$Ls+aRnNiJt4^Vz&VjC<1|jOM~9x>+gf5><LPZ*ClHVgA>S-iH8ma?)&gpnCnV
zE<u4(O%K#K?rcfWh6HsaXh))7_d$(%U4kSL2X%@5SeBA>9r(EF&E}S9@i;Iz8=};a
zY_Zdn6*oo2la2r#9tpbSNHhZ@(Fu&iq3pJtw9r6{J~r2VQk#ccCmyJ?y{_nT`>mQh
zb~=72VaH7$2KW>quN;`d_p<|2EcFiu)(OB=yZ>U{*f`im*nzW5njQ#7DFE7#pe+wn
zZ*HvnpvF#9f*KwO=%PLyI&`gjAegEx3EGjMjszY0p!(sq2Z9bsTswX#V2%S11S5Uy
zfuKXX2s&~)wBdoE#f}F8QjcY+Ljh{kC8#MY9t-rMBJ}Y<f+Sr#eup~S+q<IF2~F+M
zznxXSAz>$q*x#LUn?4MNkq9|<hH=va!CdZ0(5?jexEjZ5KX5<?$FkIh1T|&FL%+pF
zLzZetT#YSRaYKT(WQPtU5gl1kfSUCU3EGmlc4W5&5zVG7)d-A4pi}@Pso$*&(2hSt
zz$P>jCk~rzc_2W4?12D%!vg_V`?vr-b?93M{k8`Jp573khF=i`e_fV37N9_><1JaL
zDN9KrcGo>nXS-7upzR|G^67$+pi<vCBeCOwfUXS>1l?{*(3W4ZsYb#r6~MJ4K^;ki
zj~+JhZ2{We^gx~M9lwvzZKCUi)9qak1ncoof{rA}#|5PBNKi+D1p3B$U7|nnKrlGR
z0(2-_6cs@z>_|{Y;tG%|TMSUYyX}EspoxgTIRoACK+x?CAJp8~@j%TDCEUMva2<G{
z#__se3f9n$EY%dHlxpUd+7P97eO$nWyB?^sy-}B-rUY#WP{%I?-6oOtgVXIp4+PYo
zNYJhX9eE(=<CX;N$chKD)S(1*M8yrCdQiB0B47xc5>)p<FkU+nv?V}0bwPyE4S#TW
zPOX?9J~%^7WW02S`p5%8FOLOC&9@8kaY2{-ioi~XeyI(0ocz%t;@AVh=CmU~8-B%l
z{ixxAfUXT$aa)$!lBG6fsg48*x|(Y5b8zh*d7#erZe4&nl2j#|espJ&c=JbhCaLNx
zXAn<35DZUKg4QL-$JIC%6#-P2pe+g7kmxr>sf|OwRI_;~OC9^A8XL0Irlf1LDJve!
z7A0uCE~(#=6+5EELrJQjtKLxD>fox&k*G^toxs@3kvNic9S15N%TjW-4+H3T1YO4+
z2|AQRC@Y@GKJJKtZtVIT4f3!fL5FheRfilcT<tusUN}`18Sd<=az8t(jac|KUu}w2
zUOQ~JAwgRn2<Y%jf!tj8K%MQ)x&$>PNZ{H~C!W7Mq&7SdRNRuF9S;OLO2-2MdJ?5S
zIp~`n2*!WI1Hnk_$Wj8-RHuCx)Ree75_BlhZ^=@}0{w<x5vIeZ9tNi)K%FfC+VM#R
z?9|6M&UmeRpvLj;u?GU`JED}L%Pn;%OVvdw0fJIn64aC+pL&>%9Z7^wJ)BZ}5RBK3
z0PXl4g7G4q?yWOk8y*Pg>UbdNW1!TbU#i&%RBVch+jWWSSXSH;pw6KLiHgm29|R+@
zB|z$o_4eP+=n(loJEODdfk58wN>E3F4t!8UP4~~vQ0&N39a*X)OC8D<1*j1q;%Hlf
zHYI3R5TWc1E)mB9q~_MeweEwO%AVzdB>K*YBtj0(u^iRoV+lGGpp&{RwIRp8Df`%z
zrM4tU_Hn}p0n5=0{lj6oEe`~^4khT=1JxVqTF0^ZZ;Db)rH4DElmPpOb2FeclwTae
zwmlG>jO!BA^gu9R8?w}v1O-a%cpwmcK6)UPP6PjRNZs*3fU6@xhaL!U(SZHS!L{pw
zfOVQ42v*;b4{9i;a4YWkrJCzaQEKN{;@Xk80_ZnH#e;Rx;>NM8=!0M+X!ZTu8HtVu
z0=jlR5bU;fS?WN7j%3BA1Z{|l2b(^q+4M^Ro16&HmQMsQzTaYVL!HB7-fd-rh#k5*
z9;jYFu1iouf|>$XXIp|cCFnqcb|w0CAJnKfBxqgWI*@%-;@2%D={gWCHk;d`#n4D>
zh*C$g#m>5{xG5^090-tF$PQg{B$|Pd=mbXMNOoIJT4<nsQh^Hv_03J6b2{5fiH+TU
z(|V5+r{hNwrg<Q7@TpcO4or1n?!XjFeR5z20hns{##uSk|E{xgnjQ#7X<dRgC1~3N
z!2z}|K|U@ROCJPu5fMFyu5}LtQ?)HYyApIDK}SBQe(d9d4oO^UbL%;K!J!9&kv{Q2
za75VfK^scP>N|bh@IXMsfd>NWPh_bh0ctcPXkAu35$Hul==PxxYO1583)=QToo%HB
zJGf315$?6|mJfsBp|MDu;o0;+Fl{>$v@1a!57anTCUys;E-u_sn-a7xD<1hRHX5>2
zL*i;|%Zi&4v@JVyAc;7T6$PkS-;|(jiECGOTM*G~%2JKMNCZj+K$6rA+2W?`<B{JY
za1Qlx;Bd~C2Z9z)JW#!%l$n9Uz=s|P&=an62mQ7O0yf_iAT>DW&W&0_mO2rjK&fNd
zqH?xzO9>*H>fCVdm?3=haNyh(rM7*#U?hl$3uh#DJP^>e>4Biz>k{PSg5%|hEET}D
zD?tYWw7Vtg@>_(Ben)_|MaAaUrogqUK%bn^A!I{mbap)utmH!pI+CDcAJk~>O3;A>
z1#q2sAQ&(SI+W;@nmu%6$F2k&NL&HB0z?Q>n_D}gqO#l$oq;AIJ~#v2@jy^<Q-G8;
z;e#V|d|ZH@aD8;pA9x^8;2ItXR^P5HwJu62mCh}-DN617xPV!Gx;on%4GCJ8piKel
z_@$uR)W?z2?L!Y#Z>U>P2c%A%F6h_;K_9mzXjfJ|l%<X&=s;9d(#j>ZDL}h|)aI6t
z3kJI3fnW%C1!yNwYFo6Zmet5*FzV!`Gtx&M2s(KpKx(>O(7FezH@6!CwB_RhBB;f&
zL&UKMf)%qXKuTxjpt|xP96NMv%8EO()V3_OB}*Mhkfdu@P~TK`C>On7v9rC~5TK5v
zUfJ5l?nF|P6K4!hJP?ddQ-andXu|_Fj*r$Qs3Aey60|ANZ;Dci=O&JZcO*-R4mCDp
zsZB}O=DMtSB3qQ8^@gN=OIAD(Egniz1zoVKiRoz8<w(>eu1;X=<wzV!x{d=CPh=@M
z+lK-4yMnIc0|`2kL%1VKoyf7@^tlj(+JOYg@!H;$W3M{oXzyy@nK+xiQVu7MjYD(F
z#93_wyW*=&S!J#qw%e4TZ4U%=h*C$&*m>nx<{J{UE<rx7=7zE}{^pR{@Iat@9C#qW
zwJkxr9thAAuBn5*>49MUH$4!H#I7tQK+Q%&g4QLj0|`2k=(lC56M=q1RBUehAQ*`Q
z0qSfE(2h?kj28_~>WtUA2ddW<f29uf2Og+#tPTTisUumcAxa4ll-ib{bqU(_aWxye
zk_bV4bKM8Qc<l<%&ZcN_*Y7qAA<;E+hH%3J0jUQ9q#Q<P&PZ&^ibsB_X5&CsTo)CU
zvg6`9krgEo9oeEX_RSnsaLWV1cx?-iI-1QKbCxol&z%9=^gtk$cO|GJK?gplvE^5U
zq1ctB4rHkSt|Qsvp(u3}0PRT7mIQSK5z3n35^*9xYHnRz{-^?<Y)X(suioLgM99H8
zmZN%nB0)z2bkdNeHs#o_%Ra8lQri+F`?%wi3M@yZJ~=G6<$(a#kp!K1AV7cMfk6BQ
zN*#()O3Zz7ZXMLE$hAY*wg+k)s{@q_TK7OOV4Jd30GBMKyt>^|yB?@{xb3$H)D!y8
z4)r@82yh)p(2)lMTvYMK!L{pwfScAm5G=?eAJkBM;#Tx=!6vXSO6{CT^d}ORM86v#
zbyLu#9<w?`Yy{BzAQ&7%|GP6d9S;QE_CY{bLzX&}pkrBaU4k}6MfE22cSmOxrJBkz
z^1HKp_(Z_+@LQ~}D>n=L3;My~I~Km_z;`Wt+ktm1e3!#JIdHXj34Y?hj}5%zw5x8n
zC0wx+!QFN({sX69YUd@mi{G|;;Pk6w@gF$&4?AJF@@)u|&**XbduZu7bm%!e2*VHR
zIpr<=hi<z~3twm4QCCXbyHd%2dY`?QU-0rip2a$!^nJ7MVXo#*Kfan__PyM&`K(k<
z%4i-zJ(MPzVbHPsYp=R#GW~>+J5+Q7-Uy4XHlJd8TQ~bLG}euKAG0_R)5$f3H#nxm
zP9;j>q-*|aBI#YuQvgIjyT1zPqDD`paJm?d`YNJ+lGb>Xw=gjjw!;hefH6d(!fGT@
z{XdhS`z3~c`m}HukFiNFMsGUr>Nc0O*H2)^CpW>EA%7hExej0R6U7^Uk=rvrl-&?Z
zvRo^D3^r9&QOm0~(iT8Xpk~w1;YB=6%Nru8s>++^<sqZ`r7DKR(S>TW$s0=2m=j5h
zSIKKQiv+0`{ID;=Z?Mr?A_Poqr_<aV^HFXvEV)F1heWOo#J^l%I9YixI!j_g2imW?
z27J_i=}B;!_)2Nx;E4G6RdkRy-p2ie4NIbRdbYP9RfC(ENX2GrnfzX*N-c?d7v)eM
z0E%<2)6TI(;OwjYNU@eMzFk>Y$jT9qQodRH#SQVV`&G927w;C1jiNj^M{!QN3M9hx
znL^ae6P6Kepb8j1!GNTNqgO8r<4He>F!(4Xb5lV^vy5nEUa3+WrkK`3CB?2d(E&}F
z912!V9+jJ`$*rz3Hkj0yoEDX-Qt=j>aSb_Qqi9C*6XjYvJ!4UJ4bS1fXM1j1B%Edp
zeL1=@nY$TkhU0$u%N+5lvz66QJhAU?Os-)+LefJqxD>LH;>cm&i9CFl8$8#^4fe^&
z2^J1B#^%loVJU+gszKJWJclRzc9(LD9|$zOm`nt`doHIe7U&9G7hqa{IqJxrf6~(8
z*#6Mky3cwEu9gs=v)Xy=p6L=<S;6x-PNW}L*1`DPE3Sd?3b^wl)8+C0gL|<4-3l`O
ze(K|bZLY`CGugj`VHs`o$t6i-R5|^v#&ZOR!#%RNmP;_3k~z4SjoA_vScSPQ#N!*4
z*)#6<RhW3C+UrS6b2Wq~i!=iVKX7R}n_Q}mAx+>Yabv<eIyviA4N6R6Ri@Rty83Zv
zWu=JeHmS%aN<%bFvV=9J<k#v-Bro-6N0{M~^*@|XC-W;V=W+u_uBw7jB;9z{yGT+~
zQ2(?8=~tob+Pca^kqen?b-I+FLRhGG*><3kII+~KE3g2t?<+f7EIg&B?<-DI!M9%m
zZ@Q{cWG8Zk7VW_1Z;Yyle`qt@lMR<eW#gEuSnWEFIiK}Cr%G)UcN41|VCd+e60r(?
zVmD`cbrXmcLzAQ8i!(hRYdZj+?m$^VlpxDiqfpOpp<u9*ugzvB-yks>Cu~IXgsV*<
zEGBK4sBJ!2MLbm7s1%~MP~$_jDb=Q^N>Dot_(SG+W@5x$miTo%nO;&B#J*1FtAe3h
zFlG!bv#rD}U(1fd4)bCl+)v4LI_#^My_#WCB}{D^ag}Nu6IPhD>!$!!6|?l8Zu5TL
zLPNu{wWzaOiFF?k`!*19IKi~47s!NV=1m%0i~$rrikS|{bXP%j5-tz>Ez@ZgzC2<<
z??2D7kNAs!HT;^D@bdDpvW7eTve}WJwTc|*7bKv~YjEd?oIt0=ekHo?_DwZHl8uvM
z#AXY2?)wtRH(`SZ*N?7c_j4u)vl^^INOkWi)x8I*yTxr4_nuVTRUulvw)|=Dj30k(
zt7iGCZJR*6oNbOaTJzac0-QYu)n5IlIB+eO6@6DiWQ#@9B=Y@=)#PT=@K(;^HSUt-
ztahG`fsQ>`0Jn!%6qQ_kXBJXb-(7YH^jDkB*^qI$UfK$S6U*5eQK)K31&P1YxgvOC
zdlj@hWfWv9l8&Z^jBHU8_yK2T)6K96Sbu1nzoY@!!-7QT;F+m?+5Wv0*ZZk8iz|ev
z#2S*|PwyZWZj~WX6?~g}*+pZ=S%#B#X32~`E5DfSGQC)yE_{7Ym7NCDc<XN^kM}j$
zMH$E^!H8R8T95H`Z!PQQu(_gb-7`q%Sl7vbu-v%Lc3o#E)V_*w->p357?;`7!-=r7
zgKBmZusi~)%k1sMKxvF~Eb^R?$Q^gph(qbUtj?L<7CKLxod<r705v;A4kOrFFNMAV
zFr(zQ^Dlb1`eL@baB_N&JoT&GcPz91_&#z?_6z4yjZh%5lHv87k@ctVo~B3|`Q-C3
z#Vj66#y&F$m<liYDcuU`pCApcg2#J3C+v)^PWYAV=usi&uY~Ojb|HYGeL@USn9OIG
z_Kf6I3Iz3%t1LanWQ-X((o|hsA|#%k)6wpMlZp@%oziyc?2(q<P**a!sk&g(+!`6a
z7u*u>XR>E0Y4dcB)Bc&0h~v%2;guc?l`ix;nNmuQD&{x9d^VKT^)i{Bt22r{g9z)t
z>PN(9xl(xEcJt;sjPuGKxhyN_b!tXfD;b^^XG-(4nBor?Gc&T%AuhSrHSFev2T4#e
zv_cU%nEh5CLH$>u)vWRI@*W|zX+k-jet{!hIm6><ov`N)$L3h;nVZ5=#7z`zH3ex2
zkve)<guB%lal*j!$ecJIvEm-#)_g~LbWo_dC(=~x&|G*e+n_(hpY8svck30mXLonX
z+noXbiZ|a#$}88%`JS%lbY_{f>}=dbd8Oi~1Y=lGZugQjRa#mql{>276>1ljpmDdC
ztb1RlDFnCu3~A)drQY;eo9sm543)Dlg)||l_p8is`PTqp71pSV{J!Qlljf*~$?>ua
zn~c}Zp@NdHV4CGtK%q_NJsfsmxp+95PZO~)G1p6ysysG0Uxs8ZP;{9Z$l!5VV`TEp
ze#bV-rXhyF^jVkl?0|c#==OT}BQn2n6(cy0f*rGg(Z*;mN6<85%SCwacP)_}G#1}X
z*k$+LOomuwuv`A^&8r_@7j%gflipGq@+@Un7g)g07M7l9O5Fx(RM@$22z)O~x$2Us
zs1)YRObN;+)6|Di#K7>!Z|!N?mlTdLg5r~bJ!{OTBb9~NjDN|uw(2tcS0+5zt$<~6
z-><@LP@Q#_wCEj(lyzpsHZ3EWA@whqvY|Hk?Q$>MH4)aHv-Eyu6_7IPt_|(AAs4;M
zNDAfMgI>~|pQ}r(Yf!W&*CeJVBT7WC|EwkGcj(?eqlX^mea7p^%lKmga%q~VoOddD
zF!X4Q#>R1PG{<YpxbUl{`&UfAT=N`19-2<Uk<<KL<1plXr5k!*E52)pLv`6p?OM{;
znk~wh*ZEuLpLRI=LzSpcOOP1;58E@^d#SMI<8pdrG8db!*Gf+D<z6cGn$2`9+Zb|A
z0Wb-j8K_xs>VRqJCo??X!f3{p`!MUBD@U@7dDoNaN6L;znV=05g4TL9NfUIRN@wwG
zo)*wx3!2@H!$~Fev4o>zdHV5Vr^{u#k7!JEoW<D;eJIsSmHVZ`w%!WnKJpTlL42N+
z+>KX5F}e$K#1C*3u^A%09oX}WU~<vj>h2b(SAEL)39E<g_5ll;-6CiUdON&K;55nm
zZ<ZrwwA7zNHF6|6F9YOjWN9)psC0j%xK<qqyE^GgW#OD;RP1b%U7}&n;`8)A=~UlB
zc_%aKLX#F^_f1;VB0t-!3sykvm$V<8o29IH&aI|81~H`eZ?T~cK|a7)Nj7aiI8A58
zb8mOmv6Z2<f4i3mp-iZ`wmPG8D7lLR$X2MeCd`yIVODrX<8G}9GkLKxBhs+c>Fmrs
zPcJYvKzVU|Uf~SuJH_aH-tO5kySz5ZEwKxW6hxkdeSxl+<J|-z1zl)fjr!P-lbM^#
z3uBfCS!q&>f(VmhBsiafti62yINPu5DUJ_J>7@H1Qa4bp=3=y>?uVLHu6<S*DpnZ!
zhNYooh0Ngr4N1c@akmD_#bIV+;QP3DC1^&)-F_bG4wYTyz`Cw@NciTg&m<4n)*T>S
zJ40|E44ke~sZyIwe#WK`<1{IIW+OE>Z)uL*DG%3`gQDBzM6}xsucz{5b)W%fRNc*1
zm33y_wL_ZB?1A05KwP02B)eqy)EX#LaU6c-{_bH8(qxjrPIJs#O2*LsZ3VD61Jm|P
z@>IA*x#ERs%vuiFL$aQDm1P}!T{YR#p<u}#Y+ap&S>{hQhBHyf%5JU9^M-9-*+R6V
z{vbHy%jCb27kb68!?-65`R2AjAUZp-;`B$TtX*<`cTR;$<hhyYO{Q7@K&s){!<ZH|
z5;=Ff*2Hp`+Zn!DW}SJj?mX0(>qbbF&By7*a4@q>5X9+9cNejzpV+-_6sKyNUhdS$
zuR>0Jjyo%@?&@f@Pw5|(>#1n&8dMh-<gv!CFVp@eACoa`@6&s!fTq$t^gvt1R|YKs
z4j<a$i&Q+0)c*Z-T9(l{43<Uy)U3}7U90b(>|QZh3g?U-CZJ~C(0w@i!MR~<zv3QZ
zzp5!k8JK-G%#xK-Oj|RYs!G0pKNu#XK7W-M8iYSl`?4sM5bKQl$`at4Sm1R0qtQO?
z9Tf^&ESpXW*9ltc%!4A-d}vcm<*k`ILIyo`9(YC+eF*1G#Ur4zf1@su;53d0a#-c;
zvQ3dcoaqGj{YjFJOS1>LS7X*-wDPs~3OA1O%F*fGivikE?A@;3R<C2E6b28L7!BbN
zR)v}u=DO%OUVB~9n&oQyHgh}q`i)yE?yKzUo(#>V4ZEps3CELbWj6!P`lx>3ttmcW
z8=C=BW8}CZm8CO{owzi}*{;pRK5=jz!dv`K_Rhuc98d~EcV#;miA8>)YUQN0uXFdC
z$X}E~C?6@8<Eio)<7$Napn)z%X>hefqB?*E2KOTV<b3K*KKt9DmSX|#ay}#TyJRtT
za7x<Y9!z@kv?Mvg9a9(S>YAH#(#sd8eCKjh9`^}Bu1v*Zv&l3K?xt_-=ge`)(*jv%
zvv2Cm7&gmzCKbS%e-r2Fg-SDIE&85=@-ohNOK4)Q;pCAN%6OQ?LV_tw$M69*(h7g_
zbFAyoU<yWT7(?&6;H13jJwBkB>2_=ByqkhFt4D>Q;~0x&UQ<VXUr2dHiHK-eW>S<h
z1Aud=(#YL|mA+&VCoAgP(ysZBiTU!zr%7b3Mt+)2$Xu^)7!+JHc)x(A>}(G)%Zm-w
zu&`EWRE*@(1S(d{KWwNW3LP$t?wjd@3l-qY;dppCzkD&in$Lb9zCumd)qg$p_ob-f
z>A_+D0ojtjdIPkWVb4)y11hYf?vJW*tL-+P;mkPBJ<IF7ugkA;g^*n!3=z@W$>hxi
zuvaOQDDm_>ZMl~Ys^wN59T7LZAUH=>nQ<_mrLkn;^Vj?C8k&veY%b&H`18H_SyWk#
zpJg?lpCv6{!OsH8e~+K@`uV(2=Qhp&+dt16qd$l3f0&HV7jwO8xRpo7|8TAs^sdJB
zZ_GJ3m-9o6@71~w^ZQl93&1Dqs~3TXNG=5T^s&lf$UCKfO@NCY93yA$OM81IupfA<
zUuc<4-f@e_8C!4B6?AjY?IYY!E!T#ApUY~#>>S)lzZ5y;<mz))-~#HLDtFwZ?>H&s
zndb!uVN(lko$hj1nn%}y)u!!GuDMXTWCr7tJ<_h1-kx)$@%%O6h79(vj5K7b=LI#h
z=(F_)oZa_MbIx-HGj8;hO;1PZS$Y+ZRba4o(O5oA$>MYF=MpZfIk@=z*;D+?YLpD*
z0lzo1WEhjna9WB2?{5%ZagCC^1Lkkfy)XkCCJPLdu%@yw3!u!+NBz};jRjC&P12!w
zW^Sp<iJkTb+gvSh1ep}g01l>;OM)D|dKnmC$E@$H)gwE;%U0)8W%LLw(tEAaH_ASP
zJyOd=0T%PUl}XM5PzC9kcVOFdUV2#j_mY*O%eg<RxeJKYoG=b;1TT^kC4NL8{ECrV
zlh5s9wNZ4C72^49(wiX1%%H+#Feqve>~Xyrhs0OI8JV5i#qngEczDvQWHchXb-PFx
zyT!tEGJ>*b8tG0x7Yk39u4-=QI%F|hG-xk$wP4I*%J57>ligaGxq^94l&6L&?Y}rT
z<@m!uk3YWp@+2qp*dMx5p_noslN+^xF`|-Bvpnl86o*krQz(z6JhwFX`t#N6Y4S;l
zjW(944O8vrZa;_@W*{1VnM^;%Q)_tdPAAu}%b52%ePvRC-HTiSQC$2=v-E3$a2hOc
zp?ihvAt+c^sxhcJhmESLJ3zMnfvS^+8qzHoeBFtTPVg&qZGQD@AqM)KmeX2zTon)H
zjw;~(c}(0u!f<{y8uoA^Z9`eNvKvlVMKl9hFps-M^E$sOETMvC?E?BVN))S>)ub+n
zK{SCCPzw8fsyiG_gW6Gz$bcGkKekh@CHjHmXUJRw!xunHuvy=k`r?lDMiUGq`4v5@
zHgdX#=J--ZLzvL+Xg)11CQbDvOd8!nvACe=t1ApHbpHWbM1VOOfRI@jdx{yoXp_zJ
z8FN0m-W6KZT}-au7~!m9Wm!l$$A#P$2pn?!?Lcc4hq(J$eZg*-7sEb_t`~?slZQ3#
z_g6(JhCO%B;Oo=bJJ?drg64TL*n2ifdwyG98hOujEt6<fNf_e^QTQ@0L`4=jFSnP@
zj0f(3yk|7V%gTG|t~U6k`XJ86YrK)Wn2h?$*<+ze@H@BsVm}Y%sAJxM@zdKCL!l?Z
z-oi8V?!!4&DLaI$=E&hvVh?v-Z+Iju@<h#3Q24DaxgJg3M|f&Y@s99P3rY8$bLUeS
z8ZW^x*(bg}^otv35>WW0^y;07Aa|PFd%IFeT-Rl#gO8gvZ?a;m^izyw$QjIe0ygOn
zL2EaWn^ce~P%4tL-FTg6*31pIP%Sj@(e-on__|sRzO~lxs$EY-kE<zgNalLM1u>_u
zmR=EMz*CJ%Fjkj|aKS2x)$R@63d?>th7Um7n;sl0M)z^?dg0Xk+Vzhfb@tLT3nukd
zYnf?%BlU3P<z$+;SJOXaAB@Va=umJ+DkDO-mtQ3p1Vx@(Uby|Gg2BClz`cU^O$Fs}
zZxSAv*I3%SUJ&MnyTuO(eKGhkN&4)FV!1ANaQ=^<>0DjSY}rd9ggU&aN;rCIHb*QB
z-GUZdYMlS#hTW;9SgU$1ho_MyM~BncTRxS3^;`qyF#SOn{l_pJb}8)MBNI_5HFg>s
zGSU2@gC<4}qcWa6t)Drj49oFmQ1HQ_XnSEeWV(n@R}HTQ1N2j9`=dzUGJ5!5S<{MF
zWDY{-yJUEN0f#VLvMk&QBj0O)OMwNAIK=`DWe=U4ZmbnH>$qi!_B}yh=JXyb+EfWn
zzbC<1to7^}g^2HUMHeRx^9VUx1EzoMF^zS!38>=PDr0Yam-NPymWvb#7E}#M8IEHr
z_V}?6s$Bx671|d2Q2vzwi%e<Fd!r$H-C7D;``^FUHFMxqit$oKf|;?gq|J)cBtd1R
zScs>?xN4%N;fHyG_Xwk*XI&&+OWlM8V|CGc)e#L6oURp&v8eA0U%QxHj>;Ng*=LSr
zF)cOR9sU&*p?Efndlv_j{>>k@iFYij)x6(b>pt|8M+`OhEzVcvwfCrOrD+!$yWc@5
zJNsnh{&hRJg3jhw`sMqvvNo=u?c8IVUuK7UkIUX%k(6B<)O$7muk{5Hu;zDUW0;mj
zquR6}yW<*|0-be|P^@ZD3Yc!*n|mzT8SVp}!kI8s;;yos2&uXJHFT_CX<KTAe2=z^
zym{>>E6i&^p)w2Z(4pmWGEbAmmjh_uPhm@c4G7|Ml6s*BIKfpHx+@fyWeYCH@<^8#
zhQa28*P~p5Ex9Q@9AO|ejIyTVD`a6Qvx`!B$4uW!9H;Z4BJZX{rb=T<WY~r2(Kb-6
zlCY4Ndr;gOJ@jz23Z=N4PDY@JSyKm0aH~+=rT>N4hi683#8M+H9RHQCN*(NFb@yp+
z_???lb}1j`8}9{>d3bH=E#WM$ch1hdYOkH;ySVdt{H+%GQvS{r^4cw`uw=hmVUHtq
zg9Ls7?PyB*)9hEngkU^hS$1MjLekb#KUb(XnGT@}2^m|N!BlFH1$Z(>xmJ-=vxkgX
z!7I`^(z1PZq<mg3;#6r@hKme}{I`sLL}RtZXEy_cu4>kuV`Tr_vUh%}*bm9TiP?SQ
z7kE3lDp!1iyj}5@SP;)_)?BgfTK$-Kbi<r4>4x2rBz>k#?M4t-R+oJhk3h_EhbI7s
zWem(`he)t>;_sdLTlk{wd+AP=yYGI@Qv1J)YDzW<&IbWLaSPmwQI<}p&nEeYRz(hN
zOqwz_BE$4hSu933oi6%4wSC_v7yxh6HlM217_0EOvJBlpGNM-Rfv$^Hob3_=dJd<`
z&(Q{0%lN{z<uEN(TXJ++^%KryGtAS|HowWtBkSgwca*zqw$GYndqHJeD<E=SNM!|)
z4o=jb_dQH^_FWOcL$GH&5hl{k#u6GSsn;;MCWn>`8R=S&jPFAx+l_Qn1P6-%;RdQm
zD$5p=@nn8}@zZ2-X;{+GKwW=UD6@g67Bbc%ggnZzMP!)KBGO~}+~U%JwE((o_ER3+
zas>Nb%ghP>a8yx$`kY>ZYJQa9Ej1J<T${LWN&*#F7RK3x-b&L$>3Gzeqs?Y~uAcc)
zyUa92zpbqzWWrz}m;oV14;!N5d1Lp{B+H8x;iJ!SqEcp^>z8BtqrpNCZ-L6b?n;0(
z6_%TkM*4gy+lkHfCel*k!Mfe<xH$L^FG|0*Z*og=sIC<aK#pRgwo{EQ!!)JI6(tbJ
z(*X)eim9!9d6@OklWZj=`$UAahdvJjR)2kX4G}QEAtkd#Qj>=Ptbw*yZzrciZZS(w
z7X6?c8c3%WzGBws*^Qc+$+jn1t72lM%veliILNPETvp)?JM4JdTOoHB&G5)`a#k3X
z1x}rp5!3d4303Ui?UKbltUwnlokQ5&VnYaugI=00Rd-yiH&@wlCG_>MKfB1;n18`<
zde1{G?CNt#Bp?ZR*=qti^Vx(j_#6mgkl@IM@RKOmW8c}41@vE(=XNm`vKq8bp^4Ih
zF<g1*xRLeiPV>qJ@pe)U?JABzBKP!S;<w4OiyH&c_F#n@0{t*l8+Bn%dt+Vb7kWz3
zBP0_IS)^DnFQV#ue=zWW$QdO!EWB!Ut?dve!ocUa`ca+ieR#-Ag^Ji42LD~OKZIZF
zJd!gbIgh5r#EC2AJbcf1DuX30>x-wGuLv@f<C~T<Xv-Z1bAx@+%`u;NmJ-$arg`tO
z{pMxzi!A7z%L@x$c;>!l_FG%&K??$2jStmz!Rdl~yYNF6R^55e!r=dNU0mcPNzl{e
zz44r7ohrMru|*Om+4m5Z#V)Fu7c`5uJDCpg@_eMjJSz)@(0=G-rOhx4D)QhHM-vQL
zq$BIZV<jPV+$I_*jSwR)Yi9yDdC;q?*i@TLGki8}H-CYEU83K$_c$o}WT7JU;O(sV
zW>Xa}3gG4^r@R1tafCW!()aQ^fN1+pd@Qr)BNRAV6VA|>u$tL{Nw$%NW@s$+qzNZ}
zlsE%PAnjC5ld7359ZJjQ{8ZE?mRh5>JIV91sG{L4<rSvyyIJ?VinfAsa9GrL*A-=X
zh^D)|JY;$StsvrvcVCU)=(d*V9f!O$lV}e7f38Fe<n@*hb>6E|Z_OfJ{#YlNF#O(#
z%|zynrC;5bj;uj#aVCLg%*}X*?7;j5qomj{yJekDMikh7i0LTMGIEiO`gYN{_<`A7
zNUb-Uj=qQ5Ahz5Om&q)K50!hY1hW&_Obr}i%l#R7Ww=0Z;V9&-9B16~SI)4pGk%Ir
zA*W}NzfNE*kH_buVS4eviyg#6&$kK-@{^U`svH6&mV5L{7@y>IlY+{jRWk=F)lVLp
zgX6{M0PcPV2jMA3ph97fUu#q~^Gzq14jAC39k*^+rPre*1|I1r_yAQI{Vi6!2I#?G
zG03`U$xTyj3xQB|!d)5MYq-yqL@X%dpRP&;J5Hf^7WaIbT*hSDbGol}P}6fh8cVv5
zZ*8Xf8pOejLomTN0@EZLinO%1LU)+&+G6(5Jfs@YeDeSOKmV`G6<*|s#lyoo_^-*F
zqFYYbHjn+}yg|K0?Z=&Cr^uf-&Ev^WCSv!ZQTcIV*9=9KbcaK|z*@TU-k4%yJeB>a
zGa6wK&n2Yj$M-fbV9D`^&E1c6Vx)khASPWHPSH(7#k<fQwZCl`)~6}ZK1xhnj0}DW
z<%d_HFZ|V$_y}E?Tpwco3Hi-D_4nbVq5gy!BrJU_V_NMg^V>9_{xI%MhqGZX>k>uR
zaq^-%iBma*GPN;)N-V(vS*&3O4FzE1p9Ar%<Yy81$B=KsmAJpXQOkcP=Y97d)Oeq{
zo2mCH*S;hOa}K)RS5HUOy)+x4@L$yo8$EDi(`X`o7^XA-(;H%3JDgGBrRG=$VgnQv
zI+isf50j~&IvN#@EkpW^>fC&9GmeZ3M=v^uKfQSS;_!_ikq{qIY;X$csQ(21Q-5Jt
z*eDAC=+Px3szrf#Q&CQ29G{phRE+t{bk}>W6?sm}9#xsGGRm`(MDB?qa@8cCFs=Qt
zG4&(xm=t@iqyIF~H(GjEFvZ-*QKOqh8T<lS%Cd}{)QZSH$E|fd-IvMD*bb%bF$Gcd
zgc1k@5m`p@ETDeN_dsZvFxRFUu9q?LUMSy!sT7DC`P|LE8b+_q>__^bCewB}<vBab
z74ksj&I(f+jFk6RQYsp}AEkj1V}Cuhc`?8iQ%pI3?n_&UAQF#D+H#`^TLTOpAbAlT
zpnt_>^3~&JCHaa&rDEabBoz6(ju@%8#!QA>_7Ct#0Xj9t^@(RsmEy;}>Hp+@5h*M7
z33m?5IC*`0;S^e>j}F?uvab$lp+0+e<_4Wsv2(Y9ymDN}*?aI6dxk)`yz6cixA%PO
zUvbL$tNi~Kp`OyRBBhSb`j^w_XhHX2C41ezib`P)YC*B)BVv)+aufhuol1+t=XUG@
z-5ZEJbuzdz1sSr1RTK+x&515C_0>AQf;@2R1oRBQ{S}$cISTz3sCBgMB{b&Ja+oTI
zRko!rD!Zsyj3gfA;MJx54Z;?G^Jb;(fss;LjRpVE5Hs=?4DkIMU)pqb`g-8B8jvE^
z!19O1h{Plh+e=Rr0VLiLK9u^T(^p~G_!e_H{5%}1oV6T`x2Wk=(xb2>U%yKQ=v>Y!
zekIN;_ur*5Biet3z|1hR>Y3zzyz<AW^Q<%Xm1p+WZ54sW3on&uhk2NDL|RsUMVZE_
z2@178eXKc&E6BBbw7<Od%;=UY*}TN;qj-Eir(1|%tSCQImMuPHa-wiOgwr%8zdm=<
zNBND^D5T)4LAg|gHoW6E-r;?o;oXf+=Z(k;!|?z^V$l&t<=cXmO>%RGHB2L~<LQiN
z%CU`ORHhj<?WP9p0>}Jdhrz{jT0aZ$Og3nRQy&&N_|BG!^hLPNa<$wnJFs7;;$AWt
zFpkJLx#m{a>~)wJs;hZ=Q7$F?jL4Dw7+)r#A(n}0N6PVWRCwlAwjPipnW1(J1=u`L
z`O}e?wwMi@jWk78O*roJx9u1-6+p8I-Si><5VO)-1AS3V4YDc>H5)C8iSjz0U6ir7
z6Fsqq&$^uFcp*wmUN%f*hu6z^^{;7)R4zNs;5thik~l!w31Z9*9j^z-F|DHLGfbyN
zAQszmD&Dhayl<Z?vNLZ@{(6NcbZcIS(G6%+E4-OpCbJ>34U!Fu*hkh)dNDp&nV?Dn
zQhP8wpHCIutLX#|IhRpkf+^Yx3=Q6yc9R9DE+*G{^J}6P#Z{_?94`s4CaDT-#JeyU
zjuIX6mIvRoDrM50pQF!(NfHmh$%vjA=s#=M@pN1f=>hoHviGfkH=smfi-y$B5)wm8
zsaVp}i5pwd9cLb3+Tue8@JstfM>{YSI_TF)IRaD+VW^D}5HMx=EQ$NIl830W=VdH-
z;C0DKB;}?mV1=y+GPeU(RON1pJjx6c1*!A&go`<pxs0Xr7~D-3w_xp{?0evif(kX2
z!pOQU`C?T_<Sak1U)zj`M}Af#XFvp^kgu*yl3)Yc%gY_Q{|P>c$dVd@PH=T(?}{;N
z@Mka5Gcr+WJ{}gP_?lMpYTu$LDR<0^+3c$I^yvrC8>RzTI+yGQ`e|dwe@c9blBXO8
za$#ndg{ScunyKSF&jutF`beji^3&7*yqnkIe^vZv`}pkXd8As&N#}T}p6eED?nIHX
zv@^PnZ&KSDZYnB^s8W|yI!Rcl7xcbuQXr*tnmC#2M1tl(%wQI{Ds;d*nvnL@n@`i>
zr$lciC^*d39PN2t%5{@5F3aa`948GR%WmW=YAQI0pE}icIwn6HFTuMBUp`EY+TO?P
zs<0hW7|a_!e6xvm{V2ra8yLWGRn0}}=l}!@Upu-v?3f;l;S3aQCa#H-^pvSCJrhOL
z9}Ws9+SB1gdpw+ImM<Rhd(}^SXHFJ&+XGUiG_P4!Q|Z^83QB!YBdm3VSk;TnXmJiy
z{79Y~Ub=bPsyx6eCnoru^;!or?eSoyxw77*p1ra2uY1;y_$on>spxzl2wTQ}ncEVU
z-pi*#j}-oAJW-`_85;CP>G}Y&)R;$L&^)quTWor`*znRrTD7w6i%zxNNPO02lb<o?
z`ymMava`eJJY{}WE+G8MIcGI&$T-ZVHhm*Mo@q+$u}q1d=U!^eCBo+g&w^~)v(3R$
z)L!9)1UQ3);gVeQ&i2e+<>~W%3*BIB_#SWfZdo50Tf#9Ow<vU%`9vCBOFek8F#n~V
z_dQ8_@m2CNo_?HPwe)G7!%R7&0JH+`8K#V8td{x1!o{t8t5DA>eO~&}yLaXV!iIQO
z!nxt`I<Fq&cLp%IW<1^Rlj#im!(7k3++iVpvhUxMOIU`pL=nfas2idH9`%8iRW3R^
z7#yQDqXdv<Db~YyFOo}SG|i%x(e$fP3{Nr{eM(Axw$gwG=IdV{lbZ+x!Dya1FAG7T
zBCl?W!-_v>@k3!AWI#XP_@X0p(<?$#^9(~6AX+yh#is<O%S6>yto&Ys>G22ONWFd5
zbM0}EF)wc-EL+Mb`pqzC;bq^JDQLd4rdDUPuV&_-DN>VVUY+@=%8a*M;ZbA>3devn
zY23^9ZJ&AW=lD|Pr6(gb&wJhCJwZhMSO?FwMFWqZvlc8Pk$0B!+PD&G7F0W%eSVnQ
z6hN-6h~&v3*-e>k)jUutm$dXPRUDTBsB^?00=cxV=uwbYB{OX@;(Xht9wd{ZK3iLC
zSlujP&e}>oD{G=&1gAC#-C5pyZezQb8dOd(7<?q_s$8-z!2!#xGX^?T>yjq2Vp$Ug
zwyX(e`VHJ^S#(&eR1rDZ1NKX=3aBYROs;($hxy+@dD@v%;H^`va|V^ZqS3`ja&4&I
zKu(v8gUXVZM-kO8xP_N>846{@u84k7?Oa=P099!;o0ft@Bl#!_^PGulC0IKOF9R-^
zycdRvdQhkr9=fdYv5=E>e=}U30nRnO{feTeY9dsi6W*@{3|~3y&Sy#CBE|<<aHLUD
z!zjLuYkn)C*>PqO;eT{aE&7cJb?jw^H>DEBBIhAg2RlkpIGDpWnG|4?O=%Z^^XnTE
zw`{>hlOLzg3^u*qj0&sF#NHBA%J-l2YAJKV4WL8T&(qQW$!SIss`KgSo>R;!>)J4T
zCUYBF59km+>NBinZuMk(2>-y`!rD{ORV_KWGnx(fve_hDKi>nD_kdVwwDwlUZo6}H
zX8j?VVUWD{QDH=XiMKoo96BT4*|(Fgr%Bb?^0g_4Eh&}m4h>OPQ_vzmn_EgXd%wEj
zIk29(sG`4~6{x4R44u8MLXaP`!xsBd-OKouPw~&Q8o!RAP*X$~iee(kd)38p*3x-5
zg;}mgx{@XbErlB5+2_91QMd3kPVuV!0V>3JfOAHJPoeHfhzdBomt87cGn;9e&LXyb
zn*|jY=rBbfoD}ENUJ|ko(i^)OtiZx(_%RtN)8Gf?%S(9iDu;Q37_$F?=NtKcU9qj{
zmq)KXOnC!D*DW(`H==KN-|Z&A#;QlzaG4e|i*vPn8drZmtDvRXV}FkfT87!cWpvmf
z9FBn+QvlakIvlg%)6i3gs54E~Kh(i5u-mJZG)SgAN?R#aoB{Z_a8%cm$!D0q)Ku29
z(x`nV6A;}>>9nXYZz{Hg*ClO^w%Tz&PK{+(S;Pn9nmW$Wu_gP-)<KhaztpIe)X@f4
zoTfNi3YjnpScsiEktrJzGdMWFsyG436b*Zdwd3AJU`W_8JkV%>F)O@ndu(5R7`MWU
zUW$*sy9w<hFjhVSWK-bB9BJh9Z}S|7AoMnPjn>guWE^#N=~F;{<|wXNzx`sWtE$FI
z$|@B#@sRNEMRAH$yaHo(kf*_OX=(AZ?)gnGLYHT_3E2cpKj5=?{{G4s3-YWUJ<O{S
zO2BT-A%XXv&|o0L#VcdL&~Na*KmOMnMXz#MRu|>&Q8_2kMM$+%MI8;YRFNi+m8zNe
z`Q=bBxKNt->@#L*(^13DlW~HUh8KNqSMi>$nZIstGp)t5x1iNZ4_?3ur0W=sZFw4c
zn~ofKXnv)P<vQVNrb`(J>!qKZl~RY))c{F#j*lxSq*a#F)%<DCaAEvVvDzp}f~{Ab
zI=jTmSd(V7A30W^Krp=Qdx?j6bFD>WE6gB_8AApy5lvseaKt$LWiQkmZqL?HuPnot
zWXr+v%#$7Qees;$r0jJL_Ql7T-yxp!IK$y04R$U2YQpK2Jv^akE!<mt;k3DB+^Nf+
zIncbhMOW!6!{A^HcGQ0K`WZ}X!MgdA|2ReV(tV8LbTUf`ihXo(<#aI;ob7a4BpFpf
zn?hYS-@G1caO905TeSxm4M?T)ey||Qk16S9`v9$zAF<3*&lVHP3f(g&X4Oy0IcoY-
zx(+^i^->4wQaYi7VX8|WO)gb_om@0l2V0H{#ydkMzuUFAsE}deMP;1CK;a^?Q*ZPs
z3Ezngp*tAGI0=funobMHaxmyhM~=ql=CQY{y*0lAWJw^H6~mI3SOEydCt|L*WSTvR
z$+is<-SuMF?<eDG-0LOE&8`&QYA7$6DvY}gs>;rOb2IK;Oegprl;-~u{=^-QSy%Yv
zr%=3OKiC0Zyfqq?LoFcI`0+SJqYOICUB}aYs@!*G!|rf2oZYBXjO`8%D$8F}b35yP
zwJjM{P!V{n)Ml+lnA5_mZkkL#p~bbr0{Jz0fT~Q(3F>Z6W=AYiDh2L{^n?uiA(d^|
zms-d$yJ6r4Zl?^MqF2SI%dUaWf&PxF_oizU=%?JQ1U&!=Td4eoXO6^j!+v%?FSl;r
z)o$ON-o87#jp&qa^VzF`GVF{5*>n(EaaU<3?(!zZ)iK<O5n<O@h~eQF=6gmL>}5yW
z<-3>(^=o6};&ro%OYGE%0^8fQ4nE9yK%o<}#Hga!>#Am?S{L~y17pAm%Q;qDCbNr)
zlM(5c7e{ZugVIm`qps7-<<sig*?#%7Ufn%=@~&3dr@z)J<*U!P$>nYG`SzRJ;rO<9
zd3$+zdo{bg>QyRFhpc<54YC-Rn|arSm(FfRmde1GX5^NrXvxhV$EpV&MH!a@TPW9C
zabd&8HX|+Utb4YQ8*)=YO$Y6|6Va@lUOBa%d5=U*)Fl>bT6W06paNwtB3=)zoEa%A
zLbIS=wy4Rds7UYPJxjpl$aCL9{3$tL0UGmWWREpv4KG798AtTQfht)e@ep4-?9ulj
zbi3g{aM0#vs&qO$%f!*U)Dc0_OAxEnlw&Nd5^hA~o_!BlEKCiv-gI7wFwey;J#CzE
zpStkG3WqIkCUK(#-s*>D)O>rRXI5YCfM`18U-%|n@guo8IC!LVFTXlbv`|WO<uyMa
zF4xCw%H_z94j(-FEiNB8&#Z>uoCTJYULcu0l{+^szC0&5JB*50?4(gzl;3f&X6w6(
z-9xDrF<QN>l;O;fyc2^-Z=MGGAVZ2;ny6Aq1py7Upj1+;p4jQ~bycPk@|th*YQC9w
zF}bg+v)UU}wsvYNN}0+G<)xtrmnxSgW4zG^E#yW`thv!wG|OAR38|>0<mlD>a;_3m
zy)s|y15jPym!$jsaJIDA%gOJ487jczN13`|*Q)o7IOTS%elo7R)Gef*6&o|(*>91F
zCCi3jS-CfY{d}To`VTQ}oVBx~j_bQxP`=C<^u+&=D)!L6nf@Bc)OE=R{XQ|l4|GY#
z?`D@4&F<SvaN0-Keu<9#L-ZhVSF{?$49JP}l9H_4-j9=h@`6<7oc7-Q`R)Cr@AL29
z+}%pD*_tr!E1bEMMbY-e5odVN@`Jj2a?L4{7fe1#v}adYjdJ_+b26sa%eL-mX*M~h
z*qQ|`YR|&fPVA*En!Ed`5}^c$c{q)HUlNO-ipk*nd01DO5BCaBm2t;MDY+qMeWBU@
zNt5f^!|u(MHg(*8mnB7>^7{~N6s`X<&0k0CDw)%Hg5Xt>Dob8oDUmm8W?2@g#VsXc
zw0-?aO$pyv(VQ;vXN=(T#=4{V^iS%U5>&Y@>5Jn9a*Q&$QLDrB70gJvlCOzt9{X}9
zUDCw<LoM5fQ>*IwHhDe9-OW++dDIPRrKOkJ%KE<@nU=~^wQzv`?4Fqx|H{sNOm42A
z!8HFkV_Zm7q5^W8b8TCB9DyIHBJ4rvM^HO{bBNc`4(x5`fX9BJq#aIypI=k9KxjH1
z&D`t+cIZgfl-<XWSOa>7Qc}N#C_6D3tcL57_~YB-p8_q2$;ncH+<j%cZo_Y0cMgwD
zPj!Zd$|{6do#v|v@rHYqMiK9DLVC}i)9lf!Uw&Mr;c@c$D+WE!lPEm>f=AWdEaXz8
ze>tB{XpMXg<*R50uDu}NR+U8wnn@piYw+-&ic}WoF3ieFckPgHpbvK4hPDVh_t}Q~
z<t}`^<CeGjKvsO&uxVq7GiER|Q9+#i)$48L`rYPf&~k6gU!0H8bCWJ7H8y?KUYN#1
zjEsN=W0M<KCBDVvhozbIJJRW?02x5er<3_rT2sET>V8{2-tD1}>h(pU-qxBVR$0Pd
z?Jt$|{q#!EQ^UKnc#2+dm^9`AXHf;Ojp0m7zN}<CfA#w9i&sCE+`6*Nw?Do5`Lzv}
zu{_rj=@|i&i+W1zkD(qa?O%`2$Y(eN7(~b9%K(jNewnC|g^w9JHIapQFi`2IvT?(f
z&D&r*+h{=%1`<mss(MKuPyLkkECdfeShv>&W94B!E<9UQ843g<B0&L+5fG?$IzIF6
z0I)Dimc^x1sILJz6zaWxx)A6;{}LR5;0U{!&8A893a=}y|MQUIB;ix>k69p%Sfk4F
z9xBWWR5WQ~){vt=ZfRzi7U^VGI6Zyx1R+lfuRbNysqw4OZR)!U^0sk;_n7ani&XWR
zKp~(oW#KmTCt3t5DpEo3J4v5>5uQ8^%148~Ee^IkVGZ3{^=9*U^wyS_-i{hqCNO~l
zUH)Z!#h&r2^FvGhix+f8+11C&mioi_qBXLX`OEoe6M?m|zdgK|O{Jy(z)vD$FZP#q
z{P|dU;4;2a-|WL`p6wY$;c)DB)zz-EPx_sJQ}z@wob3h6cXYFsz3h~FkM31WuonF{
zgCW%|`mf<hD=M7HbaHt*#6})5?uD!St!9bi>ne7>SQ)TN&cs|A8GkO)m|SCDP+?kK
z+sWC;augt`{)AK-qc1MgVX)j{@+AdJQ@a_1z?a2pXHVn<<&8i5+SYAixy7w3%)#cl
z&jd4*T*T=rhNip*q526LQvS3inOP>U&4Fl;8xUZN{BcqkC+aOCYyw7Nt7=;AtNju;
z0+V!;J~L&Is5aeOWv*7Wayf=4cb1Lue90^;joujnzWL-VQhXd*s@&&!X!voc_cT=Z
zuv}DB6)V4*t=YZ}?I$46dYBH=zTD+cI!o-SCvFWGfFyfdVV-!_Fl<`EJ&zTQ<SABM
zgnooR=>w#9FPpi8<gV7n+HQn*y_ub&BtDZbIJ1ZX53ytx0d?U4GAcOF!t<tDzinDs
z65C1U8_JxHQcTzUGnwE>J?<J~%&5_1j4Q2+$A(#9jtU855bO)EN3DR_`<(eoFDODI
zy>-M$*-(2%5#WHqC<cp}P=nKsDts*i%J4k1w`HeidDnd_YP=c``{tPty(m3-6Z(k)
zUHy+*xIog1s}?@E>+HU(mZs~^U7gM*<Fq4qVVqq5gNEN-r*3>;Rfx%ZTkBEnGQQH^
zxp{cf{Sa`N11M-zZ`1?ez$qsnB9Lm`Jlpw|N6BI-p-dV1HZE~5QeNl+(@$1$fnlZY
z=K^Efe7~wM3dYcYE{yRpWsYY^q0PPQ7I<u^0a(##!_I1`T3PyS@J>es<0SgExLqF&
z?&kF8;I{r4`Ka$gzFFBoyPj7H9&#5O49X?zD(1ZB$$LrnK)!sGK0od=y-L_uEqD`{
z``#i%mG|g^#>bRbB&v}NQW?ZM&B~Y9u!OfL?`5aw9})U$JqJP`%?&;KmiwU4ooMHM
zp8JWvW^=!=Ct&(Ro)}YaxN`6CowtgQ%)VB7mR^DO(ZlI&7xh>cgx+0z?(AHFO3+^M
z`Ln0^VL@5b&+7FQFC?eM0%Hyxt43le8OQ^@-}#Ri6rW*KqR<Nj73*j(c-X+Pus`;`
z;yi*+HDr?%u`g>>ya=)g)H*bN^xn0JryOxYy;t3u8|15Q^@O{6If2vJ^+l45+^5~%
zlWm*coMJ4)0WiH7Uh1F=wG0PYnK4W*1&r^`hoe44F*kJPk&$`3is$74I-R`7=3TlA
z^8@c0cqjnhqp0xSWI1i-#Ne|5A<RPXVsudq=8@L*wE0tO-z?m$p1tg4HO%QtT?Kv2
zv^#^fN|dxHvCd{L3Hhl|m%S<vrQlHEo>kb{lDI=7=hBdWh<(rn%4a<8C9f7`Vf9{0
z%i7KZ<!1SjdZ-@x*!kUMMOg8eGoP!n1o|6znW0j~&)l~U`mjp6EDyebF^QE;&>jd?
zfa0$lJ`puWnHt4rmd#>TGka^1f1pXG)5+A2wCsHJ(*l&<+Uu%j`CSRcni;{hLg^h0
zoj&1U&L$iQ5D*iLup3ATVC0!vASx!gK6}bAQzG=g6Zn5hVJ}SQP0Erp9f;DvnRzzA
zE<954bz&AQSxu0S=tzv?|EqJcl{rH?FRS%JmLW}oZ0YpIMv$E?h(<D<T+`Y(rb#Nj
z7{jq<*w5?`Bzx^qlueT#dC(?V_JtaYbnHsEoI+MqT8zO>N57u7Qn2&#NTq_9digcd
z2?nvzw?>o^Vltnh<w8CB26n+r6j?KhIJJ|s3U*V8^wvmWLkX_`R(s=Jxnilp$jTJF
ziv@N<r59#CRV98&3LnQX^6I`kdw+g8>Cf>-oI>st;;xE%j!PAKah;T=z)tZXd0=ns
zwaCt>5qqDd>N||uW=2XiRG{!b32=0Zi;IzKg$hxKYmfqot6UoovT#<Ehb*;*1lYn&
zj6nOAT~A7A(4kv%%GU+x;?x9ncQS;~Mz1vj#xC(?pSm4j1Vf9JV93Go_y%M8Utdfp
z!_p;Qx8p(_&X^*RW()?S_VnpP7$(yHKcw_an@I|-LbKMW*R}{4&tZX1QvkjN-Q}0b
zq#qStq#rRhJV=4*IQbM6UK%tMcz}FdpbAw-Ne^d6sQ&WBTh`_WOf`1-;Gvm_avXIl
zUy5oYEw<Zw*GWEOPtwPai}qfx_|SY*lf19~sp+EaZn@Gb8nhWERr~Q{^)C+azSgF?
zl~!C+RAJ>iwRu>=fGV7G-1303J<B;Ue9;5@T~7;8T>g=jEtNZ4xLb}ZU%u<L;|$b8
zkU~&A)nWfhK%N27Z56A@xers;8@+8Z-2DtuA+~G*U51@7xxKZ>@#lSUCu&~Eu_o%b
zPtW#%+seImeXsW{Hck&~YrRTeWu1b4p7ze79x#|OL1xGX3Ym$V<Wq4Gr?0NZueISu
z(*hMT1m_9?lAv-tz>4Zt2IVd^`1mn3-R{DFY~%Q;XnI$qGPbkruKlwTQ9&~9z8dIq
z`WF<_e^nwjdlyJb1Y=_Ra~K;?^srv3&1bzbBYkMO<x6sTHM?m&Y((=hifhW4owiQT
z^lu84j6Xp*P6r@<TGeLM!w2y{B!d}xAGGQbGMXv~c!p|IdkJgrqD3sIAt#i4jhaf6
zsowk0hDx>43H)=Hk@$h}5n^e#<J$YH0SyNH+lDT{5a6F#osU>&I4Ill!}K56h+>&;
z8*%Ps;P%7vF#R$95i$1hXa_PS0kpTb56j(}>F~2U0J=3AC;Wr=kNy57Nj~;tDq)9%
zeO8@EfY*8Igj&w3Z-%(+&&QAJuui%)XV?vpPn%u>j~{=UfL5WtcZcWSP3F_eomrC>
zZ8mPW%JdLjlwm+D$6`+&w&VTt@&^!1QCw-^zkV0m59?7k!*=Pc(kR)383_r@E>hA_
z(poJ)GXM^-Ez4D+JbW4h)yXZTnFtrt`$2B0kt#L9Qls2beCE{OZ41q<H2eKh)qp?R
z>UVyZ(x2ZRnt_2o+Xj|fV=@?|i6%+?-L}x&N^E7}6z7l11SDaihlc)cTWBTvTTip#
z^Lm9uGs?ujfjn;it%s5r3ZM4Rg18AMd~7F{`<Q?m15IBp)m{jUs7$N<whro*log`_
zCH?)bvzS}R&e8WhSPKsu&;<Mi+#1)EFV-s>6n#L&PYos{CwV*B`1V#WjK`1lAA&_Q
zG*=8w{dv6qGM-)3ddUzMU5kEzl!3A08{Kc&f?SIu+~5p?hp?s}KOUwhlocLE1^U!$
zU(uBHG6Yj4{S^{egKcW)atNA@o}s8~Vy;F5^)>FM_G>l!dJe7QT=wDL<avLuzqVE>
z_Z~mS$wF%29}t)T_>JbT0<ho82(18Z=WA<*^z$_)sZ-d1vR^Yk()+O+?A?YmD84U7
z#cC1sqpao}YnmNcZFdRu2Pn=I0#zVsLo26)vx<(xfS96gJ2Au2Q{UGbXE2cM-hPjj
zqit-j`@FtK+e^RwsjSTgWsrQ8+J^}YEEcR(jGlo)55~l<2b?t^0w{#-7=FR=vO7)U
zk9*x}^=`1XcE==c*1b;|9}o$E^x+S^)A($W3i|l5`>)YOE3@g%mu~w-ul7FfcBhd!
z!xU>z)%tx}T#GBwHSp3MrD`k#{}{Tc)r_!fCgbgLC01l~S#7twe}l~anJPsvEaew4
z#K5tJmJIP{M=MjStKHp){TR!&<A?}p(|=(Z!un4Yh<wz$NIvv|AeC0R4`+;7qKGFg
zg{`q0JGMBiKzy7@H~Xg|4@FbkgH@u3v6<}`J(?NRp@~7dZJapswYwL$aq#rdxwF!L
zX9L;xIDhXY3e7hDcdeKf>96h?*V;QwYgbmVY|uf{s6oPiT*PNBr66R84(wpy8ft&J
z+q2?3uArt&Ds8vj0iK9}mCJpi1hw0cZhc5fu$e`Bc<Fl++utuAYndLAA|#|TU?E{&
zX&o8i&ve8ihgndIJ1v6bFRt0$a=!@wDYlBm%3Ak~Yrw}wKsuGv1(kcO_6cWyRB!x~
zVq9V4r|*Ym<z7T1wx_L`z*IPaQQ&-tRgi_5)d_wAfA29!M$fm7xNjGWYneo^;I3Qk
z8#y;<$ItD4QXcI0_KR!S#}>*jRqbkWU2fDPwPnPgLB=JO3cIj3v6CB>H8$tpWoHnI
z6V&eS37!O176dUn%<}&Aae{ygpv>QCktd4P;79kges&h9_btfbENcxr>qgzv#u@yl
zd4?!^3QO-Sr|Ftn*kr4%)F#tD2B*tK4a=9Y!VA84>3BL%-<_VmOW(aYds>0r%!cIo
z4+RH%^z=L`;x5Kw^}JKC4C~+A^=J_P*sIXO?6&K$Ntrp_>pk!8bzxhEKH|DO+o#oO
zezoY=3tF<-S=0<fqS_e%(-_ni-(ancm6+;tqN`C0>QJ2Eu>gNs)NF-*@2yaM^e9(A
zqPKqlDG@tkUx{9mh@=1B-u?{*I{l5}wB?pHCo9tb*wFo;kL3Z&1}L!ThJ`iMc?>??
z-o|%o)ofD#U%{3gr?VG$YYs!vhsE;vF#u<nDFu#?72FBT%)RQNfO4xu{c5`rP+?y(
zSuGblaJ@B+m_fd;dE`eU1^RtlJ}+VP_Pedjrj^YDC?@;8R+j)sK)1h5)GKGAK*#CB
zwC)q4vOUm5nX2DXF-y;nKVOw!<LqRpUOOwoYH#n}6_Lj|*O%X&R&Md1Gx+DUeEOev
zXYWqWo>bnQA+&};^teS%sdw3A-rn|ZZ~M2m$sNObT73tY|MTd{+J3EExjlV%_T>(<
zvqJli9`hykch{KIrP-IeDDC|yilgFqe%Vc?Os&Cvu+1ohp(pl5^&Q2IYnbZ6ib`NW
zK@Od@nc)0M5rXt^T&l1A+WYG^{^$1g%U#rk5BP(=aVhl1Ouaq`J$^hWCpd+VA17)K
zBUH5jD`%LuuCiqgQ}~}6Y<>83tr68h_`|LW0Dr0d%w}30$u7|<0$Wv${s2uQEBud~
z!f!4>IStnM#XH1A1DYdV`E@)^liOPfYoDI!QzEYTm!S_SHtc?>M0m<+H1#nDb-AQ{
zQ9f-Z>rwxVHj;-ytgv|jGvs}0v&B;UPjQXPDPlo<@<mas(IQzZK7xOT#YzsTi*eG3
zE<p@^xxE#mMrXM)>;)kr*NV5f?L;9|oWy}oiJ=1I-b?r&iaOxhyb(0w*FRqs{i=bH
z3f9E~Ylvo1n90b0%0rKk7hO`5y`73RfjgQJB$-_W)PxqCo!BA0PfIO=6<WJV;wk*u
zRrbzBT56FxUZmAtaaQ`j%Ko7W&Q$-j_LPw34d+x>_14%K)_-Se)LX^;n%0a-%6w;d
z#IzbbPsL`NgvqEjVH(juYYne7lD*UO{@JrSh<g0vd84s^-f#6zF96s;ApG(CZMk<k
z=$}PYq_Tg31%{>;{PDcGaeLd`0Q~e5@S+)|clrUjUH$nn`*VaihKS>X!2y3f-`w5*
zfWVIi_)!5rB5-7Y@W=Dr-QE3Bzg2BS)SdUHKS%M+tHHlufPjEO|2b@5-RBp5b*_Sc
zBd7E2u4CYTkMkGT@aZasU^vqL$METwm@c_fZQu%-1+;4bZ2HXi+5J^6GL(gDg|k&C
zuJH?xIOd1dht?={UY2S#s@(6(@mlfS7<kp*dBfRZ7WY2l-uSQqJRMfC@0@#<u5NbH
zr{ioH$0DL1Km#k+i+!c}{SeMRSN&S@IqAXS6W4vBtU)x^!*oKXYf`3v6WTPC{tfk7
zI7t``I0x?sZ3V8M?U4!RF4M@TAtcivlC^d@Io*Q(6brC&r!L06*7xInMcb;^+Qol^
z(ENmbyrc6YzsG2>`?t7krzq83Cu_KC({K0o(FTB@m>G4g2Xum_UG5>4$doYcXd9}w
zs$?HPe)NED(5j~sl}Y#nbW@CVjdn>c0g~)m3bym;Tv2+FQQ&?xG&gp)>(4<IyTD`g
z33LFL5gu(X*nM8ijAgzm6TT4@_`8T7it{Ge&Bl4mbeIeLvA@2x)mq=$WLI&#O#BT>
z9XLS5-!$qdUO-3ytd3VR%=$89x3?EDm!xdyKE%FFw^!}LalTi@-2z=zjq?5+ZRvw*
zdmE1a)$QkK*$4jFM&;%RsY9Q~@*pbqfuX)!C&|ZFW|QtCE+wYQm8Vb#>1g#eIczih
z$oomOsqGZ;)%ufb_vcNehJUdur`S7!+luTWDX+{8yBJ`zE|2n9Ugt@1uM**0M5S>g
zwx5*aDsIbtzPC*n;t$$|s}XG|ocG3d74riO9k`?O_SRZb?MD}FWZkG9HP+56(Xf4C
zwQV-3$#cBh8qzfO+G-8=_8U)nEwpz-%{6Ekt;*HmS}*!Svo?5M2fZSOjmXX^!3Hg4
zWGK7FkLtg%4ii62C$N{4%jW&*7;W(&y{EHR1AMS_Q>;|O->`Ae?Vj#zZ6uqOwZ?+c
zf}!$8Y8rc%IdcaYw~XS_ZLyn<G_dUVGNax+O;ATV?dn0bD;qZ-1$wFU6#HA9a?V<+
zj$gqkt&6go40jKr%ZSr6QaDj}Q=3n}O+=$Mcdc%a=(0LSWybk^j=$%oY@g{5NgKxr
z%b?=Z$N#!zp2HL;xOwF0Ah>k`BLU|nQQfIYc&P1m&l@2_r2U}!kM}6`z4hl^hxqQ<
z-WsS6`tSAt|3hXX9D==Vy+1mio!a}T5O(()t$NGgBOQ)@kQ!Gvzdks>K03cfr0~I?
z7!L@#ude?TigsNMTDzQa${=nfC?d1{Vo-_fEg#+7lDmM~C|(Z7lpVr&5HL`s8ta?g
ztZ_w&YP-3?#pzr!PIMk!?BQ7g&im$m^V@ID-D9`*OZMmSJ{;N_AW=3@34y&E3PzSa
zKzxDRuPE_#LsQ&WrGAMTXdb4&kKu3F`3L->!wU2B0QAPRb$%|}!rj|#>l)iK1o!vL
zcyZj1XtP>d>sMMy+k8y+;s37<S}^bzZIGO5JkD_<OgkVX5xK*-0JDFyD>TxF@KOdf
zH)M(zZ(hCM*{V0p5s&UdNa5LoGBFwm$jgB|K2XiIo(yVE(7cYi4~c4RRsX0jNfR_`
zLPN|_mYHsEZvnM33MJeqG-xMyISy=ip$or)?YUc_3Ke`rfOhk9Xw4=qyr|K$9+0-6
zPe$kV*8TBg<)D%I?kG>Fa~#SGeP_ulul4Ok@5i-v_T%qxq&nL#_xJfwG+GS1b~z#R
zFf(s}<USJJVqOss`wl^Fl|B06IJLBg)sNA|(%xKD)C_6g7Sv1YsJy9_^{m}!X1@?i
z*(t5=zEFbem3WQpsi(_A@sG=7I_wV<Si&>XhaZ*sx#Zea$lP772fLJ!8U_uvzVH5|
zle#T9Okcl*G1q_LRU3?7qxqbS3Tx0U0Nma-ns_A&2ca&?uPzKYyFQg-1UDZo4F_g=
zjoL=1Anu@q(vh_O*f|%V6GcTcczrK<#&GQ=#KCxsx-5UWi()1%l}JV6&EFZ6#-D`E
z;50dlXqiSIl|ut)tCBY&fHvw+Bs=LPNFP#sNYWle+64?otN(mZQFdBbdcdB0=(g8`
zvp2sAj<w^M-lUZ_aX=;(au@@l&{YDbtIQhkuXgrAvkCmVfXT#<B>W>hN5JvAPms}Q
zsD7PAq#iJ-|GTHWjLVP89fV~^lP=#px}-EUl<J;+$yl0Q4KvjGB#dLtR3q)aWB<Cn
zy&<n2HGys7G3!VMQo2Znw*6803-kA@-@%>{w1O!=EVgf4O_M8a0)z8AUQU=Ucj?Fp
z`pQ1>Z!6iSb8f4Tg@_ZotplY7@e|R3J?fGx*Kp5LJJ@&5wSZ_)+4qjRgGx)#J=mw?
zbE}8t%d{IL<$-bas6>Ig6zbB8@eH`CQAevki3-5&UkMNPZwR-zM(~J*rdx~7)9jXA
z9xCwWURx%+lgTKF*%ecdmO&4efnk?{bhd-_Kd_5+V0_LJ1dgCCLfSF@14EAgXrH%!
z1gtz@v>n9@T~fK9)iE<GX?MW}xh@)S#$Flkf0dz({)!%UJxPW-hxSs!62R;Y5L4aE
zCpf8;A9g{|WH*qoc;PqRjr1!@Lg4R^H^T{@L+Jq#=mz2ELUmgYdQ%*x2MG|96dfDv
zxA#XwnVVcJ-?4R#UK=RYNHpEv*6|vv_S+neVF~?273)&@slv3v57gZ7Z*(^%`30Ip
zTL~}x8~rAg1jAn++D44wua9j<mH}u_+s`v#+Ftv()=1W$d|2B`Hl7UE*0++)Cl|(D
zFTQ~Scu*ZU*9GmhWNrOPf34Ac(z8WpF|e||!689)V+_mhyYp^$<lIEPi1VEFzGGI@
zziCeUj*i=P?p3emh0xDuJ#7ca!7Z*8_cHH2x(%$NOCI@;_13;E|L^}@j-PJ9YHC*2
zy7W8#W~&ar`2F1XY}U&0?JZu-SQDSt3%jR=U#pEXf`LZZTg!@mrlQa=5|2E-R^F;V
z>7&VR?YD9togK{LUqe~lhn29Ow5kca9FNOZV?o`(SZmE)0_^WSbD#%~DWjN%Jrw2e
zTDP@!M6#{AmPCm@1Cf{I8va@vh<k(t7dptM7S&Ux89r+-`K&cIpH!LMf%|0t4)mBQ
zdD__ISKh2YXcE(L52!4%sDI^=b6@j4^((SYGu_Iw#uj~n0S3K9U;1fZTqQ_fDx*-v
zFr{&|jaXR}r`pv?UpL|Y-H(cwz&wfa<t#t6H*qRF#0z|NaE@mF{ccwop8f^&RTEXM
zfrHu#SFkss{)Zf=S9{45s6p;><_d`Q2{_7how*Oh0l&RC8}EnieR?(4&1P#YHh#U8
zR@GmI%(o!+Z;`WNbw^JAU6i!0)PZ{Lq&3h9NqKEywAZ*dE1NFU9H`>#245H|;oQIP
zHDf;n^bXy+ZZxa&y*37e8tS+C#*uh1*2=WYMy*wk{H|7D;6XUK*5|iA^{o7J$HJ#>
z^y*G4ns=Af*{p=;^Ji>3=Y4>glA||o-&_m__*TN3&g{#clHZ{H0J2MMj0Sns?ilNt
zqYM)tUyv<^gcJR-C(*WbOggPHpbIY+jqtIKdOljIJg=+!m_Y4^jlEoonPWsY{#?#5
zKM28IUV(px3n(iXmrm?LIQCv?pos^R0dg}oZmo2~ao+xNnW71fZ}d^WrA#kr^pd{O
zPJSnqTaW?gxRZDH&&gx7bzXB61{nYHMf*lyRDpWGU#7hk2)}@hZNJ)Rp<V0C4RCY6
z^;`J@?T-~u6fWq;Q2n^1A0O0@lzx2FU(~M={ko&ZeqW)nf5%X%iBHF%fAnLWe)QFk
z4f=7Rer(c@OZ8)mex&NhHvPC(KX&lPojUBd+vhm0ck+~Q4)Uou0JXn392d?(QJ78W
zuL>D`-;;IiyoLoT5&b!vpaBSn7)Ca2C(iH!>?ML|cF+=shYZjl&npp4F1iWDQBiAH
z^wg{`4~9^Y-T6D0z#u2-0CX~%pf_FS<PpLDs}=1rRzI}rRrc$xUgZfpr#^D<ec{x@
zlq<?x^}9?{(Mn_2_!m^I>kw*?<*vS}sv5@$T>VBE;qGfNM8%gyyaQI*QPJ*Dt=exr
zmrK{W)wKm!_{)p;alkdc+a|?}B#}8Bpib3m>+YlX$0J?DYrE?Hj_e3nYMu7uuItHX
zRNTxlH&grcIUkgHH9c#nV3xZ`M^QaNh29oHt1XtVlIaj1+p6_lQ9;5@5VTt1H5@fl
zdhlKFDyj-mK_LJr>Xmp1?E^awNW=Db!`}W{uhj!>?q6j4twcr*O3Y5pOepZpI|BDS
zQFV?G5>*%UjmB&*(YFoB{=+)np^?RqskB{EX`evruq2OhMDTE4jE?M|m9=yH3<uPI
z0*v6=LuTy)KhQe@N9F29u%a)x%R<*#Ot-gWJMSa6sH2d7<7QOc{%|lrJrcWBBrR^x
zu5LX~_KRtJnH<A@RBTln_!~V_@oi$URX0D608^`B3e&G9{?gW@Vr$#{QWZ0t&UQ9X
zF0`P+c25UqS`TopU-8dz9~PlH@S(u!Iqm@cZrO1^9Q%4@(haVrPWVCLez#R*Q;$w&
z{3n^OK>NgpUHdWZ`;~|s+Mch)v;^tPT1*EWT#3)tf;XI9-iN_oPh$LhO=-rGM3+Dq
zZ6fa(f2?rc^=?$PQlkW)dfK5uMlwab{zYB~yRbcd)o{ZXJ>bD!WW)Tdjc=%)wZpyS
z51PBeR}>eK(F4!hXpbll997uYTPsfApfhxjt?Zyhk{afRHnHd)ChZSeKH+0h=Uei$
zz23_3;2!=I&G`5<i57Bo04uu42dw|Jk*p(+pc%%1fcjPutuzLJhLskH1Vux?dam!=
zTSYYTaPU@rV+Y_Mk$P};yDBH#sif<vf$i`fx>gSCw<vVnT@jC{BwmY^%xKcB4p7hX
zN>&?LSu}J&smjyxpxPr_uwQyDSh@%QtwdG$+-H6I*!8qwgGtFIjK&Kazm{Ibe!pLM
z`SNAq=&0~7_+R0>?^>6atu!s1e*5z6*}wnIeG^7q*HUB<)9ZTM;b&&lQ2wjGp0#(;
zD=^^qPYz1lx&OtRSIWO%ogZftb;r)Xz|juhRTPol>dTkaqodQeXNK<Dn>TMx|9w_u
zWfqlU-ZtILaqN5T8G3sgn^-aGe#m)$<O=(%NjlSm%B9EH)koX|)jsU-UuKh*T0NlD
zw&FWGPpk>xwc5q}G9C|qPs$Iw+8(jWYmiCTHv?cZ>W-S53$B)uN#qfsK=7YU=5K<`
z*+ddK?PhNl`Q<fT@9lGAsd}T>DtFuX%rUaB0?Lj>)mU7ZH;un`bW!HvLNuh;Lo!~{
z1GdT+%qOG7T#LE>)+>AT!HC2b{Zf*&Wg;pj<%TXsa!ZvNrjuW?Unu5Oc@%-E#Y+NF
zH>jO1%qJ~ATl(o8DT4N+7PqEmrYb@S{YujcQDX?YR^c7+639}=K5Gz`Xt<kzDWQgB
z{Rw;V&Ap_bt_us#yz5wa=&4{f-QM17IY4(=Z=u@Rui+BCug5yBWCku2uql@ZpE6ch
z(^mN^?V_HImEVXn?qU6;>bR}3qMrq$DTMpk1s%6MvIFRiD}?nzIJJKAc6*Af7kx~O
zqrMSi(4T7LG}Mly<IeSaur2bgLz9SZQ6EyXhOya}ZJn656>H{&;)+*WvE|xIWKO)X
zWmYW5j>56asQePS!-n#suRtHLkLP$l|3O==*)<|7qQ6=<batWFHFqcV=roSZtERK4
z?l@~7`^u(r2!a}oMzr35gLLn#LIpgB(37t8x0K@3b1w~kyHSou%e)S6IJ1A-&GGiU
zH>U5{XdZW+R}qMiU0Hd`gzU>+7)?z5kEy5ZZmTN;=CD{3j<8v4puA~0a!EOa@>1XM
z_4>WDKT5McDEK;-P6c)Tt`V5})k_?BK4)AyD=qI1J-e+EyW)F;_EbAPv&H%{zqEN{
z=2!VKzsk$uI8fnL*YU4m@6nw8wgWJ_(L+bc?d)klpcp-T1qB!v4L&<-oK=X5F6zDZ
zU6!d*?s+e>oF3<Xh0dvOQJ4b$a;u;7aw}ZZe?P@6eXqNotG2eoYYET2o?8s&xIx>C
zrMOKTDOQfAi~ANk4pM(-M3l7-0{GXqs|$op<(ut$`7r+!T8mj@x3}9Z`zr%~vrXRG
z+x%H)H}}FiR}VMtWo4!@nHO1hzv()+({EknmwCR?w6g0O*0JIh>Js?Gr&#eKwxHiu
zXIAD*`5*qi5aU~}-hT1wve+uVehI4Helf<sJ1>ju>O)i3MGJoWw=y~xl#BHmMk-<0
z|Je;*fY_&T?A{}<<l#iU`^TIPKaYnPeJ~zjl)=PB@NYi1ut<?2uA@I<4IIVccPBLx
zc>kuuBeNX4HVnN+j1BEHHV^DW;RN^l%9VuN37N7K_xv^IK7hx#D7~C7FsVOd7;haj
zWG{Pm{Sdty%Q^Vkz3eeIzU;h(|2sOmg>!b_dC$$>h%5i926<0~k@DwYJu!pXnTnZK
zdqTA9zz&%_`=;;u*7SKD<~M?uMQ&^hg>agT;u)|Ca>;3L!Tcoq_GMG0m1N`dP5<f8
zp<vMC2H`*}@$)*G5uhF9%d0q@6&JMI+wYM(8*4Fz7M&=DJ+`Cqs4ra#?-B}5(j{3&
z;SEWSofh90*YMY#GtMMCen`ec3}wkS6j`X2f|Tkduu&D)p1$jUX++Jtry9r&kzyKd
z$V=q{ZHCFLjPA$wy$q079ynt=>~VKFymS^CiF&*n#nwYErh`_|9H7mvW+_Q3d*(5Z
zjz&44pb>+;0qpSSr-QRLl^v+EMiFNQxSk_=HI2sB6*ZdrZ@#^JTvUfP{+x=Va7D9+
z7o+V+T{AGN(Bdk(HCb=GxE?4Vp<0uks}qwWn0trr+>QOxFH2~J`<vMk_{)8!&T8vx
zH208&-(5&{YSbSYT<@)>68$hIPYtC%?E%#kwQbX>QUU2t-yU!!*#BS3`-%DVa%$Jw
z{U?cc7p5=m^(VR%v$yxAyt>znLvD7zxw8rssh7Jz7We3!<`=8-a%nFV8_$HpYw<{V
z%m8J1Bzr2_mRtZUGMo75qRnSI8V1;FK#^X~>Ax4x@ug<{d3*5qG5q(O{(FI;5!Tvd
zWq$&sf9jPlD)?mYyp3*@AT5S2{|vqX<p4y;Re3<x5BP4~9?(Uw3tyD$;Lx&97e7!y
zKm9@RPw$)NMs&Ug@ZQtr23`YRmFK<kIq16=YwaXDueKFMNd?adSLKVR_*&rNn>Gl7
zVU3o;IX0s>?*jf*?AG^<PJBu>cIx#f@zch}R(*GyS%!ES^$|*8VP*>IxsS2s1nsc^
zSoU@WrLDOxvEkLaY$n(G>YBr9Et+@dJ-V{V5bgI`Js5*MZK-r{FgL?bJy!;x!SxF>
zM;a2IZbQrJCS@-(N}8{RDsGq5-<tnFd+*vEM|K<te#fs!!faI)kyUs!o9r&I2(t;Y
zn-X6l&`ouN5V}yA0Ftb#tgfsAh$iTx*(2NXcw}qNj%|&1y=Oe@-LYqF+2`!6U$X2E
z`%_lzmOjm2*c%b|5%-Z<1$N6LpBX)f%KL~L_Z2s8+<08R1ljOlV~ZyB_+4JX5?9j8
zws=w&5P(;xgjhoggc1C;eR&(L(EY|zvMz=9ZP)eu;s--;i7w`Qm`x(!rkOzLxyNBy
zWQD-9;p7AO#_HOowYT0`ORp@wx%!sq^_5GXS|beWk_q$pQYyLKbPLC5qUXy+$w3-=
z$>a3u#vI_02!MY+CNyIMFw!@)0u7>>+^iRHN(9WEVb|b^bTz(kp(kh`f1=v#*{uFY
zWR|@TSF^P9EESh-(QDBgd}Gt!sCsy4zK`Jh$b7?PSI{>7eGk5$n(tHie%48^^##lI
zwXf}n2I6#Apa>=t@I6=*Uk8vqz|X;Ad?51=A>jz}4<Y{uKaUpULz#~W3FIF^euAHZ
zzdn-r86@0;{0#E%;pe@@IFtELA>kDA#h=r~_^G~dJlk0lyk-1s=gr;DlHh;Eugl_=
z5#O}@oIm42Nc;TJLi4`hpLaJdthSAR<PA(~*YS^N#qua|yH{acE-28ZJlHOD8RtoE
zF!x))o8Lx8okZE-hCJRcdnS9&In_FYG{o8f4G=3tXA)O)z)BMtTZdC8!6U?+GRYeq
zakzBx-yWSx;*2<eGXlBTLoujFoddCgQc(UEE2SIv#R)O!$bGn_q|d6agN^#i^})ts
zQ~IBIxVTh5+&ElX{D>0jM;k{=V%F&++sKv{H|59Ev$JPsXZ?-EZI!U`bZPN@`SEPy
znW@*`=r1j9;YWM%;mYPBI&6Et7vJf{Ux%k+QaO^o+B0#A?(C8`-}r71G~@2!zxR8c
z<@%GIoo|DWF>pCnfAXZUQNNdq8|nu9_iQs4H&y&+1O5wl){R8`$v4hUcJi~6-Ho%y
z;_qYe_nT+*vU+Cz75|(a9@Y;J4>uYcXYajNfA78b;8%Kf>#Tcr<Lu~Y<Lv$SH_irw
zjkBWIINK8UoOfQHJwN-_*=L_^oPGT9#u>Uidl1I+?)KK%-R-lxcQ@d_XMIuo@=GZH
z5PSDc{P&Tl`y^S8x9~6g+Qwfm-h8<ne?UJki=Q8gpF2y<-3{@5MSMS&<u{h&Z&9h$
z7^-}vKA_UatkP->)h=T8(sI0Kvcy+6=`4SI2Hya)y@8k<ihE~bO4XmVWGfBPXb*B$
zn(yph+NpJ$pFNqbtlU^>ia&4NzAgT}x&j}YSK;IKJNR*X^Co<3-o}sHw{Gt)o$ZLC
zS1@<wiYU6gD_SWoZP>}XOAWeUW^n?ZPU95+JxBx>cbIfm<D;Y_c&4QDX8bhiT#lb5
zowwqC(z&w!K2X${$ky5}XnQS|N#wMk{beJDYEZ=z;B~7cc+9&NG0qJQ=KOFNh|lVh
zK_aci``DkyJ^F<|#ln$a;<J~i-}2*|bs*s}l--T(SQ-21FaR9iHKET~@*b7-O7kmB
zPrq1mCt2dO1b=nXjruy>zS9kAByB$xq|@@l-|4=ji})bvEPlN^oOZ{jd$-g5G5)yM
z9rup*Zj8oRU;IAZ`}%a4ihug2dpD+s(_*r>m5wGUhywN=^d>p{y`LXb!e-jTAB)Nz
z^qv^FA+-W60B``U00UeA3orp1Kms6E{Tw~)R=ab$u!<cTiH-4Xv54y%ZQ4&_yPn}D
zZZt(&9kx~z{t;y2G5o!#el#%+eu*EAdVTvWYT#$R&Hja5xYXF7|JHY&EIpx3D`3;U
z6$DH)|1o4=T#i3YIy*a-QpsYxtPvAUzF3q0F7L)Wi&inj+AAW6<a^DX$GeXoH*e`e
zk5wtBh*Q9{v1zv;NZ0OeJVs=>%FC80gad(eN&ka`fWTDYa5+=N%a>U^9Z)E6`j$69
zHu<Dpf6@ff*I3ThOD#M*-ELhf-=gEL$#|;#8}<7|1Vte5&(nfbhbS-*XyZZ@*y*@?
zXvZYxVTh-rUOs?0JcI7j9O9#)(ymtC#qdM``)D#5742m~u_s5<eTa;+ObDqzSy4<=
z!O34<xr*_A2Kg955FO;LMT;`oM&w|4vBW%WEJn(49g(*coJ=IGr7s=y1PacSSQV&r
z87fK7Gb}^oyj7ATvaSerkLP|Seb?ZVE|5M^W{(IW6gT9Ns(;iIN2>l72_N^w!D<pr
z3XnsYqOt@@M2ae5>HhAM7g6wWvBs=mH@fs_uziwmW@2K{CCz@L{V7-kOE_UD;fmmB
z+0W<%&K02POLh47`jxjgR>kStUISGQBu|s1bF;pveB>;GX&M}pCvZ%joX|0OB92MA
zP2(Z<81i5%L*8S^Q>rOA0a#F!r!SQyO45v+=mYEIgwM!ho&NZ-PJbkZ{RDuWAb=S1
zLPyd5PGVeZtTvPbSM1?b(CQ>V0rQjmw0-3zbPuV`4*U^+-xS>du5l5indE+ikT;)L
zf;xb8zSUE|#mBZ>AoxLPE|Ov{xuX;5U)H!X;eM@YVvZ9=NPrg*``^;pkD0PQ<;uw8
z^KbvRF2B9#+t8LhdT}xCb*ZZ)j_vrw#kBjp3RB4aXTr3LmTVf+^{)#wKNeHe7Bh*z
zKc@Ha`<UD%Zs}wB6J`|h#dmNvrHTE86<~BA4h)(I%SHEG92@d5KEp#;baCA_Ch({H
z6e>Mwienu4f=i7jE%6)9n<s7jBhuxsCoRZ$0lYVG-=D!LRTniMLRIlUV8!Fs?xn^@
z1WkY6bG|q6d)rETe@2}xX!Oi{KW<!HUjL}uIv94|?;2fL?9&agIQBs|t($;;`MdZD
zs>4ceZ4vx)SSqR=#&v9~^ZesQ1b5R}YY_ad?isV(q4gEp<}94GhEwt|o!9~NtU!n@
zh_dTerix@~tLqicp;@BX$(!eTrL<`1Tsu6hK0Sf9e&nB^@4Z)DO%h?N=H`A~GzSeX
zDyWMlHINKUoT2qjhMyx(0!cjuKz<y^R8bAL+<W?zKGeSeq&Xb`A@fBIn$w#QHs2B>
zbDGO8$pko6WFJ*uWf!R8%oAo!pD+>@^<~#OzDcUs+es@<aB&oUlkS6B;}nNUeZ(Rg
zJ0MCu!czu*g)VMyUaHgGO@fu@8y(W}Yy*=gI@Z7rYEhkM`rzH%<b%AKyDjMeKl}FU
zZ+k!ZWGruybS8?yIU;t+hr5q1={~KiAPE8;Z~=neSa8>GB9lVqTNhT4K}lfP787}B
z6JwGj=eS#QO)Be-p1c;Az-2#qJxDf?R4xyhOC7x>6OGcc=2sTUwUFF>l#p6`kJ4_@
z<R^OaQ~m3f{ss6;8A4+JmLIVC;WuSdhJRR+h};MYT+PCD6-;Kom2?tII3N)Q@c=c3
z-2wDVHmSw>-4fUQt?5tz*t?hGpKZZSz~9GdGNfPIN7FI>xINC`&sJB=4~!AN@82ds
z00lrmb*Kn+pn_HQJuEAVijtzBC?|@EQoInX;P)5hg%c?^y*c6R9zh03=Br4$R114!
zbq)N9iP6~-l(<Wlgz)nQvhpzP2snnP2ADfhWP2Zf-O#_@*AsrEf4%=crv*nx`U|$S
z$b$mAaVGgB0ad^YvPoI-aKPps{i30btX5IO$pt7N))FoGVD{0=8%%7Bi$ghr1LsvZ
z(eH!wu{+uoY|&st{Ii_JcaUa4u|gA#0gNo%{b|VMLmr9M=r?)jxQ|8UNDKy6-v>};
zAdq~TP}^U}hNRO-eSs>VDG)<YQ`*2zG$nt>@Hzwy6uPORu$n5MOd*<jCY$;OHYJ7l
zx~Z+juxjD2{aW2MkO1#1D=X%<4)T=nDl4nZ>u%xQX(e`S2zB<Byw&?lcy;BH51m7X
zx^I=$on2YfzEV;<eRFngQT=LJ^~-Zq7xmvRtN+$K^#y=;$^cvm1Hd(Grh$w>U{P(s
zZ56o(_@J*X^+liJ0*mYGF6l$x1qudv>vxqu$!nc=#K)3IUu@hL1>%b`kP((GDfmq&
z_;{aS-;>+KyoKon{Fyw?z)R4L{e4LWKjX>wy92RN5zzglGh~;H`w8gqc5Wo`{Y2X<
zcY6Ey3FdvB1b>6Ubtl80Xnxw6;%|D%>kQ~)oDVuf{quf)(#i2_l6OY(2PA%qzs3Eb
za~pohv+BmAa}zV9Wo{>xUu2ZqInbXIaRLrIhw^(%^sRFwKgdt}4g7)&M&~AWOxk;m
z_ss{e4V?lL#GSfxg5?Am>m1`R;5f74;q89+u;{#t#R`S6G%o5)C|TabI`1abMRbhP
zIh7rje&s%spTLE6p34ty(b(zBl&^0+xUWBC-ZT814l{uz{#3D$kMRp6cAZH={lA-b
zM<^o6x{#o*5S`m{eDw99^B$&1PPt=#7M-utpy0d0M>zL_*|;;LhlY<8*pB>LbcS69
zyJLP9om?X!>SL>SI36nTeOh5KGMkBPup`^;Jlt0>AoZKPJ|sMnb+u>+n}kEVBmWki
zJ8Evl5!2DXL`M^vR@hD*{j2DFBZ(KH2n*`%*0Dc}&ONNG&8Iu}yYjp9u&Y;D=bK%%
zm{8rh^N7&v7B~9Y;V@0$fRzBY<S=e-ZFjcKZ{<tp1DSLe;eIH;KG5wyHYuHNso&c-
z<!?nBI^Wt?pFk5jAL*elP%?nOqHeF37DYaG1p{!UhZ0%>wHR*#Pn#&cDiSWh&q^3r
zL;(>u&xTsZ1Ob0l0)P^x{)BLVPTArONGX@4)tOJG*N~}Qz532#{Gdxz^#Lr9_+ip{
zAzeze7k9REu`HwRWH-9Iy%<a95|}>7$DoeHvtT{9@dgm>sC4P8LR9%E71)hAIOWzt
zWZo4&cO$#1@>tPcyu0`^{-(g|?)FxD@krWs3+DCiHhtpn_Ts&J%bT0aB#Xa`-(V9S
zM=HfhigZ=Xg2v-0RN!U&NE~r8Saw8L=Pi)}s^{BDM{7IB9|#;tue%Knf8G%18)%TU
z7vB&|;ZR&ui}qqSI)H$u>iio(isC#)#{^LMDKd{l<}f1e{pbkuj)<F0pc-D|k_6L9
z_xBz`qvzp!_XwEOLOz8odKo!A#T;CsqH`Z6or0aFA120Nq4O{i+2%~$+lNm_wZHRC
zEaW71dsvj|^>-d&Ii9jlg{0)5vxNoJSI^2Mo2+dtp}f#`5-eiWab$v}Zr}L;>sU!C
z)zjKNodZk&8gz)iBrW&=p~;UyVsh}V-}#VbQ_7H)A&ehG0v<Ncx>y{4PqExVHpbl{
z>HeT=C*oPu?<xRzl-%9dK=Auk!n4H{q;uac0ZH#!g$UDob}>r4Z55;rJivl*Y3qDI
zbu7c8&imA5b(8yWKR!YC4Dky~K%{nwxKo@Jle1xRHclGLu`FXnIFvr#-dF_{C(tVs
z*FF$g!rfzI5e(1Kx9rAZF<ER=gn>oSqI{Enj>S(XrJn$ndN1*%1(_*BT=6?h+9?}(
zEOt(uC?LppIe;K-CNL_b0iF`!eVpjv-SM}Q&S|esocl-g8-9K)lf}=A^b;=gd-M}-
zT-_9Z!js!R{Y0Nu^b=%5N!q#5vn~h#H>FgQaG;7232MZLlt6T+5g*YflAA`H$<oTJ
z$5Z+y%F>9Rr7Q|bEST39Mf>twg64^Tj@oN$f{d+Q5kzZs^<_Lr%^-*~(0WA}rjXpp
zdolbHtp2C?OLMJb$|yP~@&~_TbiS2PqP#SBK1x&}Vxc~k-zX^PT$Ep%u)Fr;2eE?P
zR92MU%jD-rc<A@=OR=@j5fQ0<-<jYSToyjVUltRVU`6$nrc{7XJHRjE01xpuZu%qq
zNu2Au1d&k6FoU>|r&L$Evgq8#a-3g(Po_AZ$iCBuxpL?ab>$#fg{lmjfqmDjoQqjr
zP}FXS>cf1J^-_F}>2*ihq}wkVi}8EnnhK4}dyu#keoNj7;W9zj#OE?a4nEy^pX+A?
zQDL9t&fi)LzR4Q(1`rK!Uw9yZmQVA~XVv`_Bd7w20J}p`th2b*T3u;f5zW^((QVwp
zu=5}xJCn|Bu)l{}+k5Z>c<v+k3pb>X_l<qY(;m8;!_zX+k#;*^J1!5>P9N;Z<&#zC
zqb`;wf8d>5eCVU1-&5)W$i`o^1NU}LsUZdEPFEvAXT!4|0|uwc5E95c)?LEtIV(Yx
z22f@QXLDaH!ViYor0Cp;yVhyEeKbysqr9JVZuO8J=7I%Q#5+%4Hr5xGFI`xOE=5nj
zIZel>QSbRy+7}m6Ncz>G;1Z*!pF&2f_q@Q2*3$y><U~ZPt;?-dOhL|nZDsXJb9J@3
zvW98h=|tcf^|G$$1*W8fZq}Cxzj_ECz(ZqJkqH0+{+bFeTd09W<WMa5N2H{aMBq$p
zj4S-!o$W|wi=xX53nu*DfuLyl__Ptd5Er=YAgU|-P#oz<oN-Z26|O~J`<l#Xbq5L6
ziDXKBr$*ya+l?aybzKyA8KJXNDl0SUC)qH`Pg-(_&(0#5@Nqht<m~$*fmmO7X;8jM
z4Wq%M9Du09boFIZkS`|aK;)q(4xO0fgIMHDCZIJJM?I-VwZ4EQmY1Vf-}{Z9|N8e|
z{qFzt`S1M|VJ#-C4plP&Y$cBR;*Wm(S03X<=C!CV{wysi6lg>hl48Ao9Y@HxZ{Nvw
z8_-);1V_LwVZcRzJa1fNugg3+&Q6QB`YGPrW&pfs7YM*q29K<mvpP6bHK?<3Erm;d
zPA#Zv(#oLHkC$>LQDtKUQwCJijENu%b!!bYWCezf!M~)7sz6<|(6HN8jNmAfYghd1
z&j??#dE<pfAcsw+(0G6Q-d$bZ-il(?loiq=Cm`jPXM0o9^h7=KjHjvW2j8$dpAgFh
zc}>!7(XjIc4X-w$4TKZ5LHDpo^|%Cvfwn?u6r2WWd+||`RHJl2cz)?vP@xdU9;!r?
zUI$ZIvkXy|&GE$K)@S&yXk9cn2bzN4!*KE(&tWW3{B)X)Q%$TT$|_mF9SWess2Qz>
zf#M~C!35hUv2{k>UaDZSeS_)LBXanHX9lLK_#1j*$+9w+-YRRYnkGIWs>>mTDQ*NJ
z6Tldaw6MG&5dj*(MgxsH12YenZoKOj(I`7+^pITe3BQ1VGkn1#_>dz&5<;AUiSt{Z
zajK7^aGP~_KY!kaG}T3m8Ub#t?qt&K9SI1!T}o-~i(|H~n~+0~Rg%=LLMath#Lzq#
z!AKRnnn|sw+UtXSlGVZlzXI0K2`y5Lx^?W(Q%0r@7VzgLmM6y-8cM8uK6Z-&M7$0;
zH?6Vb=VB{;K1l^~FJ8vtgN+gDl@*-9P`FIT{WgOpCafi94n)b_dQD{38nG;i!PB-T
zr~S0Nf+=I_sa;)OOO-HnPyn=@O{&^5Wt@5+!X0QvJuGADJuUL#7VOIMYPyJB3+AS}
z5|ps(%s@~Vaqye&&%kcFUu)1RX|TPDhM`ocKza~{Kx?t61^5mdf<s1mrbkWvWh&P^
zU}Dvjls2w83*Fhnb-q7|T+|zeN&e|i{^^T<_orX{_Md<8fBp97zw>{*`rZHiXTS3|
zuYULU1<(BX_kU!FU;r<%){zJXvH;J}?uGY59r@cK2LhR&{pcUR_{ooc_M89t)sO!0
zr+@cb3<t((UW9j248c&=aB0gv!3YCzF^WETboamh!@v3YcmD8a|MZ*Dji=q`kvB>{
zFI+NY?s5nh^A^TMIK@HCQV&;%4c&yLZE^9{qkzTr!P@Y+Jv|KiDit^sEWT<qnd4mL
zr6NO#)$)~87faa-9ItkN^!cCv@#o+B{h$Bl_XTc0|ITlH{@Z`{>fitA7eD^4S+ZuK
zNSJ^!Cg5f5f}5%sKaq#XAvZXh=ncr$m0MNxZf94b7dflc>X3$o{8T8%n|Mi+CgP-^
zQP=I1@KzO2%XqDb!&fjAwL5^*TT;7LEm{h<K=(}s5$Aw|g)wK}rlb4gwEOI(RoR;x
z4FAb$>jkTsK=0z{FEVFY;N%jif_+H47867JRAmGv$m~sfXsWkmcw+(tXHT-@$-CB7
z0WtjxvCVpOfAQmgE9foX)|$_pEsZhTjU6yslkQ|%INL=nCjqTS3|}pd<g%*8l7BRe
zV8fqGbvbbxqN$Q$4{O!bA1a3qOdFoQMw>zUPe1<ozyA||s5E~)pWw<KiGzdl3`Gb}
z=Nc&x{rqo#{fj^QdqEL@{>OjE5ml_Y#uGyU&y=$56~LSFOG_pgkM3zZs?`*)b(|I1
zekQmPOtq&?-et)}sBCg0S`n93{4gY)@P74!-}(6;{l_o<@VikVMWQa1!)g|#a|w8u
z$hn0Dy`t#G;K6*HkLoqiv+jOhFx4?mf5W2Z_Qp0`JFUH8K1?kU7Y$oW4pyX!1O#W*
zfRC~yNrxfOX3!&3j_vb`Zug3!PEZ=<q8;2buEbzA88Fn<Va4oz%FDegp-^H8tE|39
z1V}>JA@1G5fz|z|KYH~SKm7TRfB3T>{mHBE{KLYG19ZM+<<cc*sKs_2i<KpM)jXyP
zN_4@Ms`%A*R(4ytylnfY&0Ouo!D7b{hOtp`UIu0f*rBo>3Ow1p*B2O7msfoYQ0zm+
zSi-8{XWB|5DBTRT<n3xCmJM9~W;APZkJdOv6Uk<O)ihNrWsmVPKr~lh3BrAup8~tb
z9+6U9J><R+MUWO@g>Ni%O;A|<alLd&2PIW|SnJ_9Jyz6KNfp(JU~!4o3WL(SUeQe{
zmy?OOK<^Osx31hD0N14|@rA<5X<`85Brn@m1txW%^{9jK)WpG4LRrLdR0@SPu4LUW
zUb=}OvheyHOhh?_9BxNU#+ErvXw@}6D0289z_+RlkCH%TxkALYVg$w|iciI#RU&_M
zXaflp$=)484@GEkJXL#Nm#Q%iH{yd9Tw99B4a;ic$d*(^!slI2)X*`!-NDmY0YYs0
zykpAknk6i!+7$L>1XicrwoTrQ#!bP>*27mOPrjfQOf2D7Tw&M-51r;vJZ5{A&wwtx
zKh63H5lC+b#JmMdMqzJ^&wuZ~y!yfS!qS+)k!EgtA+99&YH9b>ucmuuZytBoSc7K>
zp)+`xRxe=;C?!qq&;V61AFiy}z9$)KSY4^@^j1GbvB~sTGz`=Z>!JM`3^QOj#j+|p
z0ct(n-)*qXF>jsV2D0b$oDkV&a&P1=WDKp!a#7w<xfx%3bJ%>z=l|PxU;S9#1z&yd
z4}SK?f4UHc?Qtb>G@IQ&FEgMYD@#u9iiKKQuxxR%X3eWdS;PEYWG2tRz_lyjxCp4j
zsT=|MfH5Be1g>2H$Kjdev0BP9(Rn-<$AqBTr7)a^D?82}Zsuw_+-(MhUk&}MXn@&0
znhb#Hys*cf(ree~@)aQ!=q!TFQ>q@a$!v(!+TwLD6BhtxURx$Oq6}OinE3kN{Qax%
z{l@42;WvN&AAk7&edk|^%jg$>_+974MU9u4JeNICIUa3;o&N{_K|p==7k}{ikN%&}
z|KP9XDTxjK^e6x8PyhDs)dkpZjK<iyrK03k=LKk~HPad~pRR?j+b}sZ#M3lOOP#8j
zK|KL+LK;+d{TZ?fA;08Il#4P9<?sE~7eD^)tMC8cG-~!tIkf*5-@np6m3M^qM{OKv
zu#U|(=DH^bZ^^+sGH1@{nda5M{trL<$xrAB$(FwOY(q$3!WX{BkRfNU_FpNCMx#aU
z&~A8HmXuFI@YpQ4PzU&4Ca2+5nEbdz%wnjG*jlBHTGukwInmX_!*r|#$Cgmcoc#ap
z?_T}x59wV@?0>OnU;W8<zxcs#ER^U{Sn5WgJTb3S0ySwpVllMHl23NI>~}~f6IRjD
zDxMTe%ZG7fUbkf_ks#JNek{QUd#Obk%&VXL&#!*#`%-u;E(hNiYwoKP^dXLj`-6iz
zp;Go1M(8!f95z?^%FzOG!~a?A;LFly4_TATf5a)EF7Uh+N?YnEsm(lcH6?Ixm`I}&
z6MEuMq1pAjk$l<Dia26kwfMs11R$VrqaPaNNVcP$-I!l_;mY^7zy0}d{}!z6KmHB%
z;EPH*=*=sNoZ`gz63zbn_kZ)JKmO~V{moy#`p577*MImPKI{M1=imE%qVbHb1BD0y
zgoPGRPvDw9yb_(nRPc*`{nwv==U;vP!+-qZPyYV%-~YQ;|M0sDwz3bB-I%rX`49i{
z)ertpIClQ&*F|?1Ts@!K&;IgnXp7fkS>=mA|MQ>z?RS3qxBr=#emJb~&|h$MeQLFs
zcgnA)Xf#vw;dSK6DEjs4-~Qy)555m?PJi%U7HlP-+AvsyP$K38s{W_HT5uG7N?KAJ
zjZ+Erd}>9_o%p}_!O#Df-;h=9dTMbW41??2*D6;l9#zaz(4jH+C9cGvpvg@T0JOfq
z<;cu6i_(y97}EtX;234SXXzN}*SmQ>5mdH2ijG%X@3dB;dcdY&`n<^dQ#_NF_f>^v
zq9HW|V1Rv>3<<b>!3{CZ;*ZRUj@MKZqJ@)_6S2J^zm<;<m!%m(v3&Q=&0F`kZZ$>O
z1{oy;tP+0FMhOgd`h1j+mC}_X#ZguZa?8~f&_=m|gH$iZe9L$tj`URpyJsS$K_oi}
z|7np(ZSaG>TSXa3E8&yVO4*VP5ACTHKvX701M7}~YOf}R0u}?3uiSLj8*!u)@5z{@
zCWS!xD4;$4txu<dJ^{CxuA+1xU2~3s`hr&6O;=@5KhrYK2v+m6zV@|1Rf(ThPo)Pd
zQ5U>Al#J#5?sfZFx2O-&$x)uf+Wt)B+$#?4S!8Zi7*}A|KxW9S4NFTzkQ=iRTgKAO
z0bvB43yyL>1iK(acPkECb%NV-_@NFz?P`%HsK!SxN$8#gBUq?~AZ>J@rqXq)y90qP
zy`Kw8Q!q^d0jSNyN)0m-+#wZ(fXl#ho9?!{VD!XPce7!^z$6Tepz*}FNtO)E2Z#A2
z>W%ZFXzq{mlOi3j^WqmpQR+mJr^T=~iB9tIv*<*SPwZe}>0F5$0^Hw_GASd?I(vCA
zJY@$sN*O7_=OGuYV@dmx=#E9RVm7lLIENJHLw*vG8w$h+9M7a<P>G(1=_sHKy18@S
zFjk^##GA`!4ni_&BKD|W7|yx|4v|(aUBUmYU2a$p3o3Zmx;tgfRd15$VpTHJG{qyD
z<9M|ZsEr&yt1gJzUKh3WURd(w3npX1#dO^+X(T_U4zHwBL2plgFp;j*BuDDxq=F)v
zwf9UD{`v(7?Eu-3u%yBvyc76Ke{>qIiS|&8_)|w2nq7U3!jR719Cp`(76zp>PBplr
z2dK+Oq3e?$rp_sHi7@Ca8w;XT4SbxV8^S|kc<Air)JJkcj899+2nsdbfZ>rSUnIGp
z&aD}uTO%t0V}byoQ&Lc}Dp(IGnXIe3<I`I_pA{I5bMVx%CtI&8EO;T>&?U2lC62T7
z1ajmRyOpcU(1$XEl|9IN(?S-eR|UqEYJ;?ks_VR&tUzz`sufv6B-d*hWYny}=$JlB
z`-v*As&CkhwQXpmD(b@%jOi#J5_VRFqi%5%3^q_E1Hzt-5I`{BZ^Ba|A=W$`=hIPB
zB>HKikyv$3B6$9w)cwg29}SpU8}g1ej*@Dc6unW!(Z14H;534Di~-d{)<;GcbmW6A
z@L5Q*<C?W}^m@No-+cI9Ki}{6Tc7~j7bC@lY&Vb6-ZOCSuks2E10aq~h>0^iw0pVN
zgW`LtY+WunT~~DV0Hh)LNrM|DXmr$!h%puDk{q!DhTP-}=R{(h9Ujet1vn5Y#exB`
z&>$4>^^114wH^0J!_wr~sH;hBgs>7TlC5S+Y-U(qU`cCpJFoMp*QlWwfy<I-0#3&H
zD1lIJ>PJ%moYqRlJa3IB{rRyLh07r+*FNasqH=;by4}+v;t3R>53Mk|iIp<}`G&|i
z5ck)ph4&Nvg=cEboaR#6+spgKs0;E2!-vGc=rmq<+(L98<!5!sjh2j*jH!23k$J6i
z1{#t;jN2;Aa7!m?6R=@omyijuzPp?j<g;f}%HP}i6!5bAO7Dv$-iKu#tjBU=c2_C_
zO|ev4iZAyBFsFOug+4&(iWCp4dwHVwGL8f!+I!1}LsD{fyk-6VW`1JrM@S>zDRm1c
z0y6IgEshM>ms$X1xC-MpMqglb43=E5aHeD|A5z9?k@t^N=pqTb^tyusy}|5SKw6{;
z_^}+P!da*?+2MI18Bd)I#OnI?g6XDG3*^!TX_huutp!g2I3sTuJu``h0$HX8$|1dg
zAxF;X{H9)N{D!6z8zpuZtVDyE`>I5IGgBYZ%x!rmep2jST6Vd}i>*O-!~n)}Z#Nu-
z?E{BlI~k13N*SL<*6s4n0ZDdkJ(s}<r$pcJ(GpxHE-u<CCe>rD8W}?9ok3r)%E#&W
zR4iC=n&;1~R-swx=6reQ+V$P#Lsa+N*;QJ!a1C4uHqPIooVGRZAez88NO6OPK3SKI
zr<>BZ1dNq;n}A$}!gY3$(GC^_%2D0uxt5K}OMAi`qT6<?%h*%*)&znOjk_o67J&D1
zjA@h(dnu;^d%0`#E0ZldGrEOP`(kz_RCXE4HLG3%&TJty#xTH(N!r}JwHT2_1-X+H
zyxMU$>jUA9p$v#GbX*BRw5I*UKsr#~EGBuh7WLD~M6icFK>(uk5TGwI9MMf#2fP_b
zXzP40BEjE*tX)PfWF7dUtV^3UE|>|_X3I@hS5G-!%W6p&oMdBsv>v6CaVE9_Q7(GP
z0-w5qr#&S}ofgutLq<)AOO@;XK?L;%*-)KV6*XBYUbp*vp1P(~U@=hNifEra`hxF9
z<k>~7VBgTknaEU!E5j_7nKBwd%W692a2ggOKony2<RtbBkxkgaY@G;TVkR?Os&KfV
zS&UgPJiDWqDwc>8${~Fru%vImR+0@^_kJbjISqeZ>AWp)_1G1JK~$H@0ij$oB00LC
z+CrO`H#*VPbu0bW5bnWsUT7)0(um%Gf^5@~KS@zkANS-JjH15g(rI*K-5O%eGt&8e
zXLtY(D?I7f1y<5J;$0}rISQ7w1be)oTD|DbYj2Y8O(!ZQ_Gjrh-vhBDhupA~uHmjy
z0oon`6gzYFSPoUphynZ-w~*-|y)QWY{Zn`wXoSu!PutRNS&v|Vx3LCZvf?=G6{9YT
z1;$(fm@(q2*qr07+M6}n25fMw)kWhg9%<8R)iCSb<6mN2qG@=@dZ_r>+0HJbzQN1Q
zoFG{Z36+6m7a%+~trRG}USdORm$ZCx&4lauaNxwutxK$~lOBg(MkIq3SQyE<7X-Ty
zU|iCEj}z5=3?X~)<*FfW>UZ;#bbM1B()EVo+)<UMVJxfm2!d7BuBlq4f)`td<8)LP
zAFQ({`8d$u<!^VVll%<CPiH9oIh*98v;BNB$p;sgTVmWMRMYi#5ZUO!9q@TOssXfG
z9G$A4FRev@9Rd9<#1r0|v5?vR>u}Ht-oA@CFR(oY^+hc%SLF9Ll8j&x!F^ejrw0x(
zYoc4VwwFpBwKANJwcy2rpsrh`9F=qh5k@l55RPqSJJ089$0f`T!P%RC1+X<>raw66
zeAYu~?-AZGvoxX1&f)a{W<Z(05Sp<Fs}MR3BNRH$oL2+)RAT<h{IX#c%P3SbeA+n0
z&QD~_zVLv#t}sr?klibXE^MKjMlHftept7_kT3oa9Lf=ZR_q$2bm5nWbWwVBy>i@?
z8UkP$Q|q8daq5o2i&;>lI*501#s!LRawNQFcjoliT$$}x>$D$7AcRei>B(A@G*8$|
zOKd@>@E9(#$qdQn=qZ_#vo)J)!9Z()iN)9)8>p+kQB4^5n?CRW2pjm?ZkWSq;qbs9
zl#J+f_&Q@sApg4^(}RQRL1nKm?UE;F{VHqldX}C}M{PlVN8|kYsnJ65nR6p5O<SVY
zO}q^6tX++xH{t*9i2uJGN0-H9y}1@gt8d29JG-Pd)LgascSqQ)yDJ}(V~!j=!Wi_h
zrcCupLl}Y7DT`^cq-Q$8o?k$i{a|<--hvTjyq2?JqLHJ=Vmz%_8&FrjfjjKFB|{%g
z!MP}KFc1z1UD}HzTYrJQoU<|8;qP0q#Aa6)*maLD(S&{(ZBsMidc8jt2d2j~mAs>x
z_v(OgN(HK->D%DNSph6WVR3=)j#HGx31%h9hyBx7YUhZ_+|Rq?BpP;)y$%~3bf06d
zkZvh<OnH0#toN*4I#=9`w_+%r17!Y5Iu|mrRd}9tKPUPeU-I~539HQ_>1Sf643X^a
z_ow4Xu<S}BAxVoKJWdJ_3niVcU8>nV1{gERib4;!RhsOfR8o+_)}%WYY=&iN?RNVm
zTM8iZhow^0i-kF+>7M~<`LhusLfK%DCYhj$A0TZk8uru4Hkql&?M(Euh;*g?DfE_1
zSSYB>GIB)0rAtepVko373~+f8CcYTf<{chM-qV&PS1cJ6pKg|_3pvv$9}sO9V1ccM
zX;n+e21m*maYWh>v%w4Eg<28C&GWV+_|CSVi}jW=7HiDWoTzj&?e}Llc2T;MZ^X_k
zR*`+?9hIQpHUnBB);y|MIE!VF!&U&riAg@~9ii-So}~gL2s#08Leoi+B@}nU=q<$2
z5hP|4s~XA*>I=4AimUyjHYAA5tBRspg)VG77KZA`m+d*AbDfPjfvabBE3e^<m@EsU
zQg7ITfR}Sop51l(a>G<}LTn>#L~_YytM+IG1jEYLIf-f54RH|V4OusXDsa+in@u2Q
zb-*b;yC)6-3U+C39727oZa^9)S~n!5)ZP9h;R1BJO5<%-W}$3CYfHkVy)M{rvzbX^
zo^T=hbkYM6I_A_9rV;0C7-cTWn4;5>peBSHcQ!5(O*<w>DOt3QwkAHUSyhX+6wjJo
z!~sNEmq<PmpgP%eB|PyiHEyg5sgG#yx$L<bqeSZBVbLZRPZ$J@(kXpcd#lNw+mfOe
zVTjrD_18d&Qv?l4{!r^9geF@~&Kk;|Hv)PuT7E^KNGfj0tYlM4a22@qx!%B})&lUz
z?Gh^y_nrbOpKWb)-5@t>P8qVyR<{s}Dj<<dhfwjs@R7{KiJ^zo#zI&*Uixw7I#LUv
zW5Cu^%v;h5BOTimh*Zp-G=jjjt!%Z*8AMGRHv@#4^-!u}%?R!#JA}vE)}Xl8eZCDx
z_`^H{jtc~&0#|dW3+^-0TmTz9IqX>X8}d$PS?bs-nk`_p>)sQMW4mXT0i1W$%Rp%c
zgRQi4R@d5SRS!Ny8X<!jYruScaDOuB^p%cE-2tEHsF|VN=U)xPKI)|yz%O(`Cm)24
zg-A+vsio@yI#F|#zx<IGm%qt4KP^4hY))i0yD-o2$YCZk7?YQX)iX)$!wAh18cfqQ
zyfs1e!s1|51DbnPN{Lf|y;T&H9`!g*VC<P4LaasXI^0Y~xLY=*8?DL$EjTvJEu4Hl
zNwHjQA}%Y-f`(+EvpWYEt=?#d2$4wRowf>wa!JP94ZS`{Dq~eHZ8B8Yw6u-N>7~+r
zn>fF8cAP$zs4;uVx#GwaZ-AoHoAh2#chw&`6T+5&NVat}A;H(v6RF;v7j?`495+K1
z1&#S&v=s3K2uVyKheg(<=*o)tPs1i32rpP3Z7RdCIKHzHDsO_J6gIxZsy55ZH96R@
z60i3nP#yMwM$W<o?efaeyJR7!+Sh6$U!rkt8>|zxZLm&Zw!u#OxVCH@__{J{2-;VV
zU~*zCGvGKfsTu*3<YKTOZA>?b|Mn@qr6N3oG54U#2G0k$N*6<qysv%Wbf%)oz}*Lv
zsz*p>l|8g5r!#wDF1opD@nLr9Qe$Vg*H*PzMA719Y{g(S|0tcA5U)|IRTEE#(;)fb
zCR(F~m>YP3@AdN{^`01P=E6q1s92|HUpbcXh?HKD35>V03s!ObJ8GNHK-XN$@M6BM
zR<dKITt!j6Rld5usS&h#M_UjY2=3~+(5J0IP5^4E6%|ORV7tc@Q9V|rlnJyfA-PcS
z>3<K6^`lRy#3y!uTh#eI$@=|hKb0`RZZA?1NY`2`6b||m3GovZ_!b&g_(_*3;jyPH
zEz^+$im%c({e9r<9bJ9)NV<R-MvgcGHj}#GTjXP5mTbb;Z+EWh>tBXK2L%I0DgbRT
z(%pKRGo9;@YOymqTgF_hn!Yo2R&TL}fcR>`C3b7fU`_vgIR|m1#QW;mpgz}PxHU}X
z>#Wo$^}6Z<a5ZsDx~XmM<d0uW7m-r<#(M!XD6Jbh1MiS6pr1CQH}m0Z*$oCzX8H4D
zZ2=7?e<|E8!$lsIf@$B*#MJ^~eZDSkuKS8|X-}m%2g4vMv)U{{%``4v$fuK(GU`l<
ztZKZU!T^V=P!6wioE6h<|6w;t=n}iS!r&=UAK81k@;_6MZoUdpU7~g3Vp#OXdB4A%
zj|{P9jgXt)<P^NUvIo1Cu2lzXeFL7Qn<hwJNjD`6nOt6;Z2jdf_*5xAR*v|X-jyX{
zk>%<Q$K99Xi6fh&gO8ODZyGZ4oLT#<iA``<_2_ZmRJfpZhT&=??Pp9rU3*s=Hp=uE
z?iUW|Gy{I0DcqD5jpU!;Gqxea1zAoJ)uJKg&~i1%jvmg2>o9=;i@{TK;ChNMb7P<%
zS*y4LI$znO{NzGs1xP5)+d1L;YgRL~=gM25e7_OULI!P7>?e9e5Ep#DR56X$nBXRn
z72v}uFOotR60@By=<Q_PO$4N+j@gJ|^#x0cN$vnxh!kU*Ps+(n0P3fbl5<pBs;Y{b
z*@4QaYhI;sVk>H!&EtC2sd8%|+p3wRZb5bSYOrA>TBHGQSwG?ocN`+#q{S9cc>~m=
z=MlF$K#Ra)(!?WWK-zEzg2IqPEAZ<f>8^p2CZJe-Fcp8GASflAh?6(04u;y*Y&~9c
z4TiZU9$>@O9H?c`+JP^u4|%QVo>(x@b~Y3pl5ZE$7;cseVKsxQiNQr+z1pd9wKtM=
zhy^uVvEY(39oPB6<@Fsprpkl39EO~_4n3!J3j^MYZU}~E2%Q#PHX}wQU{qeC=W<1P
zU0>=*deyZ1QW<~1@%j;YiY!u44ESTi3uQVX=R`Sxi`yRb>b08l*T&0o(=)ZhPJ=tF
z$R<-vX(M?A1w15OF_`PXZW601Hjt9Em*I_kzl#>(!|3EF>mA{HZxIc^{+!~y>M3Gm
z{ge<e{Eubd5pz1dC$`e~pr4;`ft#)$BzUY6*ghI|Ybl~5#AXrA=rOc742T@Hp-qXv
zZ#~!=Rh}8M2(4_XQQ9eJp<$g@jE+jyb}2%0lRLvnowtpg)`-YJ6XBRg5pFUm55Xfj
z2n(~e2~6BrawDAAZEC`To6>U*XRzX1K(vkvjVsO~^fvwB>BM@q<==pb(958f?>SnA
z4z%&#^R+wcCS-YcX_JLHIcJtB;XBd=-!)9hO^Gw2eZ1NiwzwLc=JA_>a=y016azs6
z_6A8LEz|Unf=z=v@5F0>E)fSbcgQWOr?!*Kv=L59&4WFKRO%?+0h~Ogo5CGbn!Z{N
z>D?8S@S&71(5y|zCmTNCv+Q=@ZCbf=Q;Iw8`@hX+QTs+e!`S${J*RjIsfvC+OZ*lv
zoz`mte=q}<x!>6rY(UBd4ayh2Md7T73d7v4vi;BkPfrs`CzRXKxr@MHi6)EZLz8Q*
zUeNpOaRwf09s!3}S8g77K}gfz9%eeYDkEMrrOIn1sgs9@G*O3;U7#++HOv|=8^&BM
z>W3-+waZyM2DYw#%@fql-xRMjv!Uybkn}vws4As9;XK|a9V;P4SZrs!(%U(av;9-j
z23H;kD;}2|$qPM8`TAD&7+DitiN@q~#E}39%6wg(A|z>%i3U2VjOnggOzj*mX*2s3
z_DgZWSCoX{;}X+S^Cp9edLXUMKfabqS=R5*A@-E6+A0N~WT}S2YjG!a*(<?Q-Q;Ys
z_N~IX5*ePUc5N~?F>NY*5x#KiVo)71hCSd=JBz)O#p_@DmDMXN>(`biM;xTNO9<Xx
z++gbxziS?Tg892TvmsHtwq9zKNU-B_SASaD$>I}qLy=Y-T@T^0c)hknPMVwpWEY#d
zmkoC$3QJ3kH?Hn3)yhZ1bZ*(6gE_oCqGw0#`Ld4ThQjaT#>-#XOD3{Ko24q?7BRD>
zigF3n)~$C@w1--+2->*1=348@O5n9hBO~^v{$QFj(rKT#NvT>Y2ADst;I~pO8#ID~
zOOt9#M|&!nPpnXE9p&SRj5>2|8310d1vSe`=ZoM(lSH{wWs}98Ver&vQ-pFJo1Mob
z)NI9H-dW7~EG!Yeu<2~gV&PZG6Rz=PA9B?0yzOuj$6hS)5)1yj3g>;vT8F*9d!vy4
z2&@(8D>v!l%I`p^yi$8&_f~Q`;G6v`zS)naa4k}f5K0Qb+QcH@*xqYg)JGJ#F^}jp
z-8pLFAPVYDhFiM+B~iIvg^FN!e7`yRWH74H3bgTnk4Dp0A(Pn%w4}B$cMu5Hs9-0Y
z4JYY%*zLm<5zB$z`{7GEu0@}IsDOtF{wayc`k54?Iyn(HWRMO^+0mefc@;yUF2@v1
zLGtYG`C`C<yPD(F*1oUc{)2O43>zx3x}%?8=YbVR`gb$2I2;a~ow8;@ZNk=xD_!IU
z{HGcmj!d~)h2gwS4%zkpIwNSH<s{dn;w~uN{FFqqx#~Fo(fEvc>^J+s4vc|b+%an|
z=r7i^pcMAX8!6jVs*_cyH_1TbHDRB3pqhgFs8#UYDvnv-m1x09u?O_2fa?&~xxvxN
z$8ppv$b-EKOcY1t-~~JQ5&jgd(~tdBFdFIYp>?1H`IAB%%qXD(kkN9qy25jhnafLl
zqARQ#HYl*wK)q;u13u{I`53*>M9Z=P(0-<0yrMvxs%Z#Igx96$od7T8HQ^m_jP5TZ
zBxo1@t_QSH^|3#%`W9<B@ei7CgN|=AWWrEGIM4f&Y@}w)V-tJR@z@!gCIQx2*E(td
zmz*4Uj73~Hp`q6%!C0vE#G{cAHg?PhwNo@I9S@m?W1Ed_gwAp6B<BFF9#ny|&f;=v
zBw@#TmP1w@E^PNaa>45nH+v2^4wZae?Z2uv{PU`;6|}R{E4~V*$2G7MgJ3FpfP-+c
zHOzBokg0%}cvZ5lr965lSK?^Zb{1(sI|`Q0yPSsp;$^knCj+LVa+d=m)5N4Llg<G<
z;DO8rEeALZIyeH-P%>fmk)E@YSqq^QwyatL5p<CxY{7f=x)Y}wcaYear#VRn+~y2<
zu*;Rbl+L(<!evuoh&ryds76tTA*ZfdgR3pZX`mV^naaUc7wh2FRTI9@<#fTASqHAA
z<OxySNx^KZ&JLm)J}nY`GRK_(QhAYuW4%nyka(h0EmiQYe90Wwyrk@EXNXnD6DQlQ
zfYk#GE8rh+ZByQ9;~u|ozD6VJG8Sw>(pCdL<W<+emboGHgRmXk&jZ|`?L)>J)8zR?
zJtz5c6}otfV}$Z+>9EEUO$=;lkx~f@OSrIfB8P<=>bBB;FGGzLauGCHPG>#$flj0E
zPKF;!-JOnoF%>!5%NR4nxAJQJZ1@b#*x?aRw|70T=&S<QyqSeagqQ^4)&~ch_9ao*
zv_vGtt1Z~a1;4#gXv0(F0YnezQ%V*}>@i;}mJJU}g9NL@q<~M8=WU=-jsg#e<F%#M
zG)qVA2o<?K_9j}8@Cl4-vzPY!NVJFf(6t2$A>hT}K?KxBs6ar9?4h8wtX>0?aL^!s
zROD)f%nHPa7vY61j)c8UQzmL3*5<>z)V3fH--hWakJDpC{erGTS1d&bbnL6DSoVP0
zo3hR|7EGY>4>~P=%~Lc;4L*Iman(W;yiO@Z^}(qDT2dsp8B1uny24$VXs8lfU9=pA
zCk=98AZ8}fiWs{TU0%}w>@KPDo?w~X-i?27R4}F|uNWi>AW&9$@@2_%!ALl+nTFUX
zNI=24J$1Dxbm5Nwrslm@Np=_C)x68Y%%?T-Vz>1mdi%=CYCF0OfyEJ79kP{zjSD=c
z;{w79hbjwhJO>s9L!LrqJS7Uyue%2h7sLSWPXTV!6YS}JN}6`veF$mYn?y&c;B_sy
z$6E1@wL}Y7>~3H~LFeoQ;}scIKIk2kSylxs1qL}0JceU^$!yLgJz8dyH1)hS#dd)x
z5z!?vQkT=W9M_5DDNhbjBnc2!_S|Uk=B4ugNr5KqS7Gf!n+0DQGn=J3<Bbz_LDm-C
z1gg1n>YfIXIkgB?V0WsEDo6R$Ud}UdzNwURX$l7>f{Mbmh@&JshMZA~4x8!wD%vAC
z0LAi_;il@S*>?)>>dVx+_<Pk34d-o~guf}*mNYngOiixO(o~HUabT92<^?K1Ky?Lm
zQze<d^`;KHkCZyg&VtYrIx$RJNBIe?Stg4JiXuXl>VX$o(}Veh6Z42B<`PW2hFD@A
zp~P#5Br3%aj>y28+Mp03Ab1GDK(PZsJEzzoAZj?bpn)Svi_t++uTZ;GP)4@Atb=Dw
zhuNpobSoF+HGQ5H;*_Wt)6qzLi$UE#jh>3!@u|3RthQFy(6IV?XRWo?V6bkp@L2@T
zghvO-Zr)D>&5(ek4R+xQGK<?vYH+b-aB8@6Ks6J*P+cZBDpmLWx}kcu5XYxUwI#I%
zv<PRZLV&X*6PGOE4IG4Bd}$*Yk400+X^B_@Qf;bXR29@5qrAr<g{~}n4hH7dFeznU
zmL2}ZP}d;48>Wgt=o{x#mmu{Pvb8c|COO!(hW)HSx)s}WtEg7wphC{A-pQ)bb-{Ws
zlIk0sxwJg^C8=EG7QRUF@MqVeHL;2~c5P%ISXEH_@mj-ii!fYk!?HMIqJBGkX7CLN
z^sU{u)^ZI4PKF5OR{Ck(k<K-kF@yW;@X}UEMLx-Sa=<k6-tc0<X^>e;RKAascu_s*
zgkcr^td~MaG$Z3{oWFrmR0+J2z%8xLg1u0|RS>5f<SWqb@ksl6Sa<d92^)LT2hJr)
z?EqH~miXB$W}90TX3R`?;^SH;VE=<}3Ggi_p}Q!hXFPtpUKDnVx@gt<nTNgc0Xe15
z!^&u2<YJR#N3p}#1U1OGh1q-QFdcVE**NWWlXMw%1tOxPmM;QZlYrUQa?*?WOdMQ;
z1oq8M^>KCkj|rY+KDJfr_*#c-&*0YXR!^Mc)A8vtb?^0iChPOQQIgfWueN)e*uabq
z4g~h;aF|U8%hcEGOY~Ah;Qf?CXm|9h?deTwV!<-GP>)@X`0-1aVOdPg|9B_+@8F#b
z_+|6_5?j*QP`cDt>KMU^3T0<G&*mz25K!(i4<#pIT<S2TC$VcUVfbUvDIe$4!=vcZ
zvJK<SuK>o{R{&#`!?4G1E)6Vr6VpqcA8GcO&j)Ks{m@J)hv)?3L-bcF(I=*tAqd<6
z?O>IP%c&A?;*vG*X+Th#2f#uzXn`y*F@P?p3gm}}{nX_(Vy8D1Z%Y(Nqa2XkBZu6|
z5EubByJcQlA*Yz+qlbbO=^l28G+VTmA~Jv|a~zXUlf4A#eqbT=LZf3iSfQs?><aSW
zKpT^@?O26#bpD-Czk{irOkttDtD)<X!*e06>)TiFFt+&WZpDKN;wzs;=?U5IjL51&
zYsEE}+EZS5*_(Og<F_ENAkzT(33RVEt6!u6FuPy!wbe!5c*3lQ?_q&KFg&_tF~^YV
zs^>*oVZ@}xiVw7<$1Zp>Ug3;3s0+BIPVKkja3RSY&MKyOt46>&Pivks`OhksfU9TI
z)!_4&UZHMqR?CKi5Ypa`h<-@P20B%$>z!!5q0D14vhI7yaQdV!tM)TNi5Cuq^GXmE
z`HUkwgc6^|92jV9Pwg1emWa}|QPf%yYK)~gOb>Z8THS3aYiDNEHFKU6CCY{YN)+7L
z;gFoOM{@>QYdS)QpmF647bd!k!QcRz6kD;qTq0p*lDUg-Sj#Q4tO|~EeHO^6)Q|i{
z>ll(Rs@wJ+z#}aiq=H`<fFxMfu{;N?`@v$&Z9~<44I}Ze8InH5N;l&i=D#1|WjzX8
zB6_;N0c)o+ER=9^HVPE>tO|#Kkb952n|HVw`)~mM1)Svo1BBUjD6ucSC<K4QmV+Vl
z#Mp`RwYe%z*VXlfG8%Bf35Wv#FR_rtB?M;|qKa&hX~XJT@Fl>tlLw(S&5M<dJX(pr
z<=I%IWiwZ5wzx+;>Ynz1QDwU5#^JFo!Yp$y#~%c*)VB^Ni&|yReVZb-Gc}SSeL|CY
zJzBN&455QJP#E9vHh}URfw4ENct0<F8^s_Ro=$jqU#&df1xr;B&hk2ZEn8Y>Hk!2|
z9?*;<lFCHByMXJJZdCkXTXEM^;rXE_8$@(^WebhS50;oM`hl1d0eAfqIO~+m;&?;?
zG61wf{z&jf`Oc;7cEiMVFO>PW2)DRi;r*b*Uqz_r7YqUwz8L~;B3_ob-*zh5=9sQ8
zdgxZwWHip<svg$FX7|*aeIRTvEWJO^^N6*yhd%pl8Dz?rSE82-ZqxwZB{bmm81;TC
z5aX_;Wk*aYLEW!5e4t3iE1}|qXN6b>S;E$8$V*kZ0~MmH+1RVby$i{K-Ae)^%WRZg
z%}-Uu8eCt->J;-tt%L5Nk}Gxh#j%iam%mV1vdDsXXoU?rv*F+C=sFHg=%#f<BUI-S
z1rTI43c783V!U$@9p)gOM}3Wam@4Lc(0!Ih#dItaz@Z<QS1ZjuJBBQRs;7ss=+ZcP
zb2VySk8Y>?@JqA_zt-L+^K8gpS!-B6uR<Pw?KK)0OYF_Sm0-Or>D@s-K7nx3)g9~>
zQTlv@=5m3qeZ4z8XV==V*)<?>dJ$ONTlW`9B!_`^xLqJ|Z?L)+J8IEsWDoiUJ*=;;
zHGuPk-y#Wez*SS!Y)1WTkWKUm5tX0h(Mof5HHemJ4TMi?pmgZ-e9jpz<AjTqJj^Cj
zcnG_`8YA&Aa~DD2aJ<*FS}h*RKzbJGNWUTi2ssw9CsR}+vOOUGxM^>kf<Tr+%${14
zExM<sIGywwyuFB%4~J7#IX083S{DrsA=qv@QEkT2vor<YN#x!YlYt`HyNr)*c;%GN
zzEVNw92OCV@Cs$?bD(t!X0`b;;C%OHJ`ezKtu(RA_!ijD!S!Slh!*+m1O3v|e3*b(
z8Z>129@SBP!3!_TwpG2MJN1U8*Y1x%vuTgPoO|TuLU7mm2OL~X&vj~2i@MyU)wRH}
zdE>a7^+B8%<P}j=ePArzlicw)D3|BX!Em?E7o~M^sB$~uuM6qV(d@k;*wsrm!1IUW
z^3R?x3YRPK2RCG+RCWQ=AxX~Rox=47<;r8u(Qe&l0E5<5o-;q`G*IKk!X?b|!{d7}
zNi1~=b6HslKU+JKKBId{g}GT0v^29@dzPL;MDU;l!z{#blurAuo3;e3n@S*gc?I}!
zJ8kW%xFVo~Vt8whWF&IYlP0)Jvy~6bEyN0`TKZ_@a~$C?gG#J+6E7Eua)ugn$q77k
zohU9gw!L6+QHV)UxAtR)^;M6+dK}yb;I*r5q@zWzJ4!=RUfo7Wo?8|LwL*MjIeaX|
zdrrx%=UK5d?s@qW;LI5fKi9rV184cvri`~SV>)t@-@#<t=Qq8<uV4<WMrQ&p$c^(%
zM#{ZU5qLpu+K6d<qQ!$$Uv;$5?4GDgguPAPyy|bAH{bSzfaQ+?E3TnDZO`6h-2X;;
z>V>Lji=DGh)-hMtOHH0|HFdt$?B@y990S^LvR_Y%?1;3)k~zu_CSPrTNQ(Sbb!e7M
z+UwEGMexp7*w;<&Im<()!W7w1q^}Sg*gqaRCGIl<kCegn?(83LI4^tqgkS0}MVHIb
z`AQbqoV{E77u7pO63Tsg@QpO%ObdAW{jmI`3i;QqIL2ljN-t-eK&x-k(G70!N)8Sa
z4}8WkFb8Wf|G~}Vr2fg(2tDWeLTa<g*FA^rhIQh;)!iYR$)J2m_M~FUOD4SfS=m{O
z)oWuW%Tf|Kbs=zU_{`F*l}D`1q`UvmJ>347mh`~UT(cj4<@#xy*NOQouhStf-}AVK
zp6Bhs3u>#>AK1moQ}T3Zd8B>@6!4gX25~!2#_150mX5hG5{)u9De6xERj!8(MrgBN
zTa{Uzfn{H^=5XHN&V?EdR1ys8Myp%y0t%)U=q3g^c*}i=_;dM}blM$9GKirZ)r+Jo
zp>vtCo@BLTL)`N>y}#3Mo{ckaLK(=GWHPtCac|vOOIk~AL>a~I&1Cl^c&S-pLzH|a
zHVp#CTZ7T$6zLb>pvpQqL3mynEjgf}c-WsFW<&5}(67sIhJ-@HjHm2TOZ1O#C=(+=
z@5m2uDI_Ms!h*AU3)^Sm?D3PcnA!8!u*Z-sL#FMAQcY*w0K$_TUXj7ThbjM8$IG?@
zS@8Y@ac8q1ax)T)qlrisbvt}K&nolAWqW|0*A-;I3A90rn-m868AsecZPZduucfQ&
zK<swy1gdnH&)H;9v(s*mt;e9uN*s)znDNhshZuUg8=d6iXWel=9VYlPArE&H@ssjD
z1fuRu(e~MZQeGB5F&pHQNRmFN3+C3J7=iXD;0vKIGFnmefq>pOkS5@?gHRDb1>uec
zDFDriLCbyLR;X9HXi|kV8^#4(s9Yu~WlJehJ6nyP%A<0BiLMwe{9c=kN?u@rQthQc
zs`ic*r3(>2QzN60=~7s1(6^|VF8wqDck|6?l{JY;OFXHsWBg!!$zfQYvgC7Ysp-$T
zmNH%f>>)u-1sZ2D+~6hN8yZWrKeB!I&`6ir<m#EY#wgp)(_LHJ89BfG6s^B7<hs~x
z{VW|XTT(RnJn$5x$}3WBWEODyG}w9CZ0=T~AJkIP?Of;WJe$>tzDO7^+k!pWhi3xi
zzSV_t&`uYgEiKL61)uC|8WvDARU6kPYZT``OhYS9C$Z?nN|CiigPh!3=RU-pb<TPB
zd^e$!ssln178d%XP}PpQ{j7^h?1&HeEx(sej&eaHsRR<^Bo)-R2Q4D~JQ0@)@Nq;X
z5_oTwJ}9EK)=De-KrD|>B*afJoEXN|(0rtJWg!@w0=0Md(!SvK(C+0RdoBkOpVi0N
zv1X#k*N@^5(c?pRG8vQO3;9gYm7HTk_Fqwyd^$l>=Qsij2yHhe135|kl}G8}t>>e9
z?c36YgutaW$?xVT>G-C&#*yQQ`p%8!$GZ*1`%tlY0mw>v1jgxJA9Cw^ao1(Jx^`8=
zjkBkE(G?he=xf9FUWQG>lddRYJ^VoT1-jy29mY!jjWs%K&xnEB!8*I7m)6~Z-}Ws_
zA}op`zgIHH=xZmfgCB|N8K#2K2w7q?yJ`y8wYsnJxU!g}&COejQ878~r}{y>t7Km>
zl)=yj(uD;?!<_aL1?PZyTUm?xblCUc2ACcK?8OC3*|gXJIEE6z7X(@nf26~jTC>(*
z!MeSg!K3=+0=HLX#n%_uX+~oMapLX6?3wij_zV|C!<xirIDz7i&9evQPDU-nQ~hA*
zP!RPT$FD8?7DzKGv4O%}it2~VfsE)4l8!ji0SYB1P>|jT)M7_v6dAN)kB=1*x^S>_
z(&7g1WID>Z6=o4BgrcO~y2WFef@(o_l*2_zAWg-5|7qHrpsPhnc4xZl_>D;WFky6M
zG!zezh?U-BZ0p!O9H*cyH0+8iYd*2u`$W-m2~Dht=M(T-0(4F4@(GC4nz=Vx5jFFk
zhl<>o2-P_EbP#$V2V^wP@^Lm12j9~Irz~caIF@_2Fz7HS)mTf+eDrP4J2Z7h;T}&*
z^!y_OO#r8cJ(1@qXBc$T)Pf_W$MS7n8DL$Mf;2Ff!c;W3Bwm-Ze=ptOmtCe6$*#U~
z+M$);E4XLD<A55?1*K$#(`1Dso%rjVyA-8dJOHT3E|pOmux6bx)}B=dhpZ=w03;z1
zC|sGH;=%x{g%XJT@?-Qs++t2BQyPT1i?d0?3XM>txdrPYs8vPuwFHc>PjK>XjmP=8
zUi+W`PB<U-Pf4pHrTZ<0WX}5#YXFbU199(!lHx#998Vp%3OPUE^GXf9=0%u1RrkoF
zo_Kybgk2suoTh7upW31RanNE}H2H3@&o<Z9&_Z=9)pE|)mTq_4EUEV#&ZLIIdE{85
zELS?Cu(K^!q86&k8L*YejXtalU(KMcV{rwe`tWR~zGRZ6I*{xAz`R-UNXF#GxgFI8
zgXJVyJ{A9wem$IfyoI#?{KR3Zvq3;jhY}hyU~EUyR|qq&Zbz488Z-Mb?fKzw1?*UY
zX3@vn(IPCLMR|Fd^ere_hsyJ3L2mdlAkK=KFS3VrCXt7=va)PD4n7*%i>ih#jh46b
zY47M8awIKa<f7=o@R7I>0R`aTK%)O(cpDyscrpdKesFLguC{IMR!7=Hr7&FR+KrO4
z!5~dCeL=M67Ci^GwG;PAIvDk-kmh95g9$z!h*DqsmFFufH{M;>&S3DqZsoo!a`~N-
zhtQ-hC~~8tA`<5sASHJ04#KO^8kQK;#H_2Idg!73-2g#r-4vXIz(D%=*bK6;L6RoZ
zU&#3~gOgydb{4m$;O}=ajuy%DFZ|jT`$+zLoF+s4p?ucD@7v={{@Usassq1uWIlk6
zfe~c`61oH}!AgJ<mIP$OxR(tH0s)}<RGn&5WvXkc4rDmXoyD(rhf~3FVzG38tbX6?
zj(b@5hG75tl!6&wpAJ*{+sE%4)5B>oLHOxNtg!tQ8+#z;LH@j-AM0d6o$0rOi5?1p
zjzmRbA#t!VkO;{3W#h70*`#dEG=w`|P!)8Su&7dz!i&_K@K>iYANV5g-n|Hj>0;<{
zOg`l4^`js3+Hy%pjI$e3{Kg${_)yeP8w2!Ac4OCzZab1i438+1xXO|aTwUIX^rsk0
zPhG)QRGC0KAKC7`q!FqhNOLqTeT8X1TEVtmhhnDbP1pODX?$gl*0nz`<KHSg#Gc<T
zgThVEF&4vN9weB%Eiug6kyjX#kZ&$F<EC~PofV6lmMt8ELD)m^S>BEWKd^DOxw&yR
z7;K!~ySH(6dRpITpPn{0mJg})Fc%jc!CX$|;k&%^?Wp-=x!wHLC)2mmtCycluUuVu
zTm1W0`qq=3<|i+jzxHJEWcXyfyQDy1xOlZ`^evqzx*dO+ZWfdyZdS;ZICl$n1JUI+
zDI|h>3vnOVs62~?dFPfmn$oT~XP&Hp!IEIJ@tT9C5!p~)0|j2=DYztt9N^7S;IA*m
z5W72%vPlh}hq{Su1_ZHS<CBiX&1QIdqCJvRxH!q;!1*G(p(Jqh@~-DdERrWH;+`qR
zN${I_x<b$M8ie@2dgU+xYy(i%GCX6LPjz2`R01o0;Sa77yJFd7+Si%IJ40-hq;3+W
z#WKT>7pCbp8;_XUY}22YmY^EfQP6JVKt?4|Txo1wKWv@&kdHWXfpi1ax);GpJ4kO0
zm-w_)nMU1%Z4tFGI8b{>lq_tOT{0$?&w_*D-k>|uhm&L*+D5ySi+l!cuKdVzPTEWZ
zlxLi_nMR?JNm$ai^aeaQFcwR>b}7WB!6UiWTum&n@~EyYt+?rfT(YA}qDrX25p5>;
zBUK(VF!c${H^;5vng6iN9r(Q)5}+)9d*?}WY4=I8w37@@PIv1&Pl|YV$xdusy11N?
zVBQTQtM)Zo+t99FuB+OOx~#u^m@$EmYkbSH@Qpy5^6^dW1`DUA!4p3e+R1h+TF)B3
zGQ4!i1GRTncdY_w*F@`X2lLl<?N^OmM`)H>+`3T{@r<v^%twN?TYI0S<D8uSgER23
zV*@?`IutV_ulA{kf<_3Yq9Sgp7Y`I~85xLl*&_&NDlSNUUyDwrYflrl8lBEX-+ugE
zHKRBf@YJy;2IVk=cqHPUl|qEqiQpCR+?p1kxsVr=sGmJc`=?NRGCsv)Er(d*;s6_`
zz;XmVXG!1DcElU$ifO46tqFEx-4+yQ2ip2lp@+dxBu1(~<bGCcyl!#~q&5aj1>Guq
zJQya|qq>PJ*=X3IT9?ciJG!A*w+TbIGBebmTt=tN1EHlufmA!8$3)|m6CaI=y?mUY
zG)*wQC~y&cEj_B@Kltwe|G|GLPISV#Kn2Jr)Bup5f$?$JBsy{ZUGY;f+VGa=v2$)l
z?daH6Zgq}@3KUEPv!vmw&MNe5rQ2hi7CTMq0vwBVx6%+L#5yx(&#KxReqv%-p&mDa
zP?LbE__2#?Vp;uKS|Lr>TUMxF){rIVnKf+WxXkZX%wCoHaYPEGhJRs;2NqxrUi_Ri
zNDUUh=a;@0ND~X!Pb&clE88ubn6il*=g;C*94?p6FLL$HW7|JM9fSzPw?x1BD>!Fl
zVV)0o3Y!Pr*u^^iY$#n__QE;}*^U~ur%`MZ0oxE(T9WE_qky6J!*Sjdq#Lv<y5Ns*
z?4B!l672zgb?13;pp>Pwr+s~r%f9mUIN~S0t}#$W*Ii0DaC9KxoEn966Kr<KyGE3a
zK1KuLVO1385<_z2R3vr=%6nYQF-l&LKHnKm>Z*^iAp6#alHAULD&U$N5Cs#^++#!;
zhmPDZWm?f6_DtI|HdFf)SD1O(=g~CuiZiq9&>7Q1v*;Ayot51<Dgo@rh6)<Aur9n_
z4^U|L3+o0!pSv$FON=w<@J3b?NRvP$#7V-6l<p^rGKSjP?4^u#!RQ~B3@kU~f+SY~
z4q<8eNlc4fcM%31?l^<YNp7)QmwhoHeZv>o>YnGYfKlqb#4#~>S*lqV@<U)Q!E;^b
z=eWSvYX5wfa4BvozlO^K^IXJ_nTS|&2o)}oHrw8w(C-C1u4@LyN^X`^tg17xFi|{`
zrI~xLUA0Ab{OSz+z0%6n^?>sYy2E5aom$0opXR&1#{K%AmR4SHysn68X(d47>i7$<
zJrH|p#RQtd3|@XPP~`_@<p&PKV+Y_Y(vhVUv$LxfPs<3%^y=Y0di3$gIV5&Sc0#8l
z5**QFz+?-@2>t$H0jY`Q2pgz?=++KzR#3IwGMOLNQqiU?VgPY*x8*CO7_e&?DEE48
zN!F)`pX}=h6ePf7acA-Bq6#18hSgoXer<Vj#Op0PU_77%2n-A$I-*i)Xz2&imVOt-
zfQd(CNWB$8ig*SeE7LHzC@pE&yt(=<JKb8Aqi5cSt)YcS;_J|NjJ#%s@j8Y*Ltx?`
zELBsaI=4YU!g*&0Wp}SJB|ap4nwtq}Sz@Wpjue?!V+w9|u0fnlZ>AO%oRWMDq{a$i
zG-cgS3ay+AzI`apSY1rF&)2$!K$D_|-KoLHU)5N~b_@>70@GP&6Mg*(5!YFKk^O>@
zM=8<2P~7E%;=fSr^&{jjJ^u8CvQbx?gFVQrpQ79X#zxt^v3={|otxjd^(eakAiDYB
z{_VSWZf=XbOTat2|AF8sfd+>8&3t$u?$9AmaK4gV-cKy8YZXY2R0wROKD_m4>&}Dw
zP`nf)A0cIkA;{cn>z&q0cwCr42Sa;M95TIaF-Jv?VIWVkVUnM;WWu`EcvL0CrA7X1
zopi^{VF6FA*EVlGe01xk=%C<BL6Z@hvrUY>F%Um*G;ch-Q!*=RQtC<GLsjwy*v2Z|
zq29D`G<&+u?kJ<MC!rjrU9^J<qj7$mC8>2p?5eY|%z3z_cFyk+Wg6#Y7K7#943?M0
zxDH175JmRT7g6=oX*N!aXj*_!KYczD$$}X=MU^b$|F6W{Sn8oe*&3S>{CUySurIS&
zE+4jLHtc7^RE!>Rlc?bP5`HfSSN44WSrAKNUl0oju|7ftaCq90Q~I=6h`uE3oB8Mz
z`LAegWpypunuv)QMi0};I2GAY;?4j%i@Lc51opi#OvYdYl%MpAQ2y5c`)B*zVv?o9
z=w7#<PeNrrnhvA8-7J*#jdVCn1#|R%3erK*&rqS8)A!!(?w`J!b{_?^kH(q6Ky>88
zZnuc8b*IHBeg3QTr<G2x%dR~f=V0Oxeeme6xXT<(CZqQ9^2y0bYXFG14#vx6LoWf`
z&3bq&;3GR}H{Td_d*YAGiK7pV%@{m`rO~3yLiK@5(P=)72HjJ%+?f_+-3EfFR4njb
zIzm66uoL<jydMcFCB|lA8fXEGk0gwIAJiqIuBb4Q;p=t5s5_BJvwn6F*;YP2T<%k`
zVp*IIx9)G<Y6^s9g%5^(64~PZ!|2ZNypr|spzL=~;6bi?I8H^L*q8!?lW_(rC2>^b
z2NOXTVJ(5)sJOW9Pbb!RDfGYqj}?Fy#$mL0V=KC|wHUp7W9!aV3_u>=*?#}Q2iwu(
z8;>5{xW9ep)>ic35u9tAcecejBED`%H|~EFedEsk%{WRkux|!ZF@_!pG&2~<G{Irp
zN>d93rJycWNiRFddd8CKP^_-;5MC2U>3EP87>OFJ1OW`{!gR@Q#Oqh<OYKl3{R@UT
zQSdOO^})nJq~a0KC!&m2ccAU0D5btrBUceMxQR=!M!%lJ7NeKr!vQl2Qov-*x?CG|
z1+?Mo>Z_tpzX>IfIGT=KjG2}93p^s1qZ>&Q-MV@2#@dy&=38W16%EjCvrx8fCgk|A
z3%cpzFsR?T^){e~0yQvZLB--4EK9P^((mOufQOUbl64r@5Y@pnCXO<5>>KNBW}lw%
zcs^7DpZ79&-ea~C!6K}xmVgW+yB<nqha~TCBB^BL5?E{`>7RcmBkL7F-S)4f>?YP{
zi8i&1Q)M+Lrv)hCXW(hMyT30^@Ql0<%Gp5dv-HYR43sz@2r776ERKWxIX9UE5FZN=
zHyDJvLK98uSOy8qmCQ)Y_tu2eT*R=%^k#%<Vv81F;CTRHnB~j16i8Vw>PDcp&Lp-3
z7s`qSeV~+7q<UJt)&RYa=mPmLiZ-Ab^RfhvirO%bGFG^%7Aa=K$XR7GO#KQMpqV1O
zKbA1fh{j;KVE?snjNn=;Mf~>GN`YPERV;Bm270ijRg4D>hp4HPW}fV$f$-9k{pE)A
zL@oxUL8C&hXB<awcBe?f#+#|IV0UK6g_MtMyJ1UaO|^WBUE=`Z#e(g$nHC9#N)Uyl
z9T)kNGsc{ab+#j<mms2z%!QEQ7c5fZxe#KD-ip0F%VCf*?d>Lsv6a9jB5kThaCphH
zdZIjthzcj*S{yUwV;?yfw=jkavugw2?H75=U}f4gZh}mj*a&2`!8@XlR8vDIDL-G9
zZ9m>4nyL&LK7w7&dJv}lEfwAh6=_vxwC!)lpc$>D$IY8JESu?r@t14SK{_iQZQs=<
z&{pBy)_Br~eoFt@%#RwZ=xy>Rq=t_rh6j)eG~r~E!v}OH>5h|{2fOUe$Zo7^rld8C
zrh{JJ3<%xQVX7{GvN@->;@T!{Qe$@@EVo(39lU}m=gC&qhvZN%n0E(&tGQHt$_i}>
zYYo$Ia^oZ|#HnV@fk`c!gyE#wr6M#q+&MZ{fV)PoC_c2d6H63z>K4Kq@|$CfLj&@v
z$vE$0h^{xq+FOIOsUB#?uTPf7hvR%YGSws7yOz0`haixpH(=*C2u?xO-cXffj91oh
zQxG&kC|ig9)6r2TI@1I%|1(Ntz-LsKAu=|rlroJBmpkarQJ|mqo;CAYLkFT%6vyea
zsM3TwrjK?C^~p+OjjMDUC7$Zx0f@NkU(e<vj5YDkHKkRPA#lf-f(-Na%<<Cz*$B8$
zLj6DL+62I?ZWZUsZdIAbb535HM*Ed@ifwEVSuWrBj$-(|WJgXme1^^-`N^r%!bAu1
zn+H(9A~`n9x#&JCS=AJy{pTU>P<aMzA7sPnB*l<`rvEH4j1?7V7NP`U_13!UBk*Bf
zWRlBOV4aLGXesm?$x`xU-OneJe9%OR8b4h@>Ub|5X9)<UOiNaBxE(0c9LO@^X#`8)
ztlO6kRE=*(lPW5?%JW#0%x+mFnGi<hvnF1Q2?@un1dHR-wChYnCxiGv*Mi{8*pH}f
zm$SghOJ;`^kx77I@B+!tDIg2n27_7tdWZQ&R1@@~3%N}w2igtwGGbRVWX!HnbJH3j
z!{W-uY3-b=bzP<AB{p0-0wttJ$}k!TN4H=x?|b4p)$JYK0*QTL4|R`%l0KMDiVU5~
zvg=MG3J15AW&OKH9D!3=Bhi<S3nq+u3q33p6L~b5nwl(!0}jCL%5w`W{c$X~yf9e9
zOJ2LCTB#XwU$aZ0fXTVgm4UOlX_X;KzLCF$S_n8lo7GzBl|Td5w`YsqLbj1fAwn{>
zqOYbNBhrxK_l^Ub-7Nz+Oy`?C#QV!oNBFz!aXNM)May#5qLv;Wc-;ZmIjc3+RC=1!
zA1YlnI2xWF97+ic4g)sF;Ap_1!RbCP9UQ-d;lZJD*5I5RrD<OkV<AW^1_t|5QnF&8
z%3-U4D=Fa*WL4v{2eurMz(B(wH(`M^v08IzS_|y363};G_=|Ki8%rNK9qXo8)hD;=
z`3E@A_>2K}Ys@_XL1bThLIQ}NYk~x4g8-UIHa^E>ZKi0OZ7i;;dW?n7KPRe<854oU
z<{o{6%WDt0!s~qFoM6L&5!OCzq*MAeHlRAMV)Weln#ES>{@B=HXAgwiM2K65B4yOp
ztzS)Zt<s!nKXx#%3UUe!1-DZ0wWWil@Us}lz?7*NTMLjHSd-|FtOIrS(E6wbR#ZU{
z{eiV=SC6VGY8__AyOb3^L~&s<ubRg*02qHK6a66qj`Fq*c`n|Lp;<10?WIk;#oJ?r
z?+ZplwCsA}X_I~kGC(htAnUN2l&GFg>$MkfdjRh8Wlb50vCc3oR88e1g4c}gJB!tu
z@|N{A@BB@(s;q6M8$Blq=C*f!9C%#|36tS(0sYK$QKO?HDRf7pbeL@Cbz4eq%j}ed
zQor9c;I2jwI6Ni;3ls?VxVH2-$wD(=x(v#|LtamdltMaMrFFWj;W`r6lC_d!$bOJV
z6+i@u#l6t)QgI6UVM>KC!VHO$@p<{u^;@ZQ|N8l1y><^OMvtLpgj#JX8n)I_XhjeE
z7(_T5_WDzK_a%jhh}R~kz|w~w`BNhgEdn4B7cT^iGg@kv9Recz-%S$fSk%5gOC2^%
zHtg=s1tA&dBbZK%`4W<|flo(WNUXf6O{7>49&O(}C;H$#tzp}p0IAQ%738jlI*1Wy
z;>S@7%oOl9ia{tVQ|VbP5F&@9!m1%qEdW=EgkOk)-~i~sDc#wmTWjll*7RnHCg6Qf
z>}o|JZ260IwrP))fvcI$t2o+teRZ<wwD7@p!vZ_|T;olY9cu>F0QVROh3TE+ewm6+
z2LYNeH*RKl7`_p1arStGyHheSs_=~arg8}h>Ks~}s?sVRbg@ixf5L^&oE=sELOEQW
zRsk2wRKT^pReD&PoSC>EsiJmE3s&%DbhK!TyBsmLDRsdXWxMw!2F<JMEfm>ESr4Eh
zGWe2>n6KG6pp_vKe6xR@u2%!{7#I(Ilki4#b=@v_YlsGnb*JD`bfp2M`7+9fk5H3%
z6ECYqDowGqt<XkTjxRJ`7Z#4L4Dq6+!qCnx1h=rwli6@8pxjQ^iee+%+@W8)p}5dv
zbR>ly6pddA*}TXDmaW&FfX*5M+fY!!r>>4~78sKE^Xd4t#{?^%XHa-gjzs0!?k`}t
zzJgJ?hi`_jJub5P>y8Y)SpGuBM*9J~#^eU-d5}k;ksg?B;8J6+CcXbAHJ2#{@b|it
zqt-z`&&MV-m@;?9jum1omfaU!a<;+h&RH#tU>BWK*BZZor2z)jue~s^^6M@O@@D!A
zS`_Y78QXCR3l+*a-`Jz2)pQIx7;+4QKzYvvy0R!=lciNE7dLPEx`I6S@_x<r6QC?$
zqx$-U1#7=HT_LZ#zXT-Lk%w+Nem<ISUwQMLcdopB`SP19m)~AlS+U|~(kkHPtBPA5
z=9wC`%yd21yCsTrvZYY0Tk>Qp0&;-Q!a}4p)vy8Hq8?~)sz(*TM3Eq<P2M{V(C%{u
zSS;8y>)nIy4i9U>8@bAMPK#!KfV^jUbCS+`Z4K=7s)nSpPiYgtvG@%f@zg5tP_P6z
z#2?-?k!p1sZrP&l#|^cTPzfj}orJlBI6Nw@am{TjoCiXW_KdUmwo_Wh58gwmRneAP
zUqxiF)IQoa{jq}YCaJ9+;v6wjZxyH(corrVb=0P_g>(`P?IB-c!zad#YI8sV1sq8v
z43sB`lmQ^7Bd<8kO<9G2>{6!Ml1rSGUH#$FOLO50>kBG%L^({lK%0h2TyplOlZlQ7
zS~+H-{_T8hU=(Cu&>g2JmmJFg4Kc-N(Qz@r(RSI$+e(nX^z#sV{m_Hq;x6UcWth*H
z-jEI`D%9FKNPM!0<=FA#-rE4|5qJ?obByJrw3-#)tuU&w*CAK;#Q@*1{Ls-UJr=m;
zuU4RPqjzsaZcallzVsIVa?|s&#C{5d{OK_nOIdTneVs8(QXR5Y7Tn2pSr9x?;5blV
zl^5uPC^tPWiQ#S$(J-<7<><q~f!_&#c6Zn92=zyx{}|K_<RbMz-1nnYiUA$6x#4PA
z=Yk0szmKJTy?ZOuJD|+-s`qeYpW9A<>E(_^I3-^aB(oQLGyBYoUoJyYs>tOA5v%D`
zu$%el;W!_454C=)$t-i8U?Im%U-<U4#zn@CX0Lm|I<%#`1lzZH+c4LDENpUll_hC-
z>7r4tjaI|)2@&9a0%4}*La}u@*}y|oSv~S*#O*aTLzBW`xfGA)_e7o7CN3R+w*gf2
z!;Qk`C`$sqxmheY|Hc1nUt=_`?w=aUEXcK5IPUiA4HFK|s-tZms!bgbgjL^sHEe{%
zK}4?l?V&C)z?yd%!f>5?8LH^N=Ve%D&z|?%=C4d@ydDf*%p(=g3~OvoUAuROspDai
zcTWXaMWEc_q9rfEOF!A|x`EX(x#X&Ed~yQlZE!UYUI5J}Xy{WcFOhL6y0QZI@`i`L
zL@L|^<~yimIoMRS?-=`r*$|j9gnb^B!eKR>Rb!i5u&;F&v<owFFLG8KZ+}diGsm>y
zwHX-H#HPOqL{N7GFyJWyd?}X6fAutg=x%-1j%Va`lj$1Sj#c$7xn8bbF@rcL@<49!
z#M%Df0Hax20W^qK&`+Mu!s*$A!3*hNgth=`!4HS}(wzu5Dv+}N531`|`)Vz-j8b8D
zaeOMS+l+5hX5@Ti1A=^;r<x7IJ}*K-W>rtDH0xmUR++z?yrISXa>Az#{}}<it<rol
zSbB<A4@5NUz|?32<9L*anQF|(#hm*h+?FTc*T#Z2qf+}7t&3txAk6U4IfjFcl38-=
zRqX@41sv;gJE)Zkd}3VaDJRS30mFDCw%(n+{S(^;W<C|&GQ`2)ttmuEFIW;fUp%Z+
zybY>zS{Qcg!GR3a;EA-oEy5bK$%YvYL(X{TUvFTX8-;rpVu|;=$Ee1nxhXcLw}#$I
z@J<>>%I`_X>DwDg^*VIUaWoB;jiM~^OEZR>cFbJ+B}r#E<LN$wcuxd7*1OP!i-H)E
z%X+_hBghqS=zgMfudy6IDK0Gs-v$TU<Wf+1iYx_wu{G$90%*lycE_h0W`0E-Y*x=I
zeVJ+Hxiqhoq9+#Ip+it#%aai23BCY$K!?A~Om9;hTSk4PhG8s&^ac6cph}`140%XR
zj@s#`_0<OR7~h(t&!uIyvDPK~+zo0^Nm4L7v@rcR(0p~ex!w{DJjR9JnPx3kucg3>
z4K!AgQ@wV}!C4E{&7ZYeb#RZwit6#zEG*}xjZc&F*ydYcPVL<oc$}-A9k&5*YWy}r
z$#YDK4~Wf(llk9tI;>YoJ{i`-q%#%vqh%-Z9x<z@!3OP3f(zYGoMQr9AZ+-ptp9d{
zj{?DRF=dGi(z`g2%LI-&ism744>V8HV!}Q9A<vC3EUmQLJF178w}D9Q6(00Qy54Q|
zKnI=>fVVg&0uVX{v_M?9@p8@MU8JqbB_UDVOTTt0VFO#jz<z;1b2-X11kaR@Vsy|D
z8&_r|@9?-i<6?}t(7V{M%`!Ly^J*ZITe*~^R2g<S5H326H+&!q3-eqYa|b8=aN&R>
ze-)raj2UP_5O{5L-I#zLk90#qUMUpw94aVAUHYl8mI5}s)CoSVJkAmfm(sK?YFJj_
z&CwlRdkpmJ%rEH(Sg%K~)qlR?!K4aH0*fOB%`Hd-v9kD0c>-tYkvtm?C1}1A2*GG=
zZAI*A4U%_4j-6?)38l*yYvt(797E}Dgr6n($V?r41V+q#it{BME|4Yu9O!k1ic@3G
z7KYmE3)ax!AHN_ivw%z=$gPE1TmFr$L2t{yCY6X{n^VZLr!#Rj?h${|juyXN-&twC
zvwOBee^%+wn)vhPZlf*!ytRu-i?TMIcok0qBqJH;gBxRXENVT)z)H{_E<sSIKa|4@
zk*3rJbsjkT<jRAvQmjlj%rsvkQl!kwvruFPPfM@BT_eiDtK%Fm@CeqP`N-9%Pywr%
zOi$|X`eR0vN>nPXfXmwObNSm(ilsC0|BK6qajjNGMNF(Pe-wg2l1nDsrU4G-i-h^2
zD-neT9;Ju3o-=MvuGj_(`K)|Sl@t~Gc#$t)UNtyYN*YOhD<2#FQW3iKe|c#RkDDe3
zw&9DeL;BU8a<a#IvnLZhkxrE|Y5fch{%Y{5Lbb%Xw7L^%y5xaJ(Kx9tSwW`qlbb`|
z5XjKeqsgF;F^(WEl4@6lzNO07BF{MJDjyF7vDC3*REesK*FhW}v|WOGytq8?$QD4S
z=8fp;F4%KYye4-5OcTo-Pft+eI<Z2P*$5+D39>}i+jRgI7)MeuEgwoXQnhvGW!RoT
zHM5PdpJ~!9T3z#0iR@s+JZw6u{KK%OO0Z{Zve)^uh#4s`y;aizGa*69&}tEeo2yk!
z5)aas$+-cT{_M=227(n$U={$wvN@Qg>XJwi_62*Wy}NEmGFmZJEc&0csqm~LxcNQV
z9yo!axk|<9J*SKtq7m=yEFVP|yZ{m@Zna@vILa}@GOFodEf3c@Z9}XIRtt8GU;s#Y
z>)m9|<JFLq+snj}XZ9p<_cEj>`i6P4h#6;@ptYiZmaAh1rNd#uQH!f~#t#13)kf&B
zbQ%FYILn0`^7t7#F1Do{=XhzIi94>Y;PdCqs#2bJj<?g<Xz2Z*M(VtS`Wo1OWo?$z
zIE)-9(#eS0djSYGNXt?C^9D!eGLctDw+D6G)ck^aMQE(g#t03<=fen#x)@<%2}ar=
zy#%8YQDLbq2Q7clzf^QZZE2W?Sd!bOASlt=+c7BV%KzCEm-DEH^oVk2NF+nU4iFhP
zPZAl8o5^PyMlfBo3V_Cu3mk*zs=K?xP8nNk8W8Z3p$0?~FAY!^)x~TLD3!<wq-f{z
znqLv&tMZzHuKSFS9fnqN6As5{dTid0uNnC61t>f~KqT!Uvad0KkF+sFt~IC>Qo=An
z3;rmEv0=uW*N8Cyzws5N0C6lQF83u1OF+T}?cB^1Z$`b!`-#;lb3LhO{Q6gh;`KRD
z92&Q5_PB#r+I#>`!lP_BNyo!(A2u}IJu&1~Kktb&By2I-&OkPP`tnG}KZT{YJENCa
z6;Dx<URhst->R$<D{IRAWmS|+NyQM#V<R+(_Eej#1T8RbstUSmKkR}J!e5HszH)g5
z^&zziqosxus$^f3ZSClbt!zlIWx=f;mp%I`M_;p{*@^>kK-a-{8s?9dZ>!A5%OW_*
zoOh~{MM78H#G+brlEPbV>?w}daw#PYo=~OOtv1eoyQ51s`8R8&gV98w&M(_Knzs?=
z1kaSo^9f$C#i4H;yz|co=(FFxfzN(owO?^7u7MR7_O;8U7k0Y4@e6y&*#iZwyE@Ff
z{TQs=-eq5Y(PG@M-eiiwYy&Kn;gKO0+d3!Uj|HXf4kzeR4Hin4PYWDp6W31>1t-=O
zwr3HPH?LID6R$$K)NQWb|Nrd0X_p(xaVYxP{VR$vH2|iuHkToR0V(v#CfRJVyGahG
z+2$00YM|Hv3WEZAVK?59ti_U#w&SbKww_1wm2F+$s~P$FJ|Ahc{g^i-XFlmKyoku9
zGP9}xG>4jz^fb1bs9Yi=Gb1A-A|oS%osw(VFo^EQVUyt}2hhJeQkS3tPDhQJK4-k!
z6;O4GS%Ivp<AJf~zs46S?u3r2WkX0r%Hj!~QY&R~ZBa;~q*=;fH1rAvkiN!l^pP{`
zh$@10;^ZW*yxw-2Fww*<1s1^1?*ilKFWA21mZDfX`rO<y*n{{|OEb;_gZ>#d==?_s
z{)Er@X=c))JCiEekon#27$}+gaZJ5lC%!A{sGY)qhy7CwbP;_bay)1DYMO~1&5Y?F
z8(0?`FBJ;O^6#@Nqf>88j0xyg$7wbru@Q-HZ96g(qc)}KoUf+dn8ulsFVerWm2fB^
zUDq-lzaq98JiUcd$~l}gO7qx3>P8{*HXVG^-A@%J?|=+UXb=3oF<CbM|37B5Y|=js
zR?CK-vs>jO#Bx6#n<(LL#<B|-fwX|%F0|sNr(lQ|F8>iQL^gOY)YsE<OwJ`H^UQD@
zs(4$z#u?d3P-UVim&$?cf25ltQKtyGVKYN6V9c(H@`$#kY=`r%q0DU|#-lolH2{O9
zu>&RFDp)mGD2)uhRc#$Oz^d6B-OM+fq+*I}>vbI!+LmY4p=bTz>3M4ot2exEaxfJT
zHWE4K?NrQ(NLq>F8y7YV`%ZSB*Oj9s*nW;;19|agl>ou9@w_B(98n2A0+@W_H#n(E
zpT327WEp&ML^TPtzWWCoI6niFE~50Ehebzjq1LO4|0Pm1W-oZbA$vScV@W~MxMC@=
zbBcdmPEVrpfr33%%2vdyIj5H%vPFIpU5r(1<pMSiVPZCSDr#=+jL(uG$6~*Wg)#b=
z*KWjGU`~CiEr!`Vw&tTZtBl@A8CIOj&>?kHc#4tcDke`n#$O}<q)wnG96pE7o<%?T
zGsY<`tb^tej8WGMC1XQn%w^(XwYJ%Ul*hXA`uO8&vl4bMu8QH*#A{HO<Eroh2)}R^
z+APr+l4QQ($NLzB!EL*PBNkMl;dGOu$@<`FpzgCc4<^{Ck-swG06%)%uZ%myj~eyp
z3S-7Ry2A7$j=SN@AMseIlSjPPckI2gz8H#s*o)!Mg#Gad`%i^T=RQd?{WH;>dOZFp
zi0E8N|33eMMD-_4AAj_dtw*3x-}f;B&dp2;pcWZ-&GeEZ*thMWKh~8q^pYOckXIVi
zn{a)%>2~clg`>jY2RSW8E8B3|0~;^Ks3jQuMa<F)cUXusR_BU^W|$(rFU*0khjOn%
zdI=S*=zdOqa#7c8sYQANFnTCtK(&t7P@L+07VO9y4pJgqp01bZPIcOVl3SN3FcRTI
zC%<7RS{H=F15HK-DI61!FP@s{l$aharfY-|uNbq(hXxJA7H>hKJySOUu__dvGp9Ws
zMDL<$j{ZSQq8)T>=>kI2HaH45teCEgp%^&|Zc2dU_*gknk({QA<)lS((sWV1)KsyZ
zCP#PDueX|OTjfMj|D>VVF6`vGL}(qDZ11LbAPm-q6#@66<e-%->DY&Wk-Y$+g^lkF
z2CHJg2`{#yVUv&8FIA|t>y#q1h-ZhJBi`ipLoX(8Yl=CHj=hh^J=Uv{y<{H8)H?8`
zEHbMo%qJ@S2GWI6L{3bsGPKB&>w`{Z*trNyV#hIB+nS>7u(jpI+nzgR+f4X-NsXT?
z#pRqoC0Zn<d|a$X(JMrcLw72+6=Ggd1T79i#1(S&VbU!bdPUN3CZdJuINz!G-?UsX
ziWg2~9?YFPh9gnH>Zk#iQipu*EqX!AAgWP7MyJ7(c{IkbviLid#`VO&iJD2)s=KyG
zlXpQx0=IF>Z*id}s3Bgz36jLYbsC+?%QGQ-@_B2+@q2hM6F4p5>5mZmBZoZZcA|Rs
zG8D&5p&;SE6nO_x1tJ4@&BQMIi2-@zHn&3D`hCO$XX&q_OvwR0IfB#+g$nSE9-pQx
zg^uaZOe2G-XFp<u1s54(xHk>>QT0N`eBG!YRmC*$o43rO>V$5bN!<7ea13^G8HHsC
zwwz)r%EcBUSX1uhXSq?dp#xUjS)*hcImisQl-!xBOtYV6UNAzsFQ0nM%TuAqrnF;R
zIe5X1F<Eb+Fi$X(@w=Ob$5b1TT%O7s;8!ZvxiO1WvV%DP(hQ@)jG(HFpb})cQ><?F
zX0}2i^oG~Rrx5d?mp4I|rC1CgJhm)MH_36Qr5|sa5#lE?%jf?9XPKThjGSe`*iJul
zN*gWP=gtAro0Ec4MCPK;X7mv0&c?+#ivJ$lLNtt^M};U6Jml7VW<pE7i7nyb_grLK
z)5`e<`Lq3mfWI{2N0^@k@fZI9iJ!k-899x?79G6+a{jR95Bf%;aQFoEiCy$KEr%0(
zKX3l!ZDp*hpTI;HKGlhy8G|E<>Sro3D3VRP-MDAS^!rna^V#Byi0WE{6{AV{%Eil+
z<s(lyJ{`4Ubb5Va(1_3`G-U#>`{BTyO2uFz=!BiFSpJlilRr>ZW4xw8_iUqxh1|8-
zFjQi>h8U+}F=`(TIp|G6<^pC+wdpnvx|ut<Q^n%=UKL_HHTz<nnw_pwGapydo}hpc
zE03-;dE?TytwmVQnVHk?SfgmV4DVKRu?o&h-mAtjyHjmF6SkdLHvUq!n^^unmV1w)
zpN@-qa)!+02Q9bWGC~tk8ikppA9UoxqTEHl`eMZ0kF1Y9H|r~=d=*B-u*N+9@kjT@
zNd%}ITYWK4v`u{eO03;M%p+K4T)dHTcASzC{ph8q$jQ|vs%*GX>~mQ+OjdaMq7xOR
z@W{>TY_s4X2aimHdP94)L1LZHvqMDu8#pXvi$NR^2Fj4}WwQBpJU&hZpk56>AzuzX
zZS|-TIR+>X{NauOlU9uWa}fsP2r0*86MGuXLjF*CDqhQa6pE#F+J4gh`U!N@^l*<v
zKI|uN60<49cI+mUTC)eOoL%#gzLiX@%r{nyt10hWj2&r`wGgW5<S}63z^OJ}jL@GL
zUfs2tp4)9&HM_otw}8Z+-m&)_%OCc6g5~-YIz>byr$il8%4uexPkrlL(aK)2mYo{@
z!bb5YhEhTRSfDVcIy7Fj;^L?qWDpTHh0us{>d-s4>-7)tZRGL&vwh1s#M3vY5z({j
zcK5VBE4^UPP%W2Kp!BXBrV*<mq+Oh1y+Fg1M`bNN`of}9$8KQ<Q+N;E>(g&Y!W@*U
ztZde5yB&8R2Z)^v4m_)nEf&ofvmCY8flgT@S)OnOl>lWF)Ltm{X6ZKkXB2y3NY>|%
zV*|x^-NCQ{D&3W0hB!ko#}>YpZQ*UGTrM~{jk?hcVA!1`ecGWKlaD$S3#j4LL6Y+w
zx-^IEKqU(p2|)|apq^G+v{Xi8IBJL-(;I@d4h?lJI&K$jW~@EO=^;tOT)16+fA7Fp
zj_SBZlUOXFgu;zU4l)HPvo;0wj%#&f%2F(f696E>%2KBX*w40y0l~9KS~P^PPHWDQ
z#}36UZ&zE-?jQiCX6rG-C|a?mu|^F-HmeWAlq+g9?G}a#<%AtfeH|#E8Cei72F@8*
z!!Yx{3pKjrfoC=lg3V6-Bj1!Hw}MK<<6WXH`Jj8GyQLAEo@@mr;FGBmcMVSKRs#~k
z@j3Vfp^(kJmd1%>@7p_m-R=>`L5+*NBKl4iRX@vk*IdyGRgxPMrxkj(KvH@`xS}fi
zz6*M8SNJT!k9(S^9eA=y+(TE_=3XliK~fK9ChCvz&Zx02@~i=jTW@4srVNVjKVy0w
zVC#T#&4ZmWaH~y+t&L3b(C6mdYtp-~Y`lE3KZWMbCc8f9w{JK{re-Yx%mNKWIHj}7
ze#_k*OsHKP=UBh5D*vJ5$nH2NwnmHtn?fF^^?p<OrXhB23d9trzf)p1mAhaZYI9Sd
zX1?(_HD=Q|QN|%woC2}HLG+Y}P2*V_hge~n$z&l*UT8Lzs$-Cwi7*5j`$mc*7JacK
zP@2L%Wf8&VO^!L%Vx(l64?|7E9xa2LtB+4ib=&9?am-=QxO7yYWZdpvG9SGZ%}4*t
zL;uV}$M8@P{a*W6d^7}LYF-){KPhY+pN{3?Yv`fVfzvVG2oNzxLsO%4{^O%`e$0`;
zOWz$L+B@wI5d!h&U1H2GQ9Q>adW<(bb7}{RKd}?8_^YCEc)grvKbFeG6r+J%o2-vT
z+*1u4?>P;bk1H4_SL08;CY^gtdGd9-voAC5XvFzf{0W#^dE!a-xO1?vCt>PYn0{I+
z)`Mo=Fm3-@g0%Q6tB&mN9s3aDL$Tj(H>KZw6L%-+H2{72uoDX-`jFbdl^{YQrr~;1
zvxR8|5WuvLbLG+se6$;5E?thje5CM-lHSuy)W*WfDIdng%bEDwAxfqAz;XFkXQV7T
zu-nc6qa3-1bW$;FqG4~}=^t5mS;n>77)Y`~j~e>YBkJ+nLo89uy_PG&WF0uQJr^VR
zk;%xVmtieEToxKsgP>_WuLm1uU)pikoI%TLSj?;hnt;O&M9?_faQ$A}KC<e*5191v
zQg!=?OjKqAybi$VO2A?p8h93a6qbWaW~^kb?bY{^Y0LN8`wkC}?A3rSWbIAIv08&c
z&oAZkP1u@;HRKL?F>3k4tOFy14qtiK_lJ(3KlhrPoz<>7OmnlAgQJT3d(%4b`g=Z%
zc{jLr^lDz3SHqzIuCRx38UIAq4|`)cB3W{F{N>Vmo86T)%y%!`98CC>4aN-pX<j8J
zt9A6DkM2c-r}-J-vZ2F>xL^p&Hvk#FD=Q3;v7xiH%bMKon`}6B8<<6Wu#KQ7U49rB
z+C>y(7iq@DDw3_k7?;Nc_!8yFBj4BqX6X1}M#@q2K=p3dn0l-fk*pnLcs(`v0mUz8
zFD+8ce+($!KH_sFU%BMdg$0@VEQo+T`ph1nc%&Me8844}FB+?z#Uk>VV(rkGB1N1P
z@-%<UGU!fHDa?99K8ox)NS467d%W6X;7Uo{gjjOfc#qOn$!1K08IpT!<;*<DB=j>d
z>_D^_Q1Ez^iJF64gGp&nl;fOEr=tTHggYW$Dn;p4zIthIvm*R8Q!&n3yjx>#m`jta
z$R`_<XtI4Xte{aF1^ZzaIs*K$5qTh{z1A6W`{LjygVv90A_)v-!|;hwS+0|DQvkzo
zJj2i9qRK76?0|MuA9xfPAhg89`H3IB3UeZl4Up3<$)UnG9Hd~fo!o>jGse5-iC<f=
zUGbmyokmxFY_*1c@q4-N@?V=a^j-XB&~`FPWAw0KNi@b=;?3|TIB*V^1Lg2^V4z5s
zB<2hj1H~XQKnxB8!=MB}I{fiR4&=Js9ol`?Bd69Ezt`-3oxoIkeYee0DC7FD>#%>@
z^j#e`hdx8q=?$Dtjh1S19VU+dyam#XNM3a6?6-jqA0k4Bqr$P^IOrH~1bF+rao#L%
zlDDQb#DiOxSikKKmgseY0{(Cp1U)%0tW#Z@nm+x7Ek+im3*dr^l3R2gT;$OucA2+8
zSK1?X5Fs8&A|)}Qq{_V89HO$XGN}R78u<cTa8PXTFL&zzAbE|wN2lhX=UT}s%1Ae3
zAh*J`Ib1`DIvrT{&R_&o^MdE;z>4t65rBpJ^b5o0VQfzex}dRKPBX55)3JLG6w(NG
zWj!`C=cTC>3&Hgn>%6ei;Zxc?tym~<BM)7RkVPSx6;976-P7NRD}@^89@QZnw$Fk3
z8K|Z~A2`Zat+~rq$(p;A&RAIVT*3G^l(xg)AT+UK+X8zBQk7%}^qexqCpV7x<tvl;
zQh39LHEN#fQ!Q488zG{EO!zO`>0}!XtJNyGt|A^P``fr0CErg*xe7}Jd#&D!;r1X4
ztytGeQy?XamO{v=&sc)?K=RWP=n<f{takV9w%g!OV3J^yONMP9OkRY7x9$GGH>c-R
z^TP4X4^CRGt0&j4T|McY+&+17^5%)_UOn;st0#@d)sw}=t0$e#)swZgt0zZCsjH=<
zqx98$^HifOTH0<bK5pMSc(UAC>uwH?9@y3S=1S|D>+ggBzMPTjdN83~eD4Rxs00}N
zm6d&%FJ(Xba69|farXauIC$87*x!0{XExttRp`=FnE2&u<Ju^rgW-}j=sPxuQ4b5~
zK4@D^JSFEN7sWLoDIZ3s53p?VXF?sG{7a?e4sd+WatBGQU$bT38V<SKIem-(e{>*U
ztHVvpcK}rzgfe;;p32L|=$V2m$%N4c?3)h@pf7`Z>kd-%J7AeTEEfQR|J7U3V6?bq
zXA~^(iR9o@n9VSi0mrA@@P`_VtdO2&rs)`gW0s6_vpNpiE-8bPVU3p9Kclir9`arJ
zuoIS;Z{=Zm_L{tSNM5%yl3Q9AmsuV45%V1>AtK|egR!2*R#rxd+2XCN@9t8d9X#No
z7p=<L^#K5f2P124yY2cBFQO<8UQjejyUPF7!^ZLX(ZekKQ_Rc-KhEZJ<RjNG&vrOv
za?7Q%T2cx(PV$9vswTI$tR0b7dMRk|ZRBMkBY$kaxpQ2|6kiH<xMht+a63B-n9OcB
zItNEPsqKe;W@lDQOTQY62fcC&bPu{BAd^q=dg&CenO6<Ff&~x}G6oP)qnS4AWOTRV
zF+rE29B);Y5PB7WHNdW-VkdIWp;J#$m2Fpl8HagR$SbQ@#(X?SSji}FZYT8G7Tu_A
zgknjBU1P`JTo@B0h&9oPY$BvvV*t&8N86k9G04^Jb~_bUj)j@ZoDQ3V7wvF_1HzbQ
zj$WwKDB!-tK93>}uQ-#8=xkIFF!fFN@GTH4e0@i+8V(4i-W_H!!NT6D>dF*;xw(NS
z9w1eBYhB_=v)8^dv5T{yK5iX);+j?y8dr};K_Yr(JAMC=*Kd$5bvxN2^921NZkwb(
z#MhGa2YDX*my8GWhyIf0-=V*Y^oRbEicgzJ@*4f2zhqUojenltpEr{`VVpX4PwMde
zj<}&>H8R$|x$wm{sa?j}*Igl0rbi%OGR$k&UKCFe0)|BZ9@oSRqdj#Ku$`T@39%%`
zK|MX<Q$Y3oQ{yTY>Nu#U$8`#*xPVHhgDRQVSg@xa0tt2w#8KD>#z5~(F%<g|aR>Mn
zjeWd4l!g)!VT1Oq&x8{j+O>@RbR^V9#67G1bj00w*S}@oGK;6vp}X;7e9XPaFb?P_
zvYkfXQ?sEUxly3C5pJBG*r>5Flh*r~Oak9L4BcO)C-{uycod!(D8w``G_mOIJ)_9L
zZM0h9;V{0WhI?swCbVsA!?v^odxxGBkp{a}I4!vo2@>|OP}xRI+1ufwy_lkJhKoK4
zihgPlO*O+nNYm%)yP9rjOp0odvFhZ*6j6z34Uiq7EbNmBU(*3lPoRi3<*-trLWg3Z
z=NgFv0L+kYqpC>6h4cp62?wPWWJm|S?BP%4%}+9)OGk$I1rP{^9T{m=JaQ*GBZfE=
z8IP^URVpee>xvgnBSSLtRo9`(?3JgAh{fjPY|ib{X?jX@f4i`gv0}Q9?BY~`ieGS?
z>745ieX#ZD^K9t#wBOrAu<<$dZ1iFR&fks<(X3-72TAK;1cLnh@N@yKpTuDHW>k=C
zzPH3SFqKOxQ=hi6Tgb4XyHU=QCg<}Rhtt%oc>9R2>;zOaf|2=XhvvE*Mgn7ujbrEU
z7($J@ulPIM92yjkb=M0;Sm1jw<Fbp258_L(waR!X;ZufWGD?M327ij9k$vSXm{UYa
zT1L2iR*w;u&r_hPkZ>JoPEd7s7B&%o&!xj6e`8YkG-%h1!_d)CRb*XQ%WBm%SuSSv
zZ--&*XaLqqu>dC3#hX;}I3ti{8{+~@FGeCP{W`X_%11_ni;Jb0%H!)XfjAY%gS1D%
z<%8c54|zufc6mL}sf+j$crs~DEuQ~}3=fU5QSOi+NJtAQ(2WUU?(h(bWVw(!8)>W3
zYeq=pOpXs_j1=xE*7L-X4as@AYZx#Bf3(;e-*lRUF;P(02+||{)kBvR1VE}6Rf7u1
zCa<Z_Vbi>!CX5+nt;TH*vZp_Lt`~Zf7kZ*6w^~65V_IwJHC$KJaN}yYdJW$fHT<|5
zzFwoz5H%WcH5z)2PDj+}#MS7W>M$9I4U+h#F@|GDaOBd9v*QOZ#*3FrFUTL)N*{+a
zcS}?7f7sHbJBjX<GQANzJ(j0GE{$jC?a~V{<i*m9ZUF}dI!D+iK)Qf&ZZ0YXZ<VZ+
zSyD2X*Q_uYfFp;1;sd>=K-)B-k+}!`hVTN2*%#*fCYayVnEdS+fY~W`61()NY-vq>
zC`7F=1CJ@B0b41(*jD(0`(V^27!{X^u{zH4x^X<OYw%T3;c;Ar$9jb--!*KNd5zg+
z<ZjZ8YoMuDkel5~T!j^5`#JUQGyUfCa-4#+M}fAr<D(vPUgl2gkSB~ofg?%ullCuW
zsv@ln8jUc7acPTQrl%tOhC!qt6BLEsZyWZkok)j*m}Vz58lmLn9(!&#l~gXTMBH6@
ziT76c@jSb;Qi=|gaK3!Xmt@(+mKbQ~%F{n?%un{oe>Mi(TzUE@y?JMim#q|F#Yw;l
zCNR2369cU<=CZ3k^ZE^CKItvTZfrT7UYnHs<m&@WxRSJHL*^66>&IoZEP8OQlE90+
zi7T(W;`<mM%G`n#J+h85z!BZN8YS{qUe6C&W1x9$d~m0dxR4N#7`-JXRb++njl?)K
zD4fzXc;vPI;x`+c@W9<W_wt4g`#oXw0BJ0B#ri}BF%BVh9H+r({BYuXsu~^EyvETL
z9Jkj8ji4*95$=sE1P%UBsid%0c{&J8z$UFo+isEpZ>hjVKj~ruA0`9w>4DG<hRHy1
zBp9aRCXW>D2fR11%#*J-+<gIAzonCqfX5Wd@|zB7VY*i;id*!RMd`@t`c5M#DA7?#
z-po_y&&*RNMmC<O_7rULfcsQEp_>(d0{uYM=OuSTt{bs3e$QQCdTnec{%EFxuBiO6
zbc20HGKzcW{s378AoVB0EI!qqyi9f>JMu@(Fh14kc$qBY6X;05G@|bLDz_-bPcrrA
zU$qviTT5H3YfHCR7j7(VShv=#h4ov@H&++75b~>N`!WB+NE0y)b-e|zyW4i_(J_gm
zul##$ZkUd|A05UKKC9X4?bSF01%9c9SEsN5>73V1v4Pr!BtPOBw4Jqks7^paTrL+w
zliQTg>wEid!wGTV9U-koMcs`EC!ijEj*BFaHbUga2UW`FEg6A`^$4oIJ#_nyZw-A6
zWa1q5Albz*C@kKJFxE>1)UW|bEF*0R@Rxp`jd093n;JhjSr*s@#wcwzLNF;b%?M2!
z7+~gAYr*Rsks4yn6^fU#_=j$2d64LKft>B(pyl;3Bs%-$=b#$ayy@0yVbWFoK2@sr
z>^l6zb28RFr|%>7bGZV>ZE~yx&q^RJuUbdm(CXMn6cT1gam8H>xB@)DIjlQ93h<5N
z+;;J1kp-Gpi`wB(5EJVGhvC%*HWas^LhlH}<0u6!JSrii*+Jr9&@1Kh2L}f^n=sCK
z{bs(+%KCX&m`k@dm$HC0uXVTEc6?t<al@(|Sr{$BtrNd$+Xpl}&A!8e*Z>*_eHSmg
zWh~#@9URzw2f;L4JY1;_2il+s9HHxK0T?z=8WYt`YjrbW%~v;9H!}$2{_57X^}Acv
z{p!X>_14zv(x$b(fedAFb!&C~7JMyR)msm&8>_b#GnNBG2JHYf_OS<mri;VrG-&KF
zbdHJw+V=39f(q@rb?K8}H8B!U7q9R2oPNjkeG0T;qm}qo78u`Vu{T2f66A8<scpKb
zRr1l7afY&JR3Rsi-GT36?4B9oF2u-Wse4o?B6x`(tPEQ0$cK`&B$JsKH%bbd(i><-
zPZ_DhXfYyGM_B{3FA#&3sqS?h(0|+3uHA5~nxAzJZ5VeaOR3p*)56!}vUQ4|m$2MM
zC1JEn;t0JTSxIDz39Ik5ajm;{+iNB)yYJfBwq0}DZKqK?g4T|1;)7&s2>vFfC#)+E
zyQa3B41R`C%`(`Qz%XI?gCo`^MFcAGkWpC*3si>1*uV?i7{soe7~fV@Yq&c@?<dx@
zUUxgqP>F{F{6A?Wu=^gck2dhWF2<PZG%<WWaA)7$ci5+gblITa`+R&GeY@Gj1zbr`
zq>@AgCcGW5O9WL(<X=6TdYJr6W3C<ouccl=9)@Fr@3PO_WW3=(GVxUUIIecz!RtQ2
zp+}iHyyy68ek?W}>@KcIkdj!~dYGwP9mI66UwN2BSPzrsgf$t)a1afGQ~kqa!Wsi5
zKXKkkW*Se3lZtS;OIdcX(ooWdaRV-li<eEQ5wJ$^1A8#&Bd>ry_Uj>M*0ZUEIUx!D
zV0j{^kPC;C02qmk6$86G1!zVn=}>4xGkPSR@Fbr8<8PjS^>04-`PZNR^!rbL@RLNu
zAqWhH*-DZzK_EpCopUvxwW+W}pu`y!&nO6zBxfR{+L4$=;dNnUSE688IhC&@4Yuj}
zYxq`4#f%a}XH@R~qeBGB;paSl5t#OfaM`2CvIDPY;7cTr5v-SC9JH;(2*JtxpAo^R
z$fbw`g|Y6z&iDr2TSk1#p>lwLEcSpGJ2GQ|rU)9|^*9!Q3nQ}(LSjW2OrwPCJ4SFj
zP9T^>iJ)by1k^~B;Lj)>cNK6Z1V;{3Dt3tUHmR|aOx!N)@OijNNI>&ZnOj~DpDpQw
zpt*%5(5Kk*T^6h$Y1e$Ojjt4&;S?q5m_cg=-2^i;iGnOiKfyG`P?EY{0;PvWiWZ7S
zT-vH(g@(OYH|w~ypf@$_)+p|uY%-a#;v40vM0zG98_CThRz4D?DIg%*66oTg=XGF<
zO$M+>Gh;<2>5>G@5hfJ=CZP&y9#)lfiQoO|A37jY9u1*6kdr@Kym*ewf7S{`ax6sz
zc63>lJd4|y>$E+)0V!DNR<Bd)_Bt#ULAz}kMRJdQEQKB;&@!kx7qhQr&ogOrrmRd)
zA36ksV`I=S9vVK0`Uy(s^+A%TQHjn5d~VowLSg2#T#z$+9^GSAN{K<|Ev2}EkxDYe
zlj#g%!t^%c13cavMMgtN34wEhb98($k#ckOPD65emJ|pgyq%22k;-r+)4Gg&7A8=j
zlwc?&)cfol>$3rt8tvh>W?--_!0cosGG~=mCxM*dV9jxZ!nwzH5VA62Gb1@e2e5Kr
zKRp8@CIibQtg9lO#d}qk!`Y0*h`<POr;`DV_ZiUv8m<5ndiiVEZZll;qJaYko&+){
zj>Oa7e(9qh{qpIrzVq};|H6jp>HGif*>`{O^qcQJ`{{pw`tzTE@ax|`|MpLQ_p8q*
zcn4=h%*MWbw2AtwjNBO9Bd04D;()Nz1I@wrx)nu>sy!}d;Ln_HLID99mT*O7v7jB2
z;|IV-6&EX}Ri_RDwGFvDbgvL$Ze!9;S`Q8w0vvIOALCxnDhpzmQA|K<H`y8ohS|v&
znj!zJ@PAKEjz>yhN~lnQ|0yY=yi^Vm*$iliq7lL2)>*-ft{Jib)x$p8BPxOdcyixC
z{WzsYcf~GBz;fOy$Kp&^L?0}PLOhID*Bvae_{gQWu$tI4(ML5*re9I}slEuw(dK}0
zTypi6+in2fAP);hnovB(P!eB~VYl`ALEWURn`NTA0>JJE^%ZE*m2EBJC!VD%l_jLe
zx>#7Pj4F6!WiI{8idZnASrLtHN|!-BqK{rG!bBj3^GaC9!I9_MjSeQ#tw|lW7-aN$
ziot{?Ckh>-!yGdOW;9yCn8snHPJS#>%m={4N$s>iNP>&RM<JIugm4i&Qp#0?0G7kI
z4+joU2Bpu>ktc`URP|1c9?zy!NYTY|cB8R?{Y@n_LRB|fWf*xsqrhrmV*}ET>!?os
zIP|KQicb5&Hzhe1DFtFW<Upk|MKQGcrxs^gr&i@lFQu^#`Jt83r$qVEO6jAae3hf)
z%1Y-i#?W692WAKdj6J2jgbf_Q1u|(3I_(67HW4YbXw&Iq{Y3(E$%g4{7xt!r&NO)~
z8V0io#DP&ofis9(%l6H(X!ZkuXbI7z0%CVz43*;XvH?mSJ$y#M-#h&nV6B%h1_l@%
zGj8iVQ%NKgy+F?i#8N}1f>Jo+>Coc{D*M9{YE$ZH>0OGbjMN@idCa(IOf0aC3C5^d
z<HmGDWmU2pm^iTyYE9V(vu2DVXJ{RRrq89hQtS!C7)esbVqXtpkjE|XAWV5kz*O@y
z=6M4yt3ZTL1&wLd(rI1N)O!h1=f~t#QG#2=;Kt>dY1SYpZ|=SmtQu8(L!**xC?Rb`
ziBck)m{kgT!-3Pk=HLNlDxII3P4o^E8MER|GKfXhypM+%vf@n0&KXB7Xyt#IJbxUI
zF^5TTS7k52Yt6Bn0cJ!qtqATqn$Yov1L}x(^n34n>XYqmP-zi80|Gq{zVLOxcqu?Q
zoSIcC36YY}vo+08TF8)Xl@d??_J<$-`qv-){HM8Gj*~H$F-r-z(^Qg5c<gVN+>YIJ
z@=bTQT(f=W;`z)*p}n%c*lsNzRBu;r+^trZ?#$l4vDxWeJG{7iYwLb-`Oto2{mJmP
zrNi~D)uZ*tD;u3R*R~c8Z$G)1U)osNSl@Cl+<r25`TCLFT{#@q)}GvWvU+p_$~kY`
z-kQ6-e0cxf%3<ftr9&wD<n7m%HWoH+9$nmD-CSthdg7d0KE!fImzM$3_07%p+SUrd
zp3SdsbuL^#a=N#+)}O2#zFk{7ys=gN1pZsNmR~4bSiZM>Yw^y#`Q<hD{6Y0#33FPr
zckW!DZ&q8?g##)|V^*!MG%hXNsV_DCh1PKE&9z&ri_7r4c&mGPW$9q?V6p1Gy*7V;
zX>r*-aH?|;Joim!|Dbw#es8gQw{^d;wpU$z&~lfqKRCGlc<xT?!OGVBL3OFHc6Vi^
zcVTs-IJ+^wR9(8ec5ktHzFOV8vv$4J++99eTD`x~T-?~K-mK2wXx_gwdu`*+fxWP>
zbZ_Ccjl$N_>ejVdXD}!n&O@Ir%vbkTstXUGF#QL3U#hn5in-o6YOuM!e-Gyx=NIP?
z#~kPP=H}7h+TrYOFz3!WoReEyo5kx#_uI=GoA+)Ub$Y>k&Rs@2z&XV^U)@}3;k*+~
zJ+aRrP2rs5T;rT0ZQ*?1+?*RAUEus9z2N-cIC{JPdz<VxFW$L+>yER!cemv~-s{aS
zwbtIexw>_uIbU6In|GS7yD)I8H?BAK=9{-3G#4M-Y;_hN-&w8QIDjd*yl}pC`@zD6
z8=Gr>ZGL|B`qA|V%Xg~x?;PBztro6dy573fUA)`8R;|`Mi`ChiH{i!+b#Ha4^#DkD
z$y+(}8=ITe8>>gx>nlea53aj+YWFq{7X5pBx8LZu78e)p%x~UZs;=(tEiK%6Pz5UV
z8QzzG_7;{m7SCVm-MF#Wxb|kDc<bifH<o+#*Vg;~*3yNw_VpWgFW;^e&fR*gzOe+W
zZ>_e}TD`GUTj}|4EWdg89{ewV`?X7hn|5LM+J#H!ZuRSLu3X={eEVkM9@Ot%zgW*h
z{R`{0y)CG}v2=Z@f8%X`_ge2#@m3Amx&Upx=C`lgcQ35p+<UUtUwgc2FEv&!`1h8t
z1ML2#t)<@D?{lfncN<mrTJ`+m>H<*BYP&su=l-4M=B)=8Z(YA$t$WqAg@eKy_MQ1V
zgX)9Fh3c(leW|c{@MgQY=@iblR_B)8<?7MW@<!v%gHG#G)!tiOhqZO*TI=4z@*U6K
zsQUL-Ht*bbTh%wJ%a@m~E$`i0n!o!7%-h!H{Gq*ac)781xO{!(MiZvi+gyTGw0htz
zHw(qZ<=4DBckW1@@j&AltM`^}KR(*?-rgwGyIXe)gN?g)+nZ~y_r$+AJY3t{JG`{p
zeNsO+IIO?XKDyiPZ51x>Z`AL%57##KHVcFP#w7>x=OF)Hd-LvIZ{zOP-qBji+uFM@
z+^lzdPcG&650~!jZCq*q{35`Ia%+#hCxuJ<8*5N@sR?Dz4>$H6bT;b%|I+OK(WPPk
zp!x~@w^A=GtRc@_@h-0%T)f%ZySA~=SzTCOUu;&Z*DtM|UtYYvwR(4Dp}DYeuzKgl
zz1hnLYp#8Nuv*>UczeCN;I7>`7}g(Of3m!Ked*S0bLkF{!kzl{yKBz;#`?nia{cDU
ze7(A~w0WmGUsze0KmW$c#$K)2I#}o)?z#6{d$%_>*47p_tGm_ty;bjSYhm%`{quJU
z!FpS{6Sv;3(|W_ThHL5Z>f3AkH{T|D$MuHm4%Y>)x&DodKCUlZcepNaE#X?jb%tvQ
z*XiNf%_UrOxYlq@;@ZP?*@E?i>kii&t~FfWk5?~3TNf{FQTdyDxX!xQ->yGddu?rS
z^F{&J`0sDM-L5{qHotmv{_WcvK1|j^XK8b-K3@g;ZrrJ^x|gp#*<84LbbV>PTRkkS
z%)fni)4y~5;K6eB&7&=MdF9PFmzvjBpvzU@Y^!fB9bA9o-o_>O!9n#F>~~w$duz8=
zHdi-+VYW6l?><<V>n&VgUTa-D4+BwctSqjqHI|p_jg><E`VCm-i{A3;o#xy1L9IPs
zUGytl+(DtQL?@%cH77KBClZ-_{=;{F^ZeKE@}#HV`o`~m^)(cwp8nm}P)cICPk;91
zXW#qbv+sO`J#GS;dI|NdeE!+@-+TJ4e|`4--#q{E`yYM&-RHmlAHVz6SDt?TZ$J9n
zH=lj~8y|k*YtR1vz2E)ntNJrS9WKdLV%0?EUglSVu(41SAMybGUrDL<n|@_`M?8b1
zKlS9};T}6B3=9Gu-P6@%=n)SYVbrFxK^Dm&s4lQDgm8`uKn~84SkU3%$uEkUPm#Nd
z%2Avq51S8sxtY*|np{C3bEC*q!tJ*G)oz`R92#SVaMTD`VMXlcwed*JI12K^#z=s`
z2g5k=gj5VyMzFSdksZyD!N(c$qK;qXi1OF87^Dmz;`I2(utvf!_Y9s=vlBp6T6W!j
z$J#%aJC{3erMUNGy>IUhdTuYr55`?DuUE*Y5ePeGFIn?m*WI=2j&<AVJ8s|R4w*hV
zWTGFegvXEH7f@HK4@y?cIr^-T8FCvwhi=1{4U8jPgx6NLSO<&~eF5L>Lapu9@~~b(
zQ5R0RX?9v49A%3``eXBWT$`R(Ug4+WHlB({97b~}WoBs#V6k&?Wih_;ihiD-KGwf0
z!67@IAG4!i!jAm}P{EP1(hxg|)(@!D$GlGX5T4-~mz`pV;G>Z^Am?b5`Fdra<q-#C
zmKu#lDfM_BSH?kwVOS<6$Y&_%tZuWKQ+uW`G_`9Y`53T>EG*fVEGam@Xl&pP+D<7Y
z+Puntu+0L%3O^Q&Go@I6$PK?DE(ibu%rBoAG9TBo@B=-=8)#d=Ls$={_`vRWA#;H*
z$riqM((XHU<H)KxPS+B3&<C7c*~N3ji3~yCF6@XY0OXiK1OSq6X(Dil0Hzdi^8k^4
zTxWKJit4s3&4flL=#~Ht5%xh;%~47vt{}}tC{sA=s&IH(CBCpaud-TgI2c4wLnt4~
zLL_b{&JNJKd63v)&6!<o^_|^B`juDKX^rOgoFhMFLQM06Flf2JNI*0dvcewZ9&-ZE
z_1eRx+vT(13+v51tC>kDC56)y+Jw_aK}w?;grfdne$cI`s0s{$KFXni;Qxj)wgsr2
zoK197Q7F9a)yW?}ha*!74^>$i-5k9^zFJ2J<bTHA@no;Lz~Jx>$^nJS>2lm^$>11L
z3C?Q73LBNr{*iDEa&Z}omB(kWaz-GlP%zb?b*JMYikwkpII}wMfl3EP5tU+Jc_oC>
zr$fYMHw1Z(_<RSzq*zRIZ?~QP;LkJvM?CXWu`i<|0h6kPQYMlNa~%IerkRXnoh60&
zj-a)OIS&&{z<8taRynf*K7h`L4U{9$B#Y;E%40_~NDYnYDaVo)3X#@&oU2?c5z?xO
zAiVVPIEY$aCaQXQGyx+Wgd7)bw?p;uAa`91o>nET3}8;w@LAL-@hP`GkwC+KJ$~2&
zEYSf~BE=p{M^BJcS_7dv2vUB@kZT7mn;pmEFrSIUn1{bQRx;b5WG&;hU8eyuF+Wt}
zesCqa&x<kx$Es0Tvj?pl-Kk2kpEjrlomBeO%lIEhpRc6b6g#;Rc(NOgREdVW4}vA3
zOZD3JlcV*X(@h^o-=V@D<~%4s*QE-mu4Eq7hHkrYZENjj{CF_zDU@@y>vl*!Vy_0-
z;xm)*66rAoX+2hh(sjM`d~?zD@p7b5t!CHvnlxNyzE*v~YY#hJc52B-P$p;vw^}fC
ztjGX=>X|?rJda*gqe0+T-MPLaV_iT+{!92g3W~_qyhFV6Bo6EKabk07X2*9kx;)~?
zbBH;LG*%7O<7u%=$PBEXwK)Kxf*@cZ?RjxcAqsG|=AX;<y@ODv<>dxSgXIH-qQ)%>
zK;rSxAGo_mLMO_08vM?uW#;&uxST^jE~niTH%P}%q<Zpg^iCl$b1Gz|<@V5R#Ew}!
z?9j*=5V`f?CBj8s5Cc;q9CR;9&;`~+hJ!pLR}h6@Xya#VFCH8f%GN_DDwTn4irPjQ
zT)JY=nH#@r)7{-lLc@1f@ZE{4mDDlgZg3(a;ffOCW^p2uEsmiasmSwcZbOA7>7>?N
z@7Z;Ca0Egx1*IP|`b{zT9;+gTUw}}?zdukRMJ#nFAUCD6Fla$pa!1|r3^L|i@~i+b
z?;S3Pyo!J_Y59a<@T$0Fj)fAg+Z<EADT_0EO>9YFw^0gD(JM)}yq+-T7!_b^jvxoU
z&TYFp20g*5dQeK%#G{$`DwwOHCS~CGMnn-=spYjB<ND9?W%1geTOTtSOoo@G{d(VP
zx5xLJm65%sP^yE?f!)Wb5Vt*-e0$lt=0miBc0`a`K~8r1eWxMw=@xBVF7GM7`PqYI
zLQdOs=acM<@}i~8ta;F#j+Q@9NtqD`N^%zvNGkZo(Ulls4K^kzLx7>4h(r`m7sVy}
zRKPG?zxvodL_rQ=x4Z*!Uc<HO(b?QV%i*$<Har<~MAFDbyQ*|ZjlgiTMmXfLqNG-m
zo4~}3sXbyT!N9O@J}_h8qpzURLrQ-%>|uZw-o%=HDBKu9sx4v=fIuZ<B5!v=r4;@2
zDWXJ*B;yMOxzCPobV3JT1~Ou9FlNL8u3296k&g>w0VK!4B3?Sivf-I!MGx??&tO_c
z0a;1u6tU@gxblwmjLn_{nn<y%r_MvWp!yZXR)U<I))OPPCQ!lVW-0<wCJIhEf;~<L
zt(Xq)5HDO)+1sXv0eTe4<b6>34@-tn4O_L8*YWH<&^7{<i!_d7L%3&5Qh_{+KcO)s
zwutK7k(##qiUBLE=#Y*R>b&LwDu9jCKhX7BieuD0_H7PDg0RLc1#Qy7j@i{nXW#XP
z0&mPH2R|$H_vFOPjMM6XvIRgss<_ptU6a{?95hbKG*Q7B5896Gk*Yt-dgKlOs(S`D
zx3lbcjnacNti6m)yx7i>q`A&lzB;ODSf?O=9#hix-cBV{V)krq(04m2n;1gb><`C<
z0&yp-MA~>7Y?PU#kkUNYgwh_G>z3O_-k24%9#-#z5vzsr*zg5RDO^GwMSZCGm<D!<
ziQ{VYLX5415R9);GHQ$`jax;69W(fLc&v5vi82R4S#u6#4qJH<BX0)-Zfpbc7hiGm
zdwNrlSRdos%^bAcI-1k)p9=jwIf2?`ZT@{_(59YufAYi|Ll>HOKbU!=s4??|?IUIo
z4{-HkXBe%x)MGsA2yL~3P&hy-f`p7{p@Q6i8YJMnFKBgwNzh@XqZ+8_pPUx-#8aC5
zMj9#7{u!X;<7c$wL0Kj-QWk&=Sz>TykO(T%m416|Zkmv0Q{BL&yDZf0E{50xXqM7U
z#!~BG{5dQz@K_j<MBu7mT8b*7c`=wl)+z0o(E`gv6BR7WXgSuj{<bK!ayG@BSJJr_
z7k9I%u*{&{CCY}SI4xg5kP6mpNS}(61dkIP`!LHeNtD>XbpL3?No$^4qk`U$t%@r*
z)6ccAYQ;`89*vmuEGku~%?Qy-HJ%-Cqgf_2<59FKeo6W<SPDr{Wfovxtp>S?!*-&?
zf1oQ!qSUJ-pa@!2i*t!G3m-uRM8QzGOBVmZCMl~|>+otFr{NAeYQ2j_y>nVUpV#v{
zcDt=sJ8x7wuT?t~^$tT7=ZuOML`8nq1x3Z+gx4nLr#+YxP5+KR7h&E|l_&#JncpM?
zED(^Q!^_}#>Ep8l@?w&qh;&b;vx6wxUCZt^gkgj#zEOd-(RN{(yrHB%kf{&KTvtat
zSnv?^LXqoQVt}%7E-;yDxCFKVgu*pSr~uoH(tcLKYL=CUfpqP*#0)Das3{d5XcZnv
zC7O@kC>rNsFA`%KJnbr*Iew8H;$x&3G6en=wZmH012yXb;W-**<iwXWHJnU1S{vNh
zLv0ka?+4;r472vB<Pr_2UotOVsZ9Vo>-zZa56DvV8|}ZT#B2fCX~yC|(qhXtyCU~a
zg_<>9XoCXKU2_|awxjq)Ne&sah44$IqAc4nDiih_D$OW^0T1ZpK!L~7uElL@<?zzR
zzTKtGvQm@;!)N0&N@k@}!0kMs0wXh6KA3)=8lI;&cNs&$z-pi_uygd3(v$pLIxB`O
zKUe0F@yw#EOT4W3C@TfC6{GPLyH{2ljV!<e?1?h7YVTh!7%U*G77bj1wMNDQ(Cd#_
z<i4o39~f01RI*A*#S2;K|JdqU?a_$xUSQ#<y%B3jZAUIA*zuW(8w2+l=2vDWq;Puc
zw1b&m&0NG+O7I>dZOjJ|SI`ni^s*SFi67#o`C=ut$Qd!Cn)KDh(!6lPSj<T*31`)M
zIM#E5+pOFUk~h6Vvx*0;`*vH);;t}#XP*P*E0eP>R;q$lR8c#^RPA>_G!s}cT<RJ$
zHk&+6XB#Ic1w>aX55pb8D1978Qme#za?pxpD&D|uGfY&GSAH^)cQ!<LfyAx#f`nm_
zHLG_}wo3~DntlDC#mQZ(9>^74j~}=sG-J0`TH8pq3L_qOfrvv)6bZE$C2_ay9WaSD
z*nUNNBJ+qFiMTe{ZF0x379_S!jf7fhxi>L=jfa69Wz>WzXwqy@-LkOHWWElDh8O3i
zhQ_eZlwuOsm)o8_NGa8bHv}dZQ96+ZI-4s;x6g#JG3OuQ8j5Jb+STSJz<87q7`$36
z;E4!2`T%h*p=Z25!P5t}kp*<D2VqzdQ<THI9Qoa+3<2>Bp%qkCeJ$zsR3HcVEpLdX
zWzW}A2YvIfBxFxB&P$+5CAwfr&~tnd)w2;x1zwG>yrLn&{VySN$7IM#_YnPX$INRn
zyrBTb$;p{BDM&^86S;sNt3a5%&N>o?jU5Ou-~&GBZm<yEPDMjMC@B2i`Bf_{mDW%f
z$f~gPjuX~OHgi8vU~m#9BT!1?E#@*F8FV8$7j-xhCOosUP;gkJ<QvWro{Mpix&raI
z&U15or;bp1&PWjODWS18LK?}QbHw$LXkZE~Dgv5meX!nz#1tM`7|4d<gHquDUqGP0
zK5=3co(X4^W4Mf}r1JAqGN(MM4{L7yQO$YcI{i|jkUMuVV-<22F5utdW#HiKP|Psk
zWoqm+k2BZfME1a`?YV<2NlUKI9!pduk34EN;R}&!QlSWl1Bz{%m8_wZAndaY`;-_n
zwM(-Jl+hTrvx&6c_)CB{!Z8dE{KuOSXt#bOe4Yy$A9SOg<JAoEEtcm=LAqiEcaAbF
z5o)T9&2r_2uXsv~I+Ye|1ON$_^vW^gBPI4Z;v1=2lA=oS;`ICE1d_|)a==TNg^QOJ
z-zO&t_?hJfoJ2%TeuszGV_zpHn%j4{61v}uD){^4WP2x~nCoAoQ1GIt_y+jFPHfbG
z-31lmMo>qjh+1-@qOc04%*BI?=tA4>PQ^A4j=0`TWgqbibQKIw$dV{}S|!0g<U5ft
zxEQ36rCv#<StPOOdDM=9<0deTj@CW&fMT6SN45At;!bV+rHtsZY{;)N&xBF}9pOUT
zK+Ls2;BA#SicxmI%yy{I4!5y+-D<crE~eNTk9<%mRhNulbs;*&<_}5cRyj&X(3R7!
z=rbEp2AMoAx8O7yC+%3T$0wMAy+y4IF~t?-s0copfMI}=<Pa2zgsDiW(|}cl+6j<3
zl~v45EpAQH)@?KwqE~hiFKQCHr)rF?_6e;C*R81eY<UNh8sq#avMGIOB@)rCpqJH@
ztwfEU(Fk)N;tg#l&OS=a(vHDD&+^YGS|(>g8IM*gAl;R;ZIWzjfgd9EB&9gQs<(vD
zzZS&$nEHyVB*}Im2*C-GOyXxOWOTr^Yp|{=$>7=N<ZMLw*(7pX_e#?A(PYa~0+Mbi
zL4m26-p5n9w5wH7s+KGeR<UH(pH-_*P_-I`9DYTNbj5c-r8K@wm>(J4(hEd*nx)LH
z*GCba{;AMkA-ib94MojaGxN2(f`NyBMe}Zms-%#fnT<RY6nMudCQfr5_9(z@R>(TA
zeI9MaX;{0EXb}c70Dgu=9Dx6))8Anaqft1GT!Pyu`(m0{<K~7gr!cCQB43>emLte4
zE`6l?{Bk$gS6(^8r$#$%VTX@GbQ7>ZbQYf1OfTHhjwn<7Y)8L@=?YFY6%EMJ@nj&2
zgvW@y*=2r+7POkmJZqC83r#sM)MnJQxWP64QC#xrCdHL(T|&AV-XAbo?h2*JGZvK*
zc{E2f0JzCk#9pbNR7-ZC@Cu`Z;3mwWh+BsH4(`*cvjU|HvSA^2xnbULhf!`f;ts|_
z^@|9~Y9rNNWE;~%7w-T>0gpwUQT!P;spXI{S+*O|9?dptD4~W=MLE)*&%x>LFfwX<
zsQs~a9%e9R*Dc&`Z#dXSZ*sb#x>MSBeV2S4@QyiNV8vv`Ae7;uU^jd8QXse0D_0PL
z(d447ym8O2rfSvM-WxXW1;%&zTn3JKBt$0ivF>o4HXSF*<57XUN)TYm#QCv^ss`{l
zFKHdwD4<i}DincH#s&%zyT7<DuTC@iw=p{6xf)UNH0@%^c;k~(Nxagn`Mq+&v^$C0
zO_2<^q85<?4-X2YYrHxS7EmEG#PoRu88a$K&e`n)`^XR3rsSehs7k+?Lg@j7U}a#`
zos2)Q2SYz|*y{6zq7HxMn4$$M1xrEs68w*ARN7@5G^u*+eJ2DzBx|!uh$pCv5k@zy
zKp319{ltiBJDQR>8pTg+AegJu=?`m=kt$@)8}6$lt@hic(~Lb5%&-yxALXg@87+g~
zu`i#^HJw3fn9emk^#Lvx3SS)@mG!om>XiPIoavF=+9S81ilda!Zi+<=lm<rLRWmMa
zMR%3^FsMc@mAyn9`O8~N!4a|84$szw$1nU+9&@D@)T>S7IhfbuZbGst;VOQ@xH1&r
zlm(LNTu4_~?E+SAgGcb7*PH`L7Jq`+N|FwBf(H?Wr1bveZx4<X<LjPtgs~zqtP9}^
zJ2E>rUZwYM2HVA*bc~6AI{>j`1`>%unwxi_hLudr2K8qXNxdhLDEkh8ZTKuQMcr{>
z&H&v!J2n<GQ!!t;spGtm&*Bv;m7L{3W)o@t-i;K2_+?^d2~zsTVTVW~&gFx<B?uAA
zN+o7fywz-_n1+@uHq$)u^$K_NVMZsVW%S)|Ht`ULg^!Cf+m1-~VQ1&Sif%YT?0!5=
zNgs1}Tl$R-saEmwT!{^EV&JwLPNK|`&xuqPa)75^6sdm8-5v1M%MyTH<4JP`kyf{R
zK0YBWAiO3s2K}}GP!x#=ZdVk%B+~4*XlPDWcKkX|J15bHIjjTvBNpO?{1GdgO!r0&
zdZA_a7d%iKu<tnN`M=t(W}g(Ymv?5*=5qtbAEbD-v~*hH3FfH<?N>TkqW`2g8ZD^?
zukgaRG3biCJj^J-&N*+xAGX}HMU1Wli(cIF!cc<8;bnkJ*2&Sm423!IJ&A{NA*mTC
z8(&Wlv0YwyC0{&ua&C_I8V4i>JPuk#-X_FTUom<j6P7zp2H%O{r`>Zfe5<rQ$|Pyf
z3b|&4h}#sfLV$z-aB>n`!jS#gVuHN#IIv13S)rmAlk*=}pd6Ut<Uqvo%o}4^CiCzY
z98<#2SY1zq0|Q<OH7!`wE#jquX;1*&K&(<Z*^NkcGQ$6+K8%$eq=P+qM~Tx!`i!{h
zr&`ma+7zC;6#8p{IE}U~^MP=?yIv|`6hz}!!vR&ij=^6t7K<O|TXx^ESez7x56r^m
z<~eJC8jH^^c@4X9o`K_h|Ja4LpfuWWAmO%sgt}Ce2bVJIyl|8vz_UzvA^?+)Y)W;o
z;BN$noh+gX1)d)9WpwuvQ7-BhK&WbzJAPCXVHf!5Xcl?}+O^Zd>CLznONng~Liuf@
zAgEQeL%nne%m$t>d`pdXqm2a<xL+iuFl6XQ(NS09LRd7TE>zT-*%tTlBOqJkcp3#Y
zxE+7BSYrBveidyT&T^djAx*my6=96IEmg(@AIlcY_?oO+cCVnDNH$9xB&x!;yF($z
zDit{`$B}?}gmM=nl#`-3KKPk*zUBVGxA{$K?pOTEE78%>;?g<XS6(?Q0?zm{;8`ZR
z3U1*%7IAyG5?!V|0Zkq%i-Gag8v)Yqna`9rh-pH9<~-gB7)Lba4X*ewHs0X%ls}j~
zXr*}%L~9i&kyWC@r4Cy8b5ID^ABwygi?2c+qAPVAc#(@=qf7)<W)dK$!uGD+j%n`(
z7Cy1LX^9a@F+uN?^D;fm#Ugv~Dmuai&tzhDu<l+h<j&*vfU!43gnT-t%V5|#(_Nk^
zy6Y6s&J?;BN0h<sWVn^U3sxrah<JK?X3!Z^|8&}w;4mb(mg+2nc+5%c3=`70I2X=O
zA7kvL=)AHq+J<kWkm;gJ#kMHLMyFkgt~yP-hOmz0?X;tWUba3e!1}~WVf+nfmJ;<B
z=vW@UI43jZBXeb}lbv)E2+Lvp?1cM8ye;1w_UjHJ!_dQJJc|vLgB<xQ%LDir%z@<-
z(i{lhWSJ#2;#mSm;NT#9S4rISp{U*0DhI9X<W2__?pF>DvJ*QWbgIJJDF^)!Y4?$`
zi6PlFKP9WAuN<^aPK<P{2N?&Ei|_?5(*#h(RT|lTa4qeT$r9p)Mq)Y0C*~b!&5347
zL4GQ&MYPf7qljpZ;ovjTG7c9t6wrdXzUZx^@O8b3a#LN1OhHVW@Sefq;%Ie_Rrgpt
zyKwr0qeRKP0})jyjjplmLCM5uY-c0nGgB~RxCeo(6uV^Pl*dnYN)>{2aZ;0jN12GY
z1L91Kmr}2|0BAg)Aq}LV5-49BXM`z&2LZt5d!TBeMxunT#(T)Lxy6DIZO}R0z-u=3
z%gTx|SnQGfDM_cRANU5YB%{bsz4+M9*zG?yW^qLZA}nbyluL`vm8eu$DVDx!_#@_#
zg_VeL(FHKJXmn29X}4ptc%VBY(+IE`l^frh77@`hBDFY;_*w}IdgxRVOfOGZMxe?{
zLi|oxB0^;)kuAn`S_b{Q@(L>CetFE`ig<@tH1n?+a!@>T9$kn<T9jqt8`EMQjx8by
zA|99sJ~*~Pv{4waPWd;<1Dz+X!3=nbOc1~nk7<z~l@h{xJ);KcrKhwq(hv}Q$~(BF
z;)RTPWtbHUi*`IcxOUAFv>TEvNxlMB?K{?yH?;gA{1|w2b<*t)ovR6MobpS@ql_NV
zzI5#Em4w^B7P+09bRzRc8SQvW%gnGxSrZu%y_%n2%gClBblqe@#!3lx!7T`pR7&`D
z8;Hw@kR+3Jrd>K;C}fPVbERTNngiJY^#^U`)SWrlFdIllkHaf4H7}OMrK{+*>^($J
z9DjtO;!~$}-%(yhyKGr1LXVUn7Nyu28uaaVcuWrXA!2gS_o1IH7Q`=}Qv^B?@l+BQ
z3ZF@2VsvRvYGV~`Rz{7c!cydwSeToPdLb6S&3MJ7V`WAHE^JOqkd@uVghU2-aw&m~
z85Bt^x}r{sst_2JW2P<WR!o+-Xgu`HldBQyqRfv5V(+LyUN|ra?(2KvCK-!CLJ~VD
z6Hbo(<Pl-W-(F~`ycFB){XsYgvM}&aHR%W4BQNIwEopj|22Pa5_olcSr<ox1UXRk_
z70)0Be%cI~!X0WdmYuP-VGCxO!j9Hh3~c$r4*q|-JR_grV{!J^7MB|C!0U?__cC}q
z?9+R7bR(FHIPxWGrrnjSi?Adqp$A%0$x7xO0@G>a+ioqN<nPHJb?ck7V$fyBO8D>(
zGA!|?b%_iS{L`y<)NfEO9=lor+uytC`U5qs?lqickYUs`A9lNXYr_G73>cr1fflAk
z2df||gQGSrXSX-VxVwG3Bk=N_w}%e!%thC3Lb3`0IT^`>B};j6a^QLGn%zehh8Yo0
zpXc+|dSASTC<ZFW>#YGo{&tt162y|b$P_K##nX7uDBP|aK)H(}XeCZg5)`8ecNKhO
z4E95dp4-dm50P&JM{hUq%APxbQg!@wf`8gDj@e;b{`A^13&%(No2}7FtjMD0#PJ86
zjlhrONfN$@S5p-dG<MVn;q&<qfBW|z{QTcP`qJ0&sm&k!g!PLKxIg&$PoMtczn=Z?
zA3giQSAX}buYK_AFF*VKdmsG#{SV&%@`qpe_0u1}^X!}7`r!Q^fB2)HJpKB2sK9TZ
zfBPpIyl=ku!7u;i!*~D3vw!;HN1yxQ)4zHD+5i17&;Q|zXbk({m;e3w4?q9>AOFv@
zZ~P0i`}}|XuMgh;8rJ-WZ+-Z^Z$crw9Rv!A{q&u8026@!?7P4C;5WbRdHz6c`2YRf
zUo*0>_Z@`0<!$kbDrGRCbqz>VZ0J@YcacBHj>C4hhl-S1g_4(n66^tx&358(uZe^B
zxaZKnO?Man>2>L=*6HCt2TqOty?%Rz{j)^>uB<NOKeunu*ZkUT{OA7C{O!a}2!*>F
zH*vYzJvYyu<)SA%bB}$mo19@UPI6}x{sO)Fn4IJXoK4WXrv_bXoP@nsGBcV9_zwCb
zEunMAEf1e7xMp`jkn5-Lj+iCb4#?|1U<|D%llb-}uxNB`W6na>nM%dFP$=+6HG{HP
zM0h=4-(0_y<5~22rbSPonpKj||MQp6fBDWw-~Rg#-+M1v<^v!eC(CsS#ndscP!cs^
zB#ueywUQ0H3p+(}Wb~3Q951_VXBE%WmmxW|>$cg0qWB|c?}BhcX}DQ+K{L(a5n=)#
zI}v5%VTuMC_z#E<3&9IM0lW707VLH#Wis{>Ea<^|Wu8|@Ew^pvvs9W#h2O9D6qe6K
ze=7;A;`xu?=d4`_&yvT1$ZQ3#oZ{kwD$jrP?uYOGI2pX+DlSk$9{j}5Y_AX0**{VW
zap_v=jd%`Klwnv$H2CzJ-+lI9Um4#ZbDoKAQXeF}*^x;d;vJx<6@nwk7fD*1J#;62
z<PYn0prl8;fLbfXiHc@1pgEONCE-~oComEJ?du=>`UlUx@~x+T`wp$y44)`QksLVX
z5b2a>l!telZLem-1|!}yg)#gKZcyTHl;Z2aR+2fVCaqUqv9!ldY4s(g`$5vWDnO;g
zo2OPuf@Gx_M1cdr3?5ts0OG~fB!`gPQSbv`;u+Tz$3ExOTXvt3=m^h`W=8CVBunY2
z#O4^#g{6-kAkZNo_57<d%Hy;28mD7bd-z15wdw5+4$viF8Fd<)fvRpUr}-nbuu`G2
z2Q11%zX6c4`!1{nNN6*F7Dx?_!<edNZ8{D?zqP)#y0Ap68mc#3pH&kc2Xr~-!0YcZ
zU$#br41sprLQjT1)2E<b-)Y)?^f-lv#RIz_A3A-%<@TVpE$qkUvOvXWaCxK9PgI0i
zH<TXpfyh|*01kF{E?2NHU^CQ7@Jx_?sdC3Yq6<Vgo)R|DP2K5%Gy<&2gWcW5H3XG;
z&twaL-~$fBtD)**+0+k<Y?-o{We;X>f>2<i$Bgj-Vw-TydHrTybWXhan+1HS!rg8g
z$ll`5-8QV+k%j)+ZXKl+t8E|Pw9)L)q(l1$eHYKZGEmtU^RCWKFjfLL^dV6S;C6-+
zlc;W5tD6aHzPh=(nX&G#Ze3fyyJg+4ZfsO<ZLKbCTI(Cu!uqYn)veX_Tky4PRc}3j
ziZ@noEoLkSMhY4NitS?$08NyVT&JN>kiY;5giVg$bL#G{TZgW7n?qy{O^iI$Mf&JD
zeN@J23x^FBD53)*AZ^D`Gt{r#3_hC-0%oe1CMrVd&w9(<wNj5BEiT=A^eAoRa=EvV
zKUy`%VjB|;F`Yh=44fkXb7^aJ7X}v@A`UZ>%3B=BTl^Xt=Opa9AHsv~vioQt;Q|3z
zY?&jxeKZ5&{7D!@Ky{mupgpj#pVXIzQ*YaSzGQtEw!gf1;oOCE#^NIe(9|M;N6l%0
z{wC;eNWwM9e=Y-oBQ3mQfmq%`LA}jb{ot((f~$5}&wUu*JqPWV?O~6`2p5SB3;4))
z1#;*p3VOv62s4z;`kc<q%&?7jzf3c*3IhyEyzlg9aQL<NpH1E?Gz_Q=tdNz-@o_@N
z&%kv7?-~9OyadQbcsxMPY!!eiN>pZCbyAbD684V+fn?s(SLvbfCw&~1e#v_N?RRiP
z`!*;5pK}}h8S&5B^gy{qzQBEV512at_1R{}cH8(oIDhh+&Q%+9nhk9f4hxqHua#MH
zbLci8Ev%RcpG{V6b{3EgFymXyhwuL8>5u>B`8VEs`p;kZ@VzfT{mTCoxPjJI7p0!Q
z16s>B7VPf6?Sm%q{QdW?+whaL%cuYN8`LD;|8J;bfMW5Re*~rE!+-m0Ecfkqp8oAm
z;0G!)@BjFN_y3On{`tQ@``o`h{n~e*zWWbPzw%$8tUUY9&z^n#U652ieD_BTAn7H+
z5bYw%bGF$(pJo5#hW<`~DlC@no^L$?R_*12L36tMw2hXv$vrrXlL8J7@y^2Lkw0)c
ztFSw5f{t(O?_zuz`Q3NiLs&jl#)@etBmJJW8whHQ=s~6%1!9@!>)%~c-WA;&|2sGo
zsu;Ey(;Sx?VNy25<yTc1BMooAspJ`r47_2z#e6CZ08BPSLO0i#Fz1-dL>W!rY464@
zLN<IT6#y@I$wNj!%>jrUpZM-|?R~dtqv%r^*8yTb9}|5YPl3JBDP+jL4<pVyLXoUR
zXI_j5A_m}C=}W^I!0JfJfxyVy{c4l0n+V1SCC?V2Ed0wD{F}4@AN#ah*3;Hpp;*Ym
zpL4MBdL2M}87R$HOVW-9yW}p2F72Zj31w|{OUQjWMcv>i4s9_hq$c`&$%_O&6-p}G
zdMy@&3etymu7h@-RQ|qG+upme;|{hT=68+@nc^t5{jibSnN8=@T3wJk`W~^~pmM6p
z64T|Y+YfyJFe@rwHEO#(+o<Z^wj1f(tLvK&eXR5-+@jm_LUp`GI;B^NXsYF*l46~q
zMqzbo5HRzhzrLA{Z5Kv~hE%BrN$Z;@t=<9DV?B)-C1NbBuMCXV{1)ayzl}<JE*ed=
z7H?3}!+cCLzT4i@%5OpfFCEdNS{u~g8tk@5dbj2=eIC<cCb+^7+h(m+EEv`2i-jpF
z_T3Jd7zgI4Zmh07^tUKWnUM$x7^tP@d3u*`L*hIn8fELPzSq$QbAggn{7~^$^7}4O
zR0w_k2DY>79cti~Sz7$$*t;O+G77-urjfv!S95V<0S8Dw!>~2UZ{KweOv*>PJ;4QV
z!dDLNi4H8^8}1-=^-S*7O=>nB0hm^WJ|t_Kt4r!|t8905$to7Dt-cEa?jZkKu28o6
z`=w$L6f;pu8$Mq0VLmr|6$+*VRBa%gMpMUN2@<p+6iv^Oic_4MospFfoCVYkDpo4r
zaqHMI-*?bZmv__b5({v|@{Ab8EwAB~EVN&DnT7&lJgKiX@ZAAk9$4SZ3nuA<D9?0=
zlBl0Wrd$Wz%SxeLAdR&S9H(n_hV6li3Iwn0GnJ8epi&tWxd!d6d|@LIq0T|8wu8Eu
z>q~wL8!qS%L2XW52$^$NkUSi}n;dWz@rbGWJa3;ZzMwv6Ja{ku2qkkuqYE2EhQ8_!
z4Xx;T%l2E2FGme!0iKnU8^xJ3>}Oik%JBvzd2bhY${Gybu{1QB3pNcV(LqvBpJ#5*
z?UdE}oPQ$`;|@S@Tw)#gLooLUcq|XV<@)TnD3yPdZ)U7yE}1r3utQ+&MjTMPF%`%#
zrd}*aud#h@$GR$hMF6)-79OW-ZP127jffp80yt%vLn?M9s;q2LOs7-lUv3msRNFTq
z8VmBx7ICv+AlR-ERT*;3YRXnYwe_td0*F$;ge5kOfOM5@B-C@ZRH;$99Y?gs@`&b@
z%DAwDX87jJYKNB%W}5)cP#qw7WzA^Y29pPfIpoukO=<8L_Yca+O)(BBRzRYKF!<J&
z4$JttU{?%UR`Ub6yrcv?(uR#~l+e+XBFRu9+oI2$VJk}QvDjQgedhaSP&C*`Sy|aL
z*NN(s>rBxf*HOA60pjKs1(I)ilYn9|6D)3q17@Jy-F54*@u2yQ$^W1g(|!o7{XYDU
zL<5XVUw1(PJ%Z_Vm_co5qkbg7p_K~M4m@dwRu7;e@yndG=>gY(O@>O~8MKR9h=iPz
z-DKNvR7d3o9dtG52l5<RqqLt8_r=MTs}X*u6rw+43QI`vCno|L{wHYDkgll_RvIVS
z07ji*(vcyN=hNwcn*+9Nk73xJ39v_Sg0Umb3Y?)ezAeEo#+nUu`SR0R<{P*`H>yZT
zE}d>1)KL@T5Yb~HFmbzCgeK2_=;}NO6XUHBfZNk=yz~6q?=ao`*|*<&_O;KWwd~u!
zc=k`9fBrw;d;ZtI_~897tK|(X9yY%-DP>s#{z?dYWBsJ9*R9Lxc!R*1Gx9kJ<|D(M
zyi!S4G?_*V7&%xS4q`0_%to?#Z)F45pJC$B`i|xdk_$VYKahf=E?*Z5d62MCtWyKH
zG3C*s@Q4|b)YdjF6q7{(vORb3u$C?6BNZw?smxeDU(Q`v%q^$B7g%<H1P+-Bir0gD
zarn@&T29}|O)!on0U%~jjEf|lw=gR<E(?9K&ZzuP8=TkqArK6`3mgh9zWKjoE<TkW
zBIWcyGgqJyxDp`5bD~h<S?E`#;3RAEW`#^G$B|c4hB6pGuM5I6jJ%Zb@f@k|wAsN0
zOf0W#HbPkYR(;q<zxei1z*xKDh|MO}>(TL$1V3a4U8u$Y>H9-u_b!8AHc@R4THdhP
zB0Z@P?hYp%m$m1$0USC;5iRkp#6jeEOu?38Hh|9a4ZGhExI2gS_OQWF&sizfEI?{O
z85kw>Xu}>c!euH(T7!vvQriuYCF#^+?uS<@pnj$`jT9aF+<ixxdbSbX*3whyz_^D7
zH#}=Ydh>zcnxOs-YeaANR~J_DL`&#@=5(F@I`eGF*V<k!-)v>^tr|b?9KsGoS3Ek6
zzuX1RG3+~8)-Ebs<lCj0<xFgVrE)%vIw?%AweQ+^9L97|w@ZqgaLr-1dEDgju*+qK
zSiIwwxR*kTBl!b34FQ}?4xAD=3MhDy6QU?H00~}VBkhLFEo7Y<&M{_on>R$x4@us9
zGNV_<|DY3rcbwW+^}jG$Og=D*j?@Hna!@|`F__(GXj7I-;(EC)@l!DwNp~g=X9T+f
z?0q1oDR|08`Tl3%N|i_Q{OGg%kdvQq<?9{@;=_U4W=Ahj_W8Ge^1=Jxc>3cnKL6I2
zJ5ImpJp0~%J^S7dpZ(`|KKlIEpMK-Zi?H=P|LIqszW0j{|Kmr`|KW=teed0m{`vc4
zRGz=PdUI>_)}!_L>q`q;(yE@^<}|U)JGYZ8S;dT=x8XFG4tr5K*kDvTd22;wumi7^
zzTH6f6JO%Cjr6NxgDjTp7!4=Oc2&LJDmtvi1Ed@}t;5mSdT@Jb@e!W2KL`)SYIks{
z+V9&(QPA$X6LS~ZcBkhwVhaKM;>EEb#$-d~b8}-WkI5$CW>Wse^Fh8GFetF)u~0X`
zat4ku@K9_4eV^s=(l!FPjk!>mpao^iRHADSU;)5{F4?eXDoTyqE=$zPx$Oa+HK@fX
zO)a&FhZ%YyACuHFYj#gB(Xo4K{)W>Snn3!L#*SjD`zVd$@@?Xl1iK#hfr3p+I38q}
z&?D|9;*jArlE;2-hIuN&2HOzlDZ#nRS#-rfGiM4tdjUvSITc$#M_H>rIJCs=GioH*
zZJqAE+xNOCbxK_d;joi7CY3I5VN{XBA0fz!Vh7?X6-Sae86&IjvK^0cs;!m>dp|~F
zBdOIFP9Efz*eGEU{O>mIZG6+oFgnOsTSsDTWT4qj4P<{Fzc@o^WGpH4<|5lVaNBKc
z3?`w8rMMRc?Q?jS(r!~}iG|MjFm+W7A&A>}{>Ht@8tfjFY=HHKX4&d#T|q;yHyj`=
zzH7RG7;3w6MPS}K31JHAW-w)#BKid3?*IiiYPm%b!qPeJHLze0nWG_Bo`oP!*bxI}
z^afav;}`ZzDA??EaD<ZDLiyY3kOLSFo<*<O@)^K^!0@@`v;qSHy~!ckZxI$Kr%^8V
zzTrwf>{jls3!QMuK5fB(ARO-BAkhCTXjOK{I(~J;FNIU0&<7#4>m1Pj7C5VtZ!0S-
zNR=!(lmhfjWP(DTI1y(VX9DK~mBPi=ONBHV=kYqx>`~G3>5vUz15ZOcYry()b-Udb
zs42!CSs2%vV5Xdls<@CD&h>Bi(YFe?jR2*VVK{TFws*=}22ON}j#|)VC1bUnuEd>R
zR4GH=>zDyQW@k;v0rYJb*R?v>kdoG$8_npy*k5_7uk51Rd<b@4q`TOm1@a0IT|oi{
zF%Dfgb&LW+P|HyCwfL?A+yzl8n7!zZ$_|bJ1|&-WQ`*2AAYa;aoo>p)y_qnHXLSB3
zCz2hGgeQ-uF9t)YuQonL!Ye=<28<u(inVC=RhinB?XMqnrJg|1<KhV!Lw}j$!eS{-
z7zfof#bBwM+-Exu^2T-H#$1Y$%T@lyE|SGFJ)T(eJUlfVS=+ebqeCeVZ@;7SK@#v&
z3}}YK0j)#SQG|p0k~PznO<@M$d=Y(Gh<l0R$gEj>Gn|-QE{Agh|I8?BmPvSLi*nY{
zQm!QP`*abERw8I!HCTCxkC4WMC)391=pqREfyGc8qz@v9a;PMO%S$Sx!+E=kLTF5|
zRystJusTA+6k8HTly-?p5M{Z^@Pc(Ysnldx^FxraSG%k?Q$W?rPlj*umg&mI!Hwb&
zXea*Hzkc>lKltbepZoA%KmXC^{_g3o|L((o{qpmF{4V-U{_H<^%Fn(4sx>XR5D0Y{
zVxt*_Xw>C6aYI2O3Kj>hrxd68h{dFK;9LLt^ecb=^qc?A^nMBAgP*^TmJYOff91O$
ze(p<nW$ho|efGn@Ve0<}KmRGaDEI8AKYscj|Mcv0|AtPXU-;6~FaJMLt=wAQTEZdu
z!B5l`V}0=RuRs0i_YpKy{@#B*{oLPw@QZhzeg8dnOOB0X2%HKaf-h$*7JvQ}+*vRV
zg*$U@O6x-K-fFk8N$vRLl1@?kEf}f}GC{#fk^P~v033h746mHKOwFV<`Bid#lXX`?
zR5a0w;NO}QYL>@P$ul8Iq9`N@v-m`rLN>&xntf)%&AK~b(jHCNE~noJr`cGQ(d1X9
z^qo-j>SgaAI_+v(LX;Rakv?BkE@<0FD#4v{$i$_~NbvzczpT*<+2J{S*!z{CL)DCQ
zwvs-)EHwb~(&vJF^%T>`IG=uQ@yMy==^iD>0#SM6U`;v=<ktrB*7E8bYfJ35Lw#_l
zT7!b~!j!56pTTnKIMEev$3ha&(L+0tW7Aa?HC?SJ&hWK*+;dp0epq@)81aTC#fqd4
zopR)vO3pQsQEY_uI#@N&-uagg-}~oh-}%||Uw#oUdw=N*&;QR4Ve6sTJuk8lMBHGT
z8Jza*_E0k_P`XL)lqf<DhjnwpTq~1ea80s|R{>e=X*58I4=I1JWV9|sAm&b^!t=7(
zqBi(+CI0z;{POuP|LxgVfBW=H|M~nse<{p3r&5N*VZsP4YEPb6&))wQfQ>Fuvwe&U
z1f`z7^FAx3&0os_Dx?Q5pFGI~rPb||@@@;$8;Kl{pqiX%CIrl7I>4c{<)9FHiwWRn
zRRbP30W7D44M<KhS_A1;qlS?>TL!3Ytg$0dzO5&#3&yCYT0cZ>6<2=<Oq#AStNnU$
z^_I!>C&9FZH?>d^-;3Mf_%2}xO?V4u(uT#d@fyAyiew-{!?wetxdd~iYn{S~Xx8WH
zV%yT{3)3LKs5W6|RmXTiI65Ju24D3d>GdQqiI2!yY%Bq$``vW+*n2A4c3`O~!OB)C
zN4;Kzrf9TLGJ`;ros^&HhIiEf0_R%<h}n;m8XF<*4LS+aL)gjW3sW2)7O(a=hQZVf
z!D_qC_8h~Sf??-DAqO}asFSgHDQz$@7p0hbEj@Wip{zKnBBx5_6WO$Oz@<V{3Z_&<
z%2CESEG$R6V$BBMD#++PCMY|8hpE??S(_u0!HT2+xb!n!j<+8k$C~)CV#H2{I8ABX
zi$sg5kN8f2fm-xd7b42<|M2P0zIb|C{8&U7Xp0Pt!S(FkOD0NyC<qdN2E@2#_oD1|
ztlW573~FiWs(L)}@raOt%=Lyou8Q#l87XHOdZ{`8zt8z*oC+o#+VFN>m=f4Ab3hCT
z?In=}11+e6e+7iW4!vV&gQFG3s5}KXcp+NAW>BUv$$&LKfjem$UB@fOaDoqi`!~;i
z`Qtw*PQV-*UiJ>fJSW5k#r-IP{fQD{W}YMT=`seoX)uW)#GVZ?hQf+Z*e#}DB8+rC
z`q3{yO?~#&-+XG+^J<84x{a4aH!nU}FEUX9u|cWwnC<&T)lVEEV@Nq}+JMRm`nb~T
zF!&W3ROaN=MCD5HJz|}QbTa<<8EcNyoRF;}0{v;3{IyUyeAonPdUYGGjK{SjZx)Qo
zFLTHy3=aArAJOQXa!`sdHYhAw(<e6~Kq_Qv(Z)h(u#p;CN;Ay_w5@xO@Iq0pBA*bl
zVnRV3io%#{dX!~^>G*^YWW)91!^!eLvGJ6ry&A%Sv!HeFl68G`%c>2Vs2Z`G;#To;
zcCL^UMO8m?jHHxndS0{5E-&=*`<L>r?++b6-*5)D+rH{HDsyv}i^Q%etQbr8bDIAW
zo)9UMSvF_c46=rP^JmVmiRS@FEG48%`V$&Y{TMll3eK2LD=}oT^9f-b7;s|HRXwFX
zWnA&-f4XJQr+r2_-%$(Y&=q@2k`cEA#g?Y1bBkJh8{UB0@%t@@oF-i#18LO<?IY`!
zeJf{S<WKTtfv;53PNq59KAk1!UT`#=w-H>_Xs}^8Bkb)eimSXwMd8lLyjB72u2#F4
zVYhG&T#%C=4;yHo#4~403<>#2S~tA|)ps*@is@HQp_j?;RrFiaDuL3ReTVhZ4;}m&
z#}a%4ol4r1rSWKjAMwSWmIOs3<-8ESa}41EKeH)D%}+tJDj{Cw88V^7tCu4iIcGG&
z|DF4ojm4ELnkDDTAJ;@-_xoxpTZAKvF3_#YLo*{6zy^8aR8n%EHxD<3_(05y3ulTb
zmI)?X+c0h+fw$c!j#c+r^gC`4w<suTbJ*vhw_dei_oHQCowF)etnG6di~m2VLDu$p
zkgRto3x8!S`j%Pe)ZBAa;M`7l7?@=__d5H!LQEq(AVI!9GF{P|1wRn}RF#YKK9;O9
z$OtKSdmqEAYJaq|A9@&(7AWM1r72sY9B5$9I2PVVw{(~z>%?k#efJ3l|8GY%y<OO$
zHn)rX-{5;E(kd-lJZH2x@OoNf@KK{j3#MvyF1poV4Ziqdkq1v0#@7{OCUV(f$Vddt
z)h8MsSm>j0C#z;eK~2M!+3J`KK-4>+vqHKMCByc9T>GTJ82;tHop?*3=D=p?b}(|8
zLdK#j%aX33Y9BEx1sR&RJ-M@ocshrw-WSnGL%8G*`uHM3Cnn6F>X*+;rpDQpl(I66
z$zNfNtl{#~^76yOYGG&g#P~i-VNR0jShEva?nijT!GI&lM~|HPBboT<5lAC^N;Vw~
z$SLkj+I~=#54PI`E`S$A`ZnDw#UQ&ax83M7mkD-30|j*ESEw;oXHZpK8kN%$w1ucR
z?x<lg6)`TdvSLrsU}!5xIXRB9Vxy&K9j_-7XSd$+g0q^pa(XYW*?wz{onNRn08)oB
zjs@q8fti*)Md$kL78bon$4*trJ|%880sU~uX=MjR8x*}Az3=+&Agyer!nma#@v%bk
zd|qHo$!yc7V<b(aA+)aw1atT@qgt}0<<J?F>h>|>H-f8;2FA(Qbr0$05UGH;!@=G-
zU=gB1x94VNcz-n)gJb?)g`BOD7#4XUa*<sLf?5=Y>8+OSzr`Jyg2w4`6A~v~F#?&D
zib>5gbsyu{4q-1p0zz}3$XmF&-y%QBx8z-{w{QiZ+oVsI)1*I;07JLEmo_h2IBg8L
zc74}M8N)5q4t!`W;z*EB1atmU0~L+Ln;RzZOxQIBFV1-#AaLqFj=kI6_gIWiSgSUT
zOU8OjmGj=RDBLiG>h5&#qP_}_Zlk+A<X7GHos#tyb0qIL_h84X;DH_y2q-BT7=kXO
zrhpLNGCQ6Mx>wN&Nlvf4icj8MNZ#V29ak9m&G;7GmM7AHiRnA2Hf88$n}DR;++tAz
z9J;oMox$hTGe8?2xxzBarK@+yhM`Gylq1Z`oJKK;sY^(51@Z-~*U<L_ZK!I!bo{*#
zdUnS20gR&$vStT^$QEfxw=kEA3`5RW3G7+w#W~-h7Zvw;qzV?a8ehPQr{jjxb_PyB
ztdbk3-h9k6E`nc*{S-t5HP?8)f$W`(nc5kvrZQWoNg3QH$yObMQqomp)~e~Zlyv=%
z>3Mdb_36r<XoKB9vZW3eNT=+DD$LZxQ))$Np*Fb%K$QW*rfNo0!Dvxw8YNXG$M<K^
zwTo@_Px^OZ-C#sN&T%ms>JxIkX9?-l@yuVyYqzD~25x5NFKG8Ju}vI4X%8>4tz3Lo
z+wGEc^@c>|r(ELx%8(#@g-XFAC;(V-k}PR1laLv>OqMJ)V$5G~N5hhEXrv_O8ds7|
za)=l@QI(i46_yEnhf1m=5n@Ygo9&rc(e9Oycfn6~;#=Ye(vZLo0!#dak`l0=_!mBE
z^ig9UbSh9{hXX<TvTaHd3S>#MMN<|ti<P7em=f7!l@v=WC2MBFl4&=jB7t45q*>`G
zbJ6RRm^}<f11&)%W)PwwU<QJcG!-a`b3y8yl6)>mJ_pI9JC~RW4WA)}u@u%Jp%_y)
zN>c5BB$SRzB%>o#O>it3f+Y1z$#u1?|Bt=5Z;z`u62<?%`V_}ESu}%3Bh5&DL9$GY
zA>e1t%VRs)Wc_H#(ae!_@XVaaoEb?2=spe!U|x(#fIxsi$cC3>7Yv&$F}8sZ^V3N3
zU-=5ZuBv|TK4(U@OxSy4Th`1u)z#hA)z#J2)m4TNnl)t-yjD_XRu?(g_@q6H^J@%3
zXW;C@cl_2S*ZTGF0(OMwG1B7j-5BX@I=G6WKDhAK;M&#AE9W<_{Auv=FK;}1$!Eei
zyFNd);C;~-FT@7uhY`ras(pNgy)Ueng1!;wxF;@n%KjC^DIV-^)_t3zb(C<{>3iP?
z*|#BCeQYDlp03Zy?-lsoH>~ySv97}p{%~<{;d7!6#d+6BAvzrJE9%bk)luk^w3+7K
z>oToMZcRj6SLL-7+1ynbTP~x;Prq>E&1bSkb$2ZTkqoCTqmJ9Hw0q~1uOMp}ws`x^
zUu<6a10)1{?~76BEm$)2JzVtmG}ylO%GNt?JDWus34QICoeHfUE#?jbb>yupgXe#@
zJC>>VA6G4FNxjaQ25hNSmvbucdp~>S8Hx)0#&<(_i8^upk6W*PHF)`@J?@Qn`1H|$
z464Uk^<!pN+34i=mSGO_daT|L8@i0SbBjZl_7+DNx`~{jn;3QIZoKyO;OYk>2mn3=
zW<!|@spdY1d@$^;l+&Mfx?r0;{nH-X$}kvIqq*@EU1;ejgY5<$OIPAnms@aV8*GL0
zHgWL9pSOPf#Vs^cHpMznAbwco>_MYXqDXHrm8NFX=Q*pHn_s-K_2<`a2Rk%-jS<-4
z&K!2Qb7Xe-%^z-4C+hL)2%VVB>BQv7;^?U_*kIg*w8>?mdeSYJZ5JG*lOK4<B)MN$
z-h`51pDTG}A*XODNWF>z!;*RyUG+GRs)H|o#dL<ji@)A=(|u<(mOg_?lxTLb8LD)=
zI_j=dhSR?2(bSyrtg>J$be84XB*kP<_mp2HMyq>vx{fyT-u5T2^I7xyUv~cb+wBjo
z?K#iIWQO%Ko|3e(BL!n=C_=O$^NEDqk8jjcAz-y92rC6Qv<0%J@Fv;fj|h+_rEi@K
zLWKK>v8O%P`z$5D*$UPFt<Rp?`OCXGn)Il1BU*-SP==yE;nA2UhN;Y3mwq)kf1NaC
zCKYd=V%D{n+fLim$hw&tSr^G)<wFGziy69^fUI!H%0e-(^V{$K@x~kfJ^1SfY%#dW
z(Q%(PEhQTcX3mK4a#H*@b-A`~Y<J*E-`MR)iZn??ud}W;&sO1MA3x66<K85pO@Px1
z@IXE@eD)M^0^h8@eSYxiCB`0FKQqaa#TR*6OWev`@KJgJ5RQ3?&r++WI#7jxhK#zW
zmw)*1Huf@HAEB2FXm~FPXh<(nEUiZTu4%3{mCP!_xP(@vHky;#eaondwk<rxVgG^U
zt6ral{Ubb8TdY}qzXh*)i?gs*VISGDJqv3$eO!i|^7NY?ki?u-y0e7S-pFrY0qub~
zw+EJ7rZ>)l@(3T3E`;9eie~W!=@vcBl80qUV$Vw1%^%VO4MMcT{LTUNm+}Qk>sc<f
zu|u8qEJ{A0pdlA#EjfY4VKfc5(A>KY=H7L(=Rxe?hwptjxVIB7FJlO5u-q?ql3rUz
zDbQYm=NyGJ2-a5O+6o*#LG*NZ&`Bt1C>(qvr4-vr1n5yTCQo;gR$;uEz{wg!*rtS^
z<wxrb8nZ0Y1J0Rd0XUs83gp1{+6Lr(t-2qWQdlz9&jkl>7ydG7pAnamjdUui@N(Q*
zwqQ&k&44JMaZ@3iev)q1@vwV7EFnwuQV~%<z%q_VQRA@N7?t%q(^4-s!5}5G@uXZA
z)q4-|TvC`1%<DNm)D(Qy%ygm9uVcgM@aRWAfW8LsV=KZJLa@2kh9J&o5)rWjMX}ZK
zQV<nO!8kmmIQ8s78Ka{6jvv)H>~08rB+DBPIi+;0IV2G(K^8%<QBZ!J={=mlE`~aw
z=u3!x*0`)^jYr?A)*1GAsavS8msm|e_qjb7G-JHn9_jNLD}ZCJ2jFB74+~0G6N}DN
zksf<t+P&AorU{HW?;Ozz=%CJ}IE!Q8>|Me8Zp5MIp4ldx!txuSFaff{QRWifM4=JB
z5rrtO-Pz)gnx=YsdmCK$H5LOT?xL|9c~k#BJTATE**|3Zk0w5~01sN6wVR(#QLFBs
zQRoh6F|~JL$g0vVEGtdg88UZl$bzHR=ZqO=#KAT^ICzs}Lrg=!6ZB$M2AS&$q_Y9u
zrGXIX{E2ZVZS(32o7X<ydhU;d&tCK80KkKM$|SMWYv}2l{~1yg1cmS6?}@E<ULXAV
zQ*eTTWD<?IwZxQLGv&1;dOJ?jknuu6TsT@=TPthHEBJdYO?KGn^hI=aE1bIsv2J!~
zaN(K3rC$zy^AWYU5r?Vm*y`z->6ti*RSN)bxGfsN@2-T9xU3^Ws>8U6VnbCX0m!E-
z_5%Lg84NDIw)LOy?R@wF>&f=DUk*Nb^KaK*>~`Yi<)|}w`K24Lp5MCsGY%}u*bchL
zqJkzbU$nv0txMj8VDQSt!PQp>&wjb}+NU<O@X(YuSn>5FZR=oPrAZh{(!#NNowhLO
z*ou@jl8Dv}-X~fH0V`?7`LB48H>YPVQrNPUvsie+E-hbJx5hODK3^qSEX$)v)GPtd
z#tUVNqQZNW6GO}Fi!I*AoVL?7a}yogjtcS{&vB&84ARJy-St`NNC&aaSrf+ed?jO<
zZQO8qm-v<VZqIm=gJKlYd=AyFts6Z04;KBO!=hHkwY}%jtv4<YUj9IE>N8$uRoqJK
zDqp+z`ZPw1)6+4ddDmgL(U{BXgc^Rfjyr>z)w`V!|DAPhk7nRm-nfPAImoBj(o*&u
zyP2uwolgE`cefKRgU5{-;hO;5>-8iZ4cQqIyq6o<FVAd*tBtu)_wC7fc6?<VZ#w2o
zPtBthT1eAQN8;H@__sdp6I~E-{I&?lCZ&&i-Gffct63Hp9y`U8G$9+w#_mLgu2c@u
zxKPz2`0dZG4c>Xdm>*ny)8~jCpiymGB!gp4gau!uc^>XU-gunzL7WtKYvr}tF;9q3
z1UqWpsS|%>HCzps;V!gr8W}v0HPNY09;*d5_R$qXzU3`*;8K$jxg2udHQ~l*SYL%p
z(0E5=5z;xc6~-x$uEm%@jYyF-x8Tl2P?^n~cZ}KiL?t5e?`-KB&zgFak2DI;&1KhE
zy}24GV2L_dxtXe`Z?S6rp?Z^T;I8Z0jbH=460SycXQs>eE2sv`F`MveT8z>Gx=8Hy
zVE3)IW`HIM0X1X2@r5kzVtk*r@zQhb&MfhVas0%@D8{RdJTlmz{rh)gQQDQX99;Qe
z>+R>bo(4{<n)ECMa5(w$OWYIp(o^6*{KjPt^42?$3E|COm^;jyld=C2cUR<HhHtI7
zo!PaxE$OI(36K1>+eE>!aS~cZ7v}yUtabSXvCY2`8O<vChDEbp<Nqj$EF1n0L7Xp$
zWv<NACr;k?5TsZgPjMSMuG^8D;kgKHj*qaZ6?I{Y2KSOg4vrJ8rKA)XyDlepItYW=
zKonF8_$qFBY0qbbWgzP|Tph){(~$m8o#1!*tzgV8i0##~bQ@M}Xd6H6Dp_G4&ZsId
zxga4Db?9lorCD6ZDJ}eZiuGF5xTm+c*l=wT{6LfUwfuPJNA|lPt9L(E@0Oz!5-i`R
z5vr^|Q;_YrRa=o2&^PPtkBzrKw%(p5Ul9%BG`Wq)oWm<o)VMclbVJot{Hj16@7&YJ
zRO$+XKhV*{>OFqZ;@(N7yRX^qLNe3!en1x_)dS6v59ctDYtyo{3%2Hq(L-S~g4OXX
zrH-w!NqTM^j%5}b@-sSIU=QUtbf};r${oXS`!HNO#<>c@*rzu>wjhHt_|Fm^pr(1l
z8_;dcQH~$DmSX{)W{AS&2!d_khk!qj;R?z*g&zqqY5GRcrVjysFjC=q(iA<zq1u3p
z{%i>KXMRKvoO$phKTDHUpGqK70DUfZ;0q=n6;Igg`(YfdL26NeEEJ1nc?QEP)EJ|{
ziBS^eOVqZKUYihL@+<}yLheMP&Tj-==LLoJmx6Bd0<q^M_H16SnFA5I=K1d@pQK1E
zlJ#Z!22FP+qCy%|oKZre!6nh)U!ukPPoC~|mO_Yf6m@H5Q}4wl@hWvMABFu1=XkIb
zfK$PS(zHAAYS@kBcT}~7UEQtj(G_q^i0UGluvK3MI!GGpLk4H*C|@2-fOSU3C;g|r
z7=N@!c)&viA1QyR42Fuj`V=YPnDCrC{Ke2?!3Tt0Tm+lYG3xsnLhjqpIB!fQ5#qK`
z%(RetG4LoSx->3n?SX{NKBbE4WDs}UAwTm((-^t{6FnO)Zn9C{rx2c^+YQnAj|*R?
zwiPKiY(ub14lzy5U9DUahMMxx)k&xWb7PL1lh6jV9hY#@c|gt~V@}Ow0ZMNH?V0of
z(iNi<OP*p()uONxb=qP*&UR__sLSRzd$QPvh(wP=lrZ)Yf{Fyk9yt*JpX-PV5I&8m
zmr)mXZ4kPX?e)fmAH^{dY$<N>BL=aLECp*aRVcVM={R*tgv*fa8Zt(gDTy`4FjNaU
zibb9Vns4``I`@KY^vgP02yFVDgO$4um&a^JB$F<X=Fxdt24dLk>=`rVqot1t6RrB!
zzQw|$4yk8$qCVtj8^7CFan4s(R=bkLMLekx&JQ(N6f&A<j1i9aI%(2Tvs*qYn04K4
z)?Kbqxmm_Ow5=R3noRs43_2zEhWzHyYRn$U&T|ca_}H4Q5T08G*oe+SS~)|x408N|
zWIx!%12-t}Pi{p{>oaOxF>B*0s^jpah_wnS)!A+v6%HSXR&F18tj5AOFKrw#%ZQjO
zWi#qCnBPAjI)$t}^eEz(qMPy?11JJ}?REqbx6l3uBSc)|p&=ETuq%U61r1hD19Y}b
zU6%Exyj%vgD`|A&wvLF^tyj&n*B2oo5;RnE2j{X>g;Fw8>1l#+4MM>p9VpK-2F^;U
zpXH!%51UJhOga{h+d#&9ny?2L<JFpZ5S9zWcNNQq&=9Z1($^IO26`|(>O>9bw(X3H
zCc_p6>usv1^~BagR0aGKxViBSKV1fRD5*!jRiEus8xb25x10<qyl+0Z3zvj~X}jg^
z(rSexOnWz=GD_;)w@;Ra*u+qTQ`vO-e?m8;Y!oxi?5CnMempXi)eb%yK8q~1J)?qq
z`CPMHAAC*(pa$9i_+p*|9P2EnMpMN^b{hK->V&e8t!J4!-C0>gvrY>T5NllBmWsNL
zIk)3XGj`gWqy}vbmv_HnZN8Q}O|SlGJ(L?yBlMi(=7I4+Zd`j~=aWCc!3nLVX}8~q
zvIgud0i6bzdAaH?1e;&IF!<mpCXA9aT?ylk(S5m`V=*Hpn|f@I)h#LxI_8m%<~OhX
z`}WJvI0y9BUeEFsQ+7bl_IM-UDXri7YVhUnDIMt0iJ&}cwm-~tQ8RpRFj1X%ddPLo
zIK#3{wc4C9=DO<Iy#9qrVBKMc#I*t9y??`CP*j%5y6Sgw^T}JR02-$ZIpeTt*soeY
z=K_;~8Y3DyCTr1U*J!QHIVt9yEo|eg-kb$r%J+iShO%xAM$vDUC-D+BN_xYK_U#Tv
zI3e%tLE|Ny0$3Mc%si)vSxxlqzdc7J8=0<%qaudv@X!2e>(B2EE_{09z0bF=ekdHr
z1D&UJxi*vpHh!Afe3pN@{pv?s7yi2Q?4Q7C?~CUKpFL$4Ac(EEpBr4dyz}!f2XB8g
zc>1HkXXgX74)YnedF5jv(IJ2RbLTg&y?^8F^E)5>Y;fTZTfhEz^U4d-WJ-R5l!e}7
zOW{yrNf$aGm`QN!dJ@#gf||UjR%YFgp+IH?WAa!r$c$uc?kSy;#GUvekJj1uU$Cec
zxZH|&H@cpauFM@mp7GAQmcO3$qHn*j?A^<qu)Px3CSmz!-2n?9lhf<9Mz0<@j-RY-
z)R0Amv0H*scuzy5%MG~_<@`n$uftwG8{}cAs}8WW;LQW?yMnc?rzm7ktk0rVcQ)v6
z%w_lp18&U`08ZzR&IeNg`!F%#bA3RK@%TzqJ9kRUPG+zPLrIw!=1r=Z^V94Afk1x0
z0jB$oTL>)!TF2d}3C5!zK6nz2O(LIs-p8veQz5Six7&;{p}CocN|X7!Xy%dkvG_hl
zT6IoHspgF*L{h(hrQC7rZ2>aTNp04Y!U`<x{)6bu^Y2lQk@2RzIz^_q#Z4xzgyn9G
zn|;rYn}=-1*_n2xCJ*2AV>$gyZ6V8O>{!UjG;Ev-I+_k#5@*wkxRjd@RrG5V{G@Qj
zsZ^~Pqcy`82A(bl4|h0Noa!6t7y=-718K>~Gr%c>n>rR&cHf&dzya?70VtlOqIt#@
zXZGs8hQgO~(G%jTCoyiI&-xm?;4H-_TI6*?gi=&mjF!OBgR_9Au3kH@O_mF<r^Ae|
z{N23;#Ke?7=Wm0O`^4@Z>+<?73B!oRW{N%-B0GW**Gzk?VW?eUJt+Awk~qYq3M&zj
z9GxV7B1iuxOlJQ?+5*+LUi&9rj1(n7S$8OqE||+yhM*Xt!#5gCmSD}DqzB4wH}T<X
zhb;`x{&<o!%MJisgRz**hvZmiG46K4PG6)Aa?wEWiGqcyl)<h=@TMCo$L&puD<<9P
zVcyyteqmMGB3s(FOyvVC&KZdmNMzKN&cW9tEf<FN@~rl`43XBccyM<x4qw3Ek%_)>
zFsIk}=LNF=+sXxQE;MA8{f*yXnH#>DqH`w3{OvZGFk!y{>Pp!L!!RDR0{W4#OMyFD
zQH&|K*giTr7r`kG@MoiB7iT*mQLfB8$HV6$--eB~u%8-f<jd}kN#Q^xA`@pZ$iDhy
z-C%ZEh}Y!bChHf3ywM~!ayNl46mONpdAD!?o7IqWt~GnW9-<pcL7X;AR|&?W)*E@~
zT~v2%r`M|#Z))q6i<@7*z5UrW?(qVa?^NC)2CMgEGh_mBU0vywVRFA)xw!z&S@D~X
zqcJ@QgSgK65_kInRb4idifUz_%+0h!#(Adt3<>wkAP$Nke!ON-5yhrHFT5`iar4U6
z!Nu1$zr09ajqIp7t>xjI^c;J7^>%EgiWP=wN`0?d-={738SDK4?R#FF=$q=#Xs}H;
zXf$MCf!I_{r|V5Om|W8cNLHms)dh<N5O2&PgBhUg06oeNMMh-Ue(Q=Ar*rR!Q5hZ7
zjkYT3R$)I?EsH2yRMHqsI(!~MWY#9Y0F7nPAUdvsc@e8TEpRy0tg0lV3FW_tnr)ax
zaY!0Q5T&)S9R(5Os4DAoYzoNABaJqBq*3<0%D-2%@Nx{gLeLcpdfE?NHE~xh+|wrX
zw28ZF;kKY>Ox!aT?gRY$j9Kb{S;vf3hbVQx4xtBxviKUPVevI|+2U*Hm&Mo6c#E&0
zWx135i$8CFcx`a$jjfBnzb$+njtseK=M@WEX+y@B41FOcLsuw-u22YFp%A)4A*3-g
zgH|4(HwQ$d<=i-aufMSK<$r!tq!f0sPFS~cc0vp_MKt!_NU<FnWWz@_gGTs>E}a-W
z9xfWx#Yc66lvJ|MDW;yGA&f%5GNl9>q~6u!yIPX+ch(q(tk(=|KeXV^K-^kYAw>}&
zl>oJ_J^VF^pl%_UCImHspauau!@9*8^t21XD^vQ|w>X4DKrAZ`v7Wn_Q1tn4;iSW$
zdtxyOt#HSyZd}mSjKH8F4=}y%nVs;w@0p?&yqu>Nyqc^gyqc;CJ~QCvjq}gkM#aVo
z`X9F-n<l5JJa_)4XQPT*O}UmrWOc@|IBUY13SqskZu$#lq-`WTmGTsXpO$7X#R4$d
z>XAEL7wzX&H4BaB({lP7kC6ci2u@QDYhpwy+K>kba*<Ep3Et^$-+=Tp$#G1;NKRP#
z9^@v*pCXo43!y%lVEokXWR5!#qXxVPY+|%+aZY5Qq^9gHkSe7-;`@qOxx+Bxt5O;#
z9>kPq4&v+YtXhg8VG%AbvwWGc0-I7z$nLY8?d`y=RUR}{gnNE@^Q*T=5)O-FC4-TI
z=BWp>+I>i><_WRAoR{R_7gg?igl)hdeu%v|5KSB~tvwGV-D91E?P~uu>Lhy3UX=nc
zI4Uu)A%O=+f(ib_NTit)*2?XuFSeBdWf<6#c2`ByXP-e0gkPHH0NH)IsP;pw@K(a_
z__dRi=cyI3SW7$-tCS9at1RFQJH9yP<2Q*>wbY+*Pkm>{u0e2*mf-AEDVWmE_W3cK
zI=SWbg8>{t?F>rTN*PbqlTFELEopBz+1jb>hN>pGS)PcLNZy>5iS!FMM@P0HtmM!U
zD+eMXoZdh^*bZs7zj~3Hvi;^S1~0vf(b<Q$M{A49YOY_;Am2oB4#U5}bsJo6#Qm|Z
z&h3xD=@KhpOaXP~G&kl#m*pdMzeeT^1E&FU6d*SO@IUzN%iuXARkXnePi?*Pw)LXK
z%Km2a+Dn;}X7k$ngG<kEU-*3I`KK7Y7~y0ycs7P-ukJkir=6?+p}&%v$)v9%tthIW
zOc?evT94f5cG9qD3N3>t)yXNNw--|M%t%Kt6u2@1Fw%!Y=vPLCt}O5?^S~7z()8MO
zwkGA%1zp=H+O%~2RK{8L_JJ_f5%D76=!TyZKh0^`G(97ORk&}Ye<3bM0?tB;GNRx?
z%gE%m(l{kRH&waJ6`DmmGL>Ojh6W&3T_cfAa2w$Gq%KEYtAEYBl-zE^He^ui!PQr{
zU;RkV88HRLttPkI*7d3U)?)2wFKd>Zp;R`pq0x!Bs^&rBdclaEZGQdR!N+gxeEk~?
zo&ntwGhO*tDaL8)x6+s{<uH};%o;m#cgAgp153Tkm_p7#8k4ALNf%Q9yG%e%yP`TF
zZ$EtoT)_VNnJ)8a)CU(n<!%O>SDx3^ZOU<a3bmxTwai0<RPWt@_!wD|GL5?aZa}06
zO&nxRKin*}JGj4JFT*EB<%*h`24ew;USR>???kh8DG;A4+UKhFd0P8CqkTTGkT;8b
zRhA%R*%V@+k44=z#6zSG9`{8f5h{xqqc%h?=FPTVA4FkOi}5o%AO8DKWJ7<#bD~`M
z^e19@`3dCQ<|`O{#<k%mSxium*cJd>1@o5$6tyN3xLaU5adG}Sk|))(mlMk|=6<%x
zZos5c8W0}d%Wi=Z-vm3nQbH)lgw#dGOu45MUrH}mKB$Fc-WV^N2I;!W1JmSYdu|0c
ztP^RUAJ1^+SD9d%hRH%x><y(t!-P9cI(d}3fg-J~KcwrZH0X52Hmh7z>3Y%D%pD|s
z7fIhl(sz&`IgXei^04ZOblruWc47Mn+t*<=h0Hj}(sVE5G)oYR;6=UiDME`H?EMOM
zF6@S_YGI;DX~xoiiAI@yTsOr!a4Ow|5gSJB#MXC6>tB8DM-->|w#2W$<?2hGdF$ET
zNY+&&n90ONi;MLl8T_mzgu5MFAi9;Vv)K+=<2PiC3sNj-mjcJpUw*=5XOOPI869lg
zK0ANo=O5AQ?LS_<@%mrJbdOiBL$22uclU!UA01DUPW?=Rx`Hvrc0T1*IOaPGPc;EC
zOcl~3f%a6VsFeZ>l6}FC0q&vpYSmO@h|n56CArCG{aZm~nohf?a@QuYXR38~LEP>x
zDEqw>L{M!k^S+P%#<sl@1h*r26TcCFS{;Yt60$W9^lWnhhh&IGYz&0Buq5dxw_zeK
zt+`K9$Ia4YqIcH6LJ|a-c>uE}2?10S_ZDFQddj~pn`A+>+y<x2Z`dSDnK>iu$e^!?
z5fXX^*!3so`D1w`Laz?!uS`KMPOLy}DaoE|@>d!=^ksq0NU4kja7>8#eSq+G6otXp
zmHpXW+3)Gfm|jp@<T)SkV%jQidL}iE3ABCvmBI5L!G*ft{cP*E@3Y-jAWY+$Sv*Y|
z(PVcmidyBz(#b_8C?=a>+KoDsX{R=MhQFW*8AXVJA%IfCxE?2}e6$`m+l?rloSJ?V
z?_#9om2R`)^(hNmaT7^C8HFj^&Pkg#eZ{CMx(U*q#OKDW8y$M|7j9jI#LS@)t@oTq
zH8|(LoOp9p{<Ig?J0QDGw1(EpP^r52u<D1+oA_CE7phF7Jy*OPEjZE2YXi)z0&Bs1
zP%ScDr;-tFf2w={D5R+5^_!d^u)@Ry_URn!6T_<FYRX}q3^uPkxAmXzZT%Xourxvb
zcKt&4-=_a|{kc8pe66=Q@~H3e$Ya$bj5^VXe)fy4``)!+uSb2z$n$}RAxE65XH|FX
z2XDRQ8~d5P8GA^u*xl9W@BQ5Gj5hNtY;F{EM!0j&Wk9EUdw5|)N#HO9{7m?mV)N>&
zKBhRZS4<JNcFz=h&KTH;T?&WWBP1k2ZVzkRq`1fx8(Sa$`{4QqTW|f>_SLU-CIL6L
zZgFq;gyHI?Nn8&b!&wDpuk@9JcH@^vP6U&B>-VxvBXEv%?E6L<l+QlqU>oETEdzn)
z8R-|Fg;?g!NLT-@yEnrODsT(-a-)p%IZCY&+|7PwsSE97tx%b&&XiD^RrZp&TGK|-
z9ieR%*0u_3n<O!`k8SfODpPyCq!^SNCOgjgladI&@CgW2EKAx{vWkr?sd9!ePg+g5
zq%EA|hG@T@^Y$}?FMsb5SYWKIOmzRPx<^v07I$jBM%dYf%%V2Hrem);L^Nh(VI^83
zG@;_{Xw9B1bV94~QE)^ivbwA-fWSnajnd%4TZ3y?w?DhKdHwq4)t3g>zu5ltLx{xj
zv$wZC{{7&&i(9{afAH2jTQ6STx%eKKl%M}-`_*fEG1DPxU9QT6#x3)*BY4nGl`H1M
zHa?u0`#Z{peIeMzLf_bicrz;izq~eEDQ8A>IUsm0Ou$gW26Pe}iYH++FW25YmY67n
zx-?=^MGBR9lqz?6BNWIb9;HuOB=do)k+q<`r*nvNLf!=W2P@nfD>$4WmTnIZj5PkH
zFxf+C@DDDy4P3Cx^(S9!I1F>=u0)2HKmF`^%T==P&?Vg3y4ur6TkpQSdF4E<XoKtL
z2Oqw$^<Q7J&B68`uCkSG=dYIsU;Sd|>$i5^dy&IXF2(0AZhr*-wqC_FNSEKIx1fT3
zc#VDDgXsXL4Z~JOypC~bs&e4)T$YugP)Kp2a<fRfmopZcICQe+v{Bh0j8^W4vD{l*
z1QBx=ZDsf><pb3Nb2q2|7c$9T+_lZZN1JMv7RQvgoxlEh>$MA8@4USibW0euqS2Io
zI?E|j5k_j#T=$gU1nMDM!Xp6+#%lS{fnvrm9V#C<Sj|0fkWpw5Uv*S`G<XHZJgNi@
z+!XsVLPdJPk*cbetDd^<n$D?hM7#&Rh!4+rQ19XRj<V@L0&^vUJ_aA2ATw2!uLC)g
z&tYFIhkGu$hDZz>hGPiI{>>}bwqE*haN%>2$G(=dmf~fRPl+!d7-#Ws*Iyi5y1aSq
z{jE1HZ@u>E_O)NY6S{C9p1|sJ`L~<b-`slciyO~gqQHs_BO_|G{qb`mRj{h35idoB
z%G4B7Z>X-V*FV4U+SfWrovB#;f&>^``+Vo?cL9w1s|ZX<(k?(SlA``}Ic#Imul}_C
z(q+~<R_Ml?uezmq8}&y-TDYOZ#xrabP4IdIv1IyLufbn6gxi$bYk)ZO@VyTQ?XU-t
zf8m;!<d@@(xXqzcdHIs!1j+bp{Iwat3&T;qJNV_7gI|8M_4d1ZLJ>w=trUI*Z&*fc
zdA*8JlMzEJgw)nb(Rbx!0cA+z;56j<v9K`q`AiJ)ukc19Bw;BO!M_9^7GMp~YMBFE
z7>#7>@_%f9_$#dyaVrK(TKqVMKI5Teq!pBcW#W*kGBEynZ}BT#q6zLM6v3?VTK8OM
ze4-VGZ`5T4ArJip5P!hn#!uoI{<sd#8A^laPv&$O&P4_ke`dgOb~51jGriJBk+bT2
z1g7SkH;R}WV`IQ_LzBb+kjN0zjoP||BR5K@tOS#^8^TA+59KstT*Vcv)Kc6@yNId;
z2|YBHfhdg-tEm|`8c`atR@5Po-qKQpPRNT9I&olJr&O=vk^3IH_ryc@o4Xi?jr_sg
zbcR*kvDnm8&g4%szLFK_Rwuu|5!#^bpI4Ne8xr~0+&M;_8aa7u!@`yUyPFeEov`6h
z^1@7Hu=DjBTmSVQ&37|v53lY>*1pu+P}NA>>@?XXh(DtIhi33FoL-s(H9eT~06`LY
z72ruL2<Ztia`reA0rdQ=e7(TLf&5~kO(Ak)4_$i=q*Rd+B-iNs-5Q+enz;v@6-2P(
zwzGK=6~<9QjF)5sti%%A*IwEB?YrKQ@a^>_`+>Cc#Rwx;YA#ze#__}#WwqaU_TtvB
zKP7I^78?s{>-o3fy5RX2H?Le|l6w2CzihqqKBU}z^&_56_pQI6uWuJ(&C*@CVDR!w
zgJ&*oUwfBrYY7(aA6<P*C=C7}Y2&=<<GI<vVU;1x;gc7)F1!r)dhl+O)O)sm_w3H)
zXCO4zS5FTv{O-nY{@|2<`=evR8H_i1^UBAx!xoy3Q;sGT-1ACLVGKoYBsS3%F7?Or
z^2fVT`Z)poQrX@pcA{n&W8mzYkrMx8NQsfe=!90~e!0%th3z$KERTR%Ts%Pom^n^{
z2g*0f^dy}K@{JW7{tVv6wP(#)`EJ1{x3$*=T~DK0vtmqRXJ<VZ20SaZ7FkaXcdt2W
zah+5m;_m4fydQ&;r+yIBLMCG{R#qLtaQ49w@f<4%L4X0&j&4v(I?*I6C^rxsSDk`*
zYNg8%*cWc>P;gtwF&*|x5d0IC_lFBiPEmF+rp!bgnpBzb15P5|lN6@flNUn|+D-Sn
ztzZSB-T&vlR=3mlB;H$zFeHgTo8e93?1pi}#K|X5#BbP(J7x{pJ#kxHby&YD&S`$4
zl}1cdQ@jrhX)1E(K#iK`cksjpydSf|iRX5Lb--#)Ii~t_%4_i?a0Q0KT-`@R2r#GL
z2?Z4N3W3d-A^6B}3l@Fk?=m}>-yJHP)2aJ-!!^Nyt#fYL0e?8tj5Ccs*t{p1_aG%~
zxfQK<%>oDxU(1kvOh;_L=Vi@!vANBVoCjH;H9B*dN@(|nvK=X={Y0gNE!aWTTm5Fb
zq6>CZyNSpE^+AB|k`@xuOLqt&k_Iqf-XXM0)8*`SBeW2F7bByZoKqVyt7mka()yqp
z9H2&64j?1~*Ds(rMk&vbki^LhydZHKn2$Fio*Tf6vxcvIShMDar!z_pitgB1jkzsO
z2r^m^+-a)`Bv){IWHX7)dBD17@}8JzkB||MXq18F`Zz4tUNU(@^vKm(uA>ZxaYsH}
zKh3tUmZ^!Sg8*T!)}extdG^sJno49UUhxpoVJ02=gq9|A@e9)~37xtaMKgK|YolBR
zPyIk&{v?kG5hW5Los0VJs@F4bb#8D`SC{W5$3#`-cF$bi7{U_4=|W3SlYvCi?oT5*
zBx$reOT1E@`|<W<*gnf@S@1>s!Mbp6h~yc1`VA&qPDP-x0VO4VE{^qGF{iGd>{j4^
zsP5>zHH>%Mfz3GTZtt-TDCJ>MW`Y1)0$Wg~LW1V$Wc5IpAEau~v1=eCtW>4&m^xK3
z%UIjdden%zU@vN)HQ~xYRx5{*8U+g$$Jl4v@vx~`G}F{$taawHtqGl8G~x+|SGDRz
z{@5R){|uh}uRxHhSvnYA+LG*Ost)=p!HH;!>#V6Lr=2;`$b@Z7G@l+RC(>CO%po&S
zk{z-sI<d1RgGYL#J;GHuh5)xl1Ru9FwbC9$%1#QTgZEByUX4>D4}%V+xx2NGY@Xb3
z*JH}mK+Awe*dePi5{rNex?ZlyaUp-t9Y1~gc+yBZXLztSLNkuHVkrc}_$*wa#J>xr
zV4STzwP=ww8lG2Yrb^YB!=>th1EtCW9j%Rrt#16&UbMCncM0eK1DZZis#Xw)0sOQV
z5>_Z@mSwM+A>%GAS*ac(kV=)8e7x6D72Aauqj;IWWpCi8Iz{Cc<MgMz#ZahvxKz38
zpjNOE*3PMZQjtd30+U?WXeO<?EDHUY((B}ufO5Ps^l&v!n9RanOdl@IOtV_`8at3}
z1zsLJP@1X2KPuVlH2P~vLKRlo)59~R%CuHtEv!dfQR`jo#R1ltgS^q0=CuP0hEBdI
zt@KJ#OJHUo{tA1;Ix{UwC!Me%dJ2UP>m`#;YpIc}MIBLjWs1F?xr@={kSyOy<Hk8j
zEZ~f)j-wMd)1*axWAvIT$%gmCRt8Jd!_GOK%9ZK6s0_SN<?u1RQstJDMm=hEh@3=9
z_ES;impfsfhJlq7KL&<Q6p0$9By;dL`9;sIgy&+an7uhX%@7<?#hc+Wn_M9=$X%*m
zs(jLjS0h>f;R9HHMnl1dtF<h-x-v7Rk2C?)R$}V=f$0)V!>Jinyc5+`?N-SY*&b0(
zvxc*xm1<QLO`}jYtipJ^a+on8{5Eg^pNWw>R4pB>m}7_U#Q?B=9l8ttxhMpobr5>Z
z<mgX(Nt|-ts7@VZKNbpY9x`@hKyvt_sNH57ujE$X=0jRx_C7t=SFBgLtD>fOJ#I?g
z0eK*PWNCOG`QEd4Nqt#OBba?NGbYc2fpf7FlTfN0I$UCGJI#lVO+q$JHR%fT1;ns6
zgpfHY?aCp7qKxtqL$9`y#-S)ZW!4Q@uF}P%lgMexf3WQGN|JU}<uJo-`45v$wybhM
z%o$@YRx2R2nCPi$<pe!JJc}PJsm;OaVVza+O+RWdxkQwj#-@l#B1gc)NM%=&R@ARY
zYsPXi!yCJjbamdqq0^;d+^WZ6i_aif5bmnNKP(IHmXUggu=CS;xz(i8SHq^&D5V9q
z1(`xC*9cc}mq#;_0ASRysCdaZDqT^+cM8`)4aHhZP1-7OTvd!sgK0KwwTqXQ_@oz1
zrL%McvYSic52UUfq?RHIc&k>BnJJgz1i~eDwK}8Adj3{2i5gUF2mDl~EL4JFU`mT0
z4V4m5tfuM1ILmAVQ4Ruw0S>dly=&SkuSrROIjBiVdasE|;B+>TD~Ie}XfmdP+QmU_
zWD!7@la&fAb4-&s;50^;l@^!)=|)jQjo?Alf~wW3g-NG9=hEtoK+}xWI&E~Nsn#ma
zIjR?}s3nI|u(v3wErf<Nf;XKcX^9DJtWnLV9`~A-wm4NKhCRgVB_KmX)A^ZRYis1;
zgQdd<6cf<<cCXWJ5PlFVOcSkE?y`~S0}WgNi&SM=M`J98l`1F$oGUF%ZP;3A5)XOd
zz>JQ|SoRK8an0i^yN-%hKC#N*#b96o7OjfwEqy*$VW6>l3QOGTLg>b(RH?aC;0V%g
zzmuefR$Z;?^i66tI2$+A?!%n8t#CDbEHPIxV8lZjTQiux)cV9?zyt)-)_I|6QuB3o
zLaj*``ctADdtUE^i^M8yD4EW!E7q1abx<x`^g_sb_U_<aIx8v$!bJ@kgb!CcY((a=
z#|FHLl0ZX%P*PYip<F${h;*Q;a2Nw#Idq^zcn+I5jPXV$h0zpiVLNPx{g4s7t@bj&
z5*oeRkd3q5TUt`9H;fpcjqRw@6RRDt(LueWE-LQ=j^u3CZuE$KfcFl99#PRsC2MtU
zJ8|eB${D$$Xfuz7QC~~6;gDK6<Ho+)SP7L>S4%rdKa>LSAg$}1XM^!Htk)ZnLcqua
zD!n$@b$QR*BZfK+TXj`=6_%QVGbMeKsmq9&gQ$=l=3~QNr7KM6s<r!oIlO5cwOX`S
zU_@kV(Tr$w+*l>80LU(XWI4~;GA)W45{bRJ%aV`Qx>KbN&&+7W)pBFJ<>g!YBBJRl
z9vMgbO;uE1s19)*>M$?f<qAZFKhyQ3ZbbUWl&L|2`J>z5o8E(@$yc<o=_bvvn~26T
zQF(}qDP!ib0YwI#(ndyYFL1z6HRF}8twdp0%1#t+8ZTK2yru}@o3xpnGi@2VF6XY$
zoHq1AlO{82B}Su<mir-WwvVUjJ^gM}h>O7!l$8sfLJ%xSH_n7!Fcp-`0jq!#XvM;j
z3j<KHVsqT(FKVVxY7z30hTY)!N+)T8qd=4fg;mH}%BrPUR%IgyIJlGX+vIU@6e?oh
z;D7cVJr<qz9&0T(hBkQm;M6zMU{(?P2LER^7!z_7mYfDJ!Si6Mj18`or;K`*w0f3U
zJ>pvXl37PP?4%K^<3y`lNV^?T2P7Cxq=z6lT}jI+gAxh4@3;e!W0t{YbgZktKv#0~
zdHbhv&m9VbbFc-}MQp$%I2(gQ`hf$!fO>9O-gLOR1$Rz-z0=TB|A=(AzlT(@w~Kk5
z^A@xER!h?ddeNEW)be71a^sbP72OkI#rCvZ0awwAa}G_gM@?726}*gQ*!2nS&fuVZ
zCrAWps|5RlLK7|$H1Q?@0^7&rD|pu+14GpZJ<Xu2qtsWZPENBgD@D6rS-_-VBkHst
z!ej74SPB+PLEAd$4xxfYNUj4Y+h*xB>N3)Yl>3Nr-!h^IokVV(Ih7%3c}`^oTAb4|
z0r}GP7}+CLRiQssoRucdN)hKv4`(F@!jxrT$j4J-aiDwZ2ZbuIDjuh(L#|_;j&fB}
z)2-J%lVI@zVmb}8vcp==z_rAUbRH=V*+P*xl};9oI*cgff(j;xsz4ucr>UxEaC)mX
z&w_mN$)LaymQy&WC=~g`Gmo(336{W=7eP}b*vbxg3K3M{%fn0dp?t3!Hzu(XGxHJ(
zhio#VE0TDdAMTr%1Xksrc$iL=$u7jK^ad4|BSl3mBqf3RB%&BTUP*~#b&@0qr0Cnf
z2>E-!^}mC$6p;=1>v{EYe=t5iH)ftRhmA%+dQh8f_DYBb;)*xo5M0L>dtH%t{IOmN
zHw75sA!AUj7PY%@Jxa^*r&m_)L~YnU7AAv9Hs#01i{)-|5>7RahipKK>dFb8ioprz
zTGFXAr2t}^Yo}sGxP5f4*EZH2IAJtT)Vxzb($IuG%P=fxM~1oc(Yd3_U)baEop7;+
zaoOQRr8*s?eYRe%o699%AgB16_?>b4BAd2!0>q4cJc{9uS1B8bT++*FZ;|~fRElhI
zKgcyNxD8dPM`5d3oDEoy;#xPtc=f3qHRD!CfuTJLA&1yn&ORPtAJ><bmWn>#b|KRx
zeW%2~ipRa3PbEIsY!{UV4}}kvbCPD;_#Ko5Xzd-)Lb%;_^e7PON%!gDqNk{Yv5Ig!
zIVH>j#o)*hFMP$!Vs8>;L|)6{w~ULT7TX;9yR*%=mvhAMF&^Pu!uF@RV8lu;j0E|6
zu)vVK6nI|`#u#o0tUtU|7%z;oVUC=~#c^#_Vx_=2W1<41$zb;f733$yUbaKkQj0F)
zY3#(tGHDmB;2W^urzTv2__0kB0smGkmQ%L$bPMC9aSKJ*Xs_@n8OWyzEM3VOTOQdQ
zSYn^MY-ib9UQyhUuEpKjN>IQy+RTW>#(}Wov+l@Jeh$`TF{}3Zgz?QWweKRApP4Z*
z2=BJJMdOWYCvB#8%>g|gOIKhs8ZWol@;nO%0k&(|_hG4bh-A=WWKvB3JxDQhZqp?Y
zwNa;bL*lZLVJo|Ut!BaEm^p7e{ojQo$dd+Y3|G>|x166j?QoCf<7t&SL;nN)szP%(
zR34RX2T{M>6XWkh9iG&2c5GP7H*{5bI3YxFcQa{k7@^~N@1c&o9i;%!_KS*^@QFyH
z`%<pJ1;2uBa{@S!F~L89c@pm7<1hYg5`NK=MfOLrUwG)@GxteF>sYPEHa~FXy_=vf
zBHOP7X*;R~>10D}z>-!2c6tJVGRdX1Pg?`CYHOTr(h^APikp!})Xg^Hi3m65JjDJO
zDQ_Bnn5qubgcKqT)c?w0T5f=$iHE6~W#9I*nkMjRsuikWA&RO2RxP>F=DTb?6Nb(>
zO70qVPOq&GwU|kmnPe>8P1&0%12#{8eKhuZUPYi|=6(-4N`ex}J-y&{A7((KOqHQi
zfzKsvDnOAcJTB;y0JVPoK}JGJFfrVJ4`s)g0=8zfkOO~;k1yqsVs8{r+%H~LoLBdV
zS5^5+rLcK0Zt0ibPnClEOTj&)9I<z0ex)y2f@W#OLYV@p8LnH!*!JCD3<C*(%Q+OE
zz{;`2z4#pZP1hl0fs-IM5PCmCgJ7tto;{#Go|YDx2Tq^FTd9q1s*$lGM}arO4q*3y
z3QqxlPTOgREpK?hbkZL_2Z~Z9lV;;bbh0<fSCLMVT*b_A3s~Y5iCJFY6p-s6h}MF@
zS1lGX={);3=N7-;D1QHLi{E1uzh_8sgOsOmK%k^e%?AWE?qN8omAQNR`*SfBxQy8^
z=*4l~lZ*47e4JGS=lufbsmxm$5BQ=~JfNMQc*`7h!znzVoufD^1FpMF4ndNt2jHaR
zAk!93mx7aex*;JgJ$DsQ%C>vyiU2D5Bq=}*wP5?wNj0L?$h-~Ai`<mKx)CpNi*boC
z>)HoCCnL0G*w*dJ96;~>5?lHUXaPb|fJdv-?AQMNzMvLZr*BxLRhgkb8!rf3FaO4a
zt@9Q?sY@VNY4yko7ki-q$I}z~Q&>`|ef!PFL+aBh1IY3GdwBok;*--0i5iNGM77M8
zIswRtjpC)gY<x-LGPDM!Z;>g3sam*?S1DgdVCTKy+HUedw9dKlR{2$gr)3Ov<VaAR
zLCGs=2&oj0fW6XqTEVA>@!@{?lxe7N>~I=8R$yiLSyjbDp9jM>U+dW-ix|qm_c0k3
zQ^-R)1q~>FU&^%b8iax%xFAkho7-%uX3BL`4;K5RyW)vm*(WhtkR1*q9Q_b$JjQi&
z5r=6Cb@xiyqtKaZ+fhD_X@F52n3jSyQ?vMqVNS-nq}N@5j<;E>edV%r#kIK6z%wT%
zXeWD&F_z*ML%{|#Zo#Ebh%&VtHp(WCEHP@HWK=9z-RDfrb}_6yhMHO6ox9@>4kE0O
zdbap|Ha=;Owx1uF7m4PF=&lJ~T!sJbBR+B0&_;bH=fzZae9(4K(NgyWm|TUf$;LbB
z7<UfwS}Qn;8gR8JZa83ojZV$D3{KC=3KlGE7M!X<1FWx#+mk54Ii@-D^xW9^Xf6S=
zF_`9B)k#^eS4DVJdF(zMPsPMjaqv_}!&5c!R2@9iIv(2CdJ#>Vh^8eXpMQW5w{?&R
zwXh4fcKJPVm;h|Hok_%?h#BGB{M-vkLE>CV2&xosEb7pUNz#bI*8E1W#Afruy)I1P
zd&#szac;_nEGQ7(Cn+Ci5iWqk7Db566H6MN5|qsTBT!<|*`Qo5mlXT)?}}mh1LRZu
zyivM21&a~<yOnGqq?-S&kVW50siQ6Cy6h=t2p<Dn6G6q{GRRaV=md!?MUrY~O{4A2
z3aZjB(PYS}-J;15Q+_nNmr@eVg2G73qG62^?vRrC$5h}w>*S1PD{WECyV+{)%8w?5
zKAY9&l66*%6P(ABaCBo{^DtT4)a5Kq`MKS0?U+nlVYB!D(1w$a)`GQ_h@!=ny#-P%
zP#G1xkq>UE=3Iu;H}HW$Z4Yw|bD_RlVaUMPRC?g_NwMWzDFsXh%1vj@ox!^O(opzy
zcx5}(HGcA#<U4ebihS#2C>Z2-yrRcNPd#NS?g^3+OTFPKQ+3NUih3MKXXB-g1E?P*
zK6iGt!LkRP&UA6$zsXTP2Gxpj#y0F`l!1)YaF2zh#zl^!Pf;~<Lw2?!P}SaouuY0k
zXwF4&aiugpU7DFGO_gUBe4~Nkf~Xd_b(*fiZ>B_e2f$Qm3MZ_6O-Xb^ZheZ@R!8+u
zw6laQFf<C;1yCHs7muHX-@`+5@DpWW9_<gtOAvffKC5`1RTs1r?ijNXywS*lz#5|-
zA)V|;jd0u<dvq_Hx9gc+@VFNvD%PaJxUk}I-^AiL3iUC4wJ(sGSzhWy5d}WtdS~H@
zvHykaI!jzz8v9>hIh#fM8T*0;iCMBsu&+YXo|QT`f2j2FSxY|$j97wJ5B9aG!8Ua`
zDMe?MK$VYi+Rf^7kiC)&GOKuHY@?_xQ9MLsgpnpvEnzlAOXX7>iG>^X(_q<P6r+hE
z<2#YXL-#)B$F}!J-7eD~L|{!VWQ-Ume8WS<Y`6$cI|!`cP8tFgooB-hawGOS?J57`
zivKYkW@ZL!lg)+uDxEgQ;@~<{o2}+;w&sc`!e+k<Z7^iEr_h(3M*!Z>zI)p)B!<;?
z`FQlUE9;xT?c9i!-*(a7qx=-M4Odw*nvRU(v|KzL-f*jgaNf3yFy_2BZf151OWVCd
zOHhdyHDZNf{I2#Cmy$|~5vUWX*=PEOfP6mVH&_JFK<i@|_6Ax=zc}gL(+ZDmo3|QI
z$64dqBFd0WEf^ixZA&HWV+8vc!B*KP7g%-e>|_4k`Td=ys08mdeG;Re@7c8B&}9Py
z<gziE0$XXC^cWryx|aQ_z*C-yfg4TXEHz<}%?QFeGHF(eQoKhNt|oCkh&mlcgB7q`
zg5eRhX4NrJoAAICYlK3q4$Th9mT|^*z%x@+zmL`6?MY-e_+*S1e_fHUD?Wb2(%=)s
zL9OUn-#_uA2k#3WO1i;X(m97?3IUJn$K*W^>A0Id(t$h2z4Ro|h_CpF{-{81hFG>s
zcmmBG=fS($9MH^0rg|LAyH(^K`a;)Y^fb&sZg4v92=Tk9$j9@tS$K};ce@iZfRfV!
zHki<}+WJ_og^fmmzbWpXk;Tb;*s3>x%N`0J(l)BvT!*HDItEHJeKc6aH`{eKvngPR
zxQuA@amreQj0b(oq92JkPJ!VkQJw+bwe)cs$An2S%TG>$sAjS+!`$HfGRME-K@}O#
zEBQ;9TCKU&)LyPrM0GlBMmf?&$Ojxs0Pq}sY4ORe#m|vOBG9A|HJLjIGiv!Tw%W~t
zBzgqQC7OZfvQK0=6lzV$pKaO8sc&B0_LWrYDX^&4Szzi6p3d&`D2(iIh2revVYdku
zj#F%{)7Ew8<ZpM%o_JdIKArYX5x?%&t@<BN->L#xqmHwFpRiR)N(CVF$twGqW_xe;
zkA3V;8=B?VH?CTG+wHDqmcCh~U(@(Yb|veI$!N3Z@2rK6NQg{Lv?@PM^H1KgeqxQR
zv*yn-V$i+V%KE3t9!|B~4YGeMGN+I}X;!DeM$@j!4YSOLhi@zR7A~8&E5=)~)rRD(
ze7{`<-wlS3{fDsDnC%Y=6VnFtL;$5(i3w4nYL!@p_z1Xpuh<bIl2(LAXa&P!L7EE6
zk(2Q`@zNhe8s9k+$cq8I!+kgMIvBS1tfk!SW)5;%l2UA|xl}jkf_Yv{G7NDyFNUrc
zx7UqM*?CMyVs5|CJ%@z{uyH!cABwvG+!NRZsTd$t9|$_Aj~Pjgz>*JkNBB^FEQwoq
z(@e8I%0{!zC=Mf&{SZ$Xvqz=If)S?OAM%4)32;_^(vD;o^x(rHzKO;p3KPTz7hmvB
z!QG6>X9JskI}w|qXF6f+9Hur5xka$VQ)ID4u0^l!Wgkkab!;YglJ-L(WR+uVR*T4%
zXoO>5MzbF1R~&2kQF^52b?Sno7Dz9RPPgF}8ic;)+5IqO7(N`=&UL%cPTEP^w42ki
zg>a~RyExmL-QNR4K|Sn-XlRzzU~W7{S7WfIjFF+eHqsu)28<=zC<zQj2U@vvNCi)O
zON{TPTKqmMvl?}}Y)(Onflhlx+}-E)1=Kps7Tul2ma{Uulcec`;krt72cdY9PFMCl
z2vhd27Pac4Qbqif0Tu+aVaN~9ULq`aDGk*ke&C}Zvl(a&FeolZ8>dBAZ{H(iT}lH?
z30GT@rDV6xElC(9Hd)CZ3K#vXVhErY63J5B`RikeV~qv^-uKfUGLYJw`DC@|q9d?X
z^GRN-N@F4gWDC>?XJ#ijmO_3i?jjMh(c@<%Wc%vUBP{@g?K@)B#=EHFKfV&x&cS4p
zHAK)|NIx01gPQX;H0)I5B2zG!6>fxU8{$=Rvyo(%+hWrW1Cd4c*?4#-=I2%MqO+vB
z17+>FHjETEKQz+@=(IS~=|iSYoSkgy3c8{x(R7m3^O{jML(x>39?`e*3lCKkGIZ){
z=O3^=WW&C1@fV}3pxh0nC8gXvc_TSz+tMr#&4$MFH1~+(O|3!ljlL9duF(f_1P3W&
zE#_64vPOxSq|pZpFpVI(&zV-dyg3c1yv8}5VV#W<w>Qg%!8T5|SWbfx?W@X~rr|3B
z+4j+6iCH|<$4z^3-1gnD$BeeD65S})8hhS~u9F5)Q2K&6H5B?t(N7T>BL-tFfk_$C
zaIjg1Sz2f%W0Nv%M^QcKwNV&~GV;VUXg9+CVhHjpWxC5xdr_;_H(2NUJe}~=ocs6@
znOIeO%d-QEuWQ<>qCvGQ+Gp*yS9@A>uE-h<+#t|R$g}c_?9_t8`YIW+N>U-IYaS9x
z^E^b@VYI|>t7>7;Va_d8Cg9JxrRs$EQ|omgAdmQZZfROCu>@EdIL;{c4u97Z{a7Yx
znXw~O%4U(>i}HqWg;Bc_bB;ZP5s7OL_f)?y^icy3hQLFAYSc8kOXhHA+?7%YY+mpj
zr<}$#uXyN$3CA#DiwVMWDHHDysN%i5%_t^3A+@~Cr~ol!hAxhZp53G9Ah9X$?@^Ry
z_<3R?%eJX>l(PuA0FJ6{f49Y-MYbI|H@aQZA_ptnX!HX}MG8~7o?r?Uiy)#yk|6lN
zAVhUk0cuc45>`-2*Wd6-wjJ1|)zRBPDu35u<VWbfF5Il?<`Hmi`eYPBC?)3I{sJ#9
zu&Nz86is^wM_}Jm&5jh1F>q^WP2#QfRm=2etjmWF8X`BPb~D-)U2h<4R?MC$2ZDOU
zwq*2eHjo2jm#w;Gj~Zjgkmyrd;@a=xnjV5{IvZDYVa}sTWa}*y0VChg?iy=NtKk~^
z7u+d-;YV-5Wz(BT=><7Qy`vj-bM#udN1DqxxXf3U3?+P*#JVMd3DZ}}3O1D!Zbomb
zW0M;t(1=_c4W%-REVwL^4=dBVx>36Tcg*un$UN>&oHT2rx9=v#=$3|ORO)*J8g;Y$
zZ}>#;PcmV|%kJrJ&pUEA8~Gw49*Ng2=~}Xd7>K&k|Bb>S9$6IJ5{drb5C<cYXs?8Y
z>npdH4fqyK{|)`3RU>Zmu*P`0pk>*{M$HD!HeSn!xfIPBMojHplC<@*@Lj#Fv;AFP
ze~k~+d%n$`6(96B^(gIjlK!l5>|q+DG5aKKD<QNYecGp;NEjaNtlMRAYQcehM_mAC
zxYl~p1$#ZWGcz)id;12bwdbPd1`<+#@qNBe-r#c5|1K5p=zf%Fi)J^F@)bvhBP;QO
zX5LF2;gqMi)E<)$=R9w{nV~qrn3VYI$tR7&5CV_~Py7P|GF;X5isT7YYQvu9uo^H7
z)A6JyY&hB*<T3Xt<DQe05>?*)rZ=4T{4b#z?F~#RL1g8QFB5-isjPQC`D**iPX^C_
zwEgO}!P9@f@#-goD<8@{*UpJP927{ft=B)l@%mr>cKyY{#n(2!ytwto<!0&>6+8uk
zBUNR$-~7ekvv;=6e>gaQonbf^^(Rnx?7a8U_8+cFEW&qSC|jH9w!suPtML||Z`>I)
zQwBgwcxs!wBv<K7=5bCD0ub&-If$fH8Q+vw!t~*_)+6k5)amvMQg!gh>1cK1mTT#B
zaZ}UI3T$4_FB`^l)Gy6mjP7wgLv-thIQmQ}=yOg}iu|gIJeIJpZdq-4ymK;HE{uyN
zwK?GeI5f|xBAa~vwGVo|M7+$jfhphn;0&B>5zjK1<#-jHyyI?+SD-Vf#R}fXB#Rf}
z39B#};ka27Ysx^1$2-v0eLf>b)_~KQ#}k?A8ep6arn2=peiPR5R`C|tDDKX#G-_+9
zmEG8<Z}0}<7%5C+S<P|++yDpjg|%c$#jU?y8$ACzl8RfGFKu2q&qdZ-@9cc~^TD%U
zZoT%YBk9y~2VN>*^S@OwR_}r0Ijb4h1!kQMoaKS2DM9CQdrmHk5Kv~;lW98hOv+ew
zvOLG#^$E^@v9f}9Xb2bq>c%mjXeflFYkp%brP@Yns_x#*+Zv~j;M=U$^3mA0Pe)~<
zKy~0aAIK~`m~JS-DAf%<v#eG+8k18DdTp1oXr`$uGH!xWR!r?>&f~Kt-rbVlr$7Ru
zgT7!;uj_y6Oz6S&^Memx*m~~6o%dd(Y3)p39$G}r;<KcDF9=BShstkXe}#P@QNR?K
zoy#BWeE72`zQ^?WbJ<EbVcc-)mg=>B8hxwM0}o(yrV$QWw)d4WSZUN);^S$KqEC}m
z=YVSOqbv1J;B$dvV!|~C?~`x+!TTFaWn(@RviFr%^WeDQIPRBn)j55#c(pnmU{91g
z$2EhtzqXH^yDqYZWH{V;VMU|WI+^8-mzO&LJwjM}yb7l&GH3+?SXVKS!@Ph0+*pQk
zMu(8$66~+SdYz8vB*Xi4Bxr#I$<&h!s4~Ni6wYYshTA^DOBiiHXDQpXVfatg>wGbn
zx<Qc8c{4f_04C$KNYvu<-$@$vhg;v*&JY2x%-4UjJ@(sC59+0PLssQLdxp*@$Z6W@
z%1O=&Y|eG95EJ*F1`N?S=Q0N43>@($ZKhSmkCTrEhLl^08f_dA47}cje1S0yQLo(w
zHf*;Wan0mEh7AB#<7iE!Lh3|IOl^QvOzbzfdvqK95^P8zagp>2;X&+lM8FuVR3~b)
z$q&J{dtFF~w1P~t0!NGW^4MtdQZ2?lS-C4sc<{5gw?6*8cgZwXt+lXIKa-pUW<CL-
zK~~W>M)Q<ej38Y-o7hR)TBX1;r?}F<WpC0oGlwZ~taKfc&hyrU&(}Ie(GqnrtyD!<
zP-gZ+8}bK7Ad@9H#Z0y~;Fa7121O6J5-NosWq0$*zYW72=_rAIRxwOT*FN9*`d!kx
z*uIG@MMKO=XhhO1NH@D_B4e&5=VCJhi)nsSZooIOH{8DV%GPh+l^esnE#cxV_lr$u
z&8AgbwA}#BC$346FUpG}ivqjnc1X_54ggCXHCxZP6rQF-HbcHyy@BRT+;6lyn1ly!
z^kZP00Fp7MOgcxc)wq+inh+vDbBJAwTlHj(jO{XDj<mNEJ{f<VfXnr0HLgXE#OqPx
z6!ZrSycL>a%G}O0x}|ve#<e$gKKa9qr!O+bzwzD|X#9@W+exRJ27)XENhbPUcZG?a
ze~wzL#f9(T?}@E<ULXAVQ@AL>zLnYjVTsMO?=3gOxKXYp%_4<b;nmio#oqGP>+cV~
ze*MPz=UA10yZ$CylWHsXblBkDw~mSNlGf&xtFU+8yz;`<+s|#ib^(e)lG)8G7q?%1
zck9B-gy*$Sw=RAH_S;Lp99;SN_NyNO9C&REu0J)na%JoJw+7E%h0V>UKi|3h8h;OW
zLbhJ|aB$)C!KF`kzIw$4AtOIl@nBNt&TcSdY>?wt7z{qUH2C7R&FgOrUi>u&wJ1Ih
zL&FEXkt`c(3k)7G1Vy2jb?8?leMKC(e-7A(iO(MJOzKV@##nd`bsvO#C`iDw=N8=k
zCUAy4kW`I2x~ENoLmRf>mKmxMnuD}MgDM_;EYJB)iqzz7#_O?=Jdmc)b4;Y4-2jNw
zA4gu`p~FyVA;jI$4NcI5Oz~{=4H2TP<PZzfKIwoaS!W$%f^57Kvs&w2@n$GFwyq<C
z>M&se#$oyZ37#X!^QD<|6Fl%Jk>luiSY9mG#><(i(^)u^S_uASCBn2RpbWqvm0F~4
ze%Sy~6gJxoR<~e84Nk+TFrIe%jcB|?#;c-j=P1J|N})0}HB}0pSf33lQyYN`1gnd>
zuv2^jw>whbfVaVhTMGAgg`zROyjl7R0Ys)FLFc%JAM$zBzSi>Tl@K|=x`F{PQNwH8
zc)TN3%10mXm@b6S2%i=R&%vdy+eHf?d=&}g%Hx(kCQJ=*q}!Mqb2q%Q?Li8S_o;8H
zUwX}WhY`<`;pKSVb<Pq`rlSfgMHg&tnR_yMq?NT{+s)|<Cj<OCYjh-DSQr*ZKdTM$
z>=yuT%GpR_(1*uL9<h&r>;}-OmD8qiVHyhl_qg+NKMsTE@%aCS^Cn1y8?7@92m+h8
zSeqgc_JI!%o6m7Q&uZhkxq2oI2~;T?*w;Bf7<bMPvc@>J*KGpQmx9b51>5Xk6OmP2
zkHL;+GP}OEsiP-T=mZ6iPdr69l8y$r-v+8Ks-)IzNFj{=PXy3+VAJ&zywcItMX+Zs
zLeyiJ>b0mKl3B_ZB?(hB_hlPC`tZw1vWR&XObUj`wuOP&fiD3Dk3QaU+0(Rl$)VHg
z%(;8bfigD*--v-gE+`{g3UszM6$jthgc^-oIh>GK;B*3-Z8g!i@3L#QjO(Lp%Z{^c
z1(F8uE>M;TVtC|Z5eLhoQ=G;t4=^oyX!26U+0eksEd)<@4dOe}2#LbVsDO((<NIC<
z@5A(yUU06(wC6Rjp~1JX1KHtJ4&Q8#BlE4W51fTf`uu?@w$$OJUM3P9PZO!3@nf6$
zad52)JL3zPSkVM9Kji>uM?k__n+Kzt&lds+eg-5nWe8qKvX6zuv~4z{dW?obx=_p4
zqE)&$48()kp7NX1!exM7mu-EO>wK~fsg5y~HA!P7(C*ZA!83_Cedo;*u(QG03ZzF=
zRAMY>>itlKspt7BNA;u>pvsBV5H-MPG9?o-N8*4m`NqGl#cV#*dW(4Ril26j(srzB
zHh99;IvK)xcV#wUjAXpxHXd0Vn&>MI7YZTAO;jH@%kP46m8mKI-?-@6_)vOI8s_VV
z?|nEprAuchDDHeon#_7E{pd(RR92@)f-C(|8I1dkKxz}0jihKtBjLWYSZC4AgUruD
zOh-ql69_LzEN$oil-_f$P|ayD@4TnInnSUe+~2M6Gt--Hxe!8o)A*5FJ(S#gLQ&bA
zA+13JY))fL6Rhz2VK3N39kDT<ChW8Az9S(%jbfXvo$j(}`9~OfiGIF9+eq0$rpH3A
z@WMEo=X7rC;YdsGJ0`Ukd8)*9R$MC>Uba?{Mu>~AUY7N}i>FPrk60101FZAid?ktJ
zs<P6c*ZA>&j=Ch{G=qljTCg&Y{<Dt#C7VF%li>&d1{EJlw3gDbAJ1mXD2hQPAYm4%
zotEx~)`^miOk~{}hn|g#af#NWTCZyj4C_%Vk(Ww2;q9|KUx$Zv*5Xv{h#W!+$iXD{
zfx3CQ8BaCCR$uMp7&&m6(VLF?hr)&z*l8OZb5#ViMSdKat0X%-GE8H3hMsnL@Sp2+
z$cM=5(c<w2ax9bWPQ0qS*m$gb^W)=L+A0MRo`)%Os|xL?%IVGOcdi^7UC-N7b#6C}
z`k$b{nYx+NBiD*aOyigS*5)-?e2k;9eD;JH5zI=OFP1Y8Tf(EsYirSLS+*Bb>z3Wq
zshek8=ykp?+vS_I1ez|OBT&5l7CE$2q!1PU%6OaW+T*fT_Vr4z;NMNZ_6Or-@G@`F
zZR%F$4JYI;t&7=EdYenRe%RS>kvnewj%Us-GsR+jsOF6Z&t+czlB@^bTf6c3mWr8P
zPacPWwCQ#`K|Ss;9uezmH()F)TjDE(roR$E^APUb3=3spQ3ltXq$6z`cW0QpJyw6y
ziHx-k=S#_;+%5)&mT|P{W6GU=Bg(i{*Wp(YOle>bO^WvPh0&mPG3=_lbm3(;VT8wQ
z^Su&XN8Q^Dni3juv8kU;=?VZIPLVp#Q!U*M>q5Y<3up}PDU9=qc1du$Kb30&)r@a=
z+?ade?mprw?=8D%y~}`7=LpX}d)*iT`b;NmrI?m!!~*w$Rcfi%*pMf=ys5@9Zqmkc
zXJE|7Qnq#I^4wsvu#Y9m7&R*=>{5VbiBO`ljMv(MtqWl5YT!+D<>!N^f4=>f-<`PE
zI$M^BOYC#v7>?usBYa{*yxfcHpi094@{aosi*>^`*0}xIwZS_th-ZRiGP>iCmh?f5
z8RwE_yp&PL;N^>hk6*XzXo)a_`E|7LV(PdD`M;jR@ec-{ytDb$3xmsF?0oj#->$#7
zdHv17+aF2s$K9DOd@7C;IQ-_7j|VTmwDatr2G4)A^WQHF&R@6j#*DkeRxOeldBZei
z+#*t9hzcNFUz#R0*kRPkre_>nu-@US%ei*angDk|h`&kSfdg5K4i<y+2AOn$VzVe1
zJY;|CtHGDQ-+JTn;N=enUw^s%+WSBk@|oFs{d0OmK-+KrV*A<~gA1Q;UVDFV>G{p8
zFKk}>eCNXt2A6&*uz@2ICD5yP!ZnQ9$Mj*e0%JT$j4H*6LCyiAb)1k|U01RH`Qy5t
zE!Cg^pSkp=<e66=ZC-t8=ih%ec<xWEmpgyGJoxGt1ysF@j2v6fo!@%<x#0dz(rX8U
zXP%ZIjCqJ6;MDi?FBv=S{Qf_7zW&YTl|K;xp_E>Mm*1zy3~>9}hg;8m4d4vq*-ONd
z;5~QgjjfBn&mZLFPS{?FYm<+#RYCPWjiO+s+ilNIPOh!3mDi@rNoRTT%&Ez09W+)Z
z5+}a{-eheyEEAn*S=$}?olF22s>os;VjA{8Q6_(M_&B5pnmG{ncH*V3;E+ro$@)6{
z<4)ttjbt%w1Zg|0McF0#@GrXrcPs2*<}$Se)YsXr#MqLgY|_?NxQ9LC@#SR@-LCNh
ztRpK)Cw`n!K5UH7I_qw|@1~%KKc2``gpESf`f;s~gv&bZZVF3RSFB>D!FpfQ?v`5u
zJdY|OC|<<~jb~~<&9gHLkeIH%KBql9K+pP`#g7OZ)siOLdq#4Bb&QI1LQWb{=5gQy
zNpenDwR-KkvU1RP)0-dQ3(FbP^>syDWMcB5!WScAA}|V)t0LqIOg$eGv+o4r(8g=r
z$@9JyFE{w6mWc>+&F+MZ>&)AbwZ)QvrOtWmNlBLpc3~3}1Y$b#KmSn2<R+>UoCmQb
z(T_)%A29Wye44UZ5SfqIOk0jy<G%b#NxP4;-V79LT*oeEM4VA!6d2Wc0zU5s$!}Y5
z{Anbbj4S9H8O}Tun_YykpUZ-(D5%QKr4-T|XocI!v>!eY*CTyhH%5Jhz0750t}WPM
zY^D1dm_Ou~GQUug!|<n9lC{j%q${Q|D!Vn7x7<xP$26usDJ-HgDy4$Bb3?!Lu1%WJ
zrVRJ-R&&H3^H^?Q|M`bHvfTKanq>--Q)Z?g5r#G`gQY!D*sGDPY<6?WyudJwXj|~^
zygf_D?%e+QXyqwnQg1SOkDUHVpVGuBe`cFK^PDhUzb1hNe40*2jiocmzjgpD>)O{T
zJVI0FdU%P)@WPX~2nA}%`SJl=B=9v~(plZ90g!^fH6~7lac<1%98SRbKqrUx4nCgI
zCGFhU?lp!<ezRV0c$UNvx1V^!jgFWDmPIA~9rn&^Z59C3Dj44HcakO>V6$khHQJ^j
zDD-n#5C$b(NPENx!Ub{Zox6^}y->Vxjh^FT11>h!(pw4=HFly}uam~Ba7ri6BIB;y
zd&jNS<ea_rmfnJCH(_dfR30*=#YQ@iJ8mwL)eO@a!yG%cUYP94rk;LfYS&(Rm<CHc
z&J@JEJ$W3-GZLel&y8l=G&sa78b%RV8GOQJ*Z%-ku_x?k{9;Zx#xdI;Uc2#|KYY76
zhPwJqF^wY$eVl{lO|<tGxD~0S8Cw~=_0F*6y03*9HzzfCjp>e)_ar^c<#GybTOu>~
zYV}yV-RPgu_RXR3U=G1p<5nJwTUwN9?RmJaUC_(2z2~<@@}K^uuwDw_S~i>~mx7fj
zUS8?SD@-sl_{NUk4vkq4_ERxMe1e@1CbZ`&!vrC>QGq3-&rs1@g^NQoWcr(pth-e*
zr<!g5#-`5gwiLE%*QG@NweIhtwCu6yFzc*7R73A{>A*v^*Gyj72oi9cGR+b#%jFzF
zY<&nw&6$`0%IhUQ2$ug;-+}CNNW%flAS#~*?lCs6it!MAB3||f<^U*#)x0edOa$xJ
zu1^lhkjneAaw?HgdtcN}P)_xIt9p%heVm!IMd4QsiPw&91WgG*e(kBL))>-gHYjB4
zybU{99tNjh^gL|%9(L^FA}gz`u<0@5oM@35w3o64neG!Rmm>uhHOfqFHKbdyZ1%0d
zV5I%BXd^fV#}!-;fW!4x5=dazaip1@SvT+cR)bq~8jJLsMtaVML3>Vz|E7_*t~2rS
zovx0@;BTiug;%U0HCfV9<?WTL(106G?5Am8>$3qni=_a5h5|MiP-7Ip4y(4qs~+=A
zY$Z{U!X+Y5iRfG+G8H|WnZ8-FLM1CyvO*;*3!ZC?Y$5)UCK^Vrm6!doS$4E~Es4k)
zFyUn&TY9nDCLAu>5c%T3!_&P?)2Q_@!zycJCtk+`JTVxU7zWgDRK(#H7VQ{2`k9_E
zFk1?<XTe#_3alXHmw7TJTBb=XB|jFO3sByBt|>6gA}8f!5ZV(4VfqNe$p}EsBoRj`
z<Z1fdO2P79-hTIwH{ST~!KFWMe({Eq<Irx5c;95~Tnf%kgs@Vw|NHuQqotdn<UlC{
zNeuu8&my2%BrLXsZ4O;C3d1x5Zow@22F!op2a&r|RwQ$PP>?SA6Oy=z<E%t?i*nb;
zcvEj^(X)m;1j;=|9c@L+Y~QjPk(xG1V_G)gVd*kdFB;#%Vln&rsF%&cbx2tf>eG`R
zSLiX5zFyV~`&6!PKc;ehEa&CMMXYhru5l4-T*Mj|eKjujsa)TFOy&Am&Z$v^Ze;sR
zR>2Xh{mCb>wj<bi_5~V!1o6Wg{KC3tS>fPRDU1yr6Luy}E-p404xxD?)*-nP0F>8_
z!Mx)R_Ug!dP@s2^cNRV%4T?5oUn1$duOyPbK*Bdn!z0BE)w-?2cO%A)H$n{DJ~nh6
zS_gz4UDDQylD-~fHx^IJP^^b7)Mj;g&Kt%+a`yppG3HviM|<Te^PFGJ*L3(SWn9;^
zt?;c4i-$aPGbO|NEN`-@viD~N8O`KJ<aVu5)_6@#n)T}V8$QoD!&m;v;R_{=hwCIS
zxIW`eKl2UW24%bzUC0i);p1b*DjwNsc-H}TnSVNiovBYH-h-0X-jX%<G>W2w$<`Z}
zH?N%Eyz-~PCtnPH^AX1Nxx9Jp{jE#C8a(~};NzEfo_}ilsV~@b1ebm{n_s+3PCSFF
zuWrBk(cr?T5_a>-^SaT;KKkJ<F#4^8JEhDb&moX1Kkdbxs4%VtL;{(|J|PH(%236Q
z$DJC+mT}67TG2&mlHjbu%RD>*A}*+R%Vlw@PMd}b-v4smRor)By<Wg<6j&YHQ&9H_
z)IEbc18Z`@Edl#+-~YHX8&u7w8{*4GQFQ@KkE|`r_+)a37pglzS-z;lolA#<3p1hg
zEEPlV_?42lf-l@V6V}EjM7UPrmzm)cs=_2ieK>O!ICbp^JwC0|R^I`xe&`QnEJue8
z-Rj0;lC8vzdIzHgSh*J-<tB6USct#F10i|T4?RWV3^i&Ylnf-z9moJlDa#a?<AA!1
z^UUMShCY65whuo34Y{InpU77(GFfor`tP=W_bhol=6ft!Gx|Ge+|XUwcI~-H<ue`T
zhQy)cY-Der`1p+$fQ|#3*C0K*!_G^89bEeL){D;$K6x|1P#^)w)n9xqMQEmbUR+-v
z7TbyU#M6;u#@>RV8rqe!3}|7bevmuzux^N}a)z7ouKV%u(nFyc&mDau>=S1-_smWW
z3Fj$BG3QhVkE11t7RoJ=T+wcaMO>{+p4Dq(sD|vbiz9NpB(Xbg)o<f^>g30;Vo2FS
zzxDR{!OJfVIqDOmN6oSih7HFK0C2)m!b7~#iXXs(0waxxCuLSESRTa-BO<vge|Z#3
ztjT8)d$gV$W9y^<80lKaa8kYf5vJBX9WOS(2(<ad3xnq_-VEJ_0&CUSq`n7THywhP
z^fI?feS7z(_uBj_O3r7E+lVt)fX3+2D~DOcRnq%5=Uz92Qb#lLq9`fOLp6bG^HeFY
zd1Dm*$vno*<R(Hi+VtSGbX=UYcl-c2kFkvbb^L)Sb-2(}Ox0!dV0Z!p;|1{%eWI{x
ziO=B$;Z?x6_)Kz|zW67xVp`40g=$6S5MvZ~KGq7mXvzp<NIs4uIX800gp6fz7owAf
zGnYN`#$xo*%$b5??)($eP5`;HMa;S*Ss9frGu6ge?tHB13}A7v<z=PuUnYaqqXzg#
z>^X}uyn@Aa{I|$tyIPZo^`y>jFrdy;$KaBCj{Dwlk-SUhG9Sg3QnpKlj0R>tTfwrp
zz`2~A&j>yb-O+jBCi!95)o3r<=ggm*4i$IfXBP)AJ>zGgTf8>`H#?9b*%v3iDV<)T
z&ts$7BH0;u^SGQV1@TRXN8kGEXM?LBKv?UiFIa?T`|G`=_3%3?qol;zB_-|c<Vf_)
z6uo7#eSq6OStqhZujsAO#o<>yGKb8kE$Ec=2$ye+in)5y-$_l<Y3CPv-!|%vAp5^j
z9l)R<7zA@K<k&{T-Cf8T`Buj+jy5#WV|f}GR;X63(W^&-L{<br3|n}dEfR8LYo2YI
ziyq!YYqn4EclII4l(>F5Rm@a&t>%EGIZxkVwLKUbnRRdb5~PG7zk|h^$iKH%<23eM
zvK=`Tk8A)ZA>noW#N2JTe$7=DI+-xpu6&Y+Rz)X{IgGLMY$Xa7wK{`Z$i@X@0W9`S
z*BZLe7&dGa$RRx7+G4!C3~};TLb}%+*1Em05iDvIpkI3@>AJz2Av#_Pv2N?-pm02C
zr7`%>he3_boUjaQSGWu^A&9$a0GXyB4>jg*vT^D4>pfIK=JdF&m{E#CP&*x@ip#~|
zo*rvIq@Zdc=n~tGF?dWf9k$z@1g_6^6XgqJWAZhpkFgqgZ-LJ3sDp<)>fV6vk}ll@
zeR0-lN|xa~ydc@jXG-CKmK&l%KIbv4BBSCjn5&|y21XL}!<W%Rx4>a@b0B5JLb7U=
zeHy9WEDGePBUbnH)A6{)n2a%9fzE!!aafUZr$Cg0barxbIqt6X79lgtWb^U3Rtr1z
z$yQR2Cc1GmO*&mXfV=m;?;rcY$uo~Wc;cZ)AH46>{r9mhPFHzC75(M?$4;Jn_>mJ2
z-Om6HvG-D%vk7^s*E)$3t{`PO%4==kvBn4x1%(!v;G8-Qdv)+66XU@hki17cW2KJH
ziw9<M`xZEwpeML$P<Spnma_SXeBEmm@NP2%o-YL}F)(-&Hc&=Od#wjz%znbqRpyj)
zKYziL&z0C?RX3Z2QksxcooBK5{{0Ijx?g>^kt`H#a|ovl)pUf_gBDj8jYL9_6G6qr
zg-xS6GYs0OA6rDh5=H$sf;9zhsfj+DtEY|b&<Z4t#2jCLC)D_?#1J@C=Q=j5N2~$F
z1q@up#JH%oh(~PPB*04S06;b9B`jyA*2YD)I(7OdS}BC3NLr`abhFtI<5D`@NHz<I
z*9lD5NQ~$j@LW)BLp$o8<5@7FlXC*h?rl3>O;nE&Xu-~Y8ZC8k7Fa&%+^q=9n6H{~
zUBe;B4QP%~F(*g{hFe02{T%VpqetbOGZY@qVAycMS**OD?U8YWJ8xXS2?5W04=voU
zOP@?T9bW4ebOA<X2(*5PU??qb{F7-nPzh%|qRq5oKK`V-U=a!NREOZHI(RBxJe47M
zDkh$Vkz%v(gL@aXS`M-k)f?5foNlyGzWC$Nwd~NrnPaH+2$I48tNG^hGQ@{#pJZSZ
z6N9s(oW-Qz!^CcNy(<i)uXuQADUGy1oZQdd_c#&H^u<U_2)zX~k>Pq6s~M!NNlzU;
zw*^ihs5@(Ul}EHPnv~D16E5~3v|Bk&D!tzXXpW5RscgUz$c47wD-r}q#xb76CA%=<
z?Mhzos48fq&qJ*t)4IEVo)g+aVLbOPxB8%Q5^Lh<7Kdv>4VRCM-`erIEyKmP^E^AU
z4QSB9Af7X*@;$?5tj`LESh&R^sgNJxSnL(MX|#)xSaf_se~im#(K`If<%8x3Q?+R_
zU2a?)MQm50)ATt(I#;fqf_3{_E?AFb3syBpZ^tD4e_p2E)=4@<{C)##=KMbv&0Q~=
z9?|+OlC7R8n=K+UWa@BXY;Kl)!u3qt)Hj|U;n|E^_oD<3=KaQ=Io(8ZTJ8V%larbo
zA-MvCwR5N84w<t2sOc;1<pP&>)mb9b;bc$1lMnX$kBX9|;89t^u*>lGXJt!3t$);P
zyiuPEdD6;MqB^zTHbN<zQ`A`oi$q%Rn06EbEzPfI6Ul)lf~sd0qvfmu;zc!`wm>km
zwPy>kvDQFv>-OZ60V1fn2&%&nkQv7xvdnFZQ+L+(Zpa=jW7}?3y1+;}N`;=isfip1
z@K~2^)-&dr9BRxU^58cy-occAxJT--Ltg9HXY>vWNXLGLG7oM)%2^jLI5`tpD>(>n
zvJHb+ss<Krq;N4+O-!~iL$5?G-W3MLOIw1R47>V3OnVHKdYkN4RxSI3-8QGW)dlYg
zDBB<{m!jX0^-5QgwbiD&U@FTMp)FISSt0J{O#5L4q?k4p1d%52sX-q(dh_#H9(?}w
zT#l7yHqjccMx=rqZFZw7x}iP*l-?mvE33P1rQX9Mf?2ALy%L!JWU^LpNNhE>IO4*N
z2p?c$xqFP>i8)f+tce?24q>+U9mnH6uVza*%`R&|<AqG+9b$|nor)QSS-q$V6Kd6b
zTaQv{b=LJ-su<qt7J810J+k;?Vj`DAcGGvWcI-4905FP(E}C?3mzfdy5n5Uqt)<mn
zwA7%~(6$=od1Y3A7j~6E`cYlol%G9`<8ZRG-;9H!_1LrTs(ACoRopn=gvNaiXjLFv
z(`KDy=sM<s7pEc<UOGK8k0wTAT(1`?cEOiJ$L_cnV1y~)A&luyG=eteXCeQSoMb~b
zi8R{g6R46)psGItyiK2siT6#?XG5@ffsgEyya&KpY6AJZC822}>%PNTUUHVJei*!8
z67oGu{m7V1h<#rkKRQm~SSC~6-K>PpAc{J}O40tnYxgsmK%Nh#=~{VUmS*ye^W)g=
z1=rXuh@GKb$Y{Q&p>ncoil;7~rKZW-uBn<MvTXGxShji-EIVwe-VM`M^O&|e3{2|a
z3Tz11eoK~_VQb0QEi46l$g@hQJ3Dr<7I0yCG{Z=T?r6lESs;76UO;J0nafal40UfR
z7oi5qxUuThAa!hyYTBa*;0PJY3VM-Baqj;bUE7m}Aa}3cUFjri=o@`sr;~IFu0O5~
zF)sF&5Cy-MwCWi4Bn{Rgp4hh&rEN@OGCu0Y_nX^j<?NPW;~m_l{c?5W{c?5G{j$$o
zlC_1_Y$e(I=&E8bAFi~UG>;=j-)0@&-b=`)y!&x-h|@X0!X9Pp$1`}<Y6LcZLai(l
z=0v{vxoXs-F__C%yWhZ9{X&KMBJGmaPL&UO_Ir)|d{%ftB<a*tsbo=1XDdd#qeR1r
ziD6{B*CXgGa^_M|v5Yydt9xTmu+0UqOndKLWLOR4yQ=@)tymBA&X&x%GOG0;Ynpu%
zo8$i(#slt|t4N(spOLI9qZwEJVLUJirzDJSM(|7m&mo2;o%Y0@Amr~TJNbz{*~yO}
zw0AAM9U;!UK8g(A6IniF>p4^#{X3d3{BmLJ7N+&>FkUEK$2mV!h77d4P3_{WY`3Ni
zW3~)2Ax!Mrgm61%OLdglax;b*ccKsr?aef)e%p+EL)G}3P!IlLF!}ZwOrTYU(Zs#1
zquEdXvFEw{d!9_gPIYe$J7@;kGt16MTlQ~q$L=)*;gx>rrw1EG@p(?YH=Vm+k7qp4
zAh}B-TpFTJrtf9yI$qlM6fs7>dBd-fsF|<wLhUoJF0RCa1I;jw%H6UPHN&_C7r4P~
zmS3S%cUtA!BSF=@)aqi>Tr;OK@Z?|V)eww&Iadwo2v;fb+ODj{ha{tG7+n}9M~17c
z=E6$XoXO6h?mJ5w2vB1;bZZ?qTphv394q$OF_1~|ZaQy`8$E(Rj%Fa?lM;~-M6M_s
zG9)-0h;Edju?d9*{mD?}tSj(q%iIBYP6yFkagCT)f>|f#1CNt0w9|PZ^$As)RAv#m
z*%la3<py5D{{fSd{GPqatk?>gN!q3RmOPD8%4TvDFp_j*w$k=dZbWtc8vkSIQe3Y$
zqH-(hPPXGT4O`2Tk9B6&4>jw}$-`ROIt+JyoCpljq6%RtSk$FWSbn?_tws%8OcwbU
zJIo{l67M}(LO4WKfK)v&{MYwS{OG~^g3}GQ{y?rMiW&p)067n26oY=VZlg<NvKn=k
z7y=Ap@Y5b!SYWN1tWF(1JUvsbOaisos7%DIiO0g#Fs*gsc6WlJYD~a2@%{v_Y(h|J
zVkKOSCc+7l2oqBiDMZvz$*{fcvBD{=9)^F5jbw3h=1{E`9hjL3rz=tYz=1=DmX@OG
zT?eO^4ju|?i!+s(nJAj7PFE+>PK^!aB+2c^((jzCOjWABD!D^{Sbp?TMY0J-Ywf$U
z%=^5|0vx9a9HpE{WiZ|dH0NH~k_<B;*##J!N0c8t^Yq}8FE+2eGPwFmP<XJI9c7*e
zK=Q<wr!erRWe7nd+7a~Zu@rC2P~4l@M%;?Dpy{0?K@o1nS+B=wyAk$J#%VYA<w*?x
zGeyzXc^ihtTjy|@X@b0w+V(yu8+JV}u#g4@;i`wkM#~I8z4P^}gSXz{@#)_BYVhUn
zx8MB5_O&+#7e2r7#=C<HuiJr5MfCRIY_DBsQ)?d0<O=~082|Q1gmLiP#jUsgvi0jv
zcP_ub_1dS~*M5<WhzDpofjnU0d-3VP%m2aI10t#uu2KMjn5hB5=9R0s@x<4!e?B<>
z8`hVt*Djc26YO06VCTc1J@GxpW9PEcB-~5P1KAD~qm-$hdlh4Cj2M94gZ8KsMN7l0
za|~5l3Jl^H!d!o$!d#t@5u~j2Q6Sn0sh5?UP8Q6XhXg}3CSG=AL}UpspZ$O5pOR3Q
zFKzwjd-Rg=(T$&f328|_{rUE*kjn%Z>epXv{rNTaaPag6Pq4+;{<3-HPg}qHB?G1k
ziM=tJ&fr%so`!W)COsK^@%iSJSGS&jp3i|xml>C^w+OZQ^=}6szX9>lk?l6Ge9Uml
zW@60rt>1mIb@3BwEGtG0*}nSW->zTa!u4qIIQyaGD>vS|I=Fi2Z`YsOdg)i}!{Dpe
z8S>Gl+wNzHnZnc_Ur)p~m&vkasu@Cr3u;X$S%=hy$j)FGS0bX>6Et5_8q%IJM=Vlj
zkG1N@>UC}M6@<7fVU#(0a(T5<t(7X=s*fxhNut*3cPr&u*kU@%>0Y~yN*_kb231-s
zR&ta&E8uiiPxQfySVu&5=+q-H3<(f5M2tDsoPC+&KIC+kVOhi&^gqDn6>R4l_MQhX
zbmB9!S3S3oi91~CMja1o;0vZ{cTPv$<GjOcFjxW6eM{PzpiWby63Z5g?U$Y%eEHen
zm5Xki8bMlb2tM%=j8o#XnJgsdwp%{FvkSum`}H~yDp(_i)o1r`n}Q1)<a5-`Q(E5m
zuwKVjv4U2@U}20k+u)-TLn%5INWlxD>)orHS6|xv@@pp9cfS4&liDU6W}+GMoJ!~w
zs&L6>*XD*6BtBF@>3qj2YEUWNgw<J335UQ|nW61+i+K3kwuCv8JoUyfwL)XUJoQ9@
z&r(fC33zGLVh6qSamM%2FwsqdX4p9g@ewKLDeDKu1BO72_{3Wlr!N;ZNV~herx>O@
z@}4;HyaoP<t2xIN`3nw@C7mgrb7wf~;DbODqC*YzfWQeqsk-KIS;@8QVo9$6^QTi$
z%hp-n`bS>4QDcNn2T!VkYG45st>V^&U+<iMnkg+5^sopz*YCdAU2cV_VJAvC#nyXs
zskF@@NCX+;Udv#z3$HMy;|+@)42zmC=rY#kw}t_Ujp)y;@pcSg(u+_s$+sSQ4=(%;
z5(Z#WCy=Xogtv)J>7AbB8yxy}l&PapV<8xP@YL2jZ?pZ^_8+fqU3nV*|Nq&0^Zq!F
z>rnK6e2S**>zNS;gN0HO0|I5P5^qS6kAOwd2rk)}X#gz_rYF-g1V9S!Cnr%X%aZNf
zIF8rE_DyWvdu>_HV$<6EWeAY^D_`NArIu6G)jb1}PV(NnN=!_5*Lv#IsdG-9g?MkH
z4-l)-NxGA)Mzq8cfCGA``}f}ADI{I)Y%IN+P?VNjtjol%hHiaHaf?MKO%#BI%VI`*
z2vB19GgT(~2iSx%9Z6-GB3plCyeA9^8d^(so(~;|lP_Hp8l}P;=nNL4aYX0Kio7NQ
zh|S2^T2<ME^pNBdI+gvs>1Q}8o=g*=5x{J61S*R-E~&}5eb@*c7H%q#MZW-@LUlTW
zj+Q&Y1?XcA%}<(fwA2kmSXd|U=~v!5{MIKyS_T^@%aiKh?R+}%2Am3ST{~186yER-
zc<q7`;X*-1Bz-37RbM=H_VTqGSFT>ZvP|ksY@!CmJK4_Z?r2b3h~}E|C5N1OrR4o}
z@gDVu%b|wshhk&?H^0Ht*=}i@=3BT~?=!V*;INUZkB)}9J%l~iA7p*ZEZB@Fo{zjP
zk<jx~h3aaJKvZCAD0&+BrQvR?(;oyB>r`aXuG7l(i|1~fxqRu;<(JHAtx|<mxm?X?
zcCBe%X+VVDUiaRf$+{WVuYG2AcDA<GRBfX^{Y>1)59_1hutqiT<$ul69=_d9LDJ^e
z^z&j0f8fL1?Ap{C$D0lyT5&!~<OK@<3~YT>>*9r%&W*2w71S-kUN<Qui)}_*S#Ff(
zw0}4UEm90sLXsTLJ)P09hktk#Oq-mH`67TI9=tG!J1KCEj49drtDIO_Mo^+m-s`Vo
zMsMD((eu%4w7~CdV5Hr7U2a|!oYMv8ZOJ`Va4*o{o+zdp+?x*-oEP`>$MDT&H(QS#
z%7`Q11&U_VM(dpI;(Ce34gZWOhJ)VIg;W}HRZ65Wr!nu%SC&)c7)7^qH+m_4Nd@W0
zVCW#|UFdD3y;RA1bXw<7roP)ylUHM+VXIH`4Fzcp<vsIlPghf&@7Zd5^XA*UumWI}
zoyLoZw|Ed`0Aco;&?o$v*IEFb5!7kKwHx8KuEM9dI|2IXr0{liEQ*+P@B-S4(w+f6
zT|(sn{H&|I;U;BxHG;REEuwf3aZN#ix&u{k5G<&u<phX34jD`F5C<@T0x<7_MM%X0
zdyB#g3<QmT48||=6cMlqE*POyY4YarH%RUU5|X$D)@C0iAM{3wx#9S<I8sG;m)%On
z^cYHIoAu*%iV1J#N~<XulWThyWq4?vjq|NX=vi0glXC&q^eDCM@%(5t)hYfsm9HPQ
zGS2uKZl55uFKnn))E7p1JMJc4v!~r8-E#3?%9gQ$mz8_QB<5jij!YXO{zkev8rTdh
zQ0^rVo#TxSGD5`EFUnNLrhqw0UUTTB3?*QmH#f505Cd=Bj6e{jr}Oc4+TFW}7Rx#E
z4)pRSP#Yjr>j|1iCPNsNZp5~riqiJg57&qW=_l26OV?e_&|VCUE-{G@=8-{7Cd|7_
zY3oP*K4)_QHYjF>r<=m6B<-zuFw7fG-43vBsMn8fs`TnJIP1@##o2ipI|`6V+-Xg+
z@3UShyjDbx8Z6f$D<}LF^#K?1q$M)8qjf2!s+n+&&R6t%VF<Lm+t0~jlkta4RO$W!
zC@-90I?)eEKslCxpMWs{OCBEgI_dmr1^=@QhB4^hZ8Xa!BhlPE;T2+MZEn85TWd`~
zSoCK2&jLN(ab=^q3VV5Q8;A^Qp>P~<zANdX7kA+>YDTo-YFmR^YeGa`i8mkNxTP)d
zs7EeI)sK4YVr6v{gzH}J0X0GZk(3>`Z{cl2uhW{a?H4QY*A88$?Lz7b^d--L&a_cz
z#iv+jlF;>7#P(?<kVut)i}GoyI$T)S%r-=)G;xuIYnHE>U^MxN8i`GhcyCJCw%S`+
zmeYNdqTNV&=`iEdZ&JXB5ghgS#_A|;RKvEGQX(&u;xWGk{-p#d_+yx{%%2U1*>+9W
zSVdNLO+TFmir$If)WNq1H{zp%`1o3wGsAO$mq3rDFpVo&P7VkQcDSK)8sSVEbR$hV
zO$NE2E)GT*M>mCn?5021%j>Te(iGw#I6q++iY`nhU_`M&%}G8I9XQnmw(Ak=zKj;x
zz<f>8Mj2*-C_(Dxh3MI%lOd~Yf)yo(jjy|FM;^xVBlFb-4dmlCP|07Hfx;*xp9nM@
z&FG`d$5)>|fi}Wmxwe(?A#Tz`V%3&&oWTCw7~#c6M0fIWuM=I^M(w;}^}X?|hhz=Y
z{tB`9j;tYgRwT@vH8G0m;EMW+<RHPI?%|A~-j6gydgF`%^;0y8R*}G{9FswSQC-ex
zsZS@9lu|Jut8=J0on329Mw`EA#@>zBldfqE3t|S#Q5WMb?`^MVUEAWGJ};Z3BGn^;
zUy@Fn@@L>EgcGyIc`s{6Iu`_?q)r}@*jZ*oZLvpdB^z{-!6Yq|ZwqYUkxz22j@qSB
z9;~lGeRH0L)YW;wg*E&81UxpQXV-29`y0CiSK<yHp`}6}b2cCm<-`RJQcNr=cXY+!
ziiOJ>zMGAP3Tn-Welt6Rm#y8jpQj*u!%5ywwz6)=!maWw9{}$TJH4z+?aI+Xvs=8#
zX>DhBfa{K1*<f=f=}mued8U)K^O<YO`pl^-7iP|o67MRzUGz53u-W|l*%{VK;*}fj
zi{vu2C6dTi;v6t0y-q2nDWi(Aj`vX?={A>QYu=?6T6}^4e*0Xv7_*)4P~7`jvipPb
z`i6z;q6H}bYEd<}{6;#+hi3;d-l-ikmB(a64qWn#$&HK`ZNb~2g6V~s9^T8*B(nbM
z>{`H)+YbG;*SN~6sklZiUS>YxLy6%co0wgI_3EY_>J%>sm4rfCBliAc$iq2yE7}-j
z+tfvxjdFdUw2Eeb!(BP9rEp*aeYMFeZ^}1|6NAYTOy<@a6WR#|Ak{+6unQx4)hGn=
z8t&2ujZ?PvVo6%BP;W{R>GsDjgFW&mw@-d|lwOrC+Ur)m4fe|f;Z(Q36`Ou_EAEA#
z^KJ1ckSEIFjfvh>jHpPW%<#B5XuXzaqd_~FMsK@X8JPImG|pLUtv5n@)u@$CALh+s
zVSKW%{XG-a3uw-LJGx~gO-YykrL^PF0DZt)JMUG!5uq)BY_Zhw2`0#Dn6Tjn)4gt2
z8-cmltZshP2H`b_5t<EC>t(&9w&-`LRX62bs!gCe_0d^%Yj%q1SnM6{8edWq7Tza~
zyLs_2I!D*&Osz8F>1k2@v&z4UBE;P18q1*y#$^Q&Zf5|<N!GLr`gwr7dT%e<0lr1o
zt@w|4?gi0UhWtBS8y_3S13(4Ocw>S#Y4Evhl-e`Y9k^mtNg$+Wfd5Q30H7V0@3%$>
za%nA8nznJ@gvk~vHJ9t*8HWNxY0+Y1z6}eu(Fh(Y7(CTZovdC5qog$S4A7AJR3$i_
zwrIgB%j18~!|ExTGufc!e+vRIt37qB({hzo4L4eRTV}+GgH>HE6?&gM(^08S^ywJ0
z34_>;9?y!K*hx_|jW*NUfSeg|#QtVuKKV7piDDtY#MArHD!g8EZ}Jky5|@k*90MtH
zE&!toVkH!ywXJbSwUAvT^#Z_A#!nO3pcm|Ua3B=VaRM{)Gu^D06kIV&=oN-$A^&lh
zunUVeHd95Pd&!RGI53z5jagjjOGh7FRL%*@7bd0i+pF>}kp`NkEei^~f5A?~SbQYI
zt*oPrFWCM77i>Ug4K>(rAu|WqNg?wVFEp%gG{If@<MA_nfW*B#%=)<+l6|pQDMQ$D
zRkDLSCNi$q_3DApYr08vmF8S}P46u|RdW#)<{yg1(*}REeXpP)2+B6DS;*qlqf1Vc
zNlav1Q&;j4o+5TQ4L9Mue!Z#+uW7kThojzC@h+g$?X;87g7M+0tX%}EYOau4lphpO
zuEfJ(GUz!LektnQ5P$lBgnDeypSq{yE0`^$h}&qXkh1x%G^lAsr&auoO+Ah_DO7Y*
zouu832V`k*v(0LtyVUJM)M~Z%Z`vy*w_z6UkPTQ*pvi6*IRI;7NKK$U8U7WfhddQB
z%fcUv#ymo)d5GF{Y<XoVRO>TzYHY8lU?rT;0iLWi2!RoHq6VHuP-EAm%Gd3vo6bm4
zLg1em5ehq3@gKgxwn&jCs2AhCWWYfnMzH?@6FFK*UF%(Tc6M4KjE4H$pfC{D1da!I
z9+`x?H)!R)v~PxR@aFdqKK!7QZBIo!q_o#lV{qJ4_M;S$WgGt-eDcPFZ@nwaT!~Xu
zV(v$M{$c)V%X?W^sqrHIOJnz}_s#-MPdiQBN;B&82Xcb~O@|_ATSmos)$}1Dt@>00
zxU|Hr%QD8gPZVMWT3wp&abMzef+wlXp;Uvm3<ljmT)Y4$PX^l=@5S*Zmf3$0BBs{|
z*$!TXCcWF~AnQ4SQ$#~8qh$xwjo0(6I~pdn#b8mqopdAK$*)5{9G?8BA*F2rYyI7l
zP7J(^Ss<773b%mrpBe(rtiyQgwN5;Yr|%4=0d=O+POS;}({OACRV{ZMPe;b;TYdL?
zS0$$0lO9S+<POJDvAfKTq!N9BS&Bl1?Q}Qo%@{9MycrE|kg0MPI)8_RHpD7SY0ZRm
zp<xOdRJkKMnaYa`?=gZL{0mg4liW_*$(3|B>0U+Eg~eFKbi!sX<2gHGg9Z1aG|E>t
zXCtyVNpswsB4!h9gmlQ{UJ{}yCs1FSGpqgCIq0lW981~}9z@87!RwZOxi8L*jwsCT
zL{y((Bq63Zb*H$aJ7PPl$*GCRLA3yXk}eE6SIKw<<z2*jpMLpw2XDOd>5u>Q(;xoi
z)7QUx|K2aqIq>~|Ie7o)vK^LlYSTN(`mJ<0jg}JA+;9!~1*!IMYfN5Jw>`{8?X77%
zY_rkCb>jZ?7VNq%?!0L_;ko8ub3LxlHtGKw!6y2AH$uf{Lj|^DG-E3NzD{>L(?k|z
zDH)RxO5;tI<L<*E#BkU7Ac7C7^T|+u`H^iZ-CD?A(CfV5&_uCR*sbZow>~_$_vf(2
zpZ??r55M|Pm6sXTwqw@4gP|dGK~^As+fG^b$w5gzdi~&=zdU&B-NV<veE9B<AN=!M
z)z`kZN1;HFy>4enXz+sEdOG`#u0MFU*sTc*#DNC>?W4Ev-~0OgdvD#p_xi!TpB?_@
zHwWK*6UxM>+&y^xBlr&gKK%7t2mkQ1gZDpq_`Bc2@5AqW{qQ@VRNnXrh_(K(IC{+Z
zeI5vEqLs){YOx^FGFb%zHp%58VV9<;%(_wiu_owLN=F!B=kWy+P|Z8ox*hk@9m);j
zoeStaNw=8%j!29D63!I+YD&c_8qh6B+;v+8u12|UpTU5=Wm32kXvnl5P3t#y7_K0V
z&Lrw`t<qT!wxU+QBH=_{n`_l;^G={tU0T6iFM-=DA4|BmPmeY>l0lVj!EeXy$<hvc
z)YaDE&2$Yo9Ce;F9ikzRzW}L`%?9S_=zef)#{xlrWs@y39>=17$E9i;6G%;S7DPTv
zzcNeZ-a98b8KGLRy8bPb!dRWO0xXOEw~|v>ln4OUhoe2Nz0?X5vAIssGCnsHxu}Y9
z)di|JS22E^Rbcpp0hN8og5&xchj)|X-h?_=J{BMT@*fX=^=EuImWSV>Gw)QlyT+ln
zqBHm$0jI)RTHseAKA@s?IH3v`{&-mGR_MXkLBe}S*QdH`Mz%@;uPabjP&D}Ie$xwP
z5XAj#mdWCWw`ZL5UpxR)@9_s-%kk~x5})E1M`lloa~)$+>6v>8;{D?@aH#q_yKLJd
zj=4keF^x26az~e=qDSlN)gfIR^sTtUt+liMUTv|wE*-|G%qeO+VaVjTrp{w0WRtpt
z#Vu3#sMdYPvL7Ku=#;$VrL{uy+B)?Y`EG`894&(<u*~9#E-<C_WH4xvDX+DPmj_C-
zRR~|DO9VoB=|+S$y2S3|Ox)f|l%Ch976aj-N{8ia4UDwoYSCe@6f~%;QMa|4C3jJl
z+4BF}EB&&=_G`RC!4g}_+*}^G5|hK>vC3z-H2I?K`%9=w6+@<Z%SignaA3Bog&D72
zZJ`iamrH><)~ZpHc?wV!p91)XGF2nP#1#SBDVv#Kx9Q@*CIP$e3~2u-RIrM{nRMo^
z;fznO{nD1Isg4vOd$g&l3k-GrFi0rE^r;@;49=Lw0b^nUs#H!pX%E9l5J@r@|LoR)
zm*%GNIu~q(8-=1(-&<(Zr&?&(8|ZK_>IDATNM^LAF3odjaAxk0KK~i|313lqnx3D3
z=JRu(|D)N@Psv+*HHz*0>X>nslqeY~G_C7pcY+lIMOj@_Ub->Wps2Nm1;Sq%CG%vs
zl5Qu!Wzp+qH1`J$8()Kwj1Y&(Heb|Uy!yrZvlPu;Yh2x!Rxhqxx=59j2ud%Q3g|cd
zw2#eE$;*S~L3>JGHy@#ql&#R^jRN3T=Nx*XGS)lY$XF!`J)Q5R%2B?v1vqprY;Ru1
zoBINUkluN{Ef()MMH6^ri|3ZO_S&BcT<%+~x9vh+De{7xiAQWV|3$oWP>x#EPt?ug
zPSRnR<xS(O`05BF?4zy#&EsK(ThvZQ&P4-+6>hn7V5;)PA-Nnv=?DeKChK}TN!)>M
zvVN4c+oQqr`i|)dB8h71s5lZ4O5hnvkFBW*g5RxTB!F|>HH@c7*OjR3zDc^Bn@$5Z
zeEDj7eJ!H5`GUEMZLeR6_YnAvse+jaRZ*YUBJ~5;p}nrVY(2rv!Mycl6$v)5Lz<Bq
zG|wFeFDD=qu>^OPK-4fkPrUUc5obRVh0N;ySYb2Yvv&7dt}!StI&3js?i)Am45$&^
zlQ(#vlE-+);Xs9QGTxyN!@F$E=Z19eO}1|A4sS3HF9y9gIij>k6oFAWQQ(0R%A-UX
zprko@{o;;X@3O@J&c5~7<jFN>=S(Zt1~FbA-eqts2t-(Lkzv99-1kI5IhKMTsBZbo
zXrKP?SenyVuL4ckt1GV5r<rQZ9IsJKVA4cP#|)m-^|<hu<BieqgUb;rWj)%W%1q&M
z?;<>TY<vOseK=$b{It98ik659alLg7i!aLhg7<E)gaXb&v?{=~Hpa-VkkgIEl;a)>
zZmiJZ6b>0zAP%qrTzUXV4+o4-?r<9wC?3A#7msjm8rmq<vo5b%y#-MEarsu<KpE@^
z6mu__f`(cl+%7TMDsI_OZO7+>X0wiWV76YXy>1J@N8DlS%D~Porq2LdTz+RVp#l~<
zcf}QxQn^IrA_O+QW6<Iec2>WbN3C1iXD-&b>T4eME>NoC2f8Rp)Xf`xUpe>6%8fIp
z&b)Z;#-&rQz=vmNXJ;2h<hiToUVyhVe{#3J8c*LjHT|X8>CfL-JKp${*XpbPZGY|Q
z#-HrZY^ug|s;~2xUs^#$6vl>#^0=2z1B;e!)Ho>IsoPoFiQ+s@H+$$Sk5L?URh)Zh
zB}FTQCWjT!h6%`zK*{#2d27nrE9Re_Q!}+-{VduO4}hQh>>SwxLqjH|m8oTHaW{I7
zQAK~W-c8#f3kU>b=sgCKaJUxlUP7`Y##9FzYf@D`G74X@#DCy~mT<IYJ+~4HE{#ri
z$D`UpjWTIz14809oV8ws@@t`suwtoV@-r1h0PQd9y2o0BB9ad4wLj_A0wzhb!Trv0
zTTO#w!na~tLMVEMgVnUQlNh5dkfWgr0-@KpgJuiMFTa2!@#RYwr(89q4qq1U)<qk2
zGYrb(Kr7Hv>H+%W8t@chs`t-HZ{IkVg5^6dTtwlpu=NPFp!1LimQUZGxJE<j)ssPQ
z@BOL?MzF*IB-TnxIbjEuD7u7G*z-Z<O3LwcEht8y=V<tgcJf?vwxs@im!q*c>Yyh1
z7qM~Neqp<w7BM8mu5H>_49#L_g{E|!ZIYjB)3~2{G#)=rS+54@@+!PpQE?}pP?uBI
z^8q@z(uIxnxILJ*-81cpH!qnJyln0bPj@rYC}Iep#B^5ZC^S;tl65Xd=^;RrU5cuj
zl3QG~aC}Mjw>r0mckANCi8Z;iP4_SAdonq#miXj_S&TcVyuhixf(l&eA8p{;a04#d
zD%VXF?M7W#0BILWA=p?va5eyMpAy$>)j7o)uv^NXp#9>~Dy&vOrQgF=7=ur`N7b7+
zI>}j`8nZ;)c$Dj3P2rnB_9!@7hv=)=D|Q0TSL1Fk9;Wp5Nf3LB*mKPd^!c9}*{r;B
zG(@XB(li6M8+xg^vPlm#pQ}4X(*)jQx8)ud5@fsPjIq$N-U;jzew9`PSXwf0?#8{%
zk&ZH==?+y?emE4H$qjTmZ4UjA-pQ@60&#>Jh-P$>a3>7)?u2mO3%%6WfJfyCO5wd%
z3h(RnJ$slJQBCT>{f`WsZAzi)0A~+@W3II4OF<lHO@+-WX)OTfy|FA>I?ybdj<gbD
zeu!#^Se*UP0(Da1y->m^Rgu~KvgOc2yxcQnTfbsgucqnS=sq>wk<ofJVbKA4Ck$O&
z8T2^rZoKH35z*>8Vvkx&6&P*N`R1)R$4XQ6^PLo(Fr67oETGK3+~|U%YNDN}VdCoH
z_K>}>!}d%%<Y1XX6blqatgziJxjsl@aWBh5<tF{H9=Br!PG_g+zdv@&k1-?!cVIvs
z8FThs7_biP6m^_nq-t|dFj7_WD1$vN?D8IU)WNZ+;CV+K%Oq$wIp`)|WFGFt&_+4_
z$Q$Lc$8)u8H!uvR|1<7j9{I`<H_h>--v|1gew+<4{U5cB4Fn$n9mAihyLlWen*c;1
z92>i4kFpcTFWX};3J>nFw&f9!YvSEGZW{ZJ=p*>?g=p7GgL@0WfE__{^kRD!UUAow
z(_G%lc1$!iWN1;Zy3x&cTE>*YXGKfZh4zCAGOpydU=dHHD0~F<XqIZNR?ATm3Kd^Q
zK^XG2a1-h)>U}Q^l|^j6bYfiTw0CAJ9xTnSVLVwa&EripdgR0d49%72Q=zahL%a)D
z^=))I>;9bsn9)fbBjcsvCe{<Q-y^L#1rp|*_B|Em7%)C>RS#c8!dt4<)-cLukBrOp
zOhi;%QP#D#Fdkfzt=A0*ort@_S|ek_@~J^N_7iTMz?DR;_UJbdszZ)Uhep6FYS5SY
zLw(W_TX#4T(e=ZHp^oSi_c6S|AVu83@Xt{KTV{_G$QY|BBD7W35gLcK0fW*$26v;&
zkMR8n<<Bd*Aqk|amX{cuZIt?2hV|=GEDrCQ!%nbBfNZa?W@%5uRVv~h6RK+5c9qx@
zxqf%Q0C|ni;xf#NUuJ8OE9xKx*w5E(cLaMEBU~cj)C-nqM)M6P2M+FOj6dR1iEu-j
z0?eu=d@Q<5PV!pMlRxhav`v)@8tK}>_dl*VDrvt}W4eZjnGLWtj8YF3o;MST^R{eV
z_vyX1oyKmL0U{HGfcW0TjcRw(x!rghcfj0&2I>OFC1t<5TAX(_?(DX2*P1@zRUd1{
zeh**ZGPnGe=YuUj`0!s2KKN;{UHIfQYg-kXVX0%am@aP?XMJ)Ayu@5%k+Wb^`T!>4
zn{mHYY6+py3e6E@$0wJZr7KVYr|`5_*r%p?qZF1~e-L*bZrPJgM{)pSN7e+t<9FqH
zHCMxS+O6%;1<|4Yxfm><TlX4swp?)>`mtEhS$+3~tI1ZCTmo7_p9^GCqo31bcqo=s
zDS9c%=VBQ$hvqNy!9B`REu%F$*J(UOMNCW|w)k^CG)t@%upOsYvyWaS1Y3+=b@xWF
z8v}*cUW0lkm%`^n!CzJNj{<{_XO*(bzH4)skJc}0OCS!1Haq2pv`g|K+O;QKOaM?0
zz8NIo&CpTehNoMIoWPD=-$c@Y`_BfZUv0Sbv<ti$+m7FX%m8e_W*M6nfB?8mq?!g8
z!o+GaEDBg>a5t!XuZ6fIf%M{xs^W#*?HgDYe@Wb>kV_Cq$2V*DW@;Y|Mq6gk=L6Z}
zf)LuJS0Q^jOapZWgOjMX^z*4<JrzLT(RbMOS=uJL79K|WH@u&l|3eI(>hKH;a-xBI
zjdViOlTr&R=BxEZl53b@Gn~|=8I`$SI~5JG(dHJj>~VXmB}Z1mU_DtoFfFhK?7)13
zB-a#7HDGMjS|!C7Rdlt-w5AL8<HQFm4$=Auiy#0BtH{-CoHd(>Gv?3E3nTXUCQB0<
z2d(3s_(F8oS}3q-P;M_5#U(V|sbTD#6my{<aQn%CA}ICR0Bx21ryX}Op8|%RwU_pz
zVcLy)Nz$R9uo5pSOj`P7mN6t5i@3f@R9+G+xIUuI)mLEuEIK7~ZD#m96AvMC!?xG?
z;GN63u8>>-G}6u^Y>MFch9fEOmzde88poG35HK#`aq}?07CaOvoUsQhqgufCmz~k*
zqOMUyxRO4k+&W$)YZ`~&k60%;wUdPrg_sbJ&DKXIuGQ*VsS|)Z4j#H1M#y7xtTLtO
z$nG^hZB`Pnr!TFd`o<y(d4)#Nc;7Xb@y%=u*HtWX*GPY+uo1|`nJ+#UlSh>J0XP!3
z^wW9bTA^@QQ>`89PNW%f5TjH()Gg5rl?J~kQCU+v3yMlkg+0NWq0PMD*atc7=>qn5
zQFVQu9E?cxU%&wM+bYM}-S{>0u+LEm@#o!j@p^Z6_ip<&{8PiGPIdE)!W)qmrM3?L
zK`Zd}PkMLm+`(e-D~A7S<!bTL6G<N}Dl&T6p@U!U8qKiwv42`Z(>^PhuikZ3$>Pv*
z-g}MFcFJxgJ#4{i!o+l?1QCT#bQl%hDmxS7*VSuxN1enqUwb+fD4=<iD#qfui8cC^
zeGk{$7;_a$>jT^=Zf%kZdj-mGZ3gD2C{myYeFqcx<Xyao68o^_R)HMAAN<#R+qcie
zSWuE(ovZ}NjBzG!Vyr=U(MKjhXWA*S5S|rdF2e@}EFbS`oLXz@Ko7G`vyEr9$6Gb0
zVFRBa4_6f9WuHX_LY#8|E)$yg>bVzM@~se>Sc%8aJ6kCb(Ry9o)X3V&ZqjCkvJpD)
zNX3g$)02+wgBxk3HWHYglvD7e9j;G$(Kl~}_E%lbx2d=&5`O`~>!yLGGloXcm#?%@
z9xpIJ=BJaqWeiXYT$3&ToD@Ih93NqRvZY2)bCic{g!6&|%dl#*rMj(It0c$#S0a1q
z-0bXsxjE(el3h&mp<<q<Y&MOqqCzH3iJ(l<QcNG^rkHxMSSaH2i;^`B+U)9&1@5$1
zQ*x@fh<5yrD#RIyvxl88(@O#X%(RK;6B4_;F^1YypWH@gy+-HPT&$qrIa+G!#(NkV
zEA4G$l>LrSuUwPv@km9bNSD<?n*UiWeDsklq~V+mrLkf?B>dq~wA4`bSY8e1ucA_F
zK&r~>tAWf_^ht++p@)_|A1Ij%Vjx<luX<l8v6FT#@_ei`q6=s9v<FNR95IyEg<CBS
zMpV_K3A|e_**xALFt<0c$?FMTTB8yp>7a6glm{4gy@yhDH@(A&n{E~dq_hn@68WGK
zP$?}$Zl1y;QESif-|@b@qnP%Bl?NQaCf_VYm8YJ=t7iAG0o04ufK^|jg<?pFqHZ_<
zwMfVf7|t~{12-cJwTW=fcD2-wTM85964forUG6GsmMWk;D2w;yxiv6x5J2%<XJ&oZ
znR!1K8N+bP0cp^#j><V3TEqH8ecVJZ3I$Led@K5`lpXDoYwIAfk&%?U9djXrspi#U
zNu$2$QDx(9VGP@E%m@pS&dO=Kdlnxr0{WzPFoc9tEd-5aJF7zB87LI549q9z(x9+2
z&9UqPDv*)Pt@2VfTsFIZ$!SXg3L_cHw;1JqG|Xy6x^pENpw*(5qtq6@N$g6~Aw@uD
zFuoPhYgEhtg#E_obR&|5dz>}<sG}fNBa&2T3&+taE;vUi@dvF!lo)KHPjr)TYFHO<
zl-3XLzPaLmsRctG(!%t4$`14cFc(hu$ft4G3o6`L47coYfgW(qvPRZ$QYINloF`2a
z(Om{LQAync*{G0^_Bu)w8)m3L*rpuw!=%%y2=W$)%3)R@h+d`Xqzd>eQ8!pc>#-J4
zxa7zJN`IxI%TUT<v!B#Akyc%W=qYRbrtdA=xM_{x;2XebKprYe$_lol*$XduZ*h})
z1ps0|oxc`KTU+0}u)V3Y*?y~t*2UL4Kug&~znCkdyoIt7b=U@BAU92_02|dOMv(N#
zhGz?{TX7u_)}??}aVKt4$(yA!xM?~XB&6-^aID#(36E9Qg9?j82%#eVL<8nSfD1Ft
zn#+w&M7stif+c&X6@a7WR;#T2<pfBaPO!C=bb%twkeK*tezUYveO>@nLvtJi(6Cj<
zABvcoHOo4{?SGR>zeq!BxzW{b5>J};RD`jP39ePLN>wcp1mo^byqDYbKn%q71VoBt
zqE-U|u5Kb(D*^3i7|XP7=w?|TY^n;9$Ov{SE3_GgGNTc<1%u}Cn$1lJLWmJ}3&c>;
zJKC3J<c*9e)W-E<+;P3d(rTP+Lj+dg3ROK72&ysfvTvI_o|cYMExFhk^(`1)vivY8
zf4g6#J*2f@uJ~HyaLww9uEPDC4KpfcY;V@CErz=uB-?4+qpKianc=Dwp7-8Q3(0vw
zh6M80tk8pCIt$;P6QeI%S=L2{nKt0h0&Qv-RN;y}YXi4&)%@u=9;F;ZO4x?rm>h%c
z@hGp@<N`FN4K$3){rFqB$!_HK%ad##1)P(z`;)Rw_I~o(;>7#3V%J){N8=jqY^Q(<
zA^FxwaCJw3HB_nVOQJ&lYJ{Wpl74B&&!_B~Ub*73e}6AbH?8nqQK&#mU4toWLKZR(
z^`ja13S#TytMw<jE55n*S=unAB=&*d`c_drlNYog4lJZ`V^{%OHnHPl6t0UEE!cIa
zRIi5ZCWY2iN?8@UQ?08M#S1FbkZk7&e2X&9)3VTNA?KU*oRAMjCZmo~7FNuM;$~4Z
z3_`2gwU*Uz_ZnS@UFZ$#av05MZngmjH^|wZd1J^d(7n2HTqEp#$U0wy0F&9YcX#sA
zEzQqu_lJAS!vS3x43x#<qPTh(<oqcdWlP_ctjkN1(pAOQDwmVb3oKSxM!nSTnPX<P
z;M@~?y1oT{Q!LNooU~`k2IH7E&pBp6Vu{wG6K-?`1PV%aug0Vlp{U5{BO<b1gG8Db
z3K1Q1ZtjkyrFwUAEaIyG$9QQvnj@{b`ZkM36nD+7`PzP?p;Yxnb&hez2ndKuFs#)a
zYpSJ_(Q2*MjPMEFCf1rXn_5kaQ#|{0m~0nX(@tekER9?m0!T*kTi@g4!$n2460J@t
zCLhxSk@Tn1niABz=`Fy#yYXxL#kwc3E=U3(dd0mV4xFW%jSZ9stXebed8?xvc&4G3
z!-%IjUTX~dUAo?Ib>G{`U=t-jMH~ux{H<h9%)gTYtm8eUKGP9rNj+Al-Z%vt$&uRp
ztVEBWUrdaS)od)MXkC<ptvzSdW{5*Axd)1Q!=Kl+8QoaV6-+FlF^o15tUV$R<+M+G
zc`_KX{!eM90F+O4O|MTyUW#JX<Wq^-gip2DOKB%XHN+z?D%*nB**pNF4O_Utlil+T
z3m~c83*Lbn2P%asN_ghngfZc^JCFd+j7D1<R>OyYQ!oQ?#ojJz747VJkd_kAkG1_!
z(g1NpY{$0}yyL1nRv5-kS!G_FR;faefxX7(dYWtD8ecB636WJn-K4i5Zr|je=i}|P
zyGL4z_Eyrqg@`~9qw6oUP{RuV*v9D1s;o&`z6VL&-jQL`?yVX3K&!UuW`S;*5jF!K
zu6b5ofllUt0&y;?=9If!6{Byu6Zh`OHhTa%p@8t`L02FmGAR{YQ%;akt>M@y(<tcf
zJ>6FJ=FT<E`M?#UM1u8E+U;BcR+w|N<Xdsy;SJD4gI@Z<Z}{b2F}w|b@Z;NP&XvFV
zp>YQ0%Rs!G6Tj!h?-SzpGft+++eBw*AV@e>uYh=**7r7t?N(mROkpu^{3tg}vi4$_
zbpui@q36CIQbx~sx)AJ&a*%N6UQ-CVJ!opn6HW|(rrl^vex?M)oUtQ<bC)r|fU|>n
z{O1Jz^9=qI3=d@!L_>oV<I;Cf8ko?)OM!f4!JgoFsI>HTnw$?ed7{t|eVezP%pIYV
z6X8xKZlAvKkmlDW3}s%~#U!oMYaYvqwIclvMb-|i#%$4NJsZYdYm5Vxj$@^hDz>b&
z$ib4>5EogL9X)MBqKF3748tGohJfK6$Kh4=$wfr7C#w2<W_+LX*x(81vzS8BbjoG?
zxtJ(iey=CWzV3VAeWtqGIe)HmmEAs5-7Pt+WVe%*td68=FxQOsgx?GD3F?y$KQfrN
zMPSO98)%kp(xG@fXcx;8J~Zin)1*DQasgxGSkLlMM@>QQu%Q#W#}i|EJW;6Gr2ow}
zBhh)d=fN|wvhMMjaF1?b><M1r|C~9hhd_S{GIP3{xsq<?bipS5Pc>+}c{-YFJ!^cY
zRxY2tyb!$@!<j|boufWFPT|crFqSBgfs9#;_L3n-9e?@M#S3R|P~>O$^}<VJJezEQ
z(2L!%;R5{PKt%9Ug<u!eUOsnq<-(a$7j6Av)~8AwH->()Wd_&xvk!S0T=ZQJabF=z
z^Xl>_U#GqPXlRVRq%pCvyh3d<)o{63*D_0e<Mm16_SR?T>eeu=>6LaFER`Hp@=U?T
zMNkp*BEaGSTs^+qO8_Ema!Rdjycn9wUdEU{`*Ej)AmBA=@`Qz2HYOuJa@mNaHg`os
zUH5S11rwui$`KK_`|*&{r?5m#_oI2@3P@!U4fAq~p<G<Qb90MR6`_zs+))FwvRGz8
z*!hL)<AN^*Vd?I;V)W4>aNSlHoFI>3BglZEuw&d24kGQ&*0yFa|4g0}<5(}03JaYc
zso*>zS83xz9p$Gve|8@!<|O_rlhPW;-Q_i#^%k#$*UCeZ7XCxGheTy?=UAae&4JVz
z?Vvmg#UrE3E|a`xsI1PF9+n$2so)Gj5>eOPoAGfiiD>Fv(Ryr-sp%59BUTpTq9Sns
zt24u07Ab4^uGW+^&~v<PcwtT_GjsP`MO5mO8#g#dgXhs<0!Ww|Fa}eF>{iMyMJn1Z
z#(FQ%fneZw*DQa^yJZwy`;kLr%g|I+o(o3^gHE<e+3uAr=ey0*^qXSH)}2_|E<Ty6
zK#(za3pdfCNB8S>_v`h=V9Z-p!aEGh&I(c5`DC>Pmw_otdt_*gaomBOCe*hYTCzXJ
z%b$LRQO{ICZR*I!Row4)_f|xGrA4ujXfgo!&-I22)9YSzaw;=HgmO7^f~^Zwe64_b
zU37@nmS<t~r-_p52V<V(FiE&yM0qqD4WATFq^Gc-c^9!}#oT5qC-Zia=kZ{#c<hhQ
zeh>^dA25*h4ZM$(8o}!eVEKv{eqJqXSqS<mn_|qs5k}E*f$or2g*Vt2{d>JC()^_7
zxJDAS2(O&a2CAf<ffr1>c#!L6t{3g%7sC#@&H-TBuZg}$%Sk+9L;6OwdDD@>Fxv$`
z#f+G|0%+o#M>($RQ@{Z|MK@DZ!a0F21+t9|JhVI6PH!h3bfOr@-f#%a=Xy#}4CyR-
z>QdSsWO=qRjIPH3+^1UM324R=MK8-5>P}B7t$%_Z5i#^gY2Q%?$&Z(LC>R5SVqyRr
za*JJA)I|`6!U*(i8>>l^|7F_;fKiLzftqA<7^rIU+PewLOWWb`zY=IkeHk+jE_J=M
z{&ihn1N5eZIhji${Lp7z0lzinV5K<FigDAIhlA{v@sbiFu<sWG6?oI|@48>B>9_3B
z<@1Pv)Byex)$vi9W!Prq&UIjDY*K1vy%xbvMTj4EDm8pnl^If5=O)LuYDbNKjOj)o
zWMm<m)_K0ULtQ)%H_G|O90(nI3~0N~Hb#J@Puu8S4CpG%w8ercl?%5P$f`xOkpEn7
zxCaFdM%BkDAFcNFkkQe8fT^C8l`r>+E@yQA9XQ>f|F(k+c)o=v>H6iCOCOKYLJ?f$
z=2^e*d^JZGW&RI){d-}rkI1k+LB@O+1CukHUU7x4m8@?#^D)dDH{x+z@={2*SHhIp
zv|hVc71F9Eqd<toQh^}AwAx$CN8?_nq)TEj1#3ZcoxpdxSSf5imb-4vffAI~u-v4k
zAV7OYs%}Zt4P6rkuB{!<7m7pcZTJBtWKXXse4_OWd^YQQwb(x?|8?79dehNdVCrIA
zDuRV;ZeqsyoM_7_Vq9qr09Q>dI7E;6uBX~1vE?bXSvC+VP%oebTEvirqj!|zD}#)F
z$TZk4O$*VcD}m_$?21h<Nt?}LgsWG~7A-BMr>=8kdiKvDAd3|{>Br&>K-U&uYlcCo
za&-OPV0o2a>V6&>npbsHhSFkouG7<HiQw_(D057*2F5ZM1PBWoa|e(L<Ex}c(HTJ`
zYKuDwXR+&Ud}B7p<ge4bMH~25QQc`VH+*m4(Qp%sC`=GLY)MSFAk~-cu*Fi#Prg~T
z;Q`k7$dQx-@EceRVg}t-+*7-w^~Cp`anCmSRhpr@swcP0#7SArq))<e;H81EmUH+U
zvUj9LP{DxSrYjr?$v6|Whc+yRtm+?X88c9lab%v#y};4MN>b@*>m{3W455v;&?29i
zv`rG3%Vf#DO0ydtM5tf>!nXfqU8*v3Yr)Q}qymB&DJ#&ilWyG`j?MlRW#Y9E#XVrk
zkPARvkyC$wz)tGZ0q`%DbTkb;P46{A$nqFlVK<O~u@FvWg4ih<32QWHsiq?9YpazK
zniGz=n#Uk7XB$)2JULoVp%gIUB`UEpVW1@JgKI8mc3?qMBe~$fJuTjF`UZ5iF(>TC
zlSqeHGScbNp6HKaYNRDK?(zUnZ5MbF##-WJbE@cz)hx3J;FH*kq`hmVp~BNSX3^oi
zoYhSrAiQQ|rl0`WnjvQx|K(OuN|+$L&v=0<tOehlKm)#Kxe`Gfr@fdkX1*doj*lwk
z>RlTL#tSK6wY^~-FdATuR{;kbHG1GDryw3P4OOsIkz73)t4E%wo9m_eX4TDvmlgl7
zzoH0T$cv~{V=m+a>Tn<ET*5`9N70je?b27*pxvsU!|HwO8yOs<(nbU?0c4(~$Jb5&
zhbi|p6C>5&!WCJtPEY0<z{FNJYV)$*94op~h11=F{aq-sis>31;zTL3>Sttd7;XMQ
zRgIA)eO-v|2Abztiq_<dLJ9UF*rztpk71$2w#ZR(kGTd8G~lp`!Duvjbs!p3Q9x-a
z3PLYbA<&C`FOo;(WD!G#25G*`kv9Wl3R0(%E6>x}?ql3~n%Ym|;?p$t=y#u96YljV
zM+(s(MDz|IwvW=zr4DSy^#p_}a_sRe8GNJ-EGK_(1<hmrXJ6bS`3l1;h46Ml_X*D%
zsTf&;Qc-dWN*$Ta>Bz+Pjs^>bnYuv{f@8u-fasVf5_0>2Wto^x7E#_One|3cYDsgp
zTKw!>aO?Q`0(O#Jnka6RE*pr`<7y&Ryd|_<Z5m~N2Gggq7gemID&pL5v50#H^mQWP
z(A!1`p^!}SxYST4K`t-f!kCRS>A5VLnfzRK51r!STn`?N9)$JWLug?2P*>TbTCW+g
zEAcS8snS@PU`x(D?oC~r*qLH5H1Yy<!)BEt7!rF%G&vXVN|QnaU`+G!`)+-u$y8~V
zNMrFzlfUkHU&mU{AJMqnGK7?Srmv=f?&|;`6p=}f+Rk8|9VK5VsDTE8dmF4?2JEtR
z@hWdUH(H}hOcfki??zE%&{ma8Iz6n;t~G^<&{M%`h_i04vYk2I&e6!eik<FUy6QGB
z_b6sxF-nvuqcyV@s%KT&<f{0u7CyPJmb6pOr8ZIrY)m#{%DzjugGOFP9wZ<4Ep^MF
zhgX`q*|`M6zRCithO}-WKM37MKoM8GCn1$G%b#h^nrrQ4By`tJzDsdbsYov{gUD?X
zfO*ZLbrE8bb2^#!i$<QRUq`!5uZr7%-}^Yvi>GeBxk$n5l2_3!GgoG@SV$p4JuE2u
z0_W{@etZ4*lm*+6PI<PVqj?j+*Bu!F3Er>b>otl+r})WYX+NzM*I5jBWoT!MRX&?2
z<Fp8~sV#cRhu@c<Tfv6R8T#mL>6B~Qr^8LQW{mS#)nJ1+xk98WApLNh9E`K9V^C$5
zT;ag~*2{W{xJ-SXnshE8FQ2^(L=v6MnLKO`fd5Q%=35nof}2!Fr|F{A#shVEnDukn
zMeQ@Qv$Hi(ol6&vTGF9x2svH@V1v{wcKYi1$xR0vw3DHy38#W(z2HUifFUf#Y!tgM
zOY9du@l?Wz3+(%|Qwf`3;_^nF0s-UgdcjGY0Y*bO-_2q*02`A@4<vN9l~oSpAiT|O
zc<VR0ZrWYnYW4r~QGM4_R?n?TZ=o@|f2v;y-dNOt&(TZSaG+kJiu8=}^D6Zv)t+6R
zm#9)Pm1Ud}z|&D3ryN5I8jbkRb2SW$Jddc8D(}c7AF_Omh2W)hm-NH~6NH-`(_pIt
ztCehXR3Sc^iA^H7F<c`J*KKTMMj!bEL~;)vZuhT}2udC!JCPekd65h0YEEXx247E_
z8*n&uh8gZx3f`ro-odhu+QSTFb;E8bh8rh`|2-Yy0*X12a6;ar){;T9<t<%Dq0d-H
zL$9>XeMNnowTAf$Zd7{4TDhtrFNkT==^NtzbDbh%E6rQVr&y4Uw#y3<4@LZ3d+55*
zVzRsK^bQ6=CPxC}k*RXK!B=6nLcJ-gU%HSiahs+fnn71&XIQ>BFUMN}7Ld2E!|;sB
z{AkolrF%3?n9G=1HxnKS*ub9F8(z>hon}<IaAwi%6wsQCeY}*4x}aJz^TN}LX;(h=
zb;V0DW%CxO0>S9>dY8e8+25-R3*T@lHd4_oinbR62@MFdOx@~idL`l+<18Fbrb~ct
zqg1SrurRUPjfISemPpwHR4_RXtmYuE@Sw#JRQRsCHXcb16h&%QY^Z{RZ~XGXhu=AP
z^Vbi)_ZJ7>|K#A~pB()C2M>PrA%4T#v#1R`0@*;I+nR9AiIj(Nlo5%@Lqt?NAq&F6
zl++w{u=PMREb(1-t3_Xcc|w6g@pDYmtBU9r1618mD$!d#>ko4it^gl6FLmx1nW%nS
z=+LLugX&og$vGO02#MvI_x31bTrbkS$?f5w8y0AR41Ia0cZJ*9tM@2m<>x-<6r>i9
zG24eKw^I8?9PVn5>}Ggo{7@nZinHenbYfL|n>*)%CGYCQWFkvb(v%j8Xs9uLR-2S#
zP@4#(aX-lkdhIxG#~sAYwBI+j@rtzLOVm~8GF_O7;kJzCP8*|cv`rFv5)n$^u2VOg
zI8gSj8mg%K*te<`SZe^0z?`wCx+tp-b}YOQ)x_4S1&(~N@eaT9%Y$$J^!~jM9{$BQ
z{_Uf;uf!?xrqTU-zqtR=_YQyb+rxL>d-%(LJp9pD9=`Yf!JGeZ`0ZbCjZc5@`oo`o
zS^oa?EAJeB`+eU3wkJFpH@fj=D>{$vcpSO1uX-V^XeWW6+o;_kJ5d0aBn(Uth}F!a
z^}#6LGRQ;tIexc)Mjg-|(pi>P;Fl^&v8$6J;FzZIq=D8w{MnZQWB@xXefYP(zJKo>
zo<5huZy*09l)nGrI}iW-<A*<kI)C-)M?V5!-v8ih_dhgH!t4eVwa)OEDnC;Z5UuD^
zhW4bujr5d_Lq1e#8GuRH+{D=YK?u!Mfhg_WPV;nK1sW^`QuKw6(#=t%1_yMei3JtL
zp}5;89?l(a7)nV|7{#nJf;*T-=-<EB`Czwq4u17#U09_qV8Ov({`0|m-viWm@U0II
ze(>(WU;i)o$Z;QGpFP4rso_T(EmaMU*r4^{*S>xDwU3WJEI{7P&G@m9$TU%kL_EsF
zU;GaM<bU))VW*B6=Y#LxJNV#Rp*=tOX!Epdt{xs`s9e8vpg??*9#NR~NaXo>l%7-r
zrCl-UYL5mv9J{Q_N8_GHAz0jqH&mtN@WzA%;YcJuxMWZZLV(7BjtntHUv=gAqmB)0
zy@(A?Fg#PX6lg45({Z5n4Zs#`0vn#Eu$A{zszUh8dOB3PHFafx_XY}y$mew9!6qCj
z@i1;paukYA$|-t9{j}E}&~W3fsjt%v_0&~ru97XHx<Qmz^{J5CH^;?2jckCY7C?oF
zDn!iJm@<V!oe%EAZ~yl2pZ~^FTuh|pn9-BFfLOMn1>W_*F!25$xqYr19?rwB|K{Ku
z-#+}o>j&?D<KXQ#4!-{{55E83&4@~ZyR`u-Gg5oBUp*`@W!HkISqcD&SigfGeiH~8
z842j)0**6+-~D@UiTxxQ7mc;*qMR>tsf~hyNMA<mmVVhQKq82IsxLV&=~g0@lgQ`e
zE<D3kq~}8b4rV~-Rl|S->xGZ|+VgwYRcnFl4qH7>9E4bJ>avcF(K?F<>XVUcO2##I
zeNZCT*yOI2L+z0B{Et{Lu>w_##t!H>9A9sA2H&n^7c+pG@4dqJ->j*@N`-`Vi#}G+
zCA*q`ojRmDeEwx}Z3ost2}-Q{c;n9>{L7DwXm#*g5D>lv3v&P7*Y4kY{ovluKw<*2
zV@}6-a4WcRSiOjvo<Xt!BzcQXMm7M@9#g`yi?f%*x=KnHBvqsVN!hP?hx6v?hn5;l
zy#gtPxCGK93qS?YCm`*ur#((gxW|IdWH_Ym(wfnyuYd31@4iB<L=QgvE9AYu_ZOmH
zJc9CN%@!4)1)l{f9IMNh1|GyQ(3sJ|7T>sBr6{ipWW8-<fG~=z|Bl!X|J`UfrX@6M
z_uq~B;!V4owr`a;f+MD@DDRy&8hi!NzMWLHl=bCTYtX;n^s(X;Y3Yz7iF@fb`hY3@
zQo}!YO+3MFrkdAFt!gf_eX(6aELcY5z22JCs)xMsa5(tmmt~8$l0DBZKr7YYi`0(!
zN-?d_Gdi3WH!ih4qVdI}=!!`xo+s}0r%<$&o?ALnqrMM>0r(}J-scgyGDI>gz&Z>W
zZ-BuW@^+zQmc-l@=`WTjB`cT&VH4O=WxTG4M(J%6e0Jsno1`!oC=;H9t7cq()j5Zc
zJQvcHt0dleU25+%x}fHgl!)$Etz>R2`r2+^5Fxw9Nwn9#K3pgki=jRDNkQqVxWB}P
zqf*~2b(cZqCf6CO*W_ZZN|S6KwDdNHtsZ+d=zJfv%`Kd7$qNMR5~+6aD8b0abcf<a
zti_K!0G_TIhIiX%42bCfo!CSeM%OG-0IpyB5Gb1UFlVZ~-1gEWX`7N`6W9z_UlPK3
z|KO`%Irz;#J^1h&2XFo8;m02zy!ZCuo8OdWjFoZ=v!9@|ZEKi)vENSyXW~4mV;bqG
zcHz<sH7}TzJKh%MT~3Bcpj2p_>XVaJ#(6kLX5p9=8bv*K<#vO{vQDy&g0XBNYX_C^
zT<hJ;9aLf~5aA@ooA{wN|23YW{Nz`#Nj8@31@V@X&OKn?`o~Gq=LTm~*#TZBI>q!<
zRDq|}xGFu@_3Z3Wc4UrEe<TJNdX5uxQ8wA7a2I+O0+x&6F@)jkV*JDRK6&u*dqxPE
z8h54ZER#AVJ-e0s#X?F0L#Zq#<~}N#G8P~6y+9e)>c5zgwMbWp3ZdK7p0)ta9Vb6E
z;9{kKFF~2Ta9~}{JS}AQ#sXywJOZD!kCx7h5NyLlA~HD){I(twtQw$C9+XeO=R+bq
zSqqu?+yQi!wkZKZa~aK`l?j2c0wEnH-|=;{JyNT9mZ^%~uENj7veJaep3X(tzm$8f
z){#xjV$h)_<m=Goxs|+qBd{XMh=Zu<96U{V$T)8l*5a%2SR+NI8v{dqJ>FGuXp-a8
z_G&L)e)-(h8y8Pqhkw6x@!ZSjF2cm-l4m(1#+g$uy?kofemF7r%-pk|S5?nlym9LM
z3e>ys(wVF0E}eU6<<v#|jZwQ=vvb@+@Ed;g3|uethI6whA$jJACNC&_qI96Hm1vq@
zjQ5hk%fMcD>X<@sAWdSAId5d5Fl7D<{%lmbb>jv)-VM{<jT<51bTCRv(ow1UfcEJf
zV0B2^)B~+a2VJi?DQ1G@CmOjkuzkl=F@&SDlr(0R^VDEjH2RvTumHM1q%%M|l1@G8
zmU!o?p|CYq(k<Q62uJuFv<=g3c(z_naVN~5nv%&bD??rCZ(Hs$;dlld(>>BHRF31+
z^$G}hMj4%)*@}Cc010D+!m@?_oJ+(MhAK;iQe;jT_b}7U7Fr4rtCS5Q02*i1n+%(e
z*-lViaC#w=T=QM$2|MNwMtx|E*$1V83%zy<@d_PKtfp(l5x~n5n{+#XvXqXU44aYb
z!M93}K3-C2t3oIaicw0tJN3HCO0d)^*;Mwte{G|blyK2=(uH}t0idjLC#H%mHXlBm
z15jj{_iC06>!sfJoopKm07yDnd&HJ;R88qg>a|XKTSf?16+qn0lP;PNQi9MWwYKL8
zpRwGhU;f>}8}EGj<A441hd=rB^{?K)_Y1rkdH-Jy-v2r4&{aEpa<=nanO@t(mo;q;
zy)a0+F^0qvxhrd^JKgAJI}2NBr<3&LCw8c=nIv3(-piWuv98%<S%o4hSM9>Ae7PMD
zVBOt!oPCi~CoasoNiG*_lyq}Zr?ye}ucl7asM@AdS&3EYjb2>2bWyF<el)<P#2eP{
ze{%5NZx6ovZlw=GhH7c_LZBa&$|yt?ZL%iK<FUi0ZlM`D7MOf*#LA}{%lkEpM;ACP
zYn1eEr-Q6V7cd-WMr3QXnY-Zw99W#fbtyWA{TjuFZ0>n^T05l*>JJzdGf6eaicuPl
zE=8=|tKZ#k3R6<E9SS$}u5pmCrR?+vs?k;_xt+F?E9q|1y^6v=w&}lHoXi3M7Hp8-
zHn~@1hc`Ts$;U$LF3LDPO8hGJGGN*<Aau6bOyN-ne;b%hE}}x10?zTIU#`}scars6
z>2P`&_ougDgLZL~PLm&24Q*c?zqZAy7BDj8G*c?987ewK5i_1_)ZUs#jcYa<@<_<-
zO!`3JeA8Yp86e~$n}B{&t6aS=L-x4zh2(7dRf>k>Ufp_*vGHUzw%~%Xwc5orH&?ee
zoLAN&x6l=niq>;{)6w)P81eWMjDR@m-1Kf9ZE(P`J@fO)N%jUce<tf~q?;vusPQYy
z*(^dmC>=*Yph$=&%%{xoDzP*r>P1)L?GcC|eKe>i5azAG07wMC6!%7eN_%HS+e?}y
zw9KH~xy6fS%_s8{x{`tjQ=j#3PHq^U*)2HdtIsV%zy<BIU?&2Cwc;>jXQAL3v^_u=
z0O+3C0ye3x+Aqcqxf|5)QvE9RE*034iJwe}Q6#>VYEj*ZEg2HrO<UF4UNa(5Hq_iC
z$HSa^Re~3D3hN3<qB|+-61saX#2sl0&|7!vEsQ5vIR#7b&I6N&Y=wnD0g3R4cRT`<
zJobT#s=G#U@|!pX2odtQ0h!9W%V8pRZYz%Pl!!Y0RB4kP+`xEdM2D1|OurTD!Z%5J
zmI6^tC8<>~_8i4hX)hfrgEfzzXBUQwHIs#HgRG3Gm#GVxLasV$o;AwKsTv3kk|`3D
za;iC_eTmZmBEj1R4v%YCc-mv3)gR?sb*G_50ZT0PU>4yh2O$l45^7E+B3-?})}}^$
zRUC}=E<u8?*x9jnq^g`%R<6)JX;?|AIDE_QmRzl0*f72s2<%v~XAbg@Gs8jC8hbK~
z8BviZG-LA@LwAb&%h~jHkof~JyqqRG7-R$2ccRXX*yAaGWkVd@qDlpPTa*@dX0nmG
z7pzHEDN#ujof$cz<wZ(8EE{Oq53KtwskwqlhXWNcByT}Mygz|u$-$eyIsEqfrKUTp
zgiois-6dim)}n)tK0pUSHn;ui>xV!1YDZckI5vT#$COaljXBwWIZcD*5fvAT;8$8j
zqzm<s3vMNY88DBdyAw1%q@>co>;v-Di{yodNuA=jnvouM(`(3cpQSAwwMY4Iw5<rK
z`5e+N38Gh`UNZB9O189<x5MFdJw|u+j#tpCz@6jgbDxVm)pHSXS<{uoCdgq*vhFOV
z-lZ<ry<m$A!eh?~MlXA++a??3&bL$EEfQ5FvwLUpN{x@=PDdN*8&pgvWE;FJ2#iYa
ze1l2+rF1afib4V@=|Yu3rn!Oy1AQ2}Uk@Y^UcfTB8?Tx^a->ZBh`**nq4{)YFj`8N
zw*+tGS1}9v#-#)GwS`z+z@)%_$s>=?X<gs5!yAy5WB}$q*%iQY2J3O*-dP(Mj$0w^
z;H`41f|)o4n~^tW6ML_-8;p43&Kl?uFpXHa8O@bk+qyuvyFf#SaDD>d9BJAi0^<&S
z42@Cv<J194qcE#TNAPWkP~iJA2vm92hX!lY{aDPho4@KjKQhX6DPKqsV#S6pI>gp8
zii_@SxER{Bn5Pyke!XDE1zk-}W^y?DeXMqlPH`kJLs@ioXcT3=7}by<>1-?CBI%bX
zWQ^zCk=nTgcS;#(1XIO=Qt_TSY_&jo+IGf_^nM7!Eg8?EYCiyw7elB|vWt)S#Uqw8
zam3woT}`fvJHzC5i@Vrtnk!n^DTE|E_tM!5FTGGap6j9;Kpp!;X8VoMmJ5?8mp~ad
zQnpvQNjY;&Pi7L5X%W+&lvrH^rO9Bj8GqJ@c13e5N1|n843!(UFIDdbL}CucZ8-!N
zc^zyrsZg~*yb@6f8eIw3lV5^W-H-zgu+4{JMVP#lhJ9g|7|U~A%d-&Lb5xopZ;r-<
z1lDdCKM;tOoL)2qClSELZ)n}L<*OZ=e~-mB%(cgoc|1H`42O!2F>}@ZP{vO669cjd
z?Wl$Ph^%^Pb{O<wl+$2+A!H-%rTJFU5xUJQB?3etFLkBXHf(C7RmO>~Q4iBi+9`T$
zLCd?OyP?MHWf4pMbOgw8iX1Lrjn1Q|Qay|bHqdW(qe^fRB2#skX@e|<c~%|wfY5~l
z#?>Jq&WCM#9W_Fw64)*2>t6ZZ9Zq*)C{w0pvj;#El{TcSRPq=LNYA^dh_>se`8!We
z?4Qt4Y>k(0r-R`r?uORPwI<}^Fgb1EQ#N*wzWAG5V1M~GFXX7i&c&@z;S|54j`2H`
zJ=v4=4QqR+On%l1O26jnoylcssuU2Y3-WXU&|1DGqUAG2q0**JcJ~7UWdP?|00vgo
zfRZINMvn<(YoC<44u)nSZt*(YLUzjZq~U)n41NtyQ(^U10P4JlyZV3%*zpFqz|wGL
z*0z%kNes1rKGMLYPn=9}!Mvmmf$susjq+qA-KMD=Gwm7WiSU5OmuKPVX!Ww4#qf}@
zA!x@mDQX1g;pkqvj@o@GfY-BY1;jXtq6X*_&MnabRLY0FT1m_pN#jX6t<vovpo=5a
zuajOUn6c5ShFC)4umRBo`XSHkoR(X3Xva~e*4ju17`mU5n*r#k!dj6@QwJ)Qbru_q
z>Gb<vHavqvcJ^$b-=j{qIOY8U<n7$2=YsS;>*ZNDX(g!rsMpS8n!60JaMZiiLswJ~
z1@o-eip&;3@nw3h78r`&RYf3It&$^?Q57YZdAJeOQ8>a{H>3tFW0||mEn8+J#4#KG
zU3*yjETM$7-nC^bi?@qvGwb`sWH)J#FdjZ^rMVN$+4*OiCuX0GvVK03C$KV|R<I?y
zJ6E*A(g*Zl&_rahYy>Z)x07h@*=RfM0=TFTyxYXpZI#u*<gh3h*qy(lqElhD9@BwD
zIIxFXLKyL=Pr?Ywpv0blNqj3jh5fM`V5+#A1OZ14ptpXKKG|~5O+=i;*(l6wO9n&R
z5wWbr-h>64Uk~mtk?(|YtiXtm7-g=7%pt~QR^Znm1=3uvgpPVg!EahY7S9v(N=95#
z(i13>-tEuMwRU#nfN#k8F7O+)$9EEnx{JoyX*({&_(x_I)3ylisu_)8Xr0xwXD;##
z@`3o-G4xiIs*k6zVK`_TYlRPC_V--Zzieoa2548NME4C$lt(2sISNWNvQklkVSRsD
z@Kt9nb*Cl4SlWR!`~|(hLG6r+MWdgear;;z^e`oj2+O*%X7nvcE9=MYbjaTMvnB22
z?HC3$tJ`YgexSol8h&=uTS>w0)Axpo{kDi=w`00Mr`Su~Zbni4$hBz)8s9ANN~o<8
zw%sZMvuc+}C^v{%9gzPLzEc}<+V%M;1ZsVo{%m7*VE%Dpt!#<f<Z@BEK6ss_f_rgt
zp|H0`sl`>p&5a)5O|8l+@l;&}?Wl^-%;s)}d|`Zd;7R)mau}^Sw)|&N1sEi*h5Zcp
zUFnVyCedR>ECl=p<uSpkX*SC3M2K!T4JoHvm2?=SWfLC|DiE4O3ChU2;m|^j7lXri
z)4G}<hH@=59zpvkwmzcit|w@s$Q^gac3Y}d-VYyvJ028+Kx>Z$RNyi|{ug!vIT{cv
zRJr?=Qc6oiKvOhNyz#w^bshc9MOegcvJi9!;jKW@EjDN)tf?{B7lqi>C1xWW=1ePA
z4!`<3MymSNpJAM&pZ?k5-~HhJy>||N@g02m=6COZ^u2>Ozkl%I2lwy2e*fP8!YH%f
z`wJ-S8=dHwQ(k;b-y}t8w4#^QUuFqR!qIg+vGQcVyf!kt*>-DO05-=c%-A9obl^O)
zW)x7WS#_>sA&=zuXj<NJ#&r8rM^{yaT_0V;$(YO)iYlpY!Njq4XK(|ZTr@OFjU6r1
zWhTWx7K5C7(H^oGDBicT)^iO}0}#-(Ub7jM)-=KW$FTDiid09_3WHa_Dx0M7FrqS4
zH8i!tuCPps4r7!HS}`4_x`QW-#(2Va_P8qEOM(z;Y(-T*yV?FOQZp!i&6tn!^NU3{
z^=_3(YLP=0SK^w2hzW=Gl|j)Wj>FdJdw9Nh6kD+3U4K!3>=Z%@deO1|bSz9F)Uqs2
zV&m@J`Iy<1q3)f*#cZ=)`_e_)GIpb(&zC)gIXggifYDxj4NbY_0OAoPm4cCwm%(lH
zllFE!$7w10QI`yqfs}3NVR|EmZjdZfN8<<Tf(qt&5*TP8qN>4@k)z}EM??xH_rgD#
zj^;}BNd+;fXpf9esL%PP5gvmrOT(P!*338yHOjb_5<N&2Hz5(!M=CY)wGa*nyw|1z
zIB2@_;ct@q6wp=o=Gv3IoQBR~?KKePTiFis_@vnY@|E;jvUdH#Q0vL!=vuP=!bPoV
z267bVdAiwS+7_$WQd%--$W~5|fI1FUK=l#%*=)x>C{0owA}F8st-!fhc29;S44}(Y
zl33s@Sx=dwc##%XA*;eI)S)ed#2jD&EUU^ljZ8I96Qfu!Ri)VrywW0pzJp~Olkn_;
z_$2<orALk#UgM}tbFdpyF{*Az`A)qY36kQ*Gtkn15)gPCI7psw<|DsG;mj=I#>c|B
zS`wW0h{xp}@96WcXOC>rJjR+i7&=#&Gy|0?mry+Tkk7onQ#WvuH|b9vT%IN1e*gq0
zwgs<@Z&JD*ile?W#^$JOO(<ci8Y3{INq<<fOqa3X|5>DC|30f!2w_gn9S6VpCzjpA
zBD?Yk4twWDtL8Xd3yRj0c^64$->BIOrdhtNi6cc!WJ80n@&N0aVc6?VV!jLaK>Lz!
zGL7>{uV_f1>G+YE45xs&ry>=3puqx*Scn`w{%i~ON4-s8OcK_H1le^hP0cBmeax<!
z>>614a44w(p~OW|8d%e>Uwe&>J<Uyi85qYpSBGKx2z<R~k26LFwIjdCdW}(UXierz
zt)M4xI4Xy(V@_p2Tw+7DSYq{z>hm_K<H<u;8dK;?7&Zfb-fw`i?Oua(fo@6RU$jN(
zWxeS@8z?CccTiXkeJon8j7NsBCA$%Jz0hXOF^JPBbB>b3Ekmxd#h+U|IxjtDTJ>;W
zC&~G%H0IkvG}|~L1Oi&O$qv6Gs7%)P(B1{jU3k`5SV6rremK^QuaaJS=S0a0hK;3&
zq*q^IADx(ojItz$69D-Hbg{(b;<4l=4B3pC6d2NU<w|~BD!k+{QwM5m;t@^HO){jy
zF&)^Q1&zz%7>g`xP*jB_)r)D-#4|7q8M4e)SR^fz%@#qFZY5C{L-MZ5P@xE8>&Y#3
z@LUT4`mq@`b}b>}Dl(TL+awSxhNOnl){AVhq>OFI)UKS~(AG6j2BN6^Yl!v%vwAWN
z>&ezMxE;GiW-A2s*(#(%Gn~xf3{)E!$*PShT-kDuw-g`29n!M(GJ9;|nMxBVx9&7K
zlPAW)&|D@rAKb6V*>dlVPrv&QWKazf%E3Qq$>lHKIC$^3ZdxH+^2!7&1=LeM7g+J4
zXGvY^ZY+u~RM|CkU57x~M4tHh(`8GZ1#dBWk8k3;6nSq-fqDOT?;U>Yw})?k<>0;V
z@fiw&pUR5)jXyj58yzXY7X)=iityd74*b^U*hrtg@y>&f-#hr_Zy)~Z$7Kzza@m%(
zh+Udpiw=MJjl-Y+7*_nj|NH>6G2Z)g7~ZEp`N6}l{?oXIwlf6Y>F#KtLm8+POCP;{
z@XcQyy!Gzk>t8;6_s0+Z`K_{hY26Z181jiZ)$MP^OS7#%)Z%S{Y~lrYp?w(g;otuH
z;Pvm`|M+(gzV$BUApQFNdv9@8p~K(&=HQ!eLYWv_KY0Bkyi<SuqldqK>);=LcJTfu
z4}bSt_<i`DuOEKr6F+GdjIQ)<jXxKHZ5G}-47>?uRk%Ja(^HJUmJJj`lZrsA6EUyi
zme;@7<u)g|;0?)1rCuf#Qt6FyPm?k+^@cFxw}NTl?eS7xyX?>}H4wNFbY=<On@@UU
zegqx13_kKBAl*!D#u|h~P=XCjU~@QhMy1b6x+TaT^ft<$*ln_N2X_?Xi}HI~b5qb_
zo5`25PSRpe;_|Bm06?N6V2N>5UHqvC3HFP*0<_-4p>=!vgM+{Sd!k3*IQYhQ4&MIu
z!8gC|q(jpoU@+K}T##VISOX>3!7f*kIansxBf}mJ$B8z^+2B@E<lo$M60nh~(@BI@
zp@_+qp~-B4^6+G)Oqp}yn5bNpNdYQN4}vb%*S7XN&59c~SA`D<#i7))1V$uGdwpQA
zcV@PVp7MPWbO9e00|D`l*_<CTh@Jv)Bbe5sP{)J0Z#OeOjG<_}GKgU%lmZaC{}FDB
z!+-iQvZC+(-KXDu1NbV~D?qz=u}f^53~Wpu06TTZCO3e|?)co`d>o2+aZDXQQlG9>
z^oB48W=D%xnvj;AMxOl^tX-U6-sxQ#Wc>v5Z>60^m8XbvfTf+aaeL+{t|SGo1d%=W
z;^YnrmU2%xw*5u`v@*z1eLU;(*u-i7NZH$1+B$gWZytQ@=a`m}Ogbku<`iPsQI6_~
z>>Got5)iQ}8In)G^48(EKJl`0=KU;BD#gZNblzeS5e3+dyjvRIa4LlT!JtB75-%h}
z6BBYPZEukV6kQph5y}&bmvka)cQ874i7-V(*Aph!N(Ck=-8V5u3%7t*)liDD24z}0
z{7;6@reN8NlUv>vA_<fw5Rf?LM!<B<dG-UT;fj$!b;`TQX3-O{uz5!vlUdtVnVqF5
z;kb^5R>pMVYXlmhAhu#~&n?-(g`!Z1<gtar-$~JBjG;ogx}4w&UU5IVg6kJ0f#AD}
z8%54UkrIw%3ZeZA9x-Y{g)-a@fw$*M7QQkKVZj)OhfuS1w|+@YuagRoll?JKJxW+t
z83rS1Z^eUQKE2r`eWX-j4s`1F*2FOZh$*(wBPWY3IZh)W8l3owTGW}?VcEic(ilJf
z5$<lLvY4!F=%J$Yvq<;e#|Iz$)F;zq8a|P&hS=n#h9$DUPyhFK0{yY+`9vK`GGX+u
zih+0J&aDfsnZy_|g$Nl^u~p9d0c2d|_o%I{Qe$gw;kGI*jOnqCw52bp+3!-+6P+6b
zL%?E9^|+Gt%jyl*WxcD^g{^ox8xFH=QMW+w;mewosKh(qVB*m*tCgITl!NPhH;ad+
zq4MBu10k3W9HA5~!_NH?h#(2ui07j|hP6c$z)NCum#0XSO}fcRIfC@dmoB!v>}_3{
zXQq>E#G@`n?rr%EQFQJ=$WYH$7E7(R5fT)|!6YMto@lDxYnzLLzPkQ{(-`&EX#v)o
zo0uJ2a<E<~3D15^#C|;7TFK}<a)a&SLFAp_91$M>75s-6(5kJIdz9twQDLYXiy@C?
z`o@rF-laC*@r$Z-c{svi`me=cZayj-O8>hRcd{K+>*JQU$s)~bpgT@PdRvL3LcikG
z(Qn68yB@4|Jyflm_L6H(B3WR_mxqJw7G{ijUcIxW7I1+*hn0=tCCU<{V;677yLDS*
zCYo<X)9(0>d!X@`0LjJJHjmWgFzX*}kk`kxxK1?eNTVFvrb+o=)4?5=06s23Q<e=v
zq>DQ)=6&25vCII*yTZ?x;Gl{sQ%siN?oeX)(6hV_?|FYeS`0E`WHmYP5ROQS2!ZIH
z0w#kN?@ImX`W+0iVJr&iM=!=PPDGWU-}Vq$6fyfmCwSzE)tctD!1SPI71X=EHLnRh
z1osl%_Ki)?HKRGd9$PHf#AsgNU@YUGlT>d#=uqpxnTYl>#kpKkt}UL8-}a{djFP1-
zAC4qlWJGrtLc!$sf^SnkLIS}O_QOW5din-7c9}}jm+1M(_4L;_++wMhm|NT|^0)yA
zZ1Axo+~R}-U{o5{yGA$%`vMIuRx<hAn9T61^1j{w;A{6k{Pn|6-Z*&ce?Iuthm?ek
zjkL8B)Jz*hxtZiPIf`PUxY2M6M4mrRdI<<VU!cF!hky6C2mkzjGrEOOctUM})boYS
z?Ks7#=GzTQ;zn8A()?_;P3Cv=FcFpi6i81G2r=`MCRrsgm8hFJ#vfb2t)9bCpoE0o
zs9ds_E`M?P+>LWDpL=QL#?^B#K%+DNt^WMNb_P7)YyFIpT)d`?-GM6^y#_M*Cj682
z8?OP=-M%#=Gs+4k;|y`+L?5lX5xvK{ar@TkWH8u^o&^!?@^W+{GO>80^vYJ&OB%ou
z^=d;-$mB6DG8Lbj)ztO~hke;6-~?d%b}2E$EKxJ~yHCmdU~o497uusPkfEFCPzg*o
z%nI}0DsGoe(M66%YIh~Om_bF7DN#c-8a5--ke)icMa9}^sP$?ZAg9`ZA~;Aix<g~J
zYbVY`*RsJae06pZZ$N9A;tWt?&(!&wZ)Kxy2YvZ;f<@h;YDWnuQPM&C-wk><#0b<T
zG)#*EQE^nvLAH}qJ`)-VnsLFZBf{vgLeMb0yl}3Co`bhoO30~EPNGQtG^5M?WDwhL
zggO|EhCbr>&!>are6~yCh;CR)B{X!ttVk1OK8(JLd6Gn1!(o46W@cw+r}ZkJQFl9o
z-Gy6Z23kn+8A97>P0D5(B3<E~fzH{&Y9t3b$)Ap3VG(d*E-kY}be*Rku3<nG>Ikoi
zBih>05D<71RjlZJnY5v$4AY1;HNcg3u0IHXhi+Ca@yvA&X3Z;#BT8D_MiWE1sHjyM
zyATJ-;S%fJPGj4OSTYz3B|z&YyRB#$e&_i#$HhVOMA&H-_S%AvOxT9WHoS}nX;&Gj
zks*u5YYNB5ajN(rTjn<0Ah>GZypRmPG<fB@*db2FFv`0-VlD=jN@0jHig;y){#=hP
zA<PX^<iLnSbY(e)RMQ0#1KPOPCY73vVw7jmPNH|vc6<wdj|Pc~ByJms>Pc&})ug2}
z%oxT@N!tyBn5S2+0XL)e1k){}I)Qf4Kyr}e0E9dOY47}bzFqH4=P51;fjUQD8W;qi
zq;B<2mTgaO#F)$i;H9#q0voP_HtBd?Ccsf1wOXx)7!)w<_2hO-lMD31xZUal=W!i4
zx6k4y#;b-ZQg5_?8a6bl0#PFI5k}jG@h5}Z$@Gbine}tH6?52&>!Z!Q_3EFFlEEHr
zM1ak$WH|Fj&(5Ft3}&GMcrVO7b5acKL=zWzW5bZO89hdHmGADvdwDe5nsRiujA)8T
zq5EjEkx@u85a<X=q=H4fTY?AGi*wB}8n$55plgLHyXbwpZoggkP!%mdFP!^><3QxM
zU<aYvFy4S|f_DQz`&v<*NCbIjZ)}*orH1i*!<(5NUx=5H<5b1M162?VjFh5vu`eL!
zrh^?wNPPj0ULJTWl(ujD&Xp%Iym!-cmshu}zzUL@ouu2H=D?WS3GhaEq9Ljmv{gX1
zEVj3%tn7;FkW$8Damt4ypV_a#CV;9f<OF1y>!QqcRR*>NGYHJ|apWBiyYt}ZKfizP
ztB2qI?ZLmkeelLVs+-ymz7N#>;m>}0@QuI1H^e0V+edF7zWHrRL26!n`h(XW{`AWa
zKmPgQJ3pZt-mmeegCBnL@JC;1VP}(ZBrW0)4e)yap|}e&IdOa%_zp|LOOBI8%Aj~e
zI?F`z%7lOxz)Q`4IjBIocx+*X)3GI#K6uf5OY;?+J$^BzaJTA*mNt{B5tM*`J-K95
zG%8pIwID|l<iMQCiYz=ZowG@I7$fVPwBR^Ry7Y|NA^8k+c5Z$a7{zHQ)=7rIhqHPR
zKAaen>T+0^<1x&5i*G?7s5xTF^X71;c_q0YPj~@wk*&vV36U>|`T`ghp+KL4kl44J
zXQ!iXuJIOzxcP->j-&eGwut8G_jcOpfP@5mIzExsW|1k%PKp=yO2|iZC1BBB{lD-i
zScvrbu$d0GM(cDm@F}7Htar2Zne7;)k-<zpXtRvede!iR7dB{3^u;>47AeuDiRiE$
z?=kZmcaVc^>UzK@+TJ@TDj`{JZD)6YAjhq2usM_TroXs6)5+TT44m6Dr><O>A?AX%
z%MA5t>C0$1BxyBi@y|uEJ$QIa_UKWi@!&Cn7{2$!tQIh<urFzYIMz6($*8WH`W&pt
z^YFg~@n#<0oN(Se18?TZ7pxJa&xs^p!Q|s;JW@17=mGm8-=9|`W*^q12Usz136C#i
z5-MUFO<i73mQq1kVOGL`;^Tn?&>6LdT86-Y%F#|d=wViOS#tH|G-F114e>eY5O39w
z$)-p#=Up`#j%<>*2N@hWfPQTfv7W;d@+22^qNSXHZc~nK!onE0rY3^STut>;!<LDS
zWVs6@ifxQa2z*l?8@Zi04gc2>u&EdTP*1FzZAN5kvk(ENx1Qx>g2~(kp4uc%I86+Z
z!@$lIOsEMRL%2Uc5u?MQAN?gkdf)`YRQootU$0#_^TLc%`7#|pIq%)gt!bQUK9lVB
zyCBuzChN#%uO%$O<0-xe)7`)mngXE3Lm2oTd6|*Cso>a(PA43|Gwqoi&Nxeqy`^+0
zwt2IxXpp-}vDIMyO3)o)vUskO<2xhqE)ze5g%HfD06M)n;LXSh4VPP;vn^t#lHC}Y
z_9i=Z!8A~6xT%Vs<&s26E&<DalltZBb_d)X7e!CnMC9qf;f}No+C~WE`3N{5E9JKp
zIwl=w1JvglD3TI`M@eZjjJ2wPhuP6h&RxuM?QaPKd5o>PzNe?#lwIh70svqs-H1Z4
zb6<oWQ3gXw41<TYC7x3c!RrtOEN+k00aTV{4h+LA8wU{$ae<jv#24*o<^mkSO!7D#
z;M6Fcekh(dwPHiIi^4FFjP<mOl9Yuo@9a*?iMS*#uu%$Wslgj*7pXf^I653_b{sV)
zW)h$FcU9#DGB?=w3m|IP6<~eMRyycJOneE83wk_+9WaS~M8yT>25+|fmVvHhX-BH#
zITccYUOTipnt3{6gC`*JPBz3b6|2&LW98v6Zf`MfS_6SOIv$0qOM!x|@*n?nf&N2H
z9cBE;5l%XOb>w;&ONb9*1sdhXn{<2;xBpTG;xjB`C*!zY8Sf`c4O`I{iLf~_zn``R
zH-MD2lRS?HsI%eIemg-k!OOTwobVx@W}2lhdDznofiplh6n|<@GC1-1$~ePNfdbA`
zjOHRBx69kOP^desxd#sSV;faC-P5D>byDD4Z%<yLh4L<$|9Ls?j*?;|k*bEJS{v2^
z%|(c^+YVeF6}F+__?m)PBcFiWG?OUFW@y$-HE<GR3J59lt#==M>%;r^K78=251Y}$
z_y7FhgP$J!_qQLs_u~iO{7dC}NktC7{xkF%{O-GEz1<6lSm&3TF`1_1O++6K8W1q*
zf%9K|0AfI$zvAl$9TWnXtd!Jlrd|A`6tiiTXTZ;=ZK@xuqSK~mu6`yMe!4Rn(97u*
z{y)p7|7b?H<Z|wa>#XFx4Is_(nVp?ZdwzEAnVHYbpZEjI)gm(u3t%m5FMNp&Uzdl#
zrZ8eFBY4Tk^0gyhvFN5ic!p*3_DdNcMc&z|fSvCu%k24Dn2*+<TUn3%rk!HW3`E%+
zpSh%BNv4!nByLPIP<5MWhD)2umdn;(<vZu6<u&HqEM8eYE$=Ylm435tS}?t|)SA}O
zXUN<mHe?$pTlebF%xu%`Pxbk%*Qe_DS=%q)i5A<OFKu%!+~!<mo8%!~uc6;oFClXp
zMeI%qm^$XuxE@BKqMq4;ntsX49%ULyrs$Egl*M8S8$?0<29pV>0ieB}xJd%O|2DG0
z_V&cKN3r5_mG(=#9*lZD4z42;vGBJcr9BZZ`pBDiR)Vi7>_MQk*D{?c8>22q(ZYfN
zWSoNmFq{(EFdMQCNx@ZYu?4#n1w+fj-+XxR){iJ`xNj?8x|cED_`a+%qjOo~7bhYb
zJQsby39g(2j0%()fvT}_$Jt=w@tsl?_Wi16oVtV@t1c_YtKYRGeQ?tf>MR3@D5f~t
znBlu|X<r!<6$ZNmFa=lw7Uq8qxr+qdSNXJi@YSyzzW1+>ySmE7(^=rc`W7=>ixqE1
zVzmv+S(4jYVoG&p>r&_4N1FW@++iq8ia!4ixM7#296d@gx#+8-qSq}r^wL$<a>ge-
zBr)q#y@3-#`bN2*ibT&bdsmudYGc|VnIVt~90*0pb^tWxb+nNTfRj9TTP4|EU0Vzm
zI3q}WWn{9XR~nHF$DxN43`&-$uW)cB{W{LK$)IQyykJ+h1{jWb#9BO|YN3nvL}{Wp
zyt-ePjzwh>*5nK`odnK+Y_AyoC+MT;0FCK$$d}%MU4e{O`T&rgl57At#E;5bWr<BR
zd3tP}a)VRBQw%0<I~apf6*TLl;%^7s9@OcS^+VnyfvnS$#RSHb(__KIc<rr&9|8U-
z=;<sK!U?Z|>uv`=#qbVmwciC}<1<`!jmvVGYxJomR7KX_gY$|ozBb{B^_Qcflx~~r
zBp9nWH-Wk_4=|>HQPu|9Lnr5?@u(|c<Z_fZq*Z%$)Y(iL?nKnk>T1w-cNRVQ<R%Le
zWLcoxv6JHpUCgq6RqkLX53;u|mJ9Xsq3Y&{+JtruXGB&F6w)T~F&E0Sj17j|f{*DG
z%Q`X@KNn$8;Tu%ZU&$fQLBp&_<($(5ULUk!%nqGoi(XNCphZiL3B2;|)QefK8gAAv
zA8k1vl*k+<y<FksVBv0P7G?d2C>K22Fh^zum$9G=h&67^u~Po+YLbt(OQ$iQuT}Gy
za2mXz$CsjdXd)gvqlC4J$@wvN%Vx(}SW6~1J`k8AmX>s3Z#Oivr_Wlqw=_Sm-j8u<
zJ0|&Yc_M}8hb}pW;iU5_j;ui*-XWp5ots-6)`gg%dAzz+3vnBzpOw^K_-@iO8C_5p
zwyF-br9p-7ii=`f38<f7Fu;Z_As4+yuI;x;XUZWAX{-}9lgnn7O*42u<TX-~A}XL|
z`@fAG<E*#VNWKs=zokGg7hf-w(9;M{_X<^wt4hlTjwUS|xQ=Y97w4T^o$wb1c=#Jb
z(K@5~L|RDwR#q$e+v!iza(x?fhSseP#b{(2)~x+9S_G4M;<n-0fhugmsWt+FMY~`-
zTTi>n@Q5^IFYwn(n*&EhX3i?HslK2zRpyzrJvz!cZ-JBUVyjbbfJq&hTHs`CpJTN~
zwrEpZMzpidp69<xY*o{2aPng;(5z0jg5wAlUJU!sn$EbAcd|}ECu!!2Sh<ch<?#{K
zIFB$tW5AT;+Jvd4o<08Yn0h@v)|T5i4(P%#2{}8ZfNBe{wC<Kr{RBSH92SDRk4C=W
znGDFi?aCcZC9J5vte#?wu&iypRK1|Q+|N`dLt&tWU^gaOclUiZL&K=WFkz{56&gZw
zyk^8duCJ9=)6<}O^iU}i5oU2&-GqmqH_G>l1d9PGeR&C$)oIV}vtr01L?rRqk5puu
zX_UGCD~fcXw~?{Cpl)i_)LpBKX*MId{rsVb*2>~RsLduy9yvVUlykM%N%P@n=jyc5
zSK`!Y+(@s3x<~V6b#4uF)J}^xvunm2kjn4*<>w0J=d}7?&4heC^FJL7>(JZN*yV9-
z2Y&4}T#Mdzf_@9dk*bDP%{=Sg0HH;15)JYvEvYb9s4&MBsQelYN;x;{)wU$RpZ3~L
z2nA=^eM*PlF7nP7<h4NQRIwwHIvUEkUWfd&u!&XEAL?qD-Ds#izF4e!Wsn4`&U;nK
zOJ4Qm`wXgf{7l9Ay*^J)MsvX;=X#y8_o1pG5=rHkmE)a8cGU*1s(b|_@^<Di=IKF}
zvF(ssTit255J8SlE~kur2*lE%k7o$MkytBC*TY;aYx@=5E?0GIbG@S1y`pn#-Y_&f
zT#Q@-Jk3H>qsq0SGpRWS2~TF%TA}l>^i1?zfcHHMVPXWSXPp=seS!9s@8HViFP?ev
z#+i#3&iwI>v*#|J!a1IpomF4S-r+^Ih(SV3QXVy2BU59Hq0w3In%}~7N<U?zp_(y2
zkNW0QC)??n2UL_&6cFpDSesf?<DdgDJP!Iq`VOpZY_#=nYSy%)oFUKYgC#dCjQWB@
zTEGN<>Uq?cPuQ4zhPlC`fu(xujdMHh*9&lzG4jyvNFEtIWUTOIYmoH2aXYCqgeYJM
zccFts=olmZv{rlDYti%A(gL*v1h*kiEOWA+Pj{XEb&!vsH5^&`hn#rO_P%!Z@+C5^
zSti@un(bNi3k*J5HYq;74v)Kgim*3X{VD;mDWwrAivcI~JGJ-JT|5qzu>ePDOWA;S
zQ(=Zf6txWgl(XUNKIB0t6ET>5uk#}MbupL2oSpu8y~!RIg}uyebh7O!DHe)pAo^BL
z0ygzoV_X*Z_I%4UbTJGVnUz_XRdY_X{a7RuC4^guC6ekpp&_2fRHOuU80#q>wzpO?
z9V+Fnrh-m4^lraNjWwN5ju57Ne+{B#y-Ujq%Q%<4gKIcHWmQR+Pb?#$UlN<4zrvn&
z-rMV<npy_yLP`#ogF(t^Q%vWmG#MnFQ9DuB1U<B@xt(IZ0MXPq*r>56iO(UJ8Vstn
z{o=&5mpz`b?hL$RkROeYTDahKui*8vg8I-FgIIiwIjgfXIA3dVcSTuz3qw6tf2}8|
zt=7GmgwX8Gq;6&7wy_68N9E@N=5%xqb1TcYW^mxI<^>NJeBD})^Q84^eiECSYeknx
z&7!TCb2AD#${bJK?OY8@A7f-tI^T-Uup0piXQz6d0onn(jo`UOpSxLabDCw^cpa~8
z|KM3@c1r26yRf}ZYo`hJ#Z`01x_^ix@Z8XH<=2EN=s`X00iEi#4VBi<AevzzKf@Q1
zEvyLxse5IqLA8BDpD+LrYre5^iE2I6y>lOdb7C22O2vLwr?5Twg-(khLi^dc#whI;
zMJ)A=HnefAWyh4J%WTj}SvygL(sT9WP*dnyu5rEOaxg>&N>t!HGsK4{Ffn3#p6I+d
z1R!TKvpOq92`n)tck!gNLNviO+tIak=w}S~?lIy!Teu5NNn~b}LkSu^YB#^nhtvi@
zV-9}z@q@ql$Ah=uIQZuOKKQ}AsQ$Ts?-vig_ZQI9!AF1d@LzuezX?2-N5hgNduoD9
z<zuW0v>pg(%oqFyZfZI<4*mo;odJ|0mVF#X5mms19Y6cp!C${~@WHnZzVflnd2&>|
zvRr&6W+CUJm>i~^>&aGpJIzJ|eXoyP(K@E&$>Vi2Od(!q%FFp<T!7fkE8epiv!HI?
zO*_)L>gedK6LTr;pfxVflZ{aq6>2Cl1GyTd`Igc^#y!V-NgiNn&$C4UcHbKwFr26N
zv}>++|E^>8=1j>iWeQ#F9iz*oNe-Rk@hS#gG1%TrFZ9$5v}?LTrs$@jPdDrQ8+qlM
z4YgFV4QY+RE=AkuU#ILcZki+RrY&XxAc%U)bZKo<1M5?$fo)gTaF0P{@>;bs9{lXX
zgSXy&QahvcDEa>kl2+m!yHERwCr)d%`BmTv$F`@3UY&Rohpv=(vFf>C4v2S0!2$-P
zd(<XC+qMftO4gzPz3_0C?%U&`4Hkly9FK#bM@P30|N8KUfB&S=4LHyLA7dNJ-<8y2
z)URATE1tWQ5RTQGbRIQv_<27ak`rqwnM`vBRSiZ%<(u}ryxHOy93Zi5>k};PcC$@@
zN|&R-f<Q_Ufws{qt(WH8P0vFU?H)K%R7&bWdv6>)MakkgX5LfS^?EkkimsfoE}Dw&
zN3R0KcJ{@dau`)%vBccSiM!MB8pjqxH2`d$UoYDjd)3i(y=TJ%p?4DUyQm*wCnk)!
z0n_Y|998N|+KTF8xyT(`@f3j-093h2k%)LGQ;zW~jfxt8@y033XXMO#J56>P4#JQI
zRpIuNC1$N?c`wJyTJ8duTFpmkjpR{^Z0d2#7Z`&hpLuw$s5dTHdWu~`U5EBefFB)8
z`W#Jd1+RGYLmoqI0RYhTd-;V?kv23uR@5?A+nSW1RmT+`pi*F{;a-qe5TvpQ%xSE|
z=)^J89z(V+E<PZm)-okZ-8a;@WDyDdt{mKn$y~pEt3ej6w6F8_AW3?fR>vC~7)pv<
zy~$*Co9VD@rC>3OuKG=+FiwOrt2KkZE-iC+u5m3<l)Yr=qUNzQSHL|#$hHYh>cy2g
z(vcfBjuYDdqhMJ0U<fokPJ*_}iX=?Ogm9M+*UVom$F2Xuxw*OHGv_FBAi;TgG}wqy
zdBaL3Npmds?HmpIlm@;Bondnd1BjHBSRI@*j!y|;16pYIo^|$A&+4-<b{&QU=%pKY
zC?(r&BmyV|Ly~aSHHmm~7$2BFMXTt=%180ZU<k&J8jm3E&3|cc;ub?Kqz<SgiNcCe
zqPrJ4To&&F`bn=wm&5)C4zIN6>%CptrF1=4!m4i_8ntu|6na#)Aqd@~*1KYimF;cl
zS{2NvRCcJ<ntLti-1doEKyzIvFB0V~;9A*bnOMSAe81)xtv$M0DySOa=m5^1R<~+8
zj_kb;*p2(auRc6@@9*w^^0k9Ee~8+Vx4(^{PyQeF-n6}q<4P3%eEBO{j&lKsAOwK+
zBtu&AP!yf;jW&yN9Gk;SH-RSE7KldB013$9^LUbYOYAr^*Un~Vajvt>Ok#UxvUrVu
z%oQm4)BJ_E&N;PrRRg4GTgkPbL`2tKr>ah!bLuSIE7<GbzWM#91%*zA%A7#=+Jf;p
z?n`lJVD)24Y~ii_oP<n9WGiBK*)OU-Ae(a5Z5!Sjal2W}EJRsW5wH^XEbrd&RQkyd
zVB#0qG2Mg5pbJ`ChZ&0OFw@9pTdS2-es)X4r3GU~Dt@$3j-s<RTJH~KyX7G4Zeg&4
zRL76nOPtz_d_rtLA_6IDB2T9kvC<QTGXr52cIGElJr!!zE}hfN^T32{^6*@~CXq;;
zxG|US4yDrS>cn^f2fADpFB;I28<WTP;m;}tCeT5w{Bi2K1BU-ssXL<R2>q_ERah>k
z)KVfeku{9kAb3?AJZIavU6i6ih~10Y$!-#St$t6nR5oLsNZO@o^3v3>kkj;42A>E=
z^Qz~J&nds4hGo`qT56bOAfG$kWCLc!fPs#dMVIR7jl3EK{BG0fGlM5IC~7{jq|xYi
zQ}ofQ&%ku<l?X>l<}A_KaSvGV9uVgQ8@_2Y5C{TIwaL=kJ%Oj(*jV2#KHlSE0=oJP
zTH?7I?51M&cX5T2^)sP-N2~;A`#m$2`>E|ltr+0zAU>rFQO%cEA0GfD)yV)DrpVp1
zr72Q1km-{M4|weWHnrY1c;+QO9u^LY3BDL|V96l}T!}ntagxpQd!t4M;dLFWg>KV&
zeDfyQiBb!Iwc#1kXSNXZYNAG@+fCtzBKB!?d))cAbg_z5y#kKnuy{4r@1E%%OIttE
z-2f-0TASn%TRW2I!n_?kj2=hR;EU50%VnIw?osF10{pudx4)3_Tqob!chY9NvJ*GD
zNt$f-@XbAH&-Bw%t$3pwc88~$?R#ct>-WqScTex8l`q~~s)T80aK>ihxmSG!aip5X
zy;N{;@<of4=NMPEP%H^u9)2%D#m7^2tuTOXF`_b>1BWAavk;&!<7um4X{RufH>0uQ
zloz<XSt(qOkj`Rq<5o9MzJm<ZL@rwYybK5|)gz%0#!BlF!RmqAok-w0!M<Y85%&#T
zu{+4Xh!pJg7fHTAJmJfRqpqx7H@l#O_eZ$-Q|^axvg?W_MjpKl=GnMN%p0ssY9pVk
z&)&;!GdP&&PEv0WjLS$A!+q&B%gPI@Pu8u8?C6#!7w=%U#^*EU2IJZzxDMj#!pUoQ
zsXh0Ka0$rqUS@E-mQq*AND@FK9Xw{p^B(ivKn`+T7ya4vvQc;2sOBP@InBR4A-T_e
zvY6XZafpWAWZBCc=o>T30|*WHZIeL03>HufzgTp$vW%Laa@DBt$h#S<Eg6o<(n+<!
z%@A$75%#k9K=LXMBY(Y7pI;DEXeB2|dU3<d#^uY;;>s<Un>4QhZ<5eBfyB1rA|tgD
z)3~jHNf`4^3|w?hLDW!J-At-9L_1n-kkb^n=f?u~h(wlp)@s`JdMBn%2HZ&)<E?`2
zcxyZ8L|yQaj_iKD89)?ObP-FpU}fqgtFxGNhUm(fO`;UktF_s3a5jva{b0G>U`2uj
zczb{X5RC%e|2L`T`Q^o>iz`d)mqW)bV*hMLrv#g#Yq;@xmENE?C2R)SPWmbaa&||O
z5W3M6GGnoqXsTBY9?SSLWlBYAaahv3YsAlR#KVC^QjeXmbMp_s9KHXt={-*RJ(h02
zcG(tTD~)Xx?x|EO_Y{=WW|{FwF-U^|y2|IO7=hQ-GV1U80z&(OLGy6Z-P0m0;94Ml
zfn(M}y1P}F@&<<{WPe!?5p5U!hS?v6Gg}K5$*h^eRKix~%ukr2it;Jx^RP6wMT(4e
z=q5dO!hAjVvjQxJt?}^dv8`b(uM0+)S1oS!<7Saz1XbEpDP&t{^?J7wH$hl)y=zEY
z;Zv!Op5rJqZwq+F&+3>{;OLmm;=19_^t$1V>3Ub-?P8v{Qi*!6MMJpywW;Nae^|C{
zjK>;qn&IidVrACsVfpOfth!okVbgOt*|jQAgK4@AW_T}-o367HH?xI#$wTccM!7HZ
z`o*|uSv=?<V4G#$@>{zF_fnVRDJ~0M)SPSS=uOH77tw6njHuCa3;}#!_af&I1ZK1R
zf$|BGQ%_#Rc46uCf2k@u!2DN+?2Zx3-4=SITZTi{AT8pij+itDliX#2>90T+Aks|+
zi@=Bmu?|@QVV;oGx(w~AF&H(*P0cRGaPFgG%3>67j&)b)%P^-A>&zdxjJ2OPoIE@n
zZG7px#DzpRWIVp;C#kZ#)5^L_0f%HTn5AwvVXX8cNnbi76XK_TEQk%yT7dumV?h_S
zEH8br;B-o7&85I<7BZL_hiR0AFj@u%&~w*J0lwJ*KM;B!8nwis?r)kdNxnw3%^0iE
zESb(q#R~FY^D0mE!+&Y(3M4dt_X8VNPThg3G(HT{C&<3QW%vC!P+QtB;-oRm3o)hv
z_E#8J53X$HG+%!>6ydM@wBAxtPK`HJ)`uliD|)Qz>=_vEoy2iI{0?~4YNFAW9Z6I;
zEX0Q?Y-+RBPq#TkYriL#<{e#f7q<QxSx+7IgM<Er!2Qr|G6rB<*^k}$@Qs6)-Vr;3
zVcQnG{;mjUAH4bE!S7z<UMrva*3Ccs;>J7Q9X<Dg?#I#ytQQ=-`rOTLzSG}o4dn((
zTFrAtyJ`zs9nR}@7MjhgNw!9)B}<z*S7YWQuo;TW9ud7g$xVi_rZg|{WFx>`TCOnk
z2vr~LqQ5fr2yBccG)JE^5`CUy#sRHD_g9ll=g>dDdd9j>5j>{7scwDm&!ZQAz~8K2
zdh^EHPagc@nOko@opJNyx=eto8t1HuUpQVBR`RP$8!h9Y$U417up85f?wl9gIwAyM
zA{LU7#oUL*bS3Zg>3Um(?q-dI{NrZZ{5Zx<(q-5goADNR-wtA3jFV^U2@8_$ItB-@
za|IztZTaf1QZ^Z}E+(y{d%C*DosKo&b6mxp1jYz4%7u?C@Yzp-TgnSISf<^KB<*-J
zpu~uN{1#fB?eKK9@`bhFf~p=+q{d2c9)$c|?(~Wtk-(}hLT3}Pu$>a_(Xj3F06Tpd
z30`HM?Q{nx?k=qbr)xMzIlFlmDRcOZ0iM3#*=wtdF@AEFMwMICigD+GQSYpotwYAD
znG2e1OSurr7SHr{JdnB)VV69ND^PGjyt5NEV|E4e3s9YKY;jp-`*0<XQ<G*~85-|E
zbZm^lhT9mlCka9f5Cab#Jydqs>#}Xj2&PUaYNzDJ2W#l<UFyPXCq50(Ru`-`FAD*O
zwm^9q-UskkB_D8>(?Mf_c$>zQ1XKyK3pfSwNO4_Ofzfj$`Z=-+dI-s^U^_{!X$_n@
z)ZjSCBXscM0XVvMPPUNEYM|B&kh6R&XNSwpVu58B%u2A6S*qiek)>8p;R|>>)~NYC
z9Te`{=$?USG({NI3~h%z)nVPp6AUb1ow|<wNq%bE(EtphLyDhe#8omktjFQ@;m^ut
z5@cgsFJu4l{*XA%^Et~m1JN!~)8zx#7*Ga9nDsMGKQ+(g_E9Z5@rAovbOdp`ePbiu
z0ZjRtWn`*p#>tt)X2EYZ1c4)k=_tb;WJ=+p0VW`3G6VrWlGx-KPR^ut%2YD<5)d_W
zQNJjpwK)dL#Yz13>p(&`0=ESwo#t}@BNqx<tz1B8<xE2H=s@7^VcGem*+;^qB*Q7k
z01qS!GvLT4nPioGib)nL9t$7@#-m9?2ylr_T_`knP96j@p7Jn;kWX~j*yQkIncy;~
zq5=cCGIM-TUy0KAdZgV`(zWc0bkiQUcav+v<^lA=F-&EE6~XHYh1T_9B9!Z{xmknT
ze=VD!)uV`%P2bXn%f_PqBIc1MdzK3tDyo^1xR8&}<|u_*7G7(t7x5+?W5g0la^~Bg
zSXK(ua<`?DiAf(wo{@Zsg0b@Lfm5^v6%RwAhqBQ{6`I@<t4!Q00n_gG%b0q&eyL7Q
z$4diJu2Uo)``_6xjsEVQ;Grw$eT*B3hrIl@#VwsKd~S1dv#{oq17*9DPMv!RBc(%@
zq0O3HIC=O#(<a4+hM;s7ai&G13jDWW^P4XIRCo+3RpjV!OeOhB;kx|5EVkPt?SM{*
zN>glKgFHqQS?*zQ>mAU6+CZnzhV}-dvxW8s)(g5J`uFa!GbVGwU^fEk19njv6C7x(
z8+Nwi#;MD!EW1v9au59oWHKE)6}rBfEbpL9Tdo>}hUs+2?O3g@sF5pY;A%2lea0^U
zQrb1ArE1Mu0CLJ-e=`6j(R4eEGvbFuRc$U`(<g)Q%-Tj3?}Q$RF=p>B(&C&t^1*%J
z%NS-(nYhB95I(RNswLMqrUX{Hq0{F&C<jB|qGkQpVQKID&c;Fu+U*cuu9xx|OnSs^
zMHxAwCSqx!S1SIB8F=q=ZW*=)Clh`^1Vol&Kt#V&ln3In(IX1apaJhzn53>3W)HPD
zY^dEPxK{NMtoZ=O0kF9_9s>S}Z*F?)_}x%&nGN^97PkAKkADms2Fsl0WqCQrnseSa
zV^*up!8>8WH)krS+4`9x8cRwJ5i*4Aq(L-nA%Dq3#*L$bgccJ<yfMbWb$TYGwjcsb
zG2?p7=si33tk#e*c3-~k1CZx?h83K4_G~B1XKiOcGR~Yb<kr-3_*<2sO-fpcLNa<f
zC=xcRFdiqmj?e#;P-2wH|KRF|b4u^9JoP_7r)`dFwy{sS7E)1+C2IOfbGot;%d!-Z
z=4_25VTcN<opB>-r=$)6+i{^2HrSt)WV5#ycB9|{Ac_c>#f6mzN*M7N>_j3~8Dm0p
z@o|WqiH$x`BrR$%2)Ed5k@2qtXtM#WU%Yg6d2xwdK`p2bE?lr0uxn%`&NwvC5ul(e
z$_+={M*0X5*GZU7*lhwG)Q~Ez$sQx9)9tv!db<kqSb0DUC8c(Gr)-|Xq|c|J&6oqC
z9DJ45A*ffX$ak?ick#@-O7mD5U4SKI2_)MNqCq3-psyM55YmcK8}OvEf9H*`0Y1Xp
zNH%&XE5~^N<);-3!XE101|rb%-rim%#IaVA?$#+WIiX}b!^Vph9%{FuG!?on=wFn(
zSbztxR=5YthO2{%&idc$#z3)_S>;r$yS_FGR$^>%Y7{_UDgdX2m0)@0uHfv#%JND%
zczF5hmoGhZHF$X8%9VwSSC^Mof=gF|#Y-2@Eni)}bdh~M5G-7LgjM{?^2KuuiN;9j
zMuSclW{`Bzu}mB_wH+iz02_oBC+$Rycr$LWskOKIaJ;vGNI|bKjIiE`(-dR9kiVFn
zxJO~BS<TG6DpE@sO#td(fRDBS^Q32-(z(S9`5`kgmI<mg^505r_ySmVpg<iiFF3`m
za0u%`Ms9nNbaHl*tUyw*D2jW+;;q>y9~t7H^ixvG<8udBFL({5WH?s%$7(^vF+TUu
zg$s|YFJ8KE`O?Lui&xh#E?ihzzkFrsfo1UGT3}7ZQHnLBmh&cm&g9*PFdNWF0W(GJ
z;TDGnuSgidWlERio!qDDhR!8Igpnnfvj&SR%AC@pu5(-as|l7bVi`;Kk`IleJ9cWY
zsKn0qi-!4sbG*W7!sA-G)itdUADFI2xiV}wB<n$OdVpiwBda(VDQ>E0r^6V!IHi!4
zkBMm5k74FxY+?5vBh_(s*TYo{#x)Fo(kmLAy@=clL3I(Cx)p9jtvM^mH8eFxLN+tZ
zwdis#C?x$J*f15$0-Fp$ub^P4_C*=iTNV)$u=^8(;2oorpnX~0qvGk(@Vpic^<*CO
zhjP#Cv(3J7iF8ACooIsl5+55#qRP-vSrpeq0gGXurmr*7(yfj1S<Tw8WMQbkO!6@L
zY01P`dPT19Y4bCusMf5NW=EXTTvW=2`BuXh1lng~g4l3~OdQ09%3mZq8(ujR$p-Zn
zGZV0N#8p$JjGp-a{GSr8lU8%7n`g$bs%q<Nrzg*k3&_I587zJ6>iWvnN6s&;U%E_p
zl8h99X9hTVa4-TN52Fl3e8F)NzaI#9;?_{aE$GJRdAiUGx5zh1E9v4l;{eYlU3TXz
zW|L5GC|cN~kD#zEy98U&FUv26Be&2y3JRMVVQWDofG=qbWY3#Qx5H+#Cp)B1(2Y@F
zm&k*+o$!cg0tUHaHlvb6Qz}Jk&Q6p~TJkm=xCxmJ9V+7UO4yA1DF!wG;;_9%p&HP}
zkP+n%_2O3L{KDC#^V({voa|x?GqzRX<E9`mDfB@O%i&iyVMGJ2cEYI5xJ{r+_RtMY
zO!pA&g)aG9WAhX(9%UQxx<XrW4#LNFBfS610XaRQcYE^U)sxQQ3F6orB&})wW`HOL
zO^>80JP9!T2vmlKGw~W{)IJcT{5fT{Rxbzj+4^ibcmi+8xu9O3-7iB%y#`rpDrXhT
zuI;Z;hYXc%M=kL2#XDvfc+5EER1Y)=-Bq%e#y9xu2&h<m122qkh)V`)K*TD8yf7Y9
zv|5$>vN>n6mLBJLn_q>26-5trm<vS!YDGZ1SrUI%y8P716&OOPq|qUwP=&xUClhpH
z<YQbGa0kKY<TmQ6%MpW+n(d};s7N26EK-fOJHm?ThFhtC`X%hZ2X+_Kr?fl94P_jG
zsR;vkBJ5r}4>Kij@&KL&{m4ogjY2ppmLNu<r<bxNGb1SJi+F)?V%%G0G+>B>$5o8F
z_&z{}Ii3CnqxBv15)YCn_BEIC^U%?!5YL@jWSl3XE!#atR#6XGGVL2y&_z&XTI}>L
ziSVN~(XN%Gpa48L`|1<e!(33QR7AW@{Md&GcWWjEnzbQoMgw4ZrPDb5iIawI#TM8h
z;9X6YFt<pB%I5Gjs!#wM{h2b78*UKzARNw!cfPNS<c+1rOC+130Z{RxG9_S>ahdQw
zVO$&c_$xU#j!i{XB=Qw^MzbaV0D}cK?qx_Q;e)j4DNi(D4N`M~8-?i*J%j-F3Y(4H
z2@wQ$h|!}7cd-b29UfDIulJ+wkbHl@9Fnw$Y)F|;hr@te>w-XFN;+pmg*mo!pkavv
zIH)#2+`*>TBOwC4suKW-+%^^^pb*7c0waT0*GiQXq!^ZY5bQ7>2Z^5%EUa7LCmWBK
z38s!W3$ZI%p?%APmboe7CUBw1ku$s}7ptQDe$~xU>qBUWRL4NLXF-XzWZBXo;>m$p
zU=xur7<fl1xU`AcuILRb9&Ui>egdG+zFrQGiZP<U!dDhO^O64xgbCyK_P~8?2iBLN
zl!}YImoo$VuoD)8t(8-~;o_h*8RN%|>eE4?FqRj{3|ng?8~(spy;WSNH7U+LoQJdh
zsoR7)N|j*p7`4&>$Na~#JjfT5E07(G{DK-W=*S~(aukc_xfyS6MqR^)l(uw5ZN(6B
za2$<=<LRaR4T9$^XN#}{v)o(;)mH7ij46mia~7gO%dlkDFz)oNW+Saj!sm;)0}*{e
zA9o0{Qm4T@C7;aUaBY305dcz17m){_u+@#i<`9u8XueCGG49jH)eZoh?zp1x@=s1|
z#7c1XDQfbbba(%z+y5|48IvwVxM2Y1zU)>{xAkBo+;1|d3i^fv9vaKywSgS_;Edo%
zutqCKJ2aXY&6USp)PrQ5M3$^0lwIS2;)JxwWz<aB4FnFs0nr;&nT;K}X_7Yvz`_=s
z=&XQ4F9@GVd>PR<8n#33&A^$MtF|!uCH^_?jla-NJFwO5V~P#739n6X&7gCJ;LK_B
z_+$?yW@0SoCj<>Hd*9FMsg}%Oz*OJlQLaS>T#-fLyPcC~MgEu3?-o^#*79*1-0@$F
zh7fu0v4Bxkt>(o1&2e%WL^Km!?`1Lk><-9G;&!Ls%WxvsqU9zdsX^9QWDuYcYrMz9
zk$N1Aaoe%ox{VKm$et0hphqcmIVin3Oer_moVBY!3;cvBmV(^?@CsDM*StRKU<(`}
zh3KDOn$d6LO7a|ZO#yBph*e3EzcD%w;N=gHq0-CK5Ma`3s**@dq!Hg|SP_g;k=K#@
zQ!=CTOyuWK43neF7-u5SZ>QCl5J1yZ1_m0UHZ2|HXfI>oPJ&Ou9K@-{GpT45+RO-+
z!(fLkU98pPd>Xxrm5^g>6RJ`}SR&aOUMq0>!aVq+Xv{WAMe;LolW`n?5ZI~jMPFu{
zfPEJY@4|JpgY-+AA=w?reJ!s_cGbgEBgl=ci&AET*aG?oHMOEht-!q#YZ2dXb1;b-
zN5WB_%x70#)CKQ6W{78~!l=lkW7Cx<Xt-N!xRhCf)NCTqbT}lV-2%ip6#F5a3(zhq
zAvo}wDsZ(nN~4INQBB|_S-4TKYM3@hbVw~53E<$S<l;fEMQY2(CdYZqd%?3pdbS#^
zK6pDMx<(?xGuq)e*$k0@G=lQDh$4wOqzgFF9u(@;YdZzQRUwcY3Y|p?bLe4LxPreK
zheB@!U6rDJTiE0MDm;dySpj(_iMa|AOPgT|1SaJED!UP#aoM$yE;fKr)5E542#cA*
z-tuxs_p9s-*D@y;->M>yx>Ar+11FnFVETyb<A@H)DS1JnI>D5Oe8bUz{)&iYh4>Qn
zURtP=%<ch;yqe3^LYStlZEZO*3wx^x@S#f@4Xe3~@1zG7^Kj=j$%_KGy-hx0!$$68
zyz<ky*T*1Jb9OmS!7R)%!iM<xLRbJ&#`s{=&6=m?SyqvVA5Zm6#T8m#sfQ#NSSmB{
zF_EKQ>cwtEF-t@cR5JWq+`QP|F?m38XzQSu4S0jL3WK(BDyBs$wmLnX=Xjn6>QuLc
zYQ5w(h*Wr870uj<`$pgnp!8M*@l}+>!UZ5=jA-n1rp*Es3T-Z&m8TjRhji3qxcx6}
zJ_b)w!AuQkx-&twq7&*TPEeF}cF7<q!mAW>&XxK0;2^xELk7Vw7}T)x8e_iNWW_Yz
z_Zo*J$6~Vd^kPOHSd!CZ+hILwtg}r)w|`Zi+Jbn{0#*fIMKOA_AO&z`Q@PtWKpIAy
z9e<uh9wH<GIRu$Wqt-6Cd__AYR(~t$g7p}?Z3tB=R>sZ0@D9#1tO&=PDuLINdYPWW
zU`{M&mVMt-4(?rJ2beK5Yh&9yd&D*^{>E&(9GKs%vo4SQyh=aL;(W@1_H}m6+!e6j
zL1_;&qqMletI)9Z1H#b9g68>;C!N&;5ny}^MkRANa`8V@<j2z}a8@gDRu<DY<SI)O
z3T2p$rL>f@r8Q@a4c0}P^t+7+r-ildzPrYKFtgl}%k846nWL&tuARfz)~pWV1(7qK
zsl&GbdaFL2Rim@oksGFzZ3*Xg&S*|d7l~y4dsU2OZQhJAEaC9DgaiE21}FjXI052u
z_A3hsYi7~FY-IIuyJM;3WluniT1#7%t*-e(D(6)3%60c0(UvpBg7~jUyGa2O_Hi~5
zd5DtPdu?3TS%oKickA09_cXo6+uVhGj$2)ucWw2!%@2j^k%@9_)vp*|&G|gzH6KYP
zMPQk6`NUt-ap^XfBzuxFfMO#qqb8)IFC=#|`&_+$aVed`-LZkYwW|B2!>+JHq$f4q
zBmrQU2MWaj==Kyi(k49(7k$tPhpi-Rq77BZ7$5CW7IzqlkOtjwk3VUjQklz05(lTa
zosM5lhY}R23&8m%ggQ_{oo>7nc84ers<@PX3`L(a``YN1H<2ye1WmKDfR8ktJ_Y;E
z67Au0`8m-5s&<sc{B_s7JgH(&*0GyKur_xMr@zQd*_?K{?oqZ*$>Iv(MLknUmoga2
z){f9lsH(*YvMYSSc_oWJFImi=vu1X{xv<b#<O#sg&ghn!5Fmy5qfH*gzK5PT)-r~d
zJ)=wHrmVw}rSzu?iuUbcunp=PWI=`};bPK@!TbkUJh<>fJxq=a$0F!eEtdTpe3S3=
zHrgm%?>-dwS{0ORBXtjh!&(wVpwm(-!Vnl<C~3Ol*oMrgKskZ!;j*gN>hrQJqe<cS
zex~JmQEw84hR+6ogsFWI;DMK*T%)sErZ-0+u-zyO1_kGk4D2FpDILOp0+FVHF4%wh
zm>#4J)*&zrk#MUF<}7SMlyDe4bhFW{Gq#5DHaN|7WP0J(L+zL$BRm+>)4&a3)&(&5
z?lR6K*(ri$`UCNR@uT;a3{T~1SL>@~?q{AOwbF}5f-boPPD^eTZB)eTkGWk)E$vIK
zWFu_t2T=q0VTbadxN5-2m~314e+-3Fk#ayW!3tYZQULWOxObjlAN=~P?pMre)MS|}
zO>(ab-24Jftx|c=Kt6(TX6Cdep0KVges2@j6qmU8b&&*SMg=jpGX84fA6K~zhL?Cj
z{Mn?xuA)kLtjvEm`43m=p;me*N)LUdx4Lmtj2C`3>94COJ2H%0r+YdY^uW-O{A4Sd
zME+ia%Uy#ruV$*{npgNYObZdMF%5-5><ij0QZ06}#hVLeT`R@tvDHEtqRM`wu;zl!
zMHI5F0{Q^0@NQwvGv~ozKu1J8+eJNm<_=q}f*_f|7?_nSp?C9k(vD;fB5!(}Dw$iF
z<)EuR&|5RSz$l55By)J#%9O{=&6>{_dxe|cTwuoq-A3ox?qG$u-Dvfjk*JWGQU}o~
z=OsW`JpPy=o=6$6wa;2v&#Y&bNXwiH%zFGWbTjUz{OvWn17w%tcdaawvz>{Yxj-vE
zwi|xeXj?|RSr~}Z=mFf)MUE-Ue2e4Dw@!b?=?X4Ek@8EKSGkSHH7N@+v<$cN^TI9@
z+@6IsOJ^tM7R#)x5tsoPBXd`fpj^D0S()>4oK}XRx6K&CqL`lDx*THZP*s|TD-Q>n
z*Dz!`SYy>YCJk)+4%JmD$l_0WVgMGgiRNtfx^Y`YF$B1bO>42G0iLy>AjxKWpF(*>
z5Vu-eVG9~g%~<G2YCudots1-av&qDj6x@0yf;hlY&L2iQ4EJ{PD@gFLMk=V1SUmN=
zivPGbT`FSF-&k&b11-YtK2;)_p7~C>qjsKbZM9|<LjH}HDym|2q;Wu?+)K_Udr@~W
zv^)pkBj=92P2oRymzK@iId0oho>|mJ13-=m?rdX<YNt8sFJ-FgkJ1);#iwa57kA~C
zC8$cleL+=w^gf(MACCSq;(fNMMVoW7bq%=y^weZeXp@yN!bG?L?NO+1R%H{8O=b;_
zE6|)4G-U<rO8bYjsG2S5vBPj1?`TJw&_14NYIA&Pt?+7fZGN0$l|1)=jZk+T$RX?1
z1Q0f?_r~M4zzhqU4KaFRp~ubdDX0Tl#u_{<MjzA4=>|tuR#B_1nM6a&#)-E^vE>?t
zH7)3B%Rh=OYZQ9-qIdq%^O>`X&zx0!=B&cytm5h;mzUPhEuCM!uzYpt3P=<x1#(KU
zyt2+_aCKq%BBigduP-gGYp=yBn`LPpAV{!Ori*s56{aa5z#_Xqg(d)<@09L^Id-+8
zVLtrWH(#4=0#~+ncTK&c(`EI9Moaa?onyAGC`)Hu^0BXF=x_1xT}jy@^@=9Qj0>Vy
zfnM!;VB3cjgjtjgD^s#&l-xHjg`WFKUVlmj{bU7l=QOi=b*KK<YB+O!Vdl~5%-^rC
zO&3=yYequp{<}|AdQsZ58dOR?1ru&}fwaj?V%OhYKw&bB)*?-$(%9Kh+y$J@5()~6
z;I9h5flL8(opgs6&=6I{ypm-qcWWU@7^G#!yj6~*5Jm_UjBg^F6x(K<E&Es3*KHz%
z$9%O%q!aCAE$e%yI)UA-QX%iFBFrXfMHPm&+Qli~dq{zL4<3Ux;6}O(_>XB?IDl;M
z#)_H+Z#&Z*2o+SNy+0@b0);lUR5(>7XuaZYXZ%Z4$xEZ9eTLI;eT+b1B72ETjzkH!
zr!f=2#)fb~S@l_gn`DS`<8lyox6m7ZTFO%;^1KaZdp=~_y2lUNsYPS*Di%+fI@385
zv!vYU=y{C3<~?Nz79eOk9mwCgg%@C2qBMSJG=7_1crl}_je3~~;I1L?1y&#0^f+oX
zs%esEyvG`l2<~G|nX|BO1JXtrUYE(H)-8>PYUl_Q$V<TUAW*af^rU-F3x(G)%4{w`
z6lq5O@bh>VNLINMxYAufoGiAkSG>q?5wLoZ713`woEFf(@W77G0CBqBXkBObot*LX
zblD^HpDnFb9#7(Sv9K;2_rnn6R$7(KuSq}QQ#oi*UMeS`88y9fP|%!5uzBC5#~9}V
z$V$NszHK&P9PY&V9&zGCQL#YU(Dhdc@M)p;G)IQp;ci6WLdsj$zU4#QjKKU6y-gHg
zvlh@_hN-cMiolReEiI6bUYhb|S!JA+$3T=UqegQVT_eZ}!6uqRXy>R{*esN^h8FFH
z&X$E^4o7=X58ZE}z93I#G`MUl<>nV4<_a0@m?WJbX*Bv>c>Ys-qX1r!dn7IMwk~Qh
z&0%LUl!gZu?Xx9*D+hJ+p^3aIDvYc4o@#cD<4V~hv~BaV3QUfH@hT=`d7E8ZuU0}v
z&1M<*h91{e(mevt5(<(i1V=m}{474qR*4YW+9Z_Gg|N+70RVB41|STb<fId6NS`PR
zdRHjWMbpBFHVC&WV%dzJo-?VsvdAK5A>zv*q&cGJF7<ViknOv|U@$1?)fh(Q4lnOx
z<ndQPv|zS$Ca<Z=a9FUy7xE=A+>@HYMwP@B!6(-tOIfg#>(|SHmwCwLED$Jp<hgnO
z+l<H<_Q%p^Lz>6pUHTh7^3y}s>P0xXR?Rly67-U*8Im<y7f458OjqzIMeR?ZmX$L)
zh>Z-(HkNYBEFSV_Ab8XnVV|a<^2>i3ANd!>ckUu{5K+n1Oz&d{pHbh^N?W^nE9zx8
zw9+)^QcC2N=?4bC1zg0~d6bRWuMOCjiki8aX>84skW&SAN#l=I9juv6BpavUF#dxo
z@$WSwsH?;HH8XmA(ZM#xMfuIF&<WnDb9>$&Wado_5&VlNNbz0DO^BOaV(gSc!3GPR
zX}Tx?LoX9}kkBs|9j4$ssNBUpdQG&tbMssi@1Q6>JJcTX9J^_pP-Svl=2atA&y+c5
z-`al~iI}_hI6IHRc8&5ZqY|MD0rbSXg&{JtR5z21y4QpTLPjHu{LNcELw(a+K1P$~
zAOL&G7|Hnm_0yi>hO*$T9DRK=<a_QS>XXsq6I+%EQmx=TntpS2jE#-LS{YrHXhc0^
zRv6{6W{?GHpD(mpoVF6LW~cL_#_<yR{^WZ|hS|0J54m;{HbcwYGr_c<1sN9hf@XOW
zculxqdz?B__Y+8mfj@!U4O__s(-Qg|f%&58wC>4*kF~u*xGDXZu)`s7fCV`p7H}RK
zb1aU*xlBKNcfYl5bdq7B32>rL)PkpFMLgtUv<bVils-)A#ONRsT`)t5$chGM&#fsv
z{7yy>h5IpE5@IX9Dz@MXTQ$mNP`X~xE$DSob+(Yv?1Um|lNe73-aHDxF4n>pg(<nJ
zeN)W4Ei#O@U5u%zA1Cpn(x*eF^0VjB&z?s=dmeQ>kAgzprE`~p%YgF(a&OGTjf$*G
z;17W1v|20+Lw0e+`6*I5x)z~BU2q&oK@N4i!w;dR34T%7-c9*@#i?pOmssMtgBM$k
z*H&wp3&GBZo6Sh7u4R#qQ%QV>Gz}xtEK9-B1pTs+IRehQVU9LKsTRgcazEtue6o(e
zieiMi0+brHXsZNHld4${SD;lTW~R3w()1SYvm0<-FMulJwyg-apPA%t*b@3eK$))4
zUMtGpvNMGmId*Zl4y*QRb2Xib1r6AWlCFOi5$3a7<g;7Et7O9tE;x=};V96$7f9l?
zDv#JII_#J3>&c=2T3O3yuu85)DnNjdnXpx51ff+!Iox-o3%C2;tVdi~<ZqvN=(Q;j
z+h72DG0_Y0099e05V1)m2#mmKgZ%44ug7U^S;b@pq2qHQMTv*^9bOZXir893f>o<2
zYk?05Rg5<zer6eP9Rc#tXj+H*3{|hzEiE&o7gP&fYXx+(?fuNOIddweT|~iS!GcdS
z!GHm*96kx}gab7K^*E<YnbU1vTn*!7a8CvhMKu6W(oK_A+(gY?EuGKq{;Z<&oLwLK
zjaUQs2diQTWjPoS`>yhNl*NSBjQDAvT|=K;L!Vtk-fL)~8-){JLu>=IJeSPz-X}R%
zmiv+k#WXUPjGUnBl5uk<9Fggjt(!)xXW|+Zw;a6kpEuwA@YY|R8hz(q4}SaF=%+tK
zAq-aw5|NY}45yrG^t-zh{vz!6w!uFETS&ITMK}&AKMz}M$MiQU?7W@g*(DOx5Kr0L
zzRZ|Sj>S94-n>j-`FfY)%VAc^zBss+F0U+~zjP7f%hjTpFV5?!>lYuouykd4k@D{0
zRjz*d%F@#M%7a&~;!Y8b7iUXU`O?Lu^{ZcAzH$z#1*d{piluYo?LQp+@K2)`fArBa
zFJig%-Kz9pS>$!scWaKcx{;<kjatBHKaWP;1elv_M7Q8fFr%hO7BY+rlSv>O)7^0;
zJ=NmfHE)}$NwPy>P0ko?^7X&<#%nj<_~DJWpF8;7Yq$RJ)6r``8@=_?=*jnK7eru{
zdTBGT0&82_LCD@kh~`e!om_J#*WJmp&g7oM4~At;*ywM>jfGyZQ)P^8js3sQ{y$p|
zdb*wuyDodU`ZGb#(CopClj2X2|Ls(R>0p-qz>k{AB2Qx~7RT&aURKnt8=5z6h`;&%
z!OL&`4Z!_e)QxvTh(34Z6#&qwhwNgp14TO3l7Q%RP=^woIwaR1xhL|bbOqp9$gh|9
z()6-=+s>6Z_`y3jfBW5oU%d0*?>~RzgAZ@M^xK=Syz<dA|2%r?ccb@Tyi=EFH*6W{
zwr7}blJrv75(WpaK6mi)vuwU>|J{7$4abs#uDN3|S(jyMR}%s*fie|%p2G}O)PpAE
zb(ShcJCJ;dlfu`SEf%b_a*zf#2D92?v!8X);;xodnT9M=3uvRLJa{f)M|XzALoyls
zux+p^8!QK^hM*g(YMtfT4VL})JiDo~;j(G)>{)CDvy~@AuB)pombE)zp+qs2w4}2o
zo4GQwH?l5g0k&Y5Vc0O|zQf~FFI-$R4R+sc%)?^!*kbnBV)oc#ZV2Bg*IAbtsT`{b
zl0_If`*|Nbv`&99IIQ;cG`_Ia#zi7@j1-qFPGLpQGN7Ji0KNyk9G(moEqw?BL{O*X
zlCpjUTRIgi%zL1*!7@X(qrNgv&arFYT)_tltOhsz%vV^oI<JBd{CGho8?CEG>k~Fw
zA1@Y_Dr5-zGeOk_O2`8;%A}|e@>$?M0>E9svoRgiD);h3RGc}>zC}x}dUbET8DBjZ
zIP34e?6BcK9LWqPJc~1rumzUX-%%_guszY-<gMW#>)t`u%|X_0caU{`kQ28ik413?
zFe5;9nzdB|-)2R`lMc{-47ec&hXFxftaF^8qwljg$U26Rmb-I-7hEVg_8Q|dd!gVr
z!bXx7ua<}xuuCpv_x*ya!JUq14qC(ZZQWK2#5fad{UlWP0$O4os5ULD6rsy$o!vRf
z*{8V8`!D6UIqPn7=7??nbznZ(=&WjVcEUzyC%M*yBbrHx&7b|#M?d~PBmQsx<l8qs
zc;V&;Z`^5QrcF*lc+6-g%p)j$)Z`LX&5)D4Nu5Ig>hJH6fnpo7R!7c@?Nm(Ch(tKV
ze=jm;i2)<TfTSO0)wA>>lAN==Et`0Ak{O|cP_y~*4JRF<lU`#FjB^)q@EjL;C8*zf
zOzL-X>Pn0UsZb=N5c!6s`A>wvkT_H$CtPF5AkUfc<tImC6EDi)(3st9{irzS=6g?%
zo_*TJIVkbFv*ipvyp!~M4wSOe-)P3WaWl#a9Li8d$0?mE?i@{~&_jk&;fGEQ_lhoF
zfD$#WL>;e9L%=YNI7aV=TB%_(Rn<<lW^_d@)v>9XYO7{9Hp^R^rRM5ddv)nxe<j+g
zlGRkdM<-KE3=&9FM)VIUb)HgJNwXqpR&TW?^Y5|pA?;pFGm`!elk}7?V9Kn%JrBO~
z^60H^-~8q~qi5f8ZqgfXf9Jp7fBx2oFO6RL85O?u=bzsE^?U#K$!{9<*_AVT@y%P`
z`ryX<KViRby#3^jxBu<n*&p0`@~P45KViSIl^=if%=4oc|Bad(J@uy>Z~vZ}J9zcU
zn?L_OT)tS5w=NVB#m*d5U8zH7>Y(N<>r5Tgon@V=gIQ-;XX?ON)Zx-jo~~84PHPIP
z6H5FpcN4HuyPU-B9*OM+>=X{!{|D?O4%z<)>@*J9{|D?u4rl3^1ROKs;hfT>NBmu_
zlk9{8@sbcHr#7PNanywu$5Wr{P;Z7Psi#g98$;A3wWDgKTD{j41ueHX<2LG>DmAQV
zSA9Y7L9K>%Qk&vDuJ2aqWDVx!Hy*5^3Uf4i>e-wB`NNwp|LVs3Z!xkDchz@kgR)J=
zcH8K!7is6QPj-q?>`PTIFI_yheDO=B3f+2-G|brF`+^$&oyPgytKS~$yEPh_kbe*O
z5)3%#*LBVrO4sz#uwbxQuuwz0bQ6#!yf3bNy&ra?BAay?nkboMLlfBWjQ%o=e%%UZ
z39Hepxz+T{l@gFy=ur&k**ZkEpr~$MO~cu`Q?*d;j{EHQBYVtNtU`6=!iIr6nW16P
znkokS2Q#M~nIJ3DYE8aw(B)xPj+f6_yc#TC)pi1hQxoKge<{_G$zM!=$RHg)M&9~v
zJs%VRV2fIVI=SF*)M?gjh}1I>5m3Q31xgK}Qg=Z`Kt`dD40P&8kmAVQdJ+!%y^|1u
z09<9O&^ICgnm}d0NJ*N&2V5OWl3wsZwP*M&2jhNjE!#@A<T)z`v1vB16ZWpBn0KFN
zL;z!oGcS=J3kf>Gn-<$2O~5twd*Y$q5{*a1x_U&^9u9$coB$feE8(XO6YpDJ&w7%^
z_qrm&r=(tcssaF#)}Clf$OpQQ8wkhzmL|dGcu&i|rO79<Di;%?bVHY8fOMp;L(>#-
zIG(-k0NKVT@N#t9q7CzP=r%<JM-zPi4a!PB{im+6vROnmKH2OiE-;x42a`CpzoVfO
z9fgowq)Yf<nk1=&O*Bu{q6|crv+SrDZUF;aaJSZl*L>CrMk}t{3TTo*aUM^hZi`3>
zZoX4uWZ6g{Txex2#+@OwI;3<;u990q^)X4Oaz#(aAS!aog=Vv&q<gqn$QBgUy)q!z
zntvt(x^1}*1N~v7I&#-eEZMmeBszaB(ixqj&^a)-bVe_&vtUMP5>|aCq0y}?bEGsv
z(sy)8jc*Nok{aJC+L9XgLf-Mx8Xq|Fq%}T}IO>r6)hn_2+ZWjQ;Oi9F_yBv%0vlli
z@JJl2Y)5Tr129(q|3cipdsf<U#cgE)a3LIMIpILF4PbSYX@Fj5F-cWUBS|Ue^0G|3
zybL;{+%6#Pg~&6R+WX{H!%9Q4I>tC|nqEJj{Ehd%_t9&A0-}TQ`R{!jhzR5$M$f!U
z_s8h@r$(>*;pQv<!ibL1(?1?P^{dC&R397t%kz)1i9N<Dc&#ipHj+W+GFRb{J8&7N
zf!@7~9$>vWlf!{|*Mo0Ryx-FzwOod(7#Ee5)xw)1%E1yMx@U%6(1U91D{>T&5LT3S
z`DpnUZ6bOy63KAPPVFVwhO~@F;YZTzB|DkqSh%!-8z)A~L$b@)N1nNOv?0ct^*tY=
z+_XhVDC6LClS)2jxr2+Ck|{^CP>r$gGLBv=BWI-=qa>pw_n<=SL>K}_Hm|25DqvlR
zu+alq6h~(yV_E9QIN`aBmc30sE(+PEWvz{!$#!jUFl;T_q^o<I>p)d&MM$@lg|I3@
zsJ4`aw^~ZG6%F>Ph-`(se;%BRceryd_#CQFg^6yw{oF@C`jf>qS(*@~qob%hVH12@
zPvyt4xfbDpWTJO(Ys*a;4zV@WxVzERO;4FO%PsV@A`3kO{pqq^tI^DZ59}^;Q{#>`
zU&;0DZslmZe8!nov$9Ow%sGK<Jb2vsYJR?<Gi0sdPS43Ls|>xc`+$~JhCwa4fN4L7
z4HYmao8i!$p{qUT3~j_yRvFnD+W4icGW@rRiTG^z`H`CqJWrdm6Sp~QwmAm<+F<ab
zSQ`eOHfJYpbJlEgU#Apry!(7Ee*S+5Hy;PSeNgZ>MIX9#-|Q6E&61iE9?c}rXKM(Y
zt0hPUIfz^-IfghQhv8tcFW*POrhmZr*BvmSAL5TVRR%^#<uZ(?onEoE3?5SLP1j5`
zBv~p4HTM7Nl;t*;JbvDGM+#TDI-1gPxCua$eI00{8fMEH-0RRf|1Js*?uPM18tjts
zbei6lpH$;*8RvcU>eHk5e{&m$8l3pw#`zvA9u|pRXVI>+EOO2Z?X6bi%4Ngy=7nvx
zpsl2FZ7)uv<3<JxT|s)G@VU$WblG1u+Oiy5*&InOHMScy>KD*80}3dN<Zyu7V4&@D
z2(}^(i8j)r>OPo}{los%p4?cC&!e2;K6G4wvMNYCgP+zb+;R#YN#bs!6*=jh0qdtb
za8n9H$Q!yzpFuEf*3)+S5b}oe9`1gMys@!)s?&qA7;W<K?$m`Ycn?%u9wQX$*u|mO
zp>$*0v>TVew3>#ZR>MY7y;;7vMX~-k0^BD89nmru2^v-bf%C6!ccXM0+_kJ$%ets(
zP0f|Iz-j&C^Ffg<dPzOLYI&A%ps$H(*fz#nE1xO)m~DFckvUc`uF6Iau92QmWx+GO
zaj=|?PoK^VTBtb~0MMKDwyMJ-(=IgWt*NZ^L`U;3K&TGp-K)XcFu=q11M*ymtCW%r
zPfmLgbZHJNxIdT?yJk-8pAwoCn{Or|@00Nop#>$8GOc8ttiJuE67nU}Pnye?hjD23
zaSL5%EnCYvd7<;z$u+Q!pKL~8WLx@gokqPp5qQ}*Ds>-U2Dhd+-upi{zyCB`yDz?Z
z<Go*vUj6N38~wP|giN@1Z@%=~8}EMa;FS+q!N(fC!DHp%#`{0H@!?NLzyHy}n=jsY
z``^Gj>cRhh;l>BA-u%h8NB{i6jrU$3J^NM%0ks36^U~3O{OsV#-|$PE`k`h63<ec9
zBOJ=;+1C$#@Ov1<i{H8Ry+4m${J{n&BgO5lD^UZq2fT7&sD8Pd42BNrdr;IoQh6ot
z!td)=)VrGW!q$0|hC--!dg5K^Q3{Ek7B8HWu8A(p1vPr)JwF%l=ibG+fUEL9I2YVQ
zzZT|#d+FDsbHU%0#UY@nLDa&z;0xq@h)xFUWBtO?h4q!?N0+cOmd^W|EsKxy`UmUv
z3-aSZ?2do1zW-i+T+wsbSZeTlpT7dYHmhk;HP}YRcigU<+2$uvlXdSKM&0>_0Vk@K
zd8rVmrsjOzz?YYr=@UuhEo`J3&B3R(9inUZCK6A8sMtrc89dNR!rpA1Qcs)?3gBl8
zqnBxsPyZoo#bN5CHO;-JMFYf*g)c6mgyAQ+o%B}1-RNA{3uQP;^z*l#@?=*0gkB81
z6>Wy>ZYXIEG|VanZ6v}5kdJ>nVi3^160ES%Ma_UsXtNdef)J*z7v&L_IF%`$SF{qR
zl;j?|Z_;2zn1p?OG7aF}ct{t`wbtmvfB)#opA#1VBhwgwXGib+>BieH9Q^3b3~%t9
zp`alnK(X;i7^{$9cxa|Xup+)Fb80oXbI0{TJQq~yJgyJvH_xbQ8R|DXEf2Nh9+1`e
zcUTEnd!WEXegJoq7`^>5c5M&-_O=;}dr1QEV!A!_o*1Oj7C0NEw)+FsPk*QlpcS?C
zFX@63pea(pgCe<J(~3gka&us%tn_zOiWzSsY=XmUBkBWdaitNO?$%N^=X9uVGFs&R
zfM0U#;1$7XSTov<8`0%>5Vfv=t^-R-2PN3Rno|~DcQ`@ap<Y*W%ehD~+~zz%JoKn=
zuoKPtItYZ?+G5z=4bv-lzS-jO_Uq^N16Dl~E+ZEom_al)qOG_MdHPscn?@*F{m9^O
zRV)pb#^^rwry^S_ma+v1A2d5%Y5{)frSQT@HD6HqC`65kZAIIoj-w6fRn^^wa=%LW
zz)?nRXK#1fqK;orjq~^93~y&ucaq)cYN9VGFx!~}5;mIv+9JEtD;LVhkeB8is}2gi
z;-f-s7kOcQ38io^W`E;=Vai)?yfymZWk$TwNspReWB*-Ef`cEtbMRj;Gs=s+bs3FN
zWnS}x|2=x{g`3}er_37<pe;s_r$m~8^4AalG<x#Kpc(k=TetrB=h1Jz%Zj5aplVa<
z8A5HjPlFrpe0TKy@7;Xm4+r1-)vdR_#Rft?WD`<5q?Sd;AHDkItzZ9>-YPUk<<)#>
z*h+2jsb|@haqG!%-TLuAvy_{^dEww&PmP}bBP&4gAhdhqou7|h{5NQCd8t;N2>>wc
zrg`bjgXjOrT8=?gY09b8VO7(Y(+bDV!m(BOPTIKy(7c^XsveCfYT`AgkTghC#Jo$4
zc@lTPl;u}nlpo6SL%saaR;GF&={6#~Hqpx|MmRHWO08{$mF^4fwbw&GZs+B3bKom}
z=F}|Rh^x(VQ*<{Cu8tL=ikjyUiUhi;Y}7Y(m|I#wmwFkBA;t{D-euXHc5K+P=HGPw
ztU=vh%bzuv_1Bucy&D(wXcs~0-P-8RC+J+Hz36+mwp2*vf**DxoyEbz4smyrySa>+
z7RL^B--*3u-RNs}{?6S>N7xkd8D;Fg$lVVQ+WX<S_JMrC%PeI67O>}4^bXIx`gQl}
z*Kc$68~)p?G4y72y*c_*i>HWsZ?Ou<z|7XG%h5Me*lifpJj3n{cxjpFk;S{e%y6k}
zvn{Y@Rnwl<*&VAVSFPUIHme38>v6;i_0XSec88skn=q0R9`oG+!l1foCMo#It>E8~
zB+C;^l#l$oVKeThwp@73`Q_koAY0yCPW-(5@phv|&nC*s!CpDo&T`$E6@$upjd?!;
zyHXCE1t&V?M>r~ymGH6ZnGrr}EB_N)Z1M8)IlU_L230d_sIrDt6HQNqpe2Y+k`K8R
zJGM7l1Ub{9JD{tMb*pZyTRq%*a3KZ0ufP6-kG}QW8}I*O^wh6FrvJ(>ZoK`j<jNSM
z$QqR5{b2OQ^Te8so_+y>LbN11cQT+zG{NZm&ma8a&lWEI_@pE-2#0{gAq9bwMSF+$
zl9e8+zm&#ZQ6JwF2yl~4g32Cc8lw-N`slUy7$-Y=>QAFLzIF4xAB~><6MuYp?ge79
zMcE4w?{@?AY<5|15U_d^!k~n$R*+x_3yg0k#FeCDk=_;v{PA*Z>5vGQgL0v`%`TaC
z1ElgOdmbxB5<k77q~+#7b2#k^DzwtyF(pktqbyM&FL<3EcL*AuRzozj=d)HbYREJo
zt(C*wC4YTeL`bi-NXnR!z3>d-AQd_krkpI?F-qMhkSDWpUf6S4*BgJi`N13X@^bL<
zTL&+^VZ#7!JH4}}{u-prLE5BWhp#t$`<dd56GHF{FEQf6(uzZ<CTa%nGvg`DdCK^c
zPCME&9>|Kk5$Db3JT+L}d01pW>}c@G8HXfuXOaw>x9EfX!Jpq7ediaW-+%wspWht)
z<=Zye&)uRTpl)s<urp%6O-7*8VMT5728v|@cw%Z6(`Dj#h8P@d75=VyBZP^K0j1=|
z&`Z$3c(^Z%E=t5nvbOUPmQw3xnnuG`5(ZTC3cJkLSoLxN`%Z(7zWGXr+Npec)7s#i
zgE{0>6;xrl`7^DUF^t7?lU$?Lud&w6>heCh=DttVF`*feKM%8w)oW|xou}xBNJpNo
ztK+qQA3gPyj<__+aP-y(A3gKp==B%a{c-Eb=Wo2te*D+LkG^;CgSX(B0L|`L@zLwQ
zVWjBj*{4UZ{AKjPFF$(b1$F~Lf#;uLHxRY@(aRr>-u?AQNSU&BMlV7E)fGQn#1t45
z)lM^Wu<~EAbPYWVxlm9%Tt^9Omox_;$97Y9t50#_IA%SgqvcZ8M3`uBptGNQLBePB
z=l{I<-ix<B_}#$^zdU&M`yc)E#|KaT6PVQNTi9;t;JGJny!R`B)9XKHus`_WpXjaR
z;JJSt{m0APsRJ&;=sUk<?FkFW44DxPI$@hQE!+8<7Y_Lc#)gXX=-?)nu;lw#RLn>H
zV5z;hgQloEO>^67v+-Tq40agLnXM(^m(&esLeNe;<VHYbEx&ip)PKkWl)|+>`jNLs
zm!f`0jwK%zCOqd@I>#|z-VBh@4IWQ1b{z&lWYnMbWHyduVizmw@khpyRs8d0l$0dn
zjfK_u?W_pLeyUQmvq4Me-g%0k%#S!~jnFHR@QNg2zevK$LWX4kK5lF|MiUezhLAI~
zbK;a+U?|0?B5UX*v^EVD*{`AH6k}isAcUbort!?Q+ZOlbq&(uLCZS=&ICWYKQ%fEi
z$;LV4E9D3Z!cH^e)_0>WXw?LrB#qIEgen*%<!Xz)F`eNW)G^|PKQBwGLW5vNT$u<{
zl`}MR^vB-4ZHTg2gmpMWjwlA;d0|jPRTfCTPb8ng<SFfW6S7Zp{}rr>p=e?VO$<d7
zL(#+#nqbML42FuE17o)@HwQMxH`a2MRj@G40BAbeO~zKB`9t2&nP+q1#Ta)Z8~o>K
z3(echx^gY<<Sr=2dp7{ewy*=9DpiLZ$m_CzgVdwOac74f0LCU%5AF{Nq_I&5=7Ivf
z_ZHTQSq~Zm@=S8S(v}37E$oXqr6$Rf%Gv6}Z1o}GL%ljBnZfE^yB@Aa+P-jGp?eS-
zx_)-ah+<%#T(X`R*5>n=^qC0|k|qYfnDm0M(dc&}N}8^?(M$9zK|Gco?osz|=#uE!
zcZPjaSVQm{MoX6w2+{Mlk{3thehiX(9heifCTC^$b~>{6JN6!6J<`?#_N$u=0-C8w
z8FP<U+~F1Xca?F_*c@ZS4U8*P%bfq2+*&p{KgN!FvR-`djiqM}xp}51ra<-$g*G%2
zg^d<&f-gnJ@!89Wpq<Au_wm~UJ{(dd+DOy6R~j;PRPaoYl{R|ZXn7fHxZHSiGqSl;
z3NBfypeMa{T37Aq!z}N()wNxAgXVG?35?1&alE4;TN<)m>1^0!1bf<V^@xQ6QGFV;
zlJ-`H)}WivR$p|eE@YLWEcaaY3VHylh@2eyBD34#l!BbMLZxDc&N~}ntI=-(L?9c4
zO4dd!idmi@7eD+ZM@+@mwV~S+0+S5v+Y=Ip$98*W^+zUCZPBo()FFY*L7_?eDQdDu
z5Pv<0TG6g@TqhCxtffDK=zZ4G9zipa;-Jo*d=F|?IJqI_4@Lga&L5!fPx*H0Yeg$H
zjP14@pdPPy<&}|v@Wv;(2}aMnIC|@!N56P_^z>7s-~VXz!Y{PP76I?(upRC&Afx>S
zz&yoQKZk6Bv(@5V(8pAdmt?uc8V)&)d^d1Ohn+IqT-l{dK#Ol3WBkA!Qu*MlW-n$w
z>TE?lJ<|t4G=Jije)zM-f7WFp_tAF|)r~3_7QVLr)rIp9Et!VG(r$jBjN=D&naJCi
z$u=_KTH?Wrv&7oak%lCuOD94nwOq0){kh2{`D&m*j-*r5(`%0S5HT>ZPUqAh82$A(
z4}SLQ&ENfwB$xCu2`UQb%fVtfc+gqr*&n0V#yIJx<dzIH6!fP}b`)ikRKn4Yt7&T>
zH{O1iosI@-zN0Gnjkmvh<Ncq&bL#iM_t8&(dGon<4&M0A==E>k{QlFK=5T48VmriA
zDi`i68*t<;36N^+sEZ2dv3+ce&vY;DHMTQSa>=xYj0QkUgt<%}hXvi;0YT!UXI?n?
z!CRweUm3mkt}bK_(*6cKe3Sz;*m~*Ul|Qfy%DeT)KchQcck>?G0?S4r0}pMdxylSD
zD3ejU$*jxJlc{jPAg=_u2k@1UIAD-hBDW0(O=>LadH13!S8r(cQ5L(itZziLGOnZT
zaJ`fRz;O#PL78#WSoBXrb1LQ@p*}%2fQf%v!0`5<faEOlDMRi-Kjf5qpxc7p-v*o(
zyx0#7!2$P^K{~vrz5nD#FFkqi=1aH!@~zS9zj0Q?8*wmxTv%>6S-I|n?R6(?&v4W*
zL3z#ZgDlM!-Q@$q2g8FOewR_o-X1z>JlRl8ZDtB6<Rd*MBSG}LAJui}{sEO?e)Hv4
zG06qG@NRwhqk~ufZS=-ZZoKoH|A<u$ooI(on8sk<TYFeF6r>$4Vj4qt?foe)Vvw$a
zT>nWO@H_`X-r8BmLSt}(A1QeB$nzkUr%s*+t8vKV%AB7}nFxUq88_M1-;0~biA_*+
zJK`R9$CTxgAVC$3AsK|ZDMU%Z!Jwh$H1BN!s$m>BADug9YRxIR%gDmox-5g=Sm=9&
zyTGMC_M~>W!xioxtCpF$DQ&u#;9^YKNa=J|qV3^6o&033Z8Y%OI=fqRc2kzUlvO7)
zdba3pMwYbgM;sjb71A&#6*kyJL8IU8f`CoI!78;Ew^~6v>7l0vjJNZ6xErR8Zrte^
znh7Yn1i?+^DEi!|xQT_-fX~s=7C|(8%r~A1n;|a;_Dc=OHqDg2dQRzEk0R&_L0HGm
zyH))Tr>vL5wtvR6yXejwhW+@s^<!k#wHs%$>n5j^F15$4Tsl@3bTDp^WAgd?FxiKL
zJCz+!Pfw$*U?b}7MN!*J1L}tBWU|f<p=F>>rs?bivUEbv{K(DZQ;&Y*Zuf1LL)lqI
z-2Odtn@n`pWY{~VreORg`g?dbkDaNRpq|U+VUgPLGQ&=b+5EYEs?+fBs*2^Dh~J!u
z*_?>e98;*b9iiZQT)F1e2@7&AaZIVrbdm|c3sDzzgt|j8zGgq?3}2oZo*A4Vea)&>
zgGz(o)cBf@*!>Nm7Ia$k*NoGpRx9oxqboh9cF~jRutaW9XD8y?X(gsPr04xyvgmLe
zs_S*bb_(yK+%z}`-=Rfn(u1;W{l*kTSQQD@We&M9Rlq*Eik8mZGEG!BOa{cgnNHLz
zIGqwb%ioVoHnW-WQ&S+D0hrBrf#yc?o_I<&Bs5Fy!@*+zuUK}1Gd+sfL{-d}nEY+X
zBAi5RhA!mPt#`u%A9<uZ@`&8O*O>bDL<HGbW8juh`41%Dp6p-ctnlW$A0E8%NAN@V
z{eLH!urmOv89qQuA9~UUHBWg@I?$O9gZ#zQoTs%ZxBkBFFC3Iz!??YI_Q+iGNDm(%
zd*<Ghw7^#~%NO*Dd{)|_uhv^!Wf1EsKjQ155^mu4hPJ>AcRbjS8`oINj|;!4Fb1Wa
zLkhiYE3@{6es2vwP5o+82WEItl)H~q>+N!+Of1{OPgi@SiY(j1PrbcyV3AW{jeus+
zz(BhQlp>Cov{{PS*FZPKL_k6MNty}k{v>KVYo&wnVTdKUfy@%Ce&1=Blk~l;R*;-U
zuR|DdC<`cTeM4Kgl$=3BfL-=48wD0!4^c<U2&Bh~%3h!d?@o&x@b+`r;I{`azIf{|
z?|k~Fa!~h__oN%am-O<ppYExz7sthD`ed-c?HqFXSvNmt4}}8cXWjgqJrshFpLO$d
z_E6|Ue%8&;*+U=~U7m@0ec9l}L^0$pzbc20W59*yl*Zumj+;8d&`z)`eDz=J3I3!`
z<gE8Z{?(ntBObjYp0y($uEU?EoN(YdC+cV?i3e|0VPIwWR=IuJNp~k~#n+=NVKWZf
zBH94WhhiOk{xmf*uSJA#guV#15E7#BzCOB;p8vIRWy8t}U*8z?XVSyo@Eo7U(4F3O
zCp&}kX!(w?JerF*Z)6_T!f_yhvlAeJduTfy&J$Z%`gql_#FVr*I7U1%B@HA6--|Yp
zf|(TuMLOv(4v=1)4nT{2sC%+6Ht9^B3A)@&kB;_z?0b^YK^tSj3{hC2yG3B32_gvz
zJLPUaIzl9svB6U81FHo@lJXxV&9h6hPQ){;P0i=_qA86`)Q>f){rs>uIYDmjHY4Zg
zAzWzXdSM%F7YC)o;HSC+KZ(#TMtC5MoP({YC^zO^5vm|RY@2v$i)_6WM1}GQ@5T7`
z?hLMLU)bUjmG@^!za!=K=sE*cD{T4lRvX+lZ71FMIv|mjvf+oGz&zsgX=DoXn<As~
zF4>#oFi7M*Q`17_AxnzZ=*VMo%XBRa)B;385TFR6Za3*d@V_?2f=?p?6}<?@DH_}`
z)YoR|JTch}dV2{y`m^7iq&3{)8XIWAg|n%lJLoJDv&Ubp+zT_1vFEitI9LZ(mEofz
zH@q)FM4zgf$?~RfkDav1Zio%3EVUIVmd0HiZ{JnX_aU?m{5%_hi1o^b!BWp)8jNxd
zfWI#z%iuG=A&-)Q+f}?1BXs-H<(1|0moDNB40uf^3F3623z{HHj8thA!*Z}8fMhfL
zA)7kOyiYYp1pFz+e*fX%hkxSkMDP(MNqWHEug<XjO#ffgW5b6kZ%rRex)*kMnAoBo
zQ;x@-q8u6DTzzYqH7k>Xc|*)8$N3{w;c;xOejq0%c@?#*2wll-I;mYn=qegla+Y4w
zGjlH6S2*yIlY@_iUN%5(nbt@{qoSVYvajZdhENGDYedpsl8Zf4v+YaPVL<EoN-8uY
zubU;nFgOd8U)$PSA18J(lyb=VJ;ydxg>7mjiB)P22ZM-IxOL`OOHP#htpg{*0O8z(
zhGcvK*95raVu2ji)9|0RfO-Vy%x>am%^`v(xApQQ-lv~gwzp*mXZ+7d22RNKu<uZ+
z(IM*@s~OVT36z{Mv7I|X7qzvq<IPzUwu9<EEvsjrK6v)~AoP6WkE0h}zV+6(M$de}
z(64hoJp<~#8SMeB1d!vmA?|8+9m3y9fG$H4>fP1GbXTM9){oj>UfZ*XN)Ow#`Q_<E
zTY=Z_uoV~!k?PSQlJPFOH?Kkl+BfU?NYlr4t4?~C9^nR+(i_(;dh9o7&lOEu4;O7Y
zog+Ul;LKAx3&?1OXI<Cg?YnLUj5ec1m&SW3%ek2Oa$bo*Q;?Cv5wJjbp;o3`$|&Oc
z6c@R=MU9l4%hb3~^;zkcs%XrE^wr%OjJ;j`H>~?$Li=(q_XWLt1n}{le~@YnZx11w
z2j9$h^gqcy$nJq^W)D=?CMKxz*FSUVA9n4{qnryQg13Jq^?0k?!9P%~$|TB0snQ7N
zkfJ^%+sjDbkm(138o(OR<V<%G1WD|e64`Yz`ofG9*<oF|a>0xY`Adn4B|CH!a4~2s
zpB2)%25g25zq>ZMY|oI9Rh^PBY|(bM2XX~FxP~qrksA*%xP%iZ21ze)5>Sxp_EicU
zX}igF{<6Du-&QBMqlA>MoAC}6RMs*=BJHkqU77XFZ7Fe<;$bbcgj?cFFmU=9cFRTA
zOWEswvK^T#PBq1<90cI)Hf!XWWoa_496|Q#lfl;VWw14WYp&_(A-}b#;M&+U=~}IF
zukR`+h|d@&)PHm1^_(f2)k8CHV4djZl0{U616w5H0XR<SrN|_?tu1Ri46&Vs*p5On
zPC^djAjIh$L_@}BAu=Sx$6%($ok*BrS)lIe(<BV7T!7_?UF<seE&>HXWnN^rCR#ip
zfaF?HTpvSX&yC<EYm+tX*q?G*M&0`5zu$Q8y&E5JZ_Hvm0X=)#bzo$B!jV*FYR=~;
zEq~t^i`A{RdsyqO<FMSathSEPV$1JgWsG+fr>$1TPD_Jmj)9iYV1-RO=i-t+E<Y-V
z_MtM)f66%DDPA>OuNAIC=~n}n!$geC5d5c9A_rSlHP@kuttgYH%<esGe$;*_HVq8e
zE?r%MrE?queg?IreE%mDAAR)9yTQfqqM!A1;Vw5g=!P)EaQo*n&XRqc0ek))SUj#h
zP#2T-o3VXtzF=$>3#SF#r@86$4KkVMoKFFYe$d?^d-cKN+N-m-wO9Wpcje?>i9S}C
z-SK;H!AW8q-dWKkj*2F6QZ$K!qDh<+85X1Y#gxIQzuW}QhbD47G=bA0r<7W%Xf%>^
z0s}Q<v}Bz$ZckvFhAJ5^Fv5LO+dJY4avnVWERe3WG=JOl&(SRZh-R<l*|60n85<kG
z^=?4mLL<+EpZ@CLx33+1_vZ(%|9<r9)8*jShd=)4ndfi3^YhW0?+ix&^b<B%HZI_D
z-v8Hwm;T~hy>)ax3??uj$~!47eBJAPv}@y@3EVRcrRAq-_3Km(9dm1}-}%?ZWIn5I
z8z?!DnD|OC(SaO8E?yYM8Ju8N^dX1*OT=L;I+4?=i5yl<=&Wi|M^zG?D#uef_*3&p
zHGh1}rT(~G&9al;ZNo^0Ok1^lo61ACRpSz>+ik0=wKeG+KV?4pf#t7VSOVdn5O+^_
ztJNH;xbqX%wZJs-jhKHRA3Z)v$XKVIo)y0H@Vpf4hE9p@?FepfM`WAXfV^xP?1aN0
z*^Robu;Z(dBkY}2=<5{zj=6hoM`*Wiy`o7eI!NSCn3}}^b}N$7WXq#*SLPE4!OHm%
zf<aWz;X{c2=D};~uO+G=>kmyv<gReEOS97|dF<?RJJRaF66*cIWwjOc$X6Y!){DAr
zQuc;ll}<P5CB0!Ms@R3NqIbBFYOm-#u_IK)A4t0Az&RHA+Ls#SMHmI^pIc-7L)eN#
zwqs5A`CHwvvmG}u%q^CR20fPJEq5+XJFRdSZg2}KP=#mxG<u0{kM+c*4N$Y#50XwV
zHI1AQXpk&ms<l{Qw0R4|IFzxbv?<WS005XKj5rPUR$&t&K$_7Mz>^-2vkNA8xI$1_
ztpm&97E{{%=5XxX?;(_$3kuLoK}6zMZ^qr;ko*hc4w%vc!!OdFxw_qr((R<xoD1&d
z`5WDSYI`Is<NM1}%YI!;dqeKuhs^;$OeF<AEj2}U$n1S$*4Pfk**;CJS7b`DlqvcE
zIBe7k!na*)Q!fJ_^VSrM-sscW(U-bmGY0>Wr)AfGe@+ykQASs{lI}_`>7*skjLiBP
z20KxtUUS=k{?t)*3?SYKw<2HPMom}OqPC_G0pQqRXp=So9Rt1%tZ*@D)Vm7ag*KD!
z4mz;3f@hJlNZOAsB?Iv3l6hBrsMCb_H(LT~8&M<dv%7eMI~2uQc;hv;!}eCxbj1bH
z*Ufd^VH>CE4`|fGK&==ZE^Tm{(5AU52x6?ZNF%^OsWSFZ8mGaK*(%3A<ka4Yo<XPl
zDL;4EM)*GP;|s<Oa=j8f{;=z&4zVb#rOQhf&n;j45?DLI>TZX-i~!r*g!w`T5S=En
z!yn?oUeU3Uu{vHwLTyC+h-4mDt;X#ukuC{ZWZL@Kt|nSrbOeSa%z2ngHf|=yaUb7>
zdp2VA?fLlP4$>xa#~l=@GMbcGSVT0mV-=oPt)Do7<BodgWd~DPJb~9s3R`z*;&%|R
z31GrLZzUUHYXv>7X_Ldy^{kH-<p2(S57RF+vCuok3k(S_Mxaa?il~}D;kX@aCaqSo
z2k5Gf>{hB5u2m?ud7K7_8}+<8&*PDi{eFlMO1NUIm&%k$#4l59W9+)DipOn0)gf2=
z<W7$_*x6!dtqH@H#ETb?U$(g+P??e)z}=#+BKww`Q*rY4{=`Mt0IeJ(%dDG(&uS&=
z^#GpI2QwS^CYYNlz-JJvZ(J_?Dt3Y>BP%<Qs$G_LbJ5(~rCbN#2vg|^x=0!rbgOQM
zorrS_4md2fB0*u{f&`nba4Q>LP>^2UxLDeHvSXr|v*#gvpB6Td&NL>RQf!6hBbTpY
zeM^o&y$DgwHFnX9gESHdD*+025g+>6=PbR2V|=SF{OlSi%|>SK(JHcwwha-rM<21e
zDm~ipqMh7%uC94q#v>PpbcTWDNRbtgI3zRn7}*xb=rGtl<1cz}I(vdZB<n~*Yve?k
zwNlCM1YXf1EFs$wa-OvVgwIvhlp<HNWKqc*js8^dFbr#hm2Lrcp>vofI}9npIYd&V
z88zZ2UbR4oa;>Uf5^Q7@34#2PdQqZ_^D$e0R#H;{_xXS?Q@4woTV+<`EDQ^TaALd-
z#!B`giKTsU<P6@@V8$)K`4h&a6U4eCPE5*u5|$7bp6=``)Y1vF5j1f!3%Pg(o3+ep
z7@zQ=JwToaKWc<cvKj4!?PkS^-wpoN14chdZ=+c6jpId&hq@&4%ta8`*jEm_ux~}D
z)VK``OJ%ro2L`x^r@T)T8aA~T_qGMktz5qVO0erP;%JEo9nRpToR&+vy3-r85~G?{
z@VEla<6sNL27Z_gL&_P{OtoYnXPg-X3~&kBjtq?AT5@P+%w`sgqq?XxlFqQ`V7&~X
z?}dKa<AI6^z!FosAH)pO`(gJhmby~P!3Bn>kjA2?GzL(Z2qO;>e`5|y(|mleb%A)I
zF<T_(2%yRer^a<*%f*CJ@0UpXyeL^Lc?|Ky?E)d1!R9q&17V$8TMGC^cJ+kp|Lp`B
zapxn)2}^$D*G}L<PYAuTCk~)foCfQDPiaDBfJG5)M1k8?44}e~KqG7ykYKO6-xw9B
z(MfmBE9$p49xXM9%Y##Dz2+yW%3o5CR2Tg=8P$}d&oNbp6IR_H6NKjqiPCKx<+5`!
zN01l)MqO<3-llzG#6;Ev`tqnGY$lhJR3IlwJS`?kw|O-=5BYYW2m5l)!SdrSYEUH+
zV~~DO@X1EcFqGQS{1g!*e;aY?Ig6Y7oEB0RuOu_H&BS+%j$61FvGG{$Hj&XMbTp3*
z#T^#S89F#R%F|zz{HX6xUgb0I$Ntx2$IF&}>_4?P<bD6H^~2eGxwGF9=O=ZIpgW&)
z#Hh~r6SO2Z`~?bAb(G|!R>{CsN($UupDs!;L23w#abxd<-D^~#jPfV^Zooj@ecF9F
zq!;qHL$V-9S$bo0AZ>$g6T`Q2uXoWEg7{!u>L%>_q9q@EC?#iHA)8R#=?IR}B~60@
zSHmvDG@c2n0u>xv(a*)IwO_#3Rj`%|+wl%WeJCKSP$=0E%jD*0B}vEF7rZ7C)cW>-
zf(~<N9In+{8C$i3w6P7qFxg%=W?Vto>vg~KRq79a>OEbH*xuL;Tm8tgqec?gfF>)7
z#(H9!E?9zm7jlc#<ovkpltl`;J1IvvroSqy=XIK}{>-dRc!EVXpSQok@G;wH`_PD8
z;^aQHYOJpS$9RY%y?}hxX^rhPj43b6Fncr%6qvxV#`ha6Z?cb&Vy_aZ9MN>{uEAiO
z*i#yTw!<A1s6fFS4JDQh==joJn{n-(2+k1H%)J+Ie5+6l+z7B1==X8l5gv^r>XG#X
z9pVz?@$)42LVUm#E4;S^6wQcxBw3Ru>)FW=pvIbiDe6f#ghc)r?+@o9#+>fN?U1~j
zJ+|{$u){D7FpYb`PQS5@l^N+00w)=@TY%)6!Nw5M^@e2c_+r6W{3M8bX^?)s4|EUM
zwFB7&L|0$pU82S|LsA7%ZNc6_Hm72PX$S4EH`3w`1)!{z1c|0HX3Y#^Mef&JRmf&e
z2E5YFYMs7nYb8^cQ4*CD0)*?w96a~0qyG@fV0gG9l7^IngEwCSov|PNeDuLD|NH&t
zN3TA8^Y_pF-zUEb)s|3ShRwgDRdK1pFf7zb^$dYMFr$KMC)h3g(#t)-cZ(<qz9fTX
z_D_s15b}yj36_TcRoYI}+fJIUv93~eq^s8W6xljAqs_42>Tynn(Ndf7R$g^DU#{wi
z*ktunq<lk)NAMz|$Retc-hFpXH*a6*Zy3dNZ6f#&oAam=Ng_uzP1AG;)A-UFvv%BZ
zNPN=hA7JP>+jLf1Xo~&qehk!&<}Z}9!Y>4)1M^<crnch3_v$V&E*6lUJh7kkFaaf2
za;_og-H_M67^4%ZpHTfdZx3fBhAH$8C#&eYhh+cq9@5+PT}Xb%YRW0Cwq$sI)v#rn
zW6NSI!c}&gF`f(y7uohN;~v*s?vjM^#@jF4`ql>lKS`Y=jp2ZRlcXL!Ju|d5djI8{
zFa37(<~z6k<F%>0_0vzCu~Ct>mYQ;SZ!-MPIwX9Onhy)m=m{hf;V2Z)JETf;l8$VG
zie|G{0)}NTgyH>$UoNbXc|`9LZm7Md6NaUE<$JfD^}S0<mf+g}UEZ#)l>_=ecX^8;
zz1ZEO9P`6Xr1BQPd5hu6g|{hhSMdZaF&Vux?C8j@NrD?oX2U&gsE;;AAW+}2`uVu}
zc}@M)y)<2*z*l$ID;HFOMVYv$63@%T^D6O*OuV8J7i8jsN_<czKB&7FLDwSX;PLSu
zM!eodpswb}fxw};F+qB7j7JBDF9+F9ZE}N~^T*T7Voo!&lQ;8VPBZn%n{gPSqL~ha
zwp+c&W5hGW+<QH_=|IHA!$YLVH*}f>bekaGJoSfmeNOPzss5}W21`C8Px5&r&uVc7
zJ3Yl(F4HjB&w=|%s4>W-a<k*$<Y`uG-jmHXEr{#~?nZ~XjSj~&>b4jq*=KivD7riJ
zzi%z1X`dlxFpy>3K{Wt5XHJJ>r^$!x91}Qpq6NsGlEV)bZvu(#+i8F%&1Rb=P@tmY
zY*;vE+>yEBwA&^di0qRzxzx+CitCVny_^zZr_&lL^^HzB=)h&-S)<1RLZ`9gaV2VQ
zb8E7ua!+M?{9L9#{mEz)8eT-#=mxq5u2AVh4X(L;l!F63q77EBSzYEYWp){-4n1v9
zo*`Z?Y+Rd~92j|k(D-47h>{)9&wv;GZi+NZqX9G!mMZKN%0b}*{L_Me&ci>u@XuG_
zpKbW(%ka;2_~+3A+1M5u@U;m4d>#II5dP`GKUd+O6#iL(e?s_Yp)j?^sU?Bo-9*+(
z+}7-6Rr+F*Y6iF>kb;V$z#HGa5N>G{SaH`CBmo5syL3D4((SZMx6>}&PW#mU?iHZ2
z_2&BJz;3bFHyY||4M8*w7*MefhQ9b~x1=>MydO^1Ji29<&9lV&gBkD*STot7lbk*U
zGi90pHB0>}yB$W5H=;BJ>ucNN^Jd8Y&zP3(fDEr0PCXZGm4R3*2f9v>^1nbuAo2!!
z;;VhJTB(*ak8~XsY8Qh@s~8=108_n^#h}w-KgbFcnM733{M&Ufasf~WR*i|e(8pwV
zA^T{BI~z@m-Z_9sn1c?kZg+sD-w<Y`IE3^ePamRXw;mOVH(>d0fCd!N!wYHH0UGk<
zYd$T(Cu?ytMEU(@>ev}4RU7O-IqZ{as9C0ZCNN8i33^KMb`b0wL?r}<vk}KyxSOzi
zL6VW7;+b$~ZIS^#G^~YkC*LO`e+FA0V1a?r0xl{z$vnhHVf{LwU~NCvxjqt%vjhDM
zo&99?yWK~25JR2m6RuYXtrS-ScA~2RFt`X!@M?jZ6HYZO!wl5Ngki9zoz*^E3=>pQ
zHFl{6p1@2sO!e25o?!T}5m#x)Mn_@bBXq_%KC(7k0H%$rQSprBM^V<xcp%>7e&JD|
zL#57G@rb1F8u~GVv2L>i;4Rg(mhQ`MY1(ROO6oR-%_h8V7ZC$XpBMwfFNW}k!8S*k
zqQo19v8KK&2sT$xUX6Z8^)OZ^^aSlDT3s{7rBM|m_*OeT<@8Xc3+n8RsCa7T6uUkO
z!AwCNXO+p?!d!PI=9Qg!<+8}sjzL?7ylik4)wlzij|qcQ*bDYh!6ZmKt(cx(V4zBJ
z(I$ei&6cXs5CV&!ZPJW5!A2?v0vfGXqOGMtr`Tw$w%L&@Y!yoE-)|Jaw+AGZGO(k;
zh23sAR58@LU1}MJS7h}|ayBSs<n}U}hfV}|XJ9&fZFGj3s6<otb?V-7k(onaCTn-2
z-9;gtl5naKoY<g!fa2z%;MBO=Wl%8nry8g^)U5zfy3i|DE%mAdJ&jwTiaNYb+KL(A
zYbCWAqB3o=h;1?fzjDE96Gd!>JhQ{c4yPO~3xpH<LPm_)sifQSrlstg8yBe~0pke3
z(7})iY-PG>^gt^Kd&Q0!_dp4r_qJn3C>9g+r7lNIw)+>ui>xBcS}VC9gQ-Au&G}gC
z;C1&iyiudqy4)MgyVHjb5C2_9;qEY-#!yu@aWizJrLH&v;4OyjeMj63${A*De%Jv5
z72BXy4!&Ftw#&g+%P2?L1uKN}MrkQsbioY;0*qanb4Q(E2XY!%GPW#EW|#^MCn$vS
zQFa=IeAcP@Ze9-^xF0$`e;JMyR}(s)GoeZ5bB9f5=M!9?3&%7ez=~{R9bvW?KC#6+
z*14WP%3QZ^Yh^##UHIkOS(i_CsJq^w-g&s{t2tx6!-l%(8>$?};snF+JIO=244?4f
ze@*HX&)T!V_>9LUpzX7E1dug8evtVUr8!`Lc!yOtzK5T5y~8fg^knNZeVYrk;#(jj
z7G0E?QDP`4G*<}}xJ7O8OwN85Oa79YIfTa&!XWsGml1I(DvNnKjC?ZFI2#5j(bX!9
zZYH?L12}D#Saq1KI=gllE&s8*9%<oxoHwjZKm{BRrQpDx2uS{Ss2um*4pvP++kto5
z4n+Jj$v#93G{J5>9xDBl*^du;_T!y(Hq}BtI4Q7>12|uw1UPg7P5>gh8RtJS=I#>(
z)z!Zdy!PN<1z!8~j+KprZfDQ*KHD>&?4J45FwAl8ng!3U>5e}W-3h2b(hSHgvl)&r
zk{U&FiI1`-`u${1`+{fgO1r}E&DpvuoQfBk*2Q5M!Q5pJ|6g48<36x|Jqz!RFW8`m
zuImN#CQl!aW}dy&lpmd+%EL|WcQJ|Km43VavfWEodKfcEyy5cKX7Wg+VlD@lI=y%&
zz8(e5q`%RMf}Ln5>4FErv<E<ENjt9BZm5>DAy9FbTVd$BOX9r~M(2GXXI1&spgt>#
ze>4jl_|{CbYy$w>23+{OJ7>MKOPKJyq8uJxqFJ56mEA3RyxM66<TyF%GVp-=1hg5o
zy(_AByMgA&Xpu@49gcXwVVKX|lHbLgz30R)ht;Mzn(X$X+2?t)!+-hK!F4bdE{(<5
zF+6+eMjHy$rgEm+Ms(lYs?aTMRWdx}uCYS0{!7q?jtqOr#U@$zlHS3|V7u4r%$+*5
zx3^c>o2?|>ty5R8oLc$nmrkKW`pR~1r}eqZoLZUEeG=#{xr0mK#R7i9W;Y#l)5bRU
zvw0NwJcM#UG4J%0{4;H|!Zh_yR1RF&NwU93nvgQh8#5uz3~}-~U5L6{47>DOy|~jN
z2WQm3j7J3<Ol=>T&V6!$L(QWhtsUqYMtFA(_v2D4b)&5FaSGbAtC|{>qR&|^p>^Pm
z_sjB~QLd@JYA6%y`UGV-{bBMf3y&7P{(O1)9M^8Vgz2`8_g)sc+<%+bgj)ct(&?v0
z3t25nNF_&snyO4uGu`73*=T!r5I4!2j4Jx3ua%hWqM*yQ(_wp8P93IEGVI3>djm{_
z{XLj}tYc9JYE;wKj~I_!V22{OiX;8_LKeW}p%0g>F#z-NbQ{d5;;nYljpo24e}Z@h
zFkxtPY^(t&WX2i*xEGEoW`N-vh9jMF5bh>%GiZa|KUkIr(Qd@B56jiu3>Z#Zz?f5%
zh5@6O>moOL=10u-S&p{h<noJ+cQYRFnN=)L_(m83J7~am*i81$w)$NwX%QUy2d7QN
z94((5#(vGJMX8TS4<iQndb9<U16JciEpi2+UZSftBA_&1tpKPZCQPHIm<g4I)?PSF
z191Is8JUlX31H${@D>OjWYH%pbXKPN8AUESY<`zKdC>*vY*80D7#f$>o9)8K?N;`v
z&QR}^&5RIN&S_jGLOB~Jvp?=Pwns3>KkdyTmE*`Cj_q(R>)}Ls4W4FAl|2PE8B#Cj
zR9<K?B$rp<tK1Fc*n*cC|Hnq_E7FY{CiiMj9v$8xb50coju@?2W~j;xbt3?M{TTST
z4>UEv74C`OPC@r)UT=7N#yV>?=AE8LmH)-Mr@(Mr0p&Q-Q$TYMIo=(*>2=moQujEe
z`5@jmE$s2mvMucSB|duf>Cp$j#0!`1X?dR`MRsbDyJ%(?FB#?IH&-$iRQVIeg-BkV
z#g&+nXC+PTdN3DM)lO>+jZb#PRwWWLJwpd>*U*MvXdUOAjUbeR3<&@}6wqG;6?S0y
zCb-j4u{JtU7Z79AZh(i^v>ydU3ZergHlm<DV5ChqLN=geU?A6kNPIo0khg4d`&4Pb
zJ1hO{^669>!;;5aoW*(b@MN6Mt1y}-X#gL`efw85WBpRLni!9$hHWffIJbUb>B9QT
z@}o<Y1(Qh43}^pnz&<<>aG2eOEUpTbRlRCi*buV4TsJrgb{tA%K=}Y8YxbhJ+hn^6
z$B2&2*$tG!rb;%0<)vB;d{Z)_rdF#|D}VoY)oP{og)g2wSt>&Vd+22{8Z;tgKZCpa
z?P$<p2amB6Kve?4LH;%{?hAK!5`+zqCf)@t?BMy|fFLp5WUo!mE1@btO$1p%ujw*K
z3HNSHzKm!T7>o}bMx}6v#*7M&x(UY5V3bB1nF**5F7w!3je##(EpQ3dZbAbZp~mtU
zVNnTIqA2*>J@<Zrf$np&wHo}n_X}V6LIsK!qsmqV=dZ6`je)!d>i!}fXl<5Wx6`Hn
z_o9&qLsQ=d?O3Z)Mx|1b1vYt1EB0L?Ttro_Mmrs81iM;L?G)Ii-~q-(GSZ=7$ojcz
zwOX(;IT7lp#tBi(kp{4gL|$ZbKo7WB%4A5o?8*&WXMrIo2~L6yUF<b3RUvm>3~9n{
zD;O4|QG569T4jT6k~Hd8Vm#MonrI8mqG}~|E8OoP)FkW3hJ6|1B%aoND`HYs3qQ|4
zt|-H<j(9VUnvUCCww&w0PLpcL3VBu+uIYgESJX8`9+??&*GaM>#FyZ|U9OZ2>T&3=
z3VEI<4(aI+Sq|@$LXnzBA3PB-oamT`a9j$`8Mv)6D?o|t_Qj;!2(wzNKqFwA#S_#3
z5iG0_|0epRR64u^S-F<nU(DldE!7E?i}|>JF||u#xrc}eu3?5zJN=%1*i(FJD9cD_
zDr;P`7~_ZGUcl61&jwN0*k%`hv_tGWN0pV_wp5p^kFSAe6HaKZni<u#oX2cQUuP=?
zr>!1pIqmFwbL13H=lJ!_d1rLDp6fzf$9p8i=L~7s-Rgr6zO>{(5@MjaIO53rYEmHA
zkLE;d&Y1MP>Adh64|Of1U_@oFL|p8}scibrrLsAGu&HdD%(m%lMQB&8Z}U@O8#7%X
zoH>Kq(z+2bpefd-Ax{v}G5g{yno&M0Sgur_nj|nxNuRTDeIy7)(`s<2a)y?-_^R&S
zo0F7P<WJd^Z@ZRvl+BjXv2_N4n?(gk0~@JZMvpSOww#7Yu|#A2c8sz#8RuU0Y>g61
zKB5P<H%d-9_!esWB!FxhoODwQ{Cj9u;uN8*WYuw10YV=%0m=a|19CWJ38pgRZp6er
z{TXLgLP6e@YWUfL0EA3IrMz#;npn0ogtRr2sy=*uQu<6Bs3k)^>+FnV;BS8K&G9Ja
z3JO65f`PAG^a9lBZLsiV6VI4vVEl=`-2;7jxvqT50EU`(?PY`SbTOQ?dOC~A8qT^6
zbvId^pv|gk)WNUv*V(YQ({HtAu7FGF4!RgVc=2CGPriTfogdwN_d~zvrr(QOr_!Ay
zVR*Jf?;!AK(`Vc%V@=~U4cQ(j!ozjSU#_<pO73s4!?JUV=a-<4`0p!Go3WwAf55*p
z2S5Aa=)c|qSKaIjPTnTFiT`11CyXHo@QzV4>UNWEH@?QW8ve^HcuGAg#ckG{`BEIW
z8T;EwS|Fw9FnD!p?Eeg8ommDp_CJ8$tp2*X3;4X)se^`K6;5%ra<As+qK3J%kXtiy
z1?vU=8;Tw9A=9aYQ<z;q0=rnYH)}cbD9+3prOA&3t1%;L)U6sUkEMd%e9iHkX1$i>
zEhT>;TL9++`@$tA+Y$$F{PCmL{&e%3?;O1R*3I|6J>_z8AE)Qh%{@lr##!@r<Qtpb
zo%zOz9hG?#I@}p8cK6*i>4M96z$W>)c<@$^Lt=&w+l`3oRUMDrHTl@h%4C>9y*_v@
z<DYzxt1;R|m4#2RcrE)}oJL#d=|XEr%6EAl{t-i9>^1)}hZ+9&dCYY_(4!Zu7`*CW
z)96b3Bv|<aMD-5%4=7+_xVSkG7;dwbBwaRPgR&OlZ|G_UN?Umy+arTowpD2R^So=z
z*+Zvpea~8&1?HxZkIq%Ib@I(}Kh9zf|IM1Ob?RoFGYS}W1tM0Dw=kV;Vb<Hith<H!
z+Jtco^a&OD_*s2wvgCrEJ*6Tav%m0crf}U^*osHI2c7J(?PNui-<uWbb>rcXt5mF-
zOqqdlF#>R>Mt|z`XBPkLvHvmjyEj`Z=hd%K{TkJ;QT>`xUshK~R71&K2q&sBR=57}
z)6r``8@=_?=$-#Mc<-MNUir^Sufns@^*HMOHC%=MIZk#{Xfr*+P0{Y}Y((9CehmaP
zhMT{C?&iC{VMNPJZQQM5c1b!EAt+{y-g^4h8?W7b<A<YX-aYu~uWtV2+XvtK&FEPe
z#m#qreelztk6!&Px%(eI|J3M}KiqufUq(+qrGqg0A4LKPR#&SiybV@sRTM%qF25Yy
z`tZkkV>jOa$&I(aH>SOp|G=scfyD->2J%n;KYQ=m+(?of2!0lSMOJrf091h>fqHZ`
z*sKzpRn^VidTo(CJvAJvnE;YxP60?vCO{HhO*5U@+U}jCU76iOcBVbq?U}9J-kPoL
zt=XB~X|<Am%--}!`!CKP@$iU@1i<Q^8Og4Cq+%j7!o$PE!^6YF!~M?`YX9l~{;&V)
zpZ)Fs_<vvz2y4>`m4Lt_KvkCw;pL*sBNtqBxqx1Ln}V=%A?{BKf1y41T+K)ea$a=2
z7wFI6g|8mtSuwvd??x%gqh<u#VO*e10ID)(WRgmiig36$KEYr}pbYCLA=4Nb7F)OF
z)&m9Ib+=iif-F)Y6j}gFK(xPg(-HO8*BJzEb;eJ3I$YK{9|M;A)gS-!@BYJ|dF;fD
zw6+KjOGpg=<It#thbY_jbe$i7QYP}cSXcercNGeN<|R=R*MGJ8+NIcA1P#N<wXky8
zT)1Qta!T{~_S=Xbg?<$Z4>T!waik=t=+9|}IpDXCUV7<xakiR@ls7^0gm3f*D3S(r
zpP;3(nDy%CO$(xF8}@vk(5ya4PV<E9@0>#h!>paf<X6eOV&PI+K!AL%1(dIf4mKlS
zId>a(3bzA=4br}$ZHC_A1Kgnv+O9H+pMusID7~?bHN7~z?b2&WJnm$hdbvK320!(w
zL!Sn|s@^AMF&+%+hk7T{#J!<ksvRiR@f|vYLRCwHKJJd`AC?`y-~!<yijc?%$hQ83
zF1555LNP^rD3<Z;?3qYniPvpcLWRYLC|~H%ZEiiCL~v4g!EueH38t=e7%?U_$0b{*
zlwjKo|Flb=(u0gKmwwvSPSwWHb5fk**=)zZIif(}$sRv((hb^a*MbMOAX)Nk_|jk~
zw1o0uqOU5L-ZmZFcMU5obnOzxEhTO?k9Y@Qew9)I2v_#9Az;zjZ{6U^`!ik|c>7y*
z3~VQlLne@lH-nK=xO^vEJ|IaAe^e|%f#OKB9*xfKEI%(<q%CLjma4C|Mt!xn>gzoc
z(;1%EmRuXVT73!Be7u0=EE5@CV>6J^LhS@v=*0FeyyMz_KuxL8P%8OBoCBEUS~i*n
z8V#<NmKX7mzrqr4?ePER&;IUj{?kHVx|i8-ewvM~6<)nqXo#P1nMzwc_o_?&s`C7f
zhONuC>e72V_qpP`+UKhTY^5=K@fiiuLs>Tkg_HquF^Pzge{(dVBW2kHdunx+XORGg
zZcD!&BFke4m&$+pzy7<Gj-AmvS)2*6v+05}A#@(8qA@6q-~B)T`!E0E5C7jk_;0@Z
zlmAOR{1HCjr$73;fBWC#_UB*x;dg)YPk;G0fBvg~|G)k6Fa9!b!}q*{|J=rZ?nsdN
z-~QFV`|h8?{{1i8X0rb6zxs>s{`!CT<zN0w*ycAQ^?yg<S{P^lU1~L9=_uFgP_53Q
zTFvP8QMuM_r<Qlr?jEMOXKCb~<Gf)9ogeH>t@23CJ5jsPNyV+#kXt}GHtQ1n(=!gM
zQ?JlrDe{&&8@u4t+R77Y#oe8ApGo&RsFj8Uxqtn_n@+G<4_g=A>GaeQT~C*Zt%V}X
zWaF_hqWR9b%Pj6s%mqgo=A0@Ww@Sz5zDbhz6O?i7>j}6YPQIBSz=|W=9!uI!bMMn-
z$JX)=Cg%3j+&{D69$QVHfBO-ob*az>a=}#{c^FIq0vZ*7KP}rFs6Uq&X}?a#iCnTl
zISt^YK~&bEj?P1M=D|8wA%_W08PcfCppFS{+3*ujHONwSb!{>BzdPrPtxvhwgDWQm
zGXdXmt{6?OlXzJNw_o#|^oXAfZ5rlup6S^P6rYERGb!y6MMz2*bN#Zzh|lcKz)Fj3
zW{yS;3D7zH$K>X<Gp%dQ3QfNU@%S|HExuwh;14H^y!@o61DO-3mdasI;UlPQAgO(j
zz;%NPY}fj;UfO?@<mq`lP0y2^DQw>8-OjX8*F({?7|Q2P(~Jvr(K}1JZYy&E*?Bgt
z%&C>~a0b?v<^BG}EFR?Okm_M&-Y@I_(mr3Kg>c`i`g_H^Cm3?!g2h|f^*$D?T(}mm
zP~pW$1bAtCFUl(%vP=0LL2^u(+@At-Y%7V>q|IeKPBDMBxDxvRza<a}Eu}@<|2&tU
z=cUg<S+hjmEM0zoBdf2Hc)q|Z$-5O+Yy8hl!Tnipke;W5q`p=aD~RVj&UV9(AoZ7-
zcJ#c!fHkve&=H(Q13!k$U8`cqk&N))`8#1aUxeYj3d4ZG$RJ#4J7Yo;vH@CP2i7Xk
zU1}X$GTgM%tUT1bu>BeaTus2LAvYgG@$gpZg5?EXHGd5pp@c+L7v@!6xLUiWp>+|n
z@BmRC--(gFucrLHb>wM4MRT-9t1FZ0=$MSc$WN8p@q?qU059l($qclh2VQ^}9rH*B
z2%yZIResXn{nfu+zKP$-`&KK59}6|2IPZUt8yLU-8y7}}`E}YUzyI}%_cto4FGqZz
zyAkf?=iO{H!LSr`q%qB+bTr8`d(RyY+tnR^S#aS^e^s!04p7{!09$=Mn+#NdrAHX$
zV^M4o6IjY#S2eG;N`bEm$3j3MqKd7>>AjX+HU-)}i}N>8Tre)EDa7MBx>HaHsZ_mp
zoe2ci_8BzJiMpQ}?#5Lx2#OD9D;z4tr4Kgd)iAR<0YW67`O%7;z<LD98>V_=HG*T)
zho0*&JCUfer^)p5Vb+U>lm@--MjH5%8dcHf@cZ{0J`?ebs2+-WW;hiKEQowoRzMuE
z7@>#zLs-+HBR{o|Ds_iz?h-Y{7ZCfMh-5nA8Pd)BMFHA$Unow&Law?F(|o^vxHE?o
zpDMIhjB~VfM#y-D_BNvj-3A{EACOA7(blIN{p<lc&<?YFf0|8f5VX(pc#!f=T5ygj
zXO?Ed+rB5q2lGSGocv}qz@<UZbU{7rgTbzbD2bO**n}oGSE8gvg57)GdKZbQa##Ir
zdizAI+vPuYP_0*x@D%6ulC^mZnL&5I^)`>9TyElG*bezVA6{;69tA(lt3F(Iw%Zj|
zI$oWHLtOT)K0GCXxtnGAV4L{)$gl#QHN|<5A!PrXqK#%G;OW7^Q>U|RHXL9qoN)%@
zG(P1ZHz`LMl6=sLK2sO)Pj$l_&O(D4B>iEGu~z2Mu^O?r;_NHNNE{ZSE=K#fI&N}|
z6%E60l&|muYIu!b-_*Bkj_T*7vF|*DvF%3s>I)UXMRM*Hn9Blu2GbEm&_VUG;{c&E
zmyQocmqA^N2oaIr=)hJ~b4qvLmft%emrEWJ=r4?kt)<>>%MrtgtArXAG;>$PHWade
z9phX!Svt+#;%-bS_gmAn-|%N%{w|ZQb+>ZbRej1!pZxiCXz6iu?HTq8x)%=@%&`3L
z&*aJp*WbY8YTaEry{L#Y!Em>imx|;o&mGmf-}KyZ8DQz$af`ci$Nd(ZJ0e&c=|Slj
z)KUze5$g!Cz&tGslcGbKsJO8MWTrSO5@c>rq5%ls0ot<=6mX7mHqEkV6sKbqwyJ0W
zJHd3w1qQ`21(Z6*Ao21og7w}pI*bcBjKg=pX&{TJz5pUa47^MIg^u7D#>9No{*z&R
ziZWuFU{tL$+z!yCG8Gq>%Fui2Au9Rlv{ulYlQb`;Q8J|Nww$QX6g)D5U2mSJgCu%r
z4_nLh0c3St*|ily$XcHJ+Uc&ihr?f|3GABlIG;aSSgb$G3yJ}<DPIG9cB$(+qzh;}
zLDYo?Dw#)DTUtpnfkLpX7FTw6wcdt1Yu*mDf*tI>n!#5q^u=XTrzZmUCNkekjHy*j
z#pyb3AA=v3^pUmNffIGH@|d|y$i>xN`dps|MHLZ>3Mx1+F(R+?+X~dGjhoZ8iv1gP
z%Ei+`4YqYYb~4`OG74avr<VzB#45M}wog5ckkbjtq}-ptfK~LW-y{FwUcFpJ-bb$@
z+#(KJt;Jwn+4L&J<85!X5a91Nns8(5hoz#56(B|}NKVI&^z!lZM|;mdm$3qj{D$R`
z85zNB1&eT(<OV+ofMZkt;DcDz;i}R6E%$sC9^&w7+l#}a1NN_2eVFhxkD)DxLw?JQ
zB}pOds5s>+K6xSbol^RHQ(Z`OmcxgvBX@%+(fz;*u+|Xgqh-IyfZw5&INkEb!*JfR
z;rMMZ{jYaaHvOTfK<Eb@lWVJtW!+GPDjlh!%O<F2stii|1rgRo2y{%l;lw~M-}V;w
zxy55+vHf@TdHqgv+nfxZrNe<DfgCA6vU{UNyVOw9C0Pwq06fiL%OKXrpnHjK)=Pg>
z_i*rFjT#HjC@AjuYz(7VHw`qZPn=3I$DKeNGSv7gG9T~Q;qKBmm^fjBusbg^b0%Pt
z^3ZPmAfxVbEg4IwKNY7*?yzjx3#HV1g+*PrL`O5`2TWNx8owpJ^O;8DO#KdViyo1@
z`pWrLc>u+>$rvPpgBXYyzjiZvn)Z`%0b6?9n!{duX98Mv676Rv(+f28J;8B^d7O9l
zpERNwtsO8)pmLV$i0R{Lp7v&FavCzgD8|d?6d<$}Q7~$R{`|$k-tJ@cO~C4SC7h~3
z^OUHB>{l0A{)Qbp2ZIzFhFxwtrW0-a1@-deG|mSUZaJIGbGoOJU5r7!I7=tc+5z@s
z|A|JWV7RJL=;u6}scwiKD?&7*AFC+Loz`Xq8aLMYKz;n6u|<_JU_2T&(8OV2t0>}V
zufcQlVM+(^H+9cU3xMEj1taUxT#Bh57_M9ti{j}T4p1ahk;Q~7r6bdw+jt5TeZK#A
z9q^?JUygwr3n0=jW+~c_dh-aSPueHe9mW?pY&1GF=+OQJFb!pkxEU3C+~wF<T4~(q
zgxnU$FhV)fX=gv$+y5Z?Y-fLOzZreCcksoFFAt)xc3!>Od490>ct3jaD%yPky6nN;
zi|6p`Nwo9)HB|h^d(R&=qa>y5V#y_FkkA7(lOY|Gf#4vG0Wt^=PBBUP=}Fp$u8mJ;
z@o5sBqCIGg`~fQGC@pX}3o>~P(@{E&IeFR5a=%(@+EFM+w%2YS^ka)xUikeizN9!C
z+QmhDNyp+#I#$c|<7Y1qUVr`KvwwuPMRAn%n0zqQJqXU!gBI)rw1;4BH44CAUy@Nx
zCqVLB;f$4KpeBtKX0i+BYbzyo^GXL(&(UGOGTDjbbC|=xWbm;jd!2i3QqHL7CyX-h
zy>Ll=5JVet)wrT1CDh6x2*GSN-R>iw97Q!e#YplRGF*+`)m%c2;x|cvOigN_88I|J
z8=T2qxrlJOLeJIGbQUmw5tM77AB2Fh;CtYzLuEf}g3ez*XD_)r_dz1is7OtMsR;}j
zxbvaVUN%Lj#}erXC#S;`{A!jDL&HQLzs!f>QchYzn~?CD>|q1!{Gi;jhZxs&2bMAl
zYS%yII&a;iR9)Zq1q*czX<Rqg%dSd$<G!A&*K_x^x{7Mk+_<0hy;PCq#<GPinvI89
zJdj=j>F6}%v9khyR?LQQ5O9S)v=+kN?*$g~I$=7q70#rJ&OelzYUzAg61+kCF;vVC
z_Ao9;)j=JAo5MKvYNh~h>gM3#QXjFD5_A$jTYq@2OiHm+KUmixxd`r7s;E7Kbw%Bd
z>48#nv5s^77nff>0!|*(Wz-d?tw1U2B&aQ14MX%L6Lpz+L*H4(+Xh+7OtKg?1Y{%$
zwx#PhFXb&~c}rTRdb+6q+ETI>vO3rLbX&|V$?E22b?!GAJW6nI@Gfc_P`Wn~wJUpL
z@KV>usFS(uzPwjB*QMsVl!8yiBoDupm)-jqEz`hrZoUJ^^~eG#-GldLuAZ%8re1C7
zTWux}D_|*dvRZZO6|GQO_W&L_NvEXU`I5aNfhEGb(t1*9oym1<1;e@F6;Ya1bhc2j
z^)Ea42lJgSQ3PzTK2=D2qV;D($84__X`9&FGenFW?QMV7izex1GNc8SGUQUQ4pg@L
z@%TJ0T-jrYLq9_w4(T_01%~}RM1j_2dwH4p3S}-kE5LEf_z0uqUkHTK&>?jw0o_qh
zI6l+)Iy8L*_Y||<OC+_<r1+HL@nAWrAm}^N0&|gFShsEqxL8TE335<f+@S6>Xf1Z$
zcj&!jQB%QQO2kJGcX1uowCx3r3E?rXz++y8hrBnr0FU_+Jj_B2BwND%wA}p0*nb7C
zU0&qE^5ddnEMxzE%>fc`KlmKbMKP;OI{t|tD#d<!?FUP-pT4RJmtu>2Q5`TvwYOmA
zR57eVX92G-uBnv=a~(&<j&$K^^4yYLcA)cZGg#3z(rYqHkRg&fUqKg2zJTpuWK@=w
zQF?7qViGUHY3}2sN2Lm>Ysi91F<=5^XdRgB-02ur;wE&ee}*?rP#F$YvJ9-8342L2
z&c@^9lmY`#<n7ZWZv{LYw{?@}$&38CuJ9;1iD$zpQzoiwK#i6&J$3V%)&qlmYw;Yd
z>vGO8l<^RH`%Y2Jax~w?)5uiE=<25H8@LRlMT9=6y2nv6I8B-wMuw(Ay4yt>iT08^
znSJxkoJ_7XFjnawWV7Bd8NAf3=@rH_k1LFuCBm<AOI0ywHZVdUhtt>;$@%<x&>4|S
zDgd?~7&UfFUT;Giq-|e`xFKh8@dWz&B3Eg2Ps9(;RwqBntl0kh8n9SWbDJ5aCsXqK
zuR9L@`dDH<NpN?{nZGI8AQ?z%7}*hnc+!_<w7%JDV`gRg>Ey$hP_T={+y0?J`!R1K
z_ou^pGL#y0GHiYQ^%)vj;2Yh~C?~2`8Ox!l%wg`{RZ>aLO&R>{2FO)bD%BP_6^^4(
zHY*Z*<3`4^WeB9jP;AUh8J%F=d*fIPFsEN=kQ<7&JSzN#FW)tSO&Ma8-YspeP~0RN
z)bC7_4jK54uBOA=tH43;I3AHRv_&Uy6%Q@@{cNO79mj)gKgGL`k8y+l1=c)nm8?k?
z;vqJ2q<KALQWA)&!j=>G#R|bAX`D5rAvw$$s9Rn!hhg2zN>@uKM7jH+Igu9hX~}Lf
zFuBB*0004d6P%~$b1Q*SBj4ndqm&=fkx!%3bo;r;5mIIx)kOC)pNxxiki5!<!(QBf
z1Ivs_@?HAkP1%gT<D!h0rL*yH9vy4>-i>P0Y*IT``EYSIC!+~)J$m>~F-I?^5O-qE
zkYp>&BFyyUL$c#|HqB^K95>OtbVlb!G1>sg*ShxM$;nBr<wSeSqKia>%T*t^W!i&B
z@hP4Cop73Eq!3y)&<)($^-H9I@zAjL=p&mbslFHTo8A>VBdz@6=Z+r6y=2%8rj*8T
zJ0_rJ`Lm#QHk%?owNNoke7_I61L$7&z0X&Ec|A&Dd={W;(KXlR-2zvB(@yeh2M<mQ
zt<pWGKt)*jjx}b-=KL21k`<Qdn8m?yEBY!S2e=fL4j5#ZU=psfJSF|JIG+}r+ymYv
z!w(0nwLMmCaNg<sG%=8g4Gjtot9>?On=MU-JOzCdd7CV*!1^yHD(RL2i0w5oF*>x8
zj$j0f6c2{crs^zp0GMw1SR!Z;Eydh;{B2=!=4)sW&yp2KBN^o#6|KzSR26_pGeq?d
zXnKrdd;^bWPeAV)94iLqq}F({KS+ysaE{Imr!HH&6{()O`Z7}v4lrBsf;{7fH@@|4
zoe*JJ2HC^Ux-au&+mGl55GS}jcBicX$+_gcIqff5BpphVyXnZp7qqvDhX)iyU+d##
z&|d6sydnfOo`|IPTADC{kc8#MmRmM8x2u<0zhoJumXV~ZExPOz?`P<P58re!KUmvY
z@8r@bFH|hZMW>hBrwI&QXt}*{jrCTlMMJF|nipH|y7DsH8srwNwsKYUro(wWoFNzS
zg5=4iV}00l9Q8n$&^#2JUrdL}wjh|<c9c;y=Vj(YX~5Q(44C$1S~6lm)d)b@wAiPx
zbDPw}9u2?dF(z0C&Dy#vqx)Rwu#!G7yc-r?h~oq58bhsQ?}peMhLt^cTQ<moy!l)1
zufXXY`s?;+*@y#YDJAv`C4ET;HKN#B8um`ifh34?yfxQn<D=a#DD4l|E?fi0#WaZr
zxW1plHe7C1G|U&Ep^bS7p%soYixYvUjhJ;3(=M*MbaPE?6Uklb<Rr;;^d)C0VL>5^
z!~V>CgJ-?93hph`?XP8<gWyh}v>^%5J{zlA&u}mNf<{b=M-`xi(MpF<@WuEbLz@>$
zh1NIuXLI_wL~<gXQ7K6604jYTwTe3>ik}r!LAfkLUyaIyUf5DLsF)1b>fdbo_q%&y
z;;hs?IwjX2ylZ|ExJ)R2eIgDKtCd<2Tj9l>!Lxp%y3*FN6L|p?6hQ#TH(a%X$oHFp
z`k<3ff!63yhaM-m8m=cW`})(Owcr?7@d3It1P?{*1PvdWWRq#dHFWsWDszy%k**nM
z4>qO5TLaiX^g&V?`%{#l!fULaQ&9g-$qSb&Q0OQwBf!;*B=M694zkh47nJiUr)W5h
zR`l7NeOO1hD;cN7sEN8g5LJMJ-Nku2#yictr;);qgyJ-w7;K`VpC|B64}kUKbs!Fu
zMLio$;%VAThv}5A59<=Rt4Y}<mbOb96rE~pW&4oM=3uaAyve|g&#ai?HDuVi6d5Zy
zH_LW1S^_}vAJNf3kNlTUhG`$4rx%ENjiIlfL5U%js-avLz-k0deox2`l^Q3C<QXsl
zkTn^j-|c`$<21>r)5&E#nhcdqUW`87-;dD?IUsSYX+rO3a4Up+HxC&BG;>+1Ra#iT
zFjSFiDiJBOdlRwrI4EsnA(TvE7T;R?ZK^5(wSg+jUaqFLELK2-=>>O!GxD`Yw`kKF
zJ#TUEv!0%Uf}8*r$PkZl&YsMMt)Hv23!p|euGh@WuQdZpu*FRjo=wYTXH$XMV`Kkf
z4P6UPB~1X~Q9P#UBQepdQ?2PPCLRt9vetCh0(a$bB<8mjUN}V0D`{R0Nn4Foseor;
zA>+!%GyGS>q#vtR(e0Ef3HQ@z_blnZiH_m%m<&b0F1Rr#+;+3kC>tNMI})gdbdE)~
z4|g%*!<28ID3(#HhO!DFw4+r~ri!GKK1rsa_2owqJ+M)zH#gGZ*e{5lMo;LT1#s_E
z{7^SV&~14S2I{gI>9O9Byg{jWB3nEiQR&9<_0cv>EkvA*41d4yR(1d0plwtWHJSLL
zL^25LFJ?-~V(wx=Nb+K_=AEoG-6`1=--%F7cPjCBz+V<LEel}!)tZ*@866Pdzpynj
zH!Flgh+t?g=<v8#(9l^HH81_bipow|_0Eb}Qca6KtowPIHKSuH*5V$vD15zAwi#$k
zcU6BQweZ*+e5-vzF`G=XoNnVx(;<b_1zm`4`6LA@w!&Q|yLiq5ep`+JvfKU{i1+NG
zUc*8)aRC8;3pL#tt6;@7-`pgkjyBoAdqT5-cgLg>jgx*-6mdRpiT(PqpbVYX95Vqp
zM2$ln{*1Kqzn-XRlph;<B~wE}M!~92>Q)}|85{a(rs6d&;t`I)q|g$OL2o<ugz~X<
zIOu`ehOexZPYeXGs-$rF?uKPhUz5>rVN{mL>MFsZrG+agLKj967u#Og%q#Fo3%y)@
z)UJD!!INa~RS7{-FuQ)St>A4(@5EVQAV~bsV%8Or3@CiCluV+g9uA?5!rnbkVI$RX
z1CL9}m-Nhs*B+RXAa{qR)Pl}*7a9liQYx(6e`9)3t~*_vZ`MRlQ-zwRUouwMAdfG`
zEfFrqCHxJWZ=p=vz)3v%01YqVIUmIyPqlJ%OnX*r;#f36$Q@hkdMa?5;t>gzjM{|`
ze5H<waML5<xrb#yf(tID;AtS4I0oW+O?#?FN6Zq;6O2hUoHt3^<0H0utJN|Gl-xeX
zaD&e9fLt}@;if&Ryt=|*ZjG&D=lD2*wg-zFh(|*Q5Dz4VG4J(tv^YxhH>ic0IG~L?
zY_F+=9e=ujE6&Tsk(f|y>(1iutn{VTJe$Z%WeyZqYw(nWvKm0JJeOWy6=CMy_Qi!V
zqRRGk$r2O$mMEBPX+JW2E6y%k*WTF}D649iqpH2fVWG)l=y{~0?dgzcw3w+wSw6v~
zCB4#uMeaBYw=%7;k;|I-%6g+6ZZ-_+pH2Iy2E5!OHR2Y$(FDu5)fYhaplF}eQhQ|B
z<*T#;TDhD8V9K=4vVu$@?i)V9ta@(_HXTnpUC`%3;?~R@=i}66X-*?DNG5qghKJDL
zUYqMk&Xl&jYMW|?UCB^7&^4Z?geOTK$G&w!Qa3J?I|&}YXu}B1CsYlATj@kaSj1KL
z%KRip$Ku*_Fp^&6yl;4$7U*PtKys3VuT>K)bBF^Kr-Nv~QVz#LfeTyFtIlWlS&=u6
z66|&a-L9c^sD{fJXb{nPik3`6MQzTL2k02fL|`YIT|6};xx&-p2jXhWzHbd9D4XSH
z*=09UY}AatI!nkdGDyjuiRy>Cbcj-@hba)EdNxB>sSz|I?51)&H8}IpkgBWhoa>1^
zr<e;!L)w_|W2(oXDY({pG-|H~En3hwlAk||`)^LkS9q6wU~zLoAF>=4fL(tknE7Cb
zvakyrd*;m4WEhA!g{@mSP(pZ#bW8AgqtuPQ#FI`csE$(V)ji>7c6KfSR8!(uSGRjD
zjeNP2YBSf>4l*+jnLrKC|EF83LrB<hCp56Ho{3&kq7q{>R4={ztFY0maig_kizM(t
zKY5k*&kVESr>p7(@A~VKJ<K*+Yd)<oM&zC{-xBMx|CKx`LpL5SV5r4M+m625T4+o$
z;tvImCAIH-?GSF;>zZRW(2jz&M#&Rd$WIfLOOxKsBVl|D^)SZRmvj()V^ASXl&cGR
zvfwn5An-0VnmZEM<rO?pNAYQn${n64SQ~-X{E4Y`JSC^Qc=%ut0!di+s6qaxq61b^
z2FRv=Ruz9iQS%qmm?P`gyp$d!>|bS5j`p~qdQN3zby-#1C8*2yH@8h1qm8J2f3vc~
zRGvF5>Q|M1M1cbP3EfBzZpjz)WS}b78ggb??z+3?WdIZITS=ebl}V*OSapE|P+Prm
z+tfu3k{?^Ft+j+ow-)qXUUOV?mCq^$OX)_3&O2@$_`4gmJ5B$K;~wj}#*$-b#V74R
znZW{BBd1L@c_@YshlhkOtx(-7|E2Td>d3*d0te{jTil>}b@dNx0mAxw(`58K9#OnJ
z81+~3Roxvl8D0#Ey-Es@e<F;Etm=4hn8M3$HdKNLw$TDcd~q>;$-BpS9iaq6fl<`-
zq8|^)cgWg)Rg0})*bMw4*|9uB=%IdC!;)xw!n+TFRDWnC;fA10f-B3h)!L3*p@Y@~
zP#eZ}n`a4VZd|;*YPuLU{TWoHj4lp?X5|KXK5siCy%t7q!E(F|Cu4hXmPn%);M~8V
z&v{BWUYrktwXPQJ|4O2Q#Dp&*!r~z$8Y;xXyNZO8IB-OP5CfhF2v2`A^=aB0m1@~M
zw;~0#-Hi6U!r^;h&*aB64}${bSv=w4xHwC-nrz!}Haq+V{SU&cL@A0Uv!(}9tqzXv
z)gU%@ljq`_QY<GIamDxYjqn^?D854SN4L7NzzU#bW`4UYVXhWV?DFznmS)U?Vo7$c
z_LqiLI@JEa@*pif!~LoBLUpfNIC{5MF_od6G;?OhvOaOc_5Sk<1XOlciBdlJFnM<L
zMzg*^ZK7Q;>P%>^T@xz0*Kn(E%?)mY`}+Rjs!e*E<W(B?s#K%#m5G~E(jQmCi0aow
z9`|ZYsHnbGZf_2hcXj3xh|4n-=Oo@e5>9tcc^pUxt6N5`QmE1_a63fKpjLRt;S$nq
z9IBV@rHEOR1@EJ{W`Aw}!m}D(-r4)ulb)iyO|ofGCh@ROW^EsGo&Z3Mcf}rL!xUKY
zu)W!gZf_nnP}(Vjd~0EkUxbMl>fvgnd!hH(!LWKNtd*7#C)mbt?p_%R&Fb*sY;gW(
z;afLXo`bTm&>Yhl=6HInE^z5_VX0;}$wo2t@(@kX9hJkG7S1&~b?FElO;1^!bxpm>
zbas|F*ZvE0jgoI$!n@RRxst1=nTjbWjUO#fI?zSLO7++X0aL8j2#Fx`c`E?^D;?ir
z34AVB-N08Oeu&or3`VgWe<-y8efS!J{Ujcx!})UPT&@~Ee-ExoJHzyJiM1%kBDF?H
zw*MG8sUHtlfO0O2)|^FUK`lI2$A}Nc$;E9S!!&)d!VnKlxo|)9>a+mF1usCM+N)r2
zwxIQc_;hjQX?$Aq)-qbLka)Deu^U1s<BPjEx_0qv=mkBurq&B8jcMp&K3>wL2^Xq1
z$qB9EI;fV_m&FaNF!DXAfGmcFxyNS3D&V+eP2LIh0bW9tL3W`@umEIX3ogP?0sL$@
zTL~VPTLBy!Lw~XgL{)TUps!a4`nu+2c5rpjRVnEet}Ru5Md7W=hL=;^ExT&7Shl*=
zl?J9%eATv9@ny}wzFzaMuh;x*cQ5Hk2^9fH+?!C_Q9fU!>k53x`%t~=lKDtqpfF0B
zcAm56gW9D_w!KIppOzGHaTM;J94ZabeJM`G9c5N53DsJup(pgqYwLzSL6>FfK0@2u
zZVU%~ROFsUm8=TNLZkZ~vTM3Wee5cu_Xt6F9QCMt@}q(uEyDr!0)yo8#Yx?qXhjcX
z^eESHkDr{)qQ46(>-$Lgkb|Jz33r40<EqkMacI`cE%jO;aB^_p!9h{Bf|t{k$000)
zSctrpPGEXQ>9o)%uyUhT<~MC>SY;n%%o163{DB1)1ab1U$j;DdRP3#k5b!6GoXXWP
zUBt94@j@s{jy>IQ-#fuH7e{F@U$z1@3@rn7_PxkkMFpiQtBQb)SH76V{b-$xZ=Q`6
z*h(L~fuNNB5<0Ao@_5tdb_c#`QCCNI*1mUGQZqwdbHl~K{2$d19hcC(pFDevd)hJ7
zT<3svk=PQ#CYRGyMP>u(oDA5_DXv2YCF`^IYSE6hCc^M&&<cxpgDrQf5_sJpj+@eV
z#M|st+nq*qE2>Q{1L&)r>AN){x2v@x9vAEA0dT_N`>6HvEFITtQLW*HUWmu(D4r%S
z^8I9rHt?dJ7GF{>J&b_W<ZE0_RSdU7+6T@0dfNn)B*S<)8Q5DVxR&VlYF^UEZCg;J
zAQLxM{8WY3iqoenX*I?SL2D}vCVRu6wm?d>*tDdViMo7h4x>$No<hjLuwou#00inN
zrJv5wGdoMzA>)kW-xNE#=3~D7daOa>84}8Pb%Mlj>&NVm!9W`XPK0mwV4*3}B{*_`
z_o`LK!O0@!1N9GVCRs5(NiXS=1CKbUWHo-Op@T}z^|Bbua_!yVW8xS#bhD3C`5N%M
zYRmK6uo%V#?`>BC%%xWV`zXPb(W|11g~LDvTl=spd7BRX!ieY>^>XA9GpS0S0)5zV
zpuI%z)gpLm^>EeNb!TQbg21}2{wrKe$`@_4EHIq2kX(Yn^kdy36ErQGDi1t`lkQwA
z*>;fCl@!y(oBq&%%-n4H{D_jR8Qr)6@@>tfK%K(;WfMcgdV}Hx#?xueZ8e%UrEOzT
zIHNKoC!&ymxK&P;8whZsX0md~x4A2<ftplObPLt73ycVi`~8fQj&Y_mgokkh(o;?5
zbgcZ!bcT*y&^0MI-c&@Zpo0wTl{vt%jgX_^eunHZ$lMHLsy4KZ*Zwr-(~Gp9D6N9B
zw;OaRBm|7=jI)7Z*0MKaP_QpB)EfSxBwrba8@&1MVKIpOE8ms%rdl|-xM6GOv$z@E
z@9`HEML~OKs$o^xZh5`NIr~;Rh1!UPu<Zl3hJQ>5j;m%Q79wXEck*VEb6|!+#<SCU
z&2T4XvQKV+n#dVnZfd>oMgD8U@LkXno~k|`*V1Ro$`Ri|S{;yd5Z@c8)AtkeANIuT
z_gwbE1h79CbE!)s@5Wu2W65M8#Z-NHN;eB&Eby`g=NwSK8sz>@SsZl~cPxrpD>{`H
znB-Db(7zjtM{1N_rsEBhbOkZKQjJ}=)}e0FyJQ8RY*H5n-L&WlBLegtmD&MtPCA{}
z50A7~teu{iB520qC$!l4fbhT3Z1_>T4&a)qWFV0(Ec8%7+TI!Fwywh4fRGa$)RP0a
zLm_kR5W;kWtq7j*C6~^Hw4FSU=dDkfXCG)XM~4`G|ERj)w+En&4ZL^e?v!bER|nHo
z;`&x};Bi$qQho<bRGLtH^TUy-^VWvY&y`m+$aSDxa@FKpUFe<_7tyii1&0fcD{=v(
zW2A?<OT*VD=oO>pCIIjWWhk`aS(r`RFx;B63`Lr%iH|;NJNsNi74(OMy%;w36bNI#
zIBsON{C4E@HNaFBg2Oj#^73%;VRHfCdeMbYY8Wp|5|#J69*k|HlLqo88);Y@CMVNc
zRLeO`6x|AlYQ1ba%|^9_oNMsD7LR>jzR*1|jlz!G^rp46JA!*m2OjC_bpxoHg|wyM
zW!ire#dOUbBM;dO5|%DGyJ*Xc>vg0<!x|6HK7;z?d8un1-Z@g)K+q4syuBNIyQ$tb
zM2G;)(?C}q;$Bh5Ohpdp4X3tnKtKO}m~_4uCY>XhG>pY2=8zYO?KQvBHk1eXVYJTl
z>-yi-=s%3~_swP%C}I$RbRLGJI0s7T0=!o}()emzOR|W+R4|fzqt+0K>)^n^rr3Ym
zK9a<>WpV$E)*sdBt|E_&w_ri&!n$8wa}UU0%s7N7VV??XBR-KI(`lRTf_7+n?wz13
zc1hzg@5*^w2>gM8UOxpPaoP!JO|FIV1~iL49;clpAuXlq@p$+wp43l$BU&<K&t&O_
zd>RV&mJCBzCvK1#?{gv(hZqLj2O;lcYUofE;PejFaox7OUU6-?2so#^hFn^c^?RB1
zeqK74vwOJy5Vi%tt?06>UN&3<mR13}*hBpzbjYUSyHcVfp9+9POXtZ_x7YE)g()5~
zLaFXURX<-OQKZdIFlubglmdoaI)bZ@9uaUjc+5d?u~jpSTP22|f>lXl$H@hbkn-Fq
zkJ?s%YuJJmD9<eg>i9cm)oNf`VeImNeXi{Nj^|gd*-PAkQe&=nq||UDT(rW#5Gq<i
zAe6GUtlTIK#Z^=uU=pfy47(%L@4C_9Vdr);x^o9qro+4NbnhNKwOXyCs-&9HTPIH}
zyRBV?bk$PBJCr%OKTIbRN??U(cw!JgzN8PI%{jds{cw|YnmxzFe73AjZ~RG*D-wNx
z^}!A<zBL)*>z7THbF~pDftliM2`4M7XR)7~rrM&Zxzp5K0h%`gC8#M=!cFa3mWI3!
z*jm5_W?MuW@vFr{_-+HPi@O6%c;iw?P&nBuXoWh%SyOkxTpkbb0-~!p!Q$_7gC1W?
zUR$!|4=NSzIHZ=Pf!gAy>T&g$>+udY?GG{)u55blHhrd2=T$I)S^uFg54NHEAhPH5
zI4|n~p8SFRNIBzpIN3NrU-t{^q`!0gHuo34s|A~^w4aUlr@0BKQRD3B8ylRQ9rNAl
zAFOpo#rY|x!L5#e^U_WF5;nRWgM7d2CzEM(T<8!}0f5-%(F*KdW!c+<4steQ3{Qcb
zlR>a0XH)hvEM8YcQ5TgYU-M;utsUSOie{_gph(wMnY0Pd-}Uob&ItBA+ec%C6F?>B
zgvIm+Z=PLZGP@>n0{&6M-)WlB?pz6`Q#c1WO??q=RC<UTULHQBwO6DhVd8BYc*QX7
zC-wV{@>!yCASra(6{29d7|Nxe?jh8=b7RSM=u*3bQteUvh7(5zPZ2eec`_NsfTrQ(
zW>l*+!inxpD9zHXJd|(2FE!4gUiM*YgbpxiBCc^NZf&QB-7NEZ>m*MSb^zfQjr!ZQ
z-(gnUM+LMSi62e<2}z*8;4^&Cl<688sh31+eoK$|T4w?8+JxZn+UDi%iX7eWA(V2t
z8%)F;D2!6H8_ZZ6C|oXxg=Dntt{Z%tKil}KT{qk+e>P4oT_?tf{b=69E9ElP)xJ~k
zN@#^$sma18W2*03t33lTTkfu7WQLFKj=Wpip+k|f38)(|3t>a<Znf)gU!jPv$#qM*
zohoFP_^!9)V*w*6yFzNh2imE0Bl-hB6}$aZ^BR*^(RMe@`#1{x7hdcGaEvm<f8oU|
zSfIKQ{tG`|X2ba@HmDxdt0A$Ue!@zGvO<)ZQ!(Rb$v0_|@6Pgbcqe|qr=7gtjo=@|
zc?><m)gc}};t;2}AL&Nr_dUXT7X#|g^fZ*eRQqxMc^(fi>_1~-e<QZ=6c23y_ctOf
zlGX#(;@27~mawX?-2|{8g;Y3uG=1+(FjGmipPfuEP`P`8)zpo?o&6^bQtmMGK?0St
zoHKZ#$7r7RW_UC+WPnk83L*(RU9=(!YKPFDzc|?2eT?Zqu{y>Hp=y}g1<x1hK##&7
z;!R7Nw*ck@$AQJ2`ArZir!k*6_Or>H%tBFiF@`PiSvrB%FiRQWs!=Hzu4)weiKl$r
z4bfvoh-UO-fP>xbv^FvS2-f*Pef*%YMU{2_Idce!u(d`)Cs(7%FvU|FsH}QsS^xxJ
zD;QaCN;wFrAL_!ME*8bpH5?#N(5BM~tUebP7p<6ZZDslChVI<PQ=sVc{m1KoFID)G
z4>mC}ahh}dL6i(>pF(>L;|m-%8XX#RX#XNlr!-S;Mui@CIX0G78aGO)V+)Y+4C%D9
zAMNdb5Pi0@zqj9vzS=wZ;>DK-(N{aKUhO<T*n7Mmy?7PvzIgs<?_lr6bNKZn+IjvO
zD*ofW=Z`?8OUXc<T*7u6dO$iCAP)No%Rw3giU>x7qhd+*p=;yQ8LAnlDAvbxM>okw
zX@SF8(9OmntOab~DWGPlU#&Gz>S%?1xpVNv*SjyC0>0bPp>RS46@c$)qk&Y%U}Dcl
zJTEksC{mg6KR*2A>juUL5S~xXTe3F#fok}Yw+68!+@mVw9U-Xq8*Db>g-JzYv%Bl?
z9ceET4<?dv;_pa5T>Kcg#$LKSP*QX1-u-&xSNu@A0oUzNG#2=GT{YKyx~r7J=zprh
z&oQZuuWnO#2RBWUOnzdI)m2H$E4||l;?qgHP`~veLX5RaQ6i-9DQ=c3eWmpHU@h$}
zT&~7hK*LRu8*sS_Q=+1hcI>s=#-_tA-smVU<Q2)1YwE=|vm}$NRyqEZcZEVBNMvq=
zzxh{Omz46Zu+ou`U&dZoT>{KpfLv0Jq5~}}1Y5r`MpQv^3i8{{!utjO{R01ffv;TP
zVJ=~S8hrx~x3#>AV@~0mMU6e4J*;8!cd__4#V0n(;755E*(rkZfv*#rQvA~?mBHYr
z)42!T-VqJF*H<_zKfMlp3ScNN&6U5f{9{eyXsw}CpHvgjRedCBrId&1Gn@@D>|;9S
zr$$AhatVP_(~-H)uk6KH1QI`ri!-gS(BgrFeyTo5=VenEFO{){O4QenW#ha^pDva(
zx1B0IKqGlTskjW1`g%CNu9aJ?+bVSJF&n0X8m>d)y}E+;u&f+){rUqy5QEJ>j1KQM
zqq|2@m)uy|NADMo_Y24Sg=5LWq0d41ydVm=^3t&Y2}g1t{Rj{7>1m54Cg$!`%gr7>
z*Vz!mU_mF1i>TU9m<pkjIVgW<=c>quM(ztM`W=ffZp#y#eNK1tF;!LH)DVXtd|{Ij
zXhs5Z`O2u>r2QVn{au8l*n`Cb%;M^7zDSIUw(zi4hNintd#ZmcG-&t6W?Nj*kQx`e
zk<YU!ywFjRB~TTOa9fR`4OP33%%0HeQTmPbPr-P~I!7*AjT>%cSGs4HpUzm+4wLaI
zh?`HhqdSdq1Xu%O;rQV)Jk8@5=Ag=t6zkm~3N_FoGqqaP4SE&u=+Hw290bB;oW@dn
zDT=AkjZ|7Qe;9b2{`SxQ>39F_pMUpn|LD6v{?qUN`CtF)fBKKUWyPOAVsH>^eZk)c
z|I7dUFMsu?{}I4PoFaw~LY(UKhQCVHfE#i=y0KtgutGD^e`UUvG7?^L2<4{1ztBA-
z)<FY;h9pXd`I1K4q{Q{C9ydz{57`rh4{Di!<NG4f5o$%K0BJ_jj32m6r-}`-&lBGe
zAP83e0R1ias1K3wcGWi|(sYkGneq?CpHydUxv9xN8Gn<^e`t!UoxdbJv{FrXm2*Rd
z9+cE|ik!zoBXLZqg@^h@S3Mj;Q%A18?aJJxlmr0YrB!O##&!_!%1&yYSeKR%7jVhD
z4(h(^yg9_tKk^G-V>$K4bom-*2AkfN=U4@etQVx5Xx_=ZU;%H7z;nuxI}9f{gBl(K
zVVReHFj(@ztXh=I*5JAagtvg@nb-)1dvWX9&=IA{>+=Ts5GbXk_j7N>TVTW#9JF_$
zuFzvf?9kGI2JY#6iD}qb{hg=+P3=aFw||mH6l~f7WpLVvUM6HI<&_b=UKeddcc&Z|
z3tJY;=vIhCShh|OC6hEfsubwx#QKuMxW=8wOGwur#@~GN<uo0(L`^-|wvtDB${$DE
zsnXNgOeMzs%ze#w5eySs+?YSSl}cR-SM$im8S+JvnjqxMRKQLIw(+gnA~}R5mkJ_#
zmCvyMGrHcW3)-nA{6Uq#`c^MKa=rKb##R+U{TVPEx=nnp@sMNcA?L<R!c7g1Vxwh>
z$?42hTuPK<MO3jaJ2sEcKWeuy$V<p;U9f1&di382D<6V3H*N%LF7g~EP1m%!U;*>z
zx?IY_fif1y-6tcBp%BY&CBmj>z!kxj!UP{rVLUds;LoSJyxJVVyIZ%sX}U-2I);gz
z&fQ^9bq~`czq@GkNyoD!G#xOeEG$)h9m1BKi8q*cH!ui22M!h&ZFp(J4vL6i^paA*
zkm6pWkZrx6A6l%AoIIq)hn?z$GpoXW?@c)SsaJD>zM|J*XFaMbtU_1a$o-%53>;&z
zV;vUF6=Tj-Q?)XVc&U<dOqsUjT%&7uI4h~Rn3hgBCBM=`|4pk8`j*>dSA}+RHr(75
zX5~l)<tGQT)>=X@cZYFNJZ3LQy}XJql+4|HSW{+{x>}aenrThWP{8{Rn8b^|yQlT#
z@2*Mvy_d{;Tj+aRX!RjlkFQj23LEBR)&nAjyv0#)uLXT6yo>Z-?mZ$sERc$gqD%lL
z7$yrjp`T|3MQ8dshb=Td0Z<3oj;<Ky(5H;9tfSdAN-3}3Y@GgLMwh%N2%@KBmFrs=
zgaJoeYc#2&w{A5hyn3TG&7P!}uwLJ7=n!UKyB7_Aj|8vVK^ArUvmPGGsEnN;oH-tV
zxqwTjVP2U+UFG9QJygC0lN>lK$$fa3$KGgAIMF~9ji*?|<il`NojYZC1uIw};|maw
zP63%s*vInFDcQn^@kcgQW}@?Cy8Rd=Q)I%iCd?xI%a$|RhjK0LM+Lv!h5v?RDOu5h
z{w$`0%q6|2PL=P+slLEoQ1znl>Y?7SgkFfiQAmGO{adBFwk>Wg&GMp^QbVmP_u?-1
zNV4=nHpzzBDLTbObPsWea%~4j>KsZ&&yy*wOm*|-#W>=a@vxbrTN;m&30|`p_wkBH
zN*Oj$!9fx0S$cshY|*B=bYHvNxunePwK+W;=`by@F;w5^_6dKbn0dVdHz8`pF{FA5
z6Q>#d9CkX&hDMn`ff(Gwxq!<FATc~2IUGj@FEqeC&U1>3!}&3$XL&}c+i!-Zy`bI!
z5l`_<(}J9XGOy-ld7G$&tGjFT?N)s22vhH17o!7?z_F|Q&YU!aPc3hkxWa!byY*o$
zj>(mwhyTWL>+-U8v<$BkP-qQSpUpAiN&gI!!IQ!}OJPG`slay}TGcybR7WWeD@TXx
zMkOg{d8bun?N@6?v=6EUFDMFX%h?XAi9Pj4&yi9t*_%#xn+9-Gw^`cOy7kqTENm?g
zTF5ESl}?(6D;-QU#ZgGgy2QuxogiA%?IEn*qMuuyX9kD7RVBvRW6)*i2+B7HnqKTD
ze)hfu)G~8PP7+F!kkVWEp@bzslhexPdDizN%?}kwhcK?7B8mN3p6_~#9@m*<6MqY?
zEBshTLm(0zmS7x}tEI)>_`oB|jT>&SmcikaMIM~cB4OB<HfvfVD)+T1dehR0T!3E+
zbulY+^%_JoEYi{SF!u~5%m8JyEi%QdkD18v5=ZG;R*8}iRf4(4gVSVZJlGiwqON#V
z9S5?SCHIqQv%>hqXG$R6$tp@>zh2w*R)jfiSrS-#riEh=lq_oFP8(e7*zsLgTX36Z
zmMaxIY9%-ocVP!QU0*Nr%?j02WRn0tsR=PF&I0&Vs~6#r<0igsG)zu`T8d~zl#QK)
zz_cQW^9wW<qrDOh#e9xhf6L{&(IMV!ziO!bM*wL!SFmuohSgl@gN{k-1e;KC<S1fp
z&1WN6)fh+CNW>8?E%a+nhDHi}gBYU?8UyTVERwWvs#5>4SPM4avqCi?fe|+2j1n~U
zDU~!|6Qk&7m|AOy_X)EcwlF=6!l$~*CNo-39n>(46)b9&An|#e4rzxAq~Ycptwn6f
z<XFy}u2d*<TS;W|Vzz+$ONO|zi-o(ubxY0`Z<0Bx1!E!i^e2_0^R3i?jOYQja%vUG
zWKCIAip=Gu?M&;MXny*;Yj-yzux$PIHa~g+m#ZxW<*@5C-eWo1DoH+9ODQkKrS%M_
zF*;`gJifp8$ZD>L1%6|p!wGH!E2*TOI)uVnE$_Xr64w>D5<J7zsv-sy5wDCISeFgB
z3Yv$dK}iZpw;gRW4<102>Q)I@F+eP410=gz3oW7!GIHcJ*=ROaB^TBAxec<DJQ*Zv
z<&8WLpN4UF2qo%sM_d@oQjl8iil?h`*RmGeellF4UtFt~e(lP^3S?KU(gL&{?3AUK
zo->vsy7I?WIQr9SbI{*wuu{PJr-N#S$r>%j6$IT;(~*)#R|`%&1)$2nRo9-Tp4{_i
z{^3z+x8Va5)1-8KsF=l-iBu4i#!#4hM+9g__eR(wgj2_fs`370;r+?N`;&#x$-=9h
zM|(TZzkd93fA8sw=a|GgS-&F>y}zdXFNF<SVs2>IxE&k6|Fh!O1_kY~@8H!({7#xR
z`F1@<pqe1wu}W%6_eBR8XFbiL9Mh(<2Y7;7+=~<6TYEN5ha0Toi8GMsZJpnJ>xR&3
zTwyy-K|czqYWxxZp_A09dWoSC)md>bJv}8-#$)}leY6lRbtQ^k(H{kt-c>;5Zyr$N
z)7T%zqlt646Yj8g*fS)mV|+UxLsMbi<hGg&R32;>v!0^Ew(VuKZppDFi*nbt4dzf#
zcTj}B5iornO>>k16^M7EA^Nv&3@LA!_8ZYg)Y<Zq{_dP-cpla7&+@oGN5>}+5+h2?
zJ3t!1YI_#Ng)ZK{bFX##6X?mkPV4?{!s!0(*4?|Gi2qu~Z9K786sAcr1?Jqq$tsz&
z_4DFGGYTJSJjk|T9IhyHQVfGNoq_;^sol$z07y<?-lt^s=sPELCN8`2Q%4AA*|eBs
z%Iu89cSg88A`i+MnRXogblZ;l0&g2T;466XAlwInvzEebA1yy&34|6bxAnvJ;nN?o
z55c@3)_r$D7b?-eS_G%P7*6|WagsLzw=R*|5Mtw|oy@lcVs;tW%{VY~j4Kz0XVQTK
zFy48u$cC`oDwicX%X&qv7SZ$gId(=@N;w-7ts*eJ6%3d#Vr97A3Zi|KbuIwaQYcLT
zna+eHHU<YNdD$P5fq;^%z%{Y5rhfs769^yu%{eT_<98jts_VTTrGvpR5wFQ(QBh_)
zs@>iE-P+b7$14UyF@Am67|OR2@M>^5im(q@g$u5P-QHXT{mM@;W@=WrkYZ8RU^I1G
zpk4RR>KniN(MF?U2GE#28D{a+j>!h5C&By{($B4YZ6Z)L6!hPst?vOKV|Sxl>Vupr
z^>!nAl3qr+iqH@xbPfugKf!hst5Z18sNQLqAc0m-)ANd!zyjBiDd~}86@!-#d~2}2
zCF>v8{A?VW-7kZwGC+gvr>J*^VzN_YK*VBynjZz`%C|w!6zV7k4K>iU&#?%eNB3Ry
z_mHch_y~jNrH^BMfR(evtirMixuA^Fah)IHOANVg3N)HgXH$(Wo>SFtU0OdCTgq|$
zGhKl3zQobK^s?|3{d%064#Hy#w*ONReK>ALy@2KvgCy?RNT%{jp8M%R4056IWG&fs
z6MCsDpv<>wA|A@#GPgeX<P5l&3I%ZV2Y|Jm5vpA$F?!ap`peo3IT=w*5MW)#4LMlx
zGG&{@J1K>8`Hjq4BMgiTD8N|kQ|Y>U<IQ+tj3)Y~-g?xA|Hl_5_@Z$!$C$;m?}B-c
z2kFUJ@JNbB1s67$H1e6%jQh%%sXDGsOWCmrIh<C|n^A(Yh4Tdq@{%qP-LwExK&-!v
z%dSHJ@z$+?Z!3MNPSfzMJG@JlEIH)+@k!ziJ04Nz0UG-rWFbM*MIm!1S#Ni0{B#SR
zEd6x0$3n)zG<WsM@rR3e`YPR$5;ON!VFF*O3b&$m*<56+d`hA0*X@h0%dVbQMtKmk
zX%O93Ahduf%k69ec&y{FpDt4l2Ky{UxAkE(fd0T{A8i{LZ`+`sdYPf(2p#pH)C9va
z`qI3#?FCTeBRpMHia?2C9{)Hp#p5KbX(fnlt|@^^_8MlVTKdAHolj4nw>R|%e70W@
z=s%go<U68Ez}lGQbxaUun^c=v`<vBP1SaFbrr#t!G@h^s&E!%L*fU)D0swoEF(tQJ
z9U3r{r<7$$UCIS1SkT#KFPUB>AYwMjhSS-!={*)NOzRE>ZaH1RG$CTG(w8vO;t5{2
zO~hIStl2@{G;jQsBWA_}&EqsZmy!_F*`k;kr_o|IimYxHpC*M$G)1-^IwJ$o*(Qwz
zO_)PG(=1S98BscHooWmU%?b`~O}4?JyRngsTNmk@bdn6xn9PItYvU<H_?jVr^!Zxv
ziWf4!#U~~|EyNlGJ#{m*I;Mk5wq0uzCeZ`t9E{y0&(K`Y{&fa$2#Q!hK(9x`k6Pi1
zv+M$CsMrHZ=&aSHS*Nr})M8A~wN1nabk*`q<kDZI(=%s9pDFV@bWZ9wGF65tbqIxy
z7A@|=E;J%9ropVA$X0|d)9*L^B~NQD{XTH9&?l7C#7BLjDcTh40<~6QRx0DB=&NSZ
zB)h1$9o0_cvdN}N0fhS}Gg!gM+iMc;Ot>H69?(vC6y4N#+{EE>wKwbFwV%X<s$15Q
zS$!tNB(e^2_`$nwv{Mx6DNuR_yD?as`wXe&_dv)}hEm28eTsmu_T_*RuxkyrxIRoH
zyJkJ@)RbPSm&C?_M(865X+n&+*mgwA=P%+yw}!Kcs<fo;CVKj*93GFfAXo>{7`+``
z!8RaUhR`8EbVH|}vz6od<Ii^v_I~{M>%Hes_MYz@yx#K5?hTww*yXEc=u0!ELD0>a
z>t=v3Ja0v}ZlxhhpQ&+}Vqza?EM(7Od}Z0KP#MBAUCn6;J;`DsHD4RJ4AJV=Egm+4
zeI(T@jR}9T$~M=s;}zP2TULMx$<s?;s!~JpZ09Fm@9#XpAvt*b`Qul>T*jTL;9Yi$
z4pIDqfXFACn;*A7`J{9A&c}B)Kl!A+B^<j!60Ap<#_Hu>)3N931P>9$7LLcQ(CWdT
zmTU1q912uCu5%5kVolPHmVPhy08+=%4OE5bcd6Vh{I|hBLOTpJ#00U@HUKYGX2DqP
zkV^H_B+sPmw6O$$3)j7~sUQ7_K78t(SrJm$tAo8~kH3EP_;cvm#_!i3cI!VIyuEYP
zfTzRtpKToB&vvs@@!}wIeq-gI4cw>0RujwIYBV0=|LQ;e_V8!7eztyu-@6Z~)I<Hh
zk2bcDy?<VurDN^(-bMR=)eh}ZJWb>_ZI+;F1ltaJF7!ze2+L$LO$I76<E>~1wTNO$
zUTmN+AQ-fj;K3rQ2B4j!BXU9`jpAa=zrV@GNlSxxk?V~$9nluEUXhS0w735vx_@u8
z-DF2Qjt7VFzIBSnTl`_3#CbCsWn&DTfL?U4&+BZqJL{Xb(Q92ju5Y&8U(x2>(u?lq
zy;{?PFA}7ZIW|8)({3?|`=SM?chK&1JDu+B+pTuTYcX;^S;&SAVMsr9!I<~A?r&~x
zR(xAW^fzrIs7V49mG`~Awm@zqbTf+G40(J`EJE6-t&V#!fDyxkRW*q|)r#;a!>z;5
zF{;35<3U4?W=5yWIubAW6EyAU!D74=u~=i)Fk?+UHa)++ZU%GX_J)1lyuE?LEGlh&
zvT<*t-HAF~O*rue2zEdCl7>rniJ2Ifd^Bk)tV10B<-x9-;SnbT?QoNTO&&k8E+<u8
zo_TsksR<R*C$L<}L?8^)45-R14Wi*udUBG`rTt!>T@-lhjPQ!s4Rs7lk}hx&!!EAK
z(3zHtq?pliJVTq5<8Zs5p&u%ZehM41r06<cs>ua)r(SD+^6@5cF3!jXvKvsYSzQuF
zbc0I9q}Mn=EDYji7n>wuG@=i0-|O7=)EPYT*fuh|m0Tu$H5|foi*_GWHjoQU4aMG=
z4}TD=R>+)hPzGH*?3@n3z67$02}zc|aYjFAQf3t7Q%y=8?7~Iy@cvN%Oa3(Gvwjkn
zFxl)ul@~rkRQzl<1ts$hdOYVO+iPexyA`#g?FabWt}X6uNj1C0sI-sD9{;!M{H=3@
zH!<4{G)gtA0Nmz6mEZ5s_s!~7?s9=fC4_sG5cvDY{Jr|xfgt078bLLHK*xU+pT|W%
zPbX6%6or)0S{MkxNBaj+{ZTw0lDpM@e2yc9P@E~E#qhL$`;!*vj%Tx8E6p~N{wVI;
z>uh{jB>nY)0<vBZkac9H^>~0c;YM^6<?I^pnEx`y0CX_f=LPy^8t#Mng~$V<A0Q^t
zPif)W8G+i^k2emo9M<0K0|&t=a`2Q?h<-LmSkB}9G%Hv5j*%lHjt%>??|gj!PP@&n
z4iwBlQ<CG|)*D+?13`A~Y#uLy0^%M2TLR_wrVC}CBwlew5iGP9ngM;xR{-c8O??nz
z$E`)~0F)*-o8d;%<<zokv7XPZY4#<CDc+5Xq~0JSeeI{U(B6muuWv`DCflE3Pj-7@
zQbd2&>aP42rZ0BkH$7<^Th(q5c0CRp?p4cncb8`hxCbw=%s6go#(0VrK<#)CC9Ts|
zwApG?;%T%Iv0cq^&AQgn$}dzifjy67i_+yDU-ESaK2&p03xj0>Fxh&e?df%8fih-v
zhYTlZx`?Cy@(2IR7`XSp{K21V(_}oE<k=;L&q-hfOQ7u`ZrCqd(JLe=8ADZ37&aoa
zx`{%%Ag^OdI;35OEkHr}T4V&C<N!TKS5eS~&SQO#hcjWrcZE|i1*{OHI`$?_3D#sh
zA;EPL2CBoio9^--RCa-^Nxq()tWQBEjzH$6AY}_>#4QqegpQz5arxjmG^Pvz1=(51
z;X9&KRmBHb_j8pT?DJ$)v=*>M^gJ7{o2@-DUn}h0M`T&fMMwvB<f965XP+o$0NMum
zV@sB_=P8=+baheggwOi$kP>UqwziF~PbaVwZ*Q7%;}dI+b<ol;seJ1$yoR!LRO)+g
z=~5k0s#96&jwy4yvdqV(%-vEMjmGBIG7l`md=<P`!20$ISl_)q)_fcfpKhvQGFDA=
z9k~s!L5#79ymfoi{qK&_(rJIW_xSPS=;OP08pgY^v&r)?iDnaA3!@%QUYtC9pykB#
zFbw!$J6iAHapx^QDdw{;^I09an%`Zt-FMjxY~|4l4A@S`Bp?!o1$s#Etfo+Kh}4Kx
zb##Ot#uJ)X027m#@YJEecX@)l;5`kdeyI1SZ#8I)&VIic-Rm5oJ8Xt`CpldERWnp}
zeQ$h%$7irFTmN`d)PXs)Syks___*G=w_*#Od+_o8YK8BC$ZOx-T&-|>^WJqz-vz97
zZ%ZA;8b=Lue0hvZLYT0>4PtFB=#f9po7W-i=JzAjR^T|2FH=6aq9aIs!S<MHA4j7E
zw~Z5I@th&9**FsF6jI~BQ$u5*O@`(O)z30*+QsFUZ|@is(8hxMq8=Vc^YkfY8TMz@
zP~01$s28g_FR{Dx!C5?}5_tTBlA#UKpzR&f=;J03b%v?jgQ#7kkoCg}h2k69pbuNV
z7m21M<)*;n&ZCxo<sQfMRXe&A{gxNcb;H9`ZW;c5ip#?A)Q$XS@6T~Fhr`n&TwSp<
z!8?Vr92YAe!Vos9#0_ZqA-R}X`WVWF_autMvZ<|70ZnPsR?xEIbZzs9Rv`1ceS|iB
z1_0k~sz-Q@8?CnAedehN?W@wJ<I%I&4P3iSRrxXxZFCKBW5VOg;c4jXvgM9j)N@`e
zPtE25K=LdAp#t%Slj+vumL2zX03)~nz}7V*V4~tcfM1Ow7K1iQ{SVct&Y!E+Z|e?=
z4z3tTmP{7w{kWL2@{du$QdEqKsE&KQZ*kA?Eq(g-gAW=Aq}6KSPJfgZM3@QC9<TJr
zXv|*Mt`lTXqwvKT0%<mkbJ(YxC70NdBuCw${=w!YfMS@%tT)YL9%`7YeY~~L0tGMd
z!_EfK^_)j;f-=9-0oQZxWc}Pf)j}sB>mPj1mmNvnq4O)%l_j}`%_Wkqz17oP`yJ_L
z-u1lBF;y_?Y+dbIi#ctJewWlK%6)4bLb{IkpZ5`+0lOvlKvl@`^Xisezf`e+6H2$r
zI|ZuvC#&7kSu5p1R!5y(d+Ld)eoIG<-N5mqrrjetw=$3LT5q7bW-A3Raqrco9T+w2
ztbkpANhBl`J9I5)yw3{z{#NSyTd7NO|NQFz{F7h)#eet9zy25h^*{g5fA=5$&3AwJ
zubaR6*MIfhU;W8<fBdHlJe)6=N4^Bc-pxj%xTs&sqd)f5x(xZQ*Vb$DtdIQt(Ww~k
zyZS-NRh3K7XzX2Bb}hJ#t_9omhh6vu&$sFiZ~Sb~Xl$G|Yao-oOs=<}3GE{M0G92C
z5jFy^FX`%5*S}cnM*)Su;Tst<ZP0#_=7r6RQKp&#At*P^cH>bpBx^W)Y(_3DbD@bG
z#Ib~m>k0eAr)Yv>GrA?qdcB3cw~^w>QrzU6=<QIVQu^Rp<-I)u4yB701%sSA+B9Q`
zPS|)EY-d{EY<Q;rTak4lZwD>Q@ZGqcj8Qxe({Ga9qM+Rs<)bRS-BK&PBEYKzHwPQ_
z!ykS6;Dg!`kYY=IhK1dv`m6n@1|$BXcr@9nv4y?%DZLp^&5H;0;?%zQfL{D!mf2T7
ztI@j;Z-25?bAy{FV>~AM;^5iSdXddwG4}6!)5}uMi-$12YvMkxDt61c3vT->9rlQW
z`c=0O4Gj+aM{d*y?e6pP>DNErdG+<q(>;)Tm^_*zB~tQ8{0D<e)hJ!$3I20xGD%<L
z@#M#`8@d(VV<d{Eis7_py$H1ocv~YkMJk4~(-ai9xN0@@?Y9ts3|AmJu7vkj0y34e
zCF6=Z4P8FGil&ocwV~i!9aNFN7QUOYo#{NJ3ud@GyBVW{$*>O1HwE;jVh+bAIAxZu
z+hUI7w6Ae!?60FO$7-1?YCTO<G+0&43Hn3rnQ|fdTr2tbegyv%4oDQp{1$|gj$aZo
z5Ky72Nc|KHh0@1uyBz3vLjnQu_+v6OQ$X=to$6v3HTfHD9!|)5gO*@2M9=>G)Dlj-
zc5yXO-f-<VrOv%68zXG4B0)OSz|kQAIDB*DnFPu`F6|a|mtC^GIg)d(e0s>NhpEb~
zfTA<3E+4rqashA!HXtV#%z~4>1t;VRbJCfFKkWSDG<0GX`V&w^+)>{gFZ5Z$DWJrt
zE*TmYY*2@#l{*3z)JLbOE+1u;l6JXzkVkZvdM1;~VK$i_VZ1<o(Im4cdSwi=ycHS@
ztk9y*N0px`g&r)un7O;U6#8pz*DxJH?I_~E6xO(y^)R|qZKX)+2QcQ-bn-0D-y}Ik
zg;ojtRO@;)-~-y#3UzA^exj-KE%k#kfVtJW&aW$6UJ(L_ueXi^K33<5+)NU2hrq<@
z7J<6?^v?oT1>`HCOWh!l%Z09paIM_l3<0gG@M$rLRdV0$4`2%e>^SeHV>D!}_l8;j
z&6Z9CzfO7MyL`ueYZT|F>3E&?n%(=8OZ@`xu6J+4@0zDOt6ab9=$AYzx_6++1?GXK
zr?Z6M;3LLxJtbSfI*)=6NbtQP1OVT{8B=#?$ciq0{NTZ-8`#YUQZHJe=T0B*F7H!&
z({zd+Rj=sz*V--D4Pg=wSd$ytr5V-hTib?1G{fLwW37e$#nZg5ZY!*dtB^|TW{a2-
z80dri$cpC`1heBr9Tv=K@#Vp;lFN~b@J@j`jRRn7&572HC!@z+{D=a|CL8F^bnF(!
zo$hgUu!#?ijp?{mmAgPK1pu2@0VUW8Z>fcmXvfKRktA>I7{jQUFXWaT{`89(;Fjd!
zk7x1lWF0-b!=LS!@={ZK_H2DH_}O?4|CKc}@^9TPIpJE_G@JHGN<v>zX272sZFg-6
zyqAe!4r?HLk!i6C@aPlJ!e1j|M|A=3Sw-n*M42Pn?1_8ZgNovas|)z7qU0B_2P)j6
zqbeNI@obuSg^P;9`$<0=54^(rm5_(Sw2(E{!pZ=QR;@|X_*paR2rIuR0R^6gKF|m^
zqj~rneu;h;ou)$HDflloJE&?F3k*UZ&dyZTv#P3C;4JiEG*VSZRaLRTDD<HyRMn!Y
zDi$b0ANKe6Ro#7b2yAREQcQQ_Nje2Nbb`i<MW&sFT1lUwkOd?hz6~bV3KkHS*6jvg
zS~t7zX$}nm+u<rf#t!*H?Xyuaf?uyd)8k;VpQ#Wg_(t18Skx^$^)NQOt~K8^*M3JB
zq`J~Ng@$_H_|gqoX`rB83cF%igbzj^?^@MdzGgMO>+9`&(BWu=-I9)I;ed?q3V9D7
z<j8fMal{@AGIzaEP%SHxcP0JbA33}~a(I8_P<iCA5j~CP80Y;g8BVmrC+@OsvJ-Vs
zonb31xo8)D8&lKMc081uYl8|teX+ZP-T(UK&a0hgWUFLrEQQ``>QGrt4!hMfL9*b9
z^m}|@?Y_2lRNc%MKmPjp&a=lB{-LezwxnFh4>i<M%SY6XSxb7^CDR9k{8H==GQ`85
z82%Z>mtSE!^z;QmlrE{4_FAsi-8RMkQr8YSdE0N1>+W+Ut8<eT_4UUf0C9aC<B~p$
zFZW?}5C~E?TR6VEXX$VtoSFLgyL8)}F4rnPLEjiG)Y31uybLn5DsmBTZLE7~WAHLL
zAwUUH5GASxt2RcYaD&@8<<-(_>;LFS_Qxu%{-pfswRb;@Swd|Z;Kw(xG{nPN$gYT4
z2!29W$YGr)-oy>3i|xaxzV5tfVGpUsWrN&AUBe?`2{5q~!Qb*PQhk-j6ZR72CQ)i9
zgTitbE@}zIH^JK_xFtVkGW(F8?EU1~V-g7{Fnf5|pU|QOf(NF;!;)7QBlo~I1zHV{
zxN0cm;&tiXWA{56=p_C(#~pWonQtLxTfs~)CAKFjvrJeT1hb5{CQ#Shrec6|eWUew
z^Z4Ovh?vMW<*!YNW#gUVf@)TL?RI$;UYu)QoLBK80-Y;fe0?2WRFY~nX4K5}nwd-0
zU5&f0#V7M>W_+!f@%44Mi@N;|%=M0JLd~s`K!>8_E~4FngkW00lY?V)xmEtq#t(BL
zI4gvv7xcJ(sf71Wcz7Cq^y9hu{#t#vCV0D@{PAbmC34jl_;*OlIAyOd?<*N8`9)c=
zzR59XK)!)mKSgNT_#8R%N;78J_y))X!$s0~Y#S%(U>Tl`P9ausKn;QZ8f9e5?P9QN
zf4@3#&OJbGo!3o2K<(02?^?rl>WhCMojR-PlvD<6xAsmVV#mu)DbN9(yQpBdN@X>=
zG2J3NOO)8W&{@qXS^<ZI6zOHDl{tc&SG1yH=d#{w6>i;%S`d~s6Fd)8a~=qll?iE2
zykxo7<<ZJT=c^aJ>|6t^TUO?6B;KO+@a+Zb`AnXx1#Vb;nBiEdG{`a#_bkn%DnT(`
zmq<2UbegIax!EuU^uEEVAy*%#wAm%N#kDHr>}C9j&JM+!9tI6}<Flylyy@d3DqnV%
zwcJ_M^s?IXPN;FJZ~Wp=yWnRT<k-QX(V)z`v}|eJNZ0SI0-$3cbmU;j{wR3!6~N6k
zw0Rky`6~F#4L)-RAD2SRg&}`0AhY^NSEpU8uT?Mj5YK8e(D`*>wRHuV!%M2?+ec03
z61F<^vz6yqd2TCgipm|Tth2mX72zdC6)_uEw7vbH;tfUl>Y@ll^6G_Yd04$T3;NZ|
z)6lG5oJV8z@-ePT)1zpI{^C-_>)VDJ*QFwPfe1e2K|j(1soAciJ><!TGy{|+GOy@l
zB3P4Z?E;y+riJo#C&zC<h$A;Hk%w4hfjk8cT>=0~EE4Cr!gLV`Dzg9yX5}S7xX>b0
zE)<OyK~XDqB`Rmh3jN_imFo=Y$4U);rkTdbE!<FRc_!L58m3>PEo$5rHF&}yrsZj9
z?@VLjQX-45J5qXSyj?WankdCwC5}RCbIz02@hImlXv3HHrS%Qd<`5az%l%rXCVbl`
z!&jCN*}z$8CaAfwuDNF2r}a8AwR2XFEhuu`D4SL#m9XckNwkY0#VA0qEZlCX016_W
zi#C3s#%(Z_l{zgg8Fhr@H%T%{oJ_8_J-`%df}#*(oH*3j>A*^8?rXlmO1@C!Py=tn
z0yUxae$2-|Dn~u0kB#X?JVm-XDPd<Agj-8LibKI2DYED!&fV})l21_Es2o>sSRVKs
zv{9N|0ZU2+_hE#9`|n_wspPeV0KL@3-lWQmNTH)NjyBDmt|Xk_RozWRtDBK;*SrdV
zs-U^)qh6i0zzDjV^3))iut<JT0TLfP?I|NO!uRGkmUA#t>sO`pxKO`+DH0YRFzp@a
zytXY69B2BCD?v&Lx6psjN=5+dCcE*MThs!|>)#5=aH>fH0>qGmpS=~~TKQ`hk$y4B
zD-+oSiGc&)(}Ia#CPpa*&;lBT2bSq_CVzMf?Ls02)A>}f&_d3sBoa@jBEyL86g~))
z<eZE#c)UxB8fjaOS%DTJGuJ4pCEe(?W2kvf8Mhf{Mf=UIrE56a@@dfVR38>5m6(bG
z{9(j46-csB!b^Dy*!jIs52#rG;ZHr+hW^dQ%IW~dwq~ka3t7DdS*}!sbO}UO$qWbE
zHSYiv19Um3kkr##a=(kvg#PCZwedFxU4P`NfnN5V{?u_TeW~}mar8|N%NzNwQ1t#Z
zxxnDg<km?xRk1fNge9>zR~`&h@~vUUt7i08sqahzGL<14Q#7hPn;^lG0w|pp7%1JY
z0E%QfDr<V0jdPB?LD@62)3k3wvVu;vk4~td5S+#svs6d%m}DvU1kWkQsK#XZprNaE
zFlg5lm!Rv_15N87j|*D7>a;K?Lvy%|v=HeCsnUKXUopF#q?ZY6d_#-@P)w6aRMTK<
zI`qgOOH^jJlM}VeMR(g&&H9}3$&61mS%9!Tn(jjwlpHj~c#7G2v>Q$lQ-IjX3{=ix
z)4t;PhlbXtK>B3t8$P`4@?&O`D}WU3v&MNApC{3=cbI;xdfj?&L{UbR=mm{GrY@UI
zTRlaqXW1Ybc44)RFKX8{vs@42b?qm@gzZ6~+bWCliqOT9v-9o4cC&q?(6llg)mxei
zT5PtK!jgU4t^uFdj)c$oJ_#gj;sX7<tcuwa49Ta?=;5wsj=2DY@VZtU;{0%G(gp`(
zfaUSH;7~v`4QEi=hNl)wc!pc&X^{+1s2qkKA0!26C4+c8En4Lo2P7u&rcuETU=)!R
z<KhxFN;XrlKZ#u#5PQ_6!YUNiF^XeTZOB-w>qeWkhC>2mmQ_fAGRY?c2S=ywF6<ho
zvpJa!c_`4W@FJ!N)_U!s5W&C|Cqo!XfLMlRy48y6Cev2T0uj*Zr+FXNgE4QbDK8C;
zIA^6nufrVcHp+na#!6NrrsdhYp;mtx#Mq|il(Dr{RV63uC~#M>7d9ih4E5IWt-qme
zJKf;vgpd5>7=g|gmTVtMi<zB8eCY{y+y4BbJ1;mT<Rz#xEP3O+d<`n7)>!q?Z4yuW
zk<(l-qz1uKYOhYw0j}>1P*RjIu2?g=RURyk!|HuGORVPTxe-9y6|P{xkcbxJ1rB7C
zt!>ysPJD{DY7X?IsW(ENVP;Mlz<#ZgE6ww4O0iggpp24IZs|Hrl##4Pc>o;fS7jwb
zSfZdBFg_`Deo$@dD=C-#A&5I45&DAOwsVWC=}e>ALVzC2u+tfqO=vj96i!0ZoK59+
zhLo*DtLrN4x*TryxAzVA_}_r9I~DFF(6{Og$~w(7&C!x@k-Bn8>FP219%yr|B&}$w
z3%5*OS^3harpRZ?zE(r>kv6E~PFhV7<-aDbu18@jozo065_pRIVTqR%g2)F6Q5yqt
zvs5D{m^*qcNKp(<4Qmk$7Hf<)En6~#C4*Vk_41^PM0gB(1~b<^<3vjhyES&DU+e%6
zDbM}Vb6tAQrPX|F#nWkCuj!(-W)v1Q0PYaedJX1BQ2&t7<z(sjmVc6|911k5@9AEl
zkVIna@_-h!9oO#bVm|}pqrH%W$!pHe@$UL&S7<|9QM>DCLSiw&Ja)=92qRf%B$^Dx
zyU)Vk4t48?ROSf!dZew_@)}#cqIlaDS4%^vRL7QTcuB2!L8kjC_~t8I=m)swgZiLo
zh+!3JtJp;$t>#^ObMuPBH)6<h;J3G0QMqED6j%{X&+y9&hC*(FgEWqQF-!8fR&V%_
z4Q2y{Jsl<asS5l~Qwt$kxOS68Ci8@LT4wj7LeX=#lnXp*)_6}C=34!&)*;Xxs4Fg^
z)4*8uqSbPgB95{MTQRL`y`(4uXpkXc)iPp>Kd6!7z?sIt1eyx>j;T=(K(sY%v`$e)
zVhk%Qzw}Ty?~xZIP3wrj3&oA5RFmReyO^p@Q7zG}FaUuvKF}TS;B4gFV_Yfp-9TJ+
z<vwsd_FJ_9Q9tz#gi{!yOOC!b`z78XQkOF9H3`;PNnPfZt!|9@4R6JD*E9DFjjEyD
z$J#_1o^UABR8Ykk7NJ_+0J0MuK5FyzdvxyLYx!@TFr&7=>Uz9=v85q#02KRyp*b}V
z?XRYQc_f=Ud&PE$ZSK-XfSQpwn@2X$At}2H%C?U<DCQb3y_2~M#wCwxRDpI&w@anZ
zO=&kura@vHk1+Y3Bbn``feSOq-(L9_3NC((#>ZVZS+eocM)-q3J^rw$YBENNNew^O
zffYN#1D9{_XvBpufET`o%B>yZCv@bMwBeU-fTDM4LS|0x({)C}z%6?g4J(c|k)?%S
zAD0c7NFeCxRwc$l%qV#Y*N4w)=PysT;^HMN-*qut7(3)-GjOKo9wAIEe&eae0GkHL
z!V$ooftLYVotoU9sOFEm6WZ0!9AxL4TDb#6f1z#Q86Vkgu=oLDPk?^ubjo+;$WYrV
z9mL8mO8TKz)d;3gv;-_jkMJ`(R-C&oZmhFHW9^k1Q`!{Q+^RgTb@;Pub`P-DD_b@_
zUpWbBvfP<CU89O%Nu66N0MUhVAWz@3@yRgNrY$8aNRLMyi^CUjYIF&KBinMe`I3-u
z59Z5K1{CYEU_rx!!_O5l&B|2$-bBR!y?PrnLN%_K<q3-bA_N(jre_$cd3uqthRM@H
zLZO6k>Ii_Th8rz0SgmrR0#|ZB2+*a13Pu{N7`_>4Lmi06oZ5`_6*@VWIHK&E<SF!H
zI(KJkD99I0imD)A&I*Mm1>0((g)*M9eaOnulBm<)JpBYehZ<Fyrzd$AtvL%$X~VPp
z>RRJ+<t_TUKUweRx|gNkK=7>v<z8HjU-Is7&a2*56-1V7OF$}W$Q_z^342~lXIu-n
zK`M?~ikX<r$PILO-6fl$m=R)NRr-L8iv2199XvTt-sJ)?^F3R)f@e#NM$q$K>5hH9
ziD$Wh+xMbX;q<9CVZn%yNKvQM+bcuTt$$G6E%hYKAS$*cupNKLC&e({74Jo?!%%{=
zgS4&%Y*i6rjVdULzYp;6KET8K01tkE2Yr2zC;7AVlAJ_%PSPR9rJVjHYnHnZy)C(f
zb=e{Xkm@Ysyf~I1=426+dR_^o-`O%OBE3>9CuK1uIlXd9bF{@+ta_!iecu*SLf4)T
zU75w}ee{_3!sWeiSro9|n91o3eW*>h>^~IgK!EgZ!;~dGWQ~pDz>pM43-@t*_^U3i
z&Hf$-9rnTsmZ3$zhd%4meAb7_Reh2Z@NjZrlCA$rIf6Y?9a^bM($~fLez1FdfVcMD
zV+3};oKG+lyD=lzn(AB-dyoH-eiskWTw`9)fw_%-MsGLx=zV|z1IsY<86$g{(8(&0
zi>D!4e6k)eJ)R<C9AF)nxJ6q)G)Not=v6~QHHos$I9c#C%P>Fp9FGg}h_06oDX&ad
zSHN&;pC>TF<ckB?Ms=OmoF-wxyUtV}YgHUo>jc68u+xZkkY%CHAi2bOI)X`zz_}0B
zL_&F|%^4E<%;B4zmwQn?re-xvG%4iC337bKVw+M5qpi$Z`>iz+2?@QYum-6*AVfo^
zK=O7Ydc=`WTUCR~!-r^u2k<&fFalY5z<l*RAr-UU^#PgGodS>{+#U`S9sriXacwnS
z&0FBjDZJ2kUlcrbn6FJnWFM}A7@V`84}s-}SBr;3&FCulZ<2Y}_6!N7zmQ*XH}XZJ
z$}%S$9T0FUNP*U;IwZ6@m#P*$4<0P(#~_)Ymw=K)pynMORZ`1kg9?B%lrv$X?9V3X
zLd-TlbquJCYo?=QdoEN#P~|RbK#z;4Ztc(;pek;#j<+HGuo|r(x+XIK|J4})-&#XB
zg$zuVbc?Y?B00VLNUSVUMb^jiVy$Ruo>2j<UrZdED6ar0d*~pv8LbFH*!M|k1^Tn2
z%a?nP>b0c*b$>Gbnm9sdW4The`-jxm$Jw4atAN2f;{hm+BkPu+s(USms)R7nwY|eL
zI~HgJL>%m!t+iE8)v>haPF8Ww9(C!g&4G+*RujE?D?BNcJ9S^2`taen?vbrVy9*|u
zlF5w)wRku3NQ$<4!#~@x{R$q|$#Y>1IY6MMpikLZOO9aKYrqU#fLW}UKr6F{(9%cX
z9R~TD-43?CLU-}DNS3`pztWQ_W#3IzR4PLT9n2mcznoz3;eqE)u{$w#?zGqg0D!HA
z?~iTOZkvL`rpa(nP%cW+j;T|gm*EXA)N<CskdGlCtn-n0#&c3rhjCG8@(W4lmIQ4F
z?^{sesuKftC!iuNT(&b5(Jp#r1HE-drSvD0S#d@V3gwa-QEmX1k0hr@|5&foLk9!z
zOuckWq7hLUsMay<b;=0~qjY^e)OQ~~PXgy{Q^P$>kF2{)<;g^7WHH=zn3Pw(p(a$_
z70$qmuTaIs#nUJ$j{V07tg;=5I7N#?a>KG9>fYous;GW)O))8}gT@l0OJN{yQWa~8
zT3)q5Rh@yZ5IBfXv4A(wK%Pv)?p;l^rr;6yuAT`ktkECF-+V)UP{|n01H^cbc_)Y8
zi9a29P5t^^)?QUrNu_;2)>Gk{o<_}wM;Ml~X(_GM_m+gG+_}^)l(i74XNaOg)iAA5
zWvzJhogUY`>hMSq3gk7`w(5so0lI^LVgipoQc7Gk<3HFR{HuF|&#FJQW(bN$A<Bm3
z(5U9s!cztH<_aGa`a3ZG{df}7=9P?1d2$LfS4o>D&K>mx`(O2>i|jLoO3vd_f;ro>
z2v3p)=RAwY@hRUESPQUD^j5<|KT2jZt-u1749IV)?gFXojmP$&XlFybT}O_>=jc<-
z@DKbCbstMw(3t3b*lIUq<XrDt-PtC|`wlQ{g;<$Xh93_}P4cApZ2n9!ga=ZdJniCa
zm4Zt(f`4#{>&H_r<1AAaTTYbaC)fjOJ|2^s0rDhSZdz*s`Y4{%@lj$j4NFi87eYNk
z+;Mrwa-<}d8~q~gzrjogF$%2{vc`<h6EryV6#^8)QBs2sg;kvzg;u~B@Zv-vXg)PC
z<@Tmes@7~=oTVqzx-Az<d4omi^lgOa3MKY%j~(8JVSjH(e{V=%a7u^C*wjTJO!<Nr
zed6=<G)5NZpfPx58mTwNO)X`?fvFB-I5y>I+G8VlgK%K3TM5vnY|Ff)R7WPi#VHxa
zbZ#JhRtVVG)JnUYwyTz(_Tu_xlm6GJ*<BQ}PXYWhfYIt<#7N-Ijp8hu78~u&dv`y%
zx4DjYJWersP1;|7nI`LG)LK7Jiy4N>ip^dNRWEMsu=e5Ik3YG6avK-+4+rf#@x3-Z
zo(w+e-@Z$a_ddSc>&5&w>EG$}x$NK${Kt=X1}As9K!0%O{>Pg-B0L7d=SxV~nle~B
zjraP4+day$`C)SZ{s~m2$3edxbK{>3`gi;H`E5J7uO2_{ecZpN-rnuO{}{W?-ktlO
zaJA0;B<2FWLEQNy7AV=)`~AE3?r|SJ=?(5B+_NP9<jy_Pj6S>{_v2V~y`A(`*(AAt
z@BTe{jPKkBT<P)dAimdQ2tB|$PDGQBVvvQB2m*)B?Yp-DLhZxO$(_4*xrKY}cvGPd
z1nt~Yv}pG~2Cz`{<2#?6+{ZCPlE?S&bvm-EP~cwj@#e=2>+YR<cNJaxclto@nl@9O
zV(KrD?7Ie;lY79S+_S;``<;)OEqW&~(tT5nBWPUiz|5h^IH#vU0@^%9Hag8gxkU?p
zo@j4;wP$MS`dFlE_wZ9tmG?21S=S9Sp{P{*5Ho!_j*8G)mdCu`uZ>|9b3ea)46^C@
z=OT6Gc={wBrNepGOxqS^2d;1Y{#WUE0~6=fo~8XfL&+Jvj=xA!N)uJY<6<2TJx<&f
zB*fZIp2kC3aR#7*!VV!+32U&;wB7OEa@T8o-Nvi(l{!|}Uwz|>T2*?WR2Hpxko8zF
zTqHf+(T&b#`_9H@XQOjxgYNaLgY*~=*3q(Atf%Akv*~EK-jB!Uaj{X7HVNpc=v34i
zW#6R3VN8owGG703e`ApKi;b_6-p0<$y^UR}|BCL-(e`(YquP12!J?1Um?E7fFD6Ou
zNFtLktx(QM>nQf=E8$r(9LM8yq=%k7^qTJLM>EYCZQz@Vk8Eh_Mz>2P9>+){fDP*x
zDPAzPFJ{wPu$Tr@>(6>=pNqNW4$fc^Jj;f_?;V2<yXT*zrwSWd20?2+#RW4xPd3sq
z%pTOb=$4?ODX%)VlmLC(fEM4o(VflBrnn=jilc@C3mu<aj!!|GI75=7HII+ya7#S`
zRyFf=kA^3QNjDlHHUqwrb4>M~Vl@N&7)zqgavl%yhz7x7ki?=OA88HoIMk2hW<)-@
z7ipn!ve(V<_;U*D8DcLg+uN7=<Zw2Ik)y*cgFoKsR9DcVPxV>P6yR-~fsBGJ#`+Mw
z-dZ>l9&oKd*EE^ej0FKLFjZ;%_(-QnzC76NMs&&Pz1z!sZT-ErUZJg9r<G30X+_#U
zo+mL10@7Jt!d#n96V5qG_M%_R^tb1;ku-=*xG20OyBn5wl7gdreDUao`eXt`qR#|o
zNv+K8ZQ+*O{@H$j;11IxZTWssg`{W8Fcr)0^W{>abL$a?s8G9(z95q8rPv<=86^#?
zj!o2%@JR{h1J>!o7nQ-R_Rr#pI2O1HoQ-=4BgjkT*_ZnVD6#Z8{)X9jwW1ehalpe~
zB?J`O8mRx@l*+roo2cDnikZ1+eL?5zL3(nMP?#!tD?b#jrvSN;Y-8g`m1Vp^J`yM7
zPLf5HZJB?yoMUse&f&)=c{U0R5?iJTm*yg#q7vx%O@A@xDj@D2_0p#&?%7zUPH(*&
zPGbB;CCe5z*qu|uazm-s3ZE!J^_En=zl0Gzc0JyYQL4u0SvnB+xNy*w--k6xmglEx
zDCk4KXnLx8r8^pHfnzc`*JSwWgN(2JTCZ6Gt<PIL`jdv13_M_7T~b<VrSmXfAYhKn
zy2m&=>lxia3pCd7PW?lj>sCqW0K78i%Cl@#JjWav5_Tswikd-@hZH0=d6e{Pi8vun
zFP)#zu>jJZH^2?Qiu1yxmtHxek4&pBAsy<8^Z&8;?#*#z*?r*u_!LQMG*vY$CW-Fp
zwNz*}hXm2xu=z59p4J$Gh(uKa$Y!CkR9Qt3VpoL1Ydd6xHdfwMY^>G_I~-waH#Wjj
zc>h>yWy}6BJ3X5HYrn$Y^SJk(`^qYioYBh0gw#akeZS5<_dI^*(A7c5+=Id$rz?x?
zyy)q?$NPPkqr7FmnnlJX=0a}vYt!v(9`>4tUCVU)ON{!74UvH&+P#8eiNNZ}>9|0Z
z*W?oZ13M6=lni8xH&t^7!7}$Q*|%(i`BV6pYyfBFxO@%nxTsB}L&*E-KI+!b%HgX)
zb`yI*J-Ue-h2jR|pl&{#Et<1^boe6W>Fj21ZNz;KxX&SqDZQc*j>e#y=)OKBL)#(5
zfp63<{%F+c`*|K!;1P4s0ULx4#PrVd{Ltirp(_G6$i6I^GxbN;K~Q-!Ah9Ex0*I8$
z0f`}vX*sF;Z0p6mJgsMx=iTZzd}yS45|OAkKAehC1+6h?$ytdz)1bWTj^IcQlnut_
z-sU7VLu}8xDI3^_?STQn$syaKc~O{YtSpSSv90GFJOA)<4-L4xWXJ8;2+}QOR}y$K
zn@ckoHPBDhQ<Z66o_Ayv3XLTqV5OanA%FFQJiIXuZHn0pBuUmwCK18>W%Y7y2(KeF
z04o6?`yTzP&fJ0Q(xJuK!*qEA;|DoueIBm<H|Nfp-(J@QBW3`EA)j#PH5~+E0JBIh
zHG7yO`ycI!>4V?6X9s6DdAP<A1Ey{V3v_x8h&M)px@tw2q9TXodHM3u&W~TdjD;t-
zVY?f%69X`-3xqS=na%1McQ(7(!PuJQE8LAbw+Fi$OOjQKXBxGl$S9TnZt%4S230qa
z2{-``sncq*hU34y+W0Sjnd86w#f^U{8Bsb@f>eNYi@rp}uH+*C=22Zt7MmxL3ofBc
znahjhpy_f~R26XN?txp;ycklH^1I@dWvV}ySL{zP&@1$3GiBdP8U(2IgOMj&<yA<F
zEp=7;;<dNdA+u$)H<bj~%-?HQQ{Bm3&B=X#o?3RUpL4D4($dcRY-GK0ruDd(eXu=)
zwOwVqV1dY$20HOYBR8L|ItKxSN$PfN-i{||Df}IruB5Qr_6mEpxcZhgMYO}-Rqh~f
zTGndNmbpTUYn%_N7f656dQeP0zw?Rw1@HG_-DBm~yVkK<qgNm3ekk7I&?o2ML);ao
zW&J@8d}?EiC#SG0#>HIk2}5j(8H95fe=vH(2Id~I;jb<&&}~Oto(w^98MKZr(&>jB
zmri3o%>pI+qF!fm;#1~yEgx0q<pf0@c>_YCZqEle-0Zp~^e@9VN-N#MendOjm=jGQ
zNMv+gI<koltq)e(+lp4E28MD`JIn)Y+;h>9=bnr8ZD-`TW9Q0J!S8>6#bF3T-L)OR
zXjlA#D^4E{H%VQ4QjTlZDn2*|p2>V?&=K$$=n*uu9!cjKH0WA5d@USK35V}w4^Tg;
zj!vDUv}f<xS1-1AUVi@U#ghm7FQ2{G{bKj&gU4X1Oz?>XM2!eD!nl9(^2M{S_aJKl
z`okCXMH9{Y?BU<t+1@vq3HmIV`|s`iWarV#?Prg_dh!(WzbY?LW4Ab;#7lhj^zS`=
z_Vv>YEu>#f)OjH*>-+cbXWL&sc>2Xo_8<cs;7Hm1pFCHs;b@>dkdzT>Lm^fMX5V?C
zR`=!O2R~8k{qo^YxMz@gh<(ys^7E<TLMFwJcCOV`*A(fRBDJZj4#@2GbKH13zW1%{
zrlvtR2c)!u<;OfQD+mX>Xebg81KWUG6Ck*hGel6V=H)q>Hf!JrtFcgJATwskZHtDK
zQIiK+`*F~j&g#)(h#-#*1m(cT-#K8#cC7N~pz{Pwx{K^_F~{g{zxM0-$NlWrKgoa1
z$yAMBW&0(V_5b=u`6g!jq0F#-R+eh!x9eeznSPl6Q2lo^|43%~x)@Iu^X#FbF_Q`#
z`vkK6o&P5Pb;QA!6KRO9H?FrltU>1Y90xhz0nk7PI1n3sKo+(m;(|0VT@VHsE$EF@
z7sdgbR@K0xg@YN;o&H1?hY4AF6C!Vwo31L+tn?sUPB~7$>wa(SQgslr8S4ABkJMy-
z^zkSCZ1e69KT=EjYhqvUzEas>n$>b{>Qxtuy0l}kx7AJik*~m;tg~f3>Iw)g@+;qn
z7{sy1xjdgiY`1USYH~n0eMJ6+>AVNpmtAE%jJ13~N18khA70+m_iZdrof8QH0zBAv
zBq<#a{ZY@qWeuImOv=khMjhnk0Ik09b#w1-Jcn!$V2uz&`p{K{?%^bMY2ZDrT?>(V
zI8cQPw1gH`VrD^w7)<w8P~}r~b$T|8UTe;>giRumG;QH82sg9gAsWaHf={wGuI_&J
zb_vmY4&8`J0&7U!K&Z;TIl|f86Sd#W*B@I9`iflFo$f{lp+*_yGsE5@lLuF*-lA9T
zVCL@iNPnGl(PQ^J^f}J3hP}2sHp9+wG+2$$mP^#M&=5AZiGp(&*-hTL6g$gH2|G;3
z^aFI(J^x`RB|WembiRK7`<|XZlBu`OY3yf<YBJB)Kw6`HU<i@e1NIvkzxu6i$0h{;
z`pQYh*G2D&{fLsg_+px5iJ<-Ute9q+yVHn%NL+x~B&a>b*emvt@eRNPlMRuG81U8y
z!na@3CurY@{-82Xegt{}roqB3UgaC$fBPPwHPL~AVm0^8MN8FsCaB3Lr5BYj{?-=0
zc9xK9cO5M-15ufPnb-!)s_vdfCcl1OUOz9dpO>v3Js&4wXu&bhhmwR-eus|NvIQm9
zKy%z-IE_1ed>J@)Bz|qgTrWJfTJVY?-_w<~IY2AKp~+-MNn?h_8lQP=PaA(j3J0I^
zg|PpL$^;b*0<TiliCXX6$v)rxjVC)0X^`v|6*D{oYew`60DP8unvKCHIK#*K{f&53
zl)lO|;d!xPQL<0rb2L5*mYkR8Tm~JVLLCfdXi=#s`dLjD<y!HNOu#i&X*6<5>l9lV
zY^b1#1Wify!Gw={w{8gW?iKs7jBgCnpI~p81y-+jEx?JHCg75Lt~9C$>dJV|A6KtR
z%y*y?4zE6H=Rxx!#*L@=M!2y8lZM^N>tbAuaPS^{50g5VQuuEj`BSoF2YZTe7PG2u
z4pANgkj`rMURMyqocJs3<EVo0t>epq7F!S_HgF?N5+kfWa)2kBVtGUL0tCxzndrV}
z2K2OYizB~wfF%!|=#l^#{X)Y#JJitc=|Q@yG677g5ocD{Mojj(dYd=dk^DBu?jCt1
z;f{j)$bV)P`sJd5pD2jBHR<lJJCVU$@#`~~F5AmZ(~1^_eF1)l$ah0n8fL^f(tVA0
ziz=NvmsiVOX@l3e7U0ZvM=ZX%QoVC!4s(0iJ&K;06lik{{7`uUt0Qncf%5{tOcn>P
zM0jVkXb0lmbbJPAg4A^j#^#~g0*-**YsK_PuO{J@zbdt-mo<<V$5dC9+X}#Nz_lND
zj_7u=fS%C-^(KR`O?d^`*oh;^sl5mVc)D)#<eb8`P&`yM2Ck*syU8_aY4`y~^aiMZ
zHK}Saz=gTPp?+*je*#6oPZ-gtr&i*k0Oyjaev+WUfISkpK0AsJCd>t@pdJnvQy4=5
zFoz8|=S{pa*t@UKE@M+necB^9d<rVA-m-`hf1*VQMsCn2e@%qAKO=N^#aO-~&k3x^
zk_>YY5#=1*F*cWQSi|ohCBA>WT#~RC^%L0Q&C8pBv0uUj9iubOLao6iV$i8|YqFc0
z{p_QD_AxrC+|0f3xzRmM?iEXEw&U(=#ghY4W%^JetB9WsLaDR?su_3G=Rjo<+|x<M
zv*k(M@|;dSp@nyaD<Fk8wCHCbMRR)Wruu#VvMfdza@8#((nRF*P|D@bjY;<=QQugE
z0WKdC&N5jqk=UEStI&eXh7Sb6;JUAfXW{!H!V<0KH@0HJ4e%G9ElStTRuP+~)FE9P
z=Q@ID6lc{bMoJ9AAtu&TibTCJMV8r)O)s+z$k+AOKQ=>@C=8_{J0SQJ^h|CG!PSu|
z9k{&BOA{<ve|UJw7Zi|iXEFQEYW2N&={w`?2fcG8^LIdUSq==(!q<z5w~i$2h$!As
zzF{L4JAzc_3{aZg$v1rYYHDkHmBJOkxAP9BxOR+=g{7>rzt$wV^X?ludTe)ud7+TP
z>q#A5@t^(C-$-$MUT+ifOJ{`19XjyF8VKY?^+w<v6tYS2mW(jCwK<ckA6@l<^UKOe
z(ZI=ySWHiXvC1#l&QeBBj2x`@KTmoG<5u_It-8<Qni!CVM_y7lXkZx-jf525+-qir
z#Qj-KM$gqzN60boNEFhb6)HX}j_|}eFMvhKp481;%SDL|9K!(y0VPSp2I|=X?DHAU
zVD3f|UJ#nvPzMw*s5A;>Kj8}S$+el0&cZ>;Qx!LJLh&*IS`hD-S}d^5zWPciUm%PW
zrA_@H=T#*?p(rp7jK=uV(%Y+Xp*_4SMTc_*${)LJd?AFfMIo5x&tcZOR>Prs5ffXe
z9(Qhc2rLbR>%>P!HDaFFL{%sw(bCU*P+KahF9~e+aC)#msf;e!aIaUX(%S6Bg8(n1
zUn8-VQw>UQh4zY<eyrxrySPavAkBs|KN*&KlQG=OxK_JkT-Q@~UY8+}AVRWvx3^}f
zXlDq{p1H5K`oQ(UZ~;UDenU;Rvji~PUULz)#g8npdQ&EB?PK+`VZ3Ta?!Ei?Yk=Uj
zYs_aaItM8YWt7noa57#pOO8EFp3igwF^m|1`gL1Lv{xSrBJUnX@~f}$A~x>5CrDgD
zriHlHM+&=<y0luhhcztQuE%5br@g4U-r|t8h<Cr3w?M0K^eWaRA7WJgreED{;h#ch
z+#U&aHK>PfKSK%h>N7!+QXsRp`+M&<N&2zuKNImXyK7&ZyYup#Vwdy&OFV1jq0)*B
zs;kGhhx$`v&Z!%3^IdkUc>Vk9ns7~oU;;DH9^AMQvV9#Pjn(*ir`79n0yUC3Xp>pd
zgyTcI^x3Pa+z{IPMF2SXdnSm=zS#|XC=3|D38xypi77Z7ElG9WBf>>t9S0eHL3RUU
zZNxTRwC}Kxqc!|?Hlm?}<*Q)TGvLb1?aJ50iswUgyo2~>M=J5`(KC^4cLbS6Z#1X}
zJvp{DSL)09%MnQv4>}LPK6E;(hG<0k(D}7(e;r}~6aynWD~qN^tB*W;xDY~6j;5)a
zS)e%p0?lIl8(5Ua0>z+#z=SSs8#f*;r-^bS3k{L{1cO*ku$)E&G+Xit>*c(5TIeqc
zeo&>tB3jQ%3C$BUEFubp%Jb>`l17wo#E{RH=7dfRvR@!n7h4#^d$b%xP>V)*8deqS
zsIN;14Cbm*)v3fxgX}HE|Ab#l4_@vo0MdbX3CLBnid(or%Di8f*+{Kn2CoP<mbm2j
zKp;Rzn8|_(8txGFVsXIC@p)4r*&{%xk$@^5U%Iasw2a4U67LhOyHWX~EEu>Off1*9
zwGr2hCj4|TKDxX4QSQtrHF)cu!~E%Kf(ICyh3c`7DEKOzUT31jcY@bMO+=$ZEwFhH
zVi>9Cpe$(}1Zq6b=A^;1(M>Gp0^ym9cOTH=oKh@YmDALL{ouzZs)&jv(dAxb9ps1-
z%Ms?YGn&K%#2LZx5d=U9o|UGQAD0d@`_1Z-jV#&E-VTW{Z!Xt;>$uB*8^B|*!5nM4
zb!#i`pzrNLmIRsO8-1?~k5f;x^Wx28^^ntp<e$!i)qKl#CuoX#DFpIsz6_#P4Fc0w
zJQdJrL4D$8qoymv<1U-5=x0N9s5m!%CMe3(#yck1LFWD_WYSh^Z(Uw*z5Y@ejG7ng
zom|3|Zw#TfLeY}<=Eo3*$KTKoj&~^X1+#slt8(iZuo-XNLOYQqoYrrevkJmOqj|sp
zg;8b;sKS9N#xe%(<AV7>RYcx6I5*J;gSZ$X&xB<N@fGS6h-U%kNJN_^D8G4a1fRA9
zJ5mwJJyYZgqh3g5t5ypm0AQXy&^8a836#fBh~a4{5*M%^eE9C$tD&QA;f~-n5@P)i
zE6$I>&Y3shdcbvCp0Y#0O{;<1@B55-XqVqfeq0=*)=wwe6nKs?H4hW1Ly=_aB1Q~z
zb+;U8&nkAzMo<hvL4lB`Z1r<|=^BLOB5(w)npT<*X#Gs~COa+~vL-z(YcsbdP(lYo
z1Oea6!4Epxa^I9QpmW6fvgFo8Z&5ssv(2&wH2#+vY*+wkK$gF&fSS+*#dyGj&a~n<
zgj4uO?Yv1j?i`909k!G<=d1%~A1XL5X2{4_Fp27|@Q{8tLvS6#KTE~O4(EIJgBsLm
zTsHG+_zG*N-%Q8#oZLqah4SsIhO7cA3eib+3Ov`yR<P7s+gGTQuwmE={bVQ_vN%BE
za?>XCftexu3!YG2R_%jf39<RW5(aogHR+m3B;;!6$be6TnK5J}>@MuZOxvyqV&YiI
zwAj$NrNC6s(|tqa%UfCJC2$xiZLnzY1qAvTiAs2MKzkkHY!$kiA5vL>6JjO7*9CxN
z0H!A0nELl!|4o1}tCEWbmXi2QUgEi0Ju;U8rN^j7HfKVSCv*RHao5QKU~%PC>ieTA
z2nRqI*x2LjLO#0U`{3#@Bzmq1IK`RuTuhYY0A01<f$sVtmsfv!w!1#HLjqDLiUViS
zP!c{<$b<q_xgV<o&q9R<5?yGR@W06}1^Qa7puX$|RPKDCE`+f;$juq(!s>}I8H`pU
zt*!b_j|~bOj%m@9vGPCz__V9_*Rq5>do~eCX9WbzP1JC#@<@&b%Wou>#@<lGu<+_c
z)I2b=@~T`rKi-{fxtEdcY^G7|=zai+8#9#lPmzb60~EoWpx7>tY}LD|4XrPI8r9t^
zk7rU(Zm$~C)y|<y!>)Q1e|c+t)twiUZ|bOEH9ptT#;{=4@ePuN8`+n|Y(z}+h@!@l
z_m85*P-IfVy;;mI^Y`Jh4p?fG=Q&>(`1g|Vs!@P4aE0lUD_y_fX;Cr9PPYp5oxqjH
zdDi_TRC{7CdR{<#Rq|;)e@5lnABvv<li-!mH$(KHNCL$Ai-np`&L0BFuEF_7{50B)
zU0MuVvdXC~df0<8W>vd4fYlnf1#iT!O*SW{OZi@U5u_wki21$2wTr<8d-J52pXKUd
zA9V9JFf~4%QXA}{3B1_P#`wk|2_(O1z`+hpS98DMUY%XAv=aoQ@|9#+{PqJc$L#ei
zMrB*F$H|p92PsuiP}m9@y1a~Y^Eh;J_O>=6#4jv9=EtMR#YMewhD9s;x^(k86^NM)
zt7zmK)X%ROTb4#>qd#lXzI$T4b3MOk7sZ}=8||v;yLY(m21&zN@!qf7ESr;dM;O0}
z{bWom*$2{>LkA(n%b*Z1VhZ(3qIS4C^qXxYt^C+=L=6~{j>}W^&H(|-k+Bl(zBT?f
zs!ABCy19<B?l+*$WXo>i;&g>P(qmBakYh}*57kfNwX%Z^+%f7(1m42DIZYp-a})u9
zmIcNRH-%Nr*jPxoe4evQ5ResC1e$q7R>-w)Lyq@=&JZ!3i##4Z5Jw&Gye}&^K0V+#
z-;)wD+MUJ&LTta|Qu6{bR3y&EIr=Z7m;$^lGIY~b6M-)F!s=gZnlENGhTNit$TdMt
z(CJvQaIjow^@VXHser90=J#7X08+j<0b0q(ka*$NqftkU<E7>VyyGRWVrrsqD)hX1
zQWrNB%VSRWdE8pHkv{(^gV#2bRW2XbOWXU-n33wQ+UO7bkWa>HJ%lTq5Ld=Vx{g3H
z<U2gORqC1~Try~b>gbNgo!Rqb^%S41?bFK($Bq;3E%r5#3>pp!7S&djV15XI;(+xf
ztjdALIqJAdSDQ=I)u%>ng^ms_N@UI)G449hGkCZa$?Y0Zkcq~9oi2<iY)_W&X$||1
z8X_arrSP$=nTU)n#dmkPB<gZ{S5VX#gA)^3g~U)~AVjqabfoN7R)Lb_Mq1dD2tSg3
z-!9kF9)18VnmJ+WnDZQaL)(f@4&(=hC^|<f(XP}lcxpbVCE(LY1h_E3+y|WgnE!p$
z{XRL@kb1yfUoqD$^Su1U+9F<UUZcnUsT=K)B1o7M?ofF8oQfeS==|#Cq^hp4peqSS
z^*6OhF<Z!A!VYHrdd$`m4Ti$~enVJR_FAUMTgZ3>h4@;in%5;zS6UB>SM1`Mm=--b
zlu;-y8bEzf&#l+x1euzC*4YHz*hd}GbSYMBj+!{~jwO!vrelM1R5hQ2Sw^?hQ4b>s
zta}8ux<{^6jpyvZWw>+F`=N8yvm>A^glEJGj|#3dZVSB;HhYb7ehvC`4f@oEDZI0d
zlEv&4As#3UrhYurt2uic1%n{uR9%gc0qxTAo<o^Q)trl<OYjA777({?1PYirdNU(v
z9ij->tW4?3(SSPxI4ir8?1&6;NH}qX-R%PvSu`4*0ON+UFb7l*fOBCbIEX)j!8}1X
z++Y`UJVe{Psi!-isU5qRsgIyet}``%ix~;qdbx&EY3UbfL{PYb4%!p76-ReS52>}F
zDkF+QH05SEisMVNrtKS$6x~k*dl;7bD47;OfCd%e>@^^)*7Qzb2vS+<`^UZP2;n=9
zvJ-V%z{t7?9aWEy>o>ieG#~0xDylJpL7&uo@R8(Y#j$#wK}|;jT;vF{L?IU_o#U5s
zxKz08pFM|z@^bg-)14Q<83H2wZ{B@b4qu}ELPx-m6^h_ASqn&sC-~7gy0kDWK_M8C
z45Wh-0Z8Umre^e<&|9GQ)ULMAVBs2@J8RG9YA)m1XjBc+OrI*%VmF>67vZQRhZ_8s
zL#>O{s>zM8mJ~(ml7CXDTc#kXD#C%HVfskup$!10gJ{_@IZp2Bta`1u4Ds!b+ohMf
z+u+|#l4ktkm~yP&1!o5>TbgyI(TGa<w;OTD(1zF&(ZA1UC0qH_v(HtYMlOtTrExfw
z8{J@68$1;+1Y<`r`2`6_NzVf^Sr$0=I?|iIZIHQ@Qm^W~UlEc3E{ja9J3$h9*+ZYk
zrE*mg0|EpBd?ACA8vS2qR+6<?X8`xy5a=6ySfeaZZ!{?zkeddzslS@z-d4qVIjRb`
zJbua)g#@baRM8^;r9;P;Tke3siiwq*YmT~R*TRdc+2$+qp3gViEOt*vHh~ub?FO!o
zq80cr`Z}3OkG;yktk3|VxVsBM;(3q6YKwpX-jGCTy-sLq`A~HvhpW2_b@WBYdMn}j
zV)5>1lPkuZfC?hk5ST~YV%;^H^w-UQnmFrWXTa=VcVcKy`m@s3|K<8C?tV5sh;0O&
znAi-8KJ7a>aGAV$^6CI_R4~bIo?bsXogZSf@rgzGKcrCmO>Ce~Y&vg7I(Nmiibx`4
zZ7dRrS~-!)q0B9948`}91T>gRQD)^d3Rm&S!Yx}oNSumWu8CPqZa)q=6y25NP_YK#
zSRLiFAS8b5Jk9!&y(=w^^VKb&+S;DZLGq`43}mdr5XX+EM+#2V3ujUbwtfgu(|z_3
z(6En=sO9q-o_i?F110&m21tZSbzW5ST2HB}p_~r`qf|3Dt_do)t&_mCYTvt5tl6oP
zxy{1Vm#=zTz??dxFD7PJy=xF|yKB0U0NkKA<{p7p?HA3fTus;fGDePRQVw*DhvsC;
zPc)L~@wl&+MRn01eJ`4MK#SM)Tj*!OOh*n<0x>qVCg==icOe<cn9OZvcjkvT|MPlU
zqiabqChskm6BUj1{i2G#Js6L1^`3ASnyw<ludAlAW&uPcqKv57lx_(#pgy~^s5fU-
z+Grl(k)#QJ%x-qtg?7Itxvn_|c5!@;gLJu51O27`20X+4dI!~~-KcGwp%Q2bXjY*g
zbjr15^O{D)?9qeC2s92|(+NKt*lPik$*thCUYnR@>~WIEpb|`tYxvuG^iz8``oz<P
zrZEa$l`RQQgY~>BFLx&=b#4Z6&x~hlbtxVsi`Hl7>gM00Ph!KUKJ=*=Ia01v@5Oe4
z-gUIk8||p1SN!26ZT0p|;cnj6EfAqsK01cG-<nb$l7nD7w=F%%fp%AKfT45RO>o&=
zGr3#QVsi7lg#tXp_D8VU1a^nXx_iK*xqa+M%XfCrWXj&THo8eCDA0@hG#KRx85p6d
z8A>IX%Yf5pC4el0BeCM!Wj|IUK;qBJ^ZIqUGdeBR@qaKHG4i@gj|o{e)}@uiI1WK|
z!=1(Wd37h&;T7M;8NWnHnxL<yBhV*dS$v$XJeVu6r(mbKGk`-^8!ns|;xCdAR`wu?
zz3LGiy1S!Q#CA-;KG6{Z?=AOBHEHIc1F279qiI9>@}`+E1Y#p_UDKm3Gfqv7<*>pI
z%hWXgwZ<lrd$4sot=v*>O{vZG&H!g>f}Za@eYE@Z3zpS_M3iK&+5KcGa{Hgp;7w%#
zERxybe{Wk;(W=V5mInTZ{>mE6L^3u@6*WS4A9=0G;eJbIUweI7-Wxd&?GqSoDg9r)
z67SMCUOMlhF;%X=Yf)Xkx{oPxV$7w-<IFh#3`!2w=WQjOdl|Gz$0fw3B9x5y5o@as
zZalWz<m*l=anFf4H9iSVt<Fo+q@P>b;8|NU59`UvqOl>zu1paSk0BwoNC6UFg~PXy
zdTu{fzeH0dqb#<)X9JgyV)$w?)rRk&=RK)F;(%B}fmF$G+aSxLGEvzn$-c<3U>7_C
z6pu@rGn@-k&pP5C609_`;+VsCD7JLV7!i&86%8%}*x*pE^o0dgh8e3D^XX!)?r3=G
zk0c|9dPCAz5{EYGS=rR$cw7ww!G0{X<7rHKpOjLO#6ifa<g#lBi$Iv8zBKI;oOcqp
zaL=09YZ|^s&Xr@@1$neh*X?W*481-hgRk4SQ%ns)Yr$-5nHCWgUW`%R0*<;nqL5S2
zEE&9|FH`JV1GXMzx9VR340XAtn5kJy3ZvEn9`0O)ukCXsi$Zpq7Mdm^hlI*kyF2%R
zR;M<nHkPt_*tPX~dP4kk6Uen1QH<Ahx^DJw(0!94hhUj`57rO1=9mOT5jn3*-(9oM
zaRiWwy9`M%8uV>B42;UcsY3DZ1dT87CLnr4j!ekH!+qS>)x%vc>@)B@=uYPT>}vZ0
zb$gOcSZaAphCH=UCOojs%I}~<7y%*j^hx(g`p)Ca6|4R&M=zycpE-5&ow!4$P1OX*
zGR+Q{Hz5$%#G;S+-PASPz{H~F(J!Q0D0Y>K^#<oE+xNK_(iP{|%AN*}B%eFv?{gtv
z3m4n7X-?f8+~<SCB&=Cw99^A-bX6wR$jveGG%ECLb*FaAZD&Xq(Hf`L9T}EW2NVBD
zsMA)DQXAsBaB(>FgcYx2Q%n-JxTcz>k6FStwSciHCN2-;dR?~e5+dEvn-+WGAzqE6
zpq-wFiPciYjT^6hx91kzIh>|ZYL0MgsCyeHNr2l{Bkw-;hdxAxN1TD_yrs)s+XmPl
z!<0QcQH}IrKGbIHAzKpH>p%qV8%}vDgKTur&lNL)`@D57K>F{`hKCRMLFU7@BW8r)
z1YvyG<my>*YSHCzW+HuF8=cUgtG3>J@%g|*-XL4oYeO-ld3$)NRR=Q`kXvG!<a5Ag
zx|*ocC&jRgpr(4Hy06O_tXX4oKSy?%SX(s5*LQ`vGVrVZW$6$u{A6Ss=}I%Dw|a^O
z8T#V>gStNN^r>I$bqt?&M=HHI9(I=csxbnPcWaB^f_<%r8e|OorCYZC>ndqc)gQX$
zWnX3x+#m^Sw3>s05Blw5Koe}1fP~GyyQ?3*lXAXEh#>wly+7}jJt@F>pw>VpYqDYV
zvMk0)Hc%A8RUj~v?CqO3Z`kt{{u<#wurTfvB8VesI#ep`+<@!k|0!;e7{FrAmhPw<
zaq)%gnXz7mmhZ3)v)|x|uwaZN1DHyx+zbWb5~GL7t7}r<o)(wmx)^0mHD8c9J9Gq5
zq2|R5Tvi~CA#IdOo3IDd`8n?;XF{oqhZ*JpUF5(LE5p3At>1^?0^Q@V786KQCwVLU
zvUL?sF|2S~<syCP-`798n9$pbuuUqbDdh!TKz7cfm|c^(=S5<;3iD?i<3Fb>ay7+|
z+9bF`j9%KXn;)o+FZ9>|dWYw$6S}2UqgduqCk`bO$qVPSvlU}te;Y02qBr($ADDg~
zY8E7QwX3|NH8biirn80&#QlU^#u9Y%d{2ppv=M-Icc8^pL<YjXj>ne?F%hXd<W$64
zs73=j3Gplh7$qiP4M~v<CE~Fq0^Wf4>#S@N&lH~mC5)F&Og;UeNXmvuWnM#k;j$$l
zl@#b7<MOnej5?AVrB6@XTUe56b*Ji|OM4@`6-P|hNWycTu2-rxale=_devk&UW|;%
zj918Q0^t|b4cK8|mpT5*i=xw8+3WY?%if2dS+5`O!n3_cuM$EQ;#TfinIR!ym|qa9
z7PIs<=rLPvv|8u8)+5#-i{V+-m3>x^vW|PHc3STK;jy3g1LWoA<(s*4PdjrTmrDXJ
zIv4e??6nM11DkM+94u8ly466*!_C5Ff9#nT9VczE+)Eb*7(0<tNt7~NG*GFwOr)k3
zt0d|vnfCKoyk`4ZP*23r<Z5qs<6@jtnFIri*aXUDU(uW~cS<&B*fC?Uh+D;bG$rgp
zxwoQxd+*ke_`_XzB|evwjGqNEefs|JlE{v*^7a57EdF+jWYFj+x8gzohKX_XX%p6e
zCT?Jp?g~6Yc=(n{(`pc-#ndJkt5hKzbUHO>Y|~)}BN|9*c3NibK$Jgh)vEGJpn8P^
zpc}sIm;!AZ;`;gSZ#>xnegh{E!+6YJ6c>6BuwU=D-Wf~(>i!@bj;=s4chtuJzxJH5
zfK}VhfXuJ6^WJ}k)>0F;OouC)YwIH)k9apY64iV5g>(VQt~@}48Y71=0MKmiVx)dL
zKM4QIY*t)w#yqiq-;tjP7a+kxkQuGE-!T5VzIzqZ|A;AtV<xQ6<ZkRXzS>zha4Yjo
zoBbPI9}%w$VyinAgE2Mh93umXHSy`v2VNsX!PZzNXZ~AeEp{uv$8OE9vR%)MG`al{
zyE#d4ll<}D(#>tr=wj46YK3*><KUT@y#L_<$tXoQlUMgIXMcFSz*V-02EY|tz`Nni
zwZ7)rYK41Xc1+@;I-^nV22A;!XEkKa9KhTwY;xzK^Udl6EIFBcxkkS|g9W}Wx1dcn
z0{ffA4CsnuFSz1r?k4T`)?g6ceP7YO{?PX*A+yuk?rCztTwcVKaa~Hk5iv?mTV}c)
z@MceVeam69X5{^(5ASL$8gEki)P7jOgWCi-Ou7ZOK7^m7+l(tYUe9gPMcPcsJbj1A
zl`<9^H$#p&DtSqXTs)!Z4Pi!%_BB=Ww4U#yPK~2?2_cN$Y`vsKrgSn{1+=hCUVAoj
zF0P^(Uf4M&zL|Fx;JQv64{fi*$$3*&Gro%>CQmjO9+0@%lbh+OBS<h78`9JW<I5*W
zJFW}~z5JL-!W74^15?nVB`74VR{Ua|<`{fPSnnU9b%Tp*jgA6nb!tqR3D1Y8+WOk)
zpHH9dBeKmAI=(+HF3Z^wh3En|1GQSU^=F_wM>a57J%0iXZkwVO^&GQe976d4GcgG;
zTm%9u3HTNGK;DzSP|6tkpcK~D*nx(^-mDK$swU#QKmCV4`xk%mvp@N#!jBQzknFqP
z`{SSe{_lVHkN^Eo|LTAI>;L5+F_ggn^Sl4y=l|)S{q!&Y^<V#oKmPfj{~Mk6U;m@O
z{=<K=v6eqRjxJ`~#xiF!5j0#9(?|UZ*vOfzChzGfr{Asq_oj)pJnyl-ekK+u<_xwL
z<_m_Hbb8&6DC~{Ubm7Y2!d_rijb<b9WVj0s+K&Ap1KNQNMSvrPSogD66fyvT88rqG
zMgKFQbL+(%TwYB)f+{a_b;b~4$|61)$SH#7>KW&SBhb94SH-cagN-0um@yr~QG5;U
z;8niOt?&h-riE<6bVP*%2yr^0pnYm@!UGCM4+3#!%}D8^Yv2cujvOJu%`{6%Kw>0|
z*Ji-|tWAQ3Q}CH#ls$km=0zi1Rp1Eo)(*?CBx3ka2%G?dkX?WemwC2HIV@O|ix(bz
zGh=&IUJim%m3}637$i}cll-|c?}OuW@jhr9w!`@Iz~ZkMP82tW-Q#`fmEd{HaAd#i
zX<3dMA|o6LPSu1ckA!ImA-MtNa0D@;ri$IawCy=fkzLRu?aZc0%EoHgr^sDs9xASJ
z`L_}gtzlY?e{V#bjA;2B6g9JGx?;-u*^=sNg6J(Fn1P2~fUP?r=Cx5Or8wY%%)HaT
z_p<~110o}9cAo7W$S`Ow4!^!-311`)a;8dQtw0bW%q?Y)J|w;9IO?CR6<kUSx`gY#
zi92Z9=blk|WS}Z!iF_`tSMRr^4ZONVAvYm+gfE)#m%$jwSA&e-1cHHAnP}hR3f7zx
zaSA!!QXg-dF^1iMzos?BbfzHl7@vYI1LZh$ycw<GXkV__LzKhQ^d-k?cC(IMa|MUQ
zcoD*hk?#p-4>xT}9hM2Y47_}a3b)4Iswwa-+}y{pXCG)-12yx{E+)^J{GmlMyuN0Y
zy6+6&#fE2h1+jCCVP`d=m^}I&vk|pba@*;4xT;QXBQRM?m<CK!{#RgmF2$;Wp{$%y
zvAb<MtEM(33(_%h?W9_gO1u?3TfF^}iqS2M7IbZ7=892?3}!GK-D+mJl|tLDk_Why
z<^#ok`SQ`uk6*qF;v>X2a|jy<AveGge`hwUXWb4nn>+>(Rw)wD=vF)N`10q~n`+V(
zAh&&jFneB%A%f}?NbYT2<E&rftY71-$8gpud^bKa9z5S=fHMk=-hucQXh#Tt{ev0*
z@pUztpYh*cmarfB$D{JKs`+{KrX0V3X5q7%xM?vTo;@IYG4-Wt9;t7&I)xpgMIHKH
zpPcA=ih1$Xi^u$H8@wX`tI_?8XPy5h!lA2EAAVew7tc;y4ukVj(w@ChI~$6Hg!q4I
z#*VN(3Yn&E{7c2YpEpN1nMabReR#Pu#^Ziu%!I4SHxv|5Z84tD{F_F+w08jJ0~SY3
zGd*f|8Jfqi4aBOttI=<<QG(NGL;}YZfQZO?wY<V@ObhU}4(~b!#Wiibrj1G3IP}QD
zHt_HDtl=l7J>NdvV2s|b0hQEp8IQcMPD&laL=8Eh)z*X+tm}dh3iH{5Vo)c_v5Jl!
z98x=H-Y$R<9H{8x-3zoo@mX=0YHWB$Fa4MW1cN1TzMTGbd*>Sphn)+)sTa>=Sj-Vr
zfgkJ%{aboLf^V+YbAd2G>rAO<iR0Dk>c}WCeW+ce?>RL}x-92YYQ}tXz1ZEhrlFfZ
z#jXHk1I|He^C}VzQZUerxWboy>S*bHr1qE*(<Cx%wf5%}r9*K!ka<|PHB8lCUzyie
z=Jl1iGHes;V$SLCwFhqUgQsBpCVZX%5&a>693nN{qI($x@8A1a<66<j^J4nFO%j^%
z2N0dpC-`fND*XFj?Y#KO%NILesPA`vt9xEezCADA^zL`_TfOhyvEh97cV0Znc7Ege
z;|EV4;H2wlPX{!vL;V~6_h7<~L?lTu;tT6h)S%+X2yt=;cwJZHKz6;|5DrN5Y7PMH
z=>61}3FHG8OL<*2i(>qwn8p%~3TVUga&m%)_pg?U?soRmq5c8Vc$&Id!C2Xe*(0<Y
zh-JmED5DC@vyLg;(blKML|4(N`5B0$Rj2A|&3c?K#`EenBY<6X4XpZQ;3l*#Q2Qda
zuEpvZUoVHZF3#F$6i&I-DDFk9yF7ETedA0(7L7$8*-!6O%HL;B28=Zk>tJkVv^S!n
z04UiQWFLQYH$I8AUU}2WH-ii^I|r>ft1kwm#sd(F9|UNpSLswWv7G|_hVJ9vxl$iL
zxf|~!AXvV0AEPa8esr~_+KEM5JT>RKXo;LA<t|HLkzMh-Q%#rI_ej7Hsc=rj0CQT3
z=%!WWik_(dZmruun|&;6sGSHkPSB9GtJkXBNcDJ<v`}#Uieq4vqC(bnht=KQgg_+)
z-I|ca7zC7vuuf@{nofBB-m^C(17nP#V^wY+WT1392uAe-R5vLv9tsm25Zc`_WIETT
zU!-)MXU$?dt!G9W`7uOFoHg_DrPa-<H_dE(3ALa}3-T;ZHHyUr=5enCm6s~XbpmJD
z(HT3MQ*NLlb2(>>cnVzOG0p%yQcyLlBcO3SGL5#v&ht>qX<Z|4t=La|w?H(=>}%D%
zPJ<7oKK1puhL?e^4$<*7p8&P62R3wC^<8xM7;G9E4s1c_h#2s5I;$0nuimyB5{w@o
zC@?_-_}o>m!Rcl%^G%fAiu+Qxq;CL3^%0o#x|)yHtp*9FU(1FYt8$fu$jKcue0MQt
zJ)j@Et}hB5k04*mfq`SOYVEdPh7YK=xBqOJ3JI7(!zDW{ClubDbkIaIj<w<@f+o|H
z=!H09`>+ckDxYFh)b4@DQT3W$cd)f*^`fE3uO(=`>9t#8L~%L_ri<!5sTk8}WR(CK
z*K~+2dV8zQ0W5oI4QzAl1_sQQQRZ!0kMhnRG|%<Ooa8q5b|)mbj=PIzO#6-1qv}LQ
zFvJ<bShS4JgtVhCE2&KETM^!tBhF6CVy-J3)-#H3B@1_T%ti{PL5~5l*P>F@yeY>g
zJv;w)yWi8VOu2O!_1g)c1s=ztEv+B#vB`e+d;inVfA=4A9LJyj#lQXepZ%x5{;NOx
z>0kbnpZ&`}{OMo(@8A8qfAO>5{a^pz|M&+#|J^^ZFAbINXaC2)`q`iSQ_8K9zx%yE
z{`r6Y=Rf~ffAI5v`={Uiv)})}fA=4{P7n2X^h{hoUMxm^CpqTg<;C-2)|4YN@+tg$
zVYVAOj0HX?{cQD_>Ss5+{>1!GBDWmbHpy<~ffcG=fO;m+6P!!9wQvElE=5Tpt7V`|
z9{R4=yU0<02BuBI92N{&4Jy5RaHXxDS8*<l{?a3hfU)E7P@FTY<`9?K-&Y8gkDE$=
z;lsq2Hg&7-*Nf)}R#8m@h~`8b>TG_YxFNd1;id&6D!*AmOc@t*A1Fw$CMqvPk!wg#
z%GSRO=g(48xaCVw9RLK*H;V>(ecY&5A%N(B1!f31@6Vpc1-C>t^w%WhpI6k~X6qg6
zn&F_Y&?(7vC+mBsjxguFb|*N0svm}tZ!<YhSiy%RDQx8mKp`gZZPmQs7@KQh=!?Ly
zl2@>`#PRf7DXSz+U@IJPvp|B5AsxT_{eSuM|MssGN&o3z{C9ZWIOII_%0o$Kw{F?W
zeSLWaR90@UNIfQbMGbau=v%T*?Vq566%Q||jN!WdWtCLSUjc{GS~y26J<6DOIDr?D
zBzb<laOJ@Z1p(9>O|+^Bh$deH@}Y>%b$rQKtNiY80?zvt19L}LlO(vhIlf%boEF_A
z)D!N=j{Zo|$#Phz6u(-<$f!vhSH*EPR@a0!qy$^xW~y!u5TNc(vKsXS@TRfid4BZy
zHS!aT^dLv)eu$-`+(TSUtbsvSbguU`;%U6o+hRq)3^y=vM28zc?=HI(p2z4p^`W%Z
zx~1R=>~|A41?~v7Gial*NhWt1O*Yl;@oQ@8?4rcdp!eicN3MJbD6G3g_L|8!%Q|Y3
zHtdwPP+bwKIYcIKYDl|o2_g~?C+tq$f!lBEDvm?z_7cE~(Fki-jxPL**{*G}I5*7m
z8hf@JqL|q1%VJvP+H$Y!IhdD2GUD?y(^o&YygR(xB$Cly5i#kX=ld!yfhf+ab31_N
zCW`?xHWtslumc|Bg}#_=Opx*4Xq?`;585Z7J>qt?j%kW|R>=+PE^$U+p3l^5f+72?
zs%MHi+s-;+ZSM9n)mv0oy1j=0H=jb9`s3EEnA0S5;}W+Cg35MH4F}aB!Ql4wzUZ4p
zPsI&DXDsw&uhuyqu{ZF~{^vjc?hpS|PWX3!`A0wh^MCW*fBehue((SM>p%M6e)fC+
z-o9x6@J|&7^xc2|=ZY2j>3{ySpZ(GQrMMwri~jk)`0lU%2jGa@*azH0yRvNyEB4my
z&BJ80_OMdj&dzTyigD95{%c7drWfuh8}3)}Syc!WlY}Dl_@6ZDEczwf-c<LmoCNI#
zImpCDK=_zc=(V*l3*j{k48%p%l)8)RRd<GQ!Pa8(D#tf3aq!5d$jp)}jOeZ-bf}uA
z<%RT^ifc+@bS?PqP%QWw^M-{Bv6xq2CxTWh<?y3C);Pq_G-4I~ovU$Vj(O;k8@T1h
zGCK}&EIrWeY(#hwFp{(N@Y_DwqWGc8X)n9T9SweTLA7xYI;X2dGLc|K<^)sUp>t*}
zok_zlo^j(3iE=uERkgdv<rBYYgT7>wQEX~|YS+<(1Gvmd5a%iQYI7SPO_u#xJIbxS
z6kCJ<!oknJk<2YCG;*;H+S^`q@Cpv<(d|GYa4F-*fn4Qm_|-y`bGiT3gH9AAjhW{r
z6^7QJH<MI`c>OYGJKjN)49t=3jNeyF+42psMGtI6huYxPJAc+2O=kdCLh-m4(7~~t
z%~bhZ>|<$LD&S<CV1beC&V5djYJnRxE1y$hY;)RF1MWdoe$~b0dFaNLV<7(Sr%2ks
z|6p^<12AxYd3j*&#htvt_71{F5aM=!D(n_7K1Q3x{TFwJP4n?>EDF@3Dw{jMg1<ID
zgMxb`>m8`;2YI|R<na1g0Y-jv^vHp1+Xebmf-MOeN`Vb!19N*)y~#b-M31FRa*^Vi
zot0?!L55R0&<EM9=yK*e^>AS7=?j1?=<^KvY|3SK>{~^hjB$O@upk2uq&=TQ29#TF
zS*LKe;+&%$=RJH0x-cv}HYZfoqU>YXkudt%e0Wv@2oI#@__J$_3WG3VIy)d4@!toV
zhtAKB4p(Efcv1;~*sCdigRatlI2B_P;z2i)&+EtaMLF9B%#Sdj8SpSO2w;JWc%Z8|
zWcUBRX*b|>y$MD|^;QIYL>@$0#)T!39RWA^DFU>c#szACoe02)QM<Vlv15m7AmkKP
zq-m^kHG1_FZ<6(Vnylw7>`QtqL`y=|Zc!JCCGyzV?Cb9z2~S}Cq5;oba&oU{An5~h
z<z|QyOL%jl#0afV%Z#jG90zLMME*@(O}d?ar$>>;xIOz>k|$#tK~@p!OMuv-i1TJ|
z>u7@lTCoTBs3sjShPUFNI2bQT$0q3GU*Mic#vv4GI9~lnLG@(y+(C&tD3a!2A__20
zbv-_=k+5wTDAQ4mI31w<!eG~AJ1%=xo}8#vGXB)Z@YYc^;~O99!9IypKL7x~`!ERS
z>-tsMGEZ4ze5T9exoYP04AkIk-h*dM=)&KjcBl$Wchs>ahw?gFiGe@b#HZFrJt$hf
zDL~7PR)T0CbB;8brvWz|YAe-4sJKKkdH4bD3^eB_Wuf+8sR#IE=gG4{_I25Ljm{9b
zyGpjoAz`(m6SEqO_Z!@Bn|ZbaB6LDAQF~>ingZ!JDDoMSki0H*P>sc;0ztMS`>N@4
z0-_*O!|r}v8)G1~Ul4!~4^RnC>9<wGii3mPALYmv7i!guQGH=#p;`AiTPh7pJl$#p
zud#@aOXjPEQ48!cvE~Em!rZrvWB^T~;~%PlGU5T7Su03cQh-yd?w#>Sm$w>28=%;~
zP_7&sI#Q=L-UmIEZe4(a1aa6~wT@!^Vc=<#=y8;C&|$P{o#-p>*&*SD5CH+G(tf=I
zm?%wjFn%40=|EwUsoN1J0hU=?ct(}3MMGf!13wX?rI)}-(^GGA_A^ll&wc_uO_YL7
zEXu9q*_YR@$=7~X*M3&5unlk(eB${<ncyxTW0+SR>4iO?o<G~$+kN<W=jGo1PadnG
z8mI>~oyFe#at!gAI`G0ZKPHND%am9AgUSuhz!%jd7smv&fPXv&ogknqczpeQXZs_-
zF2rKMT*&uhr4#s$QU6tRs)oS0I%P{hhKbxEzb+Z{xSGYAkCn<6gx-Soo)W&QSN@>#
z-e7cF?7Cx;oz5wTr;<CLs++QE+REuXt}R=nJwyiezaE%D1P{;JNu?!_A3VXTSqe8B
zk1L_^4KtdXHPOp=fY>y=YuH+U#gw$Q)><;V7sTO{lN4Q8wLr1&zxXB6t*)_1Ix7&H
z_P&0oh0@LRS58iAi|u6-%eC}m5feqK=TC9nceq06E<T9}qE211=>0QtMH8BK9dO1&
z45BGN=<TnT%=v8A#-~1%-w;Q?qBtRmWViGqLO`B{cxYhCW}G*Gm8!=$p(JRSlWrRU
z*eKisJmVTIy~p<yHyCWoVD9{V=+9MRB*9|p|FPzxaVEZRXYyU}d!0qSXX{#R3MuJ8
zWS(n5+i9fsXXISVblD-%LTq=N%{?p66(h2<{V{FtJ;it|8hIzT?Ea3qkhJAbTV~5t
ztdZHWBkR<RT*tZ@9}7z*upWdLKrvleb}?0Z`>|{Z47Fy(^lW9(a&%gnl7W<SzF)qX
z8&;@~r|4<nK$dTxmBUxyw1CHqg+T1e&?S`C--NCIn-(}R&-0$)sc_tCC+wkGPV$8x
z(^4~)(oGBf_gr_*E#=mT6}X>rQ_ym2=9Ap>alUMS=Qs9=r+P_<&3kLv!9YEF5Ybv3
z1}*594<u=pB1W0q@!Giq?Sih*pV1^LcVt_rGr3)#pVt$t$vKmJxws5(>Kwb_E`sgm
zo}PdLap(lEn7EzY^6o%b(dR@(c;*h{hS*d#Lz<P}umf>k5w`5sMtVMEu8r7~m<;~F
z0!ooCw~|t%i#n9T4elg)emOnK>XK^|8P3`jg<}iGw{~5@U<HOV0Qo*gAm4kLEo{Ep
z$uXb8IdS%f&9@a~bI+Nd)9ck^QrWwmdW<GKvQLja#ebqpm~EXNiHu%{9;mA_=n#B#
zI|N^19SWPmoIz9QF({jX57zqWp(^xB8$NwJfM%s}JGwab+54F7CMR`v1U{=6Zle~O
zceLpz9BFhPz9?oR?k{TTQI^9p%()5G&b~#)W<B4CoS?Z0VT>Er(ed#J@gK!$*+L)z
zX*|YS?cGQIjDT>Yaf?De?}=`TqJg3Gztkzgb>rTVbOq|n_FfFH!}L1q(&|3!t>L{x
zDsnrlVKFaH>mbZ%3`KeMwdC3Tz#NUD^E2}2CN?jl6>}1wk5MoeOV1DoLs}5FIAneg
zN`>aC`UiX4diDiV-dk?At=554p{oy_%EbpS$Br+*VCYvMhkD%bcYN4mF>I4-#i+-t
zMokf~X$Mhm80-2+#gsX?dl<2{TUBWD@LislD{AenVkfPs8>~w^AuJZBWoIpx0v={>
zswTMq+X^7M&$^jM<-Di_Kj2ts#5&JRjMx3xQ_Pk=R#(+%I9r?_$DXiJdN(d#d(ivu
zP3zVgT4yzjFFRShwgLJqtp4P90al#N91+>j?WY|6un)dL)m$TQ%n|SdbS-?*(vWk9
zpPz%uvs-&`iTZG<@AtDh8>s)kpB>aXI)__<V)layx^4~XoIxc$E$&!qAXey?evA4x
zhhPf0FC%@Ca-_>$UV)k5$zh^z5+Glx2aOjA1P#vKkjFvi%>#90Kqqpk|Ckk{YSHLl
z1w0@14>Fw9zrdepJTAwgU@`0PTaw2M-Ga8rGPr|gS~@>p)288ZeX9QiLq`0&C+!M8
zv2F%XXUxPC2*6VhhdMFe2RiSeGv)9#BKR_XEa~JJ`QYp+(zHg=9R9^y7Qkx5w^G7x
zIca4Y+j)8=or%yNz0sl&L#(_ts}==tH`<?hq(GYFMl!EU+G8CPT@jz#rghmiS3@vK
zQXAb3A;}-Txr)<zkvT=;{c*WPM#bgInQ%*}OL~5G#WI&=;l8DpBDxKpb&P>%MQO<?
z!^}N5{&Z}z+}`LspyXBUthG3&W$m=1e*44|`7J|0Im3FqC}-YEQx?jBsKQ|5?hF~f
zsfO3*?QD^C%u$k)Vl4fg08`dfeD%9qX5Lz{yG7m@xmu@C;z+D6C^bKw5DP~L3Pd@N
zjn}um!5Lz9i-3UIO_`j{MMg;pRz5bC3S%~=DST_G=$s`ySXws=S){sqg}$vt+-zRx
z)R4DOz`lMWGUjY?DVyX^k()N&tj(WlHW<B6Z<za|X%M$VFVx|*6y&g9z1013jm~{-
zHFj+^mO$q=ZmQ&`feQ$;>x6D(J!E0ADd2D9Kj&w8qxwB(w*X@meEbdRs<$>$f*LHF
z5YupR^<Pj#9)EKHnGdSNLl3A6vc;{I;Z6T4F2B;)4aeWOZ_%cl6Y>oW6+K+~8O$$i
zn(`fo4xe6?mut;Kc01b)=0X+b<{VumkN-d=Cu0TMbjM6!8O}3ilY#=QUJo6OQN$|5
z+H=!k?zWPe%*TbIEc55aI>d7m<m><OgP*7q_44_PXU}(Dz=?7l1M8{JWWqO)6&URS
zN{s3Aruf{8m{`E;lrtWhnB50l<6*)U8CEjrr7@vYFMWJtmnZYiVPE~c#CLW*rC)D8
z!WTS-%c5lba9q#l^?BzI%_O0L?PpJ(KiJ>he*jj6@Z;Ijou~W4QuB0HjVP8?EoB7M
zHeifXvv~J+i~vskVKA97E*E><Xj#D6*lLo0J84~rSga#%5z?6;i+$8QG0_GY3bFuB
zko;*4jE#*vNZv}0@Fr@3??`uCw>~Frwcy9mNN*-I(rdU$P(hB+>Pq)KgDaU6#D3GN
z>{uPrev6nk6zUGg_3+i#fXr|s9ZlTJjzA9gvPdQCnKG@{Pn2m8uZH32Rf}-ZNZBtZ
z=NP@w=dqo#Jh)(F1X(JVO|tE5J;wF-ohsw_r3vbl6#J<S4#(;Rz`vqd9D^JKFJcbg
zh8z7oHzgeEN@=E$AyGEFqch{po}e9Wm?3t^@nv`x>Z-8>(aG)KMj=o{5Xo8RNdrHj
zjFkUuw;h$|*%!qpFc#XcpS3(tt{)TEkBRHYMCvio-RxxtjPZOpAOI|MphUb3L}RuV
z8<47ctQrD8PF30%U9egOdeY1b!k<5eYlzSf8*tk^&vg+P;-?<Q8fCe&2VU;#`|MZP
z3<UJ0&o$h{e$l*YKEr;0)FV(|6P>J9n~-3k)m#E%E<sC=FKx5N*|&UC4skt?%M&=(
zGB`5FnbzR<ltB$@_zH0QhKn&XHd<1)he`L+kZ$C0qB8BOvmFZ|&U8z=qXL~|{glt_
zM4{pu?tsXG0q;AQ;8}TTjH6;apvgMIT<A><j@RnW>!_<$gAYTRi^_(dV$6XVB4aSg
zA!C2IBydJDsnJP&H_%_yY{`rcwnaDQuW9Ob@GD$ooDsoI@M@~%e*?bMV8N~?K+$%f
zzktzr8A9b?_2jhqNHN_QEM!0?D}Z5WHwbirm%z*3>Gk8)mZN9tIImr;m%XLhD^$5o
zbq_DEP@%{itFmhLbUs9WY^l)C8mo>%4xt=6!8YR#8pt0m6A@x}@1E#^Bl(BDf==)r
zKsWAF@4y&#%IwPApXZ>P04mb8`TbEl=O+&**>&ViI}-bx+D5R@`Ya1LJzSe6T$`W`
zvqL9D$rMR(>O6?Ha68*P%u_4lA9l9}Le<ir(#ju)^Z=#p8Zv<M%p9YYe>kaKr%_M*
z;iNgbfnuii^PWyt&+5^e-N~L$NG(+6kI_XY4x{<BcnWFipMIwP<K-Du6z|n*GLO-r
zeiqH;krl52D#BJ?etB0*M82%v?hOn1SzL%vzO&(=kz@-zUKD3XswT!!<}1(!rzpo1
znwFk#jjV8_xPl3?)Bs<C;ub)iD2E~@iVdmY3>59u0D=o<*#R25+s|Ha68y<-3=I-5
zrp38i6Woc36%cD=>kKKAL2@}7Qi%1Z>QUVs0e?*~brhR{p#jjQ1g?18He#6rv|*a=
zV%*fgCt-HQI*(w=3qtXj&MLSwkIV5K8^|N-Jyou&#@lPbF)+Kil@OsQ>+;9Y{jK;_
zPf_Jx6c_&HvAuEkS5%@B))cIjPUy-Nxw2Ux4`%J1ASk=L7g{Dw+*z>3X59($<~88+
zpuP31#AgAS#HxKvy9BMw^3-Hwh4(UCx44Bf2&gTABMJF80Nr#~{d@a%Z2En^&AlqV
zIrN(1F)H?1?ZT3T#OKxT&<n6a)h9kX2w|z#JgzgDM|sqA>Bc&{CB0)BhZN>BPI-3H
zZCV$WcSY1>DULfCX&$CH)m@n3*LbUVT~vGS;icKy&58>n(rhoXI39Vz_i5cwbR}l>
zC*^5je{1*B`K7f_jtv`#3XT()5g5;BFk}E(bgGY*XWj~{_*7K!DOd5-=~1+b)a>Gh
zP}SZNYLu2u!)K^9tEUcYM+aTDQ3JzLfTrah^m8kbzImwk2la7lBaN>8W7&B(CcC9;
zXLZA{K@Gpy_)2x(q+d~7bcO(I%HLkVLrgrjy}Dh7gK(A}8P?+(cIH~<cP;a4llfsl
z8};w~`}fsEo)i#a@V?>>z(pDH-xeSZTQty`S~e}<dkwTar_hXmoQq4(p84vIz#Hs~
z62SBC8>~UahiCu+)DuEDlzw);AmfGM*<zyDc6D{5_(_Mn%(*1!+D1-6QQ#cHOdSKj
z@f#{3u-e#ul|_fx?`~5sW<zxV6z{&L$~zvcdzhwPBD)hs{?x|i+z$UrpA@y>-1ORj
zHuh`!q)SP)JmILDvh>GR;FL$%w5W?3u&*iPkMQH?NGNO``PJ&M_U**wxZ2t7&gR`)
z_pKL+Q`tQ=re|Nh*xq^h`Lh>K9_+u||H<>6M=xPt|HRj=zI^#;=f^K!#&kwJvnksK
znvGd~fl+sM0GqGd5j~};z-6UPe+g?voChv>XAM6$jwEz)0<uhCIlUCqN4*b%4AzA(
z^wq@3K=8iSr{M{GIq)_~a$<2xU%q(u_1=cXXLHKj$~rGQ>c5TLWTgLkXrm$yoI?2d
zPyo<J7O7}dRiIhrLG-iE?nH4QY7|aggUq&0UtHfll#-6R6grUWvbGg^UY<iVQ#DVK
zgJ>h2VkFgFrZ4LJPr<4Hh>993K{UbDds3Y)2n%w<sXfQ+2By}l3U0ZE<hhfP<6Sya
zZ++Bfkj#GpbkVEW7B(=$L@jSnj0_MP6vIoGFluoiXpK396tF5dkzNDlyQ4MmTxulY
zAeoe$;3sA)a<JGAo}m}@Me}l4j~C~Y&Ood_%oW9<?F-%bVlp2@I^gkpPr%&iym-^S
z+ZSiVitJ=Zb9_AdPt>JtR1F>6r=2)$qc@3`ZEFWAliHSvrVgV`DYiiE)JG@~wtw%z
zrF-eb{}EHCsMGt;8_MbwnUhpq@!nfeW?JRD?@Y1!vU+Y60l51f^NX{2FI9UeXaNfh
zPav7RzqVHTJ&)G#dA4)Ne!byS2%#uZ>`RlV{tMd#JkRj@X%o(9zc*FI%Dt0b=-@Vc
z<Z1+LEhb)Y<`VQlc2iYxGw<|LaS}TO5(B$)-JOa5&_0iB4F1DUU;nhcDlf~?Hqw~p
z!yFcM6*Jt6vm?#z5B^Biq*P}Jy=lTts3@L$+PKE}nS<Q-;lKKvz29M4bwEfW-#W52
z&Wx&Moih`gi3Y+)O~UDL50RObU+^K)5`fq~Xs0DQqBd3FqbAqmK3LwSCI+B-ac*!{
z(8d;oLH5_ZQ2U%(3~o<H!dbB_8h%*qH=JlH9J+w7<Dh7%!mK*2CdJq}fWMscKR0j=
z?&&vN(|~xg{s-Yc1Xq4P>xTTt9hb4c>dn}P$8PL;L>acZf$2fv;kGRhk#8}leGr~}
z^9pgF9zTGZSD$#NP;zsr=G9Jek36?~E2|FIIKHZe_dmTYFGJ_?5f|)Agb>|8Jp5zl
z!Dysdcl%OQ481LkA?Wc1F!9Wg;Z0!kbyi1^jKn#P$r|Os&_ZvBVN5vom3@#DV}L9m
zF^1JV3?XmZApptt&eKP`Prrx-UgmY?#m5uX^+w`$Jr0!VqWc=!5r2?K=1rmyI%Gv&
zlTlv&&?)QF8-JI@jt6H+5ns_+O>|x04fJxLH`T1T5V9-rrZVpWq?#`{o2Hx_>_oxb
znOsKH)1l9y(b%Ej$^PZr?(!_@Jla57(L7z3;c2pg`R2wkm5f<SkNM_!zy8L;Mea^0
z;seI>LChG^ELN~PYIHQdeO^rSv-$bB*Xx^6$U4+fc{{A@*=Ud*<avI$-0(D5s5)i+
z0u;spngNL2uaPOtl(JZg>}yyd&f>oMBtyc`>v`djG24cVh>zb6bhU@>8raJ*vI6c=
z3zDz64C`$f>ZG%0mb~wyqTA&5*V(SN{i(~*0Y$by`K`jzy31<ze&1e;#6W`<s4>aC
z6$c_dhV}!o<_LgNa}W`*Lv5gYpiMNUlo+rJbYWl3D`UZEc5uGoD(`g%@a~vo(=ljL
z7%vp%?vt8N!%0<+IdUy5>JffDlGUN~3!>aMO?5i4+NhE%>|>CXYHl)uCGJRD|Bf%6
z^GQa)N9<v2mg*>v9#k_708Q3Ea!w8QtJtNKr{~%Nsd*_Tm(JW^{Gqqh-XPn&>$$ev
zpzWe4{3E&wW{9>@HG1+npo^g&;S*n#KPwuW*T@7zt}3yMoeEQwXCsW;;Srjc3B;~2
z?I}2BBgcsX1rv~C4D3qQC>VGMl>!@Kpbv@;7GoabXDt={T~fdgKoUY)X2j7xHFZz-
z6`Ndx0#Wm;Nsx`SwGZ0UvvRE7Mp`D!2S+a(4G<MxI`%lB0e?%Y_^s+nxzzWN%|!lf
z-%{RXM%_E956SQcEiSrvHacJ?3!_E<E{&s|b*TD|iK3+br;6U>dh!}H(8c&UMD2Yr
z8SNFX%bWd-zjEgxCOyD4LLOfO=g%X@p5y8TFmjY=+Nis_<M(t?v_j=hk`h6vpR5lX
z_q5}YXf?!BRsTeu8V#|;^X9r!Q8iCWQVNA#5E%m2L!^0Zg-FS#JjLps0wYA4sa}ld
z2r(Arh`|N4BgfiIfr>AtBzs(-Zw6#igy-C1#;UQvG}fAs+<>}xbI43O)%DvG398s_
zD&g9+(nW9!hY6dx`&w8!S(v-F9cphy&ZP0Pc{_rN$1Et`DT?-4AZ_&njAqq8s)q)j
z6gvba0xHdksn>O{C&e!64{C^=o>1JWk{iCwojiKC;poxCcW!l@7QJ%%B1XH*Xud&q
zi#NeiYok~h1;<d`$&Gg0IWEa;Wm1ARPjH!i{-N)_{)RLmwelNO@v}=1IEmn^6^(9b
zBETNBY7|Ryi6*pw+5wZxs2=yB^aF^N*wDLMWiMXW75ZG97xNrr0+(+J3@-;8lB>Na
zHLLV$QeQwVXY~b?rg9kW4kIsu#l#aBAs9lSc`MnFsSIo-pl!BCPz%-0h_!d~U*EjT
z|J&?yXy7wN-Lhj?In~=)y#Uh$JIGv{ObkqHJKZx3Mu*$vj@fQ^V6Wkk<MQ`SSXidr
zp5qf-0C&L9amluCHYXi{rM<V3_XJ%5heniM&&&;nWpvzJyqNP(snBQNdUY^GcL(HA
zc2(1?Dqoj+S25_1d$l^&6+TdC1P)woL=x_3fZ@5bF{Pw<mt^iEYo4n&b~mt@)`+xJ
zCbUn8bSYwUp_?)`B|WRkRe!s-7@l&&`5;Y|%_p>c)lEE-+yxN&o^#R3OBCH+j0Qzt
zOs=BDK7vh#%BuR7PDocz9C9Fsb-3;u)r~hwE@v98#0UwRtg9HHX;nh7!)Xthc?=Ip
zUOWeHVGskw!T<^av-qF%*;>CGkw|&jhe!#BQ0xM+sVRD;TscJ;tiT*^3#nCe?T(-x
zpsi>lWkWK9&=HYMjngx;ZlwAVSFF`0cXWNfkb}R($i?&k>gXxyB+n|u01l6;42`_*
zS$*Gw5jR4*5!lK+d$Ie)?$Za4C9|=r$iu(8v%PQaYt|Ua6)4G?##6fAjDBs9D57sn
z(Y%$;E(4m?_Ar7qJQPCBYs1%T!`ExW*Lb|eN4rndq^eH7eEi_y&SQx6u1?;a-+cR{
zZhq^2?>CosPRZDdwJwU09ar<Yn&8Fh_|mw1)7gJgy{RU~%NQ>^_}>pQb#o$|>Uo3X
zp*=p=&Q`5d-pyd2_h4lTaiL5O&Cn5fVHuPfCaXHp;tsnINMZP*<{EtmM5%+<Zq_ER
z=a0yYg2?VLg?>vx=|?(~OMKH_R_K(+d=BRaZX=nuBB|Y)v|ZRxAiRw(gF;%wagoF7
z7?c~IGKVm!2*3h!Frb;zk%0U0oO_F7k-4E?ZeEMo<5fw|R7&osH>#|H0AoO$zl}O#
zHL>qC<+fj<Sx20&8pV>IBF}~yV5!_J#L$J`&AbkreGz6F=rs+KXfpI)eNP>a%%k41
z{=BP&9MC^*3h1!P89t)->2>=AzjQHguOGPG;gO>)ivFhvi$y`Bv!mjupB){;e}?d%
z5&TC;>fwLiQ~OVy*n^Ip%Z|qO1^h4Qe8-Ajm#*klkRawx@Nxd`WT!!Z`g<KR;qM$~
z`Y#lw=s-Z7E08U(3%+zaQU?wJpnvW$Kxjw<bzXEfm|J?=*C*0_(E7CUbIw0PB<BRZ
zq^YpfOg?%{7aey2EI<xb@W;2`n%UcWSBeXJAN{F3>V)6AQBPqFMQ)AIoZDdqp*GJ=
zsbB<M4po__)TkZ}baLNwe)@9#2ojrFPY$4K5l(zO0Gx0XVA4c;VpqGDa5YS*W79zA
z(386!=w-h`$({!f$Kq8n3h1HUWSzuZdD|yy$Y`qM<><wfQYJ!0ydQLSI&nZ3m~qO#
zKOJ|)xianf1dyN0>J?lRZ+~>~@!|6L`1tLQrZe^QRcy*|IPBzp8P96Av+UsGx?)1Q
zn5$Peis<Hb9-9W$&wN%+$Ax-qMi@K?XbhzQj)=-1HAOE}8H|-n%n=pR;Tiv6-o4wS
znLOyQVn8QAO}Dd6PCo3Uj00h$_p)11vH|wLyGbz=q3jk+(1USP4^#t(o$TIc+1-uR
z4xz?Xa~)aT)|y6#9*1iM!Um@^Mdqu~yRf!MOSB%0^ZT@0k1R0ji}AOqS&5Tggz4xd
zZ&(W^1+N)=5*yR5E8Mlmimxb(iJFM>1uz)nk^ocgp$%or#hIKoJ+my2chp)uaeSsJ
zL(2Y4ZM+@y$kxfiUhG=Na4loFmN7(}Yh6tbKh85^Jf$K=_eraYPt>CTG2sB=?#NfB
zo0Klq<QXl12Z~IU!uKD6&T2kefRFEru5rre+^kMhcPp5gZZDd7eV*Zuc=iL%uWsVW
zVfF(1)?^(l(IGevaPz0?s`K-51VAzfves4|nxr0*WvbTkp?a>I!xFI=ey+y9qM~~8
zsG7|$*RD#eKxFRe7qANS2Zy>6PQNtJd(Jd&iFBAJn+(5XDs|E%<4>8+qp>;ogVTi(
zXJIc!t7?OQG{%COj{#t&z@Zsd^YJCX{^<OqzJ=3}EeNV%$TgtegYcFZDL1#Rb0*^)
z3iGNRLt#RtCur*AFbL#>*=ZBgj~s|}#WI)E!)(tC27c$OOTDU~l=^Qr#4S#`a7YJ5
z@_2O(YWxq?uG#~QHc*ZWwbknjbXi`jFt8olw8>2!xZJb}&9vpZTheP()FtsI7gLyF
z;}@`)61=8xCx-#wlk<x~puC9@F6H1wj+#4-7+?%Dp2MRMpQG6m*ilpc8$EVV#cz?i
zcvIvC<^_XOqOzCv7T!9<18LNd+{PalyIOUZM(K+%_2#_iZ9@?q#dHC%IQeJ2m`@iP
z*^Fw=!?eH%hr0A~T1_c{P+){^lJenVHUmMRU70`~1yq1gcecD1kXnFB3D!lnVvCsN
zhEH8N_`uvoztfsCW{1?ItF5RlA{aM~uPD6h2$p47;$?VVymC_2s$n$VYN#71i6vGP
zV^UExUzcYC!lBOpDO}g;`bH82h?|<Eyhen!S@t`1tqAj}RsD|(#FTk>DRJcS15Xql
zM-kqE3z$=8W=S4BAm4Xwne%u9EvLnA_1tZ-y=1H#u<~}SpzEYgsT{$GIMsYeZV$eU
zo!ww)i8omFwv+Xs%{*W)ZDPcyE}=>B3-uetKEsuIs_G~QW8^5@N0$gMu^|LI!}9ZL
z)_~#|cfwZmq^lvzQQR}*h<JSPg~zA>!okXGN#(&h7|8$+mD547nKGXHEjK}~uly+t
zJKzdhL1k4Ap%b?hZ5`AN<5$Jx>Lt^uMY*F6sg5A9mBh&yQAR`Vobp~2QUp2y%B2n^
zFv;q$!q1He*4;WiX3K0%0$_~=-?L7iC7X0#{&Fc_Hpq4-C*Tft=@Y@H^}HNpd-KI{
z(<eyRN)apot<obzo+TTXXdVy94whueU(!Z#Qj1JeHQo#@Z76E1zK4<NRPRpyW$sDb
z=g4+wPD)$=Tx$gWc_zFJ7p3RKkHOAy#t3Ghn)q^4wMVV<h+7R{fk3*Q#Hfilu1Qh?
zidPmAjmSA9I9oM>PobB+XxIsRX5FdSN`{FxlNA%XMT7e2rCh_CcU0@%GxgAg530jH
zjiwKS=@Z%LyR><w*Y7$olF2Sywf$vG>hA4<dr;YyXR@mH`H>_SM}0Wli}R9B5+xBE
zSctuWJ|rfkA||3i>-?rhsmPIT_Xxnq-8Nh=6NlOv7ke;U8$H7$K?OZkKs@h&2D%O*
zV-wu%VuIqFSv?*f2hh)k+BrS_Om|g&jmIwu^O4JOlt_D9g~9#zfM<8e8Bi`kr5x8I
zfYo135ZO*QNf%SKqd$a!n7t@28+0I`>kwXS7|+`H6*T&JZYX7*-lEZ|`Vd<}lDL??
zB&IKrIyPtJsN1t>J=I)I+8m7ux~`CQLr`YRH1Y$%<3r<2rTwbjn?B!B%^mc6<aDH*
z7g%m};Pw=0SN{Y&BfgTTFQ9?)U>I;_OHcQs86~W9%TJQ5QX{&r|EGtbFR5W!jk`{{
zJDKLNU7A17C-m0qQV%}MHsPjm$|6YUefahi@(%bd1ODMpotGi&JGPwlt@Ol-xO1|2
zH|EI5lZSU2z-rL%TesK*BhG+x2fHzw9KFrEy6Rswlh(_Az|((A%%0A7$L5Q{iNgb!
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%0Dbor!Q9ch{jB8A2q9}J?6URN79bCQB?p^5m
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

literal 0
HcmV?d00001

diff --git a/public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js b/public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js
new file mode 100644
index 000000000..d88cff28e
--- /dev/null
+++ b/public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js
@@ -0,0 +1,136259 @@
+/*
+Unobtrusive JavaScript
+https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts
+Released under the MIT license
+ */
+
+
+(function() {
+  var context = this;
+
+  (function() {
+    (function() {
+      this.Rails = {
+        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',
+        buttonClickSelector: {
+          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',
+          exclude: 'form button'
+        },
+        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',
+        formSubmitSelector: 'form',
+        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',
+        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',
+        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',
+        fileInputSelector: 'input[name][type=file]:not([disabled])',
+        linkDisableSelector: 'a[data-disable-with], a[data-disable]',
+        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'
+      };
+
+    }).call(this);
+  }).call(context);
+
+  var Rails = context.Rails;
+
+  (function() {
+    (function() {
+      var cspNonce;
+
+      cspNonce = Rails.cspNonce = function() {
+        var meta;
+        meta = document.querySelector('meta[name=csp-nonce]');
+        return meta && meta.content;
+      };
+
+    }).call(this);
+    (function() {
+      var expando, m;
+
+      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;
+
+      Rails.matches = function(element, selector) {
+        if (selector.exclude != null) {
+          return m.call(element, selector.selector) && !m.call(element, selector.exclude);
+        } else {
+          return m.call(element, selector);
+        }
+      };
+
+      expando = '_ujsData';
+
+      Rails.getData = function(element, key) {
+        var ref;
+        return (ref = element[expando]) != null ? ref[key] : void 0;
+      };
+
+      Rails.setData = function(element, key, value) {
+        if (element[expando] == null) {
+          element[expando] = {};
+        }
+        return element[expando][key] = value;
+      };
+
+      Rails.$ = function(selector) {
+        return Array.prototype.slice.call(document.querySelectorAll(selector));
+      };
+
+    }).call(this);
+    (function() {
+      var $, csrfParam, csrfToken;
+
+      $ = Rails.$;
+
+      csrfToken = Rails.csrfToken = function() {
+        var meta;
+        meta = document.querySelector('meta[name=csrf-token]');
+        return meta && meta.content;
+      };
+
+      csrfParam = Rails.csrfParam = function() {
+        var meta;
+        meta = document.querySelector('meta[name=csrf-param]');
+        return meta && meta.content;
+      };
+
+      Rails.CSRFProtection = function(xhr) {
+        var token;
+        token = csrfToken();
+        if (token != null) {
+          return xhr.setRequestHeader('X-CSRF-Token', token);
+        }
+      };
+
+      Rails.refreshCSRFTokens = function() {
+        var param, token;
+        token = csrfToken();
+        param = csrfParam();
+        if ((token != null) && (param != null)) {
+          return $('form input[name="' + param + '"]').forEach(function(input) {
+            return input.value = token;
+          });
+        }
+      };
+
+    }).call(this);
+    (function() {
+      var CustomEvent, fire, matches, preventDefault;
+
+      matches = Rails.matches;
+
+      CustomEvent = window.CustomEvent;
+
+      if (typeof CustomEvent !== 'function') {
+        CustomEvent = function(event, params) {
+          var evt;
+          evt = document.createEvent('CustomEvent');
+          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+          return evt;
+        };
+        CustomEvent.prototype = window.Event.prototype;
+        preventDefault = CustomEvent.prototype.preventDefault;
+        CustomEvent.prototype.preventDefault = function() {
+          var result;
+          result = preventDefault.call(this);
+          if (this.cancelable && !this.defaultPrevented) {
+            Object.defineProperty(this, 'defaultPrevented', {
+              get: function() {
+                return true;
+              }
+            });
+          }
+          return result;
+        };
+      }
+
+      fire = Rails.fire = function(obj, name, data) {
+        var event;
+        event = new CustomEvent(name, {
+          bubbles: true,
+          cancelable: true,
+          detail: data
+        });
+        obj.dispatchEvent(event);
+        return !event.defaultPrevented;
+      };
+
+      Rails.stopEverything = function(e) {
+        fire(e.target, 'ujs:everythingStopped');
+        e.preventDefault();
+        e.stopPropagation();
+        return e.stopImmediatePropagation();
+      };
+
+      Rails.delegate = function(element, selector, eventType, handler) {
+        return element.addEventListener(eventType, function(e) {
+          var target;
+          target = e.target;
+          while (!(!(target instanceof Element) || matches(target, selector))) {
+            target = target.parentNode;
+          }
+          if (target instanceof Element && handler.call(target, e) === false) {
+            e.preventDefault();
+            return e.stopPropagation();
+          }
+        });
+      };
+
+    }).call(this);
+    (function() {
+      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;
+
+      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;
+
+      AcceptHeaders = {
+        '*': '*/*',
+        text: 'text/plain',
+        html: 'text/html',
+        xml: 'application/xml, text/xml',
+        json: 'application/json, text/javascript',
+        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'
+      };
+
+      Rails.ajax = function(options) {
+        var xhr;
+        options = prepareOptions(options);
+        xhr = createXHR(options, function() {
+          var ref, response;
+          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));
+          if (Math.floor(xhr.status / 100) === 2) {
+            if (typeof options.success === "function") {
+              options.success(response, xhr.statusText, xhr);
+            }
+          } else {
+            if (typeof options.error === "function") {
+              options.error(response, xhr.statusText, xhr);
+            }
+          }
+          return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : void 0;
+        });
+        if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {
+          return false;
+        }
+        if (xhr.readyState === XMLHttpRequest.OPENED) {
+          return xhr.send(options.data);
+        }
+      };
+
+      prepareOptions = function(options) {
+        options.url = options.url || location.href;
+        options.type = options.type.toUpperCase();
+        if (options.type === 'GET' && options.data) {
+          if (options.url.indexOf('?') < 0) {
+            options.url += '?' + options.data;
+          } else {
+            options.url += '&' + options.data;
+          }
+        }
+        if (AcceptHeaders[options.dataType] == null) {
+          options.dataType = '*';
+        }
+        options.accept = AcceptHeaders[options.dataType];
+        if (options.dataType !== '*') {
+          options.accept += ', */*; q=0.01';
+        }
+        return options;
+      };
+
+      createXHR = function(options, done) {
+        var xhr;
+        xhr = new XMLHttpRequest();
+        xhr.open(options.type, options.url, true);
+        xhr.setRequestHeader('Accept', options.accept);
+        if (typeof options.data === 'string') {
+          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
+        }
+        if (!options.crossDomain) {
+          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+        }
+        CSRFProtection(xhr);
+        xhr.withCredentials = !!options.withCredentials;
+        xhr.onreadystatechange = function() {
+          if (xhr.readyState === XMLHttpRequest.DONE) {
+            return done(xhr);
+          }
+        };
+        return xhr;
+      };
+
+      processResponse = function(response, type) {
+        var parser, script;
+        if (typeof response === 'string' && typeof type === 'string') {
+          if (type.match(/\bjson\b/)) {
+            try {
+              response = JSON.parse(response);
+            } catch (error) {}
+          } else if (type.match(/\b(?:java|ecma)script\b/)) {
+            script = document.createElement('script');
+            script.setAttribute('nonce', cspNonce());
+            script.text = response;
+            document.head.appendChild(script).parentNode.removeChild(script);
+          } else if (type.match(/\b(xml|html|svg)\b/)) {
+            parser = new DOMParser();
+            type = type.replace(/;.+/, '');
+            try {
+              response = parser.parseFromString(response, type);
+            } catch (error) {}
+          }
+        }
+        return response;
+      };
+
+      Rails.href = function(element) {
+        return element.href;
+      };
+
+      Rails.isCrossDomain = function(url) {
+        var e, originAnchor, urlAnchor;
+        originAnchor = document.createElement('a');
+        originAnchor.href = location.href;
+        urlAnchor = document.createElement('a');
+        try {
+          urlAnchor.href = url;
+          return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));
+        } catch (error) {
+          e = error;
+          return true;
+        }
+      };
+
+    }).call(this);
+    (function() {
+      var matches, toArray;
+
+      matches = Rails.matches;
+
+      toArray = function(e) {
+        return Array.prototype.slice.call(e);
+      };
+
+      Rails.serializeElement = function(element, additionalParam) {
+        var inputs, params;
+        inputs = [element];
+        if (matches(element, 'form')) {
+          inputs = toArray(element.elements);
+        }
+        params = [];
+        inputs.forEach(function(input) {
+          if (!input.name || input.disabled) {
+            return;
+          }
+          if (matches(input, 'select')) {
+            return toArray(input.options).forEach(function(option) {
+              if (option.selected) {
+                return params.push({
+                  name: input.name,
+                  value: option.value
+                });
+              }
+            });
+          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {
+            return params.push({
+              name: input.name,
+              value: input.value
+            });
+          }
+        });
+        if (additionalParam) {
+          params.push(additionalParam);
+        }
+        return params.map(function(param) {
+          if (param.name != null) {
+            return (encodeURIComponent(param.name)) + "=" + (encodeURIComponent(param.value));
+          } else {
+            return param;
+          }
+        }).join('&');
+      };
+
+      Rails.formElements = function(form, selector) {
+        if (matches(form, 'form')) {
+          return toArray(form.elements).filter(function(el) {
+            return matches(el, selector);
+          });
+        } else {
+          return toArray(form.querySelectorAll(selector));
+        }
+      };
+
+    }).call(this);
+    (function() {
+      var allowAction, fire, stopEverything;
+
+      fire = Rails.fire, stopEverything = Rails.stopEverything;
+
+      Rails.handleConfirm = function(e) {
+        if (!allowAction(this)) {
+          return stopEverything(e);
+        }
+      };
+
+      allowAction = function(element) {
+        var answer, callback, message;
+        message = element.getAttribute('data-confirm');
+        if (!message) {
+          return true;
+        }
+        answer = false;
+        if (fire(element, 'confirm')) {
+          try {
+            answer = confirm(message);
+          } catch (error) {}
+          callback = fire(element, 'confirm:complete', [answer]);
+        }
+        return answer && callback;
+      };
+
+    }).call(this);
+    (function() {
+      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;
+
+      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;
+
+      Rails.handleDisabledElement = function(e) {
+        var element;
+        element = this;
+        if (element.disabled) {
+          return stopEverything(e);
+        }
+      };
+
+      Rails.enableElement = function(e) {
+        var element;
+        element = e instanceof Event ? e.target : e;
+        if (matches(element, Rails.linkDisableSelector)) {
+          return enableLinkElement(element);
+        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {
+          return enableFormElement(element);
+        } else if (matches(element, Rails.formSubmitSelector)) {
+          return enableFormElements(element);
+        }
+      };
+
+      Rails.disableElement = function(e) {
+        var element;
+        element = e instanceof Event ? e.target : e;
+        if (matches(element, Rails.linkDisableSelector)) {
+          return disableLinkElement(element);
+        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {
+          return disableFormElement(element);
+        } else if (matches(element, Rails.formSubmitSelector)) {
+          return disableFormElements(element);
+        }
+      };
+
+      disableLinkElement = function(element) {
+        var replacement;
+        replacement = element.getAttribute('data-disable-with');
+        if (replacement != null) {
+          setData(element, 'ujs:enable-with', element.innerHTML);
+          element.innerHTML = replacement;
+        }
+        element.addEventListener('click', stopEverything);
+        return setData(element, 'ujs:disabled', true);
+      };
+
+      enableLinkElement = function(element) {
+        var originalText;
+        originalText = getData(element, 'ujs:enable-with');
+        if (originalText != null) {
+          element.innerHTML = originalText;
+          setData(element, 'ujs:enable-with', null);
+        }
+        element.removeEventListener('click', stopEverything);
+        return setData(element, 'ujs:disabled', null);
+      };
+
+      disableFormElements = function(form) {
+        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);
+      };
+
+      disableFormElement = function(element) {
+        var replacement;
+        replacement = element.getAttribute('data-disable-with');
+        if (replacement != null) {
+          if (matches(element, 'button')) {
+            setData(element, 'ujs:enable-with', element.innerHTML);
+            element.innerHTML = replacement;
+          } else {
+            setData(element, 'ujs:enable-with', element.value);
+            element.value = replacement;
+          }
+        }
+        element.disabled = true;
+        return setData(element, 'ujs:disabled', true);
+      };
+
+      enableFormElements = function(form) {
+        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);
+      };
+
+      enableFormElement = function(element) {
+        var originalText;
+        originalText = getData(element, 'ujs:enable-with');
+        if (originalText != null) {
+          if (matches(element, 'button')) {
+            element.innerHTML = originalText;
+          } else {
+            element.value = originalText;
+          }
+          setData(element, 'ujs:enable-with', null);
+        }
+        element.disabled = false;
+        return setData(element, 'ujs:disabled', null);
+      };
+
+    }).call(this);
+    (function() {
+      var stopEverything;
+
+      stopEverything = Rails.stopEverything;
+
+      Rails.handleMethod = function(e) {
+        var csrfParam, csrfToken, form, formContent, href, link, method;
+        link = this;
+        method = link.getAttribute('data-method');
+        if (!method) {
+          return;
+        }
+        href = Rails.href(link);
+        csrfToken = Rails.csrfToken();
+        csrfParam = Rails.csrfParam();
+        form = document.createElement('form');
+        formContent = "<input name='_method' value='" + method + "' type='hidden' />";
+        if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {
+          formContent += "<input name='" + csrfParam + "' value='" + csrfToken + "' type='hidden' />";
+        }
+        formContent += '<input type="submit" />';
+        form.method = 'post';
+        form.action = href;
+        form.target = link.target;
+        form.innerHTML = formContent;
+        form.style.display = 'none';
+        document.body.appendChild(form);
+        form.querySelector('[type="submit"]').click();
+        return stopEverything(e);
+      };
+
+    }).call(this);
+    (function() {
+      var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,
+        slice = [].slice;
+
+      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;
+
+      isRemote = function(element) {
+        var value;
+        value = element.getAttribute('data-remote');
+        return (value != null) && value !== 'false';
+      };
+
+      Rails.handleRemote = function(e) {
+        var button, data, dataType, element, method, url, withCredentials;
+        element = this;
+        if (!isRemote(element)) {
+          return true;
+        }
+        if (!fire(element, 'ajax:before')) {
+          fire(element, 'ajax:stopped');
+          return false;
+        }
+        withCredentials = element.getAttribute('data-with-credentials');
+        dataType = element.getAttribute('data-type') || 'script';
+        if (matches(element, Rails.formSubmitSelector)) {
+          button = getData(element, 'ujs:submit-button');
+          method = getData(element, 'ujs:submit-button-formmethod') || element.method;
+          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;
+          if (method.toUpperCase() === 'GET') {
+            url = url.replace(/\?.*$/, '');
+          }
+          if (element.enctype === 'multipart/form-data') {
+            data = new FormData(element);
+            if (button != null) {
+              data.append(button.name, button.value);
+            }
+          } else {
+            data = serializeElement(element, button);
+          }
+          setData(element, 'ujs:submit-button', null);
+          setData(element, 'ujs:submit-button-formmethod', null);
+          setData(element, 'ujs:submit-button-formaction', null);
+        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {
+          method = element.getAttribute('data-method');
+          url = element.getAttribute('data-url');
+          data = serializeElement(element, element.getAttribute('data-params'));
+        } else {
+          method = element.getAttribute('data-method');
+          url = Rails.href(element);
+          data = element.getAttribute('data-params');
+        }
+        ajax({
+          type: method || 'GET',
+          url: url,
+          data: data,
+          dataType: dataType,
+          beforeSend: function(xhr, options) {
+            if (fire(element, 'ajax:beforeSend', [xhr, options])) {
+              return fire(element, 'ajax:send', [xhr]);
+            } else {
+              fire(element, 'ajax:stopped');
+              return false;
+            }
+          },
+          success: function() {
+            var args;
+            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+            return fire(element, 'ajax:success', args);
+          },
+          error: function() {
+            var args;
+            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+            return fire(element, 'ajax:error', args);
+          },
+          complete: function() {
+            var args;
+            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
+            return fire(element, 'ajax:complete', args);
+          },
+          crossDomain: isCrossDomain(url),
+          withCredentials: (withCredentials != null) && withCredentials !== 'false'
+        });
+        return stopEverything(e);
+      };
+
+      Rails.formSubmitButtonClick = function(e) {
+        var button, form;
+        button = this;
+        form = button.form;
+        if (!form) {
+          return;
+        }
+        if (button.name) {
+          setData(form, 'ujs:submit-button', {
+            name: button.name,
+            value: button.value
+          });
+        }
+        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);
+        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));
+        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));
+      };
+
+      Rails.handleMetaClick = function(e) {
+        var data, link, metaClick, method;
+        link = this;
+        method = (link.getAttribute('data-method') || 'GET').toUpperCase();
+        data = link.getAttribute('data-params');
+        metaClick = e.metaKey || e.ctrlKey;
+        if (metaClick && method === 'GET' && !data) {
+          return e.stopImmediatePropagation();
+        }
+      };
+
+    }).call(this);
+    (function() {
+      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMetaClick, handleMethod, handleRemote, refreshCSRFTokens;
+
+      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMetaClick = Rails.handleMetaClick, handleMethod = Rails.handleMethod;
+
+      if ((typeof jQuery !== "undefined" && jQuery !== null) && (jQuery.ajax != null) && !jQuery.rails) {
+        jQuery.rails = Rails;
+        jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {
+          if (!options.crossDomain) {
+            return CSRFProtection(xhr);
+          }
+        });
+      }
+
+      Rails.start = function() {
+        if (window._rails_loaded) {
+          throw new Error('rails-ujs has already been loaded!');
+        }
+        window.addEventListener('pageshow', function() {
+          $(Rails.formEnableSelector).forEach(function(el) {
+            if (getData(el, 'ujs:disabled')) {
+              return enableElement(el);
+            }
+          });
+          return $(Rails.linkDisableSelector).forEach(function(el) {
+            if (getData(el, 'ujs:disabled')) {
+              return enableElement(el);
+            }
+          });
+        });
+        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);
+        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);
+        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);
+        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);
+        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);
+        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);
+        delegate(document, Rails.linkClickSelector, 'click', handleMetaClick);
+        delegate(document, Rails.linkClickSelector, 'click', disableElement);
+        delegate(document, Rails.linkClickSelector, 'click', handleRemote);
+        delegate(document, Rails.linkClickSelector, 'click', handleMethod);
+        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);
+        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);
+        delegate(document, Rails.buttonClickSelector, 'click', disableElement);
+        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);
+        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);
+        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);
+        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);
+        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);
+        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);
+        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);
+        delegate(document, Rails.formSubmitSelector, 'submit', function(e) {
+          return setTimeout((function() {
+            return disableElement(e);
+          }), 13);
+        });
+        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);
+        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);
+        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);
+        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);
+        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);
+        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);
+        return window._rails_loaded = true;
+      };
+
+      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {
+        Rails.start();
+      }
+
+    }).call(this);
+  }).call(this);
+
+  if (typeof module === "object" && module.exports) {
+    module.exports = Rails;
+  } else if (typeof define === "function" && define.amd) {
+    define(Rails);
+  }
+}).call(this);
+!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ActiveStorage=e():t.ActiveStorage=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}([function(t,e,r){"use strict";function n(t){var e=a(document.head,'meta[name="'+t+'"]');if(e)return e.getAttribute("content")}function i(t,e){return"string"==typeof t&&(e=t,t=document),o(t.querySelectorAll(e))}function a(t,e){return"string"==typeof t&&(e=t,t=document),t.querySelector(e)}function u(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=t.disabled,i=r.bubbles,a=r.cancelable,u=r.detail,o=document.createEvent("Event");o.initEvent(e,i||!0,a||!0),o.detail=u||{};try{t.disabled=!1,t.dispatchEvent(o)}finally{t.disabled=n}return o}function o(t){return Array.isArray(t)?t:Array.from?Array.from(t):[].slice.call(t)}e.d=n,e.c=i,e.b=a,e.a=u,e.e=o},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(t&&"function"==typeof t[e]){for(var r=arguments.length,n=Array(r>2?r-2:0),i=2;i<r;i++)n[i-2]=arguments[i];return t[e].apply(t,n)}}r.d(e,"a",function(){return c});var a=r(6),u=r(8),o=r(9),s=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),f=0,c=function(){function t(e,r,i){n(this,t),this.id=++f,this.file=e,this.url=r,this.delegate=i}return s(t,[{key:"create",value:function(t){var e=this;a.a.create(this.file,function(r,n){if(r)return void t(r);var a=new u.a(e.file,n,e.url);i(e.delegate,"directUploadWillCreateBlobWithXHR",a.xhr),a.create(function(r){if(r)t(r);else{var n=new o.a(a);i(e.delegate,"directUploadWillStoreFileWithXHR",n.xhr),n.create(function(e){e?t(e):t(null,a.toJSON())})}})})}}]),t}()},function(t,e,r){"use strict";function n(){window.ActiveStorage&&Object(i.a)()}Object.defineProperty(e,"__esModule",{value:!0});var i=r(3),a=r(1);r.d(e,"start",function(){return i.a}),r.d(e,"DirectUpload",function(){return a.a}),setTimeout(n,1)},function(t,e,r){"use strict";function n(){d||(d=!0,document.addEventListener("submit",i),document.addEventListener("ajax:before",a))}function i(t){u(t)}function a(t){"FORM"==t.target.tagName&&u(t)}function u(t){var e=t.target;if(e.hasAttribute(l))return void t.preventDefault();var r=new c.a(e),n=r.inputs;n.length&&(t.preventDefault(),e.setAttribute(l,""),n.forEach(s),r.start(function(t){e.removeAttribute(l),t?n.forEach(f):o(e)}))}function o(t){var e=Object(h.b)(t,"input[type=submit]");if(e){var r=e,n=r.disabled;e.disabled=!1,e.focus(),e.click(),e.disabled=n}else e=document.createElement("input"),e.type="submit",e.style.display="none",t.appendChild(e),e.click(),t.removeChild(e)}function s(t){t.disabled=!0}function f(t){t.disabled=!1}e.a=n;var c=r(4),h=r(0),l="data-direct-uploads-processing",d=!1},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}r.d(e,"a",function(){return s});var i=r(5),a=r(0),u=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o="input[type=file][data-direct-upload-url]:not([disabled])",s=function(){function t(e){n(this,t),this.form=e,this.inputs=Object(a.c)(e,o).filter(function(t){return t.files.length})}return u(t,[{key:"start",value:function(t){var e=this,r=this.createDirectUploadControllers();this.dispatch("start"),function n(){var i=r.shift();i?i.start(function(r){r?(t(r),e.dispatch("end")):n()}):(t(),e.dispatch("end"))}()}},{key:"createDirectUploadControllers",value:function(){var t=[];return this.inputs.forEach(function(e){Object(a.e)(e.files).forEach(function(r){var n=new i.a(e,r);t.push(n)})}),t}},{key:"dispatch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object(a.a)(this.form,"direct-uploads:"+t,{detail:e})}}]),t}()},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}r.d(e,"a",function(){return o});var i=r(1),a=r(0),u=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=function(){function t(e,r){n(this,t),this.input=e,this.file=r,this.directUpload=new i.a(this.file,this.url,this),this.dispatch("initialize")}return u(t,[{key:"start",value:function(t){var e=this,r=document.createElement("input");r.type="hidden",r.name=this.input.name,this.input.insertAdjacentElement("beforebegin",r),this.dispatch("start"),this.directUpload.create(function(n,i){n?(r.parentNode.removeChild(r),e.dispatchError(n)):r.value=i.signed_id,e.dispatch("end"),t(n)})}},{key:"uploadRequestDidProgress",value:function(t){var e=t.loaded/t.total*100;e&&this.dispatch("progress",{progress:e})}},{key:"dispatch",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.file=this.file,e.id=this.directUpload.id,Object(a.a)(this.input,"direct-upload:"+t,{detail:e})}},{key:"dispatchError",value:function(t){this.dispatch("error",{error:t}).defaultPrevented||alert(t)}},{key:"directUploadWillCreateBlobWithXHR",value:function(t){this.dispatch("before-blob-request",{xhr:t})}},{key:"directUploadWillStoreFileWithXHR",value:function(t){var e=this;this.dispatch("before-storage-request",{xhr:t}),t.upload.addEventListener("progress",function(t){return e.uploadRequestDidProgress(t)})}},{key:"url",get:function(){return this.input.getAttribute("data-direct-upload-url")}}]),t}()},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}r.d(e,"a",function(){return s});var i=r(7),a=r.n(i),u=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),o=File.prototype.slice||File.prototype.mozSlice||File.prototype.webkitSlice,s=function(){function t(e){n(this,t),this.file=e,this.chunkSize=2097152,this.chunkCount=Math.ceil(this.file.size/this.chunkSize),this.chunkIndex=0}return u(t,null,[{key:"create",value:function(e,r){new t(e).create(r)}}]),u(t,[{key:"create",value:function(t){var e=this;this.callback=t,this.md5Buffer=new a.a.ArrayBuffer,this.fileReader=new FileReader,this.fileReader.addEventListener("load",function(t){return e.fileReaderDidLoad(t)}),this.fileReader.addEventListener("error",function(t){return e.fileReaderDidError(t)}),this.readNextChunk()}},{key:"fileReaderDidLoad",value:function(t){if(this.md5Buffer.append(t.target.result),!this.readNextChunk()){var e=this.md5Buffer.end(!0),r=btoa(e);this.callback(null,r)}}},{key:"fileReaderDidError",value:function(t){this.callback("Error reading "+this.file.name)}},{key:"readNextChunk",value:function(){if(this.chunkIndex<this.chunkCount||0==this.chunkIndex&&0==this.chunkCount){var t=this.chunkIndex*this.chunkSize,e=Math.min(t+this.chunkSize,this.file.size),r=o.call(this.file,t,e);return this.fileReader.readAsArrayBuffer(r),this.chunkIndex++,!0}return!1}}]),t}()},function(t,e,r){!function(e){t.exports=e()}(function(t){"use strict";function e(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];r+=(n&i|~n&a)+e[0]-680876936|0,r=(r<<7|r>>>25)+n|0,a+=(r&n|~r&i)+e[1]-389564586|0,a=(a<<12|a>>>20)+r|0,i+=(a&r|~a&n)+e[2]+606105819|0,i=(i<<17|i>>>15)+a|0,n+=(i&a|~i&r)+e[3]-1044525330|0,n=(n<<22|n>>>10)+i|0,r+=(n&i|~n&a)+e[4]-176418897|0,r=(r<<7|r>>>25)+n|0,a+=(r&n|~r&i)+e[5]+1200080426|0,a=(a<<12|a>>>20)+r|0,i+=(a&r|~a&n)+e[6]-1473231341|0,i=(i<<17|i>>>15)+a|0,n+=(i&a|~i&r)+e[7]-45705983|0,n=(n<<22|n>>>10)+i|0,r+=(n&i|~n&a)+e[8]+1770035416|0,r=(r<<7|r>>>25)+n|0,a+=(r&n|~r&i)+e[9]-1958414417|0,a=(a<<12|a>>>20)+r|0,i+=(a&r|~a&n)+e[10]-42063|0,i=(i<<17|i>>>15)+a|0,n+=(i&a|~i&r)+e[11]-1990404162|0,n=(n<<22|n>>>10)+i|0,r+=(n&i|~n&a)+e[12]+1804603682|0,r=(r<<7|r>>>25)+n|0,a+=(r&n|~r&i)+e[13]-40341101|0,a=(a<<12|a>>>20)+r|0,i+=(a&r|~a&n)+e[14]-1502002290|0,i=(i<<17|i>>>15)+a|0,n+=(i&a|~i&r)+e[15]+1236535329|0,n=(n<<22|n>>>10)+i|0,r+=(n&a|i&~a)+e[1]-165796510|0,r=(r<<5|r>>>27)+n|0,a+=(r&i|n&~i)+e[6]-1069501632|0,a=(a<<9|a>>>23)+r|0,i+=(a&n|r&~n)+e[11]+643717713|0,i=(i<<14|i>>>18)+a|0,n+=(i&r|a&~r)+e[0]-373897302|0,n=(n<<20|n>>>12)+i|0,r+=(n&a|i&~a)+e[5]-701558691|0,r=(r<<5|r>>>27)+n|0,a+=(r&i|n&~i)+e[10]+38016083|0,a=(a<<9|a>>>23)+r|0,i+=(a&n|r&~n)+e[15]-660478335|0,i=(i<<14|i>>>18)+a|0,n+=(i&r|a&~r)+e[4]-405537848|0,n=(n<<20|n>>>12)+i|0,r+=(n&a|i&~a)+e[9]+568446438|0,r=(r<<5|r>>>27)+n|0,a+=(r&i|n&~i)+e[14]-1019803690|0,a=(a<<9|a>>>23)+r|0,i+=(a&n|r&~n)+e[3]-187363961|0,i=(i<<14|i>>>18)+a|0,n+=(i&r|a&~r)+e[8]+1163531501|0,n=(n<<20|n>>>12)+i|0,r+=(n&a|i&~a)+e[13]-1444681467|0,r=(r<<5|r>>>27)+n|0,a+=(r&i|n&~i)+e[2]-51403784|0,a=(a<<9|a>>>23)+r|0,i+=(a&n|r&~n)+e[7]+1735328473|0,i=(i<<14|i>>>18)+a|0,n+=(i&r|a&~r)+e[12]-1926607734|0,n=(n<<20|n>>>12)+i|0,r+=(n^i^a)+e[5]-378558|0,r=(r<<4|r>>>28)+n|0,a+=(r^n^i)+e[8]-2022574463|0,a=(a<<11|a>>>21)+r|0,i+=(a^r^n)+e[11]+1839030562|0,i=(i<<16|i>>>16)+a|0,n+=(i^a^r)+e[14]-35309556|0,n=(n<<23|n>>>9)+i|0,r+=(n^i^a)+e[1]-1530992060|0,r=(r<<4|r>>>28)+n|0,a+=(r^n^i)+e[4]+1272893353|0,a=(a<<11|a>>>21)+r|0,i+=(a^r^n)+e[7]-155497632|0,i=(i<<16|i>>>16)+a|0,n+=(i^a^r)+e[10]-1094730640|0,n=(n<<23|n>>>9)+i|0,r+=(n^i^a)+e[13]+681279174|0,r=(r<<4|r>>>28)+n|0,a+=(r^n^i)+e[0]-358537222|0,a=(a<<11|a>>>21)+r|0,i+=(a^r^n)+e[3]-722521979|0,i=(i<<16|i>>>16)+a|0,n+=(i^a^r)+e[6]+76029189|0,n=(n<<23|n>>>9)+i|0,r+=(n^i^a)+e[9]-640364487|0,r=(r<<4|r>>>28)+n|0,a+=(r^n^i)+e[12]-421815835|0,a=(a<<11|a>>>21)+r|0,i+=(a^r^n)+e[15]+530742520|0,i=(i<<16|i>>>16)+a|0,n+=(i^a^r)+e[2]-995338651|0,n=(n<<23|n>>>9)+i|0,r+=(i^(n|~a))+e[0]-198630844|0,r=(r<<6|r>>>26)+n|0,a+=(n^(r|~i))+e[7]+1126891415|0,a=(a<<10|a>>>22)+r|0,i+=(r^(a|~n))+e[14]-1416354905|0,i=(i<<15|i>>>17)+a|0,n+=(a^(i|~r))+e[5]-57434055|0,n=(n<<21|n>>>11)+i|0,r+=(i^(n|~a))+e[12]+1700485571|0,r=(r<<6|r>>>26)+n|0,a+=(n^(r|~i))+e[3]-1894986606|0,a=(a<<10|a>>>22)+r|0,i+=(r^(a|~n))+e[10]-1051523|0,i=(i<<15|i>>>17)+a|0,n+=(a^(i|~r))+e[1]-2054922799|0,n=(n<<21|n>>>11)+i|0,r+=(i^(n|~a))+e[8]+1873313359|0,r=(r<<6|r>>>26)+n|0,a+=(n^(r|~i))+e[15]-30611744|0,a=(a<<10|a>>>22)+r|0,i+=(r^(a|~n))+e[6]-1560198380|0,i=(i<<15|i>>>17)+a|0,n+=(a^(i|~r))+e[13]+1309151649|0,n=(n<<21|n>>>11)+i|0,r+=(i^(n|~a))+e[4]-145523070|0,r=(r<<6|r>>>26)+n|0,a+=(n^(r|~i))+e[11]-1120210379|0,a=(a<<10|a>>>22)+r|0,i+=(r^(a|~n))+e[2]+718787259|0,i=(i<<15|i>>>17)+a|0,n+=(a^(i|~r))+e[9]-343485551|0,n=(n<<21|n>>>11)+i|0,t[0]=r+t[0]|0,t[1]=n+t[1]|0,t[2]=i+t[2]|0,t[3]=a+t[3]|0}function r(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t.charCodeAt(e)+(t.charCodeAt(e+1)<<8)+(t.charCodeAt(e+2)<<16)+(t.charCodeAt(e+3)<<24);return r}function n(t){var e,r=[];for(e=0;e<64;e+=4)r[e>>2]=t[e]+(t[e+1]<<8)+(t[e+2]<<16)+(t[e+3]<<24);return r}function i(t){var n,i,a,u,o,s,f=t.length,c=[1732584193,-271733879,-1732584194,271733878];for(n=64;n<=f;n+=64)e(c,r(t.substring(n-64,n)));for(t=t.substring(n-64),i=t.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],n=0;n<i;n+=1)a[n>>2]|=t.charCodeAt(n)<<(n%4<<3);if(a[n>>2]|=128<<(n%4<<3),n>55)for(e(c,a),n=0;n<16;n+=1)a[n]=0;return u=8*f,u=u.toString(16).match(/(.*?)(.{0,8})$/),o=parseInt(u[2],16),s=parseInt(u[1],16)||0,a[14]=o,a[15]=s,e(c,a),c}function a(t){var r,i,a,u,o,s,f=t.length,c=[1732584193,-271733879,-1732584194,271733878];for(r=64;r<=f;r+=64)e(c,n(t.subarray(r-64,r)));for(t=r-64<f?t.subarray(r-64):new Uint8Array(0),i=t.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<i;r+=1)a[r>>2]|=t[r]<<(r%4<<3);if(a[r>>2]|=128<<(r%4<<3),r>55)for(e(c,a),r=0;r<16;r+=1)a[r]=0;return u=8*f,u=u.toString(16).match(/(.*?)(.{0,8})$/),o=parseInt(u[2],16),s=parseInt(u[1],16)||0,a[14]=o,a[15]=s,e(c,a),c}function u(t){var e,r="";for(e=0;e<4;e+=1)r+=p[t>>8*e+4&15]+p[t>>8*e&15];return r}function o(t){var e;for(e=0;e<t.length;e+=1)t[e]=u(t[e]);return t.join("")}function s(t){return/[\u0080-\uFFFF]/.test(t)&&(t=unescape(encodeURIComponent(t))),t}function f(t,e){var r,n=t.length,i=new ArrayBuffer(n),a=new Uint8Array(i);for(r=0;r<n;r+=1)a[r]=t.charCodeAt(r);return e?a:i}function c(t){return String.fromCharCode.apply(null,new Uint8Array(t))}function h(t,e,r){var n=new Uint8Array(t.byteLength+e.byteLength);return n.set(new Uint8Array(t)),n.set(new Uint8Array(e),t.byteLength),r?n:n.buffer}function l(t){var e,r=[],n=t.length;for(e=0;e<n-1;e+=2)r.push(parseInt(t.substr(e,2),16));return String.fromCharCode.apply(String,r)}function d(){this.reset()}var p=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return"5d41402abc4b2a76b9719d911017c592"!==o(i("hello"))&&function(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r},"undefined"==typeof ArrayBuffer||ArrayBuffer.prototype.slice||function(){function e(t,e){return t=0|t||0,t<0?Math.max(t+e,0):Math.min(t,e)}ArrayBuffer.prototype.slice=function(r,n){var i,a,u,o,s=this.byteLength,f=e(r,s),c=s;return n!==t&&(c=e(n,s)),f>c?new ArrayBuffer(0):(i=c-f,a=new ArrayBuffer(i),u=new Uint8Array(a),o=new Uint8Array(this,f,i),u.set(o),a)}}(),d.prototype.append=function(t){return this.appendBinary(s(t)),this},d.prototype.appendBinary=function(t){this._buff+=t,this._length+=t.length;var n,i=this._buff.length;for(n=64;n<=i;n+=64)e(this._hash,r(this._buff.substring(n-64,n)));return this._buff=this._buff.substring(n-64),this},d.prototype.end=function(t){var e,r,n=this._buff,i=n.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e<i;e+=1)a[e>>2]|=n.charCodeAt(e)<<(e%4<<3);return this._finish(a,i),r=o(this._hash),t&&(r=l(r)),this.reset(),r},d.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},d.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash}},d.prototype.setState=function(t){return this._buff=t.buff,this._length=t.length,this._hash=t.hash,this},d.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},d.prototype._finish=function(t,r){var n,i,a,u=r;if(t[u>>2]|=128<<(u%4<<3),u>55)for(e(this._hash,t),u=0;u<16;u+=1)t[u]=0;n=8*this._length,n=n.toString(16).match(/(.*?)(.{0,8})$/),i=parseInt(n[2],16),a=parseInt(n[1],16)||0,t[14]=i,t[15]=a,e(this._hash,t)},d.hash=function(t,e){return d.hashBinary(s(t),e)},d.hashBinary=function(t,e){var r=i(t),n=o(r);return e?l(n):n},d.ArrayBuffer=function(){this.reset()},d.ArrayBuffer.prototype.append=function(t){var r,i=h(this._buff.buffer,t,!0),a=i.length;for(this._length+=t.byteLength,r=64;r<=a;r+=64)e(this._hash,n(i.subarray(r-64,r)));return this._buff=r-64<a?new Uint8Array(i.buffer.slice(r-64)):new Uint8Array(0),this},d.ArrayBuffer.prototype.end=function(t){var e,r,n=this._buff,i=n.length,a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(e=0;e<i;e+=1)a[e>>2]|=n[e]<<(e%4<<3);return this._finish(a,i),r=o(this._hash),t&&(r=l(r)),this.reset(),r},d.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},d.ArrayBuffer.prototype.getState=function(){var t=d.prototype.getState.call(this);return t.buff=c(t.buff),t},d.ArrayBuffer.prototype.setState=function(t){return t.buff=f(t.buff,!0),d.prototype.setState.call(this,t)},d.ArrayBuffer.prototype.destroy=d.prototype.destroy,d.ArrayBuffer.prototype._finish=d.prototype._finish,d.ArrayBuffer.hash=function(t,e){var r=a(new Uint8Array(t)),n=o(r);return e?l(n):n},d})},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}r.d(e,"a",function(){return u});var i=r(0),a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=function(){function t(e,r,a){var u=this;n(this,t),this.file=e,this.attributes={filename:e.name,content_type:e.type,byte_size:e.size,checksum:r},this.xhr=new XMLHttpRequest,this.xhr.open("POST",a,!0),this.xhr.responseType="json",this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.setRequestHeader("Accept","application/json"),this.xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xhr.setRequestHeader("X-CSRF-Token",Object(i.d)("csrf-token")),this.xhr.addEventListener("load",function(t){return u.requestDidLoad(t)}),this.xhr.addEventListener("error",function(t){return u.requestDidError(t)})}return a(t,[{key:"create",value:function(t){this.callback=t,this.xhr.send(JSON.stringify({blob:this.attributes}))}},{key:"requestDidLoad",value:function(t){if(this.status>=200&&this.status<300){var e=this.response,r=e.direct_upload;delete e.direct_upload,this.attributes=e,this.directUploadData=r,this.callback(null,this.toJSON())}else this.requestDidError(t)}},{key:"requestDidError",value:function(t){this.callback('Error creating Blob for "'+this.file.name+'". Status: '+this.status)}},{key:"toJSON",value:function(){var t={};for(var e in this.attributes)t[e]=this.attributes[e];return t}},{key:"status",get:function(){return this.xhr.status}},{key:"response",get:function(){var t=this.xhr,e=t.responseType,r=t.response;return"json"==e?r:JSON.parse(r)}}]),t}()},function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}r.d(e,"a",function(){return a});var i=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),a=function(){function t(e){var r=this;n(this,t),this.blob=e,this.file=e.file;var i=e.directUploadData,a=i.url,u=i.headers;this.xhr=new XMLHttpRequest,this.xhr.open("PUT",a,!0),this.xhr.responseType="text";for(var o in u)this.xhr.setRequestHeader(o,u[o]);this.xhr.addEventListener("load",function(t){return r.requestDidLoad(t)}),this.xhr.addEventListener("error",function(t){return r.requestDidError(t)})}return i(t,[{key:"create",value:function(t){this.callback=t,this.xhr.send(this.file.slice())}},{key:"requestDidLoad",value:function(t){var e=this.xhr,r=e.status,n=e.response;r>=200&&r<300?this.callback(null,n):this.requestDidError(t)}},{key:"requestDidError",value:function(t){this.callback('Error storing "'+this.file.name+'". Status: '+this.xhr.status)}}]),t}()}])});
+/*
+Turbolinks 5.2.0
+Copyright © 2018 Basecamp, LLC
+ */
+
+(function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent("Events"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent("Events"),t.initEvent("test",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r="",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?"-":15===t?"4":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=""),r=document.createElement("a"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))?e[1]:void 0)?t:"/"},t.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\.[^.]*$/))?e[0]:void 0)?t:""},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,"/")?t:t+"/"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,"function"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader("Turbolinks-Location")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE)}}(this))},r.prototype.requestTimedOut=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE)}}(this))},r.prototype.requestCanceled=function(){return this.endRequest()},r.prototype.notifyApplicationBeforeRequestStart=function(){return e.dispatch("turbolinks:request-start",{data:{url:this.url,xhr:this.xhr}})},r.prototype.notifyApplicationAfterRequestEnd=function(){return e.dispatch("turbolinks:request-end",{data:{url:this.url,xhr:this.xhr}})},r.prototype.createXHR=function(){return this.xhr=new XMLHttpRequest,this.xhr.open("GET",this.url,!0),this.xhr.timeout=1e3*this.constructor.timeout,this.xhr.setRequestHeader("Accept","text/html, application/xhtml+xml"),this.xhr.setRequestHeader("Turbolinks-Referrer",this.referrer),this.xhr.onprogress=this.requestProgressed,this.xhr.onload=this.requestLoaded,this.xhr.onerror=this.requestFailed,this.xhr.ontimeout=this.requestTimedOut,this.xhr.onabort=this.requestCanceled},r.prototype.endRequest=function(t){return this.xhr?(this.notifyApplicationAfterRequestEnd(),null!=t&&t.call(this),this.destroy()):void 0},r.prototype.setProgress=function(t){var e;return this.progress=t,"function"==typeof(e=this.delegate).requestProgressed?e.requestProgressed(this.progress):void 0},r.prototype.destroy=function(){var t;return this.setProgress(1),"function"==typeof(t=this.delegate).requestFinished&&t.requestFinished(),this.delegate=null,this.xhr=null},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ProgressBar=function(){function e(){this.trickle=t(this.trickle,this),this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement()}var r;return r=300,e.defaultCSS=".turbolinks-progress-bar {\n  position: fixed;\n  display: block;\n  top: 0;\n  left: 0;\n  height: 3px;\n  background: #0076ff;\n  z-index: 9999;\n  transition: width "+r+"ms ease-out, opacity "+r/2+"ms "+r/2+"ms ease-in;\n  transform: translate3d(0, 0, 0);\n}",e.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},e.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement(function(t){return function(){return t.uninstallProgressElement(),t.stopTrickling(),t.visible=!1,t.hiding=!1}}(this))):void 0},e.prototype.setValue=function(t){return this.value=t,this.refresh()},e.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},e.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},e.prototype.fadeProgressElement=function(t){return this.progressElement.style.opacity=0,setTimeout(t,1.5*r)},e.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},e.prototype.startTrickling=function(){return null!=this.trickleInterval?this.trickleInterval:this.trickleInterval=setInterval(this.trickle,r)},e.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},e.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},e.prototype.refresh=function(){return requestAnimationFrame(function(t){return function(){return t.progressElement.style.width=10+90*t.value+"%"}}(this))},e.prototype.createStylesheetElement=function(){var t;return t=document.createElement("style"),t.type="text/css",t.textContent=this.constructor.defaultCSS,t},e.prototype.createProgressElement=function(){var t;return t=document.createElement("div"),t.className="turbolinks-progress-bar",t},e}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.BrowserAdapter=function(){function r(r){this.controller=r,this.showProgressBar=t(this.showProgressBar,this),this.progressBar=new e.ProgressBar}var n,o,i;return i=e.HttpRequest,n=i.NETWORK_FAILURE,o=i.TIMEOUT_FAILURE,r.prototype.visitProposedToLocationWithAction=function(t,e){return this.controller.startVisitToLocationWithAction(t,e)},r.prototype.visitStarted=function(t){return t.issueRequest(),t.changeHistory(),t.loadCachedSnapshot()},r.prototype.visitRequestStarted=function(t){return this.progressBar.setValue(0),t.hasCachedSnapshot()||"restore"!==t.action?this.showProgressBarAfterDelay():this.showProgressBar()},r.prototype.visitRequestProgressed=function(t){return this.progressBar.setValue(t.progress)},r.prototype.visitRequestCompleted=function(t){return t.loadResponse()},r.prototype.visitRequestFailedWithStatusCode=function(t,e){switch(e){case n:case o:return this.reload();default:return t.loadResponse()}},r.prototype.visitRequestFinished=function(t){return this.hideProgressBar()},r.prototype.visitCompleted=function(t){return t.followRedirect()},r.prototype.pageInvalidated=function(){return this.reload()},r.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},r.prototype.showProgressBar=function(){return this.progressBar.show()},r.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},r.prototype.reload=function(){return window.location.reload()},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.History=function(){function r(e){this.delegate=e,this.onPageLoad=t(this.onPageLoad,this),this.onPopState=t(this.onPopState,this)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1):void 0},r.prototype.push=function(t,r){return t=e.Location.wrap(t),this.update("push",t,r)},r.prototype.replace=function(t,r){return t=e.Location.wrap(t),this.update("replace",t,r)},r.prototype.onPopState=function(t){var r,n,o,i;return this.shouldHandlePopState()&&(i=null!=(n=t.state)?n.turbolinks:void 0)?(r=e.Location.wrap(window.location),o=i.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(r,o)):void 0},r.prototype.onPageLoad=function(t){return e.defer(function(t){return function(){return t.pageLoaded=!0}}(this))},r.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},r.prototype.pageIsLoaded=function(){return this.pageLoaded||"complete"===document.readyState},r.prototype.update=function(t,e,r){var n;return n={turbolinks:{restorationIdentifier:r}},history[t+"State"](n,null,e)},r}()}.call(this),function(){e.HeadDetails=function(){function t(t){var e,r,n,s,a,u;for(this.elements={},n=0,a=t.length;a>n;n++)u=t[n],u.nodeType===Node.ELEMENT_NODE&&(s=u.outerHTML,r=null!=(e=this.elements)[s]?e[s]:e[s]={type:i(u),tracked:o(u),elements:[]},r.elements.push(u))}var e,r,n,o,i;return t.fromHeadElement=function(t){var e;return new this(null!=(e=null!=t?t.childNodes:void 0)?e:[])},t.prototype.hasElementWithKey=function(t){return t in this.elements},t.prototype.getTrackedElementSignature=function(){var t,e;return function(){var r,n;r=this.elements,n=[];for(t in r)e=r[t].tracked,e&&n.push(t);return n}.call(this).join("")},t.prototype.getScriptElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("script",t)},t.prototype.getStylesheetElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("stylesheet",t)},t.prototype.getElementsMatchingTypeNotInDetails=function(t,e){var r,n,o,i,s,a;o=this.elements,s=[];for(n in o)i=o[n],a=i.type,r=i.elements,a!==t||e.hasElementWithKey(n)||s.push(r[0]);return s},t.prototype.getProvisionalElements=function(){var t,e,r,n,o,i,s;r=[],n=this.elements;for(e in n)o=n[e],s=o.type,i=o.tracked,t=o.elements,null!=s||i?t.length>1&&r.push.apply(r,t.slice(1)):r.push.apply(r,t);return r},t.prototype.getMetaValue=function(t){var e;return null!=(e=this.findMetaElementByName(t))?e.getAttribute("content"):void 0},t.prototype.findMetaElementByName=function(t){var r,n,o,i;r=void 0,i=this.elements;for(o in i)n=i[o].elements,e(n[0],t)&&(r=n[0]);return r},i=function(t){return r(t)?"script":n(t)?"stylesheet":void 0},o=function(t){return"reload"===t.getAttribute("data-turbolinks-track")},r=function(t){var e;return e=t.tagName.toLowerCase(),"script"===e},n=function(t){var e;return e=t.tagName.toLowerCase(),"style"===e||"link"===e&&"stylesheet"===t.getAttribute("rel")},e=function(t,e){var r;return r=t.tagName.toLowerCase(),"meta"===r&&t.getAttribute("name")===e},t}()}.call(this),function(){e.Snapshot=function(){function t(t,e){this.headDetails=t,this.bodyElement=e}return t.wrap=function(t){return t instanceof this?t:"string"==typeof t?this.fromHTMLString(t):this.fromHTMLElement(t)},t.fromHTMLString=function(t){var e;return e=document.createElement("html"),e.innerHTML=t,this.fromHTMLElement(e)},t.fromHTMLElement=function(t){var r,n,o,i;return o=t.querySelector("head"),r=null!=(i=t.querySelector("body"))?i:document.createElement("body"),n=e.HeadDetails.fromHeadElement(o),new this(n,r)},t.prototype.clone=function(){return new this.constructor(this.headDetails,this.bodyElement.cloneNode(!0))},t.prototype.getRootLocation=function(){var t,r;return r=null!=(t=this.getSetting("root"))?t:"/",new e.Location(r)},t.prototype.getCacheControlValue=function(){return this.getSetting("cache-control")},t.prototype.getElementForAnchor=function(t){try{return this.bodyElement.querySelector("[id='"+t+"'], a[name='"+t+"']")}catch(e){}},t.prototype.getPermanentElements=function(){return this.bodyElement.querySelectorAll("[id][data-turbolinks-permanent]")},t.prototype.getPermanentElementById=function(t){return this.bodyElement.querySelector("#"+t+"[data-turbolinks-permanent]")},t.prototype.getPermanentElementsPresentInSnapshot=function(t){var e,r,n,o,i;for(o=this.getPermanentElements(),i=[],r=0,n=o.length;n>r;r++)e=o[r],t.getPermanentElementById(e.id)&&i.push(e);return i},t.prototype.findFirstAutofocusableElement=function(){return this.bodyElement.querySelector("[autofocus]")},t.prototype.hasAnchor=function(t){return null!=this.getElementForAnchor(t)},t.prototype.isPreviewable=function(){return"no-preview"!==this.getCacheControlValue()},t.prototype.isCacheable=function(){return"no-cache"!==this.getCacheControlValue()},t.prototype.isVisitable=function(){return"reload"!==this.getSetting("visit-control")},t.prototype.getSetting=function(t){return this.headDetails.getMetaValue("turbolinks-"+t)},t}()}.call(this),function(){var t=[].slice;e.Renderer=function(){function e(){}var r;return e.render=function(){var e,r,n,o;return n=arguments[0],r=arguments[1],e=3<=arguments.length?t.call(arguments,2):[],o=function(t,e,r){r.prototype=t.prototype;var n=new r,o=t.apply(n,e);return Object(o)===o?o:n}(this,e,function(){}),o.delegate=n,o.render(r),o},e.prototype.renderView=function(t){return this.delegate.viewWillRender(this.newBody),t(),this.delegate.viewRendered(this.newBody)},e.prototype.invalidateView=function(){return this.delegate.viewInvalidated()},e.prototype.createScriptElement=function(t){var e;return"false"===t.getAttribute("data-turbolinks-eval")?t:(e=document.createElement("script"),e.textContent=t.textContent,e.async=!1,r(e,t),e)},r=function(t,e){var r,n,o,i,s,a,u;for(i=e.attributes,a=[],r=0,n=i.length;n>r;r++)s=i[r],o=s.name,u=s.value,a.push(t.setAttribute(o,u));return a},e}()}.call(this),function(){var t,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;e.SnapshotRenderer=function(e){function o(t,e,r){this.currentSnapshot=t,this.newSnapshot=e,this.isPreview=r,this.currentHeadDetails=this.currentSnapshot.headDetails,this.newHeadDetails=this.newSnapshot.headDetails,this.currentBody=this.currentSnapshot.bodyElement,this.newBody=this.newSnapshot.bodyElement}return n(o,e),o.prototype.render=function(t){return this.shouldRender()?(this.mergeHead(),this.renderView(function(e){return function(){return e.replaceBody(),e.isPreview||e.focusFirstAutofocusableElement(),t()}}(this))):this.invalidateView()},o.prototype.mergeHead=function(){return this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()},o.prototype.replaceBody=function(){var t;return t=this.relocateCurrentBodyPermanentElements(),this.activateNewBodyScriptElements(),this.assignNewBody(),this.replacePlaceholderElementsWithClonedPermanentElements(t)},o.prototype.shouldRender=function(){return this.newSnapshot.isVisitable()&&this.trackedElementsAreIdentical()},o.prototype.trackedElementsAreIdentical=function(){return this.currentHeadDetails.getTrackedElementSignature()===this.newHeadDetails.getTrackedElementSignature()},o.prototype.copyNewHeadStylesheetElements=function(){var t,e,r,n,o;for(n=this.getNewHeadStylesheetElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.copyNewHeadScriptElements=function(){var t,e,r,n,o;for(n=this.getNewHeadScriptElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(this.createScriptElement(t)));return o},o.prototype.removeCurrentHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getCurrentHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.removeChild(t));return o},o.prototype.copyNewHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getNewHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},o.prototype.relocateCurrentBodyPermanentElements=function(){var e,n,o,i,s,a,u;for(a=this.getCurrentBodyPermanentElements(),u=[],e=0,n=a.length;n>e;e++)i=a[e],s=t(i),o=this.newSnapshot.getPermanentElementById(i.id),r(i,s.element),r(o,i),u.push(s);return u},o.prototype.replacePlaceholderElementsWithClonedPermanentElements=function(t){var e,n,o,i,s,a,u;for(u=[],o=0,i=t.length;i>o;o++)a=t[o],n=a.element,s=a.permanentElement,e=s.cloneNode(!0),u.push(r(n,e));return u},o.prototype.activateNewBodyScriptElements=function(){var t,e,n,o,i,s;for(i=this.getNewBodyScriptElements(),s=[],e=0,o=i.length;o>e;e++)n=i[e],t=this.createScriptElement(n),s.push(r(n,t));return s},o.prototype.assignNewBody=function(){return document.body=this.newBody},o.prototype.focusFirstAutofocusableElement=function(){var t;return null!=(t=this.newSnapshot.findFirstAutofocusableElement())?t.focus():void 0},o.prototype.getNewHeadStylesheetElements=function(){return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)},o.prototype.getNewHeadScriptElements=function(){return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)},o.prototype.getCurrentHeadProvisionalElements=function(){return this.currentHeadDetails.getProvisionalElements()},o.prototype.getNewHeadProvisionalElements=function(){return this.newHeadDetails.getProvisionalElements()},o.prototype.getCurrentBodyPermanentElements=function(){return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot)},o.prototype.getNewBodyScriptElements=function(){return this.newBody.querySelectorAll("script")},o}(e.Renderer),t=function(t){var e;return e=document.createElement("meta"),e.setAttribute("name","turbolinks-permanent-placeholder"),e.setAttribute("content",t.id),{element:e,permanentElement:t}},r=function(t,e){var r;return(r=t.parentNode)?r.replaceChild(e,t):void 0}}.call(this),function(){var t=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;e.ErrorRenderer=function(e){function r(t){var e;e=document.createElement("html"),e.innerHTML=t,this.newHead=e.querySelector("head"),this.newBody=e.querySelector("body")}return t(r,e),r.prototype.render=function(t){return this.renderView(function(e){return function(){return e.replaceHeadAndBody(),e.activateBodyScriptElements(),t()}}(this))},r.prototype.replaceHeadAndBody=function(){var t,e;return e=document.head,t=document.body,e.parentNode.replaceChild(this.newHead,e),t.parentNode.replaceChild(this.newBody,t)},r.prototype.activateBodyScriptElements=function(){var t,e,r,n,o,i;for(n=this.getScriptElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],t=this.createScriptElement(o),i.push(o.parentNode.replaceChild(t,o));return i},r.prototype.getScriptElements=function(){return document.documentElement.querySelectorAll("script")},r}(e.Renderer)}.call(this),function(){e.View=function(){function t(t){this.delegate=t,this.htmlElement=document.documentElement}return t.prototype.getRootLocation=function(){return this.getSnapshot().getRootLocation()},t.prototype.getElementForAnchor=function(t){return this.getSnapshot().getElementForAnchor(t)},t.prototype.getSnapshot=function(){return e.Snapshot.fromHTMLElement(this.htmlElement)},t.prototype.render=function(t,e){var r,n,o;return o=t.snapshot,r=t.error,n=t.isPreview,this.markAsPreview(n),null!=o?this.renderSnapshot(o,n,e):this.renderError(r,e)},t.prototype.markAsPreview=function(t){return t?this.htmlElement.setAttribute("data-turbolinks-preview",""):this.htmlElement.removeAttribute("data-turbolinks-preview")},t.prototype.renderSnapshot=function(t,r,n){return e.SnapshotRenderer.render(this.delegate,n,this.getSnapshot(),e.Snapshot.wrap(t),r)},t.prototype.renderError=function(t,r){return e.ErrorRenderer.render(this.delegate,r,t)},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ScrollManager=function(){function r(r){this.delegate=r,this.onScroll=t(this.onScroll,this),this.onScroll=e.throttle(this.onScroll)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("scroll",this.onScroll,!1),this.started=!1):void 0},r.prototype.scrollToElement=function(t){return t.scrollIntoView()},r.prototype.scrollToPosition=function(t){var e,r;return e=t.x,r=t.y,window.scrollTo(e,r)},r.prototype.onScroll=function(t){return this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},r.prototype.updatePosition=function(t){var e;return this.position=t,null!=(e=this.delegate)?e.scrollPositionChanged(this.position):void 0},r}()}.call(this),function(){e.SnapshotCache=function(){function t(t){this.size=t,this.keys=[],this.snapshots={}}var r;return t.prototype.has=function(t){var e;return e=r(t),e in this.snapshots},t.prototype.get=function(t){var e;if(this.has(t))return e=this.read(t),this.touch(t),e},t.prototype.put=function(t,e){return this.write(t,e),this.touch(t),e},t.prototype.read=function(t){var e;return e=r(t),this.snapshots[e]},t.prototype.write=function(t,e){var n;return n=r(t),this.snapshots[n]=e},t.prototype.touch=function(t){var e,n;return n=r(t),e=this.keys.indexOf(n),e>-1&&this.keys.splice(e,1),this.keys.unshift(n),this.trim()},t.prototype.trim=function(){var t,e,r,n,o;for(n=this.keys.splice(this.size),o=[],t=0,r=n.length;r>t;t++)e=n[t],o.push(delete this.snapshots[e]);return o},r=function(t){return e.Location.wrap(t).toCacheKey()},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Visit=function(){function r(r,n,o){this.controller=r,this.action=o,this.performScroll=t(this.performScroll,this),this.identifier=e.uuid(),this.location=e.Location.wrap(n),this.adapter=this.controller.adapter,this.state="initialized",this.timingMetrics={}}var n;return r.prototype.start=function(){return"initialized"===this.state?(this.recordTimingMetric("visitStart"),this.state="started",this.adapter.visitStarted(this)):void 0},r.prototype.cancel=function(){var t;return"started"===this.state?(null!=(t=this.request)&&t.cancel(),this.cancelRender(),this.state="canceled"):void 0},r.prototype.complete=function(){var t;return"started"===this.state?(this.recordTimingMetric("visitEnd"),this.state="completed","function"==typeof(t=this.adapter).visitCompleted&&t.visitCompleted(this),this.controller.visitCompleted(this)):void 0},r.prototype.fail=function(){var t;return"started"===this.state?(this.state="failed","function"==typeof(t=this.adapter).visitFailed?t.visitFailed(this):void 0):void 0},r.prototype.changeHistory=function(){var t,e;return this.historyChanged?void 0:(t=this.location.isEqualTo(this.referrer)?"replace":this.action,e=n(t),this.controller[e](this.location,this.restorationIdentifier),this.historyChanged=!0)},r.prototype.issueRequest=function(){return this.shouldIssueRequest()&&null==this.request?(this.progress=0,this.request=new e.HttpRequest(this,this.location,this.referrer),this.request.send()):void 0},r.prototype.getCachedSnapshot=function(){var t;return!(t=this.controller.getCachedSnapshotForLocation(this.location))||null!=this.location.anchor&&!t.hasAnchor(this.location.anchor)||"restore"!==this.action&&!t.isPreviewable()?void 0:t},r.prototype.hasCachedSnapshot=function(){return null!=this.getCachedSnapshot()},r.prototype.loadCachedSnapshot=function(){var t,e;return(e=this.getCachedSnapshot())?(t=this.shouldIssueRequest(),this.render(function(){var r;return this.cacheSnapshot(),this.controller.render({snapshot:e,isPreview:t},this.performScroll),"function"==typeof(r=this.adapter).visitRendered&&r.visitRendered(this),t?void 0:this.complete()})):void 0},r.prototype.loadResponse=function(){return null!=this.response?this.render(function(){var t,e;return this.cacheSnapshot(),this.request.failed?(this.controller.render({error:this.response},this.performScroll),"function"==typeof(t=this.adapter).visitRendered&&t.visitRendered(this),this.fail()):(this.controller.render({snapshot:this.response},this.performScroll),"function"==typeof(e=this.adapter).visitRendered&&e.visitRendered(this),this.complete())}):void 0},r.prototype.followRedirect=function(){return this.redirectedToLocation&&!this.followedRedirect?(this.location=this.redirectedToLocation,this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation,this.restorationIdentifier),this.followedRedirect=!0):void 0},r.prototype.requestStarted=function(){var t;return this.recordTimingMetric("requestStart"),"function"==typeof(t=this.adapter).visitRequestStarted?t.visitRequestStarted(this):void 0},r.prototype.requestProgressed=function(t){var e;return this.progress=t,"function"==typeof(e=this.adapter).visitRequestProgressed?e.visitRequestProgressed(this):void 0},r.prototype.requestCompletedWithResponse=function(t,r){return this.response=t,null!=r&&(this.redirectedToLocation=e.Location.wrap(r)),this.adapter.visitRequestCompleted(this)},r.prototype.requestFailedWithStatusCode=function(t,e){return this.response=e,this.adapter.visitRequestFailedWithStatusCode(this,t)},r.prototype.requestFinished=function(){var t;return this.recordTimingMetric("requestEnd"),"function"==typeof(t=this.adapter).visitRequestFinished?t.visitRequestFinished(this):void 0},r.prototype.performScroll=function(){return this.scrolled?void 0:("restore"===this.action?this.scrollToRestoredPosition()||this.scrollToTop():this.scrollToAnchor()||this.scrollToTop(),this.scrolled=!0)},r.prototype.scrollToRestoredPosition=function(){var t,e;return t=null!=(e=this.restorationData)?e.scrollPosition:void 0,null!=t?(this.controller.scrollToPosition(t),!0):void 0},r.prototype.scrollToAnchor=function(){return null!=this.location.anchor?(this.controller.scrollToAnchor(this.location.anchor),!0):void 0},r.prototype.scrollToTop=function(){return this.controller.scrollToPosition({x:0,y:0})},r.prototype.recordTimingMetric=function(t){var e;return null!=(e=this.timingMetrics)[t]?e[t]:e[t]=(new Date).getTime()},r.prototype.getTimingMetrics=function(){return e.copyObject(this.timingMetrics)},n=function(t){switch(t){case"replace":return"replaceHistoryWithLocationAndRestorationIdentifier";case"advance":case"restore":return"pushHistoryWithLocationAndRestorationIdentifier"}},r.prototype.shouldIssueRequest=function(){return"restore"===this.action?!this.hasCachedSnapshot():!0},r.prototype.cacheSnapshot=function(){return this.snapshotCached?void 0:(this.controller.cacheSnapshot(),this.snapshotCached=!0)},r.prototype.render=function(t){return this.cancelRender(),this.frame=requestAnimationFrame(function(e){return function(){return e.frame=null,t.call(e)}}(this))},r.prototype.cancelRender=function(){return this.frame?cancelAnimationFrame(this.frame):void 0},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Controller=function(){function r(){this.clickBubbled=t(this.clickBubbled,this),this.clickCaptured=t(this.clickCaptured,this),this.pageLoaded=t(this.pageLoaded,this),this.history=new e.History(this),this.view=new e.View(this),this.scrollManager=new e.ScrollManager(this),this.restorationData={},this.clearCache(),this.setProgressBarDelay(500)}return r.prototype.start=function(){return e.supported&&!this.started?(addEventListener("click",this.clickCaptured,!0),addEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.start(),this.startHistory(),this.started=!0,this.enabled=!0):void 0},r.prototype.disable=function(){return this.enabled=!1},r.prototype.stop=function(){return this.started?(removeEventListener("click",this.clickCaptured,!0),removeEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.stop(),this.stopHistory(),this.started=!1):void 0},r.prototype.clearCache=function(){return this.cache=new e.SnapshotCache(10)},r.prototype.visit=function(t,r){var n,o;return null==r&&(r={}),t=e.Location.wrap(t),this.applicationAllowsVisitingLocation(t)?this.locationIsVisitable(t)?(n=null!=(o=r.action)?o:"advance",this.adapter.visitProposedToLocationWithAction(t,n)):window.location=t:void 0},r.prototype.startVisitToLocationWithAction=function(t,r,n){var o;return e.supported?(o=this.getRestorationDataForIdentifier(n),this.startVisit(t,r,{restorationData:o})):window.location=t},r.prototype.setProgressBarDelay=function(t){return this.progressBarDelay=t},r.prototype.startHistory=function(){return this.location=e.Location.wrap(window.location),this.restorationIdentifier=e.uuid(),this.history.start(),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.stopHistory=function(){return this.history.stop()},r.prototype.pushHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.push(this.location,this.restorationIdentifier)},r.prototype.replaceHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.historyPoppedToLocationWithRestorationIdentifier=function(t,r){var n;return this.restorationIdentifier=r,this.enabled?(n=this.getRestorationDataForIdentifier(this.restorationIdentifier),this.startVisit(t,"restore",{restorationIdentifier:this.restorationIdentifier,restorationData:n,historyChanged:!0}),this.location=e.Location.wrap(t)):this.adapter.pageInvalidated()},r.prototype.getCachedSnapshotForLocation=function(t){var e;return null!=(e=this.cache.get(t))?e.clone():void 0},r.prototype.shouldCacheSnapshot=function(){return this.view.getSnapshot().isCacheable();
+},r.prototype.cacheSnapshot=function(){var t,r;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),r=this.view.getSnapshot(),t=this.lastRenderedLocation,e.defer(function(e){return function(){return e.cache.put(t,r.clone())}}(this))):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch("turbolinks:click",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch("turbolinks:before-visit",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch("turbolinks:visit",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch("turbolinks:before-cache")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch("turbolinks:before-render",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch("turbolinks:render")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch("turbolinks:load",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,"a[href]:not([target]):not([download])"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute("href")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute("data-turbolinks-action"))?e:"advance"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,"[data-turbolinks]"))?"false"!==r.getAttribute("data-turbolinks"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute("data-turbolinks-suppress-warning"))for(;t=t.parentNode;)if(t===document.body)return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\n\n\u2014\u2014\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s",e.outerHTML)}()}.call(this),function(){var t,r,n;e.start=function(){return r()?(null==e.controller&&(e.controller=t()),e.controller.start()):void 0},r=function(){return null==window.Turbolinks&&(window.Turbolinks=e),n()},t=function(){var t;return t=new e.Controller,t.adapter=new e.BrowserAdapter(t),t},n=function(){return window.Turbolinks===e},n()&&e.start()}.call(this)}).call(this),"object"==typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd&&define(e)}).call(this);
+/*!
+ * jQuery JavaScript Library v3.4.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2019-05-01T21:04Z
+ */
+
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+      // Support: Chrome <=57, Firefox <=52
+      // In some browsers, typeof returns "function" for HTML <object> elements
+      // (i.e., `typeof document.createElement( "object" ) === "function"`).
+      // We don't want to classify *any* DOM node as a function.
+      return typeof obj === "function" && typeof obj.nodeType !== "number";
+  };
+
+
+var isWindow = function isWindow( obj ) {
+		return obj != null && obj === obj.window;
+	};
+
+
+
+
+	var preservedScriptAttributes = {
+		type: true,
+		src: true,
+		nonce: true,
+		noModule: true
+	};
+
+	function DOMEval( code, node, doc ) {
+		doc = doc || document;
+
+		var i, val,
+			script = doc.createElement( "script" );
+
+		script.text = code;
+		if ( node ) {
+			for ( i in preservedScriptAttributes ) {
+
+				// Support: Firefox 64+, Edge 18+
+				// Some browsers don't support the "nonce" property on scripts.
+				// On the other hand, just using `getAttribute` is not enough as
+				// the `nonce` attribute is reset to an empty string whenever it
+				// becomes browsing-context connected.
+				// See https://github.com/whatwg/html/issues/2369
+				// See https://html.spec.whatwg.org/#nonce-attributes
+				// The `node.getAttribute` check was added for the sake of
+				// `jQuery.globalEval` so that it can fake a nonce-containing node
+				// via an object.
+				val = node[ i ] || node.getAttribute && node.getAttribute( i );
+				if ( val ) {
+					script.setAttribute( i, val );
+				}
+			}
+		}
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+
+
+function toType( obj ) {
+	if ( obj == null ) {
+		return obj + "";
+	}
+
+	// Support: Android <=2.3 only (functionish RegExp)
+	return typeof obj === "object" || typeof obj === "function" ?
+		class2type[ toString.call( obj ) ] || "object" :
+		typeof obj;
+}
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.4.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android <=4.0 only
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+
+		// Return all the elements in a clean array
+		if ( num == null ) {
+			return slice.call( this );
+		}
+
+		// Return just the one element from the set
+		return num < 0 ? this[ num + this.length ] : this[ num ];
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				copy = options[ name ];
+
+				// Prevent Object.prototype pollution
+				// Prevent never-ending loop
+				if ( name === "__proto__" || target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = Array.isArray( copy ) ) ) ) {
+					src = target[ name ];
+
+					// Ensure proper type for the source value
+					if ( copyIsArray && !Array.isArray( src ) ) {
+						clone = [];
+					} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {
+						clone = {};
+					} else {
+						clone = src;
+					}
+					copyIsArray = false;
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code, options ) {
+		DOMEval( code, { nonce: options && options.nonce } );
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android <=4.0 only
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = toType( obj );
+
+	if ( isFunction( obj ) || isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.4
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://js.foundation/
+ *
+ * Date: 2019-04-08
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	nonnativeSelectorCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+	rdescend = new RegExp( whitespace + "|>" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rhtml = /HTML$/i,
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	inDisabledFieldset = addCombinator(
+		function( elem ) {
+			return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!nonnativeSelectorCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) &&
+
+				// Support: IE 8 only
+				// Exclude object elements
+				(nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) {
+
+				newSelector = selector;
+				newContext = context;
+
+				// qSA considers elements outside a scoping root when evaluating child or
+				// descendant combinators, which is not what we want.
+				// In such cases, we work around the behavior by prefixing every selector in the
+				// list with an ID selector referencing the scope context.
+				// Thanks to Andrew Dupont for this technique.
+				if ( nodeType === 1 && rdescend.test( selector ) ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rcssescape, fcssescape );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[i] = "#" + nid + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch ( qsaError ) {
+					nonnativeSelectorCache( selector, true );
+				} finally {
+					if ( nid === expando ) {
+						context.removeAttribute( "id" );
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement("fieldset");
+
+	try {
+		return !!fn( el );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+	// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Only certain elements can match :enabled or :disabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+		// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+		if ( "form" in elem ) {
+
+			// Check for inherited disabledness on relevant non-disabled elements:
+			// * listed form-associated elements in a disabled fieldset
+			//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+			// * option elements in a disabled optgroup
+			//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+			// All such elements have a "form" property.
+			if ( elem.parentNode && elem.disabled === false ) {
+
+				// Option elements defer to a parent optgroup if present
+				if ( "label" in elem ) {
+					if ( "label" in elem.parentNode ) {
+						return elem.parentNode.disabled === disabled;
+					} else {
+						return elem.disabled === disabled;
+					}
+				}
+
+				// Support: IE 6 - 11
+				// Use the isDisabled shortcut property to check for disabled fieldset ancestors
+				return elem.isDisabled === disabled ||
+
+					// Where there is no isDisabled, check manually
+					/* jshint -W018 */
+					elem.isDisabled !== !disabled &&
+						inDisabledFieldset( elem ) === disabled;
+			}
+
+			return elem.disabled === disabled;
+
+		// Try to winnow out elements that can't be disabled before trusting the disabled property.
+		// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+		// even exist on them, let alone have a boolean value.
+		} else if ( "label" in elem ) {
+			return elem.disabled === disabled;
+		}
+
+		// Remaining elements are neither :enabled nor :disabled
+		return false;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	var namespace = elem.namespaceURI,
+		docElem = (elem.ownerDocument || elem).documentElement;
+
+	// Support: IE <=8
+	// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes
+	// https://bugs.jquery.com/ticket/4833
+	return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" );
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( preferredDoc !== document &&
+		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( el ) {
+		el.className = "i";
+		return !el.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( el ) {
+		el.appendChild( document.createComment("") );
+		return !el.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID filter and find
+	if ( support.getById ) {
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var elem = context.getElementById( id );
+				return elem ? [ elem ] : [];
+			}
+		};
+	} else {
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+
+		// Support: IE 6 - 7 only
+		// getElementById is not reliable as a find shortcut
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var node, i, elems,
+					elem = context.getElementById( id );
+
+				if ( elem ) {
+
+					// Verify the id attribute
+					node = elem.getAttributeNode("id");
+					if ( node && node.value === id ) {
+						return [ elem ];
+					}
+
+					// Fall back on getElementsByName
+					elems = context.getElementsByName( id );
+					i = 0;
+					while ( (elem = elems[i++]) ) {
+						node = elem.getAttributeNode("id");
+						if ( node && node.value === id ) {
+							return [ elem ];
+						}
+					}
+				}
+
+				return [];
+			}
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( el ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll(":enabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll(":disabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( el ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!nonnativeSelectorCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {
+			nonnativeSelectorCache( expr, true );
+		}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ?
+				argument + length :
+				argument > length ?
+					length :
+					argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+			return false;
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( (oldCache = uniqueCache[ key ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+			return false;
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+	return el.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+	}
+
+	// Single element
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+	}
+
+	// Arraylike of elements (jQuery, arguments, Array)
+	if ( typeof qualifier !== "string" ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+		} );
+	}
+
+	// Filtered directly for both simple and complex selectors
+	return jQuery.filter( qualifier, elements, not );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	if ( elems.length === 1 && elem.nodeType === 1 ) {
+		return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+	}
+
+	return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+		return elem.nodeType === 1;
+	} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		if ( typeof elem.contentDocument !== "undefined" ) {
+			return elem.contentDocument;
+		}
+
+		// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+		// Treat the template element as a regular one in browsers that
+		// don't support it.
+		if ( nodeName( elem, "template" ) ) {
+			elem = elem.content || elem;
+		}
+
+		return jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = locked || options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && toType( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+			// * false: [ value ].slice( 0 ) => resolve( value )
+			// * true: [ value ].slice( 1 ) => resolve()
+			resolve.apply( undefined, [ value ].slice( noValue ) );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.apply( undefined, [ value ] );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// rejected_handlers.disable
+					// fulfilled_handlers.disable
+					tuples[ 3 - i ][ 3 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock,
+
+					// progress_handlers.lock
+					tuples[ 0 ][ 3 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+				!remaining );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( toType( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	if ( chainable ) {
+		return elems;
+	}
+
+	// Gets
+	if ( bulk ) {
+		return fn.call( elems );
+	}
+
+	return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+
+
+// Matches dashed string for camelizing
+var rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g;
+
+// Used by camelCase as callback to replace()
+function fcamelCase( all, letter ) {
+	return letter.toUpperCase();
+}
+
+// Convert dashed to camelCase; used by the css and data modules
+// Support: IE <=9 - 11, Edge 12 - 15
+// Microsoft forgot to hump their vendor prefix (#9572)
+function camelCase( string ) {
+	return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+}
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( Array.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( camelCase );
+			} else {
+				key = camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnothtmlwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+	if ( data === "true" ) {
+		return true;
+	}
+
+	if ( data === "false" ) {
+		return false;
+	}
+
+	if ( data === "null" ) {
+		return null;
+	}
+
+	// Only convert to a number if it doesn't change the string
+	if ( data === +data + "" ) {
+		return +data;
+	}
+
+	if ( rbrace.test( data ) ) {
+		return JSON.parse( data );
+	}
+
+	return data;
+}
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = getData( data );
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || Array.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var documentElement = document.documentElement;
+
+
+
+	var isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem );
+		},
+		composed = { composed: true };
+
+	// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
+	// Check attachment across shadow DOM boundaries when possible (gh-3504)
+	// Support: iOS 10.0-10.2 only
+	// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
+	// leading to errors. We need to check for `getRootNode`.
+	if ( documentElement.getRootNode ) {
+		isAttached = function( elem ) {
+			return jQuery.contains( elem.ownerDocument, elem ) ||
+				elem.getRootNode( composed ) === elem.ownerDocument;
+		};
+	}
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			isAttached( elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted, scale,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = elem.nodeType &&
+			( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Support: Firefox <=54
+		// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
+		initial = initial / 2;
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		while ( maxIterations-- ) {
+
+			// Evaluate and update our best guess (doubling guesses that zero out).
+			// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
+			jQuery.style( elem, prop, initialInUnit + unit );
+			if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
+				maxIterations = 0;
+			}
+			initialInUnit = initialInUnit / scale;
+
+		}
+
+		initialInUnit = initialInUnit * 2;
+		jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) );
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i );
+
+var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE <=9 only
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	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, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret;
+
+	if ( typeof context.getElementsByTagName !== "undefined" ) {
+		ret = context.getElementsByTagName( tag || "*" );
+
+	} else if ( typeof context.querySelectorAll !== "undefined" ) {
+		ret = context.querySelectorAll( tag || "*" );
+
+	} else {
+		ret = [];
+	}
+
+	if ( tag === undefined || tag && nodeName( context, tag ) ) {
+		return jQuery.merge( [ context ], ret );
+	}
+
+	return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, attached, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( toType( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		attached = isAttached( elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( attached ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 - 11+
+// focus() and blur() are asynchronous, except when they are no-op.
+// So expect focus to be synchronous when the element is already active,
+// and blur to be synchronous when the element is not already active.
+// (focus and blur are always synchronous in other supported browsers,
+// this just defines when we can count on it).
+function expectSync( elem, type ) {
+	return ( elem === safeActiveElement() ) === ( type === "focus" );
+}
+
+// Support: IE <=9 only
+// Accessing document.activeElement can throw unexpectedly
+// https://bugs.jquery.com/ticket/13393
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		// Make a writable jQuery.Event from the native event object
+		var event = jQuery.event.fix( nativeEvent );
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// If the event is namespaced, then each handler is only invoked if it is
+				// specially universal or its namespaces are a superset of the event's.
+				if ( !event.rnamespace || handleObj.namespace === false ||
+					event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, handleObj, sel, matchedHandlers, matchedSelectors,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		if ( delegateCount &&
+
+			// Support: IE <=9
+			// Black-hole SVG <use> instance trees (trac-13180)
+			cur.nodeType &&
+
+			// Support: Firefox <=42
+			// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+			// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+			// Support: IE 11 only
+			// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+			!( event.type === "click" && event.button >= 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+					matchedHandlers = [];
+					matchedSelectors = {};
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matchedSelectors[ sel ] === undefined ) {
+							matchedSelectors[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matchedSelectors[ sel ] ) {
+							matchedHandlers.push( handleObj );
+						}
+					}
+					if ( matchedHandlers.length ) {
+						handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		cur = this;
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		click: {
+
+			// Utilize native event to ensure correct state for checkable inputs
+			setup: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Claim the first handler
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					// dataPriv.set( el, "click", ... )
+					leverageNative( el, "click", returnTrue );
+				}
+
+				// Return false to allow normal processing in the caller
+				return false;
+			},
+			trigger: function( data ) {
+
+				// For mutual compressibility with _default, replace `this` access with a local var.
+				// `|| data` is dead code meant only to preserve the variable through minification.
+				var el = this || data;
+
+				// Force setup before triggering a click
+				if ( rcheckableType.test( el.type ) &&
+					el.click && nodeName( el, "input" ) ) {
+
+					leverageNative( el, "click" );
+				}
+
+				// Return non-false to allow normal event-path propagation
+				return true;
+			},
+
+			// For cross-browser consistency, suppress native .click() on links
+			// Also prevent it if we're currently inside a leveraged native-event stack
+			_default: function( event ) {
+				var target = event.target;
+				return rcheckableType.test( target.type ) &&
+					target.click && nodeName( target, "input" ) &&
+					dataPriv.get( target, "click" ) ||
+					nodeName( target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+// Ensure the presence of an event listener that handles manually-triggered
+// synthetic events by interrupting progress until reinvoked in response to
+// *native* events that it fires directly, ensuring that state changes have
+// already occurred before other listeners are invoked.
+function leverageNative( el, type, expectSync ) {
+
+	// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add
+	if ( !expectSync ) {
+		if ( dataPriv.get( el, type ) === undefined ) {
+			jQuery.event.add( el, type, returnTrue );
+		}
+		return;
+	}
+
+	// Register the controller as a special universal handler for all event namespaces
+	dataPriv.set( el, type, false );
+	jQuery.event.add( el, type, {
+		namespace: false,
+		handler: function( event ) {
+			var notAsync, result,
+				saved = dataPriv.get( this, type );
+
+			if ( ( event.isTrigger & 1 ) && this[ type ] ) {
+
+				// Interrupt processing of the outer synthetic .trigger()ed event
+				// Saved data should be false in such cases, but might be a leftover capture object
+				// from an async native handler (gh-4350)
+				if ( !saved.length ) {
+
+					// Store arguments for use when handling the inner native event
+					// There will always be at least one argument (an event object), so this array
+					// will not be confused with a leftover capture object.
+					saved = slice.call( arguments );
+					dataPriv.set( this, type, saved );
+
+					// Trigger the native event and capture its result
+					// Support: IE <=9 - 11+
+					// focus() and blur() are asynchronous
+					notAsync = expectSync( this, type );
+					this[ type ]();
+					result = dataPriv.get( this, type );
+					if ( saved !== result || notAsync ) {
+						dataPriv.set( this, type, false );
+					} else {
+						result = {};
+					}
+					if ( saved !== result ) {
+
+						// Cancel the outer synthetic event
+						event.stopImmediatePropagation();
+						event.preventDefault();
+						return result.value;
+					}
+
+				// If this is an inner synthetic event for an event with a bubbling surrogate
+				// (focus or blur), assume that the surrogate already propagated from triggering the
+				// native event and prevent that from happening again here.
+				// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the
+				// bubbling surrogate propagates *after* the non-bubbling base), but that seems
+				// less bad than duplication.
+				} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {
+					event.stopPropagation();
+				}
+
+			// If this is a native event triggered above, everything is now in order
+			// Fire an inner synthetic event with the original arguments
+			} else if ( saved.length ) {
+
+				// ...and capture the result
+				dataPriv.set( this, type, {
+					value: jQuery.event.trigger(
+
+						// Support: IE <=9 - 11+
+						// Extend with the prototype to reset the above stopImmediatePropagation()
+						jQuery.extend( saved[ 0 ], jQuery.Event.prototype ),
+						saved.slice( 1 ),
+						this
+					)
+				} );
+
+				// Abort handling of the native event
+				event.stopImmediatePropagation();
+			}
+		}
+	} );
+}
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || Date.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	code: true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			if ( button & 1 ) {
+				return 1;
+			}
+
+			if ( button & 2 ) {
+				return 3;
+			}
+
+			if ( button & 4 ) {
+				return 2;
+			}
+
+			return 0;
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) {
+	jQuery.event.special[ type ] = {
+
+		// Utilize native event if possible so blur/focus sequence is correct
+		setup: function() {
+
+			// Claim the first handler
+			// dataPriv.set( this, "focus", ... )
+			// dataPriv.set( this, "blur", ... )
+			leverageNative( this, type, expectSync );
+
+			// Return false to allow normal processing in the caller
+			return false;
+		},
+		trigger: function() {
+
+			// Force setup before trigger
+			leverageNative( this, type );
+
+			// Return non-false to allow normal event-path propagation
+			return true;
+		},
+
+		delegateType: delegateType
+	};
+} );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	/* eslint-disable max-len */
+
+	// See https://github.com/eslint/eslint/issues/3229
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+	/* eslint-enable */
+
+	// Support: IE <=10 - 11, Edge 12 - 13 only
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+	if ( nodeName( elem, "table" ) &&
+		nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
+		elem.type = elem.type.slice( 5 );
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		valueIsFunction = isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( valueIsFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( valueIsFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl && !node.noModule ) {
+								jQuery._evalUrl( node.src, {
+									nonce: node.nonce || node.getAttribute( "nonce" )
+								} );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && isAttached( node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = isAttached( elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
+			"margin-top:1px;padding:0;border:0";
+		div.style.cssText =
+			"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"width:60%;top:1%";
+		documentElement.appendChild( container ).appendChild( div );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
+
+		// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.right = "60%";
+		pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
+
+		// Support: IE 9 - 11 only
+		// Detect misreporting of content dimensions for box-sizing:border-box elements
+		boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
+
+		// Support: IE 9 only
+		// Detect overflow:scroll screwiness (gh-3699)
+		// Support: Chrome <=64
+		// Don't get tricked when zoom affects offsetWidth (gh-4029)
+		div.style.position = "absolute";
+		scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	function roundPixelMeasures( measure ) {
+		return Math.round( parseFloat( measure ) );
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
+		reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	jQuery.extend( support, {
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelBoxStyles: function() {
+			computeStyleTests();
+			return pixelBoxStylesVal;
+		},
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		},
+		scrollboxSize: function() {
+			computeStyleTests();
+			return scrollboxSizeVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+
+		// Support: Firefox 51+
+		// Retrieving style before computed somehow
+		// fixes an issue with getting wrong values
+		// on detached elements
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// getPropertyValue is needed for:
+	//   .css('filter') (IE 9 only, #12537)
+	//   .css('--customProperty) (#3144)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !isAttached( elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style,
+	vendorProps = {};
+
+// Return a vendor-prefixed property or undefined
+function vendorPropName( name ) {
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+// Return a potentially-mapped jQuery.cssProps or vendor prefixed property
+function finalPropName( name ) {
+	var final = jQuery.cssProps[ name ] || vendorProps[ name ];
+
+	if ( final ) {
+		return final;
+	}
+	if ( name in emptyStyle ) {
+		return name;
+	}
+	return vendorProps[ name ] = vendorPropName( name ) || name;
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rcustomProp = /^--/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	};
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
+	var i = dimension === "width" ? 1 : 0,
+		extra = 0,
+		delta = 0;
+
+	// Adjustment may not be necessary
+	if ( box === ( isBorderBox ? "border" : "content" ) ) {
+		return 0;
+	}
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin
+		if ( box === "margin" ) {
+			delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
+		}
+
+		// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
+		if ( !isBorderBox ) {
+
+			// Add padding
+			delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// For "border" or "margin", add border
+			if ( box !== "padding" ) {
+				delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+
+			// But still keep track of it otherwise
+			} else {
+				extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+
+		// If we get here with a border-box (content + padding + border), we're seeking "content" or
+		// "padding" or "margin"
+		} else {
+
+			// For "content", subtract padding
+			if ( box === "content" ) {
+				delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// For "content" or "padding", subtract border
+			if ( box !== "margin" ) {
+				delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	// Account for positive content-box scroll gutter when requested by providing computedVal
+	if ( !isBorderBox && computedVal >= 0 ) {
+
+		// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
+		// Assuming integer scroll gutter, subtract the rest and round down
+		delta += Math.max( 0, Math.ceil(
+			elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+			computedVal -
+			delta -
+			extra -
+			0.5
+
+		// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter
+		// Use an explicit zero to avoid NaN (gh-3964)
+		) ) || 0;
+	}
+
+	return delta;
+}
+
+function getWidthOrHeight( elem, dimension, extra ) {
+
+	// Start with computed style
+	var styles = getStyles( elem ),
+
+		// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).
+		// Fake content-box until we know it's needed to know the true value.
+		boxSizingNeeded = !support.boxSizingReliable() || extra,
+		isBorderBox = boxSizingNeeded &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+		valueIsBorderBox = isBorderBox,
+
+		val = curCSS( elem, dimension, styles ),
+		offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );
+
+	// Support: Firefox <=54
+	// Return a confounding non-pixel value or feign ignorance, as appropriate.
+	if ( rnumnonpx.test( val ) ) {
+		if ( !extra ) {
+			return val;
+		}
+		val = "auto";
+	}
+
+
+	// Fall back to offsetWidth/offsetHeight when value is "auto"
+	// This happens for inline elements with no explicit setting (gh-3571)
+	// Support: Android <=4.1 - 4.3 only
+	// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
+	// Support: IE 9-11 only
+	// Also use offsetWidth/offsetHeight for when box sizing is unreliable
+	// We use getClientRects() to check for hidden/disconnected.
+	// In those cases, the computed value can be trusted to be border-box
+	if ( ( !support.boxSizingReliable() && isBorderBox ||
+		val === "auto" ||
+		!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) &&
+		elem.getClientRects().length ) {
+
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+		// Where available, offsetWidth/offsetHeight approximate border box dimensions.
+		// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the
+		// retrieved value as a content box dimension.
+		valueIsBorderBox = offsetProp in elem;
+		if ( valueIsBorderBox ) {
+			val = elem[ offsetProp ];
+		}
+	}
+
+	// Normalize "" and auto
+	val = parseFloat( val ) || 0;
+
+	// Adjust for the element's box model
+	return ( val +
+		boxModelAdjustment(
+			elem,
+			dimension,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles,
+
+			// Provide the current computed size to request scroll gutter calculation (gh-3589)
+			val
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"gridArea": true,
+		"gridColumn": true,
+		"gridColumnEnd": true,
+		"gridColumnStart": true,
+		"gridRow": true,
+		"gridRowEnd": true,
+		"gridRowStart": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name ),
+			style = elem.style;
+
+		// Make sure that we're working with the right name. We don't
+		// want to query the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append
+			// "px" to a few hardcoded values.
+			if ( type === "number" && !isCustomProp ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				if ( isCustomProp ) {
+					style.setProperty( name, value );
+				} else {
+					style[ name ] = value;
+				}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = camelCase( name ),
+			isCustomProp = rcustomProp.test( name );
+
+		// Make sure that we're working with the right name. We don't
+		// want to modify the value if it is a CSS custom property
+		// since they are user-defined.
+		if ( !isCustomProp ) {
+			name = finalPropName( origName );
+		}
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, dimension ) {
+	jQuery.cssHooks[ dimension ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, dimension, extra );
+						} ) :
+						getWidthOrHeight( elem, dimension, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = getStyles( elem ),
+
+				// Only read styles.position if the test has a chance to fail
+				// to avoid forcing a reflow.
+				scrollboxSizeBuggy = !support.scrollboxSize() &&
+					styles.position === "absolute",
+
+				// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)
+				boxSizingNeeded = scrollboxSizeBuggy || extra,
+				isBorderBox = boxSizingNeeded &&
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+				subtract = extra ?
+					boxModelAdjustment(
+						elem,
+						dimension,
+						extra,
+						isBorderBox,
+						styles
+					) :
+					0;
+
+			// Account for unreliable border-box dimensions by comparing offset* to computed and
+			// faking a content-box to get border and padding (gh-3699)
+			if ( isBorderBox && scrollboxSizeBuggy ) {
+				subtract -= Math.ceil(
+					elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
+					parseFloat( styles[ dimension ] ) -
+					boxModelAdjustment( elem, dimension, "border", false, styles ) -
+					0.5
+				);
+			}
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ dimension ] = value;
+				value = jQuery.css( elem, dimension );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( prefix !== "margin" ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( Array.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 && (
+					jQuery.cssHooks[ tween.prop ] ||
+					tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, inProgress,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function schedule() {
+	if ( inProgress ) {
+		if ( document.hidden === false && window.requestAnimationFrame ) {
+			window.requestAnimationFrame( schedule );
+		} else {
+			window.setTimeout( schedule, jQuery.fx.interval );
+		}
+
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = Date.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 15
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY and Edge just mirrors
+		// the overflowX value there.
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( Array.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			// If there's more to do, yield
+			if ( percent < 1 && length ) {
+				return remaining;
+			}
+
+			// If this was an empty animation, synthesize a final progress notification
+			if ( !length ) {
+				deferred.notifyWith( elem, [ animation, 1, 0 ] );
+			}
+
+			// Resolve the animation and report its conclusion
+			deferred.resolveWith( elem, [ animation ] );
+			return false;
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					result.stop.bind( result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	// Attach callbacks from options
+	animation
+		.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnothtmlwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off
+	if ( jQuery.fx.off ) {
+		opt.duration = 0;
+
+	} else {
+		if ( typeof opt.duration !== "number" ) {
+			if ( opt.duration in jQuery.fx.speeds ) {
+				opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+			} else {
+				opt.duration = jQuery.fx.speeds._default;
+			}
+		}
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = Date.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Run the timer and safely remove it when done (allowing for external removal)
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( inProgress ) {
+		return;
+	}
+
+	inProgress = true;
+	schedule();
+};
+
+jQuery.fx.stop = function() {
+	inProgress = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+
+			// Attribute names can contain non-HTML whitespace characters
+			// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+			attrNames = value && value.match( rnothtmlwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				if ( tabindex ) {
+					return parseInt( tabindex, 10 );
+				}
+
+				if (
+					rfocusable.test( elem.nodeName ) ||
+					rclickable.test( elem.nodeName ) &&
+					elem.href
+				) {
+					return 0;
+				}
+
+				return -1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+
+			/* eslint no-unused-expressions: "off" */
+
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+	// Strip and collapse whitespace according to HTML spec
+	// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
+	function stripAndCollapse( value ) {
+		var tokens = value.match( rnothtmlwhite ) || [];
+		return tokens.join( " " );
+	}
+
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+function classesToArray( value ) {
+	if ( Array.isArray( value ) ) {
+		return value;
+	}
+	if ( typeof value === "string" ) {
+		return value.match( rnothtmlwhite ) || [];
+	}
+	return [];
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		classes = classesToArray( value );
+
+		if ( classes.length ) {
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = stripAndCollapse( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value,
+			isValidValue = type === "string" || Array.isArray( value );
+
+		if ( typeof stateVal === "boolean" && isValidValue ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( isValidValue ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = classesToArray( value );
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+					return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, valueIsFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				// Handle most common string cases
+				if ( typeof ret === "string" ) {
+					return ret.replace( rreturn, "" );
+				}
+
+				// Handle cases where value is null/undef or number
+				return ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		valueIsFunction = isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( valueIsFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( Array.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					stripAndCollapse( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option, i,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length;
+
+				if ( index < 0 ) {
+					i = max;
+
+				} else {
+					i = one ? index : 0;
+				}
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( Array.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+support.focusin = "onfocusin" in window;
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	stopPropagationCallback = function( e ) {
+		e.stopPropagation();
+	};
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = lastElement = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+			lastElement = cur;
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.addEventListener( type, stopPropagationCallback );
+					}
+
+					elem[ type ]();
+
+					if ( event.isPropagationStopped() ) {
+						lastElement.removeEventListener( type, stopPropagationCallback );
+					}
+
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = Date.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( Array.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && toType( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	if ( a == null ) {
+		return "";
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			if ( val == null ) {
+				return null;
+			}
+
+			if ( Array.isArray( val ) ) {
+				return jQuery.map( val, function( val ) {
+					return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+				} );
+			}
+
+			return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rantiCache = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+		if ( isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() + " " ] =
+									( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] )
+										.concat( match[ 2 ] );
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() + " " ];
+					}
+					return match == null ? null : match.join( ", " );
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 15
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available and should be processed, append data to url
+			if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add or update anti-cache param if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rantiCache, "$1" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url, options ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+
+		// Only evaluate the response if it is successful (gh-4126)
+		// dataFilter is not invoked for failure responses, so using it instead
+		// of the default converter is kludgy but it works.
+		converters: {
+			"text script": function() {}
+		},
+		dataFilter: function( response ) {
+			jQuery.globalEval( response, options );
+		}
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var htmlIsFunction = isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.ontimeout =
+									xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain or forced-by-attrs requests
+	if ( s.crossDomain || s.scriptAttrs ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" )
+					.attr( s.scriptAttrs || {} )
+					.prop( { charset: s.scriptCharset, src: s.url } )
+					.on( "load error", callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					} );
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = stripAndCollapse( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+
+	// offset() relates an element's border box to the document origin
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var rect, win,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		// Get document-relative position by adding viewport scroll to viewport-relative gBCR
+		rect = elem.getBoundingClientRect();
+		win = elem.ownerDocument.defaultView;
+		return {
+			top: rect.top + win.pageYOffset,
+			left: rect.left + win.pageXOffset
+		};
+	},
+
+	// position() relates an element's margin box to its offset parent's padding box
+	// This corresponds to the behavior of CSS absolute positioning
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset, doc,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// position:fixed elements are offset from the viewport, which itself always has zero offset
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume position:fixed implies availability of getBoundingClientRect
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			offset = this.offset();
+
+			// Account for the *real* offset parent, which can be the document or its root element
+			// when a statically positioned element is identified
+			doc = elem.ownerDocument;
+			offsetParent = elem.offsetParent || doc.documentElement;
+			while ( offsetParent &&
+				( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) {
+
+				offsetParent = offsetParent.parentNode;
+			}
+			if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
+
+				// Incorporate borders into its offset, since they are outside its content origin
+				parentOffset = jQuery( offsetParent ).offset();
+				parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
+				parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
+			}
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+
+			// Coalesce documents and windows
+			var win;
+			if ( isWindow( elem ) ) {
+				win = elem;
+			} else if ( elem.nodeType === 9 ) {
+				win = elem.defaultView;
+			}
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	}
+} );
+
+// Bind a function to a context, optionally partially applying any
+// arguments.
+// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
+// However, it is not slated for removal any time soon
+jQuery.proxy = function( fn, context ) {
+	var tmp, args, proxy;
+
+	if ( typeof context === "string" ) {
+		tmp = fn[ context ];
+		context = fn;
+		fn = tmp;
+	}
+
+	// Quick check to determine if target is callable, in the spec
+	// this throws a TypeError, but we will just return undefined.
+	if ( !isFunction( fn ) ) {
+		return undefined;
+	}
+
+	// Simulated bind
+	args = slice.call( arguments, 2 );
+	proxy = function() {
+		return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+	};
+
+	// Set the guid of unique handler to the same of original handler, so it can be removed
+	proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+	return proxy;
+};
+
+jQuery.holdReady = function( hold ) {
+	if ( hold ) {
+		jQuery.readyWait++;
+	} else {
+		jQuery.ready( true );
+	}
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+jQuery.isFunction = isFunction;
+jQuery.isWindow = isWindow;
+jQuery.camelCase = camelCase;
+jQuery.type = toType;
+
+jQuery.now = Date.now;
+
+jQuery.isNumeric = function( obj ) {
+
+	// As of jQuery 3.0, isNumeric is limited to
+	// strings and numbers (primitives or objects)
+	// that can be coerced to finite numbers (gh-2662)
+	var type = jQuery.type( obj );
+	return ( type === "number" || type === "string" ) &&
+
+		// parseFloat NaNs numeric-cast false positives ("")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		!isNaN( obj - parseFloat( obj ) );
+};
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
+/**!
+ * @fileOverview Kickass library to create and place poppers near their reference elements.
+ * @version 1.14.5
+ * @license
+ * Copyright (c) 2016 Federico Zivolo and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+(function (global, factory) {
+	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+	typeof define === 'function' && define.amd ? define(factory) :
+	(global.Popper = factory());
+}(this, (function () { 'use strict';
+
+var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
+
+var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+var timeoutDuration = 0;
+for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+  if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+    timeoutDuration = 1;
+    break;
+  }
+}
+
+function microtaskDebounce(fn) {
+  var called = false;
+  return function () {
+    if (called) {
+      return;
+    }
+    called = true;
+    window.Promise.resolve().then(function () {
+      called = false;
+      fn();
+    });
+  };
+}
+
+function taskDebounce(fn) {
+  var scheduled = false;
+  return function () {
+    if (!scheduled) {
+      scheduled = true;
+      setTimeout(function () {
+        scheduled = false;
+        fn();
+      }, timeoutDuration);
+    }
+  };
+}
+
+var supportsMicroTasks = isBrowser && window.Promise;
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
+
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+function isFunction(functionToCheck) {
+  var getType = {};
+  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+}
+
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+function getStyleComputedProperty(element, property) {
+  if (element.nodeType !== 1) {
+    return [];
+  }
+  // NOTE: 1 DOM access here
+  var window = element.ownerDocument.defaultView;
+  var css = window.getComputedStyle(element, null);
+  return property ? css[property] : css;
+}
+
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+function getParentNode(element) {
+  if (element.nodeName === 'HTML') {
+    return element;
+  }
+  return element.parentNode || element.host;
+}
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+function getScrollParent(element) {
+  // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+  if (!element) {
+    return document.body;
+  }
+
+  switch (element.nodeName) {
+    case 'HTML':
+    case 'BODY':
+      return element.ownerDocument.body;
+    case '#document':
+      return element.body;
+  }
+
+  // Firefox want us to check `-x` and `-y` variations as well
+
+  var _getStyleComputedProp = getStyleComputedProperty(element),
+      overflow = _getStyleComputedProp.overflow,
+      overflowX = _getStyleComputedProp.overflowX,
+      overflowY = _getStyleComputedProp.overflowY;
+
+  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+    return element;
+  }
+
+  return getScrollParent(getParentNode(element));
+}
+
+var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
+var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
+
+/**
+ * Determines if the browser is Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @param {Number} version to check
+ * @returns {Boolean} isIE
+ */
+function isIE(version) {
+  if (version === 11) {
+    return isIE11;
+  }
+  if (version === 10) {
+    return isIE10;
+  }
+  return isIE11 || isIE10;
+}
+
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+function getOffsetParent(element) {
+  if (!element) {
+    return document.documentElement;
+  }
+
+  var noOffsetParent = isIE(10) ? document.body : null;
+
+  // NOTE: 1 DOM access here
+  var offsetParent = element.offsetParent || null;
+  // Skip hidden elements which don't have an offsetParent
+  while (offsetParent === noOffsetParent && element.nextElementSibling) {
+    offsetParent = (element = element.nextElementSibling).offsetParent;
+  }
+
+  var nodeName = offsetParent && offsetParent.nodeName;
+
+  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+    return element ? element.ownerDocument.documentElement : document.documentElement;
+  }
+
+  // .offsetParent will return the closest TH, TD or TABLE in case
+  // no offsetParent is present, I hate this job...
+  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {
+    return getOffsetParent(offsetParent);
+  }
+
+  return offsetParent;
+}
+
+function isOffsetContainer(element) {
+  var nodeName = element.nodeName;
+
+  if (nodeName === 'BODY') {
+    return false;
+  }
+  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;
+}
+
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+function getRoot(node) {
+  if (node.parentNode !== null) {
+    return getRoot(node.parentNode);
+  }
+
+  return node;
+}
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+function findCommonOffsetParent(element1, element2) {
+  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+    return document.documentElement;
+  }
+
+  // Here we make sure to give as "start" the element that comes first in the DOM
+  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;
+  var start = order ? element1 : element2;
+  var end = order ? element2 : element1;
+
+  // Get common ancestor container
+  var range = document.createRange();
+  range.setStart(start, 0);
+  range.setEnd(end, 0);
+  var commonAncestorContainer = range.commonAncestorContainer;
+
+  // Both nodes are inside #document
+
+  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {
+    if (isOffsetContainer(commonAncestorContainer)) {
+      return commonAncestorContainer;
+    }
+
+    return getOffsetParent(commonAncestorContainer);
+  }
+
+  // one of the nodes is inside shadowDOM, find which one
+  var element1root = getRoot(element1);
+  if (element1root.host) {
+    return findCommonOffsetParent(element1root.host, element2);
+  } else {
+    return findCommonOffsetParent(element1, getRoot(element2).host);
+  }
+}
+
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+function getScroll(element) {
+  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';
+
+  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+  var nodeName = element.nodeName;
+
+  if (nodeName === 'BODY' || nodeName === 'HTML') {
+    var html = element.ownerDocument.documentElement;
+    var scrollingElement = element.ownerDocument.scrollingElement || html;
+    return scrollingElement[upperSide];
+  }
+
+  return element[upperSide];
+}
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+function includeScroll(rect, element) {
+  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+  var scrollTop = getScroll(element, 'top');
+  var scrollLeft = getScroll(element, 'left');
+  var modifier = subtract ? -1 : 1;
+  rect.top += scrollTop * modifier;
+  rect.bottom += scrollTop * modifier;
+  rect.left += scrollLeft * modifier;
+  rect.right += scrollLeft * modifier;
+  return rect;
+}
+
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+function getBordersSize(styles, axis) {
+  var sideA = axis === 'x' ? 'Left' : 'Top';
+  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+  return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
+}
+
+function getSize(axis, body, html, computedStyle) {
+  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);
+}
+
+function getWindowSizes(document) {
+  var body = document.body;
+  var html = document.documentElement;
+  var computedStyle = isIE(10) && getComputedStyle(html);
+
+  return {
+    height: getSize('Height', body, html, computedStyle),
+    width: getSize('Width', body, html, computedStyle)
+  };
+}
+
+var classCallCheck = function (instance, Constructor) {
+  if (!(instance instanceof Constructor)) {
+    throw new TypeError("Cannot call a class as a function");
+  }
+};
+
+var createClass = function () {
+  function defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  return function (Constructor, protoProps, staticProps) {
+    if (protoProps) defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) defineProperties(Constructor, staticProps);
+    return Constructor;
+  };
+}();
+
+
+
+
+
+var defineProperty = function (obj, key, value) {
+  if (key in obj) {
+    Object.defineProperty(obj, key, {
+      value: value,
+      enumerable: true,
+      configurable: true,
+      writable: true
+    });
+  } else {
+    obj[key] = value;
+  }
+
+  return obj;
+};
+
+var _extends = Object.assign || function (target) {
+  for (var i = 1; i < arguments.length; i++) {
+    var source = arguments[i];
+
+    for (var key in source) {
+      if (Object.prototype.hasOwnProperty.call(source, key)) {
+        target[key] = source[key];
+      }
+    }
+  }
+
+  return target;
+};
+
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+function getClientRect(offsets) {
+  return _extends({}, offsets, {
+    right: offsets.left + offsets.width,
+    bottom: offsets.top + offsets.height
+  });
+}
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+function getBoundingClientRect(element) {
+  var rect = {};
+
+  // IE10 10 FIX: Please, don't ask, the element isn't
+  // considered in DOM in some circumstances...
+  // This isn't reproducible in IE10 compatibility mode of IE11
+  try {
+    if (isIE(10)) {
+      rect = element.getBoundingClientRect();
+      var scrollTop = getScroll(element, 'top');
+      var scrollLeft = getScroll(element, 'left');
+      rect.top += scrollTop;
+      rect.left += scrollLeft;
+      rect.bottom += scrollTop;
+      rect.right += scrollLeft;
+    } else {
+      rect = element.getBoundingClientRect();
+    }
+  } catch (e) {}
+
+  var result = {
+    left: rect.left,
+    top: rect.top,
+    width: rect.right - rect.left,
+    height: rect.bottom - rect.top
+  };
+
+  // subtract scrollbar size from sizes
+  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
+  var width = sizes.width || element.clientWidth || result.right - result.left;
+  var height = sizes.height || element.clientHeight || result.bottom - result.top;
+
+  var horizScrollbar = element.offsetWidth - width;
+  var vertScrollbar = element.offsetHeight - height;
+
+  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+  // we make this check conditional for performance reasons
+  if (horizScrollbar || vertScrollbar) {
+    var styles = getStyleComputedProperty(element);
+    horizScrollbar -= getBordersSize(styles, 'x');
+    vertScrollbar -= getBordersSize(styles, 'y');
+
+    result.width -= horizScrollbar;
+    result.height -= vertScrollbar;
+  }
+
+  return getClientRect(result);
+}
+
+function getOffsetRectRelativeToArbitraryNode(children, parent) {
+  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+  var isIE10 = isIE(10);
+  var isHTML = parent.nodeName === 'HTML';
+  var childrenRect = getBoundingClientRect(children);
+  var parentRect = getBoundingClientRect(parent);
+  var scrollParent = getScrollParent(children);
+
+  var styles = getStyleComputedProperty(parent);
+  var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
+  var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
+
+  // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+  if (fixedPosition && isHTML) {
+    parentRect.top = Math.max(parentRect.top, 0);
+    parentRect.left = Math.max(parentRect.left, 0);
+  }
+  var offsets = getClientRect({
+    top: childrenRect.top - parentRect.top - borderTopWidth,
+    left: childrenRect.left - parentRect.left - borderLeftWidth,
+    width: childrenRect.width,
+    height: childrenRect.height
+  });
+  offsets.marginTop = 0;
+  offsets.marginLeft = 0;
+
+  // Subtract margins of documentElement in case it's being used as parent
+  // we do this only on HTML because it's the only element that behaves
+  // differently when margins are applied to it. The margins are included in
+  // the box of the documentElement, in the other cases not.
+  if (!isIE10 && isHTML) {
+    var marginTop = parseFloat(styles.marginTop, 10);
+    var marginLeft = parseFloat(styles.marginLeft, 10);
+
+    offsets.top -= borderTopWidth - marginTop;
+    offsets.bottom -= borderTopWidth - marginTop;
+    offsets.left -= borderLeftWidth - marginLeft;
+    offsets.right -= borderLeftWidth - marginLeft;
+
+    // Attach marginTop and marginLeft because in some circumstances we may need them
+    offsets.marginTop = marginTop;
+    offsets.marginLeft = marginLeft;
+  }
+
+  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
+    offsets = includeScroll(offsets, parent);
+  }
+
+  return offsets;
+}
+
+function getViewportOffsetRectRelativeToArtbitraryNode(element) {
+  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+  var html = element.ownerDocument.documentElement;
+  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+  var width = Math.max(html.clientWidth, window.innerWidth || 0);
+  var height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+  var scrollTop = !excludeScroll ? getScroll(html) : 0;
+  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+  var offset = {
+    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+    width: width,
+    height: height
+  };
+
+  return getClientRect(offset);
+}
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+function isFixed(element) {
+  var nodeName = element.nodeName;
+  if (nodeName === 'BODY' || nodeName === 'HTML') {
+    return false;
+  }
+  if (getStyleComputedProperty(element, 'position') === 'fixed') {
+    return true;
+  }
+  return isFixed(getParentNode(element));
+}
+
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+function getFixedPositionOffsetParent(element) {
+  // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+  if (!element || !element.parentElement || isIE()) {
+    return document.documentElement;
+  }
+  var el = element.parentElement;
+  while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+    el = el.parentElement;
+  }
+  return el || document.documentElement;
+}
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+function getBoundaries(popper, reference, padding, boundariesElement) {
+  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+  // NOTE: 1 DOM access here
+
+  var boundaries = { top: 0, left: 0 };
+  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+
+  // Handle viewport case
+  if (boundariesElement === 'viewport') {
+    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+  } else {
+    // Handle other cases based on DOM element used as boundaries
+    var boundariesNode = void 0;
+    if (boundariesElement === 'scrollParent') {
+      boundariesNode = getScrollParent(getParentNode(reference));
+      if (boundariesNode.nodeName === 'BODY') {
+        boundariesNode = popper.ownerDocument.documentElement;
+      }
+    } else if (boundariesElement === 'window') {
+      boundariesNode = popper.ownerDocument.documentElement;
+    } else {
+      boundariesNode = boundariesElement;
+    }
+
+    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
+
+    // In case of HTML, we need a different computation
+    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+      var _getWindowSizes = getWindowSizes(popper.ownerDocument),
+          height = _getWindowSizes.height,
+          width = _getWindowSizes.width;
+
+      boundaries.top += offsets.top - offsets.marginTop;
+      boundaries.bottom = height + offsets.top;
+      boundaries.left += offsets.left - offsets.marginLeft;
+      boundaries.right = width + offsets.left;
+    } else {
+      // for all the other DOM elements, this one is good
+      boundaries = offsets;
+    }
+  }
+
+  // Add paddings
+  padding = padding || 0;
+  var isPaddingNumber = typeof padding === 'number';
+  boundaries.left += isPaddingNumber ? padding : padding.left || 0;
+  boundaries.top += isPaddingNumber ? padding : padding.top || 0;
+  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
+  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
+
+  return boundaries;
+}
+
+function getArea(_ref) {
+  var width = _ref.width,
+      height = _ref.height;
+
+  return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {
+  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
+
+  if (placement.indexOf('auto') === -1) {
+    return placement;
+  }
+
+  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);
+
+  var rects = {
+    top: {
+      width: boundaries.width,
+      height: refRect.top - boundaries.top
+    },
+    right: {
+      width: boundaries.right - refRect.right,
+      height: boundaries.height
+    },
+    bottom: {
+      width: boundaries.width,
+      height: boundaries.bottom - refRect.bottom
+    },
+    left: {
+      width: refRect.left - boundaries.left,
+      height: boundaries.height
+    }
+  };
+
+  var sortedAreas = Object.keys(rects).map(function (key) {
+    return _extends({
+      key: key
+    }, rects[key], {
+      area: getArea(rects[key])
+    });
+  }).sort(function (a, b) {
+    return b.area - a.area;
+  });
+
+  var filteredAreas = sortedAreas.filter(function (_ref2) {
+    var width = _ref2.width,
+        height = _ref2.height;
+    return width >= popper.clientWidth && height >= popper.clientHeight;
+  });
+
+  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;
+
+  var variation = placement.split('-')[1];
+
+  return computedPlacement + (variation ? '-' + variation : '');
+}
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+function getReferenceOffsets(state, popper, reference) {
+  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+
+  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
+  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
+
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+function getOuterSizes(element) {
+  var window = element.ownerDocument.defaultView;
+  var styles = window.getComputedStyle(element);
+  var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
+  var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
+  var result = {
+    width: element.offsetWidth + y,
+    height: element.offsetHeight + x
+  };
+  return result;
+}
+
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+function getOppositePlacement(placement) {
+  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+  return placement.replace(/left|right|bottom|top/g, function (matched) {
+    return hash[matched];
+  });
+}
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+function getPopperOffsets(popper, referenceOffsets, placement) {
+  placement = placement.split('-')[0];
+
+  // Get popper node sizes
+  var popperRect = getOuterSizes(popper);
+
+  // Add position, width and height to our offsets object
+  var popperOffsets = {
+    width: popperRect.width,
+    height: popperRect.height
+  };
+
+  // depending by the popper placement we have to compute its offsets slightly differently
+  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+  var mainSide = isHoriz ? 'top' : 'left';
+  var secondarySide = isHoriz ? 'left' : 'top';
+  var measurement = isHoriz ? 'height' : 'width';
+  var secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
+  if (placement === secondarySide) {
+    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+  } else {
+    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
+  }
+
+  return popperOffsets;
+}
+
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function find(arr, check) {
+  // use native find if supported
+  if (Array.prototype.find) {
+    return arr.find(check);
+  }
+
+  // use `filter` to obtain the same behavior of `find`
+  return arr.filter(check)[0];
+}
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+function findIndex(arr, prop, value) {
+  // use native findIndex if supported
+  if (Array.prototype.findIndex) {
+    return arr.findIndex(function (cur) {
+      return cur[prop] === value;
+    });
+  }
+
+  // use `find` + `indexOf` if `findIndex` isn't supported
+  var match = find(arr, function (obj) {
+    return obj[prop] === value;
+  });
+  return arr.indexOf(match);
+}
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+function runModifiers(modifiers, data, ends) {
+  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+  modifiersToRun.forEach(function (modifier) {
+    if (modifier['function']) {
+      // eslint-disable-line dot-notation
+      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+    }
+    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+    if (modifier.enabled && isFunction(fn)) {
+      // Add properties to offsets to make them a complete clientRect object
+      // we do this before each modifier to make sure the previous one doesn't
+      // mess with these values
+      data.offsets.popper = getClientRect(data.offsets.popper);
+      data.offsets.reference = getClientRect(data.offsets.reference);
+
+      data = fn(data, modifier);
+    }
+  });
+
+  return data;
+}
+
+/**
+ * Updates the position of the popper, computing the new offsets and applying
+ * the new style.<br />
+ * Prefer `scheduleUpdate` over `update` because of performance reasons.
+ * @method
+ * @memberof Popper
+ */
+function update() {
+  // if popper is destroyed, don't perform any further update
+  if (this.state.isDestroyed) {
+    return;
+  }
+
+  var data = {
+    instance: this,
+    styles: {},
+    arrowStyles: {},
+    attributes: {},
+    flipped: false,
+    offsets: {}
+  };
+
+  // compute reference element offsets
+  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
+
+  // compute auto placement, store placement inside the data object,
+  // modifiers will be able to edit `placement` if needed
+  // and refer to originalPlacement to know the original value
+  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);
+
+  // store the computed placement inside `originalPlacement`
+  data.originalPlacement = data.placement;
+
+  data.positionFixed = this.options.positionFixed;
+
+  // compute the popper offsets
+  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
+
+  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
+
+  // run the modifiers
+  data = runModifiers(this.modifiers, data);
+
+  // the first `update` will call `onCreate` callback
+  // the other ones will call `onUpdate` callback
+  if (!this.state.isCreated) {
+    this.state.isCreated = true;
+    this.options.onCreate(data);
+  } else {
+    this.options.onUpdate(data);
+  }
+}
+
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+function isModifierEnabled(modifiers, modifierName) {
+  return modifiers.some(function (_ref) {
+    var name = _ref.name,
+        enabled = _ref.enabled;
+    return enabled && name === modifierName;
+  });
+}
+
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+function getSupportedPropertyName(property) {
+  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+  for (var i = 0; i < prefixes.length; i++) {
+    var prefix = prefixes[i];
+    var toCheck = prefix ? '' + prefix + upperProp : property;
+    if (typeof document.body.style[toCheck] !== 'undefined') {
+      return toCheck;
+    }
+  }
+  return null;
+}
+
+/**
+ * Destroys the popper.
+ * @method
+ * @memberof Popper
+ */
+function destroy() {
+  this.state.isDestroyed = true;
+
+  // touch DOM only if `applyStyle` modifier is enabled
+  if (isModifierEnabled(this.modifiers, 'applyStyle')) {
+    this.popper.removeAttribute('x-placement');
+    this.popper.style.position = '';
+    this.popper.style.top = '';
+    this.popper.style.left = '';
+    this.popper.style.right = '';
+    this.popper.style.bottom = '';
+    this.popper.style.willChange = '';
+    this.popper.style[getSupportedPropertyName('transform')] = '';
+  }
+
+  this.disableEventListeners();
+
+  // remove the popper if user explicity asked for the deletion on destroy
+  // do not use `remove` because IE11 doesn't support it
+  if (this.options.removeOnDestroy) {
+    this.popper.parentNode.removeChild(this.popper);
+  }
+  return this;
+}
+
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+function getWindow(element) {
+  var ownerDocument = element.ownerDocument;
+  return ownerDocument ? ownerDocument.defaultView : window;
+}
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+  var isBody = scrollParent.nodeName === 'BODY';
+  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+  target.addEventListener(event, callback, { passive: true });
+
+  if (!isBody) {
+    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);
+  }
+  scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function setupEventListeners(reference, options, state, updateBound) {
+  // Resize event listener on window
+  state.updateBound = updateBound;
+  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+  // Scroll event listener on scroll parents
+  var scrollElement = getScrollParent(reference);
+  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);
+  state.scrollElement = scrollElement;
+  state.eventsEnabled = true;
+
+  return state;
+}
+
+/**
+ * It will add resize/scroll events and start recalculating
+ * position of the popper element when they are triggered.
+ * @method
+ * @memberof Popper
+ */
+function enableEventListeners() {
+  if (!this.state.eventsEnabled) {
+    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);
+  }
+}
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+function removeEventListeners(reference, state) {
+  // Remove resize event listener on window
+  getWindow(reference).removeEventListener('resize', state.updateBound);
+
+  // Remove scroll event listener on scroll parents
+  state.scrollParents.forEach(function (target) {
+    target.removeEventListener('scroll', state.updateBound);
+  });
+
+  // Reset state
+  state.updateBound = null;
+  state.scrollParents = [];
+  state.scrollElement = null;
+  state.eventsEnabled = false;
+  return state;
+}
+
+/**
+ * It will remove resize/scroll events and won't recalculate popper position
+ * when they are triggered. It also won't trigger `onUpdate` callback anymore,
+ * unless you call `update` method manually.
+ * @method
+ * @memberof Popper
+ */
+function disableEventListeners() {
+  if (this.state.eventsEnabled) {
+    cancelAnimationFrame(this.scheduleUpdate);
+    this.state = removeEventListeners(this.reference, this.state);
+  }
+}
+
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+function isNumeric(n) {
+  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setStyles(element, styles) {
+  Object.keys(styles).forEach(function (prop) {
+    var unit = '';
+    // add unit if the value is numeric and is one of the following
+    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {
+      unit = 'px';
+    }
+    element.style[prop] = styles[prop] + unit;
+  });
+}
+
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+function setAttributes(element, attributes) {
+  Object.keys(attributes).forEach(function (prop) {
+    var value = attributes[prop];
+    if (value !== false) {
+      element.setAttribute(prop, attributes[prop]);
+    } else {
+      element.removeAttribute(prop);
+    }
+  });
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} data.styles - List of style properties - values to apply to popper element
+ * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The same data object
+ */
+function applyStyle(data) {
+  // any property present in `data.styles` will be applied to the popper,
+  // in this way we can make the 3rd party modifiers add custom styles to it
+  // Be aware, modifiers could override the properties defined in the previous
+  // lines of this modifier!
+  setStyles(data.instance.popper, data.styles);
+
+  // any property present in `data.attributes` will be applied to the popper,
+  // they will be set as HTML attributes of the element
+  setAttributes(data.instance.popper, data.attributes);
+
+  // if arrowElement is defined and arrowStyles has some properties
+  if (data.arrowElement && Object.keys(data.arrowStyles).length) {
+    setStyles(data.arrowElement, data.arrowStyles);
+  }
+
+  return data;
+}
+
+/**
+ * Set the x-placement attribute before everything else because it could be used
+ * to add margins to the popper margins needs to be calculated to get the
+ * correct popper offsets.
+ * @method
+ * @memberof Popper.modifiers
+ * @param {HTMLElement} reference - The reference element used to position the popper
+ * @param {HTMLElement} popper - The HTML element used as popper
+ * @param {Object} options - Popper.js options
+ */
+function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
+  // compute reference element offsets
+  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
+
+  // compute auto placement, store placement inside the data object,
+  // modifiers will be able to edit `placement` if needed
+  // and refer to originalPlacement to know the original value
+  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);
+
+  popper.setAttribute('x-placement', placement);
+
+  // Apply `position` to popper before anything else because
+  // without the position applied we can't guarantee correct computations
+  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
+
+  return options;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function computeStyle(data, options) {
+  var x = options.x,
+      y = options.y;
+  var popper = data.offsets.popper;
+
+  // Remove this legacy support in Popper.js v2
+
+  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
+    return modifier.name === 'applyStyle';
+  }).gpuAcceleration;
+  if (legacyGpuAccelerationOption !== undefined) {
+    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');
+  }
+  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;
+
+  var offsetParent = getOffsetParent(data.instance.popper);
+  var offsetParentRect = getBoundingClientRect(offsetParent);
+
+  // Styles
+  var styles = {
+    position: popper.position
+  };
+
+  // Avoid blurry text by using full pixel integers.
+  // For pixel-perfect positioning, top/bottom prefers rounded
+  // values, while left/right prefers floored values.
+  var offsets = {
+    left: Math.floor(popper.left),
+    top: Math.round(popper.top),
+    bottom: Math.round(popper.bottom),
+    right: Math.floor(popper.right)
+  };
+
+  var sideA = x === 'bottom' ? 'top' : 'bottom';
+  var sideB = y === 'right' ? 'left' : 'right';
+
+  // if gpuAcceleration is set to `true` and transform is supported,
+  //  we use `translate3d` to apply the position to the popper we
+  // automatically use the supported prefixed version if needed
+  var prefixedProperty = getSupportedPropertyName('transform');
+
+  // now, let's make a step back and look at this code closely (wtf?)
+  // If the content of the popper grows once it's been positioned, it
+  // may happen that the popper gets misplaced because of the new content
+  // overflowing its reference element
+  // To avoid this problem, we provide two options (x and y), which allow
+  // the consumer to define the offset origin.
+  // If we position a popper on top of a reference element, we can set
+  // `x` to `top` to make the popper grow towards its top instead of
+  // its bottom.
+  var left = void 0,
+      top = void 0;
+  if (sideA === 'bottom') {
+    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)
+    // and not the bottom of the html element
+    if (offsetParent.nodeName === 'HTML') {
+      top = -offsetParent.clientHeight + offsets.bottom;
+    } else {
+      top = -offsetParentRect.height + offsets.bottom;
+    }
+  } else {
+    top = offsets.top;
+  }
+  if (sideB === 'right') {
+    if (offsetParent.nodeName === 'HTML') {
+      left = -offsetParent.clientWidth + offsets.right;
+    } else {
+      left = -offsetParentRect.width + offsets.right;
+    }
+  } else {
+    left = offsets.left;
+  }
+  if (gpuAcceleration && prefixedProperty) {
+    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';
+    styles[sideA] = 0;
+    styles[sideB] = 0;
+    styles.willChange = 'transform';
+  } else {
+    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties
+    var invertTop = sideA === 'bottom' ? -1 : 1;
+    var invertLeft = sideB === 'right' ? -1 : 1;
+    styles[sideA] = top * invertTop;
+    styles[sideB] = left * invertLeft;
+    styles.willChange = sideA + ', ' + sideB;
+  }
+
+  // Attributes
+  var attributes = {
+    'x-placement': data.placement
+  };
+
+  // Update `data` attributes, styles and arrowStyles
+  data.attributes = _extends({}, attributes, data.attributes);
+  data.styles = _extends({}, styles, data.styles);
+  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);
+
+  return data;
+}
+
+/**
+ * Helper used to know if the given modifier depends from another one.<br />
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+function isModifierRequired(modifiers, requestingName, requestedName) {
+  var requesting = find(modifiers, function (_ref) {
+    var name = _ref.name;
+    return name === requestingName;
+  });
+
+  var isRequired = !!requesting && modifiers.some(function (modifier) {
+    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;
+  });
+
+  if (!isRequired) {
+    var _requesting = '`' + requestingName + '`';
+    var requested = '`' + requestedName + '`';
+    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');
+  }
+  return isRequired;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function arrow(data, options) {
+  var _data$offsets$arrow;
+
+  // arrow depends on keepTogether in order to work
+  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
+    return data;
+  }
+
+  var arrowElement = options.element;
+
+  // if arrowElement is a string, suppose it's a CSS selector
+  if (typeof arrowElement === 'string') {
+    arrowElement = data.instance.popper.querySelector(arrowElement);
+
+    // if arrowElement is not found, don't run the modifier
+    if (!arrowElement) {
+      return data;
+    }
+  } else {
+    // if the arrowElement isn't a query selector we must check that the
+    // provided DOM node is child of its popper node
+    if (!data.instance.popper.contains(arrowElement)) {
+      console.warn('WARNING: `arrow.element` must be child of its popper element!');
+      return data;
+    }
+  }
+
+  var placement = data.placement.split('-')[0];
+  var _data$offsets = data.offsets,
+      popper = _data$offsets.popper,
+      reference = _data$offsets.reference;
+
+  var isVertical = ['left', 'right'].indexOf(placement) !== -1;
+
+  var len = isVertical ? 'height' : 'width';
+  var sideCapitalized = isVertical ? 'Top' : 'Left';
+  var side = sideCapitalized.toLowerCase();
+  var altSide = isVertical ? 'left' : 'top';
+  var opSide = isVertical ? 'bottom' : 'right';
+  var arrowElementSize = getOuterSizes(arrowElement)[len];
+
+  //
+  // extends keepTogether behavior making sure the popper and its
+  // reference have enough pixels in conjunction
+  //
+
+  // top/left side
+  if (reference[opSide] - arrowElementSize < popper[side]) {
+    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
+  }
+  // bottom/right side
+  if (reference[side] + arrowElementSize > popper[opSide]) {
+    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
+  }
+  data.offsets.popper = getClientRect(data.offsets.popper);
+
+  // compute center of the popper
+  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
+
+  // Compute the sideValue using the updated popper offsets
+  // take popper margin in account because we don't have this info available
+  var css = getStyleComputedProperty(data.instance.popper);
+  var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
+  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
+  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
+
+  // prevent arrowElement from being placed not contiguously to its popper
+  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
+
+  data.arrowElement = arrowElement;
+  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
+
+  return data;
+}
+
+/**
+ * Get the opposite placement variation of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement variation
+ * @returns {String} flipped placement variation
+ */
+function getOppositeVariation(variation) {
+  if (variation === 'end') {
+    return 'start';
+  } else if (variation === 'start') {
+    return 'end';
+  }
+  return variation;
+}
+
+/**
+ * List of accepted placements to use as values of the `placement` option.<br />
+ * Valid placements are:
+ * - `auto`
+ * - `top`
+ * - `right`
+ * - `bottom`
+ * - `left`
+ *
+ * Each placement can have a variation from this list:
+ * - `-start`
+ * - `-end`
+ *
+ * Variations are interpreted easily if you think of them as the left to right
+ * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`
+ * is right.<br />
+ * Vertically (`left` and `right`), `start` is top and `end` is bottom.
+ *
+ * Some valid examples are:
+ * - `top-end` (on top of reference, right aligned)
+ * - `right-start` (on right of reference, top aligned)
+ * - `bottom` (on bottom, centered)
+ * - `auto-end` (on the side with more space available, alignment depends by placement)
+ *
+ * @static
+ * @type {Array}
+ * @enum {String}
+ * @readonly
+ * @method placements
+ * @memberof Popper
+ */
+var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];
+
+// Get rid of `auto` `auto-start` and `auto-end`
+var validPlacements = placements.slice(3);
+
+/**
+ * Given an initial placement, returns all the subsequent placements
+ * clockwise (or counter-clockwise).
+ *
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement - A valid placement (it accepts variations)
+ * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
+ * @returns {Array} placements including their variations
+ */
+function clockwise(placement) {
+  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+  var index = validPlacements.indexOf(placement);
+  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));
+  return counter ? arr.reverse() : arr;
+}
+
+var BEHAVIORS = {
+  FLIP: 'flip',
+  CLOCKWISE: 'clockwise',
+  COUNTERCLOCKWISE: 'counterclockwise'
+};
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function flip(data, options) {
+  // if `inner` modifier is enabled, we can't use the `flip` modifier
+  if (isModifierEnabled(data.instance.modifiers, 'inner')) {
+    return data;
+  }
+
+  if (data.flipped && data.placement === data.originalPlacement) {
+    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides
+    return data;
+  }
+
+  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
+
+  var placement = data.placement.split('-')[0];
+  var placementOpposite = getOppositePlacement(placement);
+  var variation = data.placement.split('-')[1] || '';
+
+  var flipOrder = [];
+
+  switch (options.behavior) {
+    case BEHAVIORS.FLIP:
+      flipOrder = [placement, placementOpposite];
+      break;
+    case BEHAVIORS.CLOCKWISE:
+      flipOrder = clockwise(placement);
+      break;
+    case BEHAVIORS.COUNTERCLOCKWISE:
+      flipOrder = clockwise(placement, true);
+      break;
+    default:
+      flipOrder = options.behavior;
+  }
+
+  flipOrder.forEach(function (step, index) {
+    if (placement !== step || flipOrder.length === index + 1) {
+      return data;
+    }
+
+    placement = data.placement.split('-')[0];
+    placementOpposite = getOppositePlacement(placement);
+
+    var popperOffsets = data.offsets.popper;
+    var refOffsets = data.offsets.reference;
+
+    // using floor because the reference offsets may contain decimals we are not going to consider here
+    var floor = Math.floor;
+    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);
+
+    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);
+    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);
+    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);
+    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);
+
+    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;
+
+    // flip the variation if required
+    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+    var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);
+
+    if (overlapsRef || overflowsBoundaries || flippedVariation) {
+      // this boolean to detect any flip loop
+      data.flipped = true;
+
+      if (overlapsRef || overflowsBoundaries) {
+        placement = flipOrder[index + 1];
+      }
+
+      if (flippedVariation) {
+        variation = getOppositeVariation(variation);
+      }
+
+      data.placement = placement + (variation ? '-' + variation : '');
+
+      // this object contains `position`, we want to preserve it along with
+      // any additional property we may add in the future
+      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
+
+      data = runModifiers(data.instance.modifiers, data, 'flip');
+    }
+  });
+  return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function keepTogether(data) {
+  var _data$offsets = data.offsets,
+      popper = _data$offsets.popper,
+      reference = _data$offsets.reference;
+
+  var placement = data.placement.split('-')[0];
+  var floor = Math.floor;
+  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;
+  var side = isVertical ? 'right' : 'bottom';
+  var opSide = isVertical ? 'left' : 'top';
+  var measurement = isVertical ? 'width' : 'height';
+
+  if (popper[side] < floor(reference[opSide])) {
+    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];
+  }
+  if (popper[opSide] > floor(reference[side])) {
+    data.offsets.popper[opSide] = floor(reference[side]);
+  }
+
+  return data;
+}
+
+/**
+ * Converts a string containing value + unit into a px value number
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} str - Value + unit string
+ * @argument {String} measurement - `height` or `width`
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @returns {Number|String}
+ * Value in pixels, or original string if no values were extracted
+ */
+function toValue(str, measurement, popperOffsets, referenceOffsets) {
+  // separate value from unit
+  var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);
+  var value = +split[1];
+  var unit = split[2];
+
+  // If it's not a number it's an operator, I guess
+  if (!value) {
+    return str;
+  }
+
+  if (unit.indexOf('%') === 0) {
+    var element = void 0;
+    switch (unit) {
+      case '%p':
+        element = popperOffsets;
+        break;
+      case '%':
+      case '%r':
+      default:
+        element = referenceOffsets;
+    }
+
+    var rect = getClientRect(element);
+    return rect[measurement] / 100 * value;
+  } else if (unit === 'vh' || unit === 'vw') {
+    // if is a vh or vw, we calculate the size based on the viewport
+    var size = void 0;
+    if (unit === 'vh') {
+      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
+    } else {
+      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
+    }
+    return size / 100 * value;
+  } else {
+    // if is an explicit pixel unit, we get rid of the unit and keep the value
+    // if is an implicit unit, it's px, and we return just the value
+    return value;
+  }
+}
+
+/**
+ * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.
+ * @function
+ * @memberof {modifiers~offset}
+ * @private
+ * @argument {String} offset
+ * @argument {Object} popperOffsets
+ * @argument {Object} referenceOffsets
+ * @argument {String} basePlacement
+ * @returns {Array} a two cells array with x and y offsets in numbers
+ */
+function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
+  var offsets = [0, 0];
+
+  // Use height if placement is left or right and index is 0 otherwise use width
+  // in this way the first offset will use an axis and the second one
+  // will use the other one
+  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;
+
+  // Split the offset string to obtain a list of values and operands
+  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)
+  var fragments = offset.split(/(\+|\-)/).map(function (frag) {
+    return frag.trim();
+  });
+
+  // Detect if the offset string contains a pair of values or a single one
+  // they could be separated by comma or space
+  var divider = fragments.indexOf(find(fragments, function (frag) {
+    return frag.search(/,|\s/) !== -1;
+  }));
+
+  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {
+    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');
+  }
+
+  // If divider is found, we divide the list of values and operands to divide
+  // them by ofset X and Y.
+  var splitRegex = /\s*,\s*|\s+/;
+  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];
+
+  // Convert the values with units to absolute pixels to allow our computations
+  ops = ops.map(function (op, index) {
+    // Most of the units rely on the orientation of the popper
+    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';
+    var mergeWithPrevious = false;
+    return op
+    // This aggregates any `+` or `-` sign that aren't considered operators
+    // e.g.: 10 + +5 => [10, +, +5]
+    .reduce(function (a, b) {
+      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {
+        a[a.length - 1] = b;
+        mergeWithPrevious = true;
+        return a;
+      } else if (mergeWithPrevious) {
+        a[a.length - 1] += b;
+        mergeWithPrevious = false;
+        return a;
+      } else {
+        return a.concat(b);
+      }
+    }, [])
+    // Here we convert the string values into number values (in px)
+    .map(function (str) {
+      return toValue(str, measurement, popperOffsets, referenceOffsets);
+    });
+  });
+
+  // Loop trough the offsets arrays and execute the operations
+  ops.forEach(function (op, index) {
+    op.forEach(function (frag, index2) {
+      if (isNumeric(frag)) {
+        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);
+      }
+    });
+  });
+  return offsets;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @argument {Number|String} options.offset=0
+ * The offset value as described in the modifier description
+ * @returns {Object} The data object, properly modified
+ */
+function offset(data, _ref) {
+  var offset = _ref.offset;
+  var placement = data.placement,
+      _data$offsets = data.offsets,
+      popper = _data$offsets.popper,
+      reference = _data$offsets.reference;
+
+  var basePlacement = placement.split('-')[0];
+
+  var offsets = void 0;
+  if (isNumeric(+offset)) {
+    offsets = [+offset, 0];
+  } else {
+    offsets = parseOffset(offset, popper, reference, basePlacement);
+  }
+
+  if (basePlacement === 'left') {
+    popper.top += offsets[0];
+    popper.left -= offsets[1];
+  } else if (basePlacement === 'right') {
+    popper.top += offsets[0];
+    popper.left += offsets[1];
+  } else if (basePlacement === 'top') {
+    popper.left += offsets[0];
+    popper.top -= offsets[1];
+  } else if (basePlacement === 'bottom') {
+    popper.left += offsets[0];
+    popper.top += offsets[1];
+  }
+
+  data.popper = popper;
+  return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function preventOverflow(data, options) {
+  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);
+
+  // If offsetParent is the reference element, we really want to
+  // go one step up and use the next offsetParent as reference to
+  // avoid to make this modifier completely useless and look like broken
+  if (data.instance.reference === boundariesElement) {
+    boundariesElement = getOffsetParent(boundariesElement);
+  }
+
+  // NOTE: DOM access here
+  // resets the popper's position so that the document size can be calculated excluding
+  // the size of the popper element itself
+  var transformProp = getSupportedPropertyName('transform');
+  var popperStyles = data.instance.popper.style; // assignment to help minification
+  var top = popperStyles.top,
+      left = popperStyles.left,
+      transform = popperStyles[transformProp];
+
+  popperStyles.top = '';
+  popperStyles.left = '';
+  popperStyles[transformProp] = '';
+
+  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
+
+  // NOTE: DOM access here
+  // restores the original style properties after the offsets have been computed
+  popperStyles.top = top;
+  popperStyles.left = left;
+  popperStyles[transformProp] = transform;
+
+  options.boundaries = boundaries;
+
+  var order = options.priority;
+  var popper = data.offsets.popper;
+
+  var check = {
+    primary: function primary(placement) {
+      var value = popper[placement];
+      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
+        value = Math.max(popper[placement], boundaries[placement]);
+      }
+      return defineProperty({}, placement, value);
+    },
+    secondary: function secondary(placement) {
+      var mainSide = placement === 'right' ? 'left' : 'top';
+      var value = popper[mainSide];
+      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
+        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
+      }
+      return defineProperty({}, mainSide, value);
+    }
+  };
+
+  order.forEach(function (placement) {
+    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
+    popper = _extends({}, popper, check[side](placement));
+  });
+
+  data.offsets.popper = popper;
+
+  return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function shift(data) {
+  var placement = data.placement;
+  var basePlacement = placement.split('-')[0];
+  var shiftvariation = placement.split('-')[1];
+
+  // if shift shiftvariation is specified, run the modifier
+  if (shiftvariation) {
+    var _data$offsets = data.offsets,
+        reference = _data$offsets.reference,
+        popper = _data$offsets.popper;
+
+    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;
+    var side = isVertical ? 'left' : 'top';
+    var measurement = isVertical ? 'width' : 'height';
+
+    var shiftOffsets = {
+      start: defineProperty({}, side, reference[side]),
+      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
+    };
+
+    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
+  }
+
+  return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function hide(data) {
+  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {
+    return data;
+  }
+
+  var refRect = data.offsets.reference;
+  var bound = find(data.instance.modifiers, function (modifier) {
+    return modifier.name === 'preventOverflow';
+  }).boundaries;
+
+  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {
+    // Avoid unnecessary DOM access if visibility hasn't changed
+    if (data.hide === true) {
+      return data;
+    }
+
+    data.hide = true;
+    data.attributes['x-out-of-boundaries'] = '';
+  } else {
+    // Avoid unnecessary DOM access if visibility hasn't changed
+    if (data.hide === false) {
+      return data;
+    }
+
+    data.hide = false;
+    data.attributes['x-out-of-boundaries'] = false;
+  }
+
+  return data;
+}
+
+/**
+ * @function
+ * @memberof Modifiers
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+function inner(data) {
+  var placement = data.placement;
+  var basePlacement = placement.split('-')[0];
+  var _data$offsets = data.offsets,
+      popper = _data$offsets.popper,
+      reference = _data$offsets.reference;
+
+  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;
+
+  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
+
+  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
+
+  data.placement = getOppositePlacement(placement);
+  data.offsets.popper = getClientRect(popper);
+
+  return data;
+}
+
+/**
+ * Modifier function, each modifier can have a function of this type assigned
+ * to its `fn` property.<br />
+ * These functions will be called on each update, this means that you must
+ * make sure they are performant enough to avoid performance bottlenecks.
+ *
+ * @function ModifierFn
+ * @argument {dataObject} data - The data object generated by `update` method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {dataObject} The data object, properly modified
+ */
+
+/**
+ * Modifiers are plugins used to alter the behavior of your poppers.<br />
+ * Popper.js uses a set of 9 modifiers to provide all the basic functionalities
+ * needed by the library.
+ *
+ * Usually you don't want to override the `order`, `fn` and `onLoad` props.
+ * All the other properties are configurations that could be tweaked.
+ * @namespace modifiers
+ */
+var modifiers = {
+  /**
+   * Modifier used to shift the popper on the start or end of its reference
+   * element.<br />
+   * It will read the variation of the `placement` property.<br />
+   * It can be one either `-end` or `-start`.
+   * @memberof modifiers
+   * @inner
+   */
+  shift: {
+    /** @prop {number} order=100 - Index used to define the order of execution */
+    order: 100,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: shift
+  },
+
+  /**
+   * The `offset` modifier can shift your popper on both its axis.
+   *
+   * It accepts the following units:
+   * - `px` or unit-less, interpreted as pixels
+   * - `%` or `%r`, percentage relative to the length of the reference element
+   * - `%p`, percentage relative to the length of the popper element
+   * - `vw`, CSS viewport width unit
+   * - `vh`, CSS viewport height unit
+   *
+   * For length is intended the main axis relative to the placement of the popper.<br />
+   * This means that if the placement is `top` or `bottom`, the length will be the
+   * `width`. In case of `left` or `right`, it will be the `height`.
+   *
+   * You can provide a single value (as `Number` or `String`), or a pair of values
+   * as `String` divided by a comma or one (or more) white spaces.<br />
+   * The latter is a deprecated method because it leads to confusion and will be
+   * removed in v2.<br />
+   * Additionally, it accepts additions and subtractions between different units.
+   * Note that multiplications and divisions aren't supported.
+   *
+   * Valid examples are:
+   * ```
+   * 10
+   * '10%'
+   * '10, 10'
+   * '10%, 10'
+   * '10 + 10%'
+   * '10 - 5vh + 3%'
+   * '-10px + 5vh, 5px - 6%'
+   * ```
+   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
+   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.
+   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).
+   *
+   * @memberof modifiers
+   * @inner
+   */
+  offset: {
+    /** @prop {number} order=200 - Index used to define the order of execution */
+    order: 200,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: offset,
+    /** @prop {Number|String} offset=0
+     * The offset value as described in the modifier description
+     */
+    offset: 0
+  },
+
+  /**
+   * Modifier used to prevent the popper from being positioned outside the boundary.
+   *
+   * A scenario exists where the reference itself is not within the boundaries.<br />
+   * We can say it has "escaped the boundaries" — or just "escaped".<br />
+   * In this case we need to decide whether the popper should either:
+   *
+   * - detach from the reference and remain "trapped" in the boundaries, or
+   * - if it should ignore the boundary and "escape with its reference"
+   *
+   * When `escapeWithReference` is set to`true` and reference is completely
+   * outside its boundaries, the popper will overflow (or completely leave)
+   * the boundaries in order to remain attached to the edge of the reference.
+   *
+   * @memberof modifiers
+   * @inner
+   */
+  preventOverflow: {
+    /** @prop {number} order=300 - Index used to define the order of execution */
+    order: 300,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: preventOverflow,
+    /**
+     * @prop {Array} [priority=['left','right','top','bottom']]
+     * Popper will try to prevent overflow following these priorities by default,
+     * then, it could overflow on the left and on top of the `boundariesElement`
+     */
+    priority: ['left', 'right', 'top', 'bottom'],
+    /**
+     * @prop {number} padding=5
+     * Amount of pixel used to define a minimum distance between the boundaries
+     * and the popper. This makes sure the popper always has a little padding
+     * between the edges of its container
+     */
+    padding: 5,
+    /**
+     * @prop {String|HTMLElement} boundariesElement='scrollParent'
+     * Boundaries used by the modifier. Can be `scrollParent`, `window`,
+     * `viewport` or any DOM element.
+     */
+    boundariesElement: 'scrollParent'
+  },
+
+  /**
+   * Modifier used to make sure the reference and its popper stay near each other
+   * without leaving any gap between the two. Especially useful when the arrow is
+   * enabled and you want to ensure that it points to its reference element.
+   * It cares only about the first axis. You can still have poppers with margin
+   * between the popper and its reference element.
+   * @memberof modifiers
+   * @inner
+   */
+  keepTogether: {
+    /** @prop {number} order=400 - Index used to define the order of execution */
+    order: 400,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: keepTogether
+  },
+
+  /**
+   * This modifier is used to move the `arrowElement` of the popper to make
+   * sure it is positioned between the reference element and its popper element.
+   * It will read the outer size of the `arrowElement` node to detect how many
+   * pixels of conjunction are needed.
+   *
+   * It has no effect if no `arrowElement` is provided.
+   * @memberof modifiers
+   * @inner
+   */
+  arrow: {
+    /** @prop {number} order=500 - Index used to define the order of execution */
+    order: 500,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: arrow,
+    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */
+    element: '[x-arrow]'
+  },
+
+  /**
+   * Modifier used to flip the popper's placement when it starts to overlap its
+   * reference element.
+   *
+   * Requires the `preventOverflow` modifier before it in order to work.
+   *
+   * **NOTE:** this modifier will interrupt the current update cycle and will
+   * restart it if it detects the need to flip the placement.
+   * @memberof modifiers
+   * @inner
+   */
+  flip: {
+    /** @prop {number} order=600 - Index used to define the order of execution */
+    order: 600,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: flip,
+    /**
+     * @prop {String|Array} behavior='flip'
+     * The behavior used to change the popper's placement. It can be one of
+     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid
+     * placements (with optional variations)
+     */
+    behavior: 'flip',
+    /**
+     * @prop {number} padding=5
+     * The popper will flip if it hits the edges of the `boundariesElement`
+     */
+    padding: 5,
+    /**
+     * @prop {String|HTMLElement} boundariesElement='viewport'
+     * The element which will define the boundaries of the popper position.
+     * The popper will never be placed outside of the defined boundaries
+     * (except if `keepTogether` is enabled)
+     */
+    boundariesElement: 'viewport'
+  },
+
+  /**
+   * Modifier used to make the popper flow toward the inner of the reference element.
+   * By default, when this modifier is disabled, the popper will be placed outside
+   * the reference element.
+   * @memberof modifiers
+   * @inner
+   */
+  inner: {
+    /** @prop {number} order=700 - Index used to define the order of execution */
+    order: 700,
+    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */
+    enabled: false,
+    /** @prop {ModifierFn} */
+    fn: inner
+  },
+
+  /**
+   * Modifier used to hide the popper when its reference element is outside of the
+   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can
+   * be used to hide with a CSS selector the popper when its reference is
+   * out of boundaries.
+   *
+   * Requires the `preventOverflow` modifier before it in order to work.
+   * @memberof modifiers
+   * @inner
+   */
+  hide: {
+    /** @prop {number} order=800 - Index used to define the order of execution */
+    order: 800,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: hide
+  },
+
+  /**
+   * Computes the style that will be applied to the popper element to gets
+   * properly positioned.
+   *
+   * Note that this modifier will not touch the DOM, it just prepares the styles
+   * so that `applyStyle` modifier can apply it. This separation is useful
+   * in case you need to replace `applyStyle` with a custom implementation.
+   *
+   * This modifier has `850` as `order` value to maintain backward compatibility
+   * with previous versions of Popper.js. Expect the modifiers ordering method
+   * to change in future major versions of the library.
+   *
+   * @memberof modifiers
+   * @inner
+   */
+  computeStyle: {
+    /** @prop {number} order=850 - Index used to define the order of execution */
+    order: 850,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: computeStyle,
+    /**
+     * @prop {Boolean} gpuAcceleration=true
+     * If true, it uses the CSS 3D transformation to position the popper.
+     * Otherwise, it will use the `top` and `left` properties
+     */
+    gpuAcceleration: true,
+    /**
+     * @prop {string} [x='bottom']
+     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.
+     * Change this if your popper should grow in a direction different from `bottom`
+     */
+    x: 'bottom',
+    /**
+     * @prop {string} [x='left']
+     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.
+     * Change this if your popper should grow in a direction different from `right`
+     */
+    y: 'right'
+  },
+
+  /**
+   * Applies the computed styles to the popper element.
+   *
+   * All the DOM manipulations are limited to this modifier. This is useful in case
+   * you want to integrate Popper.js inside a framework or view library and you
+   * want to delegate all the DOM manipulations to it.
+   *
+   * Note that if you disable this modifier, you must make sure the popper element
+   * has its position set to `absolute` before Popper.js can do its work!
+   *
+   * Just disable this modifier and define your own to achieve the desired effect.
+   *
+   * @memberof modifiers
+   * @inner
+   */
+  applyStyle: {
+    /** @prop {number} order=900 - Index used to define the order of execution */
+    order: 900,
+    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */
+    enabled: true,
+    /** @prop {ModifierFn} */
+    fn: applyStyle,
+    /** @prop {Function} */
+    onLoad: applyStyleOnLoad,
+    /**
+     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier
+     * @prop {Boolean} gpuAcceleration=true
+     * If true, it uses the CSS 3D transformation to position the popper.
+     * Otherwise, it will use the `top` and `left` properties
+     */
+    gpuAcceleration: undefined
+  }
+};
+
+/**
+ * The `dataObject` is an object containing all the information used by Popper.js.
+ * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
+ * @name dataObject
+ * @property {Object} data.instance The Popper.js instance
+ * @property {String} data.placement Placement applied to popper
+ * @property {String} data.originalPlacement Placement originally defined on init
+ * @property {Boolean} data.flipped True if popper has been flipped by flip modifier
+ * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper
+ * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
+ * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)
+ * @property {Object} data.boundaries Offsets of the popper boundaries
+ * @property {Object} data.offsets The measurements of popper, reference and arrow elements
+ * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values
+ * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0
+ */
+
+/**
+ * Default options provided to Popper.js constructor.<br />
+ * These can be overridden using the `options` argument of Popper.js.<br />
+ * To override an option, simply pass an object with the same
+ * structure of the `options` object, as the 3rd argument. For example:
+ * ```
+ * new Popper(ref, pop, {
+ *   modifiers: {
+ *     preventOverflow: { enabled: false }
+ *   }
+ * })
+ * ```
+ * @type {Object}
+ * @static
+ * @memberof Popper
+ */
+var Defaults = {
+  /**
+   * Popper's placement.
+   * @prop {Popper.placements} placement='bottom'
+   */
+  placement: 'bottom',
+
+  /**
+   * Set this to true if you want popper to position it self in 'fixed' mode
+   * @prop {Boolean} positionFixed=false
+   */
+  positionFixed: false,
+
+  /**
+   * Whether events (resize, scroll) are initially enabled.
+   * @prop {Boolean} eventsEnabled=true
+   */
+  eventsEnabled: true,
+
+  /**
+   * Set to true if you want to automatically remove the popper when
+   * you call the `destroy` method.
+   * @prop {Boolean} removeOnDestroy=false
+   */
+  removeOnDestroy: false,
+
+  /**
+   * Callback called when the popper is created.<br />
+   * By default, it is set to no-op.<br />
+   * Access Popper.js instance with `data.instance`.
+   * @prop {onCreate}
+   */
+  onCreate: function onCreate() {},
+
+  /**
+   * Callback called when the popper is updated. This callback is not called
+   * on the initialization/creation of the popper, but only on subsequent
+   * updates.<br />
+   * By default, it is set to no-op.<br />
+   * Access Popper.js instance with `data.instance`.
+   * @prop {onUpdate}
+   */
+  onUpdate: function onUpdate() {},
+
+  /**
+   * List of modifiers used to modify the offsets before they are applied to the popper.
+   * They provide most of the functionalities of Popper.js.
+   * @prop {modifiers}
+   */
+  modifiers: modifiers
+};
+
+/**
+ * @callback onCreate
+ * @param {dataObject} data
+ */
+
+/**
+ * @callback onUpdate
+ * @param {dataObject} data
+ */
+
+// Utils
+// Methods
+var Popper = function () {
+  /**
+   * Creates a new Popper.js instance.
+   * @class Popper
+   * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper
+   * @param {HTMLElement} popper - The HTML element used as the popper
+   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
+   * @return {Object} instance - The generated Popper.js instance
+   */
+  function Popper(reference, popper) {
+    var _this = this;
+
+    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+    classCallCheck(this, Popper);
+
+    this.scheduleUpdate = function () {
+      return requestAnimationFrame(_this.update);
+    };
+
+    // make update() debounced, so that it only runs at most once-per-tick
+    this.update = debounce(this.update.bind(this));
+
+    // with {} we create a new object with the options inside it
+    this.options = _extends({}, Popper.Defaults, options);
+
+    // init state
+    this.state = {
+      isDestroyed: false,
+      isCreated: false,
+      scrollParents: []
+    };
+
+    // get reference and popper elements (allow jQuery wrappers)
+    this.reference = reference && reference.jquery ? reference[0] : reference;
+    this.popper = popper && popper.jquery ? popper[0] : popper;
+
+    // Deep merge modifiers options
+    this.options.modifiers = {};
+    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
+      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
+    });
+
+    // Refactoring modifiers' list (Object => Array)
+    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
+      return _extends({
+        name: name
+      }, _this.options.modifiers[name]);
+    })
+    // sort the modifiers by order
+    .sort(function (a, b) {
+      return a.order - b.order;
+    });
+
+    // modifiers have the ability to execute arbitrary code when Popper.js get inited
+    // such code is executed in the same order of its modifier
+    // they could add new properties to their options configuration
+    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
+    this.modifiers.forEach(function (modifierOptions) {
+      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
+        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);
+      }
+    });
+
+    // fire the first update to position the popper in the right place
+    this.update();
+
+    var eventsEnabled = this.options.eventsEnabled;
+    if (eventsEnabled) {
+      // setup event listeners, they will take care of update the position in specific situations
+      this.enableEventListeners();
+    }
+
+    this.state.eventsEnabled = eventsEnabled;
+  }
+
+  // We can't use class properties because they don't get listed in the
+  // class prototype and break stuff like Sinon stubs
+
+
+  createClass(Popper, [{
+    key: 'update',
+    value: function update$$1() {
+      return update.call(this);
+    }
+  }, {
+    key: 'destroy',
+    value: function destroy$$1() {
+      return destroy.call(this);
+    }
+  }, {
+    key: 'enableEventListeners',
+    value: function enableEventListeners$$1() {
+      return enableEventListeners.call(this);
+    }
+  }, {
+    key: 'disableEventListeners',
+    value: function disableEventListeners$$1() {
+      return disableEventListeners.call(this);
+    }
+
+    /**
+     * Schedules an update. It will run on the next UI update available.
+     * @method scheduleUpdate
+     * @memberof Popper
+     */
+
+
+    /**
+     * Collection of utilities useful when writing custom modifiers.
+     * Starting from version 1.7, this method is available only if you
+     * include `popper-utils.js` before `popper.js`.
+     *
+     * **DEPRECATION**: This way to access PopperUtils is deprecated
+     * and will be removed in v2! Use the PopperUtils module directly instead.
+     * Due to the high instability of the methods contained in Utils, we can't
+     * guarantee them to follow semver. Use them at your own risk!
+     * @static
+     * @private
+     * @type {Object}
+     * @deprecated since version 1.8
+     * @member Utils
+     * @memberof Popper
+     */
+
+  }]);
+  return Popper;
+}();
+
+/**
+ * The `referenceObject` is an object that provides an interface compatible with Popper.js
+ * and lets you use it as replacement of a real DOM node.<br />
+ * You can use this method to position a popper relatively to a set of coordinates
+ * in case you don't have a DOM node to use as reference.
+ *
+ * ```
+ * new Popper(referenceObject, popperNode);
+ * ```
+ *
+ * NB: This feature isn't supported in Internet Explorer 10.
+ * @name referenceObject
+ * @property {Function} data.getBoundingClientRect
+ * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
+ * @property {number} data.clientWidth
+ * An ES6 getter that will return the width of the virtual reference element.
+ * @property {number} data.clientHeight
+ * An ES6 getter that will return the height of the virtual reference element.
+ */
+
+
+Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
+Popper.placements = placements;
+Popper.Defaults = Defaults;
+
+return Popper;
+
+})));
+/*!
+  * Bootstrap util.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
+  typeof define === 'function' && define.amd ? define(['jquery'], factory) :
+  (global = global || self, global.Util = factory(global.jQuery));
+}(this, function ($) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap (v4.3.1): util.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+  /**
+   * ------------------------------------------------------------------------
+   * Private TransitionEnd Helpers
+   * ------------------------------------------------------------------------
+   */
+
+  var TRANSITION_END = 'transitionend';
+  var MAX_UID = 1000000;
+  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
+
+  function toType(obj) {
+    return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
+  }
+
+  function getSpecialTransitionEndEvent() {
+    return {
+      bindType: TRANSITION_END,
+      delegateType: TRANSITION_END,
+      handle: function handle(event) {
+        if ($(event.target).is(this)) {
+          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
+        }
+
+        return undefined; // eslint-disable-line no-undefined
+      }
+    };
+  }
+
+  function transitionEndEmulator(duration) {
+    var _this = this;
+
+    var called = false;
+    $(this).one(Util.TRANSITION_END, function () {
+      called = true;
+    });
+    setTimeout(function () {
+      if (!called) {
+        Util.triggerTransitionEnd(_this);
+      }
+    }, duration);
+    return this;
+  }
+
+  function setTransitionEndSupport() {
+    $.fn.emulateTransitionEnd = transitionEndEmulator;
+    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
+  }
+  /**
+   * --------------------------------------------------------------------------
+   * Public Util Api
+   * --------------------------------------------------------------------------
+   */
+
+
+  var Util = {
+    TRANSITION_END: 'bsTransitionEnd',
+    getUID: function getUID(prefix) {
+      do {
+        // eslint-disable-next-line no-bitwise
+        prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
+      } while (document.getElementById(prefix));
+
+      return prefix;
+    },
+    getSelectorFromElement: function getSelectorFromElement(element) {
+      var selector = element.getAttribute('data-target');
+
+      if (!selector || selector === '#') {
+        var hrefAttr = element.getAttribute('href');
+        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
+      }
+
+      try {
+        return document.querySelector(selector) ? selector : null;
+      } catch (err) {
+        return null;
+      }
+    },
+    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
+      if (!element) {
+        return 0;
+      } // Get transition-duration of the element
+
+
+      var transitionDuration = $(element).css('transition-duration');
+      var transitionDelay = $(element).css('transition-delay');
+      var floatTransitionDuration = parseFloat(transitionDuration);
+      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+
+      if (!floatTransitionDuration && !floatTransitionDelay) {
+        return 0;
+      } // If multiple durations are defined, take the first
+
+
+      transitionDuration = transitionDuration.split(',')[0];
+      transitionDelay = transitionDelay.split(',')[0];
+      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+    },
+    reflow: function reflow(element) {
+      return element.offsetHeight;
+    },
+    triggerTransitionEnd: function triggerTransitionEnd(element) {
+      $(element).trigger(TRANSITION_END);
+    },
+    // TODO: Remove in v5
+    supportsTransitionEnd: function supportsTransitionEnd() {
+      return Boolean(TRANSITION_END);
+    },
+    isElement: function isElement(obj) {
+      return (obj[0] || obj).nodeType;
+    },
+    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
+      for (var property in configTypes) {
+        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
+          var expectedTypes = configTypes[property];
+          var value = config[property];
+          var valueType = value && Util.isElement(value) ? 'element' : toType(value);
+
+          if (!new RegExp(expectedTypes).test(valueType)) {
+            throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
+          }
+        }
+      }
+    },
+    findShadowRoot: function findShadowRoot(element) {
+      if (!document.documentElement.attachShadow) {
+        return null;
+      } // Can find the shadow root otherwise it'll return the document
+
+
+      if (typeof element.getRootNode === 'function') {
+        var root = element.getRootNode();
+        return root instanceof ShadowRoot ? root : null;
+      }
+
+      if (element instanceof ShadowRoot) {
+        return element;
+      } // when we don't find a shadow root
+
+
+      if (!element.parentNode) {
+        return null;
+      }
+
+      return Util.findShadowRoot(element.parentNode);
+    }
+  };
+  setTransitionEndSupport();
+
+  return Util;
+
+}));
+/*!
+  * Bootstrap alert.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Alert = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'alert';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.alert';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var Selector = {
+    DISMISS: '[data-dismiss="alert"]'
+  };
+  var Event = {
+    CLOSE: "close" + EVENT_KEY,
+    CLOSED: "closed" + EVENT_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    ALERT: 'alert',
+    FADE: 'fade',
+    SHOW: 'show'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Alert =
+  /*#__PURE__*/
+  function () {
+    function Alert(element) {
+      this._element = element;
+    } // Getters
+
+
+    var _proto = Alert.prototype;
+
+    // Public
+    _proto.close = function close(element) {
+      var rootElement = this._element;
+
+      if (element) {
+        rootElement = this._getRootElement(element);
+      }
+
+      var customEvent = this._triggerCloseEvent(rootElement);
+
+      if (customEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._removeElement(rootElement);
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+    } // Private
+    ;
+
+    _proto._getRootElement = function _getRootElement(element) {
+      var selector = Util.getSelectorFromElement(element);
+      var parent = false;
+
+      if (selector) {
+        parent = document.querySelector(selector);
+      }
+
+      if (!parent) {
+        parent = $(element).closest("." + ClassName.ALERT)[0];
+      }
+
+      return parent;
+    };
+
+    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
+      var closeEvent = $.Event(Event.CLOSE);
+      $(element).trigger(closeEvent);
+      return closeEvent;
+    };
+
+    _proto._removeElement = function _removeElement(element) {
+      var _this = this;
+
+      $(element).removeClass(ClassName.SHOW);
+
+      if (!$(element).hasClass(ClassName.FADE)) {
+        this._destroyElement(element);
+
+        return;
+      }
+
+      var transitionDuration = Util.getTransitionDurationFromElement(element);
+      $(element).one(Util.TRANSITION_END, function (event) {
+        return _this._destroyElement(element, event);
+      }).emulateTransitionEnd(transitionDuration);
+    };
+
+    _proto._destroyElement = function _destroyElement(element) {
+      $(element).detach().trigger(Event.CLOSED).remove();
+    } // Static
+    ;
+
+    Alert._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $element = $(this);
+        var data = $element.data(DATA_KEY);
+
+        if (!data) {
+          data = new Alert(this);
+          $element.data(DATA_KEY, data);
+        }
+
+        if (config === 'close') {
+          data[config](this);
+        }
+      });
+    };
+
+    Alert._handleDismiss = function _handleDismiss(alertInstance) {
+      return function (event) {
+        if (event) {
+          event.preventDefault();
+        }
+
+        alertInstance.close(this);
+      };
+    };
+
+    _createClass(Alert, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Alert;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Alert._jQueryInterface;
+  $.fn[NAME].Constructor = Alert;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Alert._jQueryInterface;
+  };
+
+  return Alert;
+
+}));
+/*!
+  * Bootstrap button.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
+  typeof define === 'function' && define.amd ? define(['jquery'], factory) :
+  (global = global || self, global.Button = factory(global.jQuery));
+}(this, function ($) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'button';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.button';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var ClassName = {
+    ACTIVE: 'active',
+    BUTTON: 'btn',
+    FOCUS: 'focus'
+  };
+  var Selector = {
+    DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
+    DATA_TOGGLE: '[data-toggle="buttons"]',
+    INPUT: 'input:not([type="hidden"])',
+    ACTIVE: '.active',
+    BUTTON: '.btn'
+  };
+  var Event = {
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
+    FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY)
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Button =
+  /*#__PURE__*/
+  function () {
+    function Button(element) {
+      this._element = element;
+    } // Getters
+
+
+    var _proto = Button.prototype;
+
+    // Public
+    _proto.toggle = function toggle() {
+      var triggerChangeEvent = true;
+      var addAriaPressed = true;
+      var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
+
+      if (rootElement) {
+        var input = this._element.querySelector(Selector.INPUT);
+
+        if (input) {
+          if (input.type === 'radio') {
+            if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) {
+              triggerChangeEvent = false;
+            } else {
+              var activeElement = rootElement.querySelector(Selector.ACTIVE);
+
+              if (activeElement) {
+                $(activeElement).removeClass(ClassName.ACTIVE);
+              }
+            }
+          }
+
+          if (triggerChangeEvent) {
+            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {
+              return;
+            }
+
+            input.checked = !this._element.classList.contains(ClassName.ACTIVE);
+            $(input).trigger('change');
+          }
+
+          input.focus();
+          addAriaPressed = false;
+        }
+      }
+
+      if (addAriaPressed) {
+        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE));
+      }
+
+      if (triggerChangeEvent) {
+        $(this._element).toggleClass(ClassName.ACTIVE);
+      }
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+    } // Static
+    ;
+
+    Button._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        if (!data) {
+          data = new Button(this);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (config === 'toggle') {
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Button, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Button;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
+    event.preventDefault();
+    var button = event.target;
+
+    if (!$(button).hasClass(ClassName.BUTTON)) {
+      button = $(button).closest(Selector.BUTTON);
+    }
+
+    Button._jQueryInterface.call($(button), 'toggle');
+  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
+    var button = $(event.target).closest(Selector.BUTTON)[0];
+    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Button._jQueryInterface;
+  $.fn[NAME].Constructor = Button;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Button._jQueryInterface;
+  };
+
+  return Button;
+
+}));
+/*!
+  * Bootstrap carousel.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Carousel = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'carousel';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.carousel';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
+
+  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
+
+  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
+
+  var SWIPE_THRESHOLD = 40;
+  var Default = {
+    interval: 5000,
+    keyboard: true,
+    slide: false,
+    pause: 'hover',
+    wrap: true,
+    touch: true
+  };
+  var DefaultType = {
+    interval: '(number|boolean)',
+    keyboard: 'boolean',
+    slide: '(boolean|string)',
+    pause: '(string|boolean)',
+    wrap: 'boolean',
+    touch: 'boolean'
+  };
+  var Direction = {
+    NEXT: 'next',
+    PREV: 'prev',
+    LEFT: 'left',
+    RIGHT: 'right'
+  };
+  var Event = {
+    SLIDE: "slide" + EVENT_KEY,
+    SLID: "slid" + EVENT_KEY,
+    KEYDOWN: "keydown" + EVENT_KEY,
+    MOUSEENTER: "mouseenter" + EVENT_KEY,
+    MOUSELEAVE: "mouseleave" + EVENT_KEY,
+    TOUCHSTART: "touchstart" + EVENT_KEY,
+    TOUCHMOVE: "touchmove" + EVENT_KEY,
+    TOUCHEND: "touchend" + EVENT_KEY,
+    POINTERDOWN: "pointerdown" + EVENT_KEY,
+    POINTERUP: "pointerup" + EVENT_KEY,
+    DRAG_START: "dragstart" + EVENT_KEY,
+    LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    CAROUSEL: 'carousel',
+    ACTIVE: 'active',
+    SLIDE: 'slide',
+    RIGHT: 'carousel-item-right',
+    LEFT: 'carousel-item-left',
+    NEXT: 'carousel-item-next',
+    PREV: 'carousel-item-prev',
+    ITEM: 'carousel-item',
+    POINTER_EVENT: 'pointer-event'
+  };
+  var Selector = {
+    ACTIVE: '.active',
+    ACTIVE_ITEM: '.active.carousel-item',
+    ITEM: '.carousel-item',
+    ITEM_IMG: '.carousel-item img',
+    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',
+    INDICATORS: '.carousel-indicators',
+    DATA_SLIDE: '[data-slide], [data-slide-to]',
+    DATA_RIDE: '[data-ride="carousel"]'
+  };
+  var PointerType = {
+    TOUCH: 'touch',
+    PEN: 'pen'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Carousel =
+  /*#__PURE__*/
+  function () {
+    function Carousel(element, config) {
+      this._items = null;
+      this._interval = null;
+      this._activeElement = null;
+      this._isPaused = false;
+      this._isSliding = false;
+      this.touchTimeout = null;
+      this.touchStartX = 0;
+      this.touchDeltaX = 0;
+      this._config = this._getConfig(config);
+      this._element = element;
+      this._indicatorsElement = this._element.querySelector(Selector.INDICATORS);
+      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
+      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
+
+      this._addEventListeners();
+    } // Getters
+
+
+    var _proto = Carousel.prototype;
+
+    // Public
+    _proto.next = function next() {
+      if (!this._isSliding) {
+        this._slide(Direction.NEXT);
+      }
+    };
+
+    _proto.nextWhenVisible = function nextWhenVisible() {
+      // Don't call next when the page isn't visible
+      // or the carousel or its parent isn't visible
+      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
+        this.next();
+      }
+    };
+
+    _proto.prev = function prev() {
+      if (!this._isSliding) {
+        this._slide(Direction.PREV);
+      }
+    };
+
+    _proto.pause = function pause(event) {
+      if (!event) {
+        this._isPaused = true;
+      }
+
+      if (this._element.querySelector(Selector.NEXT_PREV)) {
+        Util.triggerTransitionEnd(this._element);
+        this.cycle(true);
+      }
+
+      clearInterval(this._interval);
+      this._interval = null;
+    };
+
+    _proto.cycle = function cycle(event) {
+      if (!event) {
+        this._isPaused = false;
+      }
+
+      if (this._interval) {
+        clearInterval(this._interval);
+        this._interval = null;
+      }
+
+      if (this._config.interval && !this._isPaused) {
+        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
+      }
+    };
+
+    _proto.to = function to(index) {
+      var _this = this;
+
+      this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);
+
+      var activeIndex = this._getItemIndex(this._activeElement);
+
+      if (index > this._items.length - 1 || index < 0) {
+        return;
+      }
+
+      if (this._isSliding) {
+        $(this._element).one(Event.SLID, function () {
+          return _this.to(index);
+        });
+        return;
+      }
+
+      if (activeIndex === index) {
+        this.pause();
+        this.cycle();
+        return;
+      }
+
+      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;
+
+      this._slide(direction, this._items[index]);
+    };
+
+    _proto.dispose = function dispose() {
+      $(this._element).off(EVENT_KEY);
+      $.removeData(this._element, DATA_KEY);
+      this._items = null;
+      this._config = null;
+      this._element = null;
+      this._interval = null;
+      this._isPaused = null;
+      this._isSliding = null;
+      this._activeElement = null;
+      this._indicatorsElement = null;
+    } // Private
+    ;
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, Default, config);
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    _proto._handleSwipe = function _handleSwipe() {
+      var absDeltax = Math.abs(this.touchDeltaX);
+
+      if (absDeltax <= SWIPE_THRESHOLD) {
+        return;
+      }
+
+      var direction = absDeltax / this.touchDeltaX; // swipe left
+
+      if (direction > 0) {
+        this.prev();
+      } // swipe right
+
+
+      if (direction < 0) {
+        this.next();
+      }
+    };
+
+    _proto._addEventListeners = function _addEventListeners() {
+      var _this2 = this;
+
+      if (this._config.keyboard) {
+        $(this._element).on(Event.KEYDOWN, function (event) {
+          return _this2._keydown(event);
+        });
+      }
+
+      if (this._config.pause === 'hover') {
+        $(this._element).on(Event.MOUSEENTER, function (event) {
+          return _this2.pause(event);
+        }).on(Event.MOUSELEAVE, function (event) {
+          return _this2.cycle(event);
+        });
+      }
+
+      if (this._config.touch) {
+        this._addTouchEventListeners();
+      }
+    };
+
+    _proto._addTouchEventListeners = function _addTouchEventListeners() {
+      var _this3 = this;
+
+      if (!this._touchSupported) {
+        return;
+      }
+
+      var start = function start(event) {
+        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
+          _this3.touchStartX = event.originalEvent.clientX;
+        } else if (!_this3._pointerEvent) {
+          _this3.touchStartX = event.originalEvent.touches[0].clientX;
+        }
+      };
+
+      var move = function move(event) {
+        // ensure swiping with one touch and not pinching
+        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
+          _this3.touchDeltaX = 0;
+        } else {
+          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;
+        }
+      };
+
+      var end = function end(event) {
+        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
+          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
+        }
+
+        _this3._handleSwipe();
+
+        if (_this3._config.pause === 'hover') {
+          // If it's a touch-enabled device, mouseenter/leave are fired as
+          // part of the mouse compatibility events on first tap - the carousel
+          // would stop cycling until user tapped out of it;
+          // here, we listen for touchend, explicitly pause the carousel
+          // (as if it's the second time we tap on it, mouseenter compat event
+          // is NOT fired) and after a timeout (to allow for mouse compatibility
+          // events to fire) we explicitly restart cycling
+          _this3.pause();
+
+          if (_this3.touchTimeout) {
+            clearTimeout(_this3.touchTimeout);
+          }
+
+          _this3.touchTimeout = setTimeout(function (event) {
+            return _this3.cycle(event);
+          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
+        }
+      };
+
+      $(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) {
+        return e.preventDefault();
+      });
+
+      if (this._pointerEvent) {
+        $(this._element).on(Event.POINTERDOWN, function (event) {
+          return start(event);
+        });
+        $(this._element).on(Event.POINTERUP, function (event) {
+          return end(event);
+        });
+
+        this._element.classList.add(ClassName.POINTER_EVENT);
+      } else {
+        $(this._element).on(Event.TOUCHSTART, function (event) {
+          return start(event);
+        });
+        $(this._element).on(Event.TOUCHMOVE, function (event) {
+          return move(event);
+        });
+        $(this._element).on(Event.TOUCHEND, function (event) {
+          return end(event);
+        });
+      }
+    };
+
+    _proto._keydown = function _keydown(event) {
+      if (/input|textarea/i.test(event.target.tagName)) {
+        return;
+      }
+
+      switch (event.which) {
+        case ARROW_LEFT_KEYCODE:
+          event.preventDefault();
+          this.prev();
+          break;
+
+        case ARROW_RIGHT_KEYCODE:
+          event.preventDefault();
+          this.next();
+          break;
+
+        default:
+      }
+    };
+
+    _proto._getItemIndex = function _getItemIndex(element) {
+      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : [];
+      return this._items.indexOf(element);
+    };
+
+    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
+      var isNextDirection = direction === Direction.NEXT;
+      var isPrevDirection = direction === Direction.PREV;
+
+      var activeIndex = this._getItemIndex(activeElement);
+
+      var lastItemIndex = this._items.length - 1;
+      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
+
+      if (isGoingToWrap && !this._config.wrap) {
+        return activeElement;
+      }
+
+      var delta = direction === Direction.PREV ? -1 : 1;
+      var itemIndex = (activeIndex + delta) % this._items.length;
+      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
+    };
+
+    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
+      var targetIndex = this._getItemIndex(relatedTarget);
+
+      var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM));
+
+      var slideEvent = $.Event(Event.SLIDE, {
+        relatedTarget: relatedTarget,
+        direction: eventDirectionName,
+        from: fromIndex,
+        to: targetIndex
+      });
+      $(this._element).trigger(slideEvent);
+      return slideEvent;
+    };
+
+    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
+      if (this._indicatorsElement) {
+        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE));
+        $(indicators).removeClass(ClassName.ACTIVE);
+
+        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
+
+        if (nextIndicator) {
+          $(nextIndicator).addClass(ClassName.ACTIVE);
+        }
+      }
+    };
+
+    _proto._slide = function _slide(direction, element) {
+      var _this4 = this;
+
+      var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM);
+
+      var activeElementIndex = this._getItemIndex(activeElement);
+
+      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
+
+      var nextElementIndex = this._getItemIndex(nextElement);
+
+      var isCycling = Boolean(this._interval);
+      var directionalClassName;
+      var orderClassName;
+      var eventDirectionName;
+
+      if (direction === Direction.NEXT) {
+        directionalClassName = ClassName.LEFT;
+        orderClassName = ClassName.NEXT;
+        eventDirectionName = Direction.LEFT;
+      } else {
+        directionalClassName = ClassName.RIGHT;
+        orderClassName = ClassName.PREV;
+        eventDirectionName = Direction.RIGHT;
+      }
+
+      if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
+        this._isSliding = false;
+        return;
+      }
+
+      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
+
+      if (slideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (!activeElement || !nextElement) {
+        // Some weirdness is happening, so we bail
+        return;
+      }
+
+      this._isSliding = true;
+
+      if (isCycling) {
+        this.pause();
+      }
+
+      this._setActiveIndicatorElement(nextElement);
+
+      var slidEvent = $.Event(Event.SLID, {
+        relatedTarget: nextElement,
+        direction: eventDirectionName,
+        from: activeElementIndex,
+        to: nextElementIndex
+      });
+
+      if ($(this._element).hasClass(ClassName.SLIDE)) {
+        $(nextElement).addClass(orderClassName);
+        Util.reflow(nextElement);
+        $(activeElement).addClass(directionalClassName);
+        $(nextElement).addClass(directionalClassName);
+        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);
+
+        if (nextElementInterval) {
+          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
+          this._config.interval = nextElementInterval;
+        } else {
+          this._config.interval = this._config.defaultInterval || this._config.interval;
+        }
+
+        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
+        $(activeElement).one(Util.TRANSITION_END, function () {
+          $(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
+          $(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
+          _this4._isSliding = false;
+          setTimeout(function () {
+            return $(_this4._element).trigger(slidEvent);
+          }, 0);
+        }).emulateTransitionEnd(transitionDuration);
+      } else {
+        $(activeElement).removeClass(ClassName.ACTIVE);
+        $(nextElement).addClass(ClassName.ACTIVE);
+        this._isSliding = false;
+        $(this._element).trigger(slidEvent);
+      }
+
+      if (isCycling) {
+        this.cycle();
+      }
+    } // Static
+    ;
+
+    Carousel._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = _objectSpread({}, Default, $(this).data());
+
+        if (typeof config === 'object') {
+          _config = _objectSpread({}, _config, config);
+        }
+
+        var action = typeof config === 'string' ? config : _config.slide;
+
+        if (!data) {
+          data = new Carousel(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'number') {
+          data.to(config);
+        } else if (typeof action === 'string') {
+          if (typeof data[action] === 'undefined') {
+            throw new TypeError("No method named \"" + action + "\"");
+          }
+
+          data[action]();
+        } else if (_config.interval && _config.ride) {
+          data.pause();
+          data.cycle();
+        }
+      });
+    };
+
+    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
+      var selector = Util.getSelectorFromElement(this);
+
+      if (!selector) {
+        return;
+      }
+
+      var target = $(selector)[0];
+
+      if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
+        return;
+      }
+
+      var config = _objectSpread({}, $(target).data(), $(this).data());
+
+      var slideIndex = this.getAttribute('data-slide-to');
+
+      if (slideIndex) {
+        config.interval = false;
+      }
+
+      Carousel._jQueryInterface.call($(target), config);
+
+      if (slideIndex) {
+        $(target).data(DATA_KEY).to(slideIndex);
+      }
+
+      event.preventDefault();
+    };
+
+    _createClass(Carousel, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Carousel;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
+  $(window).on(Event.LOAD_DATA_API, function () {
+    var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE));
+
+    for (var i = 0, len = carousels.length; i < len; i++) {
+      var $carousel = $(carousels[i]);
+
+      Carousel._jQueryInterface.call($carousel, $carousel.data());
+    }
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Carousel._jQueryInterface;
+  $.fn[NAME].Constructor = Carousel;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Carousel._jQueryInterface;
+  };
+
+  return Carousel;
+
+}));
+/*!
+  * Bootstrap collapse.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Collapse = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'collapse';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.collapse';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var Default = {
+    toggle: true,
+    parent: ''
+  };
+  var DefaultType = {
+    toggle: 'boolean',
+    parent: '(string|element)'
+  };
+  var Event = {
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    SHOW: 'show',
+    COLLAPSE: 'collapse',
+    COLLAPSING: 'collapsing',
+    COLLAPSED: 'collapsed'
+  };
+  var Dimension = {
+    WIDTH: 'width',
+    HEIGHT: 'height'
+  };
+  var Selector = {
+    ACTIVES: '.show, .collapsing',
+    DATA_TOGGLE: '[data-toggle="collapse"]'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Collapse =
+  /*#__PURE__*/
+  function () {
+    function Collapse(element, config) {
+      this._isTransitioning = false;
+      this._element = element;
+      this._config = this._getConfig(config);
+      this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
+      var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
+
+      for (var i = 0, len = toggleList.length; i < len; i++) {
+        var elem = toggleList[i];
+        var selector = Util.getSelectorFromElement(elem);
+        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
+          return foundElem === element;
+        });
+
+        if (selector !== null && filterElement.length > 0) {
+          this._selector = selector;
+
+          this._triggerArray.push(elem);
+        }
+      }
+
+      this._parent = this._config.parent ? this._getParent() : null;
+
+      if (!this._config.parent) {
+        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
+      }
+
+      if (this._config.toggle) {
+        this.toggle();
+      }
+    } // Getters
+
+
+    var _proto = Collapse.prototype;
+
+    // Public
+    _proto.toggle = function toggle() {
+      if ($(this._element).hasClass(ClassName.SHOW)) {
+        this.hide();
+      } else {
+        this.show();
+      }
+    };
+
+    _proto.show = function show() {
+      var _this = this;
+
+      if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var actives;
+      var activesData;
+
+      if (this._parent) {
+        actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {
+          if (typeof _this._config.parent === 'string') {
+            return elem.getAttribute('data-parent') === _this._config.parent;
+          }
+
+          return elem.classList.contains(ClassName.COLLAPSE);
+        });
+
+        if (actives.length === 0) {
+          actives = null;
+        }
+      }
+
+      if (actives) {
+        activesData = $(actives).not(this._selector).data(DATA_KEY);
+
+        if (activesData && activesData._isTransitioning) {
+          return;
+        }
+      }
+
+      var startEvent = $.Event(Event.SHOW);
+      $(this._element).trigger(startEvent);
+
+      if (startEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (actives) {
+        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
+
+        if (!activesData) {
+          $(actives).data(DATA_KEY, null);
+        }
+      }
+
+      var dimension = this._getDimension();
+
+      $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
+      this._element.style[dimension] = 0;
+
+      if (this._triggerArray.length) {
+        $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
+      }
+
+      this.setTransitioning(true);
+
+      var complete = function complete() {
+        $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
+        _this._element.style[dimension] = '';
+
+        _this.setTransitioning(false);
+
+        $(_this._element).trigger(Event.SHOWN);
+      };
+
+      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
+      var scrollSize = "scroll" + capitalizedDimension;
+      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+      this._element.style[dimension] = this._element[scrollSize] + "px";
+    };
+
+    _proto.hide = function hide() {
+      var _this2 = this;
+
+      if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var startEvent = $.Event(Event.HIDE);
+      $(this._element).trigger(startEvent);
+
+      if (startEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      var dimension = this._getDimension();
+
+      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
+      Util.reflow(this._element);
+      $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
+      var triggerArrayLength = this._triggerArray.length;
+
+      if (triggerArrayLength > 0) {
+        for (var i = 0; i < triggerArrayLength; i++) {
+          var trigger = this._triggerArray[i];
+          var selector = Util.getSelectorFromElement(trigger);
+
+          if (selector !== null) {
+            var $elem = $([].slice.call(document.querySelectorAll(selector)));
+
+            if (!$elem.hasClass(ClassName.SHOW)) {
+              $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
+            }
+          }
+        }
+      }
+
+      this.setTransitioning(true);
+
+      var complete = function complete() {
+        _this2.setTransitioning(false);
+
+        $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
+      };
+
+      this._element.style[dimension] = '';
+      var transitionDuration = Util.getTransitionDurationFromElement(this._element);
+      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+    };
+
+    _proto.setTransitioning = function setTransitioning(isTransitioning) {
+      this._isTransitioning = isTransitioning;
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._config = null;
+      this._parent = null;
+      this._element = null;
+      this._triggerArray = null;
+      this._isTransitioning = null;
+    } // Private
+    ;
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, Default, config);
+      config.toggle = Boolean(config.toggle); // Coerce string values
+
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    _proto._getDimension = function _getDimension() {
+      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
+      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
+    };
+
+    _proto._getParent = function _getParent() {
+      var _this3 = this;
+
+      var parent;
+
+      if (Util.isElement(this._config.parent)) {
+        parent = this._config.parent; // It's a jQuery object
+
+        if (typeof this._config.parent.jquery !== 'undefined') {
+          parent = this._config.parent[0];
+        }
+      } else {
+        parent = document.querySelector(this._config.parent);
+      }
+
+      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
+      var children = [].slice.call(parent.querySelectorAll(selector));
+      $(children).each(function (i, element) {
+        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
+      });
+      return parent;
+    };
+
+    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
+      var isOpen = $(element).hasClass(ClassName.SHOW);
+
+      if (triggerArray.length) {
+        $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
+      }
+    } // Static
+    ;
+
+    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
+      var selector = Util.getSelectorFromElement(element);
+      return selector ? document.querySelector(selector) : null;
+    };
+
+    Collapse._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $this = $(this);
+        var data = $this.data(DATA_KEY);
+
+        var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});
+
+        if (!data && _config.toggle && /show|hide/.test(config)) {
+          _config.toggle = false;
+        }
+
+        if (!data) {
+          data = new Collapse(this, _config);
+          $this.data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Collapse, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Collapse;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
+    if (event.currentTarget.tagName === 'A') {
+      event.preventDefault();
+    }
+
+    var $trigger = $(this);
+    var selector = Util.getSelectorFromElement(this);
+    var selectors = [].slice.call(document.querySelectorAll(selector));
+    $(selectors).each(function () {
+      var $target = $(this);
+      var data = $target.data(DATA_KEY);
+      var config = data ? 'toggle' : $trigger.data();
+
+      Collapse._jQueryInterface.call($target, config);
+    });
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Collapse._jQueryInterface;
+  $.fn[NAME].Constructor = Collapse;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Collapse._jQueryInterface;
+  };
+
+  return Collapse;
+
+}));
+/*!
+  * Bootstrap dropdown.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
+  (global = global || self, global.Dropdown = factory(global.jQuery, global.Popper, global.Util));
+}(this, function ($, Popper, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'dropdown';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.dropdown';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
+
+  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
+
+  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
+
+  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
+
+  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
+
+  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
+
+  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
+  var Event = {
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    CLICK: "click" + EVENT_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY,
+    KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY,
+    KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    DISABLED: 'disabled',
+    SHOW: 'show',
+    DROPUP: 'dropup',
+    DROPRIGHT: 'dropright',
+    DROPLEFT: 'dropleft',
+    MENURIGHT: 'dropdown-menu-right',
+    MENULEFT: 'dropdown-menu-left',
+    POSITION_STATIC: 'position-static'
+  };
+  var Selector = {
+    DATA_TOGGLE: '[data-toggle="dropdown"]',
+    FORM_CHILD: '.dropdown form',
+    MENU: '.dropdown-menu',
+    NAVBAR_NAV: '.navbar-nav',
+    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
+  };
+  var AttachmentMap = {
+    TOP: 'top-start',
+    TOPEND: 'top-end',
+    BOTTOM: 'bottom-start',
+    BOTTOMEND: 'bottom-end',
+    RIGHT: 'right-start',
+    RIGHTEND: 'right-end',
+    LEFT: 'left-start',
+    LEFTEND: 'left-end'
+  };
+  var Default = {
+    offset: 0,
+    flip: true,
+    boundary: 'scrollParent',
+    reference: 'toggle',
+    display: 'dynamic'
+  };
+  var DefaultType = {
+    offset: '(number|string|function)',
+    flip: 'boolean',
+    boundary: '(string|element)',
+    reference: '(string|element)',
+    display: 'string'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Dropdown =
+  /*#__PURE__*/
+  function () {
+    function Dropdown(element, config) {
+      this._element = element;
+      this._popper = null;
+      this._config = this._getConfig(config);
+      this._menu = this._getMenuElement();
+      this._inNavbar = this._detectNavbar();
+
+      this._addEventListeners();
+    } // Getters
+
+
+    var _proto = Dropdown.prototype;
+
+    // Public
+    _proto.toggle = function toggle() {
+      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {
+        return;
+      }
+
+      var parent = Dropdown._getParentFromElement(this._element);
+
+      var isActive = $(this._menu).hasClass(ClassName.SHOW);
+
+      Dropdown._clearMenus();
+
+      if (isActive) {
+        return;
+      }
+
+      var relatedTarget = {
+        relatedTarget: this._element
+      };
+      var showEvent = $.Event(Event.SHOW, relatedTarget);
+      $(parent).trigger(showEvent);
+
+      if (showEvent.isDefaultPrevented()) {
+        return;
+      } // Disable totally Popper.js for Dropdown in Navbar
+
+
+      if (!this._inNavbar) {
+        /**
+         * Check for Popper dependency
+         * Popper - https://popper.js.org
+         */
+        if (typeof Popper === 'undefined') {
+          throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
+        }
+
+        var referenceElement = this._element;
+
+        if (this._config.reference === 'parent') {
+          referenceElement = parent;
+        } else if (Util.isElement(this._config.reference)) {
+          referenceElement = this._config.reference; // Check if it's jQuery element
+
+          if (typeof this._config.reference.jquery !== 'undefined') {
+            referenceElement = this._config.reference[0];
+          }
+        } // If boundary is not `scrollParent`, then set position to `static`
+        // to allow the menu to "escape" the scroll parent's boundaries
+        // https://github.com/twbs/bootstrap/issues/24251
+
+
+        if (this._config.boundary !== 'scrollParent') {
+          $(parent).addClass(ClassName.POSITION_STATIC);
+        }
+
+        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
+      } // If this is a touch-enabled device we add extra
+      // empty mouseover listeners to the body's immediate children;
+      // only needed because of broken event delegation on iOS
+      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+
+
+      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) {
+        $(document.body).children().on('mouseover', null, $.noop);
+      }
+
+      this._element.focus();
+
+      this._element.setAttribute('aria-expanded', true);
+
+      $(this._menu).toggleClass(ClassName.SHOW);
+      $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
+    };
+
+    _proto.show = function show() {
+      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var relatedTarget = {
+        relatedTarget: this._element
+      };
+      var showEvent = $.Event(Event.SHOW, relatedTarget);
+
+      var parent = Dropdown._getParentFromElement(this._element);
+
+      $(parent).trigger(showEvent);
+
+      if (showEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      $(this._menu).toggleClass(ClassName.SHOW);
+      $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));
+    };
+
+    _proto.hide = function hide() {
+      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {
+        return;
+      }
+
+      var relatedTarget = {
+        relatedTarget: this._element
+      };
+      var hideEvent = $.Event(Event.HIDE, relatedTarget);
+
+      var parent = Dropdown._getParentFromElement(this._element);
+
+      $(parent).trigger(hideEvent);
+
+      if (hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      $(this._menu).toggleClass(ClassName.SHOW);
+      $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      $(this._element).off(EVENT_KEY);
+      this._element = null;
+      this._menu = null;
+
+      if (this._popper !== null) {
+        this._popper.destroy();
+
+        this._popper = null;
+      }
+    };
+
+    _proto.update = function update() {
+      this._inNavbar = this._detectNavbar();
+
+      if (this._popper !== null) {
+        this._popper.scheduleUpdate();
+      }
+    } // Private
+    ;
+
+    _proto._addEventListeners = function _addEventListeners() {
+      var _this = this;
+
+      $(this._element).on(Event.CLICK, function (event) {
+        event.preventDefault();
+        event.stopPropagation();
+
+        _this.toggle();
+      });
+    };
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);
+      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+      return config;
+    };
+
+    _proto._getMenuElement = function _getMenuElement() {
+      if (!this._menu) {
+        var parent = Dropdown._getParentFromElement(this._element);
+
+        if (parent) {
+          this._menu = parent.querySelector(Selector.MENU);
+        }
+      }
+
+      return this._menu;
+    };
+
+    _proto._getPlacement = function _getPlacement() {
+      var $parentDropdown = $(this._element.parentNode);
+      var placement = AttachmentMap.BOTTOM; // Handle dropup
+
+      if ($parentDropdown.hasClass(ClassName.DROPUP)) {
+        placement = AttachmentMap.TOP;
+
+        if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
+          placement = AttachmentMap.TOPEND;
+        }
+      } else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) {
+        placement = AttachmentMap.RIGHT;
+      } else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) {
+        placement = AttachmentMap.LEFT;
+      } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
+        placement = AttachmentMap.BOTTOMEND;
+      }
+
+      return placement;
+    };
+
+    _proto._detectNavbar = function _detectNavbar() {
+      return $(this._element).closest('.navbar').length > 0;
+    };
+
+    _proto._getOffset = function _getOffset() {
+      var _this2 = this;
+
+      var offset = {};
+
+      if (typeof this._config.offset === 'function') {
+        offset.fn = function (data) {
+          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
+          return data;
+        };
+      } else {
+        offset.offset = this._config.offset;
+      }
+
+      return offset;
+    };
+
+    _proto._getPopperConfig = function _getPopperConfig() {
+      var popperConfig = {
+        placement: this._getPlacement(),
+        modifiers: {
+          offset: this._getOffset(),
+          flip: {
+            enabled: this._config.flip
+          },
+          preventOverflow: {
+            boundariesElement: this._config.boundary
+          }
+        } // Disable Popper.js if we have a static display
+
+      };
+
+      if (this._config.display === 'static') {
+        popperConfig.modifiers.applyStyle = {
+          enabled: false
+        };
+      }
+
+      return popperConfig;
+    } // Static
+    ;
+
+    Dropdown._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = typeof config === 'object' ? config : null;
+
+        if (!data) {
+          data = new Dropdown(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    Dropdown._clearMenus = function _clearMenus(event) {
+      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
+        return;
+      }
+
+      var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));
+
+      for (var i = 0, len = toggles.length; i < len; i++) {
+        var parent = Dropdown._getParentFromElement(toggles[i]);
+
+        var context = $(toggles[i]).data(DATA_KEY);
+        var relatedTarget = {
+          relatedTarget: toggles[i]
+        };
+
+        if (event && event.type === 'click') {
+          relatedTarget.clickEvent = event;
+        }
+
+        if (!context) {
+          continue;
+        }
+
+        var dropdownMenu = context._menu;
+
+        if (!$(parent).hasClass(ClassName.SHOW)) {
+          continue;
+        }
+
+        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {
+          continue;
+        }
+
+        var hideEvent = $.Event(Event.HIDE, relatedTarget);
+        $(parent).trigger(hideEvent);
+
+        if (hideEvent.isDefaultPrevented()) {
+          continue;
+        } // If this is a touch-enabled device we remove the extra
+        // empty mouseover listeners we added for iOS support
+
+
+        if ('ontouchstart' in document.documentElement) {
+          $(document.body).children().off('mouseover', null, $.noop);
+        }
+
+        toggles[i].setAttribute('aria-expanded', 'false');
+        $(dropdownMenu).removeClass(ClassName.SHOW);
+        $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));
+      }
+    };
+
+    Dropdown._getParentFromElement = function _getParentFromElement(element) {
+      var parent;
+      var selector = Util.getSelectorFromElement(element);
+
+      if (selector) {
+        parent = document.querySelector(selector);
+      }
+
+      return parent || element.parentNode;
+    } // eslint-disable-next-line complexity
+    ;
+
+    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
+      // If not input/textarea:
+      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command
+      // If input/textarea:
+      //  - If space key => not a dropdown command
+      //  - If key is other than escape
+      //    - If key is not up or down => not a dropdown command
+      //    - If trigger inside the menu => not a dropdown command
+      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
+        return;
+      }
+
+      event.preventDefault();
+      event.stopPropagation();
+
+      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
+        return;
+      }
+
+      var parent = Dropdown._getParentFromElement(this);
+
+      var isActive = $(parent).hasClass(ClassName.SHOW);
+
+      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
+        if (event.which === ESCAPE_KEYCODE) {
+          var toggle = parent.querySelector(Selector.DATA_TOGGLE);
+          $(toggle).trigger('focus');
+        }
+
+        $(this).trigger('click');
+        return;
+      }
+
+      var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS));
+
+      if (items.length === 0) {
+        return;
+      }
+
+      var index = items.indexOf(event.target);
+
+      if (event.which === ARROW_UP_KEYCODE && index > 0) {
+        // Up
+        index--;
+      }
+
+      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
+        // Down
+        index++;
+      }
+
+      if (index < 0) {
+        index = 0;
+      }
+
+      items[index].focus();
+    };
+
+    _createClass(Dropdown, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }, {
+      key: "DefaultType",
+      get: function get() {
+        return DefaultType;
+      }
+    }]);
+
+    return Dropdown;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    event.preventDefault();
+    event.stopPropagation();
+
+    Dropdown._jQueryInterface.call($(this), 'toggle');
+  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {
+    e.stopPropagation();
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Dropdown._jQueryInterface;
+  $.fn[NAME].Constructor = Dropdown;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Dropdown._jQueryInterface;
+  };
+
+  return Dropdown;
+
+}));
+/*!
+  * Bootstrap modal.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Modal = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'modal';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.modal';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
+
+  var Default = {
+    backdrop: true,
+    keyboard: true,
+    focus: true,
+    show: true
+  };
+  var DefaultType = {
+    backdrop: '(boolean|string)',
+    keyboard: 'boolean',
+    focus: 'boolean',
+    show: 'boolean'
+  };
+  var Event = {
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    FOCUSIN: "focusin" + EVENT_KEY,
+    RESIZE: "resize" + EVENT_KEY,
+    CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
+    KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
+    MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
+    MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    SCROLLABLE: 'modal-dialog-scrollable',
+    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
+    BACKDROP: 'modal-backdrop',
+    OPEN: 'modal-open',
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+  var Selector = {
+    DIALOG: '.modal-dialog',
+    MODAL_BODY: '.modal-body',
+    DATA_TOGGLE: '[data-toggle="modal"]',
+    DATA_DISMISS: '[data-dismiss="modal"]',
+    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
+    STICKY_CONTENT: '.sticky-top'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Modal =
+  /*#__PURE__*/
+  function () {
+    function Modal(element, config) {
+      this._config = this._getConfig(config);
+      this._element = element;
+      this._dialog = element.querySelector(Selector.DIALOG);
+      this._backdrop = null;
+      this._isShown = false;
+      this._isBodyOverflowing = false;
+      this._ignoreBackdropClick = false;
+      this._isTransitioning = false;
+      this._scrollbarWidth = 0;
+    } // Getters
+
+
+    var _proto = Modal.prototype;
+
+    // Public
+    _proto.toggle = function toggle(relatedTarget) {
+      return this._isShown ? this.hide() : this.show(relatedTarget);
+    };
+
+    _proto.show = function show(relatedTarget) {
+      var _this = this;
+
+      if (this._isShown || this._isTransitioning) {
+        return;
+      }
+
+      if ($(this._element).hasClass(ClassName.FADE)) {
+        this._isTransitioning = true;
+      }
+
+      var showEvent = $.Event(Event.SHOW, {
+        relatedTarget: relatedTarget
+      });
+      $(this._element).trigger(showEvent);
+
+      if (this._isShown || showEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._isShown = true;
+
+      this._checkScrollbar();
+
+      this._setScrollbar();
+
+      this._adjustDialog();
+
+      this._setEscapeEvent();
+
+      this._setResizeEvent();
+
+      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
+        return _this.hide(event);
+      });
+      $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
+        $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
+          if ($(event.target).is(_this._element)) {
+            _this._ignoreBackdropClick = true;
+          }
+        });
+      });
+
+      this._showBackdrop(function () {
+        return _this._showElement(relatedTarget);
+      });
+    };
+
+    _proto.hide = function hide(event) {
+      var _this2 = this;
+
+      if (event) {
+        event.preventDefault();
+      }
+
+      if (!this._isShown || this._isTransitioning) {
+        return;
+      }
+
+      var hideEvent = $.Event(Event.HIDE);
+      $(this._element).trigger(hideEvent);
+
+      if (!this._isShown || hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      this._isShown = false;
+      var transition = $(this._element).hasClass(ClassName.FADE);
+
+      if (transition) {
+        this._isTransitioning = true;
+      }
+
+      this._setEscapeEvent();
+
+      this._setResizeEvent();
+
+      $(document).off(Event.FOCUSIN);
+      $(this._element).removeClass(ClassName.SHOW);
+      $(this._element).off(Event.CLICK_DISMISS);
+      $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
+
+      if (transition) {
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
+        $(this._element).one(Util.TRANSITION_END, function (event) {
+          return _this2._hideModal(event);
+        }).emulateTransitionEnd(transitionDuration);
+      } else {
+        this._hideModal();
+      }
+    };
+
+    _proto.dispose = function dispose() {
+      [window, this._element, this._dialog].forEach(function (htmlElement) {
+        return $(htmlElement).off(EVENT_KEY);
+      });
+      /**
+       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
+       * Do not move `document` in `htmlElements` array
+       * It will remove `Event.CLICK_DATA_API` event that should remain
+       */
+
+      $(document).off(Event.FOCUSIN);
+      $.removeData(this._element, DATA_KEY);
+      this._config = null;
+      this._element = null;
+      this._dialog = null;
+      this._backdrop = null;
+      this._isShown = null;
+      this._isBodyOverflowing = null;
+      this._ignoreBackdropClick = null;
+      this._isTransitioning = null;
+      this._scrollbarWidth = null;
+    };
+
+    _proto.handleUpdate = function handleUpdate() {
+      this._adjustDialog();
+    } // Private
+    ;
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, Default, config);
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    _proto._showElement = function _showElement(relatedTarget) {
+      var _this3 = this;
+
+      var transition = $(this._element).hasClass(ClassName.FADE);
+
+      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
+        // Don't move modal's DOM position
+        document.body.appendChild(this._element);
+      }
+
+      this._element.style.display = 'block';
+
+      this._element.removeAttribute('aria-hidden');
+
+      this._element.setAttribute('aria-modal', true);
+
+      if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {
+        this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0;
+      } else {
+        this._element.scrollTop = 0;
+      }
+
+      if (transition) {
+        Util.reflow(this._element);
+      }
+
+      $(this._element).addClass(ClassName.SHOW);
+
+      if (this._config.focus) {
+        this._enforceFocus();
+      }
+
+      var shownEvent = $.Event(Event.SHOWN, {
+        relatedTarget: relatedTarget
+      });
+
+      var transitionComplete = function transitionComplete() {
+        if (_this3._config.focus) {
+          _this3._element.focus();
+        }
+
+        _this3._isTransitioning = false;
+        $(_this3._element).trigger(shownEvent);
+      };
+
+      if (transition) {
+        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
+        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
+      } else {
+        transitionComplete();
+      }
+    };
+
+    _proto._enforceFocus = function _enforceFocus() {
+      var _this4 = this;
+
+      $(document).off(Event.FOCUSIN) // Guard against infinite focus loop
+      .on(Event.FOCUSIN, function (event) {
+        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
+          _this4._element.focus();
+        }
+      });
+    };
+
+    _proto._setEscapeEvent = function _setEscapeEvent() {
+      var _this5 = this;
+
+      if (this._isShown && this._config.keyboard) {
+        $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
+          if (event.which === ESCAPE_KEYCODE) {
+            event.preventDefault();
+
+            _this5.hide();
+          }
+        });
+      } else if (!this._isShown) {
+        $(this._element).off(Event.KEYDOWN_DISMISS);
+      }
+    };
+
+    _proto._setResizeEvent = function _setResizeEvent() {
+      var _this6 = this;
+
+      if (this._isShown) {
+        $(window).on(Event.RESIZE, function (event) {
+          return _this6.handleUpdate(event);
+        });
+      } else {
+        $(window).off(Event.RESIZE);
+      }
+    };
+
+    _proto._hideModal = function _hideModal() {
+      var _this7 = this;
+
+      this._element.style.display = 'none';
+
+      this._element.setAttribute('aria-hidden', true);
+
+      this._element.removeAttribute('aria-modal');
+
+      this._isTransitioning = false;
+
+      this._showBackdrop(function () {
+        $(document.body).removeClass(ClassName.OPEN);
+
+        _this7._resetAdjustments();
+
+        _this7._resetScrollbar();
+
+        $(_this7._element).trigger(Event.HIDDEN);
+      });
+    };
+
+    _proto._removeBackdrop = function _removeBackdrop() {
+      if (this._backdrop) {
+        $(this._backdrop).remove();
+        this._backdrop = null;
+      }
+    };
+
+    _proto._showBackdrop = function _showBackdrop(callback) {
+      var _this8 = this;
+
+      var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
+
+      if (this._isShown && this._config.backdrop) {
+        this._backdrop = document.createElement('div');
+        this._backdrop.className = ClassName.BACKDROP;
+
+        if (animate) {
+          this._backdrop.classList.add(animate);
+        }
+
+        $(this._backdrop).appendTo(document.body);
+        $(this._element).on(Event.CLICK_DISMISS, function (event) {
+          if (_this8._ignoreBackdropClick) {
+            _this8._ignoreBackdropClick = false;
+            return;
+          }
+
+          if (event.target !== event.currentTarget) {
+            return;
+          }
+
+          if (_this8._config.backdrop === 'static') {
+            _this8._element.focus();
+          } else {
+            _this8.hide();
+          }
+        });
+
+        if (animate) {
+          Util.reflow(this._backdrop);
+        }
+
+        $(this._backdrop).addClass(ClassName.SHOW);
+
+        if (!callback) {
+          return;
+        }
+
+        if (!animate) {
+          callback();
+          return;
+        }
+
+        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
+        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
+      } else if (!this._isShown && this._backdrop) {
+        $(this._backdrop).removeClass(ClassName.SHOW);
+
+        var callbackRemove = function callbackRemove() {
+          _this8._removeBackdrop();
+
+          if (callback) {
+            callback();
+          }
+        };
+
+        if ($(this._element).hasClass(ClassName.FADE)) {
+          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
+
+          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
+        } else {
+          callbackRemove();
+        }
+      } else if (callback) {
+        callback();
+      }
+    } // ----------------------------------------------------------------------
+    // the following methods are used to handle overflowing modals
+    // todo (fat): these should probably be refactored out of modal.js
+    // ----------------------------------------------------------------------
+    ;
+
+    _proto._adjustDialog = function _adjustDialog() {
+      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
+
+      if (!this._isBodyOverflowing && isModalOverflowing) {
+        this._element.style.paddingLeft = this._scrollbarWidth + "px";
+      }
+
+      if (this._isBodyOverflowing && !isModalOverflowing) {
+        this._element.style.paddingRight = this._scrollbarWidth + "px";
+      }
+    };
+
+    _proto._resetAdjustments = function _resetAdjustments() {
+      this._element.style.paddingLeft = '';
+      this._element.style.paddingRight = '';
+    };
+
+    _proto._checkScrollbar = function _checkScrollbar() {
+      var rect = document.body.getBoundingClientRect();
+      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
+      this._scrollbarWidth = this._getScrollbarWidth();
+    };
+
+    _proto._setScrollbar = function _setScrollbar() {
+      var _this9 = this;
+
+      if (this._isBodyOverflowing) {
+        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
+        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
+        var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
+        var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding
+
+        $(fixedContent).each(function (index, element) {
+          var actualPadding = element.style.paddingRight;
+          var calculatedPadding = $(element).css('padding-right');
+          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
+        }); // Adjust sticky content margin
+
+        $(stickyContent).each(function (index, element) {
+          var actualMargin = element.style.marginRight;
+          var calculatedMargin = $(element).css('margin-right');
+          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
+        }); // Adjust body padding
+
+        var actualPadding = document.body.style.paddingRight;
+        var calculatedPadding = $(document.body).css('padding-right');
+        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
+      }
+
+      $(document.body).addClass(ClassName.OPEN);
+    };
+
+    _proto._resetScrollbar = function _resetScrollbar() {
+      // Restore fixed content padding
+      var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
+      $(fixedContent).each(function (index, element) {
+        var padding = $(element).data('padding-right');
+        $(element).removeData('padding-right');
+        element.style.paddingRight = padding ? padding : '';
+      }); // Restore sticky content
+
+      var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT));
+      $(elements).each(function (index, element) {
+        var margin = $(element).data('margin-right');
+
+        if (typeof margin !== 'undefined') {
+          $(element).css('margin-right', margin).removeData('margin-right');
+        }
+      }); // Restore body padding
+
+      var padding = $(document.body).data('padding-right');
+      $(document.body).removeData('padding-right');
+      document.body.style.paddingRight = padding ? padding : '';
+    };
+
+    _proto._getScrollbarWidth = function _getScrollbarWidth() {
+      // thx d.walsh
+      var scrollDiv = document.createElement('div');
+      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
+      document.body.appendChild(scrollDiv);
+      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
+      document.body.removeChild(scrollDiv);
+      return scrollbarWidth;
+    } // Static
+    ;
+
+    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});
+
+        if (!data) {
+          data = new Modal(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config](relatedTarget);
+        } else if (_config.show) {
+          data.show(relatedTarget);
+        }
+      });
+    };
+
+    _createClass(Modal, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Modal;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    var _this10 = this;
+
+    var target;
+    var selector = Util.getSelectorFromElement(this);
+
+    if (selector) {
+      target = document.querySelector(selector);
+    }
+
+    var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
+
+    if (this.tagName === 'A' || this.tagName === 'AREA') {
+      event.preventDefault();
+    }
+
+    var $target = $(target).one(Event.SHOW, function (showEvent) {
+      if (showEvent.isDefaultPrevented()) {
+        // Only register focus restorer if modal will actually get shown
+        return;
+      }
+
+      $target.one(Event.HIDDEN, function () {
+        if ($(_this10).is(':visible')) {
+          _this10.focus();
+        }
+      });
+    });
+
+    Modal._jQueryInterface.call($(target), config, this);
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Modal._jQueryInterface;
+  $.fn[NAME].Constructor = Modal;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Modal._jQueryInterface;
+  };
+
+  return Modal;
+
+}));
+/*!
+  * Bootstrap tooltip.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
+  (global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));
+}(this, function ($, Popper, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * --------------------------------------------------------------------------
+   * Bootstrap (v4.3.1): tools/sanitizer.js
+   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+   * --------------------------------------------------------------------------
+   */
+  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
+  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+  var DefaultWhitelist = {
+    // Global attributes allowed on any supplied element below.
+    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+    a: ['target', 'href', 'title', 'rel'],
+    area: [],
+    b: [],
+    br: [],
+    col: [],
+    code: [],
+    div: [],
+    em: [],
+    hr: [],
+    h1: [],
+    h2: [],
+    h3: [],
+    h4: [],
+    h5: [],
+    h6: [],
+    i: [],
+    img: ['src', 'alt', 'title', 'width', 'height'],
+    li: [],
+    ol: [],
+    p: [],
+    pre: [],
+    s: [],
+    small: [],
+    span: [],
+    sub: [],
+    sup: [],
+    strong: [],
+    u: [],
+    ul: []
+    /**
+     * A pattern that recognizes a commonly useful subset of URLs that are safe.
+     *
+     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+     */
+
+  };
+  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
+  /**
+   * A pattern that matches safe data URLs. Only matches image, video and audio types.
+   *
+   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+   */
+
+  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
+
+  function allowedAttribute(attr, allowedAttributeList) {
+    var attrName = attr.nodeName.toLowerCase();
+
+    if (allowedAttributeList.indexOf(attrName) !== -1) {
+      if (uriAttrs.indexOf(attrName) !== -1) {
+        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
+      }
+
+      return true;
+    }
+
+    var regExp = allowedAttributeList.filter(function (attrRegex) {
+      return attrRegex instanceof RegExp;
+    }); // Check if a regular expression validates the attribute.
+
+    for (var i = 0, l = regExp.length; i < l; i++) {
+      if (attrName.match(regExp[i])) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
+    if (unsafeHtml.length === 0) {
+      return unsafeHtml;
+    }
+
+    if (sanitizeFn && typeof sanitizeFn === 'function') {
+      return sanitizeFn(unsafeHtml);
+    }
+
+    var domParser = new window.DOMParser();
+    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
+    var whitelistKeys = Object.keys(whiteList);
+    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
+
+    var _loop = function _loop(i, len) {
+      var el = elements[i];
+      var elName = el.nodeName.toLowerCase();
+
+      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
+        el.parentNode.removeChild(el);
+        return "continue";
+      }
+
+      var attributeList = [].slice.call(el.attributes);
+      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
+      attributeList.forEach(function (attr) {
+        if (!allowedAttribute(attr, whitelistedAttributes)) {
+          el.removeAttribute(attr.nodeName);
+        }
+      });
+    };
+
+    for (var i = 0, len = elements.length; i < len; i++) {
+      var _ret = _loop(i, len);
+
+      if (_ret === "continue") continue;
+    }
+
+    return createdDocument.body.innerHTML;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'tooltip';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.tooltip';
+  var EVENT_KEY = "." + DATA_KEY;
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var CLASS_PREFIX = 'bs-tooltip';
+  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
+  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
+  var DefaultType = {
+    animation: 'boolean',
+    template: 'string',
+    title: '(string|element|function)',
+    trigger: 'string',
+    delay: '(number|object)',
+    html: 'boolean',
+    selector: '(string|boolean)',
+    placement: '(string|function)',
+    offset: '(number|string|function)',
+    container: '(string|element|boolean)',
+    fallbackPlacement: '(string|array)',
+    boundary: '(string|element)',
+    sanitize: 'boolean',
+    sanitizeFn: '(null|function)',
+    whiteList: 'object'
+  };
+  var AttachmentMap = {
+    AUTO: 'auto',
+    TOP: 'top',
+    RIGHT: 'right',
+    BOTTOM: 'bottom',
+    LEFT: 'left'
+  };
+  var Default = {
+    animation: true,
+    template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
+    trigger: 'hover focus',
+    title: '',
+    delay: 0,
+    html: false,
+    selector: false,
+    placement: 'top',
+    offset: 0,
+    container: false,
+    fallbackPlacement: 'flip',
+    boundary: 'scrollParent',
+    sanitize: true,
+    sanitizeFn: null,
+    whiteList: DefaultWhitelist
+  };
+  var HoverState = {
+    SHOW: 'show',
+    OUT: 'out'
+  };
+  var Event = {
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    INSERTED: "inserted" + EVENT_KEY,
+    CLICK: "click" + EVENT_KEY,
+    FOCUSIN: "focusin" + EVENT_KEY,
+    FOCUSOUT: "focusout" + EVENT_KEY,
+    MOUSEENTER: "mouseenter" + EVENT_KEY,
+    MOUSELEAVE: "mouseleave" + EVENT_KEY
+  };
+  var ClassName = {
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+  var Selector = {
+    TOOLTIP: '.tooltip',
+    TOOLTIP_INNER: '.tooltip-inner',
+    ARROW: '.arrow'
+  };
+  var Trigger = {
+    HOVER: 'hover',
+    FOCUS: 'focus',
+    CLICK: 'click',
+    MANUAL: 'manual'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Tooltip =
+  /*#__PURE__*/
+  function () {
+    function Tooltip(element, config) {
+      /**
+       * Check for Popper dependency
+       * Popper - https://popper.js.org
+       */
+      if (typeof Popper === 'undefined') {
+        throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
+      } // private
+
+
+      this._isEnabled = true;
+      this._timeout = 0;
+      this._hoverState = '';
+      this._activeTrigger = {};
+      this._popper = null; // Protected
+
+      this.element = element;
+      this.config = this._getConfig(config);
+      this.tip = null;
+
+      this._setListeners();
+    } // Getters
+
+
+    var _proto = Tooltip.prototype;
+
+    // Public
+    _proto.enable = function enable() {
+      this._isEnabled = true;
+    };
+
+    _proto.disable = function disable() {
+      this._isEnabled = false;
+    };
+
+    _proto.toggleEnabled = function toggleEnabled() {
+      this._isEnabled = !this._isEnabled;
+    };
+
+    _proto.toggle = function toggle(event) {
+      if (!this._isEnabled) {
+        return;
+      }
+
+      if (event) {
+        var dataKey = this.constructor.DATA_KEY;
+        var context = $(event.currentTarget).data(dataKey);
+
+        if (!context) {
+          context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+          $(event.currentTarget).data(dataKey, context);
+        }
+
+        context._activeTrigger.click = !context._activeTrigger.click;
+
+        if (context._isWithActiveTrigger()) {
+          context._enter(null, context);
+        } else {
+          context._leave(null, context);
+        }
+      } else {
+        if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {
+          this._leave(null, this);
+
+          return;
+        }
+
+        this._enter(null, this);
+      }
+    };
+
+    _proto.dispose = function dispose() {
+      clearTimeout(this._timeout);
+      $.removeData(this.element, this.constructor.DATA_KEY);
+      $(this.element).off(this.constructor.EVENT_KEY);
+      $(this.element).closest('.modal').off('hide.bs.modal');
+
+      if (this.tip) {
+        $(this.tip).remove();
+      }
+
+      this._isEnabled = null;
+      this._timeout = null;
+      this._hoverState = null;
+      this._activeTrigger = null;
+
+      if (this._popper !== null) {
+        this._popper.destroy();
+      }
+
+      this._popper = null;
+      this.element = null;
+      this.config = null;
+      this.tip = null;
+    };
+
+    _proto.show = function show() {
+      var _this = this;
+
+      if ($(this.element).css('display') === 'none') {
+        throw new Error('Please use show on visible elements');
+      }
+
+      var showEvent = $.Event(this.constructor.Event.SHOW);
+
+      if (this.isWithContent() && this._isEnabled) {
+        $(this.element).trigger(showEvent);
+        var shadowRoot = Util.findShadowRoot(this.element);
+        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
+
+        if (showEvent.isDefaultPrevented() || !isInTheDom) {
+          return;
+        }
+
+        var tip = this.getTipElement();
+        var tipId = Util.getUID(this.constructor.NAME);
+        tip.setAttribute('id', tipId);
+        this.element.setAttribute('aria-describedby', tipId);
+        this.setContent();
+
+        if (this.config.animation) {
+          $(tip).addClass(ClassName.FADE);
+        }
+
+        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
+
+        var attachment = this._getAttachment(placement);
+
+        this.addAttachmentClass(attachment);
+
+        var container = this._getContainer();
+
+        $(tip).data(this.constructor.DATA_KEY, this);
+
+        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {
+          $(tip).appendTo(container);
+        }
+
+        $(this.element).trigger(this.constructor.Event.INSERTED);
+        this._popper = new Popper(this.element, tip, {
+          placement: attachment,
+          modifiers: {
+            offset: this._getOffset(),
+            flip: {
+              behavior: this.config.fallbackPlacement
+            },
+            arrow: {
+              element: Selector.ARROW
+            },
+            preventOverflow: {
+              boundariesElement: this.config.boundary
+            }
+          },
+          onCreate: function onCreate(data) {
+            if (data.originalPlacement !== data.placement) {
+              _this._handlePopperPlacementChange(data);
+            }
+          },
+          onUpdate: function onUpdate(data) {
+            return _this._handlePopperPlacementChange(data);
+          }
+        });
+        $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
+        // empty mouseover listeners to the body's immediate children;
+        // only needed because of broken event delegation on iOS
+        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
+
+        if ('ontouchstart' in document.documentElement) {
+          $(document.body).children().on('mouseover', null, $.noop);
+        }
+
+        var complete = function complete() {
+          if (_this.config.animation) {
+            _this._fixTransition();
+          }
+
+          var prevHoverState = _this._hoverState;
+          _this._hoverState = null;
+          $(_this.element).trigger(_this.constructor.Event.SHOWN);
+
+          if (prevHoverState === HoverState.OUT) {
+            _this._leave(null, _this);
+          }
+        };
+
+        if ($(this.tip).hasClass(ClassName.FADE)) {
+          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
+          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+        } else {
+          complete();
+        }
+      }
+    };
+
+    _proto.hide = function hide(callback) {
+      var _this2 = this;
+
+      var tip = this.getTipElement();
+      var hideEvent = $.Event(this.constructor.Event.HIDE);
+
+      var complete = function complete() {
+        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
+          tip.parentNode.removeChild(tip);
+        }
+
+        _this2._cleanTipClass();
+
+        _this2.element.removeAttribute('aria-describedby');
+
+        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
+
+        if (_this2._popper !== null) {
+          _this2._popper.destroy();
+        }
+
+        if (callback) {
+          callback();
+        }
+      };
+
+      $(this.element).trigger(hideEvent);
+
+      if (hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
+      // empty mouseover listeners we added for iOS support
+
+      if ('ontouchstart' in document.documentElement) {
+        $(document.body).children().off('mouseover', null, $.noop);
+      }
+
+      this._activeTrigger[Trigger.CLICK] = false;
+      this._activeTrigger[Trigger.FOCUS] = false;
+      this._activeTrigger[Trigger.HOVER] = false;
+
+      if ($(this.tip).hasClass(ClassName.FADE)) {
+        var transitionDuration = Util.getTransitionDurationFromElement(tip);
+        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+      } else {
+        complete();
+      }
+
+      this._hoverState = '';
+    };
+
+    _proto.update = function update() {
+      if (this._popper !== null) {
+        this._popper.scheduleUpdate();
+      }
+    } // Protected
+    ;
+
+    _proto.isWithContent = function isWithContent() {
+      return Boolean(this.getTitle());
+    };
+
+    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
+      $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
+    };
+
+    _proto.getTipElement = function getTipElement() {
+      this.tip = this.tip || $(this.config.template)[0];
+      return this.tip;
+    };
+
+    _proto.setContent = function setContent() {
+      var tip = this.getTipElement();
+      this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());
+      $(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW);
+    };
+
+    _proto.setElementContent = function setElementContent($element, content) {
+      if (typeof content === 'object' && (content.nodeType || content.jquery)) {
+        // Content is a DOM node or a jQuery
+        if (this.config.html) {
+          if (!$(content).parent().is($element)) {
+            $element.empty().append(content);
+          }
+        } else {
+          $element.text($(content).text());
+        }
+
+        return;
+      }
+
+      if (this.config.html) {
+        if (this.config.sanitize) {
+          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
+        }
+
+        $element.html(content);
+      } else {
+        $element.text(content);
+      }
+    };
+
+    _proto.getTitle = function getTitle() {
+      var title = this.element.getAttribute('data-original-title');
+
+      if (!title) {
+        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
+      }
+
+      return title;
+    } // Private
+    ;
+
+    _proto._getOffset = function _getOffset() {
+      var _this3 = this;
+
+      var offset = {};
+
+      if (typeof this.config.offset === 'function') {
+        offset.fn = function (data) {
+          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
+          return data;
+        };
+      } else {
+        offset.offset = this.config.offset;
+      }
+
+      return offset;
+    };
+
+    _proto._getContainer = function _getContainer() {
+      if (this.config.container === false) {
+        return document.body;
+      }
+
+      if (Util.isElement(this.config.container)) {
+        return $(this.config.container);
+      }
+
+      return $(document).find(this.config.container);
+    };
+
+    _proto._getAttachment = function _getAttachment(placement) {
+      return AttachmentMap[placement.toUpperCase()];
+    };
+
+    _proto._setListeners = function _setListeners() {
+      var _this4 = this;
+
+      var triggers = this.config.trigger.split(' ');
+      triggers.forEach(function (trigger) {
+        if (trigger === 'click') {
+          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
+            return _this4.toggle(event);
+          });
+        } else if (trigger !== Trigger.MANUAL) {
+          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
+          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
+          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
+            return _this4._enter(event);
+          }).on(eventOut, _this4.config.selector, function (event) {
+            return _this4._leave(event);
+          });
+        }
+      });
+      $(this.element).closest('.modal').on('hide.bs.modal', function () {
+        if (_this4.element) {
+          _this4.hide();
+        }
+      });
+
+      if (this.config.selector) {
+        this.config = _objectSpread({}, this.config, {
+          trigger: 'manual',
+          selector: ''
+        });
+      } else {
+        this._fixTitle();
+      }
+    };
+
+    _proto._fixTitle = function _fixTitle() {
+      var titleType = typeof this.element.getAttribute('data-original-title');
+
+      if (this.element.getAttribute('title') || titleType !== 'string') {
+        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
+        this.element.setAttribute('title', '');
+      }
+    };
+
+    _proto._enter = function _enter(event, context) {
+      var dataKey = this.constructor.DATA_KEY;
+      context = context || $(event.currentTarget).data(dataKey);
+
+      if (!context) {
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+        $(event.currentTarget).data(dataKey, context);
+      }
+
+      if (event) {
+        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
+      }
+
+      if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
+        context._hoverState = HoverState.SHOW;
+        return;
+      }
+
+      clearTimeout(context._timeout);
+      context._hoverState = HoverState.SHOW;
+
+      if (!context.config.delay || !context.config.delay.show) {
+        context.show();
+        return;
+      }
+
+      context._timeout = setTimeout(function () {
+        if (context._hoverState === HoverState.SHOW) {
+          context.show();
+        }
+      }, context.config.delay.show);
+    };
+
+    _proto._leave = function _leave(event, context) {
+      var dataKey = this.constructor.DATA_KEY;
+      context = context || $(event.currentTarget).data(dataKey);
+
+      if (!context) {
+        context = new this.constructor(event.currentTarget, this._getDelegateConfig());
+        $(event.currentTarget).data(dataKey, context);
+      }
+
+      if (event) {
+        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
+      }
+
+      if (context._isWithActiveTrigger()) {
+        return;
+      }
+
+      clearTimeout(context._timeout);
+      context._hoverState = HoverState.OUT;
+
+      if (!context.config.delay || !context.config.delay.hide) {
+        context.hide();
+        return;
+      }
+
+      context._timeout = setTimeout(function () {
+        if (context._hoverState === HoverState.OUT) {
+          context.hide();
+        }
+      }, context.config.delay.hide);
+    };
+
+    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
+      for (var trigger in this._activeTrigger) {
+        if (this._activeTrigger[trigger]) {
+          return true;
+        }
+      }
+
+      return false;
+    };
+
+    _proto._getConfig = function _getConfig(config) {
+      var dataAttributes = $(this.element).data();
+      Object.keys(dataAttributes).forEach(function (dataAttr) {
+        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
+          delete dataAttributes[dataAttr];
+        }
+      });
+      config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
+
+      if (typeof config.delay === 'number') {
+        config.delay = {
+          show: config.delay,
+          hide: config.delay
+        };
+      }
+
+      if (typeof config.title === 'number') {
+        config.title = config.title.toString();
+      }
+
+      if (typeof config.content === 'number') {
+        config.content = config.content.toString();
+      }
+
+      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+
+      if (config.sanitize) {
+        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
+      }
+
+      return config;
+    };
+
+    _proto._getDelegateConfig = function _getDelegateConfig() {
+      var config = {};
+
+      if (this.config) {
+        for (var key in this.config) {
+          if (this.constructor.Default[key] !== this.config[key]) {
+            config[key] = this.config[key];
+          }
+        }
+      }
+
+      return config;
+    };
+
+    _proto._cleanTipClass = function _cleanTipClass() {
+      var $tip = $(this.getTipElement());
+      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
+
+      if (tabClass !== null && tabClass.length) {
+        $tip.removeClass(tabClass.join(''));
+      }
+    };
+
+    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
+      var popperInstance = popperData.instance;
+      this.tip = popperInstance.popper;
+
+      this._cleanTipClass();
+
+      this.addAttachmentClass(this._getAttachment(popperData.placement));
+    };
+
+    _proto._fixTransition = function _fixTransition() {
+      var tip = this.getTipElement();
+      var initConfigAnimation = this.config.animation;
+
+      if (tip.getAttribute('x-placement') !== null) {
+        return;
+      }
+
+      $(tip).removeClass(ClassName.FADE);
+      this.config.animation = false;
+      this.hide();
+      this.show();
+      this.config.animation = initConfigAnimation;
+    } // Static
+    ;
+
+    Tooltip._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = typeof config === 'object' && config;
+
+        if (!data && /dispose|hide/.test(config)) {
+          return;
+        }
+
+        if (!data) {
+          data = new Tooltip(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Tooltip, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }, {
+      key: "NAME",
+      get: function get() {
+        return NAME;
+      }
+    }, {
+      key: "DATA_KEY",
+      get: function get() {
+        return DATA_KEY;
+      }
+    }, {
+      key: "Event",
+      get: function get() {
+        return Event;
+      }
+    }, {
+      key: "EVENT_KEY",
+      get: function get() {
+        return EVENT_KEY;
+      }
+    }, {
+      key: "DefaultType",
+      get: function get() {
+        return DefaultType;
+      }
+    }]);
+
+    return Tooltip;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+
+  $.fn[NAME] = Tooltip._jQueryInterface;
+  $.fn[NAME].Constructor = Tooltip;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Tooltip._jQueryInterface;
+  };
+
+  return Tooltip;
+
+}));
+/*!
+  * Bootstrap popover.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './tooltip.js'], factory) :
+  (global = global || self, global.Popover = factory(global.jQuery, global.Tooltip));
+}(this, function ($, Tooltip) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Tooltip = Tooltip && Tooltip.hasOwnProperty('default') ? Tooltip['default'] : Tooltip;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  function _inheritsLoose(subClass, superClass) {
+    subClass.prototype = Object.create(superClass.prototype);
+    subClass.prototype.constructor = subClass;
+    subClass.__proto__ = superClass;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'popover';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.popover';
+  var EVENT_KEY = "." + DATA_KEY;
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var CLASS_PREFIX = 'bs-popover';
+  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
+
+  var Default = _objectSpread({}, Tooltip.Default, {
+    placement: 'right',
+    trigger: 'click',
+    content: '',
+    template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
+  });
+
+  var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
+    content: '(string|element|function)'
+  });
+
+  var ClassName = {
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+  var Selector = {
+    TITLE: '.popover-header',
+    CONTENT: '.popover-body'
+  };
+  var Event = {
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    INSERTED: "inserted" + EVENT_KEY,
+    CLICK: "click" + EVENT_KEY,
+    FOCUSIN: "focusin" + EVENT_KEY,
+    FOCUSOUT: "focusout" + EVENT_KEY,
+    MOUSEENTER: "mouseenter" + EVENT_KEY,
+    MOUSELEAVE: "mouseleave" + EVENT_KEY
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Popover =
+  /*#__PURE__*/
+  function (_Tooltip) {
+    _inheritsLoose(Popover, _Tooltip);
+
+    function Popover() {
+      return _Tooltip.apply(this, arguments) || this;
+    }
+
+    var _proto = Popover.prototype;
+
+    // Overrides
+    _proto.isWithContent = function isWithContent() {
+      return this.getTitle() || this._getContent();
+    };
+
+    _proto.addAttachmentClass = function addAttachmentClass(attachment) {
+      $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
+    };
+
+    _proto.getTipElement = function getTipElement() {
+      this.tip = this.tip || $(this.config.template)[0];
+      return this.tip;
+    };
+
+    _proto.setContent = function setContent() {
+      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events
+
+      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
+
+      var content = this._getContent();
+
+      if (typeof content === 'function') {
+        content = content.call(this.element);
+      }
+
+      this.setElementContent($tip.find(Selector.CONTENT), content);
+      $tip.removeClass(ClassName.FADE + " " + ClassName.SHOW);
+    } // Private
+    ;
+
+    _proto._getContent = function _getContent() {
+      return this.element.getAttribute('data-content') || this.config.content;
+    };
+
+    _proto._cleanTipClass = function _cleanTipClass() {
+      var $tip = $(this.getTipElement());
+      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
+
+      if (tabClass !== null && tabClass.length > 0) {
+        $tip.removeClass(tabClass.join(''));
+      }
+    } // Static
+    ;
+
+    Popover._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = typeof config === 'object' ? config : null;
+
+        if (!data && /dispose|hide/.test(config)) {
+          return;
+        }
+
+        if (!data) {
+          data = new Popover(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Popover, null, [{
+      key: "VERSION",
+      // Getters
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }, {
+      key: "NAME",
+      get: function get() {
+        return NAME;
+      }
+    }, {
+      key: "DATA_KEY",
+      get: function get() {
+        return DATA_KEY;
+      }
+    }, {
+      key: "Event",
+      get: function get() {
+        return Event;
+      }
+    }, {
+      key: "EVENT_KEY",
+      get: function get() {
+        return EVENT_KEY;
+      }
+    }, {
+      key: "DefaultType",
+      get: function get() {
+        return DefaultType;
+      }
+    }]);
+
+    return Popover;
+  }(Tooltip);
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+
+  $.fn[NAME] = Popover._jQueryInterface;
+  $.fn[NAME].Constructor = Popover;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Popover._jQueryInterface;
+  };
+
+  return Popover;
+
+}));
+/*!
+  * Bootstrap scrollspy.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.ScrollSpy = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'scrollspy';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.scrollspy';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var Default = {
+    offset: 10,
+    method: 'auto',
+    target: ''
+  };
+  var DefaultType = {
+    offset: 'number',
+    method: 'string',
+    target: '(string|element)'
+  };
+  var Event = {
+    ACTIVATE: "activate" + EVENT_KEY,
+    SCROLL: "scroll" + EVENT_KEY,
+    LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    DROPDOWN_ITEM: 'dropdown-item',
+    DROPDOWN_MENU: 'dropdown-menu',
+    ACTIVE: 'active'
+  };
+  var Selector = {
+    DATA_SPY: '[data-spy="scroll"]',
+    ACTIVE: '.active',
+    NAV_LIST_GROUP: '.nav, .list-group',
+    NAV_LINKS: '.nav-link',
+    NAV_ITEMS: '.nav-item',
+    LIST_ITEMS: '.list-group-item',
+    DROPDOWN: '.dropdown',
+    DROPDOWN_ITEMS: '.dropdown-item',
+    DROPDOWN_TOGGLE: '.dropdown-toggle'
+  };
+  var OffsetMethod = {
+    OFFSET: 'offset',
+    POSITION: 'position'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var ScrollSpy =
+  /*#__PURE__*/
+  function () {
+    function ScrollSpy(element, config) {
+      var _this = this;
+
+      this._element = element;
+      this._scrollElement = element.tagName === 'BODY' ? window : element;
+      this._config = this._getConfig(config);
+      this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS);
+      this._offsets = [];
+      this._targets = [];
+      this._activeTarget = null;
+      this._scrollHeight = 0;
+      $(this._scrollElement).on(Event.SCROLL, function (event) {
+        return _this._process(event);
+      });
+      this.refresh();
+
+      this._process();
+    } // Getters
+
+
+    var _proto = ScrollSpy.prototype;
+
+    // Public
+    _proto.refresh = function refresh() {
+      var _this2 = this;
+
+      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;
+      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
+      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
+      this._offsets = [];
+      this._targets = [];
+      this._scrollHeight = this._getScrollHeight();
+      var targets = [].slice.call(document.querySelectorAll(this._selector));
+      targets.map(function (element) {
+        var target;
+        var targetSelector = Util.getSelectorFromElement(element);
+
+        if (targetSelector) {
+          target = document.querySelector(targetSelector);
+        }
+
+        if (target) {
+          var targetBCR = target.getBoundingClientRect();
+
+          if (targetBCR.width || targetBCR.height) {
+            // TODO (fat): remove sketch reliance on jQuery position/offset
+            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
+          }
+        }
+
+        return null;
+      }).filter(function (item) {
+        return item;
+      }).sort(function (a, b) {
+        return a[0] - b[0];
+      }).forEach(function (item) {
+        _this2._offsets.push(item[0]);
+
+        _this2._targets.push(item[1]);
+      });
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      $(this._scrollElement).off(EVENT_KEY);
+      this._element = null;
+      this._scrollElement = null;
+      this._config = null;
+      this._selector = null;
+      this._offsets = null;
+      this._targets = null;
+      this._activeTarget = null;
+      this._scrollHeight = null;
+    } // Private
+    ;
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {});
+
+      if (typeof config.target !== 'string') {
+        var id = $(config.target).attr('id');
+
+        if (!id) {
+          id = Util.getUID(NAME);
+          $(config.target).attr('id', id);
+        }
+
+        config.target = "#" + id;
+      }
+
+      Util.typeCheckConfig(NAME, config, DefaultType);
+      return config;
+    };
+
+    _proto._getScrollTop = function _getScrollTop() {
+      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
+    };
+
+    _proto._getScrollHeight = function _getScrollHeight() {
+      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
+    };
+
+    _proto._getOffsetHeight = function _getOffsetHeight() {
+      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
+    };
+
+    _proto._process = function _process() {
+      var scrollTop = this._getScrollTop() + this._config.offset;
+
+      var scrollHeight = this._getScrollHeight();
+
+      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
+
+      if (this._scrollHeight !== scrollHeight) {
+        this.refresh();
+      }
+
+      if (scrollTop >= maxScroll) {
+        var target = this._targets[this._targets.length - 1];
+
+        if (this._activeTarget !== target) {
+          this._activate(target);
+        }
+
+        return;
+      }
+
+      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
+        this._activeTarget = null;
+
+        this._clear();
+
+        return;
+      }
+
+      var offsetLength = this._offsets.length;
+
+      for (var i = offsetLength; i--;) {
+        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
+
+        if (isActiveTarget) {
+          this._activate(this._targets[i]);
+        }
+      }
+    };
+
+    _proto._activate = function _activate(target) {
+      this._activeTarget = target;
+
+      this._clear();
+
+      var queries = this._selector.split(',').map(function (selector) {
+        return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
+      });
+
+      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));
+
+      if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
+        $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
+        $link.addClass(ClassName.ACTIVE);
+      } else {
+        // Set triggered link as active
+        $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active
+        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
+
+        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item
+
+        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
+      }
+
+      $(this._scrollElement).trigger(Event.ACTIVATE, {
+        relatedTarget: target
+      });
+    };
+
+    _proto._clear = function _clear() {
+      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
+        return node.classList.contains(ClassName.ACTIVE);
+      }).forEach(function (node) {
+        return node.classList.remove(ClassName.ACTIVE);
+      });
+    } // Static
+    ;
+
+    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var data = $(this).data(DATA_KEY);
+
+        var _config = typeof config === 'object' && config;
+
+        if (!data) {
+          data = new ScrollSpy(this, _config);
+          $(this).data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(ScrollSpy, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return ScrollSpy;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(window).on(Event.LOAD_DATA_API, function () {
+    var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY));
+    var scrollSpysLength = scrollSpys.length;
+
+    for (var i = scrollSpysLength; i--;) {
+      var $spy = $(scrollSpys[i]);
+
+      ScrollSpy._jQueryInterface.call($spy, $spy.data());
+    }
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = ScrollSpy._jQueryInterface;
+  $.fn[NAME].Constructor = ScrollSpy;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return ScrollSpy._jQueryInterface;
+  };
+
+  return ScrollSpy;
+
+}));
+/*!
+  * Bootstrap tab.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Tab = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'tab';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.tab';
+  var EVENT_KEY = "." + DATA_KEY;
+  var DATA_API_KEY = '.data-api';
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var Event = {
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY,
+    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
+  };
+  var ClassName = {
+    DROPDOWN_MENU: 'dropdown-menu',
+    ACTIVE: 'active',
+    DISABLED: 'disabled',
+    FADE: 'fade',
+    SHOW: 'show'
+  };
+  var Selector = {
+    DROPDOWN: '.dropdown',
+    NAV_LIST_GROUP: '.nav, .list-group',
+    ACTIVE: '.active',
+    ACTIVE_UL: '> li > .active',
+    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
+    DROPDOWN_TOGGLE: '.dropdown-toggle',
+    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Tab =
+  /*#__PURE__*/
+  function () {
+    function Tab(element) {
+      this._element = element;
+    } // Getters
+
+
+    var _proto = Tab.prototype;
+
+    // Public
+    _proto.show = function show() {
+      var _this = this;
+
+      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
+        return;
+      }
+
+      var target;
+      var previous;
+      var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];
+      var selector = Util.getSelectorFromElement(this._element);
+
+      if (listElement) {
+        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
+        previous = $.makeArray($(listElement).find(itemSelector));
+        previous = previous[previous.length - 1];
+      }
+
+      var hideEvent = $.Event(Event.HIDE, {
+        relatedTarget: this._element
+      });
+      var showEvent = $.Event(Event.SHOW, {
+        relatedTarget: previous
+      });
+
+      if (previous) {
+        $(previous).trigger(hideEvent);
+      }
+
+      $(this._element).trigger(showEvent);
+
+      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
+        return;
+      }
+
+      if (selector) {
+        target = document.querySelector(selector);
+      }
+
+      this._activate(this._element, listElement);
+
+      var complete = function complete() {
+        var hiddenEvent = $.Event(Event.HIDDEN, {
+          relatedTarget: _this._element
+        });
+        var shownEvent = $.Event(Event.SHOWN, {
+          relatedTarget: previous
+        });
+        $(previous).trigger(hiddenEvent);
+        $(_this._element).trigger(shownEvent);
+      };
+
+      if (target) {
+        this._activate(target, target.parentNode, complete);
+      } else {
+        complete();
+      }
+    };
+
+    _proto.dispose = function dispose() {
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+    } // Private
+    ;
+
+    _proto._activate = function _activate(element, container, callback) {
+      var _this2 = this;
+
+      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE);
+      var active = activeElements[0];
+      var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);
+
+      var complete = function complete() {
+        return _this2._transitionComplete(element, active, callback);
+      };
+
+      if (active && isTransitioning) {
+        var transitionDuration = Util.getTransitionDurationFromElement(active);
+        $(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+      } else {
+        complete();
+      }
+    };
+
+    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
+      if (active) {
+        $(active).removeClass(ClassName.ACTIVE);
+        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
+
+        if (dropdownChild) {
+          $(dropdownChild).removeClass(ClassName.ACTIVE);
+        }
+
+        if (active.getAttribute('role') === 'tab') {
+          active.setAttribute('aria-selected', false);
+        }
+      }
+
+      $(element).addClass(ClassName.ACTIVE);
+
+      if (element.getAttribute('role') === 'tab') {
+        element.setAttribute('aria-selected', true);
+      }
+
+      Util.reflow(element);
+
+      if (element.classList.contains(ClassName.FADE)) {
+        element.classList.add(ClassName.SHOW);
+      }
+
+      if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
+        var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
+
+        if (dropdownElement) {
+          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
+          $(dropdownToggleList).addClass(ClassName.ACTIVE);
+        }
+
+        element.setAttribute('aria-expanded', true);
+      }
+
+      if (callback) {
+        callback();
+      }
+    } // Static
+    ;
+
+    Tab._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $this = $(this);
+        var data = $this.data(DATA_KEY);
+
+        if (!data) {
+          data = new Tab(this);
+          $this.data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config]();
+        }
+      });
+    };
+
+    _createClass(Tab, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }]);
+
+    return Tab;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * Data Api implementation
+   * ------------------------------------------------------------------------
+   */
+
+
+  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
+    event.preventDefault();
+
+    Tab._jQueryInterface.call($(this), 'show');
+  });
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+  $.fn[NAME] = Tab._jQueryInterface;
+  $.fn[NAME].Constructor = Tab;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Tab._jQueryInterface;
+  };
+
+  return Tab;
+
+}));
+/*!
+  * Bootstrap toast.js v4.3.1 (https://getbootstrap.com/)
+  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+  */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
+  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
+  (global = global || self, global.Toast = factory(global.jQuery, global.Util));
+}(this, function ($, Util) { 'use strict';
+
+  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+
+  function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      Object.defineProperty(target, descriptor.key, descriptor);
+    }
+  }
+
+  function _createClass(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+    return Constructor;
+  }
+
+  function _defineProperty(obj, key, value) {
+    if (key in obj) {
+      Object.defineProperty(obj, key, {
+        value: value,
+        enumerable: true,
+        configurable: true,
+        writable: true
+      });
+    } else {
+      obj[key] = value;
+    }
+
+    return obj;
+  }
+
+  function _objectSpread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments[i] != null ? arguments[i] : {};
+      var ownKeys = Object.keys(source);
+
+      if (typeof Object.getOwnPropertySymbols === 'function') {
+        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
+          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+        }));
+      }
+
+      ownKeys.forEach(function (key) {
+        _defineProperty(target, key, source[key]);
+      });
+    }
+
+    return target;
+  }
+
+  /**
+   * ------------------------------------------------------------------------
+   * Constants
+   * ------------------------------------------------------------------------
+   */
+
+  var NAME = 'toast';
+  var VERSION = '4.3.1';
+  var DATA_KEY = 'bs.toast';
+  var EVENT_KEY = "." + DATA_KEY;
+  var JQUERY_NO_CONFLICT = $.fn[NAME];
+  var Event = {
+    CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
+    HIDE: "hide" + EVENT_KEY,
+    HIDDEN: "hidden" + EVENT_KEY,
+    SHOW: "show" + EVENT_KEY,
+    SHOWN: "shown" + EVENT_KEY
+  };
+  var ClassName = {
+    FADE: 'fade',
+    HIDE: 'hide',
+    SHOW: 'show',
+    SHOWING: 'showing'
+  };
+  var DefaultType = {
+    animation: 'boolean',
+    autohide: 'boolean',
+    delay: 'number'
+  };
+  var Default = {
+    animation: true,
+    autohide: true,
+    delay: 500
+  };
+  var Selector = {
+    DATA_DISMISS: '[data-dismiss="toast"]'
+    /**
+     * ------------------------------------------------------------------------
+     * Class Definition
+     * ------------------------------------------------------------------------
+     */
+
+  };
+
+  var Toast =
+  /*#__PURE__*/
+  function () {
+    function Toast(element, config) {
+      this._element = element;
+      this._config = this._getConfig(config);
+      this._timeout = null;
+
+      this._setListeners();
+    } // Getters
+
+
+    var _proto = Toast.prototype;
+
+    // Public
+    _proto.show = function show() {
+      var _this = this;
+
+      $(this._element).trigger(Event.SHOW);
+
+      if (this._config.animation) {
+        this._element.classList.add(ClassName.FADE);
+      }
+
+      var complete = function complete() {
+        _this._element.classList.remove(ClassName.SHOWING);
+
+        _this._element.classList.add(ClassName.SHOW);
+
+        $(_this._element).trigger(Event.SHOWN);
+
+        if (_this._config.autohide) {
+          _this.hide();
+        }
+      };
+
+      this._element.classList.remove(ClassName.HIDE);
+
+      this._element.classList.add(ClassName.SHOWING);
+
+      if (this._config.animation) {
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
+        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+      } else {
+        complete();
+      }
+    };
+
+    _proto.hide = function hide(withoutTimeout) {
+      var _this2 = this;
+
+      if (!this._element.classList.contains(ClassName.SHOW)) {
+        return;
+      }
+
+      $(this._element).trigger(Event.HIDE);
+
+      if (withoutTimeout) {
+        this._close();
+      } else {
+        this._timeout = setTimeout(function () {
+          _this2._close();
+        }, this._config.delay);
+      }
+    };
+
+    _proto.dispose = function dispose() {
+      clearTimeout(this._timeout);
+      this._timeout = null;
+
+      if (this._element.classList.contains(ClassName.SHOW)) {
+        this._element.classList.remove(ClassName.SHOW);
+      }
+
+      $(this._element).off(Event.CLICK_DISMISS);
+      $.removeData(this._element, DATA_KEY);
+      this._element = null;
+      this._config = null;
+    } // Private
+    ;
+
+    _proto._getConfig = function _getConfig(config) {
+      config = _objectSpread({}, Default, $(this._element).data(), typeof config === 'object' && config ? config : {});
+      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+      return config;
+    };
+
+    _proto._setListeners = function _setListeners() {
+      var _this3 = this;
+
+      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function () {
+        return _this3.hide(true);
+      });
+    };
+
+    _proto._close = function _close() {
+      var _this4 = this;
+
+      var complete = function complete() {
+        _this4._element.classList.add(ClassName.HIDE);
+
+        $(_this4._element).trigger(Event.HIDDEN);
+      };
+
+      this._element.classList.remove(ClassName.SHOW);
+
+      if (this._config.animation) {
+        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
+        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+      } else {
+        complete();
+      }
+    } // Static
+    ;
+
+    Toast._jQueryInterface = function _jQueryInterface(config) {
+      return this.each(function () {
+        var $element = $(this);
+        var data = $element.data(DATA_KEY);
+
+        var _config = typeof config === 'object' && config;
+
+        if (!data) {
+          data = new Toast(this, _config);
+          $element.data(DATA_KEY, data);
+        }
+
+        if (typeof config === 'string') {
+          if (typeof data[config] === 'undefined') {
+            throw new TypeError("No method named \"" + config + "\"");
+          }
+
+          data[config](this);
+        }
+      });
+    };
+
+    _createClass(Toast, null, [{
+      key: "VERSION",
+      get: function get() {
+        return VERSION;
+      }
+    }, {
+      key: "DefaultType",
+      get: function get() {
+        return DefaultType;
+      }
+    }, {
+      key: "Default",
+      get: function get() {
+        return Default;
+      }
+    }]);
+
+    return Toast;
+  }();
+  /**
+   * ------------------------------------------------------------------------
+   * jQuery
+   * ------------------------------------------------------------------------
+   */
+
+
+  $.fn[NAME] = Toast._jQueryInterface;
+  $.fn[NAME].Constructor = Toast;
+
+  $.fn[NAME].noConflict = function () {
+    $.fn[NAME] = JQUERY_NO_CONFLICT;
+    return Toast._jQueryInterface;
+  };
+
+  return Toast;
+
+}));
+
+
+
+
+
+
+
+
+
+
+
+
+/*! jQuery Validation Plugin - v1.19.1 - 6/15/2019
+ * https://jqueryvalidation.org/
+ * Copyright (c) 2019 Jörn Zaefferer; Licensed MIT */
+
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.submitButton=b.currentTarget,a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.submitButton&&(c.settings.submitHandler||c.formSubmitted)&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),!(c.settings.submitHandler&&!c.settings.debug)||(e=c.settings.submitHandler.call(c,c.currentForm,b),d&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0],k="undefined"!=typeof this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=j&&(!j.form&&k&&(j.form=this.closest("form")[0],j.name=this.attr("name")),null!=j.form)){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(a,b){i[b]=f[b],delete f[b]}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g)),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");if(!this.form&&c&&(this.form=a(this).closest("form")[0],this.name=a(this).attr("name")),d===this.form){var e=a.data(this.form,"validator"),f="on"+b.type.replace(/^validate/,""),g=e.settings;g[f]&&!a(this).is(g.ignore)&&g[f].call(e,this,b)}}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.currentForm,e=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){e[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)void 0!==a[b]&&null!==a[b]&&a[b]!==!1&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").trigger("focus").trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name"),e="undefined"!=typeof a(this).attr("contenteditable")&&"false"!==a(this).attr("contenteditable");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),e&&(this.form=a(this).closest("form")[0],this.name=d),this.form===b.currentForm&&(!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0))})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type,g="undefined"!=typeof e.attr("contenteditable")&&"false"!==e.attr("contenteditable");return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=g?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f,g=a(b).rules(),h=a.map(g,function(a,b){return b}).length,i=!1,j=this.elementValue(b);"function"==typeof g.normalizer?f=g.normalizer:"function"==typeof this.settings.normalizer&&(f=this.settings.normalizer),f&&(j=f.call(b,j),delete g.normalizer);for(d in g){e={method:d,parameters:g[d]};try{if(c=a.validator.methods[d].call(this,j,b,e.parameters),"dependency-mismatch"===c&&1===h){i=!0;continue}if(i=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(k){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",k),k instanceof TypeError&&(k.message+=".  Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),k}}if(!i)return this.objectLength(g)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){"string"==typeof c&&(c={method:c});var d=this.findDefined(this.customMessage(b.name,c.method),this.customDataMessage(b,c.method),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c.method],"<strong>Warning: No message defined for "+b.name+"</strong>"),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.submitButton&&a("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),""===d&&(d=!0),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:void 0!==b&&null!==b&&b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(){var a=!1;return function(b,c){return a||(a=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(c)||!/Invalid|NaN/.test(new Date(b).toString())}}(),dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a});
+/*! jQuery Validation Plugin - v1.19.1 - 6/15/2019
+ * https://jqueryvalidation.org/
+ * Copyright (c) 2019 Jörn Zaefferer; Licensed MIT */
+
+!function(a){"function"==typeof define&&define.amd?define(["jquery","./jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return function(){function b(a){return a.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'\"_+=\/\-“”’]*/g,"")}a.validator.addMethod("maxWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length<=d},a.validator.format("Please enter {0} words or less.")),a.validator.addMethod("minWords",function(a,c,d){return this.optional(c)||b(a).match(/\b\w+\b/g).length>=d},a.validator.format("Please enter at least {0} words.")),a.validator.addMethod("rangeWords",function(a,c,d){var e=b(a),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},a.validator.format("Please enter between {0} and {1} words."))}(),a.validator.addMethod("abaRoutingNumber",function(a){var b=0,c=a.split(""),d=c.length;if(9!==d)return!1;for(var e=0;e<d;e+=3)b+=3*parseInt(c[e],10)+7*parseInt(c[e+1],10)+parseInt(c[e+2],10);return 0!==b&&b%10===0},"Please enter a valid routing number."),a.validator.addMethod("accept",function(b,c,d){var e,f,g,h="string"==typeof d?d.replace(/\s/g,""):"image/*",i=this.optional(c);if(i)return i;if("file"===a(c).attr("type")&&(h=h.replace(/[\-\[\]\/\{\}\(\)\+\?\.\\\^\$\|]/g,"\\$&").replace(/,/g,"|").replace(/\/\*/g,"/.*"),c.files&&c.files.length))for(g=new RegExp(".?("+h+")$","i"),e=0;e<c.files.length;e++)if(f=c.files[e],!f.type.match(g))return!1;return!0},a.validator.format("Please enter a value with a valid mimetype.")),a.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),a.validator.addMethod("bankaccountNL",function(a,b){if(this.optional(b))return!0;if(!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a))return!1;var c,d,e,f=a.replace(/ /g,""),g=0,h=f.length;for(c=0;c<h;c++)d=h-c,e=f.substring(c,c+1),g+=d*e;return g%11===0},"Please specify a valid bank account number"),a.validator.addMethod("bankorgiroaccountNL",function(b,c){return this.optional(c)||a.validator.methods.bankaccountNL.call(this,b,c)||a.validator.methods.giroaccountNL.call(this,b,c)},"Please specify a valid bank or giro account number"),a.validator.addMethod("bic",function(a,b){return this.optional(b)||/^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a.toUpperCase())},"Please specify a valid BIC code"),a.validator.addMethod("cifES",function(a,b){"use strict";function c(a){return a%2===0}if(this.optional(b))return!0;var d,e,f,g,h=new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\d{7})([0-9A-J])$/gi),i=a.substring(0,1),j=a.substring(1,8),k=a.substring(8,9),l=0,m=0,n=0;if(9!==a.length||!h.test(a))return!1;for(d=0;d<j.length;d++)e=parseInt(j[d],10),c(d)?(e*=2,n+=e<10?e:e-9):m+=e;return l=m+n,f=(10-l.toString().substr(-1)).toString(),f=parseInt(f,10)>9?"0":f,g="JABCDEFGHI".substr(f,1).toString(),i.match(/[ABEH]/)?k===f:i.match(/[KPQS]/)?k===g:k===f||k===g},"Please specify a valid CIF number."),a.validator.addMethod("cnhBR",function(a){if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var b,c,d,e,f,g,h=0,i=0;if(b=a.charAt(0),new Array(12).join(b)===a)return!1;for(e=0,f=9,g=0;e<9;++e,--f)h+=+(a.charAt(e)*f);for(c=h%11,c>=10&&(c=0,i=2),h=0,e=0,f=1,g=0;e<9;++e,++f)h+=+(a.charAt(e)*f);return d=h%11,d>=10?d=0:d-=i,String(c).concat(d)===a.substr(-2)},"Please specify a valid CNH number"),a.validator.addMethod("cnpjBR",function(a,b){"use strict";if(this.optional(b))return!0;if(a=a.replace(/[^\d]+/g,""),14!==a.length)return!1;if("00000000000000"===a||"11111111111111"===a||"22222222222222"===a||"33333333333333"===a||"44444444444444"===a||"55555555555555"===a||"66666666666666"===a||"77777777777777"===a||"88888888888888"===a||"99999999999999"===a)return!1;for(var c=a.length-2,d=a.substring(0,c),e=a.substring(c),f=0,g=c-7,h=c;h>=1;h--)f+=d.charAt(c-h)*g--,g<2&&(g=9);var i=f%11<2?0:11-f%11;if(i!==parseInt(e.charAt(0),10))return!1;c+=1,d=a.substring(0,c),f=0,g=c-7;for(var j=c;j>=1;j--)f+=d.charAt(c-j)*g--,g<2&&(g=9);return i=f%11<2?0:11-f%11,i===parseInt(e.charAt(1),10)},"Please specify a CNPJ value number"),a.validator.addMethod("cpfBR",function(a,b){"use strict";if(this.optional(b))return!0;if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;var c,d,e,f,g=0;if(c=parseInt(a.substring(9,10),10),d=parseInt(a.substring(10,11),10),e=function(a,b){var c=10*a%11;return 10!==c&&11!==c||(c=0),c===b},""===a||"00000000000"===a||"11111111111"===a||"22222222222"===a||"33333333333"===a||"44444444444"===a||"55555555555"===a||"66666666666"===a||"77777777777"===a||"88888888888"===a||"99999999999"===a)return!1;for(f=1;f<=9;f++)g+=parseInt(a.substring(f-1,f),10)*(11-f);if(e(g,c)){for(g=0,f=1;f<=10;f++)g+=parseInt(a.substring(f-1,f),10)*(12-f);return e(g,d)}return!1},"Please specify a valid CPF number"),a.validator.addMethod("creditcard",function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},"Please enter a valid credit card number."),a.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9\-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),1&d&&(/^(5[12345])/.test(a)||/^(2[234567])/.test(a))?16===a.length:2&d&&/^(4)/.test(a)?16===a.length:4&d&&/^(3[47])/.test(a)?15===a.length:8&d&&/^(3(0[012345]|[68]))/.test(a)?14===a.length:16&d&&/^(2(014|149))/.test(a)?15===a.length:32&d&&/^(6011)/.test(a)?16===a.length:64&d&&/^(3)/.test(a)?16===a.length:64&d&&/^(2131|1800)/.test(a)?15===a.length:!!(128&d)},"Please enter a valid credit card number."),a.validator.addMethod("currency",function(a,b,c){var d,e="string"==typeof c,f=e?c:c[0],g=!!e||c[1];return f=f.replace(/,/g,""),f=g?f+"]":f+"]?",d="^["+f+"([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$",d=new RegExp(d),this.optional(b)||d.test(a)},"Please specify a valid currency"),a.validator.addMethod("dateFA",function(a,b){return this.optional(b)||/^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a)},a.validator.messages.date),a.validator.addMethod("dateITA",function(a,b){var c,d,e,f,g,h=!1,i=/^\d{1,2}\/\d{1,2}\/\d{4}$/;return i.test(a)?(c=a.split("/"),d=parseInt(c[0],10),e=parseInt(c[1],10),f=parseInt(c[2],10),g=new Date(Date.UTC(f,e-1,d,12,0,0,0)),h=g.getUTCFullYear()===f&&g.getUTCMonth()===e-1&&g.getUTCDate()===d):h=!1,this.optional(b)||h},a.validator.messages.date),a.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(a)},a.validator.messages.date),a.validator.addMethod("extension",function(a,b,c){return c="string"==typeof c?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp("\\.("+c+")$","i"))},a.validator.format("Please enter a value with a valid extension.")),a.validator.addMethod("giroaccountNL",function(a,b){return this.optional(b)||/^[0-9]{1,7}$/.test(a)},"Please specify a valid giro account number"),a.validator.addMethod("greaterThan",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-greaterThan-blur").length&&e.addClass("validate-greaterThan-blur").on("blur.validate-greaterThan",function(){a(c).valid()}),b>e.val()},"Please enter a greater value."),a.validator.addMethod("greaterThanEqual",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-greaterThanEqual-blur").length&&e.addClass("validate-greaterThanEqual-blur").on("blur.validate-greaterThanEqual",function(){a(c).valid()}),b>=e.val()},"Please enter a greater value."),a.validator.addMethod("iban",function(a,b){if(this.optional(b))return!0;var c,d,e,f,g,h,i,j,k,l=a.replace(/ /g,"").toUpperCase(),m="",n=!0,o="",p="",q=5;if(l.length<q)return!1;if(c=l.substring(0,2),h={AL:"\\d{8}[\\dA-Z]{16}",AD:"\\d{8}[\\dA-Z]{12}",AT:"\\d{16}",AZ:"[\\dA-Z]{4}\\d{20}",BE:"\\d{12}",BH:"[A-Z]{4}[\\dA-Z]{14}",BA:"\\d{16}",BR:"\\d{23}[A-Z][\\dA-Z]",BG:"[A-Z]{4}\\d{6}[\\dA-Z]{8}",CR:"\\d{17}",HR:"\\d{17}",CY:"\\d{8}[\\dA-Z]{16}",CZ:"\\d{20}",DK:"\\d{14}",DO:"[A-Z]{4}\\d{20}",EE:"\\d{16}",FO:"\\d{14}",FI:"\\d{14}",FR:"\\d{10}[\\dA-Z]{11}\\d{2}",GE:"[\\dA-Z]{2}\\d{16}",DE:"\\d{18}",GI:"[A-Z]{4}[\\dA-Z]{15}",GR:"\\d{7}[\\dA-Z]{16}",GL:"\\d{14}",GT:"[\\dA-Z]{4}[\\dA-Z]{20}",HU:"\\d{24}",IS:"\\d{22}",IE:"[\\dA-Z]{4}\\d{14}",IL:"\\d{19}",IT:"[A-Z]\\d{10}[\\dA-Z]{12}",KZ:"\\d{3}[\\dA-Z]{13}",KW:"[A-Z]{4}[\\dA-Z]{22}",LV:"[A-Z]{4}[\\dA-Z]{13}",LB:"\\d{4}[\\dA-Z]{20}",LI:"\\d{5}[\\dA-Z]{12}",LT:"\\d{16}",LU:"\\d{3}[\\dA-Z]{13}",MK:"\\d{3}[\\dA-Z]{10}\\d{2}",MT:"[A-Z]{4}\\d{5}[\\dA-Z]{18}",MR:"\\d{23}",MU:"[A-Z]{4}\\d{19}[A-Z]{3}",MC:"\\d{10}[\\dA-Z]{11}\\d{2}",MD:"[\\dA-Z]{2}\\d{18}",ME:"\\d{18}",NL:"[A-Z]{4}\\d{10}",NO:"\\d{11}",PK:"[\\dA-Z]{4}\\d{16}",PS:"[\\dA-Z]{4}\\d{21}",PL:"\\d{24}",PT:"\\d{21}",RO:"[A-Z]{4}[\\dA-Z]{16}",SM:"[A-Z]\\d{10}[\\dA-Z]{12}",SA:"\\d{2}[\\dA-Z]{18}",RS:"\\d{18}",SK:"\\d{20}",SI:"\\d{15}",ES:"\\d{20}",SE:"\\d{20}",CH:"\\d{5}[\\dA-Z]{12}",TN:"\\d{20}",TR:"\\d{5}[\\dA-Z]{17}",AE:"\\d{3}\\d{16}",GB:"[A-Z]{4}\\d{14}",VG:"[\\dA-Z]{4}\\d{16}"},g=h[c],"undefined"!=typeof g&&(i=new RegExp("^[A-Z]{2}\\d{2}"+g+"$",""),!i.test(l)))return!1;for(d=l.substring(4,l.length)+l.substring(0,4),j=0;j<d.length;j++)e=d.charAt(j),"0"!==e&&(n=!1),n||(m+="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(e));for(k=0;k<m.length;k++)f=m.charAt(k),p=""+o+f,o=p%97;return 1===o},"Please specify a valid IBAN"),a.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),a.validator.addMethod("ipv4",function(a,b){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),a.validator.addMethod("ipv6",function(a,b){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),a.validator.addMethod("lessThan",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-lessThan-blur").length&&e.addClass("validate-lessThan-blur").on("blur.validate-lessThan",function(){a(c).valid()}),b<e.val()},"Please enter a lesser value."),a.validator.addMethod("lessThanEqual",function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-lessThanEqual-blur").length&&e.addClass("validate-lessThanEqual-blur").on("blur.validate-lessThanEqual",function(){a(c).valid()}),b<=e.val()},"Please enter a lesser value."),a.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),a.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'"\s]+$/i.test(a)},"Letters or punctuation only please"),a.validator.addMethod("maxfiles",function(b,c,d){return!!this.optional(c)||!("file"===a(c).attr("type")&&c.files&&c.files.length>d)},a.validator.format("Please select no more than {0} files.")),a.validator.addMethod("maxsize",function(b,c,d){if(this.optional(c))return!0;if("file"===a(c).attr("type")&&c.files&&c.files.length)for(var e=0;e<c.files.length;e++)if(c.files[e].size>d)return!1;return!0},a.validator.format("File size must not exceed {0} bytes each.")),a.validator.addMethod("maxsizetotal",function(b,c,d){if(this.optional(c))return!0;if("file"===a(c).attr("type")&&c.files&&c.files.length)for(var e=0,f=0;f<c.files.length;f++)if(e+=c.files[f].size,e>d)return!1;return!0},a.validator.format("Total size of all files must not exceed {0} bytes.")),a.validator.addMethod("mobileNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid mobile number"),a.validator.addMethod("mobileRU",function(a,b){var c=a.replace(/\(|\)|\s+|-/g,"");return this.optional(b)||c.length>9&&/^((\+7|7|8)+([0-9]){10})$/.test(c)},"Please specify a valid mobile number"),a.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),a.validator.addMethod("netmask",function(a,b){return this.optional(b)||/^(254|252|248|240|224|192|128)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/i.test(a)},"Please enter a valid netmask."),a.validator.addMethod("nieES",function(a,b){"use strict";if(this.optional(b))return!0;var c,d=new RegExp(/^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi),e="TRWAGMYFPDXBNJZSQVHLCKET",f=a.substr(a.length-1).toUpperCase();return a=a.toString().toUpperCase(),!(a.length>10||a.length<9||!d.test(a))&&(a=a.replace(/^[X]/,"0").replace(/^[Y]/,"1").replace(/^[Z]/,"2"),c=9===a.length?a.substr(0,8):a.substr(0,9),e.charAt(parseInt(c,10)%23)===f)},"Please specify a valid NIE number."),a.validator.addMethod("nifES",function(a,b){"use strict";return!!this.optional(b)||(a=a.toUpperCase(),!!a.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)")&&(/^[0-9]{8}[A-Z]{1}$/.test(a)?"TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,0)%23)===a.charAt(8):!!/^[KLM]{1}/.test(a)&&a[8]==="TRWAGMYFPDXBNJZSQVHLCKE".charAt(a.substring(8,1)%23)))},"Please specify a valid NIF number."),a.validator.addMethod("nipPL",function(a){"use strict";if(a=a.replace(/[^0-9]/g,""),10!==a.length)return!1;for(var b=[6,5,7,2,3,4,5,6,7],c=0,d=0;d<9;d++)c+=b[d]*a[d];var e=c%11,f=10===e?0:e;return f===parseInt(a[9],10)},"Please specify a valid NIP number."),a.validator.addMethod("nisBR",function(a){var b,c,d,e,f,g=0;if(a=a.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g,""),11!==a.length)return!1;for(c=parseInt(a.substring(10,11),10),b=parseInt(a.substring(0,10),10),e=2;e<12;e++)f=e,10===e&&(f=2),11===e&&(f=3),g+=b%10*f,b=parseInt(b/10,10);return d=g%11,d=d>1?11-d:0,c===d},"Please specify a valid NIS/PIS number"),a.validator.addMethod("notEqualTo",function(b,c,d){return this.optional(c)||!a.validator.methods.equalTo.call(this,b,c,d)},"Please enter a different value, values must not be the same."),a.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),a.validator.addMethod("pattern",function(a,b,c){return!!this.optional(b)||("string"==typeof c&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),a.validator.addMethod("phoneNL",function(a,b){return this.optional(b)||/^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(a)},"Please specify a valid phone number."),a.validator.addMethod("phonePL",function(a,b){a=a.replace(/\s+/g,"");var c=/^(?:(?:(?:\+|00)?48)|(?:\(\+?48\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\d{7}$/;return this.optional(b)||c.test(a)},"Please specify a valid phone number"),a.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),a.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/)},"Please specify a valid phone number"),a.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number"),a.validator.addMethod("postalcodeBR",function(a,b){return this.optional(b)||/^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test(a)},"Informe um CEP válido."),a.validator.addMethod("postalCodeCA",function(a,b){return this.optional(b)||/^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] *\d[ABCEGHJKLMNPRSTVWXYZ]\d$/i.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeIT",function(a,b){return this.optional(b)||/^\d{5}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postalcodeNL",function(a,b){return this.optional(b)||/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(a)},"Please specify a valid postal code"),a.validator.addMethod("postcodeUK",function(a,b){return this.optional(b)||/^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(a)},"Please specify a valid UK postcode"),a.validator.addMethod("require_from_group",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_req_grp")?f.data("valid_req_grp"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length>=d[0];return f.data("valid_req_grp",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),h},a.validator.format("Please fill at least {0} of these fields.")),a.validator.addMethod("skip_or_fill_minimum",function(b,c,d){var e=a(d[1],c.form),f=e.eq(0),g=f.data("valid_skip")?f.data("valid_skip"):a.extend({},this),h=e.filter(function(){return g.elementValue(this)}).length,i=0===h||h>=d[0];return f.data("valid_skip",g),a(c).data("being_validated")||(e.data("being_validated",!0),e.each(function(){g.element(this)}),e.data("being_validated",!1)),i},a.validator.format("Please either skip these fields or fill at least {0} of them.")),a.validator.addMethod("stateUS",function(a,b,c){var d,e="undefined"==typeof c,f=!e&&"undefined"!=typeof c.caseSensitive&&c.caseSensitive,g=!e&&"undefined"!=typeof c.includeTerritories&&c.includeTerritories,h=!e&&"undefined"!=typeof c.includeMilitary&&c.includeMilitary;return d=g||h?g&&h?"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":g?"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$":"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$":"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$",d=f?new RegExp(d):new RegExp(d,"i"),this.optional(b)||d.test(a)},"Please specify a valid state"),a.validator.addMethod("strippedminlength",function(b,c,d){return a(b).text().length>=d},a.validator.format("Please enter at least {0} characters")),a.validator.addMethod("time",function(a,b){return this.optional(b)||/^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),a.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(a)},"Please enter a valid time in 12-hour am/pm format"),a.validator.addMethod("url2",function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},a.validator.messages.url),a.validator.addMethod("vinUS",function(a){if(17!==a.length)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){if(e=j[b],d=a.slice(b,b+1),8===b&&(g=d),isNaN(d)){for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&8===c&&(g=h[c]);break}}else d*=e;k+=d}return f=k%11,10===f&&(f="X"),f===g},"The specified vehicle identification number (VIN) is invalid."),a.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/^\d{5}(-\d{4})?$/.test(a)},"The specified US ZIP Code is invalid"),a.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx"),a});
+/* 
+* Project: Bootstrap Notify = v3.1.3
+* Description: Turns standard Bootstrap alerts into "Growl-like" notifications.
+* Author: Mouse0270 aka Robert McIntosh
+* License: MIT License
+* Website: https://github.com/mouse0270/bootstrap-growl
+*/
+
+(function (factory) {
+	if (typeof define === 'function' && define.amd) {
+		// AMD. Register as an anonymous module.
+		define(['jquery'], factory);
+	} else if (typeof exports === 'object') {
+		// Node/CommonJS
+		factory(require('jquery'));
+	} else {
+		// Browser globals
+		factory(jQuery);
+	}
+}(function ($) {
+	// Create the defaults once
+	var defaults = {
+			element: 'body',
+			position: null,
+			type: "info",
+			allow_dismiss: true,
+			newest_on_top: false,
+			showProgressbar: false,
+			placement: {
+				from: "top",
+				align: "right"
+			},
+			offset: 20,
+			spacing: 10,
+			z_index: 1031,
+			delay: 1000,
+			timer: 1000,
+			url_target: '_blank',
+			mouse_over: null,
+			animate: {
+				enter: 'animated fadeInDown',
+				exit: 'animated fadeOutUp'
+			},
+			onShow: null,
+			onShown: null,
+			onClose: null,
+			onClosed: null,
+			icon_type: 'class',
+			template: '<div data-notify="container" class="col-xs-4 col-sm-2 alert alert-{0}" role="alert"><button type="button" aria-hidden="true" class="close" data-notify="dismiss">&times;</button><span data-notify="icon"></span> <span data-notify="title">{1}</span> <span data-notify="message">{2}</span><div class="progress" data-notify="progressbar"><div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div></div><a href="{3}" target="{4}" data-notify="url"></a></div>'
+		};
+
+	String.format = function() {
+		var str = arguments[0];
+		for (var i = 1; i < arguments.length; i++) {
+			str = str.replace(RegExp("\\{" + (i - 1) + "\\}", "gm"), arguments[i]);
+		}
+		return str;
+	};
+
+	function Notify ( element, content, options ) {
+		// Setup Content of Notify
+		var content = {
+			content: {
+				message: typeof content == 'object' ? content.message : content,
+				title: content.title ? content.title : '',
+				icon: content.icon ? content.icon : '',
+				url: content.url ? content.url : '#',
+				target: content.target ? content.target : '-'
+			}
+		};
+
+		options = $.extend(true, {}, content, options);
+		this.settings = $.extend(true, {}, defaults, options);
+		this._defaults = defaults;
+		if (this.settings.content.target == "-") {
+			this.settings.content.target = this.settings.url_target;
+		}
+		this.animations = {
+			start: 'webkitAnimationStart oanimationstart MSAnimationStart animationstart',
+			end: 'webkitAnimationEnd oanimationend MSAnimationEnd animationend'
+		}
+
+		if (typeof this.settings.offset == 'number') {
+		    this.settings.offset = {
+		    	x: this.settings.offset,
+		    	y: this.settings.offset
+		    };
+		}
+
+		this.init();
+	};
+
+	$.extend(Notify.prototype, {
+		init: function () {
+			var self = this;
+
+			this.buildNotify();
+			if (this.settings.content.icon) {
+				this.setIcon();
+			}
+			if (this.settings.content.url != "#") {
+				this.styleURL();
+			}
+			this.placement();
+			this.bind();
+
+			this.notify = {
+				$ele: this.$ele,
+				update: function(command, update) {
+					var commands = {};
+					if (typeof command == "string") {					
+						commands[command] = update;
+					}else{
+						commands = command;
+					}
+					for (var command in commands) {
+						switch (command) {
+							case "type":
+								this.$ele.removeClass('alert-' + self.settings.type);
+								this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass('progress-bar-' + self.settings.type);
+								self.settings.type = commands[command];
+								this.$ele.addClass('alert-' + commands[command]).find('[data-notify="progressbar"] > .progress-bar').addClass('progress-bar-' + commands[command]);
+								break;
+							case "icon":
+								var $icon = this.$ele.find('[data-notify="icon"]');
+								if (self.settings.icon_type.toLowerCase() == 'class') {
+									$icon.removeClass(self.settings.content.icon).addClass(commands[command]);
+								}else{
+									if (!$icon.is('img')) {
+										$icon.find('img');
+									}
+									$icon.attr('src', commands[command]);
+								}
+								break;
+							case "progress":
+								var newDelay = self.settings.delay - (self.settings.delay * (commands[command] / 100));
+								this.$ele.data('notify-delay', newDelay);
+								this.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', commands[command]).css('width', commands[command] + '%');
+								break;
+							case "url":
+								this.$ele.find('[data-notify="url"]').attr('href', commands[command]);
+								break;
+							case "target":
+								this.$ele.find('[data-notify="url"]').attr('target', commands[command]);
+								break;
+							default:
+								this.$ele.find('[data-notify="' + command +'"]').html(commands[command]);
+						};
+					}
+					var posX = this.$ele.outerHeight() + parseInt(self.settings.spacing) + parseInt(self.settings.offset.y);
+					self.reposition(posX);
+				},
+				close: function() {
+					self.close();
+				}
+			};
+		},
+		buildNotify: function () {
+			var content = this.settings.content;
+			this.$ele = $(String.format(this.settings.template, this.settings.type, content.title, content.message, content.url, content.target));
+			this.$ele.attr('data-notify-position', this.settings.placement.from + '-' + this.settings.placement.align);		
+			if (!this.settings.allow_dismiss) {
+				this.$ele.find('[data-notify="dismiss"]').css('display', 'none');
+			}
+			if ((this.settings.delay <= 0 && !this.settings.showProgressbar) || !this.settings.showProgressbar) {
+				this.$ele.find('[data-notify="progressbar"]').remove();
+			}
+		},
+		setIcon: function() {
+			if (this.settings.icon_type.toLowerCase() == 'class') {
+				this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon);
+			}else{
+				if (this.$ele.find('[data-notify="icon"]').is('img')) {
+					this.$ele.find('[data-notify="icon"]').attr('src', this.settings.content.icon);
+				}else{
+					this.$ele.find('[data-notify="icon"]').append('<img src="'+this.settings.content.icon+'" alt="Notify Icon" />');
+				}	
+			}
+		},
+		styleURL: function() {
+			this.$ele.find('[data-notify="url"]').css({
+				backgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)',
+				height: '100%',
+				left: '0px',
+				position: 'absolute',
+				top: '0px',
+				width: '100%',
+				zIndex: this.settings.z_index + 1
+			});
+			this.$ele.find('[data-notify="dismiss"]').css({
+				position: 'absolute',
+				right: '10px',
+				top: '5px',
+				zIndex: this.settings.z_index + 2
+			});
+		},
+		placement: function() {
+			var self = this,
+				offsetAmt = this.settings.offset.y,
+				css = {
+					display: 'inline-block',
+					margin: '0px auto',
+					position: this.settings.position ?  this.settings.position : (this.settings.element === 'body' ? 'fixed' : 'absolute'),
+					transition: 'all .5s ease-in-out',
+					zIndex: this.settings.z_index
+				},
+				hasAnimation = false,
+				settings = this.settings;
+
+			$('[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])').each(function() {
+				return offsetAmt = Math.max(offsetAmt, parseInt($(this).css(settings.placement.from)) +  parseInt($(this).outerHeight()) +  parseInt(settings.spacing));
+			});
+			if (this.settings.newest_on_top == true) {
+				offsetAmt = this.settings.offset.y;
+			}
+			css[this.settings.placement.from] = offsetAmt+'px';
+
+			switch (this.settings.placement.align) {
+				case "left":
+				case "right":
+					css[this.settings.placement.align] = this.settings.offset.x+'px';
+					break;
+				case "center":
+					css.left = 0;
+					css.right = 0;
+					break;
+			}
+			this.$ele.css(css).addClass(this.settings.animate.enter);
+			$.each(Array('webkit', 'moz', 'o', 'ms', ''), function(index, prefix) {
+				self.$ele[0].style[prefix+'AnimationIterationCount'] = 1;
+			});
+
+			$(this.settings.element).append(this.$ele);
+
+			if (this.settings.newest_on_top == true) {
+				offsetAmt = (parseInt(offsetAmt)+parseInt(this.settings.spacing)) + this.$ele.outerHeight();
+				this.reposition(offsetAmt);
+			}
+			
+			if ($.isFunction(self.settings.onShow)) {
+				self.settings.onShow.call(this.$ele);
+			}
+
+			this.$ele.one(this.animations.start, function(event) {
+				hasAnimation = true;
+			}).one(this.animations.end, function(event) {
+				if ($.isFunction(self.settings.onShown)) {
+					self.settings.onShown.call(this);
+				}
+			});
+
+			setTimeout(function() {
+				if (!hasAnimation) {
+					if ($.isFunction(self.settings.onShown)) {
+						self.settings.onShown.call(this);
+					}
+				}
+			}, 600);
+		},
+		bind: function() {
+			var self = this;
+
+			this.$ele.find('[data-notify="dismiss"]').on('click', function() {		
+				self.close();
+			})
+
+			this.$ele.mouseover(function(e) {
+				$(this).data('data-hover', "true");
+			}).mouseout(function(e) {
+				$(this).data('data-hover', "false");
+			});
+			this.$ele.data('data-hover', "false");
+
+			if (this.settings.delay > 0) {
+				self.$ele.data('notify-delay', self.settings.delay);
+				var timer = setInterval(function() {
+					var delay = parseInt(self.$ele.data('notify-delay')) - self.settings.timer;
+					if ((self.$ele.data('data-hover') === 'false' && self.settings.mouse_over == "pause") || self.settings.mouse_over != "pause") {
+						var percent = ((self.settings.delay - delay) / self.settings.delay) * 100;
+						self.$ele.data('notify-delay', delay);
+						self.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', percent).css('width', percent + '%');
+					}
+					if (delay <= -(self.settings.timer)) {
+						clearInterval(timer);
+						self.close();
+					}
+				}, self.settings.timer);
+			}
+		},
+		close: function() {
+			var self = this,
+				$successors = null,
+				posX = parseInt(this.$ele.css(this.settings.placement.from)),
+				hasAnimation = false;
+
+			this.$ele.data('closing', 'true').addClass(this.settings.animate.exit);
+			self.reposition(posX);			
+			
+			if ($.isFunction(self.settings.onClose)) {
+				self.settings.onClose.call(this.$ele);
+			}
+
+			this.$ele.one(this.animations.start, function(event) {
+				hasAnimation = true;
+			}).one(this.animations.end, function(event) {
+				$(this).remove();
+				if ($.isFunction(self.settings.onClosed)) {
+					self.settings.onClosed.call(this);
+				}
+			});
+
+			setTimeout(function() {
+				if (!hasAnimation) {
+					self.$ele.remove();
+					if (self.settings.onClosed) {
+						self.settings.onClosed(self.$ele);
+					}
+				}
+			}, 600);
+		},
+		reposition: function(posX) {
+			var self = this,
+				notifies = '[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])',
+				$elements = this.$ele.nextAll(notifies);
+			if (this.settings.newest_on_top == true) {
+				$elements = this.$ele.prevAll(notifies);
+			}
+			$elements.each(function() {
+				$(this).css(self.settings.placement.from, posX);
+				posX = (parseInt(posX)+parseInt(self.settings.spacing)) + $(this).outerHeight();
+			});
+		}
+	});
+
+	$.notify = function ( content, options ) {
+		var plugin = new Notify( this, content, options );
+		return plugin.notify;
+	};
+	$.notifyDefaults = function( options ) {
+		defaults = $.extend(true, {}, defaults, options);
+		return defaults;
+	};
+	$.notifyClose = function( command ) {
+		if (typeof command === "undefined" || command == "all") {
+			$('[data-notify]').find('[data-notify="dismiss"]').trigger('click');
+		}else{
+			$('[data-notify-position="'+command+'"]').find('[data-notify="dismiss"]').trigger('click');
+		}
+	};
+
+}));
+/*! jquery.cookie v1.4.1 | MIT */
+
+!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?a(require("jquery")):a(jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}});
+/*!
+ * Select2 4.0.8
+ * https://select2.github.io
+ *
+ * Released under the MIT license
+ * https://github.com/select2/select2/blob/master/LICENSE.md
+ */
+
+;(function (factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(['jquery'], factory);
+  } else if (typeof module === 'object' && module.exports) {
+    // Node/CommonJS
+    module.exports = function (root, jQuery) {
+      if (jQuery === undefined) {
+        // require('jQuery') returns a factory that requires window to
+        // build a jQuery instance, we normalize how we use modules
+        // that require this pattern but the window provided is a noop
+        // if it's defined (how jquery works)
+        if (typeof window !== 'undefined') {
+          jQuery = require('jquery');
+        }
+        else {
+          jQuery = require('jquery')(root);
+        }
+      }
+      factory(jQuery);
+      return jQuery;
+    };
+  } else {
+    // Browser globals
+    factory(jQuery);
+  }
+} (function (jQuery) {
+  // This is needed so we can catch the AMD loader configuration and use it
+  // The inner file should be wrapped (by `banner.start.js`) in a function that
+  // returns the AMD loader references.
+  var S2 =(function () {
+  // Restore the Select2 AMD loader so it can be used
+  // Needed mostly in the language files, where the loader is not inserted
+  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
+    var S2 = jQuery.fn.select2.amd;
+  }
+var S2;(function () { if (!S2 || !S2.requirejs) {
+if (!S2) { S2 = {}; } else { require = S2; }
+/**
+ * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
+ * Released under MIT license, http://github.com/requirejs/almond/LICENSE
+ */
+//Going sloppy to avoid 'use strict' string cost, but strict practices should
+//be followed.
+/*global setTimeout: false */
+
+var requirejs, require, define;
+(function (undef) {
+    var main, req, makeMap, handlers,
+        defined = {},
+        waiting = {},
+        config = {},
+        defining = {},
+        hasOwn = Object.prototype.hasOwnProperty,
+        aps = [].slice,
+        jsSuffixRegExp = /\.js$/;
+
+    function hasProp(obj, prop) {
+        return hasOwn.call(obj, prop);
+    }
+
+    /**
+     * Given a relative module name, like ./something, normalize it to
+     * a real name that can be mapped to a path.
+     * @param {String} name the relative name
+     * @param {String} baseName a real name that the name arg is relative
+     * to.
+     * @returns {String} normalized name
+     */
+    function normalize(name, baseName) {
+        var nameParts, nameSegment, mapValue, foundMap, lastIndex,
+            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
+            baseParts = baseName && baseName.split("/"),
+            map = config.map,
+            starMap = (map && map['*']) || {};
+
+        //Adjust any relative paths.
+        if (name) {
+            name = name.split('/');
+            lastIndex = name.length - 1;
+
+            // If wanting node ID compatibility, strip .js from end
+            // of IDs. Have to do this here, and not in nameToUrl
+            // because node allows either .js or non .js to map
+            // to same file.
+            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
+                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
+            }
+
+            // Starts with a '.' so need the baseName
+            if (name[0].charAt(0) === '.' && baseParts) {
+                //Convert baseName to array, and lop off the last part,
+                //so that . matches that 'directory' and not name of the baseName's
+                //module. For instance, baseName of 'one/two/three', maps to
+                //'one/two/three.js', but we want the directory, 'one/two' for
+                //this normalization.
+                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
+                name = normalizedBaseParts.concat(name);
+            }
+
+            //start trimDots
+            for (i = 0; i < name.length; i++) {
+                part = name[i];
+                if (part === '.') {
+                    name.splice(i, 1);
+                    i -= 1;
+                } else if (part === '..') {
+                    // If at the start, or previous value is still ..,
+                    // keep them so that when converted to a path it may
+                    // still work when converted to a path, even though
+                    // as an ID it is less than ideal. In larger point
+                    // releases, may be better to just kick out an error.
+                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
+                        continue;
+                    } else if (i > 0) {
+                        name.splice(i - 1, 2);
+                        i -= 2;
+                    }
+                }
+            }
+            //end trimDots
+
+            name = name.join('/');
+        }
+
+        //Apply map config if available.
+        if ((baseParts || starMap) && map) {
+            nameParts = name.split('/');
+
+            for (i = nameParts.length; i > 0; i -= 1) {
+                nameSegment = nameParts.slice(0, i).join("/");
+
+                if (baseParts) {
+                    //Find the longest baseName segment match in the config.
+                    //So, do joins on the biggest to smallest lengths of baseParts.
+                    for (j = baseParts.length; j > 0; j -= 1) {
+                        mapValue = map[baseParts.slice(0, j).join('/')];
+
+                        //baseName segment has  config, find if it has one for
+                        //this name.
+                        if (mapValue) {
+                            mapValue = mapValue[nameSegment];
+                            if (mapValue) {
+                                //Match, update name to the new value.
+                                foundMap = mapValue;
+                                foundI = i;
+                                break;
+                            }
+                        }
+                    }
+                }
+
+                if (foundMap) {
+                    break;
+                }
+
+                //Check for a star map match, but just hold on to it,
+                //if there is a shorter segment match later in a matching
+                //config, then favor over this star map.
+                if (!foundStarMap && starMap && starMap[nameSegment]) {
+                    foundStarMap = starMap[nameSegment];
+                    starI = i;
+                }
+            }
+
+            if (!foundMap && foundStarMap) {
+                foundMap = foundStarMap;
+                foundI = starI;
+            }
+
+            if (foundMap) {
+                nameParts.splice(0, foundI, foundMap);
+                name = nameParts.join('/');
+            }
+        }
+
+        return name;
+    }
+
+    function makeRequire(relName, forceSync) {
+        return function () {
+            //A version of a require function that passes a moduleName
+            //value for items that may need to
+            //look up paths relative to the moduleName
+            var args = aps.call(arguments, 0);
+
+            //If first arg is not require('string'), and there is only
+            //one arg, it is the array form without a callback. Insert
+            //a null so that the following concat is correct.
+            if (typeof args[0] !== 'string' && args.length === 1) {
+                args.push(null);
+            }
+            return req.apply(undef, args.concat([relName, forceSync]));
+        };
+    }
+
+    function makeNormalize(relName) {
+        return function (name) {
+            return normalize(name, relName);
+        };
+    }
+
+    function makeLoad(depName) {
+        return function (value) {
+            defined[depName] = value;
+        };
+    }
+
+    function callDep(name) {
+        if (hasProp(waiting, name)) {
+            var args = waiting[name];
+            delete waiting[name];
+            defining[name] = true;
+            main.apply(undef, args);
+        }
+
+        if (!hasProp(defined, name) && !hasProp(defining, name)) {
+            throw new Error('No ' + name);
+        }
+        return defined[name];
+    }
+
+    //Turns a plugin!resource to [plugin, resource]
+    //with the plugin being undefined if the name
+    //did not have a plugin prefix.
+    function splitPrefix(name) {
+        var prefix,
+            index = name ? name.indexOf('!') : -1;
+        if (index > -1) {
+            prefix = name.substring(0, index);
+            name = name.substring(index + 1, name.length);
+        }
+        return [prefix, name];
+    }
+
+    //Creates a parts array for a relName where first part is plugin ID,
+    //second part is resource ID. Assumes relName has already been normalized.
+    function makeRelParts(relName) {
+        return relName ? splitPrefix(relName) : [];
+    }
+
+    /**
+     * Makes a name map, normalizing the name, and using a plugin
+     * for normalization if necessary. Grabs a ref to plugin
+     * too, as an optimization.
+     */
+    makeMap = function (name, relParts) {
+        var plugin,
+            parts = splitPrefix(name),
+            prefix = parts[0],
+            relResourceName = relParts[1];
+
+        name = parts[1];
+
+        if (prefix) {
+            prefix = normalize(prefix, relResourceName);
+            plugin = callDep(prefix);
+        }
+
+        //Normalize according
+        if (prefix) {
+            if (plugin && plugin.normalize) {
+                name = plugin.normalize(name, makeNormalize(relResourceName));
+            } else {
+                name = normalize(name, relResourceName);
+            }
+        } else {
+            name = normalize(name, relResourceName);
+            parts = splitPrefix(name);
+            prefix = parts[0];
+            name = parts[1];
+            if (prefix) {
+                plugin = callDep(prefix);
+            }
+        }
+
+        //Using ridiculous property names for space reasons
+        return {
+            f: prefix ? prefix + '!' + name : name, //fullName
+            n: name,
+            pr: prefix,
+            p: plugin
+        };
+    };
+
+    function makeConfig(name) {
+        return function () {
+            return (config && config.config && config.config[name]) || {};
+        };
+    }
+
+    handlers = {
+        require: function (name) {
+            return makeRequire(name);
+        },
+        exports: function (name) {
+            var e = defined[name];
+            if (typeof e !== 'undefined') {
+                return e;
+            } else {
+                return (defined[name] = {});
+            }
+        },
+        module: function (name) {
+            return {
+                id: name,
+                uri: '',
+                exports: defined[name],
+                config: makeConfig(name)
+            };
+        }
+    };
+
+    main = function (name, deps, callback, relName) {
+        var cjsModule, depName, ret, map, i, relParts,
+            args = [],
+            callbackType = typeof callback,
+            usingExports;
+
+        //Use name if no relName
+        relName = relName || name;
+        relParts = makeRelParts(relName);
+
+        //Call the callback to define the module, if necessary.
+        if (callbackType === 'undefined' || callbackType === 'function') {
+            //Pull out the defined dependencies and pass the ordered
+            //values to the callback.
+            //Default to [require, exports, module] if no deps
+            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
+            for (i = 0; i < deps.length; i += 1) {
+                map = makeMap(deps[i], relParts);
+                depName = map.f;
+
+                //Fast path CommonJS standard dependencies.
+                if (depName === "require") {
+                    args[i] = handlers.require(name);
+                } else if (depName === "exports") {
+                    //CommonJS module spec 1.1
+                    args[i] = handlers.exports(name);
+                    usingExports = true;
+                } else if (depName === "module") {
+                    //CommonJS module spec 1.1
+                    cjsModule = args[i] = handlers.module(name);
+                } else if (hasProp(defined, depName) ||
+                           hasProp(waiting, depName) ||
+                           hasProp(defining, depName)) {
+                    args[i] = callDep(depName);
+                } else if (map.p) {
+                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
+                    args[i] = defined[depName];
+                } else {
+                    throw new Error(name + ' missing ' + depName);
+                }
+            }
+
+            ret = callback ? callback.apply(defined[name], args) : undefined;
+
+            if (name) {
+                //If setting exports via "module" is in play,
+                //favor that over return value and exports. After that,
+                //favor a non-undefined return value over exports use.
+                if (cjsModule && cjsModule.exports !== undef &&
+                        cjsModule.exports !== defined[name]) {
+                    defined[name] = cjsModule.exports;
+                } else if (ret !== undef || !usingExports) {
+                    //Use the return value from the function.
+                    defined[name] = ret;
+                }
+            }
+        } else if (name) {
+            //May just be an object definition for the module. Only
+            //worry about defining if have a module name.
+            defined[name] = callback;
+        }
+    };
+
+    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
+        if (typeof deps === "string") {
+            if (handlers[deps]) {
+                //callback in this case is really relName
+                return handlers[deps](callback);
+            }
+            //Just return the module wanted. In this scenario, the
+            //deps arg is the module name, and second arg (if passed)
+            //is just the relName.
+            //Normalize module name, if it contains . or ..
+            return callDep(makeMap(deps, makeRelParts(callback)).f);
+        } else if (!deps.splice) {
+            //deps is a config object, not an array.
+            config = deps;
+            if (config.deps) {
+                req(config.deps, config.callback);
+            }
+            if (!callback) {
+                return;
+            }
+
+            if (callback.splice) {
+                //callback is an array, which means it is a dependency list.
+                //Adjust args if there are dependencies
+                deps = callback;
+                callback = relName;
+                relName = null;
+            } else {
+                deps = undef;
+            }
+        }
+
+        //Support require(['a'])
+        callback = callback || function () {};
+
+        //If relName is a function, it is an errback handler,
+        //so remove it.
+        if (typeof relName === 'function') {
+            relName = forceSync;
+            forceSync = alt;
+        }
+
+        //Simulate async callback;
+        if (forceSync) {
+            main(undef, deps, callback, relName);
+        } else {
+            //Using a non-zero value because of concern for what old browsers
+            //do, and latest browsers "upgrade" to 4 if lower value is used:
+            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
+            //If want a value immediately, use require('id') instead -- something
+            //that works in almond on the global level, but not guaranteed and
+            //unlikely to work in other AMD implementations.
+            setTimeout(function () {
+                main(undef, deps, callback, relName);
+            }, 4);
+        }
+
+        return req;
+    };
+
+    /**
+     * Just drops the config on the floor, but returns req in case
+     * the config return value is used.
+     */
+    req.config = function (cfg) {
+        return req(cfg);
+    };
+
+    /**
+     * Expose module registry for debugging and tooling
+     */
+    requirejs._defined = defined;
+
+    define = function (name, deps, callback) {
+        if (typeof name !== 'string') {
+            throw new Error('See almond README: incorrect module build, no module name');
+        }
+
+        //This module may not have dependencies
+        if (!deps.splice) {
+            //deps is not an array, so probably means
+            //an object literal or factory function for
+            //the value. Adjust args.
+            callback = deps;
+            deps = [];
+        }
+
+        if (!hasProp(defined, name) && !hasProp(waiting, name)) {
+            waiting[name] = [name, deps, callback];
+        }
+    };
+
+    define.amd = {
+        jQuery: true
+    };
+}());
+
+S2.requirejs = requirejs;S2.require = require;S2.define = define;
+}
+}());
+S2.define("almond", function(){});
+
+/* global jQuery:false, $:false */
+S2.define('jquery',[],function () {
+  var _$ = jQuery || $;
+
+  if (_$ == null && console && console.error) {
+    console.error(
+      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
+      'found. Make sure that you are including jQuery before Select2 on your ' +
+      'web page.'
+    );
+  }
+
+  return _$;
+});
+
+S2.define('select2/utils',[
+  'jquery'
+], function ($) {
+  var Utils = {};
+
+  Utils.Extend = function (ChildClass, SuperClass) {
+    var __hasProp = {}.hasOwnProperty;
+
+    function BaseConstructor () {
+      this.constructor = ChildClass;
+    }
+
+    for (var key in SuperClass) {
+      if (__hasProp.call(SuperClass, key)) {
+        ChildClass[key] = SuperClass[key];
+      }
+    }
+
+    BaseConstructor.prototype = SuperClass.prototype;
+    ChildClass.prototype = new BaseConstructor();
+    ChildClass.__super__ = SuperClass.prototype;
+
+    return ChildClass;
+  };
+
+  function getMethods (theClass) {
+    var proto = theClass.prototype;
+
+    var methods = [];
+
+    for (var methodName in proto) {
+      var m = proto[methodName];
+
+      if (typeof m !== 'function') {
+        continue;
+      }
+
+      if (methodName === 'constructor') {
+        continue;
+      }
+
+      methods.push(methodName);
+    }
+
+    return methods;
+  }
+
+  Utils.Decorate = function (SuperClass, DecoratorClass) {
+    var decoratedMethods = getMethods(DecoratorClass);
+    var superMethods = getMethods(SuperClass);
+
+    function DecoratedClass () {
+      var unshift = Array.prototype.unshift;
+
+      var argCount = DecoratorClass.prototype.constructor.length;
+
+      var calledConstructor = SuperClass.prototype.constructor;
+
+      if (argCount > 0) {
+        unshift.call(arguments, SuperClass.prototype.constructor);
+
+        calledConstructor = DecoratorClass.prototype.constructor;
+      }
+
+      calledConstructor.apply(this, arguments);
+    }
+
+    DecoratorClass.displayName = SuperClass.displayName;
+
+    function ctr () {
+      this.constructor = DecoratedClass;
+    }
+
+    DecoratedClass.prototype = new ctr();
+
+    for (var m = 0; m < superMethods.length; m++) {
+      var superMethod = superMethods[m];
+
+      DecoratedClass.prototype[superMethod] =
+        SuperClass.prototype[superMethod];
+    }
+
+    var calledMethod = function (methodName) {
+      // Stub out the original method if it's not decorating an actual method
+      var originalMethod = function () {};
+
+      if (methodName in DecoratedClass.prototype) {
+        originalMethod = DecoratedClass.prototype[methodName];
+      }
+
+      var decoratedMethod = DecoratorClass.prototype[methodName];
+
+      return function () {
+        var unshift = Array.prototype.unshift;
+
+        unshift.call(arguments, originalMethod);
+
+        return decoratedMethod.apply(this, arguments);
+      };
+    };
+
+    for (var d = 0; d < decoratedMethods.length; d++) {
+      var decoratedMethod = decoratedMethods[d];
+
+      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
+    }
+
+    return DecoratedClass;
+  };
+
+  var Observable = function () {
+    this.listeners = {};
+  };
+
+  Observable.prototype.on = function (event, callback) {
+    this.listeners = this.listeners || {};
+
+    if (event in this.listeners) {
+      this.listeners[event].push(callback);
+    } else {
+      this.listeners[event] = [callback];
+    }
+  };
+
+  Observable.prototype.trigger = function (event) {
+    var slice = Array.prototype.slice;
+    var params = slice.call(arguments, 1);
+
+    this.listeners = this.listeners || {};
+
+    // Params should always come in as an array
+    if (params == null) {
+      params = [];
+    }
+
+    // If there are no arguments to the event, use a temporary object
+    if (params.length === 0) {
+      params.push({});
+    }
+
+    // Set the `_type` of the first object to the event
+    params[0]._type = event;
+
+    if (event in this.listeners) {
+      this.invoke(this.listeners[event], slice.call(arguments, 1));
+    }
+
+    if ('*' in this.listeners) {
+      this.invoke(this.listeners['*'], arguments);
+    }
+  };
+
+  Observable.prototype.invoke = function (listeners, params) {
+    for (var i = 0, len = listeners.length; i < len; i++) {
+      listeners[i].apply(this, params);
+    }
+  };
+
+  Utils.Observable = Observable;
+
+  Utils.generateChars = function (length) {
+    var chars = '';
+
+    for (var i = 0; i < length; i++) {
+      var randomChar = Math.floor(Math.random() * 36);
+      chars += randomChar.toString(36);
+    }
+
+    return chars;
+  };
+
+  Utils.bind = function (func, context) {
+    return function () {
+      func.apply(context, arguments);
+    };
+  };
+
+  Utils._convertData = function (data) {
+    for (var originalKey in data) {
+      var keys = originalKey.split('-');
+
+      var dataLevel = data;
+
+      if (keys.length === 1) {
+        continue;
+      }
+
+      for (var k = 0; k < keys.length; k++) {
+        var key = keys[k];
+
+        // Lowercase the first letter
+        // By default, dash-separated becomes camelCase
+        key = key.substring(0, 1).toLowerCase() + key.substring(1);
+
+        if (!(key in dataLevel)) {
+          dataLevel[key] = {};
+        }
+
+        if (k == keys.length - 1) {
+          dataLevel[key] = data[originalKey];
+        }
+
+        dataLevel = dataLevel[key];
+      }
+
+      delete data[originalKey];
+    }
+
+    return data;
+  };
+
+  Utils.hasScroll = function (index, el) {
+    // Adapted from the function created by @ShadowScripter
+    // and adapted by @BillBarry on the Stack Exchange Code Review website.
+    // The original code can be found at
+    // http://codereview.stackexchange.com/q/13338
+    // and was designed to be used with the Sizzle selector engine.
+
+    var $el = $(el);
+    var overflowX = el.style.overflowX;
+    var overflowY = el.style.overflowY;
+
+    //Check both x and y declarations
+    if (overflowX === overflowY &&
+        (overflowY === 'hidden' || overflowY === 'visible')) {
+      return false;
+    }
+
+    if (overflowX === 'scroll' || overflowY === 'scroll') {
+      return true;
+    }
+
+    return ($el.innerHeight() < el.scrollHeight ||
+      $el.innerWidth() < el.scrollWidth);
+  };
+
+  Utils.escapeMarkup = function (markup) {
+    var replaceMap = {
+      '\\': '&#92;',
+      '&': '&amp;',
+      '<': '&lt;',
+      '>': '&gt;',
+      '"': '&quot;',
+      '\'': '&#39;',
+      '/': '&#47;'
+    };
+
+    // Do not try to escape the markup if it's not a string
+    if (typeof markup !== 'string') {
+      return markup;
+    }
+
+    return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
+      return replaceMap[match];
+    });
+  };
+
+  // Append an array of jQuery nodes to a given element.
+  Utils.appendMany = function ($element, $nodes) {
+    // jQuery 1.7.x does not support $.fn.append() with an array
+    // Fall back to a jQuery object collection using $.fn.add()
+    if ($.fn.jquery.substr(0, 3) === '1.7') {
+      var $jqNodes = $();
+
+      $.map($nodes, function (node) {
+        $jqNodes = $jqNodes.add(node);
+      });
+
+      $nodes = $jqNodes;
+    }
+
+    $element.append($nodes);
+  };
+
+  // Cache objects in Utils.__cache instead of $.data (see #4346)
+  Utils.__cache = {};
+
+  var id = 0;
+  Utils.GetUniqueElementId = function (element) {
+    // Get a unique element Id. If element has no id,
+    // creates a new unique number, stores it in the id
+    // attribute and returns the new id.
+    // If an id already exists, it simply returns it.
+
+    var select2Id = element.getAttribute('data-select2-id');
+    if (select2Id == null) {
+      // If element has id, use it.
+      if (element.id) {
+        select2Id = element.id;
+        element.setAttribute('data-select2-id', select2Id);
+      } else {
+        element.setAttribute('data-select2-id', ++id);
+        select2Id = id.toString();
+      }
+    }
+    return select2Id;
+  };
+
+  Utils.StoreData = function (element, name, value) {
+    // Stores an item in the cache for a specified element.
+    // name is the cache key.
+    var id = Utils.GetUniqueElementId(element);
+    if (!Utils.__cache[id]) {
+      Utils.__cache[id] = {};
+    }
+
+    Utils.__cache[id][name] = value;
+  };
+
+  Utils.GetData = function (element, name) {
+    // Retrieves a value from the cache by its key (name)
+    // name is optional. If no name specified, return
+    // all cache items for the specified element.
+    // and for a specified element.
+    var id = Utils.GetUniqueElementId(element);
+    if (name) {
+      if (Utils.__cache[id]) {
+        if (Utils.__cache[id][name] != null) {
+          return Utils.__cache[id][name];
+        }
+        return $(element).data(name); // Fallback to HTML5 data attribs.
+      }
+      return $(element).data(name); // Fallback to HTML5 data attribs.
+    } else {
+      return Utils.__cache[id];
+    }
+  };
+
+  Utils.RemoveData = function (element) {
+    // Removes all cached items for a specified element.
+    var id = Utils.GetUniqueElementId(element);
+    if (Utils.__cache[id] != null) {
+      delete Utils.__cache[id];
+    }
+  };
+
+  return Utils;
+});
+
+S2.define('select2/results',[
+  'jquery',
+  './utils'
+], function ($, Utils) {
+  function Results ($element, options, dataAdapter) {
+    this.$element = $element;
+    this.data = dataAdapter;
+    this.options = options;
+
+    Results.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(Results, Utils.Observable);
+
+  Results.prototype.render = function () {
+    var $results = $(
+      '<ul class="select2-results__options" role="tree"></ul>'
+    );
+
+    if (this.options.get('multiple')) {
+      $results.attr('aria-multiselectable', 'true');
+    }
+
+    this.$results = $results;
+
+    return $results;
+  };
+
+  Results.prototype.clear = function () {
+    this.$results.empty();
+  };
+
+  Results.prototype.displayMessage = function (params) {
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    this.clear();
+    this.hideLoading();
+
+    var $message = $(
+      '<li role="treeitem" aria-live="assertive"' +
+      ' class="select2-results__option"></li>'
+    );
+
+    var message = this.options.get('translations').get(params.message);
+
+    $message.append(
+      escapeMarkup(
+        message(params.args)
+      )
+    );
+
+    $message[0].className += ' select2-results__message';
+
+    this.$results.append($message);
+  };
+
+  Results.prototype.hideMessages = function () {
+    this.$results.find('.select2-results__message').remove();
+  };
+
+  Results.prototype.append = function (data) {
+    this.hideLoading();
+
+    var $options = [];
+
+    if (data.results == null || data.results.length === 0) {
+      if (this.$results.children().length === 0) {
+        this.trigger('results:message', {
+          message: 'noResults'
+        });
+      }
+
+      return;
+    }
+
+    data.results = this.sort(data.results);
+
+    for (var d = 0; d < data.results.length; d++) {
+      var item = data.results[d];
+
+      var $option = this.option(item);
+
+      $options.push($option);
+    }
+
+    this.$results.append($options);
+  };
+
+  Results.prototype.position = function ($results, $dropdown) {
+    var $resultsContainer = $dropdown.find('.select2-results');
+    $resultsContainer.append($results);
+  };
+
+  Results.prototype.sort = function (data) {
+    var sorter = this.options.get('sorter');
+
+    return sorter(data);
+  };
+
+  Results.prototype.highlightFirstItem = function () {
+    var $options = this.$results
+      .find('.select2-results__option[aria-selected]');
+
+    var $selected = $options.filter('[aria-selected=true]');
+
+    // Check if there are any selected options
+    if ($selected.length > 0) {
+      // If there are selected options, highlight the first
+      $selected.first().trigger('mouseenter');
+    } else {
+      // If there are no selected options, highlight the first option
+      // in the dropdown
+      $options.first().trigger('mouseenter');
+    }
+
+    this.ensureHighlightVisible();
+  };
+
+  Results.prototype.setClasses = function () {
+    var self = this;
+
+    this.data.current(function (selected) {
+      var selectedIds = $.map(selected, function (s) {
+        return s.id.toString();
+      });
+
+      var $options = self.$results
+        .find('.select2-results__option[aria-selected]');
+
+      $options.each(function () {
+        var $option = $(this);
+
+        var item = Utils.GetData(this, 'data');
+
+        // id needs to be converted to a string when comparing
+        var id = '' + item.id;
+
+        if ((item.element != null && item.element.selected) ||
+            (item.element == null && $.inArray(id, selectedIds) > -1)) {
+          $option.attr('aria-selected', 'true');
+        } else {
+          $option.attr('aria-selected', 'false');
+        }
+      });
+
+    });
+  };
+
+  Results.prototype.showLoading = function (params) {
+    this.hideLoading();
+
+    var loadingMore = this.options.get('translations').get('searching');
+
+    var loading = {
+      disabled: true,
+      loading: true,
+      text: loadingMore(params)
+    };
+    var $loading = this.option(loading);
+    $loading.className += ' loading-results';
+
+    this.$results.prepend($loading);
+  };
+
+  Results.prototype.hideLoading = function () {
+    this.$results.find('.loading-results').remove();
+  };
+
+  Results.prototype.option = function (data) {
+    var option = document.createElement('li');
+    option.className = 'select2-results__option';
+
+    var attrs = {
+      'role': 'treeitem',
+      'aria-selected': 'false'
+    };
+
+    var matches = window.Element.prototype.matches ||
+      window.Element.prototype.msMatchesSelector ||
+      window.Element.prototype.webkitMatchesSelector;
+
+    if ((data.element != null && matches.call(data.element, ':disabled')) ||
+        (data.element == null && data.disabled)) {
+      delete attrs['aria-selected'];
+      attrs['aria-disabled'] = 'true';
+    }
+
+    if (data.id == null) {
+      delete attrs['aria-selected'];
+    }
+
+    if (data._resultId != null) {
+      option.id = data._resultId;
+    }
+
+    if (data.title) {
+      option.title = data.title;
+    }
+
+    if (data.children) {
+      attrs.role = 'group';
+      attrs['aria-label'] = data.text;
+      delete attrs['aria-selected'];
+    }
+
+    for (var attr in attrs) {
+      var val = attrs[attr];
+
+      option.setAttribute(attr, val);
+    }
+
+    if (data.children) {
+      var $option = $(option);
+
+      var label = document.createElement('strong');
+      label.className = 'select2-results__group';
+
+      var $label = $(label);
+      this.template(data, label);
+
+      var $children = [];
+
+      for (var c = 0; c < data.children.length; c++) {
+        var child = data.children[c];
+
+        var $child = this.option(child);
+
+        $children.push($child);
+      }
+
+      var $childrenContainer = $('<ul></ul>', {
+        'class': 'select2-results__options select2-results__options--nested'
+      });
+
+      $childrenContainer.append($children);
+
+      $option.append(label);
+      $option.append($childrenContainer);
+    } else {
+      this.template(data, option);
+    }
+
+    Utils.StoreData(option, 'data', data);
+
+    return option;
+  };
+
+  Results.prototype.bind = function (container, $container) {
+    var self = this;
+
+    var id = container.id + '-results';
+
+    this.$results.attr('id', id);
+
+    container.on('results:all', function (params) {
+      self.clear();
+      self.append(params.data);
+
+      if (container.isOpen()) {
+        self.setClasses();
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('results:append', function (params) {
+      self.append(params.data);
+
+      if (container.isOpen()) {
+        self.setClasses();
+      }
+    });
+
+    container.on('query', function (params) {
+      self.hideMessages();
+      self.showLoading(params);
+    });
+
+    container.on('select', function () {
+      if (!container.isOpen()) {
+        return;
+      }
+
+      self.setClasses();
+
+      if (self.options.get('scrollAfterSelect')) {
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('unselect', function () {
+      if (!container.isOpen()) {
+        return;
+      }
+
+      self.setClasses();
+
+      if (self.options.get('scrollAfterSelect')) {
+        self.highlightFirstItem();
+      }
+    });
+
+    container.on('open', function () {
+      // When the dropdown is open, aria-expended="true"
+      self.$results.attr('aria-expanded', 'true');
+      self.$results.attr('aria-hidden', 'false');
+
+      self.setClasses();
+      self.ensureHighlightVisible();
+    });
+
+    container.on('close', function () {
+      // When the dropdown is closed, aria-expended="false"
+      self.$results.attr('aria-expanded', 'false');
+      self.$results.attr('aria-hidden', 'true');
+      self.$results.removeAttr('aria-activedescendant');
+    });
+
+    container.on('results:toggle', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      if ($highlighted.length === 0) {
+        return;
+      }
+
+      $highlighted.trigger('mouseup');
+    });
+
+    container.on('results:select', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      if ($highlighted.length === 0) {
+        return;
+      }
+
+      var data = Utils.GetData($highlighted[0], 'data');
+
+      if ($highlighted.attr('aria-selected') == 'true') {
+        self.trigger('close', {});
+      } else {
+        self.trigger('select', {
+          data: data
+        });
+      }
+    });
+
+    container.on('results:previous', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      var $options = self.$results.find('[aria-selected]');
+
+      var currentIndex = $options.index($highlighted);
+
+      // If we are already at the top, don't move further
+      // If no options, currentIndex will be -1
+      if (currentIndex <= 0) {
+        return;
+      }
+
+      var nextIndex = currentIndex - 1;
+
+      // If none are highlighted, highlight the first
+      if ($highlighted.length === 0) {
+        nextIndex = 0;
+      }
+
+      var $next = $options.eq(nextIndex);
+
+      $next.trigger('mouseenter');
+
+      var currentOffset = self.$results.offset().top;
+      var nextTop = $next.offset().top;
+      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
+
+      if (nextIndex === 0) {
+        self.$results.scrollTop(0);
+      } else if (nextTop - currentOffset < 0) {
+        self.$results.scrollTop(nextOffset);
+      }
+    });
+
+    container.on('results:next', function () {
+      var $highlighted = self.getHighlightedResults();
+
+      var $options = self.$results.find('[aria-selected]');
+
+      var currentIndex = $options.index($highlighted);
+
+      var nextIndex = currentIndex + 1;
+
+      // If we are at the last option, stay there
+      if (nextIndex >= $options.length) {
+        return;
+      }
+
+      var $next = $options.eq(nextIndex);
+
+      $next.trigger('mouseenter');
+
+      var currentOffset = self.$results.offset().top +
+        self.$results.outerHeight(false);
+      var nextBottom = $next.offset().top + $next.outerHeight(false);
+      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
+
+      if (nextIndex === 0) {
+        self.$results.scrollTop(0);
+      } else if (nextBottom > currentOffset) {
+        self.$results.scrollTop(nextOffset);
+      }
+    });
+
+    container.on('results:focus', function (params) {
+      params.element.addClass('select2-results__option--highlighted');
+    });
+
+    container.on('results:message', function (params) {
+      self.displayMessage(params);
+    });
+
+    if ($.fn.mousewheel) {
+      this.$results.on('mousewheel', function (e) {
+        var top = self.$results.scrollTop();
+
+        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
+
+        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
+        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
+
+        if (isAtTop) {
+          self.$results.scrollTop(0);
+
+          e.preventDefault();
+          e.stopPropagation();
+        } else if (isAtBottom) {
+          self.$results.scrollTop(
+            self.$results.get(0).scrollHeight - self.$results.height()
+          );
+
+          e.preventDefault();
+          e.stopPropagation();
+        }
+      });
+    }
+
+    this.$results.on('mouseup', '.select2-results__option[aria-selected]',
+      function (evt) {
+      var $this = $(this);
+
+      var data = Utils.GetData(this, 'data');
+
+      if ($this.attr('aria-selected') === 'true') {
+        if (self.options.get('multiple')) {
+          self.trigger('unselect', {
+            originalEvent: evt,
+            data: data
+          });
+        } else {
+          self.trigger('close', {});
+        }
+
+        return;
+      }
+
+      self.trigger('select', {
+        originalEvent: evt,
+        data: data
+      });
+    });
+
+    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
+      function (evt) {
+      var data = Utils.GetData(this, 'data');
+
+      self.getHighlightedResults()
+          .removeClass('select2-results__option--highlighted');
+
+      self.trigger('results:focus', {
+        data: data,
+        element: $(this)
+      });
+    });
+  };
+
+  Results.prototype.getHighlightedResults = function () {
+    var $highlighted = this.$results
+    .find('.select2-results__option--highlighted');
+
+    return $highlighted;
+  };
+
+  Results.prototype.destroy = function () {
+    this.$results.remove();
+  };
+
+  Results.prototype.ensureHighlightVisible = function () {
+    var $highlighted = this.getHighlightedResults();
+
+    if ($highlighted.length === 0) {
+      return;
+    }
+
+    var $options = this.$results.find('[aria-selected]');
+
+    var currentIndex = $options.index($highlighted);
+
+    var currentOffset = this.$results.offset().top;
+    var nextTop = $highlighted.offset().top;
+    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
+
+    var offsetDelta = nextTop - currentOffset;
+    nextOffset -= $highlighted.outerHeight(false) * 2;
+
+    if (currentIndex <= 2) {
+      this.$results.scrollTop(0);
+    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
+      this.$results.scrollTop(nextOffset);
+    }
+  };
+
+  Results.prototype.template = function (result, container) {
+    var template = this.options.get('templateResult');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    var content = template(result, container);
+
+    if (content == null) {
+      container.style.display = 'none';
+    } else if (typeof content === 'string') {
+      container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
+    }
+  };
+
+  return Results;
+});
+
+S2.define('select2/keys',[
+
+], function () {
+  var KEYS = {
+    BACKSPACE: 8,
+    TAB: 9,
+    ENTER: 13,
+    SHIFT: 16,
+    CTRL: 17,
+    ALT: 18,
+    ESC: 27,
+    SPACE: 32,
+    PAGE_UP: 33,
+    PAGE_DOWN: 34,
+    END: 35,
+    HOME: 36,
+    LEFT: 37,
+    UP: 38,
+    RIGHT: 39,
+    DOWN: 40,
+    DELETE: 46
+  };
+
+  return KEYS;
+});
+
+S2.define('select2/selection/base',[
+  'jquery',
+  '../utils',
+  '../keys'
+], function ($, Utils, KEYS) {
+  function BaseSelection ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    BaseSelection.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(BaseSelection, Utils.Observable);
+
+  BaseSelection.prototype.render = function () {
+    var $selection = $(
+      '<span class="select2-selection" role="combobox" ' +
+      ' aria-haspopup="true" aria-expanded="false">' +
+      '</span>'
+    );
+
+    this._tabindex = 0;
+
+    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
+      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
+    } else if (this.$element.attr('tabindex') != null) {
+      this._tabindex = this.$element.attr('tabindex');
+    }
+
+    $selection.attr('title', this.$element.attr('title'));
+    $selection.attr('tabindex', this._tabindex);
+
+    this.$selection = $selection;
+
+    return $selection;
+  };
+
+  BaseSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    var id = container.id + '-container';
+    var resultsId = container.id + '-results';
+
+    this.container = container;
+
+    this.$selection.on('focus', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this.$selection.on('blur', function (evt) {
+      self._handleBlur(evt);
+    });
+
+    this.$selection.on('keydown', function (evt) {
+      self.trigger('keypress', evt);
+
+      if (evt.which === KEYS.SPACE) {
+        evt.preventDefault();
+      }
+    });
+
+    container.on('results:focus', function (params) {
+      self.$selection.attr('aria-activedescendant', params.data._resultId);
+    });
+
+    container.on('selection:update', function (params) {
+      self.update(params.data);
+    });
+
+    container.on('open', function () {
+      // When the dropdown is open, aria-expanded="true"
+      self.$selection.attr('aria-expanded', 'true');
+      self.$selection.attr('aria-owns', resultsId);
+
+      self._attachCloseHandler(container);
+    });
+
+    container.on('close', function () {
+      // When the dropdown is closed, aria-expanded="false"
+      self.$selection.attr('aria-expanded', 'false');
+      self.$selection.removeAttr('aria-activedescendant');
+      self.$selection.removeAttr('aria-owns');
+
+      self.$selection.trigger('focus');
+
+      self._detachCloseHandler(container);
+    });
+
+    container.on('enable', function () {
+      self.$selection.attr('tabindex', self._tabindex);
+    });
+
+    container.on('disable', function () {
+      self.$selection.attr('tabindex', '-1');
+    });
+  };
+
+  BaseSelection.prototype._handleBlur = function (evt) {
+    var self = this;
+
+    // This needs to be delayed as the active element is the body when the tab
+    // key is pressed, possibly along with others.
+    window.setTimeout(function () {
+      // Don't trigger `blur` if the focus is still in the selection
+      if (
+        (document.activeElement == self.$selection[0]) ||
+        ($.contains(self.$selection[0], document.activeElement))
+      ) {
+        return;
+      }
+
+      self.trigger('blur', evt);
+    }, 1);
+  };
+
+  BaseSelection.prototype._attachCloseHandler = function (container) {
+    var self = this;
+
+    $(document.body).on('mousedown.select2.' + container.id, function (e) {
+      var $target = $(e.target);
+
+      var $select = $target.closest('.select2');
+
+      var $all = $('.select2.select2-container--open');
+
+      $all.each(function () {
+        var $this = $(this);
+
+        if (this == $select[0]) {
+          return;
+        }
+
+        var $element = Utils.GetData(this, 'element');
+
+        $element.select2('close');
+      });
+    });
+  };
+
+  BaseSelection.prototype._detachCloseHandler = function (container) {
+    $(document.body).off('mousedown.select2.' + container.id);
+  };
+
+  BaseSelection.prototype.position = function ($selection, $container) {
+    var $selectionContainer = $container.find('.selection');
+    $selectionContainer.append($selection);
+  };
+
+  BaseSelection.prototype.destroy = function () {
+    this._detachCloseHandler(this.container);
+  };
+
+  BaseSelection.prototype.update = function (data) {
+    throw new Error('The `update` method must be defined in child classes.');
+  };
+
+  return BaseSelection;
+});
+
+S2.define('select2/selection/single',[
+  'jquery',
+  './base',
+  '../utils',
+  '../keys'
+], function ($, BaseSelection, Utils, KEYS) {
+  function SingleSelection () {
+    SingleSelection.__super__.constructor.apply(this, arguments);
+  }
+
+  Utils.Extend(SingleSelection, BaseSelection);
+
+  SingleSelection.prototype.render = function () {
+    var $selection = SingleSelection.__super__.render.call(this);
+
+    $selection.addClass('select2-selection--single');
+
+    $selection.html(
+      '<span class="select2-selection__rendered"></span>' +
+      '<span class="select2-selection__arrow" role="presentation">' +
+        '<b role="presentation"></b>' +
+      '</span>'
+    );
+
+    return $selection;
+  };
+
+  SingleSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    SingleSelection.__super__.bind.apply(this, arguments);
+
+    var id = container.id + '-container';
+
+    this.$selection.find('.select2-selection__rendered')
+      .attr('id', id)
+      .attr('role', 'textbox')
+      .attr('aria-readonly', 'true');
+    this.$selection.attr('aria-labelledby', id);
+
+    this.$selection.on('mousedown', function (evt) {
+      // Only respond to left clicks
+      if (evt.which !== 1) {
+        return;
+      }
+
+      self.trigger('toggle', {
+        originalEvent: evt
+      });
+    });
+
+    this.$selection.on('focus', function (evt) {
+      // User focuses on the container
+    });
+
+    this.$selection.on('blur', function (evt) {
+      // User exits the container
+    });
+
+    container.on('focus', function (evt) {
+      if (!container.isOpen()) {
+        self.$selection.trigger('focus');
+      }
+    });
+  };
+
+  SingleSelection.prototype.clear = function () {
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    $rendered.empty();
+    $rendered.removeAttr('title'); // clear tooltip on empty
+  };
+
+  SingleSelection.prototype.display = function (data, container) {
+    var template = this.options.get('templateSelection');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    return escapeMarkup(template(data, container));
+  };
+
+  SingleSelection.prototype.selectionContainer = function () {
+    return $('<span></span>');
+  };
+
+  SingleSelection.prototype.update = function (data) {
+    if (data.length === 0) {
+      this.clear();
+      return;
+    }
+
+    var selection = data[0];
+
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    var formatted = this.display(selection, $rendered);
+
+    $rendered.empty().append(formatted);
+    $rendered.attr('title', selection.title || selection.text);
+  };
+
+  return SingleSelection;
+});
+
+S2.define('select2/selection/multiple',[
+  'jquery',
+  './base',
+  '../utils'
+], function ($, BaseSelection, Utils) {
+  function MultipleSelection ($element, options) {
+    MultipleSelection.__super__.constructor.apply(this, arguments);
+  }
+
+  Utils.Extend(MultipleSelection, BaseSelection);
+
+  MultipleSelection.prototype.render = function () {
+    var $selection = MultipleSelection.__super__.render.call(this);
+
+    $selection.addClass('select2-selection--multiple');
+
+    $selection.html(
+      '<ul class="select2-selection__rendered"></ul>'
+    );
+
+    return $selection;
+  };
+
+  MultipleSelection.prototype.bind = function (container, $container) {
+    var self = this;
+
+    MultipleSelection.__super__.bind.apply(this, arguments);
+
+    this.$selection.on('click', function (evt) {
+      self.trigger('toggle', {
+        originalEvent: evt
+      });
+    });
+
+    this.$selection.on(
+      'click',
+      '.select2-selection__choice__remove',
+      function (evt) {
+        // Ignore the event if it is disabled
+        if (self.options.get('disabled')) {
+          return;
+        }
+
+        var $remove = $(this);
+        var $selection = $remove.parent();
+
+        var data = Utils.GetData($selection[0], 'data');
+
+        self.trigger('unselect', {
+          originalEvent: evt,
+          data: data
+        });
+      }
+    );
+  };
+
+  MultipleSelection.prototype.clear = function () {
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+    $rendered.empty();
+    $rendered.removeAttr('title');
+  };
+
+  MultipleSelection.prototype.display = function (data, container) {
+    var template = this.options.get('templateSelection');
+    var escapeMarkup = this.options.get('escapeMarkup');
+
+    return escapeMarkup(template(data, container));
+  };
+
+  MultipleSelection.prototype.selectionContainer = function () {
+    var $container = $(
+      '<li class="select2-selection__choice">' +
+        '<span class="select2-selection__choice__remove" role="presentation">' +
+          '&times;' +
+        '</span>' +
+      '</li>'
+    );
+
+    return $container;
+  };
+
+  MultipleSelection.prototype.update = function (data) {
+    this.clear();
+
+    if (data.length === 0) {
+      return;
+    }
+
+    var $selections = [];
+
+    for (var d = 0; d < data.length; d++) {
+      var selection = data[d];
+
+      var $selection = this.selectionContainer();
+      var formatted = this.display(selection, $selection);
+
+      $selection.append(formatted);
+      $selection.attr('title', selection.title || selection.text);
+
+      Utils.StoreData($selection[0], 'data', selection);
+
+      $selections.push($selection);
+    }
+
+    var $rendered = this.$selection.find('.select2-selection__rendered');
+
+    Utils.appendMany($rendered, $selections);
+  };
+
+  return MultipleSelection;
+});
+
+S2.define('select2/selection/placeholder',[
+  '../utils'
+], function (Utils) {
+  function Placeholder (decorated, $element, options) {
+    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+    decorated.call(this, $element, options);
+  }
+
+  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
+    if (typeof placeholder === 'string') {
+      placeholder = {
+        id: '',
+        text: placeholder
+      };
+    }
+
+    return placeholder;
+  };
+
+  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
+    var $placeholder = this.selectionContainer();
+
+    $placeholder.html(this.display(placeholder));
+    $placeholder.addClass('select2-selection__placeholder')
+                .removeClass('select2-selection__choice');
+
+    return $placeholder;
+  };
+
+  Placeholder.prototype.update = function (decorated, data) {
+    var singlePlaceholder = (
+      data.length == 1 && data[0].id != this.placeholder.id
+    );
+    var multipleSelections = data.length > 1;
+
+    if (multipleSelections || singlePlaceholder) {
+      return decorated.call(this, data);
+    }
+
+    this.clear();
+
+    var $placeholder = this.createPlaceholder(this.placeholder);
+
+    this.$selection.find('.select2-selection__rendered').append($placeholder);
+  };
+
+  return Placeholder;
+});
+
+S2.define('select2/selection/allowClear',[
+  'jquery',
+  '../keys',
+  '../utils'
+], function ($, KEYS, Utils) {
+  function AllowClear () { }
+
+  AllowClear.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    if (this.placeholder == null) {
+      if (this.options.get('debug') && window.console && console.error) {
+        console.error(
+          'Select2: The `allowClear` option should be used in combination ' +
+          'with the `placeholder` option.'
+        );
+      }
+    }
+
+    this.$selection.on('mousedown', '.select2-selection__clear',
+      function (evt) {
+        self._handleClear(evt);
+    });
+
+    container.on('keypress', function (evt) {
+      self._handleKeyboardClear(evt, container);
+    });
+  };
+
+  AllowClear.prototype._handleClear = function (_, evt) {
+    // Ignore the event if it is disabled
+    if (this.options.get('disabled')) {
+      return;
+    }
+
+    var $clear = this.$selection.find('.select2-selection__clear');
+
+    // Ignore the event if nothing has been selected
+    if ($clear.length === 0) {
+      return;
+    }
+
+    evt.stopPropagation();
+
+    var data = Utils.GetData($clear[0], 'data');
+
+    var previousVal = this.$element.val();
+    this.$element.val(this.placeholder.id);
+
+    var unselectData = {
+      data: data
+    };
+    this.trigger('clear', unselectData);
+    if (unselectData.prevented) {
+      this.$element.val(previousVal);
+      return;
+    }
+
+    for (var d = 0; d < data.length; d++) {
+      unselectData = {
+        data: data[d]
+      };
+
+      // Trigger the `unselect` event, so people can prevent it from being
+      // cleared.
+      this.trigger('unselect', unselectData);
+
+      // If the event was prevented, don't clear it out.
+      if (unselectData.prevented) {
+        this.$element.val(previousVal);
+        return;
+      }
+    }
+
+    this.$element.trigger('change');
+
+    this.trigger('toggle', {});
+  };
+
+  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
+    if (container.isOpen()) {
+      return;
+    }
+
+    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
+      this._handleClear(evt);
+    }
+  };
+
+  AllowClear.prototype.update = function (decorated, data) {
+    decorated.call(this, data);
+
+    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
+        data.length === 0) {
+      return;
+    }
+
+    var removeAll = this.options.get('translations').get('removeAllItems');   
+
+    var $remove = $(
+      '<span class="select2-selection__clear" title="' + removeAll() +'">' +
+        '&times;' +
+      '</span>'
+    );
+    Utils.StoreData($remove[0], 'data', data);
+
+    this.$selection.find('.select2-selection__rendered').prepend($remove);
+  };
+
+  return AllowClear;
+});
+
+S2.define('select2/selection/search',[
+  'jquery',
+  '../utils',
+  '../keys'
+], function ($, Utils, KEYS) {
+  function Search (decorated, $element, options) {
+    decorated.call(this, $element, options);
+  }
+
+  Search.prototype.render = function (decorated) {
+    var $search = $(
+      '<li class="select2-search select2-search--inline">' +
+        '<input class="select2-search__field" type="search" tabindex="-1"' +
+        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+        ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
+      '</li>'
+    );
+
+    this.$searchContainer = $search;
+    this.$search = $search.find('input');
+
+    var $rendered = decorated.call(this);
+
+    this._transferTabIndex();
+
+    return $rendered;
+  };
+
+  Search.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('open', function () {
+      self.$search.trigger('focus');
+    });
+
+    container.on('close', function () {
+      self.$search.val('');
+      self.$search.removeAttr('aria-activedescendant');
+      self.$search.trigger('focus');
+    });
+
+    container.on('enable', function () {
+      self.$search.prop('disabled', false);
+
+      self._transferTabIndex();
+    });
+
+    container.on('disable', function () {
+      self.$search.prop('disabled', true);
+    });
+
+    container.on('focus', function (evt) {
+      self.$search.trigger('focus');
+    });
+
+    container.on('results:focus', function (params) {
+      self.$search.attr('aria-activedescendant', params.id);
+    });
+
+    this.$selection.on('focusin', '.select2-search--inline', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this.$selection.on('focusout', '.select2-search--inline', function (evt) {
+      self._handleBlur(evt);
+    });
+
+    this.$selection.on('keydown', '.select2-search--inline', function (evt) {
+      evt.stopPropagation();
+
+      self.trigger('keypress', evt);
+
+      self._keyUpPrevented = evt.isDefaultPrevented();
+
+      var key = evt.which;
+
+      if (key === KEYS.BACKSPACE && self.$search.val() === '') {
+        var $previousChoice = self.$searchContainer
+          .prev('.select2-selection__choice');
+
+        if ($previousChoice.length > 0) {
+          var item = Utils.GetData($previousChoice[0], 'data');
+
+          self.searchRemoveChoice(item);
+
+          evt.preventDefault();
+        }
+      }
+    });
+
+    // Try to detect the IE version should the `documentMode` property that
+    // is stored on the document. This is only implemented in IE and is
+    // slightly cleaner than doing a user agent check.
+    // This property is not available in Edge, but Edge also doesn't have
+    // this bug.
+    var msie = document.documentMode;
+    var disableInputEvents = msie && msie <= 11;
+
+    // Workaround for browsers which do not support the `input` event
+    // This will prevent double-triggering of events for browsers which support
+    // both the `keyup` and `input` events.
+    this.$selection.on(
+      'input.searchcheck',
+      '.select2-search--inline',
+      function (evt) {
+        // IE will trigger the `input` event when a placeholder is used on a
+        // search box. To get around this issue, we are forced to ignore all
+        // `input` events in IE and keep using `keyup`.
+        if (disableInputEvents) {
+          self.$selection.off('input.search input.searchcheck');
+          return;
+        }
+
+        // Unbind the duplicated `keyup` event
+        self.$selection.off('keyup.search');
+      }
+    );
+
+    this.$selection.on(
+      'keyup.search input.search',
+      '.select2-search--inline',
+      function (evt) {
+        // IE will trigger the `input` event when a placeholder is used on a
+        // search box. To get around this issue, we are forced to ignore all
+        // `input` events in IE and keep using `keyup`.
+        if (disableInputEvents && evt.type === 'input') {
+          self.$selection.off('input.search input.searchcheck');
+          return;
+        }
+
+        var key = evt.which;
+
+        // We can freely ignore events from modifier keys
+        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
+          return;
+        }
+
+        // Tabbing will be handled during the `keydown` phase
+        if (key == KEYS.TAB) {
+          return;
+        }
+
+        self.handleSearch(evt);
+      }
+    );
+  };
+
+  /**
+   * This method will transfer the tabindex attribute from the rendered
+   * selection to the search box. This allows for the search box to be used as
+   * the primary focus instead of the selection container.
+   *
+   * @private
+   */
+  Search.prototype._transferTabIndex = function (decorated) {
+    this.$search.attr('tabindex', this.$selection.attr('tabindex'));
+    this.$selection.attr('tabindex', '-1');
+  };
+
+  Search.prototype.createPlaceholder = function (decorated, placeholder) {
+    this.$search.attr('placeholder', placeholder.text);
+  };
+
+  Search.prototype.update = function (decorated, data) {
+    var searchHadFocus = this.$search[0] == document.activeElement;
+
+    this.$search.attr('placeholder', '');
+
+    decorated.call(this, data);
+
+    this.$selection.find('.select2-selection__rendered')
+                   .append(this.$searchContainer);
+
+    this.resizeSearch();
+    if (searchHadFocus) {
+      this.$search.trigger('focus');
+    }
+  };
+
+  Search.prototype.handleSearch = function () {
+    this.resizeSearch();
+
+    if (!this._keyUpPrevented) {
+      var input = this.$search.val();
+
+      this.trigger('query', {
+        term: input
+      });
+    }
+
+    this._keyUpPrevented = false;
+  };
+
+  Search.prototype.searchRemoveChoice = function (decorated, item) {
+    this.trigger('unselect', {
+      data: item
+    });
+
+    this.$search.val(item.text);
+    this.handleSearch();
+  };
+
+  Search.prototype.resizeSearch = function () {
+    this.$search.css('width', '25px');
+
+    var width = '';
+
+    if (this.$search.attr('placeholder') !== '') {
+      width = this.$selection.find('.select2-selection__rendered').innerWidth();
+    } else {
+      var minimumWidth = this.$search.val().length + 1;
+
+      width = (minimumWidth * 0.75) + 'em';
+    }
+
+    this.$search.css('width', width);
+  };
+
+  return Search;
+});
+
+S2.define('select2/selection/eventRelay',[
+  'jquery'
+], function ($) {
+  function EventRelay () { }
+
+  EventRelay.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+    var relayEvents = [
+      'open', 'opening',
+      'close', 'closing',
+      'select', 'selecting',
+      'unselect', 'unselecting',
+      'clear', 'clearing'
+    ];
+
+    var preventableEvents = [
+      'opening', 'closing', 'selecting', 'unselecting', 'clearing'
+    ];
+
+    decorated.call(this, container, $container);
+
+    container.on('*', function (name, params) {
+      // Ignore events that should not be relayed
+      if ($.inArray(name, relayEvents) === -1) {
+        return;
+      }
+
+      // The parameters should always be an object
+      params = params || {};
+
+      // Generate the jQuery event for the Select2 event
+      var evt = $.Event('select2:' + name, {
+        params: params
+      });
+
+      self.$element.trigger(evt);
+
+      // Only handle preventable events if it was one
+      if ($.inArray(name, preventableEvents) === -1) {
+        return;
+      }
+
+      params.prevented = evt.isDefaultPrevented();
+    });
+  };
+
+  return EventRelay;
+});
+
+S2.define('select2/translation',[
+  'jquery',
+  'require'
+], function ($, require) {
+  function Translation (dict) {
+    this.dict = dict || {};
+  }
+
+  Translation.prototype.all = function () {
+    return this.dict;
+  };
+
+  Translation.prototype.get = function (key) {
+    return this.dict[key];
+  };
+
+  Translation.prototype.extend = function (translation) {
+    this.dict = $.extend({}, translation.all(), this.dict);
+  };
+
+  // Static functions
+
+  Translation._cache = {};
+
+  Translation.loadPath = function (path) {
+    if (!(path in Translation._cache)) {
+      var translations = require(path);
+
+      Translation._cache[path] = translations;
+    }
+
+    return new Translation(Translation._cache[path]);
+  };
+
+  return Translation;
+});
+
+S2.define('select2/diacritics',[
+
+], function () {
+  var diacritics = {
+    '\u24B6': 'A',
+    '\uFF21': 'A',
+    '\u00C0': 'A',
+    '\u00C1': 'A',
+    '\u00C2': 'A',
+    '\u1EA6': 'A',
+    '\u1EA4': 'A',
+    '\u1EAA': 'A',
+    '\u1EA8': 'A',
+    '\u00C3': 'A',
+    '\u0100': 'A',
+    '\u0102': 'A',
+    '\u1EB0': 'A',
+    '\u1EAE': 'A',
+    '\u1EB4': 'A',
+    '\u1EB2': 'A',
+    '\u0226': 'A',
+    '\u01E0': 'A',
+    '\u00C4': 'A',
+    '\u01DE': 'A',
+    '\u1EA2': 'A',
+    '\u00C5': 'A',
+    '\u01FA': 'A',
+    '\u01CD': 'A',
+    '\u0200': 'A',
+    '\u0202': 'A',
+    '\u1EA0': 'A',
+    '\u1EAC': 'A',
+    '\u1EB6': 'A',
+    '\u1E00': 'A',
+    '\u0104': 'A',
+    '\u023A': 'A',
+    '\u2C6F': 'A',
+    '\uA732': 'AA',
+    '\u00C6': 'AE',
+    '\u01FC': 'AE',
+    '\u01E2': 'AE',
+    '\uA734': 'AO',
+    '\uA736': 'AU',
+    '\uA738': 'AV',
+    '\uA73A': 'AV',
+    '\uA73C': 'AY',
+    '\u24B7': 'B',
+    '\uFF22': 'B',
+    '\u1E02': 'B',
+    '\u1E04': 'B',
+    '\u1E06': 'B',
+    '\u0243': 'B',
+    '\u0182': 'B',
+    '\u0181': 'B',
+    '\u24B8': 'C',
+    '\uFF23': 'C',
+    '\u0106': 'C',
+    '\u0108': 'C',
+    '\u010A': 'C',
+    '\u010C': 'C',
+    '\u00C7': 'C',
+    '\u1E08': 'C',
+    '\u0187': 'C',
+    '\u023B': 'C',
+    '\uA73E': 'C',
+    '\u24B9': 'D',
+    '\uFF24': 'D',
+    '\u1E0A': 'D',
+    '\u010E': 'D',
+    '\u1E0C': 'D',
+    '\u1E10': 'D',
+    '\u1E12': 'D',
+    '\u1E0E': 'D',
+    '\u0110': 'D',
+    '\u018B': 'D',
+    '\u018A': 'D',
+    '\u0189': 'D',
+    '\uA779': 'D',
+    '\u01F1': 'DZ',
+    '\u01C4': 'DZ',
+    '\u01F2': 'Dz',
+    '\u01C5': 'Dz',
+    '\u24BA': 'E',
+    '\uFF25': 'E',
+    '\u00C8': 'E',
+    '\u00C9': 'E',
+    '\u00CA': 'E',
+    '\u1EC0': 'E',
+    '\u1EBE': 'E',
+    '\u1EC4': 'E',
+    '\u1EC2': 'E',
+    '\u1EBC': 'E',
+    '\u0112': 'E',
+    '\u1E14': 'E',
+    '\u1E16': 'E',
+    '\u0114': 'E',
+    '\u0116': 'E',
+    '\u00CB': 'E',
+    '\u1EBA': 'E',
+    '\u011A': 'E',
+    '\u0204': 'E',
+    '\u0206': 'E',
+    '\u1EB8': 'E',
+    '\u1EC6': 'E',
+    '\u0228': 'E',
+    '\u1E1C': 'E',
+    '\u0118': 'E',
+    '\u1E18': 'E',
+    '\u1E1A': 'E',
+    '\u0190': 'E',
+    '\u018E': 'E',
+    '\u24BB': 'F',
+    '\uFF26': 'F',
+    '\u1E1E': 'F',
+    '\u0191': 'F',
+    '\uA77B': 'F',
+    '\u24BC': 'G',
+    '\uFF27': 'G',
+    '\u01F4': 'G',
+    '\u011C': 'G',
+    '\u1E20': 'G',
+    '\u011E': 'G',
+    '\u0120': 'G',
+    '\u01E6': 'G',
+    '\u0122': 'G',
+    '\u01E4': 'G',
+    '\u0193': 'G',
+    '\uA7A0': 'G',
+    '\uA77D': 'G',
+    '\uA77E': 'G',
+    '\u24BD': 'H',
+    '\uFF28': 'H',
+    '\u0124': 'H',
+    '\u1E22': 'H',
+    '\u1E26': 'H',
+    '\u021E': 'H',
+    '\u1E24': 'H',
+    '\u1E28': 'H',
+    '\u1E2A': 'H',
+    '\u0126': 'H',
+    '\u2C67': 'H',
+    '\u2C75': 'H',
+    '\uA78D': 'H',
+    '\u24BE': 'I',
+    '\uFF29': 'I',
+    '\u00CC': 'I',
+    '\u00CD': 'I',
+    '\u00CE': 'I',
+    '\u0128': 'I',
+    '\u012A': 'I',
+    '\u012C': 'I',
+    '\u0130': 'I',
+    '\u00CF': 'I',
+    '\u1E2E': 'I',
+    '\u1EC8': 'I',
+    '\u01CF': 'I',
+    '\u0208': 'I',
+    '\u020A': 'I',
+    '\u1ECA': 'I',
+    '\u012E': 'I',
+    '\u1E2C': 'I',
+    '\u0197': 'I',
+    '\u24BF': 'J',
+    '\uFF2A': 'J',
+    '\u0134': 'J',
+    '\u0248': 'J',
+    '\u24C0': 'K',
+    '\uFF2B': 'K',
+    '\u1E30': 'K',
+    '\u01E8': 'K',
+    '\u1E32': 'K',
+    '\u0136': 'K',
+    '\u1E34': 'K',
+    '\u0198': 'K',
+    '\u2C69': 'K',
+    '\uA740': 'K',
+    '\uA742': 'K',
+    '\uA744': 'K',
+    '\uA7A2': 'K',
+    '\u24C1': 'L',
+    '\uFF2C': 'L',
+    '\u013F': 'L',
+    '\u0139': 'L',
+    '\u013D': 'L',
+    '\u1E36': 'L',
+    '\u1E38': 'L',
+    '\u013B': 'L',
+    '\u1E3C': 'L',
+    '\u1E3A': 'L',
+    '\u0141': 'L',
+    '\u023D': 'L',
+    '\u2C62': 'L',
+    '\u2C60': 'L',
+    '\uA748': 'L',
+    '\uA746': 'L',
+    '\uA780': 'L',
+    '\u01C7': 'LJ',
+    '\u01C8': 'Lj',
+    '\u24C2': 'M',
+    '\uFF2D': 'M',
+    '\u1E3E': 'M',
+    '\u1E40': 'M',
+    '\u1E42': 'M',
+    '\u2C6E': 'M',
+    '\u019C': 'M',
+    '\u24C3': 'N',
+    '\uFF2E': 'N',
+    '\u01F8': 'N',
+    '\u0143': 'N',
+    '\u00D1': 'N',
+    '\u1E44': 'N',
+    '\u0147': 'N',
+    '\u1E46': 'N',
+    '\u0145': 'N',
+    '\u1E4A': 'N',
+    '\u1E48': 'N',
+    '\u0220': 'N',
+    '\u019D': 'N',
+    '\uA790': 'N',
+    '\uA7A4': 'N',
+    '\u01CA': 'NJ',
+    '\u01CB': 'Nj',
+    '\u24C4': 'O',
+    '\uFF2F': 'O',
+    '\u00D2': 'O',
+    '\u00D3': 'O',
+    '\u00D4': 'O',
+    '\u1ED2': 'O',
+    '\u1ED0': 'O',
+    '\u1ED6': 'O',
+    '\u1ED4': 'O',
+    '\u00D5': 'O',
+    '\u1E4C': 'O',
+    '\u022C': 'O',
+    '\u1E4E': 'O',
+    '\u014C': 'O',
+    '\u1E50': 'O',
+    '\u1E52': 'O',
+    '\u014E': 'O',
+    '\u022E': 'O',
+    '\u0230': 'O',
+    '\u00D6': 'O',
+    '\u022A': 'O',
+    '\u1ECE': 'O',
+    '\u0150': 'O',
+    '\u01D1': 'O',
+    '\u020C': 'O',
+    '\u020E': 'O',
+    '\u01A0': 'O',
+    '\u1EDC': 'O',
+    '\u1EDA': 'O',
+    '\u1EE0': 'O',
+    '\u1EDE': 'O',
+    '\u1EE2': 'O',
+    '\u1ECC': 'O',
+    '\u1ED8': 'O',
+    '\u01EA': 'O',
+    '\u01EC': 'O',
+    '\u00D8': 'O',
+    '\u01FE': 'O',
+    '\u0186': 'O',
+    '\u019F': 'O',
+    '\uA74A': 'O',
+    '\uA74C': 'O',
+    '\u0152': 'OE',
+    '\u01A2': 'OI',
+    '\uA74E': 'OO',
+    '\u0222': 'OU',
+    '\u24C5': 'P',
+    '\uFF30': 'P',
+    '\u1E54': 'P',
+    '\u1E56': 'P',
+    '\u01A4': 'P',
+    '\u2C63': 'P',
+    '\uA750': 'P',
+    '\uA752': 'P',
+    '\uA754': 'P',
+    '\u24C6': 'Q',
+    '\uFF31': 'Q',
+    '\uA756': 'Q',
+    '\uA758': 'Q',
+    '\u024A': 'Q',
+    '\u24C7': 'R',
+    '\uFF32': 'R',
+    '\u0154': 'R',
+    '\u1E58': 'R',
+    '\u0158': 'R',
+    '\u0210': 'R',
+    '\u0212': 'R',
+    '\u1E5A': 'R',
+    '\u1E5C': 'R',
+    '\u0156': 'R',
+    '\u1E5E': 'R',
+    '\u024C': 'R',
+    '\u2C64': 'R',
+    '\uA75A': 'R',
+    '\uA7A6': 'R',
+    '\uA782': 'R',
+    '\u24C8': 'S',
+    '\uFF33': 'S',
+    '\u1E9E': 'S',
+    '\u015A': 'S',
+    '\u1E64': 'S',
+    '\u015C': 'S',
+    '\u1E60': 'S',
+    '\u0160': 'S',
+    '\u1E66': 'S',
+    '\u1E62': 'S',
+    '\u1E68': 'S',
+    '\u0218': 'S',
+    '\u015E': 'S',
+    '\u2C7E': 'S',
+    '\uA7A8': 'S',
+    '\uA784': 'S',
+    '\u24C9': 'T',
+    '\uFF34': 'T',
+    '\u1E6A': 'T',
+    '\u0164': 'T',
+    '\u1E6C': 'T',
+    '\u021A': 'T',
+    '\u0162': 'T',
+    '\u1E70': 'T',
+    '\u1E6E': 'T',
+    '\u0166': 'T',
+    '\u01AC': 'T',
+    '\u01AE': 'T',
+    '\u023E': 'T',
+    '\uA786': 'T',
+    '\uA728': 'TZ',
+    '\u24CA': 'U',
+    '\uFF35': 'U',
+    '\u00D9': 'U',
+    '\u00DA': 'U',
+    '\u00DB': 'U',
+    '\u0168': 'U',
+    '\u1E78': 'U',
+    '\u016A': 'U',
+    '\u1E7A': 'U',
+    '\u016C': 'U',
+    '\u00DC': 'U',
+    '\u01DB': 'U',
+    '\u01D7': 'U',
+    '\u01D5': 'U',
+    '\u01D9': 'U',
+    '\u1EE6': 'U',
+    '\u016E': 'U',
+    '\u0170': 'U',
+    '\u01D3': 'U',
+    '\u0214': 'U',
+    '\u0216': 'U',
+    '\u01AF': 'U',
+    '\u1EEA': 'U',
+    '\u1EE8': 'U',
+    '\u1EEE': 'U',
+    '\u1EEC': 'U',
+    '\u1EF0': 'U',
+    '\u1EE4': 'U',
+    '\u1E72': 'U',
+    '\u0172': 'U',
+    '\u1E76': 'U',
+    '\u1E74': 'U',
+    '\u0244': 'U',
+    '\u24CB': 'V',
+    '\uFF36': 'V',
+    '\u1E7C': 'V',
+    '\u1E7E': 'V',
+    '\u01B2': 'V',
+    '\uA75E': 'V',
+    '\u0245': 'V',
+    '\uA760': 'VY',
+    '\u24CC': 'W',
+    '\uFF37': 'W',
+    '\u1E80': 'W',
+    '\u1E82': 'W',
+    '\u0174': 'W',
+    '\u1E86': 'W',
+    '\u1E84': 'W',
+    '\u1E88': 'W',
+    '\u2C72': 'W',
+    '\u24CD': 'X',
+    '\uFF38': 'X',
+    '\u1E8A': 'X',
+    '\u1E8C': 'X',
+    '\u24CE': 'Y',
+    '\uFF39': 'Y',
+    '\u1EF2': 'Y',
+    '\u00DD': 'Y',
+    '\u0176': 'Y',
+    '\u1EF8': 'Y',
+    '\u0232': 'Y',
+    '\u1E8E': 'Y',
+    '\u0178': 'Y',
+    '\u1EF6': 'Y',
+    '\u1EF4': 'Y',
+    '\u01B3': 'Y',
+    '\u024E': 'Y',
+    '\u1EFE': 'Y',
+    '\u24CF': 'Z',
+    '\uFF3A': 'Z',
+    '\u0179': 'Z',
+    '\u1E90': 'Z',
+    '\u017B': 'Z',
+    '\u017D': 'Z',
+    '\u1E92': 'Z',
+    '\u1E94': 'Z',
+    '\u01B5': 'Z',
+    '\u0224': 'Z',
+    '\u2C7F': 'Z',
+    '\u2C6B': 'Z',
+    '\uA762': 'Z',
+    '\u24D0': 'a',
+    '\uFF41': 'a',
+    '\u1E9A': 'a',
+    '\u00E0': 'a',
+    '\u00E1': 'a',
+    '\u00E2': 'a',
+    '\u1EA7': 'a',
+    '\u1EA5': 'a',
+    '\u1EAB': 'a',
+    '\u1EA9': 'a',
+    '\u00E3': 'a',
+    '\u0101': 'a',
+    '\u0103': 'a',
+    '\u1EB1': 'a',
+    '\u1EAF': 'a',
+    '\u1EB5': 'a',
+    '\u1EB3': 'a',
+    '\u0227': 'a',
+    '\u01E1': 'a',
+    '\u00E4': 'a',
+    '\u01DF': 'a',
+    '\u1EA3': 'a',
+    '\u00E5': 'a',
+    '\u01FB': 'a',
+    '\u01CE': 'a',
+    '\u0201': 'a',
+    '\u0203': 'a',
+    '\u1EA1': 'a',
+    '\u1EAD': 'a',
+    '\u1EB7': 'a',
+    '\u1E01': 'a',
+    '\u0105': 'a',
+    '\u2C65': 'a',
+    '\u0250': 'a',
+    '\uA733': 'aa',
+    '\u00E6': 'ae',
+    '\u01FD': 'ae',
+    '\u01E3': 'ae',
+    '\uA735': 'ao',
+    '\uA737': 'au',
+    '\uA739': 'av',
+    '\uA73B': 'av',
+    '\uA73D': 'ay',
+    '\u24D1': 'b',
+    '\uFF42': 'b',
+    '\u1E03': 'b',
+    '\u1E05': 'b',
+    '\u1E07': 'b',
+    '\u0180': 'b',
+    '\u0183': 'b',
+    '\u0253': 'b',
+    '\u24D2': 'c',
+    '\uFF43': 'c',
+    '\u0107': 'c',
+    '\u0109': 'c',
+    '\u010B': 'c',
+    '\u010D': 'c',
+    '\u00E7': 'c',
+    '\u1E09': 'c',
+    '\u0188': 'c',
+    '\u023C': 'c',
+    '\uA73F': 'c',
+    '\u2184': 'c',
+    '\u24D3': 'd',
+    '\uFF44': 'd',
+    '\u1E0B': 'd',
+    '\u010F': 'd',
+    '\u1E0D': 'd',
+    '\u1E11': 'd',
+    '\u1E13': 'd',
+    '\u1E0F': 'd',
+    '\u0111': 'd',
+    '\u018C': 'd',
+    '\u0256': 'd',
+    '\u0257': 'd',
+    '\uA77A': 'd',
+    '\u01F3': 'dz',
+    '\u01C6': 'dz',
+    '\u24D4': 'e',
+    '\uFF45': 'e',
+    '\u00E8': 'e',
+    '\u00E9': 'e',
+    '\u00EA': 'e',
+    '\u1EC1': 'e',
+    '\u1EBF': 'e',
+    '\u1EC5': 'e',
+    '\u1EC3': 'e',
+    '\u1EBD': 'e',
+    '\u0113': 'e',
+    '\u1E15': 'e',
+    '\u1E17': 'e',
+    '\u0115': 'e',
+    '\u0117': 'e',
+    '\u00EB': 'e',
+    '\u1EBB': 'e',
+    '\u011B': 'e',
+    '\u0205': 'e',
+    '\u0207': 'e',
+    '\u1EB9': 'e',
+    '\u1EC7': 'e',
+    '\u0229': 'e',
+    '\u1E1D': 'e',
+    '\u0119': 'e',
+    '\u1E19': 'e',
+    '\u1E1B': 'e',
+    '\u0247': 'e',
+    '\u025B': 'e',
+    '\u01DD': 'e',
+    '\u24D5': 'f',
+    '\uFF46': 'f',
+    '\u1E1F': 'f',
+    '\u0192': 'f',
+    '\uA77C': 'f',
+    '\u24D6': 'g',
+    '\uFF47': 'g',
+    '\u01F5': 'g',
+    '\u011D': 'g',
+    '\u1E21': 'g',
+    '\u011F': 'g',
+    '\u0121': 'g',
+    '\u01E7': 'g',
+    '\u0123': 'g',
+    '\u01E5': 'g',
+    '\u0260': 'g',
+    '\uA7A1': 'g',
+    '\u1D79': 'g',
+    '\uA77F': 'g',
+    '\u24D7': 'h',
+    '\uFF48': 'h',
+    '\u0125': 'h',
+    '\u1E23': 'h',
+    '\u1E27': 'h',
+    '\u021F': 'h',
+    '\u1E25': 'h',
+    '\u1E29': 'h',
+    '\u1E2B': 'h',
+    '\u1E96': 'h',
+    '\u0127': 'h',
+    '\u2C68': 'h',
+    '\u2C76': 'h',
+    '\u0265': 'h',
+    '\u0195': 'hv',
+    '\u24D8': 'i',
+    '\uFF49': 'i',
+    '\u00EC': 'i',
+    '\u00ED': 'i',
+    '\u00EE': 'i',
+    '\u0129': 'i',
+    '\u012B': 'i',
+    '\u012D': 'i',
+    '\u00EF': 'i',
+    '\u1E2F': 'i',
+    '\u1EC9': 'i',
+    '\u01D0': 'i',
+    '\u0209': 'i',
+    '\u020B': 'i',
+    '\u1ECB': 'i',
+    '\u012F': 'i',
+    '\u1E2D': 'i',
+    '\u0268': 'i',
+    '\u0131': 'i',
+    '\u24D9': 'j',
+    '\uFF4A': 'j',
+    '\u0135': 'j',
+    '\u01F0': 'j',
+    '\u0249': 'j',
+    '\u24DA': 'k',
+    '\uFF4B': 'k',
+    '\u1E31': 'k',
+    '\u01E9': 'k',
+    '\u1E33': 'k',
+    '\u0137': 'k',
+    '\u1E35': 'k',
+    '\u0199': 'k',
+    '\u2C6A': 'k',
+    '\uA741': 'k',
+    '\uA743': 'k',
+    '\uA745': 'k',
+    '\uA7A3': 'k',
+    '\u24DB': 'l',
+    '\uFF4C': 'l',
+    '\u0140': 'l',
+    '\u013A': 'l',
+    '\u013E': 'l',
+    '\u1E37': 'l',
+    '\u1E39': 'l',
+    '\u013C': 'l',
+    '\u1E3D': 'l',
+    '\u1E3B': 'l',
+    '\u017F': 'l',
+    '\u0142': 'l',
+    '\u019A': 'l',
+    '\u026B': 'l',
+    '\u2C61': 'l',
+    '\uA749': 'l',
+    '\uA781': 'l',
+    '\uA747': 'l',
+    '\u01C9': 'lj',
+    '\u24DC': 'm',
+    '\uFF4D': 'm',
+    '\u1E3F': 'm',
+    '\u1E41': 'm',
+    '\u1E43': 'm',
+    '\u0271': 'm',
+    '\u026F': 'm',
+    '\u24DD': 'n',
+    '\uFF4E': 'n',
+    '\u01F9': 'n',
+    '\u0144': 'n',
+    '\u00F1': 'n',
+    '\u1E45': 'n',
+    '\u0148': 'n',
+    '\u1E47': 'n',
+    '\u0146': 'n',
+    '\u1E4B': 'n',
+    '\u1E49': 'n',
+    '\u019E': 'n',
+    '\u0272': 'n',
+    '\u0149': 'n',
+    '\uA791': 'n',
+    '\uA7A5': 'n',
+    '\u01CC': 'nj',
+    '\u24DE': 'o',
+    '\uFF4F': 'o',
+    '\u00F2': 'o',
+    '\u00F3': 'o',
+    '\u00F4': 'o',
+    '\u1ED3': 'o',
+    '\u1ED1': 'o',
+    '\u1ED7': 'o',
+    '\u1ED5': 'o',
+    '\u00F5': 'o',
+    '\u1E4D': 'o',
+    '\u022D': 'o',
+    '\u1E4F': 'o',
+    '\u014D': 'o',
+    '\u1E51': 'o',
+    '\u1E53': 'o',
+    '\u014F': 'o',
+    '\u022F': 'o',
+    '\u0231': 'o',
+    '\u00F6': 'o',
+    '\u022B': 'o',
+    '\u1ECF': 'o',
+    '\u0151': 'o',
+    '\u01D2': 'o',
+    '\u020D': 'o',
+    '\u020F': 'o',
+    '\u01A1': 'o',
+    '\u1EDD': 'o',
+    '\u1EDB': 'o',
+    '\u1EE1': 'o',
+    '\u1EDF': 'o',
+    '\u1EE3': 'o',
+    '\u1ECD': 'o',
+    '\u1ED9': 'o',
+    '\u01EB': 'o',
+    '\u01ED': 'o',
+    '\u00F8': 'o',
+    '\u01FF': 'o',
+    '\u0254': 'o',
+    '\uA74B': 'o',
+    '\uA74D': 'o',
+    '\u0275': 'o',
+    '\u0153': 'oe',
+    '\u01A3': 'oi',
+    '\u0223': 'ou',
+    '\uA74F': 'oo',
+    '\u24DF': 'p',
+    '\uFF50': 'p',
+    '\u1E55': 'p',
+    '\u1E57': 'p',
+    '\u01A5': 'p',
+    '\u1D7D': 'p',
+    '\uA751': 'p',
+    '\uA753': 'p',
+    '\uA755': 'p',
+    '\u24E0': 'q',
+    '\uFF51': 'q',
+    '\u024B': 'q',
+    '\uA757': 'q',
+    '\uA759': 'q',
+    '\u24E1': 'r',
+    '\uFF52': 'r',
+    '\u0155': 'r',
+    '\u1E59': 'r',
+    '\u0159': 'r',
+    '\u0211': 'r',
+    '\u0213': 'r',
+    '\u1E5B': 'r',
+    '\u1E5D': 'r',
+    '\u0157': 'r',
+    '\u1E5F': 'r',
+    '\u024D': 'r',
+    '\u027D': 'r',
+    '\uA75B': 'r',
+    '\uA7A7': 'r',
+    '\uA783': 'r',
+    '\u24E2': 's',
+    '\uFF53': 's',
+    '\u00DF': 's',
+    '\u015B': 's',
+    '\u1E65': 's',
+    '\u015D': 's',
+    '\u1E61': 's',
+    '\u0161': 's',
+    '\u1E67': 's',
+    '\u1E63': 's',
+    '\u1E69': 's',
+    '\u0219': 's',
+    '\u015F': 's',
+    '\u023F': 's',
+    '\uA7A9': 's',
+    '\uA785': 's',
+    '\u1E9B': 's',
+    '\u24E3': 't',
+    '\uFF54': 't',
+    '\u1E6B': 't',
+    '\u1E97': 't',
+    '\u0165': 't',
+    '\u1E6D': 't',
+    '\u021B': 't',
+    '\u0163': 't',
+    '\u1E71': 't',
+    '\u1E6F': 't',
+    '\u0167': 't',
+    '\u01AD': 't',
+    '\u0288': 't',
+    '\u2C66': 't',
+    '\uA787': 't',
+    '\uA729': 'tz',
+    '\u24E4': 'u',
+    '\uFF55': 'u',
+    '\u00F9': 'u',
+    '\u00FA': 'u',
+    '\u00FB': 'u',
+    '\u0169': 'u',
+    '\u1E79': 'u',
+    '\u016B': 'u',
+    '\u1E7B': 'u',
+    '\u016D': 'u',
+    '\u00FC': 'u',
+    '\u01DC': 'u',
+    '\u01D8': 'u',
+    '\u01D6': 'u',
+    '\u01DA': 'u',
+    '\u1EE7': 'u',
+    '\u016F': 'u',
+    '\u0171': 'u',
+    '\u01D4': 'u',
+    '\u0215': 'u',
+    '\u0217': 'u',
+    '\u01B0': 'u',
+    '\u1EEB': 'u',
+    '\u1EE9': 'u',
+    '\u1EEF': 'u',
+    '\u1EED': 'u',
+    '\u1EF1': 'u',
+    '\u1EE5': 'u',
+    '\u1E73': 'u',
+    '\u0173': 'u',
+    '\u1E77': 'u',
+    '\u1E75': 'u',
+    '\u0289': 'u',
+    '\u24E5': 'v',
+    '\uFF56': 'v',
+    '\u1E7D': 'v',
+    '\u1E7F': 'v',
+    '\u028B': 'v',
+    '\uA75F': 'v',
+    '\u028C': 'v',
+    '\uA761': 'vy',
+    '\u24E6': 'w',
+    '\uFF57': 'w',
+    '\u1E81': 'w',
+    '\u1E83': 'w',
+    '\u0175': 'w',
+    '\u1E87': 'w',
+    '\u1E85': 'w',
+    '\u1E98': 'w',
+    '\u1E89': 'w',
+    '\u2C73': 'w',
+    '\u24E7': 'x',
+    '\uFF58': 'x',
+    '\u1E8B': 'x',
+    '\u1E8D': 'x',
+    '\u24E8': 'y',
+    '\uFF59': 'y',
+    '\u1EF3': 'y',
+    '\u00FD': 'y',
+    '\u0177': 'y',
+    '\u1EF9': 'y',
+    '\u0233': 'y',
+    '\u1E8F': 'y',
+    '\u00FF': 'y',
+    '\u1EF7': 'y',
+    '\u1E99': 'y',
+    '\u1EF5': 'y',
+    '\u01B4': 'y',
+    '\u024F': 'y',
+    '\u1EFF': 'y',
+    '\u24E9': 'z',
+    '\uFF5A': 'z',
+    '\u017A': 'z',
+    '\u1E91': 'z',
+    '\u017C': 'z',
+    '\u017E': 'z',
+    '\u1E93': 'z',
+    '\u1E95': 'z',
+    '\u01B6': 'z',
+    '\u0225': 'z',
+    '\u0240': 'z',
+    '\u2C6C': 'z',
+    '\uA763': 'z',
+    '\u0386': '\u0391',
+    '\u0388': '\u0395',
+    '\u0389': '\u0397',
+    '\u038A': '\u0399',
+    '\u03AA': '\u0399',
+    '\u038C': '\u039F',
+    '\u038E': '\u03A5',
+    '\u03AB': '\u03A5',
+    '\u038F': '\u03A9',
+    '\u03AC': '\u03B1',
+    '\u03AD': '\u03B5',
+    '\u03AE': '\u03B7',
+    '\u03AF': '\u03B9',
+    '\u03CA': '\u03B9',
+    '\u0390': '\u03B9',
+    '\u03CC': '\u03BF',
+    '\u03CD': '\u03C5',
+    '\u03CB': '\u03C5',
+    '\u03B0': '\u03C5',
+    '\u03CE': '\u03C9',
+    '\u03C2': '\u03C3',
+    '\u2019': '\''
+  };
+
+  return diacritics;
+});
+
+S2.define('select2/data/base',[
+  '../utils'
+], function (Utils) {
+  function BaseAdapter ($element, options) {
+    BaseAdapter.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(BaseAdapter, Utils.Observable);
+
+  BaseAdapter.prototype.current = function (callback) {
+    throw new Error('The `current` method must be defined in child classes.');
+  };
+
+  BaseAdapter.prototype.query = function (params, callback) {
+    throw new Error('The `query` method must be defined in child classes.');
+  };
+
+  BaseAdapter.prototype.bind = function (container, $container) {
+    // Can be implemented in subclasses
+  };
+
+  BaseAdapter.prototype.destroy = function () {
+    // Can be implemented in subclasses
+  };
+
+  BaseAdapter.prototype.generateResultId = function (container, data) {
+    var id = container.id + '-result-';
+
+    id += Utils.generateChars(4);
+
+    if (data.id != null) {
+      id += '-' + data.id.toString();
+    } else {
+      id += '-' + Utils.generateChars(4);
+    }
+    return id;
+  };
+
+  return BaseAdapter;
+});
+
+S2.define('select2/data/select',[
+  './base',
+  '../utils',
+  'jquery'
+], function (BaseAdapter, Utils, $) {
+  function SelectAdapter ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    SelectAdapter.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(SelectAdapter, BaseAdapter);
+
+  SelectAdapter.prototype.current = function (callback) {
+    var data = [];
+    var self = this;
+
+    this.$element.find(':selected').each(function () {
+      var $option = $(this);
+
+      var option = self.item($option);
+
+      data.push(option);
+    });
+
+    callback(data);
+  };
+
+  SelectAdapter.prototype.select = function (data) {
+    var self = this;
+
+    data.selected = true;
+
+    // If data.element is a DOM node, use it instead
+    if ($(data.element).is('option')) {
+      data.element.selected = true;
+
+      this.$element.trigger('change');
+
+      return;
+    }
+
+    if (this.$element.prop('multiple')) {
+      this.current(function (currentData) {
+        var val = [];
+
+        data = [data];
+        data.push.apply(data, currentData);
+
+        for (var d = 0; d < data.length; d++) {
+          var id = data[d].id;
+
+          if ($.inArray(id, val) === -1) {
+            val.push(id);
+          }
+        }
+
+        self.$element.val(val);
+        self.$element.trigger('change');
+      });
+    } else {
+      var val = data.id;
+
+      this.$element.val(val);
+      this.$element.trigger('change');
+    }
+  };
+
+  SelectAdapter.prototype.unselect = function (data) {
+    var self = this;
+
+    if (!this.$element.prop('multiple')) {
+      return;
+    }
+
+    data.selected = false;
+
+    if ($(data.element).is('option')) {
+      data.element.selected = false;
+
+      this.$element.trigger('change');
+
+      return;
+    }
+
+    this.current(function (currentData) {
+      var val = [];
+
+      for (var d = 0; d < currentData.length; d++) {
+        var id = currentData[d].id;
+
+        if (id !== data.id && $.inArray(id, val) === -1) {
+          val.push(id);
+        }
+      }
+
+      self.$element.val(val);
+
+      self.$element.trigger('change');
+    });
+  };
+
+  SelectAdapter.prototype.bind = function (container, $container) {
+    var self = this;
+
+    this.container = container;
+
+    container.on('select', function (params) {
+      self.select(params.data);
+    });
+
+    container.on('unselect', function (params) {
+      self.unselect(params.data);
+    });
+  };
+
+  SelectAdapter.prototype.destroy = function () {
+    // Remove anything added to child elements
+    this.$element.find('*').each(function () {
+      // Remove any custom data set by Select2
+      Utils.RemoveData(this);
+    });
+  };
+
+  SelectAdapter.prototype.query = function (params, callback) {
+    var data = [];
+    var self = this;
+
+    var $options = this.$element.children();
+
+    $options.each(function () {
+      var $option = $(this);
+
+      if (!$option.is('option') && !$option.is('optgroup')) {
+        return;
+      }
+
+      var option = self.item($option);
+
+      var matches = self.matches(params, option);
+
+      if (matches !== null) {
+        data.push(matches);
+      }
+    });
+
+    callback({
+      results: data
+    });
+  };
+
+  SelectAdapter.prototype.addOptions = function ($options) {
+    Utils.appendMany(this.$element, $options);
+  };
+
+  SelectAdapter.prototype.option = function (data) {
+    var option;
+
+    if (data.children) {
+      option = document.createElement('optgroup');
+      option.label = data.text;
+    } else {
+      option = document.createElement('option');
+
+      if (option.textContent !== undefined) {
+        option.textContent = data.text;
+      } else {
+        option.innerText = data.text;
+      }
+    }
+
+    if (data.id !== undefined) {
+      option.value = data.id;
+    }
+
+    if (data.disabled) {
+      option.disabled = true;
+    }
+
+    if (data.selected) {
+      option.selected = true;
+    }
+
+    if (data.title) {
+      option.title = data.title;
+    }
+
+    var $option = $(option);
+
+    var normalizedData = this._normalizeItem(data);
+    normalizedData.element = option;
+
+    // Override the option's data with the combined data
+    Utils.StoreData(option, 'data', normalizedData);
+
+    return $option;
+  };
+
+  SelectAdapter.prototype.item = function ($option) {
+    var data = {};
+
+    data = Utils.GetData($option[0], 'data');
+
+    if (data != null) {
+      return data;
+    }
+
+    if ($option.is('option')) {
+      data = {
+        id: $option.val(),
+        text: $option.text(),
+        disabled: $option.prop('disabled'),
+        selected: $option.prop('selected'),
+        title: $option.prop('title')
+      };
+    } else if ($option.is('optgroup')) {
+      data = {
+        text: $option.prop('label'),
+        children: [],
+        title: $option.prop('title')
+      };
+
+      var $children = $option.children('option');
+      var children = [];
+
+      for (var c = 0; c < $children.length; c++) {
+        var $child = $($children[c]);
+
+        var child = this.item($child);
+
+        children.push(child);
+      }
+
+      data.children = children;
+    }
+
+    data = this._normalizeItem(data);
+    data.element = $option[0];
+
+    Utils.StoreData($option[0], 'data', data);
+
+    return data;
+  };
+
+  SelectAdapter.prototype._normalizeItem = function (item) {
+    if (item !== Object(item)) {
+      item = {
+        id: item,
+        text: item
+      };
+    }
+
+    item = $.extend({}, {
+      text: ''
+    }, item);
+
+    var defaults = {
+      selected: false,
+      disabled: false
+    };
+
+    if (item.id != null) {
+      item.id = item.id.toString();
+    }
+
+    if (item.text != null) {
+      item.text = item.text.toString();
+    }
+
+    if (item._resultId == null && item.id && this.container != null) {
+      item._resultId = this.generateResultId(this.container, item);
+    }
+
+    return $.extend({}, defaults, item);
+  };
+
+  SelectAdapter.prototype.matches = function (params, data) {
+    var matcher = this.options.get('matcher');
+
+    return matcher(params, data);
+  };
+
+  return SelectAdapter;
+});
+
+S2.define('select2/data/array',[
+  './select',
+  '../utils',
+  'jquery'
+], function (SelectAdapter, Utils, $) {
+  function ArrayAdapter ($element, options) {
+    var data = options.get('data') || [];
+
+    ArrayAdapter.__super__.constructor.call(this, $element, options);
+
+    this.addOptions(this.convertToOptions(data));
+  }
+
+  Utils.Extend(ArrayAdapter, SelectAdapter);
+
+  ArrayAdapter.prototype.select = function (data) {
+    var $option = this.$element.find('option').filter(function (i, elm) {
+      return elm.value == data.id.toString();
+    });
+
+    if ($option.length === 0) {
+      $option = this.option(data);
+
+      this.addOptions($option);
+    }
+
+    ArrayAdapter.__super__.select.call(this, data);
+  };
+
+  ArrayAdapter.prototype.convertToOptions = function (data) {
+    var self = this;
+
+    var $existing = this.$element.find('option');
+    var existingIds = $existing.map(function () {
+      return self.item($(this)).id;
+    }).get();
+
+    var $options = [];
+
+    // Filter out all items except for the one passed in the argument
+    function onlyItem (item) {
+      return function () {
+        return $(this).val() == item.id;
+      };
+    }
+
+    for (var d = 0; d < data.length; d++) {
+      var item = this._normalizeItem(data[d]);
+
+      // Skip items which were pre-loaded, only merge the data
+      if ($.inArray(item.id, existingIds) >= 0) {
+        var $existingOption = $existing.filter(onlyItem(item));
+
+        var existingData = this.item($existingOption);
+        var newData = $.extend(true, {}, item, existingData);
+
+        var $newOption = this.option(newData);
+
+        $existingOption.replaceWith($newOption);
+
+        continue;
+      }
+
+      var $option = this.option(item);
+
+      if (item.children) {
+        var $children = this.convertToOptions(item.children);
+
+        Utils.appendMany($option, $children);
+      }
+
+      $options.push($option);
+    }
+
+    return $options;
+  };
+
+  return ArrayAdapter;
+});
+
+S2.define('select2/data/ajax',[
+  './array',
+  '../utils',
+  'jquery'
+], function (ArrayAdapter, Utils, $) {
+  function AjaxAdapter ($element, options) {
+    this.ajaxOptions = this._applyDefaults(options.get('ajax'));
+
+    if (this.ajaxOptions.processResults != null) {
+      this.processResults = this.ajaxOptions.processResults;
+    }
+
+    AjaxAdapter.__super__.constructor.call(this, $element, options);
+  }
+
+  Utils.Extend(AjaxAdapter, ArrayAdapter);
+
+  AjaxAdapter.prototype._applyDefaults = function (options) {
+    var defaults = {
+      data: function (params) {
+        return $.extend({}, params, {
+          q: params.term
+        });
+      },
+      transport: function (params, success, failure) {
+        var $request = $.ajax(params);
+
+        $request.then(success);
+        $request.fail(failure);
+
+        return $request;
+      }
+    };
+
+    return $.extend({}, defaults, options, true);
+  };
+
+  AjaxAdapter.prototype.processResults = function (results) {
+    return results;
+  };
+
+  AjaxAdapter.prototype.query = function (params, callback) {
+    var matches = [];
+    var self = this;
+
+    if (this._request != null) {
+      // JSONP requests cannot always be aborted
+      if ($.isFunction(this._request.abort)) {
+        this._request.abort();
+      }
+
+      this._request = null;
+    }
+
+    var options = $.extend({
+      type: 'GET'
+    }, this.ajaxOptions);
+
+    if (typeof options.url === 'function') {
+      options.url = options.url.call(this.$element, params);
+    }
+
+    if (typeof options.data === 'function') {
+      options.data = options.data.call(this.$element, params);
+    }
+
+    function request () {
+      var $request = options.transport(options, function (data) {
+        var results = self.processResults(data, params);
+
+        if (self.options.get('debug') && window.console && console.error) {
+          // Check to make sure that the response included a `results` key.
+          if (!results || !results.results || !$.isArray(results.results)) {
+            console.error(
+              'Select2: The AJAX results did not return an array in the ' +
+              '`results` key of the response.'
+            );
+          }
+        }
+
+        callback(results);
+      }, function () {
+        // Attempt to detect if a request was aborted
+        // Only works if the transport exposes a status property
+        if ('status' in $request &&
+            ($request.status === 0 || $request.status === '0')) {
+          return;
+        }
+
+        self.trigger('results:message', {
+          message: 'errorLoading'
+        });
+      });
+
+      self._request = $request;
+    }
+
+    if (this.ajaxOptions.delay && params.term != null) {
+      if (this._queryTimeout) {
+        window.clearTimeout(this._queryTimeout);
+      }
+
+      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
+    } else {
+      request();
+    }
+  };
+
+  return AjaxAdapter;
+});
+
+S2.define('select2/data/tags',[
+  'jquery'
+], function ($) {
+  function Tags (decorated, $element, options) {
+    var tags = options.get('tags');
+
+    var createTag = options.get('createTag');
+
+    if (createTag !== undefined) {
+      this.createTag = createTag;
+    }
+
+    var insertTag = options.get('insertTag');
+
+    if (insertTag !== undefined) {
+        this.insertTag = insertTag;
+    }
+
+    decorated.call(this, $element, options);
+
+    if ($.isArray(tags)) {
+      for (var t = 0; t < tags.length; t++) {
+        var tag = tags[t];
+        var item = this._normalizeItem(tag);
+
+        var $option = this.option(item);
+
+        this.$element.append($option);
+      }
+    }
+  }
+
+  Tags.prototype.query = function (decorated, params, callback) {
+    var self = this;
+
+    this._removeOldTags();
+
+    if (params.term == null || params.page != null) {
+      decorated.call(this, params, callback);
+      return;
+    }
+
+    function wrapper (obj, child) {
+      var data = obj.results;
+
+      for (var i = 0; i < data.length; i++) {
+        var option = data[i];
+
+        var checkChildren = (
+          option.children != null &&
+          !wrapper({
+            results: option.children
+          }, true)
+        );
+
+        var optionText = (option.text || '').toUpperCase();
+        var paramsTerm = (params.term || '').toUpperCase();
+
+        var checkText = optionText === paramsTerm;
+
+        if (checkText || checkChildren) {
+          if (child) {
+            return false;
+          }
+
+          obj.data = data;
+          callback(obj);
+
+          return;
+        }
+      }
+
+      if (child) {
+        return true;
+      }
+
+      var tag = self.createTag(params);
+
+      if (tag != null) {
+        var $option = self.option(tag);
+        $option.attr('data-select2-tag', true);
+
+        self.addOptions([$option]);
+
+        self.insertTag(data, tag);
+      }
+
+      obj.results = data;
+
+      callback(obj);
+    }
+
+    decorated.call(this, params, wrapper);
+  };
+
+  Tags.prototype.createTag = function (decorated, params) {
+    var term = $.trim(params.term);
+
+    if (term === '') {
+      return null;
+    }
+
+    return {
+      id: term,
+      text: term
+    };
+  };
+
+  Tags.prototype.insertTag = function (_, data, tag) {
+    data.unshift(tag);
+  };
+
+  Tags.prototype._removeOldTags = function (_) {
+    var tag = this._lastTag;
+
+    var $options = this.$element.find('option[data-select2-tag]');
+
+    $options.each(function () {
+      if (this.selected) {
+        return;
+      }
+
+      $(this).remove();
+    });
+  };
+
+  return Tags;
+});
+
+S2.define('select2/data/tokenizer',[
+  'jquery'
+], function ($) {
+  function Tokenizer (decorated, $element, options) {
+    var tokenizer = options.get('tokenizer');
+
+    if (tokenizer !== undefined) {
+      this.tokenizer = tokenizer;
+    }
+
+    decorated.call(this, $element, options);
+  }
+
+  Tokenizer.prototype.bind = function (decorated, container, $container) {
+    decorated.call(this, container, $container);
+
+    this.$search =  container.dropdown.$search || container.selection.$search ||
+      $container.find('.select2-search__field');
+  };
+
+  Tokenizer.prototype.query = function (decorated, params, callback) {
+    var self = this;
+
+    function createAndSelect (data) {
+      // Normalize the data object so we can use it for checks
+      var item = self._normalizeItem(data);
+
+      // Check if the data object already exists as a tag
+      // Select it if it doesn't
+      var $existingOptions = self.$element.find('option').filter(function () {
+        return $(this).val() === item.id;
+      });
+
+      // If an existing option wasn't found for it, create the option
+      if (!$existingOptions.length) {
+        var $option = self.option(item);
+        $option.attr('data-select2-tag', true);
+
+        self._removeOldTags();
+        self.addOptions([$option]);
+      }
+
+      // Select the item, now that we know there is an option for it
+      select(item);
+    }
+
+    function select (data) {
+      self.trigger('select', {
+        data: data
+      });
+    }
+
+    params.term = params.term || '';
+
+    var tokenData = this.tokenizer(params, this.options, createAndSelect);
+
+    if (tokenData.term !== params.term) {
+      // Replace the search term if we have the search box
+      if (this.$search.length) {
+        this.$search.val(tokenData.term);
+        this.$search.trigger('focus');
+      }
+
+      params.term = tokenData.term;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
+    var separators = options.get('tokenSeparators') || [];
+    var term = params.term;
+    var i = 0;
+
+    var createTag = this.createTag || function (params) {
+      return {
+        id: params.term,
+        text: params.term
+      };
+    };
+
+    while (i < term.length) {
+      var termChar = term[i];
+
+      if ($.inArray(termChar, separators) === -1) {
+        i++;
+
+        continue;
+      }
+
+      var part = term.substr(0, i);
+      var partParams = $.extend({}, params, {
+        term: part
+      });
+
+      var data = createTag(partParams);
+
+      if (data == null) {
+        i++;
+        continue;
+      }
+
+      callback(data);
+
+      // Reset the term to not include the tokenized portion
+      term = term.substr(i + 1) || '';
+      i = 0;
+    }
+
+    return {
+      term: term
+    };
+  };
+
+  return Tokenizer;
+});
+
+S2.define('select2/data/minimumInputLength',[
+
+], function () {
+  function MinimumInputLength (decorated, $e, options) {
+    this.minimumInputLength = options.get('minimumInputLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MinimumInputLength.prototype.query = function (decorated, params, callback) {
+    params.term = params.term || '';
+
+    if (params.term.length < this.minimumInputLength) {
+      this.trigger('results:message', {
+        message: 'inputTooShort',
+        args: {
+          minimum: this.minimumInputLength,
+          input: params.term,
+          params: params
+        }
+      });
+
+      return;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  return MinimumInputLength;
+});
+
+S2.define('select2/data/maximumInputLength',[
+
+], function () {
+  function MaximumInputLength (decorated, $e, options) {
+    this.maximumInputLength = options.get('maximumInputLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MaximumInputLength.prototype.query = function (decorated, params, callback) {
+    params.term = params.term || '';
+
+    if (this.maximumInputLength > 0 &&
+        params.term.length > this.maximumInputLength) {
+      this.trigger('results:message', {
+        message: 'inputTooLong',
+        args: {
+          maximum: this.maximumInputLength,
+          input: params.term,
+          params: params
+        }
+      });
+
+      return;
+    }
+
+    decorated.call(this, params, callback);
+  };
+
+  return MaximumInputLength;
+});
+
+S2.define('select2/data/maximumSelectionLength',[
+
+], function (){
+  function MaximumSelectionLength (decorated, $e, options) {
+    this.maximumSelectionLength = options.get('maximumSelectionLength');
+
+    decorated.call(this, $e, options);
+  }
+
+  MaximumSelectionLength.prototype.query =
+    function (decorated, params, callback) {
+      var self = this;
+
+      this.current(function (currentData) {
+        var count = currentData != null ? currentData.length : 0;
+        if (self.maximumSelectionLength > 0 &&
+          count >= self.maximumSelectionLength) {
+          self.trigger('results:message', {
+            message: 'maximumSelected',
+            args: {
+              maximum: self.maximumSelectionLength
+            }
+          });
+          return;
+        }
+        decorated.call(self, params, callback);
+      });
+  };
+
+  return MaximumSelectionLength;
+});
+
+S2.define('select2/dropdown',[
+  'jquery',
+  './utils'
+], function ($, Utils) {
+  function Dropdown ($element, options) {
+    this.$element = $element;
+    this.options = options;
+
+    Dropdown.__super__.constructor.call(this);
+  }
+
+  Utils.Extend(Dropdown, Utils.Observable);
+
+  Dropdown.prototype.render = function () {
+    var $dropdown = $(
+      '<span class="select2-dropdown">' +
+        '<span class="select2-results"></span>' +
+      '</span>'
+    );
+
+    $dropdown.attr('dir', this.options.get('dir'));
+
+    this.$dropdown = $dropdown;
+
+    return $dropdown;
+  };
+
+  Dropdown.prototype.bind = function () {
+    // Should be implemented in subclasses
+  };
+
+  Dropdown.prototype.position = function ($dropdown, $container) {
+    // Should be implemented in subclasses
+  };
+
+  Dropdown.prototype.destroy = function () {
+    // Remove the dropdown from the DOM
+    this.$dropdown.remove();
+  };
+
+  return Dropdown;
+});
+
+S2.define('select2/dropdown/search',[
+  'jquery',
+  '../utils'
+], function ($, Utils) {
+  function Search () { }
+
+  Search.prototype.render = function (decorated) {
+    var $rendered = decorated.call(this);
+
+    var $search = $(
+      '<span class="select2-search select2-search--dropdown">' +
+        '<input class="select2-search__field" type="search" tabindex="-1"' +
+        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
+        ' spellcheck="false" role="textbox" />' +
+      '</span>'
+    );
+
+    this.$searchContainer = $search;
+    this.$search = $search.find('input');
+
+    $rendered.prepend($search);
+
+    return $rendered;
+  };
+
+  Search.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    this.$search.on('keydown', function (evt) {
+      self.trigger('keypress', evt);
+
+      self._keyUpPrevented = evt.isDefaultPrevented();
+    });
+
+    // Workaround for browsers which do not support the `input` event
+    // This will prevent double-triggering of events for browsers which support
+    // both the `keyup` and `input` events.
+    this.$search.on('input', function (evt) {
+      // Unbind the duplicated `keyup` event
+      $(this).off('keyup');
+    });
+
+    this.$search.on('keyup input', function (evt) {
+      self.handleSearch(evt);
+    });
+
+    container.on('open', function () {
+      self.$search.attr('tabindex', 0);
+
+      self.$search.trigger('focus');
+
+      window.setTimeout(function () {
+        self.$search.trigger('focus');
+      }, 0);
+    });
+
+    container.on('close', function () {
+      self.$search.attr('tabindex', -1);
+
+      self.$search.val('');
+      self.$search.trigger('blur');
+    });
+
+    container.on('focus', function () {
+      if (!container.isOpen()) {
+        self.$search.trigger('focus');
+      }
+    });
+
+    container.on('results:all', function (params) {
+      if (params.query.term == null || params.query.term === '') {
+        var showSearch = self.showSearch(params);
+
+        if (showSearch) {
+          self.$searchContainer.removeClass('select2-search--hide');
+        } else {
+          self.$searchContainer.addClass('select2-search--hide');
+        }
+      }
+    });
+  };
+
+  Search.prototype.handleSearch = function (evt) {
+    if (!this._keyUpPrevented) {
+      var input = this.$search.val();
+
+      this.trigger('query', {
+        term: input
+      });
+    }
+
+    this._keyUpPrevented = false;
+  };
+
+  Search.prototype.showSearch = function (_, params) {
+    return true;
+  };
+
+  return Search;
+});
+
+S2.define('select2/dropdown/hidePlaceholder',[
+
+], function () {
+  function HidePlaceholder (decorated, $element, options, dataAdapter) {
+    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
+
+    decorated.call(this, $element, options, dataAdapter);
+  }
+
+  HidePlaceholder.prototype.append = function (decorated, data) {
+    data.results = this.removePlaceholder(data.results);
+
+    decorated.call(this, data);
+  };
+
+  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
+    if (typeof placeholder === 'string') {
+      placeholder = {
+        id: '',
+        text: placeholder
+      };
+    }
+
+    return placeholder;
+  };
+
+  HidePlaceholder.prototype.removePlaceholder = function (_, data) {
+    var modifiedData = data.slice(0);
+
+    for (var d = data.length - 1; d >= 0; d--) {
+      var item = data[d];
+
+      if (this.placeholder.id === item.id) {
+        modifiedData.splice(d, 1);
+      }
+    }
+
+    return modifiedData;
+  };
+
+  return HidePlaceholder;
+});
+
+S2.define('select2/dropdown/infiniteScroll',[
+  'jquery'
+], function ($) {
+  function InfiniteScroll (decorated, $element, options, dataAdapter) {
+    this.lastParams = {};
+
+    decorated.call(this, $element, options, dataAdapter);
+
+    this.$loadingMore = this.createLoadingMore();
+    this.loading = false;
+  }
+
+  InfiniteScroll.prototype.append = function (decorated, data) {
+    this.$loadingMore.remove();
+    this.loading = false;
+
+    decorated.call(this, data);
+
+    if (this.showLoadingMore(data)) {
+      this.$results.append(this.$loadingMore);
+      this.loadMoreIfNeeded();
+    }
+  };
+
+  InfiniteScroll.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('query', function (params) {
+      self.lastParams = params;
+      self.loading = true;
+    });
+
+    container.on('query:append', function (params) {
+      self.lastParams = params;
+      self.loading = true;
+    });
+
+    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
+  };
+
+  InfiniteScroll.prototype.loadMoreIfNeeded = function () {
+    var isLoadMoreVisible = $.contains(
+      document.documentElement,
+      this.$loadingMore[0]
+    );
+
+    if (this.loading || !isLoadMoreVisible) {
+      return;
+    }
+
+    var currentOffset = this.$results.offset().top +
+      this.$results.outerHeight(false);
+    var loadingMoreOffset = this.$loadingMore.offset().top +
+      this.$loadingMore.outerHeight(false);
+
+    if (currentOffset + 50 >= loadingMoreOffset) {
+      this.loadMore();
+    }
+  };
+
+  InfiniteScroll.prototype.loadMore = function () {
+    this.loading = true;
+
+    var params = $.extend({}, {page: 1}, this.lastParams);
+
+    params.page++;
+
+    this.trigger('query:append', params);
+  };
+
+  InfiniteScroll.prototype.showLoadingMore = function (_, data) {
+    return data.pagination && data.pagination.more;
+  };
+
+  InfiniteScroll.prototype.createLoadingMore = function () {
+    var $option = $(
+      '<li ' +
+      'class="select2-results__option select2-results__option--load-more"' +
+      'role="treeitem" aria-disabled="true"></li>'
+    );
+
+    var message = this.options.get('translations').get('loadingMore');
+
+    $option.html(message(this.lastParams));
+
+    return $option;
+  };
+
+  return InfiniteScroll;
+});
+
+S2.define('select2/dropdown/attachBody',[
+  'jquery',
+  '../utils'
+], function ($, Utils) {
+  function AttachBody (decorated, $element, options) {
+    this.$dropdownParent = options.get('dropdownParent') || $(document.body);
+
+    decorated.call(this, $element, options);
+  }
+
+  AttachBody.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    var setupResultsEvents = false;
+
+    decorated.call(this, container, $container);
+
+    container.on('open', function () {
+      self._showDropdown();
+      self._attachPositioningHandler(container);
+
+      if (!setupResultsEvents) {
+        setupResultsEvents = true;
+
+        container.on('results:all', function () {
+          self._positionDropdown();
+          self._resizeDropdown();
+        });
+
+        container.on('results:append', function () {
+          self._positionDropdown();
+          self._resizeDropdown();
+        });
+      }
+    });
+
+    container.on('close', function () {
+      self._hideDropdown();
+      self._detachPositioningHandler(container);
+    });
+
+    this.$dropdownContainer.on('mousedown', function (evt) {
+      evt.stopPropagation();
+    });
+  };
+
+  AttachBody.prototype.destroy = function (decorated) {
+    decorated.call(this);
+
+    this.$dropdownContainer.remove();
+  };
+
+  AttachBody.prototype.position = function (decorated, $dropdown, $container) {
+    // Clone all of the container classes
+    $dropdown.attr('class', $container.attr('class'));
+
+    $dropdown.removeClass('select2');
+    $dropdown.addClass('select2-container--open');
+
+    $dropdown.css({
+      position: 'absolute',
+      top: -999999
+    });
+
+    this.$container = $container;
+  };
+
+  AttachBody.prototype.render = function (decorated) {
+    var $container = $('<span></span>');
+
+    var $dropdown = decorated.call(this);
+    $container.append($dropdown);
+
+    this.$dropdownContainer = $container;
+
+    return $container;
+  };
+
+  AttachBody.prototype._hideDropdown = function (decorated) {
+    this.$dropdownContainer.detach();
+  };
+
+  AttachBody.prototype._attachPositioningHandler =
+      function (decorated, container) {
+    var self = this;
+
+    var scrollEvent = 'scroll.select2.' + container.id;
+    var resizeEvent = 'resize.select2.' + container.id;
+    var orientationEvent = 'orientationchange.select2.' + container.id;
+
+    var $watchers = this.$container.parents().filter(Utils.hasScroll);
+    $watchers.each(function () {
+      Utils.StoreData(this, 'select2-scroll-position', {
+        x: $(this).scrollLeft(),
+        y: $(this).scrollTop()
+      });
+    });
+
+    $watchers.on(scrollEvent, function (ev) {
+      var position = Utils.GetData(this, 'select2-scroll-position');
+      $(this).scrollTop(position.y);
+    });
+
+    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
+      function (e) {
+      self._positionDropdown();
+      self._resizeDropdown();
+    });
+  };
+
+  AttachBody.prototype._detachPositioningHandler =
+      function (decorated, container) {
+    var scrollEvent = 'scroll.select2.' + container.id;
+    var resizeEvent = 'resize.select2.' + container.id;
+    var orientationEvent = 'orientationchange.select2.' + container.id;
+
+    var $watchers = this.$container.parents().filter(Utils.hasScroll);
+    $watchers.off(scrollEvent);
+
+    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
+  };
+
+  AttachBody.prototype._positionDropdown = function () {
+    var $window = $(window);
+
+    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
+    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
+
+    var newDirection = null;
+
+    var offset = this.$container.offset();
+
+    offset.bottom = offset.top + this.$container.outerHeight(false);
+
+    var container = {
+      height: this.$container.outerHeight(false)
+    };
+
+    container.top = offset.top;
+    container.bottom = offset.top + container.height;
+
+    var dropdown = {
+      height: this.$dropdown.outerHeight(false)
+    };
+
+    var viewport = {
+      top: $window.scrollTop(),
+      bottom: $window.scrollTop() + $window.height()
+    };
+
+    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
+    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
+
+    var css = {
+      left: offset.left,
+      top: container.bottom
+    };
+
+    // Determine what the parent element is to use for calculating the offset
+    var $offsetParent = this.$dropdownParent;
+
+    // For statically positioned elements, we need to get the element
+    // that is determining the offset
+    if ($offsetParent.css('position') === 'static') {
+      $offsetParent = $offsetParent.offsetParent();
+    }
+
+    var parentOffset = $offsetParent.offset();
+
+    css.top -= parentOffset.top;
+    css.left -= parentOffset.left;
+
+    if (!isCurrentlyAbove && !isCurrentlyBelow) {
+      newDirection = 'below';
+    }
+
+    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
+      newDirection = 'above';
+    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
+      newDirection = 'below';
+    }
+
+    if (newDirection == 'above' ||
+      (isCurrentlyAbove && newDirection !== 'below')) {
+      css.top = container.top - parentOffset.top - dropdown.height;
+    }
+
+    if (newDirection != null) {
+      this.$dropdown
+        .removeClass('select2-dropdown--below select2-dropdown--above')
+        .addClass('select2-dropdown--' + newDirection);
+      this.$container
+        .removeClass('select2-container--below select2-container--above')
+        .addClass('select2-container--' + newDirection);
+    }
+
+    this.$dropdownContainer.css(css);
+  };
+
+  AttachBody.prototype._resizeDropdown = function () {
+    var css = {
+      width: this.$container.outerWidth(false) + 'px'
+    };
+
+    if (this.options.get('dropdownAutoWidth')) {
+      css.minWidth = css.width;
+      css.position = 'relative';
+      css.width = 'auto';
+    }
+
+    this.$dropdown.css(css);
+  };
+
+  AttachBody.prototype._showDropdown = function (decorated) {
+    this.$dropdownContainer.appendTo(this.$dropdownParent);
+
+    this._positionDropdown();
+    this._resizeDropdown();
+  };
+
+  return AttachBody;
+});
+
+S2.define('select2/dropdown/minimumResultsForSearch',[
+
+], function () {
+  function countResults (data) {
+    var count = 0;
+
+    for (var d = 0; d < data.length; d++) {
+      var item = data[d];
+
+      if (item.children) {
+        count += countResults(item.children);
+      } else {
+        count++;
+      }
+    }
+
+    return count;
+  }
+
+  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
+    this.minimumResultsForSearch = options.get('minimumResultsForSearch');
+
+    if (this.minimumResultsForSearch < 0) {
+      this.minimumResultsForSearch = Infinity;
+    }
+
+    decorated.call(this, $element, options, dataAdapter);
+  }
+
+  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
+    if (countResults(params.data.results) < this.minimumResultsForSearch) {
+      return false;
+    }
+
+    return decorated.call(this, params);
+  };
+
+  return MinimumResultsForSearch;
+});
+
+S2.define('select2/dropdown/selectOnClose',[
+  '../utils'
+], function (Utils) {
+  function SelectOnClose () { }
+
+  SelectOnClose.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('close', function (params) {
+      self._handleSelectOnClose(params);
+    });
+  };
+
+  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
+    if (params && params.originalSelect2Event != null) {
+      var event = params.originalSelect2Event;
+
+      // Don't select an item if the close event was triggered from a select or
+      // unselect event
+      if (event._type === 'select' || event._type === 'unselect') {
+        return;
+      }
+    }
+
+    var $highlightedResults = this.getHighlightedResults();
+
+    // Only select highlighted results
+    if ($highlightedResults.length < 1) {
+      return;
+    }
+
+    var data = Utils.GetData($highlightedResults[0], 'data');
+
+    // Don't re-select already selected resulte
+    if (
+      (data.element != null && data.element.selected) ||
+      (data.element == null && data.selected)
+    ) {
+      return;
+    }
+
+    this.trigger('select', {
+        data: data
+    });
+  };
+
+  return SelectOnClose;
+});
+
+S2.define('select2/dropdown/closeOnSelect',[
+
+], function () {
+  function CloseOnSelect () { }
+
+  CloseOnSelect.prototype.bind = function (decorated, container, $container) {
+    var self = this;
+
+    decorated.call(this, container, $container);
+
+    container.on('select', function (evt) {
+      self._selectTriggered(evt);
+    });
+
+    container.on('unselect', function (evt) {
+      self._selectTriggered(evt);
+    });
+  };
+
+  CloseOnSelect.prototype._selectTriggered = function (_, evt) {
+    var originalEvent = evt.originalEvent;
+
+    // Don't close if the control key is being held
+    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
+      return;
+    }
+
+    this.trigger('close', {
+      originalEvent: originalEvent,
+      originalSelect2Event: evt
+    });
+  };
+
+  return CloseOnSelect;
+});
+
+S2.define('select2/i18n/en',[],function () {
+  // English
+  return {
+    errorLoading: function () {
+      return 'The results could not be loaded.';
+    },
+    inputTooLong: function (args) {
+      var overChars = args.input.length - args.maximum;
+
+      var message = 'Please delete ' + overChars + ' character';
+
+      if (overChars != 1) {
+        message += 's';
+      }
+
+      return message;
+    },
+    inputTooShort: function (args) {
+      var remainingChars = args.minimum - args.input.length;
+
+      var message = 'Please enter ' + remainingChars + ' or more characters';
+
+      return message;
+    },
+    loadingMore: function () {
+      return 'Loading more results…';
+    },
+    maximumSelected: function (args) {
+      var message = 'You can only select ' + args.maximum + ' item';
+
+      if (args.maximum != 1) {
+        message += 's';
+      }
+
+      return message;
+    },
+    noResults: function () {
+      return 'No results found';
+    },
+    searching: function () {
+      return 'Searching…';
+    },
+    removeAllItems: function () {
+      return 'Remove all items';
+    }
+  };
+});
+
+S2.define('select2/defaults',[
+  'jquery',
+  'require',
+
+  './results',
+
+  './selection/single',
+  './selection/multiple',
+  './selection/placeholder',
+  './selection/allowClear',
+  './selection/search',
+  './selection/eventRelay',
+
+  './utils',
+  './translation',
+  './diacritics',
+
+  './data/select',
+  './data/array',
+  './data/ajax',
+  './data/tags',
+  './data/tokenizer',
+  './data/minimumInputLength',
+  './data/maximumInputLength',
+  './data/maximumSelectionLength',
+
+  './dropdown',
+  './dropdown/search',
+  './dropdown/hidePlaceholder',
+  './dropdown/infiniteScroll',
+  './dropdown/attachBody',
+  './dropdown/minimumResultsForSearch',
+  './dropdown/selectOnClose',
+  './dropdown/closeOnSelect',
+
+  './i18n/en'
+], function ($, require,
+
+             ResultsList,
+
+             SingleSelection, MultipleSelection, Placeholder, AllowClear,
+             SelectionSearch, EventRelay,
+
+             Utils, Translation, DIACRITICS,
+
+             SelectData, ArrayData, AjaxData, Tags, Tokenizer,
+             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
+
+             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
+             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
+
+             EnglishTranslation) {
+  function Defaults () {
+    this.reset();
+  }
+
+  Defaults.prototype.apply = function (options) {
+    options = $.extend(true, {}, this.defaults, options);
+
+    if (options.dataAdapter == null) {
+      if (options.ajax != null) {
+        options.dataAdapter = AjaxData;
+      } else if (options.data != null) {
+        options.dataAdapter = ArrayData;
+      } else {
+        options.dataAdapter = SelectData;
+      }
+
+      if (options.minimumInputLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MinimumInputLength
+        );
+      }
+
+      if (options.maximumInputLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MaximumInputLength
+        );
+      }
+
+      if (options.maximumSelectionLength > 0) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          MaximumSelectionLength
+        );
+      }
+
+      if (options.tags) {
+        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
+      }
+
+      if (options.tokenSeparators != null || options.tokenizer != null) {
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          Tokenizer
+        );
+      }
+
+      if (options.query != null) {
+        var Query = require(options.amdBase + 'compat/query');
+
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          Query
+        );
+      }
+
+      if (options.initSelection != null) {
+        var InitSelection = require(options.amdBase + 'compat/initSelection');
+
+        options.dataAdapter = Utils.Decorate(
+          options.dataAdapter,
+          InitSelection
+        );
+      }
+    }
+
+    if (options.resultsAdapter == null) {
+      options.resultsAdapter = ResultsList;
+
+      if (options.ajax != null) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          InfiniteScroll
+        );
+      }
+
+      if (options.placeholder != null) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          HidePlaceholder
+        );
+      }
+
+      if (options.selectOnClose) {
+        options.resultsAdapter = Utils.Decorate(
+          options.resultsAdapter,
+          SelectOnClose
+        );
+      }
+    }
+
+    if (options.dropdownAdapter == null) {
+      if (options.multiple) {
+        options.dropdownAdapter = Dropdown;
+      } else {
+        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
+
+        options.dropdownAdapter = SearchableDropdown;
+      }
+
+      if (options.minimumResultsForSearch !== 0) {
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          MinimumResultsForSearch
+        );
+      }
+
+      if (options.closeOnSelect) {
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          CloseOnSelect
+        );
+      }
+
+      if (
+        options.dropdownCssClass != null ||
+        options.dropdownCss != null ||
+        options.adaptDropdownCssClass != null
+      ) {
+        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
+
+        options.dropdownAdapter = Utils.Decorate(
+          options.dropdownAdapter,
+          DropdownCSS
+        );
+      }
+
+      options.dropdownAdapter = Utils.Decorate(
+        options.dropdownAdapter,
+        AttachBody
+      );
+    }
+
+    if (options.selectionAdapter == null) {
+      if (options.multiple) {
+        options.selectionAdapter = MultipleSelection;
+      } else {
+        options.selectionAdapter = SingleSelection;
+      }
+
+      // Add the placeholder mixin if a placeholder was specified
+      if (options.placeholder != null) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          Placeholder
+        );
+      }
+
+      if (options.allowClear) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          AllowClear
+        );
+      }
+
+      if (options.multiple) {
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          SelectionSearch
+        );
+      }
+
+      if (
+        options.containerCssClass != null ||
+        options.containerCss != null ||
+        options.adaptContainerCssClass != null
+      ) {
+        var ContainerCSS = require(options.amdBase + 'compat/containerCss');
+
+        options.selectionAdapter = Utils.Decorate(
+          options.selectionAdapter,
+          ContainerCSS
+        );
+      }
+
+      options.selectionAdapter = Utils.Decorate(
+        options.selectionAdapter,
+        EventRelay
+      );
+    }
+
+    if (typeof options.language === 'string') {
+      // Check if the language is specified with a region
+      if (options.language.indexOf('-') > 0) {
+        // Extract the region information if it is included
+        var languageParts = options.language.split('-');
+        var baseLanguage = languageParts[0];
+
+        options.language = [options.language, baseLanguage];
+      } else {
+        options.language = [options.language];
+      }
+    }
+
+    if ($.isArray(options.language)) {
+      var languages = new Translation();
+      options.language.push('en');
+
+      var languageNames = options.language;
+
+      for (var l = 0; l < languageNames.length; l++) {
+        var name = languageNames[l];
+        var language = {};
+
+        try {
+          // Try to load it with the original name
+          language = Translation.loadPath(name);
+        } catch (e) {
+          try {
+            // If we couldn't load it, check if it wasn't the full path
+            name = this.defaults.amdLanguageBase + name;
+            language = Translation.loadPath(name);
+          } catch (ex) {
+            // The translation could not be loaded at all. Sometimes this is
+            // because of a configuration problem, other times this can be
+            // because of how Select2 helps load all possible translation files.
+            if (options.debug && window.console && console.warn) {
+              console.warn(
+                'Select2: The language file for "' + name + '" could not be ' +
+                'automatically loaded. A fallback will be used instead.'
+              );
+            }
+
+            continue;
+          }
+        }
+
+        languages.extend(language);
+      }
+
+      options.translations = languages;
+    } else {
+      var baseTranslation = Translation.loadPath(
+        this.defaults.amdLanguageBase + 'en'
+      );
+      var customTranslation = new Translation(options.language);
+
+      customTranslation.extend(baseTranslation);
+
+      options.translations = customTranslation;
+    }
+
+    return options;
+  };
+
+  Defaults.prototype.reset = function () {
+    function stripDiacritics (text) {
+      // Used 'uni range + named function' from http://jsperf.com/diacritics/18
+      function match(a) {
+        return DIACRITICS[a] || a;
+      }
+
+      return text.replace(/[^\u0000-\u007E]/g, match);
+    }
+
+    function matcher (params, data) {
+      // Always return the object if there is nothing to compare
+      if ($.trim(params.term) === '') {
+        return data;
+      }
+
+      // Do a recursive check for options with children
+      if (data.children && data.children.length > 0) {
+        // Clone the data object if there are children
+        // This is required as we modify the object to remove any non-matches
+        var match = $.extend(true, {}, data);
+
+        // Check each child of the option
+        for (var c = data.children.length - 1; c >= 0; c--) {
+          var child = data.children[c];
+
+          var matches = matcher(params, child);
+
+          // If there wasn't a match, remove the object in the array
+          if (matches == null) {
+            match.children.splice(c, 1);
+          }
+        }
+
+        // If any children matched, return the new object
+        if (match.children.length > 0) {
+          return match;
+        }
+
+        // If there were no matching children, check just the plain object
+        return matcher(params, match);
+      }
+
+      var original = stripDiacritics(data.text).toUpperCase();
+      var term = stripDiacritics(params.term).toUpperCase();
+
+      // Check if the text contains the term
+      if (original.indexOf(term) > -1) {
+        return data;
+      }
+
+      // If it doesn't contain the term, don't return anything
+      return null;
+    }
+
+    this.defaults = {
+      amdBase: './',
+      amdLanguageBase: './i18n/',
+      closeOnSelect: true,
+      debug: false,
+      dropdownAutoWidth: false,
+      escapeMarkup: Utils.escapeMarkup,
+      language: EnglishTranslation,
+      matcher: matcher,
+      minimumInputLength: 0,
+      maximumInputLength: 0,
+      maximumSelectionLength: 0,
+      minimumResultsForSearch: 0,
+      selectOnClose: false,
+      scrollAfterSelect: false,
+      sorter: function (data) {
+        return data;
+      },
+      templateResult: function (result) {
+        return result.text;
+      },
+      templateSelection: function (selection) {
+        return selection.text;
+      },
+      theme: 'default',
+      width: 'resolve'
+    };
+  };
+
+  Defaults.prototype.set = function (key, value) {
+    var camelKey = $.camelCase(key);
+
+    var data = {};
+    data[camelKey] = value;
+
+    var convertedData = Utils._convertData(data);
+
+    $.extend(true, this.defaults, convertedData);
+  };
+
+  var defaults = new Defaults();
+
+  return defaults;
+});
+
+S2.define('select2/options',[
+  'require',
+  'jquery',
+  './defaults',
+  './utils'
+], function (require, $, Defaults, Utils) {
+  function Options (options, $element) {
+    this.options = options;
+
+    if ($element != null) {
+      this.fromElement($element);
+    }
+
+    this.options = Defaults.apply(this.options);
+
+    if ($element && $element.is('input')) {
+      var InputCompat = require(this.get('amdBase') + 'compat/inputData');
+
+      this.options.dataAdapter = Utils.Decorate(
+        this.options.dataAdapter,
+        InputCompat
+      );
+    }
+  }
+
+  Options.prototype.fromElement = function ($e) {
+    var excludedData = ['select2'];
+
+    if (this.options.multiple == null) {
+      this.options.multiple = $e.prop('multiple');
+    }
+
+    if (this.options.disabled == null) {
+      this.options.disabled = $e.prop('disabled');
+    }
+
+    if (this.options.language == null) {
+      if ($e.prop('lang')) {
+        this.options.language = $e.prop('lang').toLowerCase();
+      } else if ($e.closest('[lang]').prop('lang')) {
+        this.options.language = $e.closest('[lang]').prop('lang');
+      }
+    }
+
+    if (this.options.dir == null) {
+      if ($e.prop('dir')) {
+        this.options.dir = $e.prop('dir');
+      } else if ($e.closest('[dir]').prop('dir')) {
+        this.options.dir = $e.closest('[dir]').prop('dir');
+      } else {
+        this.options.dir = 'ltr';
+      }
+    }
+
+    $e.prop('disabled', this.options.disabled);
+    $e.prop('multiple', this.options.multiple);
+
+    if (Utils.GetData($e[0], 'select2Tags')) {
+      if (this.options.debug && window.console && console.warn) {
+        console.warn(
+          'Select2: The `data-select2-tags` attribute has been changed to ' +
+          'use the `data-data` and `data-tags="true"` attributes and will be ' +
+          'removed in future versions of Select2.'
+        );
+      }
+
+      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
+      Utils.StoreData($e[0], 'tags', true);
+    }
+
+    if (Utils.GetData($e[0], 'ajaxUrl')) {
+      if (this.options.debug && window.console && console.warn) {
+        console.warn(
+          'Select2: The `data-ajax-url` attribute has been changed to ' +
+          '`data-ajax--url` and support for the old attribute will be removed' +
+          ' in future versions of Select2.'
+        );
+      }
+
+      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
+      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
+    }
+
+    var dataset = {};
+
+    function upperCaseLetter(_, letter) {
+      return letter.toUpperCase();
+    }
+
+    // Pre-load all of the attributes which are prefixed with `data-`
+    for (var attr = 0; attr < $e[0].attributes.length; attr++) {
+      var attributeName = $e[0].attributes[attr].name;
+      var prefix = 'data-';
+
+      if (attributeName.substr(0, prefix.length) == prefix) {
+        // Get the contents of the attribute after `data-`
+        var dataName = attributeName.substring(prefix.length);
+
+        // Get the data contents from the consistent source
+        // This is more than likely the jQuery data helper
+        var dataValue = Utils.GetData($e[0], dataName);
+
+        // camelCase the attribute name to match the spec
+        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
+
+        // Store the data attribute contents into the dataset since
+        dataset[camelDataName] = dataValue;
+      }
+    }
+
+    // Prefer the element's `dataset` attribute if it exists
+    // jQuery 1.x does not correctly handle data attributes with multiple dashes
+    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
+      dataset = $.extend(true, {}, $e[0].dataset, dataset);
+    }
+
+    // Prefer our internal data cache if it exists
+    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
+
+    data = Utils._convertData(data);
+
+    for (var key in data) {
+      if ($.inArray(key, excludedData) > -1) {
+        continue;
+      }
+
+      if ($.isPlainObject(this.options[key])) {
+        $.extend(this.options[key], data[key]);
+      } else {
+        this.options[key] = data[key];
+      }
+    }
+
+    return this;
+  };
+
+  Options.prototype.get = function (key) {
+    return this.options[key];
+  };
+
+  Options.prototype.set = function (key, val) {
+    this.options[key] = val;
+  };
+
+  return Options;
+});
+
+S2.define('select2/core',[
+  'jquery',
+  './options',
+  './utils',
+  './keys'
+], function ($, Options, Utils, KEYS) {
+  var Select2 = function ($element, options) {
+    if (Utils.GetData($element[0], 'select2') != null) {
+      Utils.GetData($element[0], 'select2').destroy();
+    }
+
+    this.$element = $element;
+
+    this.id = this._generateId($element);
+
+    options = options || {};
+
+    this.options = new Options(options, $element);
+
+    Select2.__super__.constructor.call(this);
+
+    // Set up the tabindex
+
+    var tabindex = $element.attr('tabindex') || 0;
+    Utils.StoreData($element[0], 'old-tabindex', tabindex);
+    $element.attr('tabindex', '-1');
+
+    // Set up containers and adapters
+
+    var DataAdapter = this.options.get('dataAdapter');
+    this.dataAdapter = new DataAdapter($element, this.options);
+
+    var $container = this.render();
+
+    this._placeContainer($container);
+
+    var SelectionAdapter = this.options.get('selectionAdapter');
+    this.selection = new SelectionAdapter($element, this.options);
+    this.$selection = this.selection.render();
+
+    this.selection.position(this.$selection, $container);
+
+    var DropdownAdapter = this.options.get('dropdownAdapter');
+    this.dropdown = new DropdownAdapter($element, this.options);
+    this.$dropdown = this.dropdown.render();
+
+    this.dropdown.position(this.$dropdown, $container);
+
+    var ResultsAdapter = this.options.get('resultsAdapter');
+    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
+    this.$results = this.results.render();
+
+    this.results.position(this.$results, this.$dropdown);
+
+    // Bind events
+
+    var self = this;
+
+    // Bind the container to all of the adapters
+    this._bindAdapters();
+
+    // Register any DOM event handlers
+    this._registerDomEvents();
+
+    // Register any internal event handlers
+    this._registerDataEvents();
+    this._registerSelectionEvents();
+    this._registerDropdownEvents();
+    this._registerResultsEvents();
+    this._registerEvents();
+
+    // Set the initial state
+    this.dataAdapter.current(function (initialData) {
+      self.trigger('selection:update', {
+        data: initialData
+      });
+    });
+
+    // Hide the original select
+    $element.addClass('select2-hidden-accessible');
+    $element.attr('aria-hidden', 'true');
+
+    // Synchronize any monitored attributes
+    this._syncAttributes();
+
+    Utils.StoreData($element[0], 'select2', this);
+
+    // Ensure backwards compatibility with $element.data('select2').
+    $element.data('select2', this);
+  };
+
+  Utils.Extend(Select2, Utils.Observable);
+
+  Select2.prototype._generateId = function ($element) {
+    var id = '';
+
+    if ($element.attr('id') != null) {
+      id = $element.attr('id');
+    } else if ($element.attr('name') != null) {
+      id = $element.attr('name') + '-' + Utils.generateChars(2);
+    } else {
+      id = Utils.generateChars(4);
+    }
+
+    id = id.replace(/(:|\.|\[|\]|,)/g, '');
+    id = 'select2-' + id;
+
+    return id;
+  };
+
+  Select2.prototype._placeContainer = function ($container) {
+    $container.insertAfter(this.$element);
+
+    var width = this._resolveWidth(this.$element, this.options.get('width'));
+
+    if (width != null) {
+      $container.css('width', width);
+    }
+  };
+
+  Select2.prototype._resolveWidth = function ($element, method) {
+    var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
+
+    if (method == 'resolve') {
+      var styleWidth = this._resolveWidth($element, 'style');
+
+      if (styleWidth != null) {
+        return styleWidth;
+      }
+
+      return this._resolveWidth($element, 'element');
+    }
+
+    if (method == 'element') {
+      var elementWidth = $element.outerWidth(false);
+
+      if (elementWidth <= 0) {
+        return 'auto';
+      }
+
+      return elementWidth + 'px';
+    }
+
+    if (method == 'style') {
+      var style = $element.attr('style');
+
+      if (typeof(style) !== 'string') {
+        return null;
+      }
+
+      var attrs = style.split(';');
+
+      for (var i = 0, l = attrs.length; i < l; i = i + 1) {
+        var attr = attrs[i].replace(/\s/g, '');
+        var matches = attr.match(WIDTH);
+
+        if (matches !== null && matches.length >= 1) {
+          return matches[1];
+        }
+      }
+
+      return null;
+    }
+
+    if (method == 'computedstyle') {
+      var computedStyle = window.getComputedStyle($element[0]);
+
+      return computedStyle.width;
+    }
+
+    return method;
+  };
+
+  Select2.prototype._bindAdapters = function () {
+    this.dataAdapter.bind(this, this.$container);
+    this.selection.bind(this, this.$container);
+
+    this.dropdown.bind(this, this.$container);
+    this.results.bind(this, this.$container);
+  };
+
+  Select2.prototype._registerDomEvents = function () {
+    var self = this;
+
+    this.$element.on('change.select2', function () {
+      self.dataAdapter.current(function (data) {
+        self.trigger('selection:update', {
+          data: data
+        });
+      });
+    });
+
+    this.$element.on('focus.select2', function (evt) {
+      self.trigger('focus', evt);
+    });
+
+    this._syncA = Utils.bind(this._syncAttributes, this);
+    this._syncS = Utils.bind(this._syncSubtree, this);
+
+    if (this.$element[0].attachEvent) {
+      this.$element[0].attachEvent('onpropertychange', this._syncA);
+    }
+
+    var observer = window.MutationObserver ||
+      window.WebKitMutationObserver ||
+      window.MozMutationObserver
+    ;
+
+    if (observer != null) {
+      this._observer = new observer(function (mutations) {
+        $.each(mutations, self._syncA);
+        $.each(mutations, self._syncS);
+      });
+      this._observer.observe(this.$element[0], {
+        attributes: true,
+        childList: true,
+        subtree: false
+      });
+    } else if (this.$element[0].addEventListener) {
+      this.$element[0].addEventListener(
+        'DOMAttrModified',
+        self._syncA,
+        false
+      );
+      this.$element[0].addEventListener(
+        'DOMNodeInserted',
+        self._syncS,
+        false
+      );
+      this.$element[0].addEventListener(
+        'DOMNodeRemoved',
+        self._syncS,
+        false
+      );
+    }
+  };
+
+  Select2.prototype._registerDataEvents = function () {
+    var self = this;
+
+    this.dataAdapter.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerSelectionEvents = function () {
+    var self = this;
+    var nonRelayEvents = ['toggle', 'focus'];
+
+    this.selection.on('toggle', function () {
+      self.toggleDropdown();
+    });
+
+    this.selection.on('focus', function (params) {
+      self.focus(params);
+    });
+
+    this.selection.on('*', function (name, params) {
+      if ($.inArray(name, nonRelayEvents) !== -1) {
+        return;
+      }
+
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerDropdownEvents = function () {
+    var self = this;
+
+    this.dropdown.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerResultsEvents = function () {
+    var self = this;
+
+    this.results.on('*', function (name, params) {
+      self.trigger(name, params);
+    });
+  };
+
+  Select2.prototype._registerEvents = function () {
+    var self = this;
+
+    this.on('open', function () {
+      self.$container.addClass('select2-container--open');
+    });
+
+    this.on('close', function () {
+      self.$container.removeClass('select2-container--open');
+    });
+
+    this.on('enable', function () {
+      self.$container.removeClass('select2-container--disabled');
+    });
+
+    this.on('disable', function () {
+      self.$container.addClass('select2-container--disabled');
+    });
+
+    this.on('blur', function () {
+      self.$container.removeClass('select2-container--focus');
+    });
+
+    this.on('query', function (params) {
+      if (!self.isOpen()) {
+        self.trigger('open', {});
+      }
+
+      this.dataAdapter.query(params, function (data) {
+        self.trigger('results:all', {
+          data: data,
+          query: params
+        });
+      });
+    });
+
+    this.on('query:append', function (params) {
+      this.dataAdapter.query(params, function (data) {
+        self.trigger('results:append', {
+          data: data,
+          query: params
+        });
+      });
+    });
+
+    this.on('keypress', function (evt) {
+      var key = evt.which;
+
+      if (self.isOpen()) {
+        if (key === KEYS.ESC || key === KEYS.TAB ||
+            (key === KEYS.UP && evt.altKey)) {
+          self.close();
+
+          evt.preventDefault();
+        } else if (key === KEYS.ENTER) {
+          self.trigger('results:select', {});
+
+          evt.preventDefault();
+        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
+          self.trigger('results:toggle', {});
+
+          evt.preventDefault();
+        } else if (key === KEYS.UP) {
+          self.trigger('results:previous', {});
+
+          evt.preventDefault();
+        } else if (key === KEYS.DOWN) {
+          self.trigger('results:next', {});
+
+          evt.preventDefault();
+        }
+      } else {
+        if (key === KEYS.ENTER || key === KEYS.SPACE ||
+            (key === KEYS.DOWN && evt.altKey)) {
+          self.open();
+
+          evt.preventDefault();
+        }
+      }
+    });
+  };
+
+  Select2.prototype._syncAttributes = function () {
+    this.options.set('disabled', this.$element.prop('disabled'));
+
+    if (this.options.get('disabled')) {
+      if (this.isOpen()) {
+        this.close();
+      }
+
+      this.trigger('disable', {});
+    } else {
+      this.trigger('enable', {});
+    }
+  };
+
+  Select2.prototype._syncSubtree = function (evt, mutations) {
+    var changed = false;
+    var self = this;
+
+    // Ignore any mutation events raised for elements that aren't options or
+    // optgroups. This handles the case when the select element is destroyed
+    if (
+      evt && evt.target && (
+        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
+      )
+    ) {
+      return;
+    }
+
+    if (!mutations) {
+      // If mutation events aren't supported, then we can only assume that the
+      // change affected the selections
+      changed = true;
+    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
+      for (var n = 0; n < mutations.addedNodes.length; n++) {
+        var node = mutations.addedNodes[n];
+
+        if (node.selected) {
+          changed = true;
+        }
+      }
+    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
+      changed = true;
+    }
+
+    // Only re-pull the data if we think there is a change
+    if (changed) {
+      this.dataAdapter.current(function (currentData) {
+        self.trigger('selection:update', {
+          data: currentData
+        });
+      });
+    }
+  };
+
+  /**
+   * Override the trigger method to automatically trigger pre-events when
+   * there are events that can be prevented.
+   */
+  Select2.prototype.trigger = function (name, args) {
+    var actualTrigger = Select2.__super__.trigger;
+    var preTriggerMap = {
+      'open': 'opening',
+      'close': 'closing',
+      'select': 'selecting',
+      'unselect': 'unselecting',
+      'clear': 'clearing'
+    };
+
+    if (args === undefined) {
+      args = {};
+    }
+
+    if (name in preTriggerMap) {
+      var preTriggerName = preTriggerMap[name];
+      var preTriggerArgs = {
+        prevented: false,
+        name: name,
+        args: args
+      };
+
+      actualTrigger.call(this, preTriggerName, preTriggerArgs);
+
+      if (preTriggerArgs.prevented) {
+        args.prevented = true;
+
+        return;
+      }
+    }
+
+    actualTrigger.call(this, name, args);
+  };
+
+  Select2.prototype.toggleDropdown = function () {
+    if (this.options.get('disabled')) {
+      return;
+    }
+
+    if (this.isOpen()) {
+      this.close();
+    } else {
+      this.open();
+    }
+  };
+
+  Select2.prototype.open = function () {
+    if (this.isOpen()) {
+      return;
+    }
+
+    this.trigger('query', {});
+  };
+
+  Select2.prototype.close = function () {
+    if (!this.isOpen()) {
+      return;
+    }
+
+    this.trigger('close', {});
+  };
+
+  Select2.prototype.isOpen = function () {
+    return this.$container.hasClass('select2-container--open');
+  };
+
+  Select2.prototype.hasFocus = function () {
+    return this.$container.hasClass('select2-container--focus');
+  };
+
+  Select2.prototype.focus = function (data) {
+    // No need to re-trigger focus events if we are already focused
+    if (this.hasFocus()) {
+      return;
+    }
+
+    this.$container.addClass('select2-container--focus');
+    this.trigger('focus', {});
+  };
+
+  Select2.prototype.enable = function (args) {
+    if (this.options.get('debug') && window.console && console.warn) {
+      console.warn(
+        'Select2: The `select2("enable")` method has been deprecated and will' +
+        ' be removed in later Select2 versions. Use $element.prop("disabled")' +
+        ' instead.'
+      );
+    }
+
+    if (args == null || args.length === 0) {
+      args = [true];
+    }
+
+    var disabled = !args[0];
+
+    this.$element.prop('disabled', disabled);
+  };
+
+  Select2.prototype.data = function () {
+    if (this.options.get('debug') &&
+        arguments.length > 0 && window.console && console.warn) {
+      console.warn(
+        'Select2: Data can no longer be set using `select2("data")`. You ' +
+        'should consider setting the value instead using `$element.val()`.'
+      );
+    }
+
+    var data = [];
+
+    this.dataAdapter.current(function (currentData) {
+      data = currentData;
+    });
+
+    return data;
+  };
+
+  Select2.prototype.val = function (args) {
+    if (this.options.get('debug') && window.console && console.warn) {
+      console.warn(
+        'Select2: The `select2("val")` method has been deprecated and will be' +
+        ' removed in later Select2 versions. Use $element.val() instead.'
+      );
+    }
+
+    if (args == null || args.length === 0) {
+      return this.$element.val();
+    }
+
+    var newVal = args[0];
+
+    if ($.isArray(newVal)) {
+      newVal = $.map(newVal, function (obj) {
+        return obj.toString();
+      });
+    }
+
+    this.$element.val(newVal).trigger('change');
+  };
+
+  Select2.prototype.destroy = function () {
+    this.$container.remove();
+
+    if (this.$element[0].detachEvent) {
+      this.$element[0].detachEvent('onpropertychange', this._syncA);
+    }
+
+    if (this._observer != null) {
+      this._observer.disconnect();
+      this._observer = null;
+    } else if (this.$element[0].removeEventListener) {
+      this.$element[0]
+        .removeEventListener('DOMAttrModified', this._syncA, false);
+      this.$element[0]
+        .removeEventListener('DOMNodeInserted', this._syncS, false);
+      this.$element[0]
+        .removeEventListener('DOMNodeRemoved', this._syncS, false);
+    }
+
+    this._syncA = null;
+    this._syncS = null;
+
+    this.$element.off('.select2');
+    this.$element.attr('tabindex',
+    Utils.GetData(this.$element[0], 'old-tabindex'));
+
+    this.$element.removeClass('select2-hidden-accessible');
+    this.$element.attr('aria-hidden', 'false');
+    Utils.RemoveData(this.$element[0]);
+    this.$element.removeData('select2');
+
+    this.dataAdapter.destroy();
+    this.selection.destroy();
+    this.dropdown.destroy();
+    this.results.destroy();
+
+    this.dataAdapter = null;
+    this.selection = null;
+    this.dropdown = null;
+    this.results = null;
+  };
+
+  Select2.prototype.render = function () {
+    var $container = $(
+      '<span class="select2 select2-container">' +
+        '<span class="selection"></span>' +
+        '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
+      '</span>'
+    );
+
+    $container.attr('dir', this.options.get('dir'));
+
+    this.$container = $container;
+
+    this.$container.addClass('select2-container--' + this.options.get('theme'));
+
+    Utils.StoreData($container[0], 'element', this.$element);
+
+    return $container;
+  };
+
+  return Select2;
+});
+
+S2.define('jquery-mousewheel',[
+  'jquery'
+], function ($) {
+  // Used to shim jQuery.mousewheel for non-full builds.
+  return $;
+});
+
+S2.define('jquery.select2',[
+  'jquery',
+  'jquery-mousewheel',
+
+  './select2/core',
+  './select2/defaults',
+  './select2/utils'
+], function ($, _, Select2, Defaults, Utils) {
+  if ($.fn.select2 == null) {
+    // All methods that should return the element
+    var thisMethods = ['open', 'close', 'destroy'];
+
+    $.fn.select2 = function (options) {
+      options = options || {};
+
+      if (typeof options === 'object') {
+        this.each(function () {
+          var instanceOptions = $.extend(true, {}, options);
+
+          var instance = new Select2($(this), instanceOptions);
+        });
+
+        return this;
+      } else if (typeof options === 'string') {
+        var ret;
+        var args = Array.prototype.slice.call(arguments, 1);
+
+        this.each(function () {
+          var instance = Utils.GetData(this, 'select2');
+
+          if (instance == null && window.console && console.error) {
+            console.error(
+              'The select2(\'' + options + '\') method was called on an ' +
+              'element that is not using Select2.'
+            );
+          }
+
+          ret = instance[options].apply(instance, args);
+        });
+
+        // Check if we should be returning `this`
+        if ($.inArray(options, thisMethods) > -1) {
+          return this;
+        }
+
+        return ret;
+      } else {
+        throw new Error('Invalid arguments for Select2: ' + options);
+      }
+    };
+  }
+
+  if ($.fn.select2.defaults == null) {
+    $.fn.select2.defaults = Defaults;
+  }
+
+  return Select2;
+});
+
+  // Return the AMD loader configuration so it can be used outside of this file
+  return {
+    define: S2.define,
+    require: S2.require
+  };
+}());
+
+  // Autoload the jQuery bindings
+  // We know that all of the modules exist above this, so we're safe
+  var select2 = S2.require('jquery.select2');
+
+  // Hold the AMD module references on the jQuery function that was just loaded
+  // This allows Select2 to use the internal loader outside of this file, such
+  // as in the language files.
+  jQuery.fn.select2.amd = S2;
+
+  // Return the Select2 instance for anyone who is importing it.
+  return select2;
+}));
+/*!
+ * jQuery cxSelect
+ * @name jquery.cxselect.js
+ * @version 1.4.1
+ * @date 2016-11-02
+ * @author ciaoca
+ * @email ciaoca@gmail.com
+ * @site https://github.com/ciaoca/cxSelect
+ * @license Released under the MIT license
+ */
+
+(function(factory) {
+  if (typeof define === 'function' && define.amd) {
+    define(['jquery'], factory);
+  } else {
+    factory(window.jQuery || window.Zepto || window.$);
+  };
+}(function($) {
+  var cxSelect = function() {
+    var self = this;
+    var dom, settings, callback;
+
+    // 分配参数
+    for (var i = 0, l = arguments.length; i < l; i++) {
+      if (cxSelect.isJquery(arguments[i]) || cxSelect.isZepto(arguments[i])) {
+        dom = arguments[i];
+      } else if (cxSelect.isElement(arguments[i])) {
+        dom = $(arguments[i]);
+      } else if (typeof arguments[i] === 'function') {
+        callback = arguments[i];
+      } else if (typeof arguments[i] === 'object') {
+        settings = arguments[i];
+      };
+    };
+
+    var api = new cxSelect.init(dom, settings);
+
+    if (typeof callback === 'function') {
+      callback(api);
+    };
+
+    return api;
+  };
+
+  cxSelect.isElement = function(o){
+    if (o && (typeof HTMLElement === 'function' || typeof HTMLElement === 'object') && o instanceof HTMLElement) {
+      return true;
+    } else {
+      return (o && o.nodeType && o.nodeType === 1) ? true : false;
+    };
+  };
+
+  cxSelect.isJquery = function(o){
+    return (o && o.length && (typeof jQuery === 'function' || typeof jQuery === 'object') && o instanceof jQuery) ? true : false;
+  };
+
+  cxSelect.isZepto = function(o){
+    return (o && o.length && (typeof Zepto === 'function' || typeof Zepto === 'object') && Zepto.zepto.isZ(o)) ? true : false;
+  };
+
+  cxSelect.getIndex = function(n, required) {
+    return required ? n : n - 1;
+  };
+
+  cxSelect.getData = function(data, space) {
+    if (typeof space === 'string' && space.length) {
+      space = space.split('.');
+      for (var i = 0, l = space.length; i < l; i++) {
+        data = data[space[i]];
+      };
+    };
+    return data;
+  };
+
+  cxSelect.init = function(dom, settings) {
+    var self = this;
+
+    if (!cxSelect.isJquery(dom) && !cxSelect.isZepto(dom)) {return};
+
+    var theSelect = {
+      dom: {
+        box: dom
+      }
+    };
+
+    self.attach = cxSelect.attach.bind(theSelect);
+    self.detach = cxSelect.detach.bind(theSelect);
+    self.setOptions = cxSelect.setOptions.bind(theSelect);
+    self.clear = cxSelect.clear.bind(theSelect);
+
+    theSelect.changeEvent = function() {
+      cxSelect.selectChange.call(theSelect, this.className);
+    };
+
+    theSelect.settings = $.extend({}, $.cxSelect.defaults, settings, {
+      url: theSelect.dom.box.data('url'),
+      emptyStyle: theSelect.dom.box.data('emptyStyle'),
+      required: theSelect.dom.box.data('required'),
+      firstTitle: theSelect.dom.box.data('firstTitle'),
+      firstValue: theSelect.dom.box.data('firstValue'),
+      jsonSpace: theSelect.dom.box.data('jsonSpace'),
+      jsonName: theSelect.dom.box.data('jsonName'),
+      jsonValue: theSelect.dom.box.data('jsonValue'),
+      jsonSub: theSelect.dom.box.data('jsonSub')
+    });
+
+    var _dataSelects = theSelect.dom.box.data('selects');
+
+    if (typeof _dataSelects === 'string' && _dataSelects.length) {
+      theSelect.settings.selects = _dataSelects.split(',');
+    };
+
+    self.setOptions();
+    self.attach();
+
+    // 使用独立接口获取数据
+    if (!theSelect.settings.url && !theSelect.settings.data) {
+      cxSelect.start.apply(theSelect);
+
+    // 设置自定义数据
+    } else if ($.isArray(theSelect.settings.data)) {
+      cxSelect.start.call(theSelect, theSelect.settings.data);
+
+    // 设置 URL,通过 Ajax 获取数据
+    } else if (typeof theSelect.settings.url === 'string' && theSelect.settings.url.length) {
+      $.getJSON(theSelect.settings.url, function(json) {
+        cxSelect.start.call(theSelect, json);
+      });
+    };
+  };
+
+  // 设置参数
+  cxSelect.setOptions = function(opts) {
+    var self = this;
+
+    if (opts) {
+      $.extend(self.settings, opts);
+    };
+
+    // 初次或重设选择器组
+    if (!$.isArray(self.selectArray) || !self.selectArray.length || (opts && opts.selects)) {
+      self.selectArray = [];
+
+      if ($.isArray(self.settings.selects) && self.settings.selects.length) {
+        var _tempSelect;
+
+        for (var i = 0, l = self.settings.selects.length; i < l; i++) {
+          _tempSelect = self.dom.box.find('select.' + self.settings.selects[i]);
+
+          if (!_tempSelect || !_tempSelect.length) {break};
+
+          self.selectArray.push(_tempSelect);
+        };
+      };
+    };
+
+    if (opts) {
+      if (!$.isArray(opts.data) && typeof opts.url === 'string' && opts.url.length) {
+        $.getJSON(self.settings.url, function(json) {
+          cxSelect.start.call(self, json);
+        });
+
+      } else {
+        cxSelect.start.call(self, opts.data);
+      };
+    };
+  };
+
+  // 绑定
+  cxSelect.attach = function() {
+    var self = this;
+
+    if (!self.attachStatus) {
+      self.dom.box.on('change', 'select', self.changeEvent);
+    };
+
+    if (typeof self.attachStatus === 'boolean') {
+      cxSelect.start.call(self);
+    };
+
+    self.attachStatus = true;
+  };
+
+  // 移除绑定
+  cxSelect.detach = function() {
+    var self = this;
+    self.dom.box.off('change', 'select', self.changeEvent);
+    self.attachStatus = false;
+  };
+
+  // 清空选项
+  cxSelect.clear = function(index) {
+    var self = this;
+    var _style = {
+      display: '',
+      visibility: ''
+    };
+
+    index = isNaN(index) ? 0 : index;
+
+    // 清空后面的 select
+    for (var i = index, l = self.selectArray.length; i < l; i++) {
+      self.selectArray[i].empty().prop('disabled', true);
+
+      if (self.settings.emptyStyle === 'none') {
+        _style.display = 'none';
+      } else if (self.settings.emptyStyle === 'hidden') {
+        _style.visibility = 'hidden';
+      };
+
+      self.selectArray[i].css(_style);
+    };
+  };
+
+  cxSelect.start = function(data) {
+    var self = this;
+
+    if ($.isArray(data)) {
+      self.settings.data = cxSelect.getData(data, self.settings.jsonSpace);
+    };
+
+    if (!self.selectArray.length) {return};
+
+    // 保存默认值
+    for (var i = 0, l = self.selectArray.length; i < l; i++) {
+      if (typeof self.selectArray[i].attr('data-value') !== 'string' && self.selectArray[i][0].options.length) {
+        self.selectArray[i].attr('data-value', self.selectArray[i].val());
+      };
+    };
+
+    if (self.settings.data || (typeof self.selectArray[0].data('url') === 'string' && self.selectArray[0].data('url').length)) {
+      cxSelect.getOptionData.call(self, 0);
+    } else {
+      self.selectArray[0].prop('disabled', false).css({
+        'display': '',
+        'visibility': ''
+      });
+    };
+  };
+
+  // 获取选项数据
+  cxSelect.getOptionData = function(index) {
+    var self = this;
+
+    if (typeof index !== 'number' || isNaN(index) || index < 0 || index >= self.selectArray.length) {return};
+
+    var _indexPrev = index - 1;
+    var _select = self.selectArray[index];
+    var _selectData;
+    var _valueIndex;
+    var _dataUrl = _select.data('url');
+    var _jsonSpace = typeof _select.data('jsonSpace') === 'undefined' ? self.settings.jsonSpace : _select.data('jsonSpace');
+    var _query = {};
+    var _queryName;
+    var _selectName;
+    var _selectValue;
+
+    cxSelect.clear.call(self, index);
+
+    // 使用独立接口
+    if (typeof _dataUrl === 'string' && _dataUrl.length) {
+      if (index > 0) {
+        for (var i = 0, j = 1; i < index; i++, j++) {
+          _queryName = self.selectArray[j].data('queryName');
+          _selectName = self.selectArray[i].attr('name');
+          _selectValue = self.selectArray[i].val();
+
+          if (typeof _queryName === 'string' && _queryName.length) {
+            _query[_queryName] = _selectValue;
+          } else if (typeof _selectName === 'string' && _selectName.length) {
+            _query[_selectName] = _selectValue;
+          };
+        };
+      };
+
+      $.getJSON(_dataUrl, _query, function(json) {
+        _selectData = cxSelect.getData(json, _jsonSpace);
+
+        cxSelect.buildOption.call(self, index, _selectData);
+      });
+
+    // 使用整合数据
+    } else if (self.settings.data && typeof self.settings.data === 'object') {
+      _selectData = self.settings.data;
+
+      for (var i = 0; i < index; i++) {
+        _valueIndex = cxSelect.getIndex(self.selectArray[i][0].selectedIndex, typeof self.selectArray[i].data('required') === 'boolean' ? self.selectArray[i].data('required') : self.settings.required);
+
+        if (typeof _selectData[_valueIndex] === 'object' && $.isArray(_selectData[_valueIndex][self.settings.jsonSub]) && _selectData[_valueIndex][self.settings.jsonSub].length) {
+          _selectData = _selectData[_valueIndex][self.settings.jsonSub];
+        } else {
+          _selectData = null;
+          break;
+        };
+      };
+
+      cxSelect.buildOption.call(self, index, _selectData);
+    };
+  };
+
+  // 构建选项列表
+  cxSelect.buildOption = function(index, data) {
+    var self = this;
+
+    var _select = self.selectArray[index];
+    var _required = typeof _select.data('required') === 'boolean' ? _select.data('required') : self.settings.required;
+    var _firstTitle = typeof _select.data('firstTitle') === 'undefined' ? self.settings.firstTitle : _select.data('firstTitle');
+    var _firstValue = typeof _select.data('firstValue') === 'undefined' ? self.settings.firstValue : _select.data('firstValue');
+    var _jsonName = typeof _select.data('jsonName') === 'undefined' ? self.settings.jsonName : _select.data('jsonName');
+    var _jsonValue = typeof _select.data('jsonValue') === 'undefined' ? self.settings.jsonValue : _select.data('jsonValue');
+
+    if (!$.isArray(data)) {return};
+
+    var _html = !_required ? '<option value="' + String(_firstValue) + '">' + String(_firstTitle) + '</option>' : '';
+
+    // 区分标题、值的数据
+    if (typeof _jsonName === 'string' && _jsonName.length) {
+      // 无值字段时使用标题作为值
+      if (typeof _jsonValue !== 'string' || !_jsonValue.length) {
+        _jsonValue = _jsonName;
+      };
+
+      for (var i = 0, l = data.length; i < l; i++) {
+        _html += '<option value="' + String(data[i][_jsonValue]) + '">' + String(data[i][_jsonName]) + '</option>';
+      };
+
+    // 数组即为值的数据
+    } else {
+      for (var i = 0, l = data.length; i < l; i++) {
+        _html += '<option value="' + String(data[i]) + '">' + String(data[i]) + '</option>';
+      };
+    };
+
+    _select.html(_html).prop('disabled', false).css({
+      'display': '',
+      'visibility': ''
+    });
+
+    // 初次加载设置默认值
+    if (typeof _select.attr('data-value') === 'string') {
+      _select.val(String(_select.attr('data-value'))).removeAttr('data-value');
+
+      if (_select[0].selectedIndex < 0) {
+        _select[0].options[0].selected = true;
+      };
+    };
+
+    if (_required || _select[0].selectedIndex > 0) {
+      _select.trigger('change');
+    };
+
+  };
+
+  // 改变选择时的处理
+  cxSelect.selectChange = function(name) {
+    var self = this;
+
+    if (typeof name !== 'string' || !name.length) {return};
+
+    var index;
+
+    name = name.replace(/\s+/g, ',');
+    name = ',' + name + ',';
+
+    // 获取当前 select 位置
+    for (var i = 0, l = self.selectArray.length; i < l; i++) {
+      if (name.indexOf(',' + self.settings.selects[i] + ',') > -1) {
+        index = i;
+        break;
+      };
+    };
+
+    if (typeof index === 'number' && index > -1) {
+      index += 1;
+      cxSelect.getOptionData.call(self, index);
+    };
+  };
+
+  $.cxSelect = function() {
+    return cxSelect.apply(this, arguments);
+  };
+
+  // 默认值
+  $.cxSelect.defaults = {
+    selects: [],            // 下拉选框组
+    url: null,              // 列表数据文件路径(URL)或数组数据
+    data: null,             // 自定义数据
+    emptyStyle: null,       // 无数据状态显示方式
+    required: false,        // 是否为必选
+    firstTitle: '请选择',    // 第一个选项的标题
+    firstValue: '',         // 第一个选项的值
+    jsonSpace: '',          // 数据命名空间
+    jsonName: 'n',          // 数据标题字段名称
+    jsonValue: '',          // 数据值字段名称
+    jsonSub: 's'            // 子集数据字段名称
+  };
+
+  $.fn.cxSelect = function(settings, callback) {
+    this.each(function(i) {
+      $.cxSelect(this, settings, callback);
+    });
+    return this;
+  };
+}));
+/*!
+ * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker)
+ *
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ */
+
+
+(function(factory){
+  if (typeof define === 'function' && define.amd) {
+    define(['jquery'], factory);
+  } else if (typeof exports === 'object') {
+    factory(require('jquery'));
+  } else {
+    factory(jQuery);
+  }
+}(function($, undefined){
+  function UTCDate(){
+    return new Date(Date.UTC.apply(Date, arguments));
+  }
+  function UTCToday(){
+    var today = new Date();
+    return UTCDate(today.getFullYear(), today.getMonth(), today.getDate());
+  }
+  function isUTCEquals(date1, date2) {
+    return (
+      date1.getUTCFullYear() === date2.getUTCFullYear() &&
+      date1.getUTCMonth() === date2.getUTCMonth() &&
+      date1.getUTCDate() === date2.getUTCDate()
+    );
+  }
+  function alias(method, deprecationMsg){
+    return function(){
+      if (deprecationMsg !== undefined) {
+        $.fn.datepicker.deprecated(deprecationMsg);
+      }
+
+      return this[method].apply(this, arguments);
+    };
+  }
+  function isValidDate(d) {
+    return d && !isNaN(d.getTime());
+  }
+
+  var DateArray = (function(){
+    var extras = {
+      get: function(i){
+        return this.slice(i)[0];
+      },
+      contains: function(d){
+        // Array.indexOf is not cross-browser;
+        // $.inArray doesn't work with Dates
+        var val = d && d.valueOf();
+        for (var i=0, l=this.length; i < l; i++)
+          // Use date arithmetic to allow dates with different times to match
+          if (0 <= this[i].valueOf() - val && this[i].valueOf() - val < 1000*60*60*24)
+            return i;
+        return -1;
+      },
+      remove: function(i){
+        this.splice(i,1);
+      },
+      replace: function(new_array){
+        if (!new_array)
+          return;
+        if (!$.isArray(new_array))
+          new_array = [new_array];
+        this.clear();
+        this.push.apply(this, new_array);
+      },
+      clear: function(){
+        this.length = 0;
+      },
+      copy: function(){
+        var a = new DateArray();
+        a.replace(this);
+        return a;
+      }
+    };
+
+    return function(){
+      var a = [];
+      a.push.apply(a, arguments);
+      $.extend(a, extras);
+      return a;
+    };
+  })();
+
+
+  // Picker object
+
+  var Datepicker = function(element, options){
+    $.data(element, 'datepicker', this);
+
+    this._events = [];
+    this._secondaryEvents = [];
+
+    this._process_options(options);
+
+    this.dates = new DateArray();
+    this.viewDate = this.o.defaultViewDate;
+    this.focusDate = null;
+
+    this.element = $(element);
+    this.isInput = this.element.is('input');
+    this.inputField = this.isInput ? this.element : this.element.find('input');
+    this.component = this.element.hasClass('date') ? this.element.find('.add-on, .input-group-addon, .input-group-append, .input-group-prepend, .btn') : false;
+    if (this.component && this.component.length === 0)
+      this.component = false;
+    this.isInline = !this.component && this.element.is('div');
+
+    this.picker = $(DPGlobal.template);
+
+    // Checking templates and inserting
+    if (this._check_template(this.o.templates.leftArrow)) {
+      this.picker.find('.prev').html(this.o.templates.leftArrow);
+    }
+
+    if (this._check_template(this.o.templates.rightArrow)) {
+      this.picker.find('.next').html(this.o.templates.rightArrow);
+    }
+
+    this._buildEvents();
+    this._attachEvents();
+
+    if (this.isInline){
+      this.picker.addClass('datepicker-inline').appendTo(this.element);
+    }
+    else {
+      this.picker.addClass('datepicker-dropdown dropdown-menu');
+    }
+
+    if (this.o.rtl){
+      this.picker.addClass('datepicker-rtl');
+    }
+
+    if (this.o.calendarWeeks) {
+      this.picker.find('.datepicker-days .datepicker-switch, thead .datepicker-title, tfoot .today, tfoot .clear')
+        .attr('colspan', function(i, val){
+          return Number(val) + 1;
+        });
+    }
+
+    this._process_options({
+      startDate: this._o.startDate,
+      endDate: this._o.endDate,
+      daysOfWeekDisabled: this.o.daysOfWeekDisabled,
+      daysOfWeekHighlighted: this.o.daysOfWeekHighlighted,
+      datesDisabled: this.o.datesDisabled
+    });
+
+    this._allow_update = false;
+    this.setViewMode(this.o.startView);
+    this._allow_update = true;
+
+    this.fillDow();
+    this.fillMonths();
+
+    this.update();
+
+    if (this.isInline){
+      this.show();
+    }
+  };
+
+  Datepicker.prototype = {
+    constructor: Datepicker,
+
+    _resolveViewName: function(view){
+      $.each(DPGlobal.viewModes, function(i, viewMode){
+        if (view === i || $.inArray(view, viewMode.names) !== -1){
+          view = i;
+          return false;
+        }
+      });
+
+      return view;
+    },
+
+    _resolveDaysOfWeek: function(daysOfWeek){
+      if (!$.isArray(daysOfWeek))
+        daysOfWeek = daysOfWeek.split(/[,\s]*/);
+      return $.map(daysOfWeek, Number);
+    },
+
+    _check_template: function(tmp){
+      try {
+        // If empty
+        if (tmp === undefined || tmp === "") {
+          return false;
+        }
+        // If no html, everything ok
+        if ((tmp.match(/[<>]/g) || []).length <= 0) {
+          return true;
+        }
+        // Checking if html is fine
+        var jDom = $(tmp);
+        return jDom.length > 0;
+      }
+      catch (ex) {
+        return false;
+      }
+    },
+
+    _process_options: function(opts){
+      // Store raw options for reference
+      this._o = $.extend({}, this._o, opts);
+      // Processed options
+      var o = this.o = $.extend({}, this._o);
+
+      // Check if "de-DE" style date is available, if not language should
+      // fallback to 2 letter code eg "de"
+      var lang = o.language;
+      if (!dates[lang]){
+        lang = lang.split('-')[0];
+        if (!dates[lang])
+          lang = defaults.language;
+      }
+      o.language = lang;
+
+      // Retrieve view index from any aliases
+      o.startView = this._resolveViewName(o.startView);
+      o.minViewMode = this._resolveViewName(o.minViewMode);
+      o.maxViewMode = this._resolveViewName(o.maxViewMode);
+
+      // Check view is between min and max
+      o.startView = Math.max(this.o.minViewMode, Math.min(this.o.maxViewMode, o.startView));
+
+      // true, false, or Number > 0
+      if (o.multidate !== true){
+        o.multidate = Number(o.multidate) || false;
+        if (o.multidate !== false)
+          o.multidate = Math.max(0, o.multidate);
+      }
+      o.multidateSeparator = String(o.multidateSeparator);
+
+      o.weekStart %= 7;
+      o.weekEnd = (o.weekStart + 6) % 7;
+
+      var format = DPGlobal.parseFormat(o.format);
+      if (o.startDate !== -Infinity){
+        if (!!o.startDate){
+          if (o.startDate instanceof Date)
+            o.startDate = this._local_to_utc(this._zero_time(o.startDate));
+          else
+            o.startDate = DPGlobal.parseDate(o.startDate, format, o.language, o.assumeNearbyYear);
+        }
+        else {
+          o.startDate = -Infinity;
+        }
+      }
+      if (o.endDate !== Infinity){
+        if (!!o.endDate){
+          if (o.endDate instanceof Date)
+            o.endDate = this._local_to_utc(this._zero_time(o.endDate));
+          else
+            o.endDate = DPGlobal.parseDate(o.endDate, format, o.language, o.assumeNearbyYear);
+        }
+        else {
+          o.endDate = Infinity;
+        }
+      }
+
+      o.daysOfWeekDisabled = this._resolveDaysOfWeek(o.daysOfWeekDisabled||[]);
+      o.daysOfWeekHighlighted = this._resolveDaysOfWeek(o.daysOfWeekHighlighted||[]);
+
+      o.datesDisabled = o.datesDisabled||[];
+      if (!$.isArray(o.datesDisabled)) {
+        o.datesDisabled = o.datesDisabled.split(',');
+      }
+      o.datesDisabled = $.map(o.datesDisabled, function(d){
+        return DPGlobal.parseDate(d, format, o.language, o.assumeNearbyYear);
+      });
+
+      var plc = String(o.orientation).toLowerCase().split(/\s+/g),
+        _plc = o.orientation.toLowerCase();
+      plc = $.grep(plc, function(word){
+        return /^auto|left|right|top|bottom$/.test(word);
+      });
+      o.orientation = {x: 'auto', y: 'auto'};
+      if (!_plc || _plc === 'auto')
+        ; // no action
+      else if (plc.length === 1){
+        switch (plc[0]){
+          case 'top':
+          case 'bottom':
+            o.orientation.y = plc[0];
+            break;
+          case 'left':
+          case 'right':
+            o.orientation.x = plc[0];
+            break;
+        }
+      }
+      else {
+        _plc = $.grep(plc, function(word){
+          return /^left|right$/.test(word);
+        });
+        o.orientation.x = _plc[0] || 'auto';
+
+        _plc = $.grep(plc, function(word){
+          return /^top|bottom$/.test(word);
+        });
+        o.orientation.y = _plc[0] || 'auto';
+      }
+      if (o.defaultViewDate instanceof Date || typeof o.defaultViewDate === 'string') {
+        o.defaultViewDate = DPGlobal.parseDate(o.defaultViewDate, format, o.language, o.assumeNearbyYear);
+      } else if (o.defaultViewDate) {
+        var year = o.defaultViewDate.year || new Date().getFullYear();
+        var month = o.defaultViewDate.month || 0;
+        var day = o.defaultViewDate.day || 1;
+        o.defaultViewDate = UTCDate(year, month, day);
+      } else {
+        o.defaultViewDate = UTCToday();
+      }
+    },
+    _applyEvents: function(evs){
+      for (var i=0, el, ch, ev; i < evs.length; i++){
+        el = evs[i][0];
+        if (evs[i].length === 2){
+          ch = undefined;
+          ev = evs[i][1];
+        } else if (evs[i].length === 3){
+          ch = evs[i][1];
+          ev = evs[i][2];
+        }
+        el.on(ev, ch);
+      }
+    },
+    _unapplyEvents: function(evs){
+      for (var i=0, el, ev, ch; i < evs.length; i++){
+        el = evs[i][0];
+        if (evs[i].length === 2){
+          ch = undefined;
+          ev = evs[i][1];
+        } else if (evs[i].length === 3){
+          ch = evs[i][1];
+          ev = evs[i][2];
+        }
+        el.off(ev, ch);
+      }
+    },
+    _buildEvents: function(){
+      var events = {
+        keyup: $.proxy(function(e){
+          if ($.inArray(e.keyCode, [27, 37, 39, 38, 40, 32, 13, 9]) === -1)
+            this.update();
+        }, this),
+        keydown: $.proxy(this.keydown, this),
+        paste: $.proxy(this.paste, this)
+      };
+
+      if (this.o.showOnFocus === true) {
+        events.focus = $.proxy(this.show, this);
+      }
+
+      if (this.isInput) { // single input
+        this._events = [
+          [this.element, events]
+        ];
+      }
+      // component: input + button
+      else if (this.component && this.inputField.length) {
+        this._events = [
+          // For components that are not readonly, allow keyboard nav
+          [this.inputField, events],
+          [this.component, {
+            click: $.proxy(this.show, this)
+          }]
+        ];
+      }
+      else {
+        this._events = [
+          [this.element, {
+            click: $.proxy(this.show, this),
+            keydown: $.proxy(this.keydown, this)
+          }]
+        ];
+      }
+      this._events.push(
+        // Component: listen for blur on element descendants
+        [this.element, '*', {
+          blur: $.proxy(function(e){
+            this._focused_from = e.target;
+          }, this)
+        }],
+        // Input: listen for blur on element
+        [this.element, {
+          blur: $.proxy(function(e){
+            this._focused_from = e.target;
+          }, this)
+        }]
+      );
+
+      if (this.o.immediateUpdates) {
+        // Trigger input updates immediately on changed year/month
+        this._events.push([this.element, {
+          'changeYear changeMonth': $.proxy(function(e){
+            this.update(e.date);
+          }, this)
+        }]);
+      }
+
+      this._secondaryEvents = [
+        [this.picker, {
+          click: $.proxy(this.click, this)
+        }],
+        [this.picker, '.prev, .next', {
+          click: $.proxy(this.navArrowsClick, this)
+        }],
+        [this.picker, '.day:not(.disabled)', {
+          click: $.proxy(this.dayCellClick, this)
+        }],
+        [$(window), {
+          resize: $.proxy(this.place, this)
+        }],
+        [$(document), {
+          'mousedown touchstart': $.proxy(function(e){
+            // Clicked outside the datepicker, hide it
+            if (!(
+              this.element.is(e.target) ||
+              this.element.find(e.target).length ||
+              this.picker.is(e.target) ||
+              this.picker.find(e.target).length ||
+              this.isInline
+            )){
+              this.hide();
+            }
+          }, this)
+        }]
+      ];
+    },
+    _attachEvents: function(){
+      this._detachEvents();
+      this._applyEvents(this._events);
+    },
+    _detachEvents: function(){
+      this._unapplyEvents(this._events);
+    },
+    _attachSecondaryEvents: function(){
+      this._detachSecondaryEvents();
+      this._applyEvents(this._secondaryEvents);
+    },
+    _detachSecondaryEvents: function(){
+      this._unapplyEvents(this._secondaryEvents);
+    },
+    _trigger: function(event, altdate){
+      var date = altdate || this.dates.get(-1),
+        local_date = this._utc_to_local(date);
+
+      this.element.trigger({
+        type: event,
+        date: local_date,
+        viewMode: this.viewMode,
+        dates: $.map(this.dates, this._utc_to_local),
+        format: $.proxy(function(ix, format){
+          if (arguments.length === 0){
+            ix = this.dates.length - 1;
+            format = this.o.format;
+          } else if (typeof ix === 'string'){
+            format = ix;
+            ix = this.dates.length - 1;
+          }
+          format = format || this.o.format;
+          var date = this.dates.get(ix);
+          return DPGlobal.formatDate(date, format, this.o.language);
+        }, this)
+      });
+    },
+
+    show: function(){
+      if (this.inputField.is(':disabled') || (this.inputField.prop('readonly') && this.o.enableOnReadonly === false))
+        return;
+      if (!this.isInline)
+        this.picker.appendTo(this.o.container);
+      this.place();
+      this.picker.show();
+      this._attachSecondaryEvents();
+      this._trigger('show');
+      if ((window.navigator.msMaxTouchPoints || 'ontouchstart' in document) && this.o.disableTouchKeyboard) {
+        $(this.element).blur();
+      }
+      return this;
+    },
+
+    hide: function(){
+      if (this.isInline || !this.picker.is(':visible'))
+        return this;
+      this.focusDate = null;
+      this.picker.hide().detach();
+      this._detachSecondaryEvents();
+      this.setViewMode(this.o.startView);
+
+      if (this.o.forceParse && this.inputField.val())
+        this.setValue();
+      this._trigger('hide');
+      return this;
+    },
+
+    destroy: function(){
+      this.hide();
+      this._detachEvents();
+      this._detachSecondaryEvents();
+      this.picker.remove();
+      delete this.element.data().datepicker;
+      if (!this.isInput){
+        delete this.element.data().date;
+      }
+      return this;
+    },
+
+    paste: function(e){
+      var dateString;
+      if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.types
+        && $.inArray('text/plain', e.originalEvent.clipboardData.types) !== -1) {
+        dateString = e.originalEvent.clipboardData.getData('text/plain');
+      } else if (window.clipboardData) {
+        dateString = window.clipboardData.getData('Text');
+      } else {
+        return;
+      }
+      this.setDate(dateString);
+      this.update();
+      e.preventDefault();
+    },
+
+    _utc_to_local: function(utc){
+      if (!utc) {
+        return utc;
+      }
+
+      var local = new Date(utc.getTime() + (utc.getTimezoneOffset() * 60000));
+
+      if (local.getTimezoneOffset() !== utc.getTimezoneOffset()) {
+        local = new Date(utc.getTime() + (local.getTimezoneOffset() * 60000));
+      }
+
+      return local;
+    },
+    _local_to_utc: function(local){
+      return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));
+    },
+    _zero_time: function(local){
+      return local && new Date(local.getFullYear(), local.getMonth(), local.getDate());
+    },
+    _zero_utc_time: function(utc){
+      return utc && UTCDate(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate());
+    },
+
+    getDates: function(){
+      return $.map(this.dates, this._utc_to_local);
+    },
+
+    getUTCDates: function(){
+      return $.map(this.dates, function(d){
+        return new Date(d);
+      });
+    },
+
+    getDate: function(){
+      return this._utc_to_local(this.getUTCDate());
+    },
+
+    getUTCDate: function(){
+      var selected_date = this.dates.get(-1);
+      if (selected_date !== undefined) {
+        return new Date(selected_date);
+      } else {
+        return null;
+      }
+    },
+
+    clearDates: function(){
+      this.inputField.val('');
+      this.update();
+      this._trigger('changeDate');
+
+      if (this.o.autoclose) {
+        this.hide();
+      }
+    },
+
+    setDates: function(){
+      var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
+      this.update.apply(this, args);
+      this._trigger('changeDate');
+      this.setValue();
+      return this;
+    },
+
+    setUTCDates: function(){
+      var args = $.isArray(arguments[0]) ? arguments[0] : arguments;
+      this.setDates.apply(this, $.map(args, this._utc_to_local));
+      return this;
+    },
+
+    setDate: alias('setDates'),
+    setUTCDate: alias('setUTCDates'),
+    remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead'),
+
+    setValue: function(){
+      var formatted = this.getFormattedDate();
+      this.inputField.val(formatted);
+      return this;
+    },
+
+    getFormattedDate: function(format){
+      if (format === undefined)
+        format = this.o.format;
+
+      var lang = this.o.language;
+      return $.map(this.dates, function(d){
+        return DPGlobal.formatDate(d, format, lang);
+      }).join(this.o.multidateSeparator);
+    },
+
+    getStartDate: function(){
+      return this.o.startDate;
+    },
+
+    setStartDate: function(startDate){
+      this._process_options({startDate: startDate});
+      this.update();
+      this.updateNavArrows();
+      return this;
+    },
+
+    getEndDate: function(){
+      return this.o.endDate;
+    },
+
+    setEndDate: function(endDate){
+      this._process_options({endDate: endDate});
+      this.update();
+      this.updateNavArrows();
+      return this;
+    },
+
+    setDaysOfWeekDisabled: function(daysOfWeekDisabled){
+      this._process_options({daysOfWeekDisabled: daysOfWeekDisabled});
+      this.update();
+      return this;
+    },
+
+    setDaysOfWeekHighlighted: function(daysOfWeekHighlighted){
+      this._process_options({daysOfWeekHighlighted: daysOfWeekHighlighted});
+      this.update();
+      return this;
+    },
+
+    setDatesDisabled: function(datesDisabled){
+      this._process_options({datesDisabled: datesDisabled});
+      this.update();
+      return this;
+    },
+
+    place: function(){
+      if (this.isInline)
+        return this;
+      var calendarWidth = this.picker.outerWidth(),
+        calendarHeight = this.picker.outerHeight(),
+        visualPadding = 10,
+        container = $(this.o.container),
+        windowWidth = container.width(),
+        scrollTop = this.o.container === 'body' ? $(document).scrollTop() : container.scrollTop(),
+        appendOffset = container.offset();
+
+      var parentsZindex = [0];
+      this.element.parents().each(function(){
+        var itemZIndex = $(this).css('z-index');
+        if (itemZIndex !== 'auto' && Number(itemZIndex) !== 0) parentsZindex.push(Number(itemZIndex));
+      });
+      var zIndex = Math.max.apply(Math, parentsZindex) + this.o.zIndexOffset;
+      var offset = this.component ? this.component.parent().offset() : this.element.offset();
+      var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);
+      var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);
+      var left = offset.left - appendOffset.left;
+      var top = offset.top - appendOffset.top;
+
+      if (this.o.container !== 'body') {
+        top += scrollTop;
+      }
+
+      this.picker.removeClass(
+        'datepicker-orient-top datepicker-orient-bottom '+
+        'datepicker-orient-right datepicker-orient-left'
+      );
+
+      if (this.o.orientation.x !== 'auto'){
+        this.picker.addClass('datepicker-orient-' + this.o.orientation.x);
+        if (this.o.orientation.x === 'right')
+          left -= calendarWidth - width;
+      }
+      // auto x orientation is best-placement: if it crosses a window
+      // edge, fudge it sideways
+      else {
+        if (offset.left < 0) {
+          // component is outside the window on the left side. Move it into visible range
+          this.picker.addClass('datepicker-orient-left');
+          left -= offset.left - visualPadding;
+        } else if (left + calendarWidth > windowWidth) {
+          // the calendar passes the widow right edge. Align it to component right side
+          this.picker.addClass('datepicker-orient-right');
+          left += width - calendarWidth;
+        } else {
+          if (this.o.rtl) {
+            // Default to right
+            this.picker.addClass('datepicker-orient-right');
+          } else {
+            // Default to left
+            this.picker.addClass('datepicker-orient-left');
+          }
+        }
+      }
+
+      // auto y orientation is best-situation: top or bottom, no fudging,
+      // decision based on which shows more of the calendar
+      var yorient = this.o.orientation.y,
+        top_overflow;
+      if (yorient === 'auto'){
+        top_overflow = -scrollTop + top - calendarHeight;
+        yorient = top_overflow < 0 ? 'bottom' : 'top';
+      }
+
+      this.picker.addClass('datepicker-orient-' + yorient);
+      if (yorient === 'top')
+        top -= calendarHeight + parseInt(this.picker.css('padding-top'));
+      else
+        top += height;
+
+      if (this.o.rtl) {
+        var right = windowWidth - (left + width);
+        this.picker.css({
+          top: top,
+          right: right,
+          zIndex: zIndex
+        });
+      } else {
+        this.picker.css({
+          top: top,
+          left: left,
+          zIndex: zIndex
+        });
+      }
+      return this;
+    },
+
+    _allow_update: true,
+    update: function(){
+      if (!this._allow_update)
+        return this;
+
+      var oldDates = this.dates.copy(),
+        dates = [],
+        fromArgs = false;
+      if (arguments.length){
+        $.each(arguments, $.proxy(function(i, date){
+          if (date instanceof Date)
+            date = this._local_to_utc(date);
+          dates.push(date);
+        }, this));
+        fromArgs = true;
+      } else {
+        dates = this.isInput
+          ? this.element.val()
+          : this.element.data('date') || this.inputField.val();
+        if (dates && this.o.multidate)
+          dates = dates.split(this.o.multidateSeparator);
+        else
+          dates = [dates];
+        delete this.element.data().date;
+      }
+
+      dates = $.map(dates, $.proxy(function(date){
+        return DPGlobal.parseDate(date, this.o.format, this.o.language, this.o.assumeNearbyYear);
+      }, this));
+      dates = $.grep(dates, $.proxy(function(date){
+        return (
+          !this.dateWithinRange(date) ||
+          !date
+        );
+      }, this), true);
+      this.dates.replace(dates);
+
+      if (this.o.updateViewDate) {
+        if (this.dates.length)
+          this.viewDate = new Date(this.dates.get(-1));
+        else if (this.viewDate < this.o.startDate)
+          this.viewDate = new Date(this.o.startDate);
+        else if (this.viewDate > this.o.endDate)
+          this.viewDate = new Date(this.o.endDate);
+        else
+          this.viewDate = this.o.defaultViewDate;
+      }
+
+      if (fromArgs){
+        // setting date by clicking
+        this.setValue();
+        this.element.change();
+      }
+      else if (this.dates.length){
+        // setting date by typing
+        if (String(oldDates) !== String(this.dates) && fromArgs) {
+          this._trigger('changeDate');
+          this.element.change();
+        }
+      }
+      if (!this.dates.length && oldDates.length) {
+        this._trigger('clearDate');
+        this.element.change();
+      }
+
+      this.fill();
+      return this;
+    },
+
+    fillDow: function(){
+      if (this.o.showWeekDays) {
+        var dowCnt = this.o.weekStart,
+          html = '<tr>';
+        if (this.o.calendarWeeks){
+          html += '<th class="cw">&#160;</th>';
+        }
+        while (dowCnt < this.o.weekStart + 7){
+          html += '<th class="dow';
+          if ($.inArray(dowCnt, this.o.daysOfWeekDisabled) !== -1)
+            html += ' disabled';
+          html += '">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';
+        }
+        html += '</tr>';
+        this.picker.find('.datepicker-days thead').append(html);
+      }
+    },
+
+    fillMonths: function(){
+      var localDate = this._utc_to_local(this.viewDate);
+      var html = '';
+      var focused;
+      for (var i = 0; i < 12; i++){
+        focused = localDate && localDate.getMonth() === i ? ' focused' : '';
+        html += '<span class="month' + focused + '">' + dates[this.o.language].monthsShort[i] + '</span>';
+      }
+      this.picker.find('.datepicker-months td').html(html);
+    },
+
+    setRange: function(range){
+      if (!range || !range.length)
+        delete this.range;
+      else
+        this.range = $.map(range, function(d){
+          return d.valueOf();
+        });
+      this.fill();
+    },
+
+    getClassNames: function(date){
+      var cls = [],
+        year = this.viewDate.getUTCFullYear(),
+        month = this.viewDate.getUTCMonth(),
+        today = UTCToday();
+      if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){
+        cls.push('old');
+      } else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){
+        cls.push('new');
+      }
+      if (this.focusDate && date.valueOf() === this.focusDate.valueOf())
+        cls.push('focused');
+      // Compare internal UTC date with UTC today, not local today
+      if (this.o.todayHighlight && isUTCEquals(date, today)) {
+        cls.push('today');
+      }
+      if (this.dates.contains(date) !== -1)
+        cls.push('active');
+      if (!this.dateWithinRange(date)){
+        cls.push('disabled');
+      }
+      if (this.dateIsDisabled(date)){
+        cls.push('disabled', 'disabled-date');
+      }
+      if ($.inArray(date.getUTCDay(), this.o.daysOfWeekHighlighted) !== -1){
+        cls.push('highlighted');
+      }
+
+      if (this.range){
+        if (date > this.range[0] && date < this.range[this.range.length-1]){
+          cls.push('range');
+        }
+        if ($.inArray(date.valueOf(), this.range) !== -1){
+          cls.push('selected');
+        }
+        if (date.valueOf() === this.range[0]){
+          cls.push('range-start');
+        }
+        if (date.valueOf() === this.range[this.range.length-1]){
+          cls.push('range-end');
+        }
+      }
+      return cls;
+    },
+
+    _fill_yearsView: function(selector, cssClass, factor, year, startYear, endYear, beforeFn){
+      var html = '';
+      var step = factor / 10;
+      var view = this.picker.find(selector);
+      var startVal = Math.floor(year / factor) * factor;
+      var endVal = startVal + step * 9;
+      var focusedVal = Math.floor(this.viewDate.getFullYear() / step) * step;
+      var selected = $.map(this.dates, function(d){
+        return Math.floor(d.getUTCFullYear() / step) * step;
+      });
+
+      var classes, tooltip, before;
+      for (var currVal = startVal - step; currVal <= endVal + step; currVal += step) {
+        classes = [cssClass];
+        tooltip = null;
+
+        if (currVal === startVal - step) {
+          classes.push('old');
+        } else if (currVal === endVal + step) {
+          classes.push('new');
+        }
+        if ($.inArray(currVal, selected) !== -1) {
+          classes.push('active');
+        }
+        if (currVal < startYear || currVal > endYear) {
+          classes.push('disabled');
+        }
+        if (currVal === focusedVal) {
+          classes.push('focused');
+        }
+
+        if (beforeFn !== $.noop) {
+          before = beforeFn(new Date(currVal, 0, 1));
+          if (before === undefined) {
+            before = {};
+          } else if (typeof before === 'boolean') {
+            before = {enabled: before};
+          } else if (typeof before === 'string') {
+            before = {classes: before};
+          }
+          if (before.enabled === false) {
+            classes.push('disabled');
+          }
+          if (before.classes) {
+            classes = classes.concat(before.classes.split(/\s+/));
+          }
+          if (before.tooltip) {
+            tooltip = before.tooltip;
+          }
+        }
+
+        html += '<span class="' + classes.join(' ') + '"' + (tooltip ? ' title="' + tooltip + '"' : '') + '>' + currVal + '</span>';
+      }
+
+      view.find('.datepicker-switch').text(startVal + '-' + endVal);
+      view.find('td').html(html);
+    },
+
+    fill: function(){
+      var d = new Date(this.viewDate),
+        year = d.getUTCFullYear(),
+        month = d.getUTCMonth(),
+        startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
+        startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
+        endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
+        endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
+        todaytxt = dates[this.o.language].today || dates['en'].today || '',
+        cleartxt = dates[this.o.language].clear || dates['en'].clear || '',
+        titleFormat = dates[this.o.language].titleFormat || dates['en'].titleFormat,
+        todayDate = UTCToday(),
+        titleBtnVisible = (this.o.todayBtn === true || this.o.todayBtn === 'linked') && todayDate >= this.o.startDate && todayDate <= this.o.endDate && !this.weekOfDateIsDisabled(todayDate),
+        tooltip,
+        before;
+      if (isNaN(year) || isNaN(month))
+        return;
+      this.picker.find('.datepicker-days .datepicker-switch')
+        .text(DPGlobal.formatDate(d, titleFormat, this.o.language));
+      this.picker.find('tfoot .today')
+        .text(todaytxt)
+        .css('display', titleBtnVisible ? 'table-cell' : 'none');
+      this.picker.find('tfoot .clear')
+        .text(cleartxt)
+        .css('display', this.o.clearBtn === true ? 'table-cell' : 'none');
+      this.picker.find('thead .datepicker-title')
+        .text(this.o.title)
+        .css('display', typeof this.o.title === 'string' && this.o.title !== '' ? 'table-cell' : 'none');
+      this.updateNavArrows();
+      this.fillMonths();
+      var prevMonth = UTCDate(year, month, 0),
+        day = prevMonth.getUTCDate();
+      prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);
+      var nextMonth = new Date(prevMonth);
+      if (prevMonth.getUTCFullYear() < 100){
+        nextMonth.setUTCFullYear(prevMonth.getUTCFullYear());
+      }
+      nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
+      nextMonth = nextMonth.valueOf();
+      var html = [];
+      var weekDay, clsName;
+      while (prevMonth.valueOf() < nextMonth){
+        weekDay = prevMonth.getUTCDay();
+        if (weekDay === this.o.weekStart){
+          html.push('<tr>');
+          if (this.o.calendarWeeks){
+            // ISO 8601: First week contains first thursday.
+            // ISO also states week starts on Monday, but we can be more abstract here.
+            var
+              // Start of current week: based on weekstart/current date
+              ws = new Date(+prevMonth + (this.o.weekStart - weekDay - 7) % 7 * 864e5),
+              // Thursday of this week
+              th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),
+              // First Thursday of year, year from thursday
+              yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay()) % 7 * 864e5),
+              // Calendar week: ms between thursdays, div ms per day, div 7 days
+              calWeek = (th - yth) / 864e5 / 7 + 1;
+            html.push('<td class="cw">'+ calWeek +'</td>');
+          }
+        }
+        clsName = this.getClassNames(prevMonth);
+        clsName.push('day');
+
+        var content = prevMonth.getUTCDate();
+
+        if (this.o.beforeShowDay !== $.noop){
+          before = this.o.beforeShowDay(this._utc_to_local(prevMonth));
+          if (before === undefined)
+            before = {};
+          else if (typeof before === 'boolean')
+            before = {enabled: before};
+          else if (typeof before === 'string')
+            before = {classes: before};
+          if (before.enabled === false)
+            clsName.push('disabled');
+          if (before.classes)
+            clsName = clsName.concat(before.classes.split(/\s+/));
+          if (before.tooltip)
+            tooltip = before.tooltip;
+          if (before.content)
+            content = before.content;
+        }
+
+        //Check if uniqueSort exists (supported by jquery >=1.12 and >=2.2)
+        //Fallback to unique function for older jquery versions
+        if ($.isFunction($.uniqueSort)) {
+          clsName = $.uniqueSort(clsName);
+        } else {
+          clsName = $.unique(clsName);
+        }
+
+        html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + ' data-date="' + prevMonth.getTime().toString() + '">' + content + '</td>');
+        tooltip = null;
+        if (weekDay === this.o.weekEnd){
+          html.push('</tr>');
+        }
+        prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
+      }
+      this.picker.find('.datepicker-days tbody').html(html.join(''));
+
+      var monthsTitle = dates[this.o.language].monthsTitle || dates['en'].monthsTitle || 'Months';
+      var months = this.picker.find('.datepicker-months')
+        .find('.datepicker-switch')
+        .text(this.o.maxViewMode < 2 ? monthsTitle : year)
+        .end()
+        .find('tbody span').removeClass('active');
+
+      $.each(this.dates, function(i, d){
+        if (d.getUTCFullYear() === year)
+          months.eq(d.getUTCMonth()).addClass('active');
+      });
+
+      if (year < startYear || year > endYear){
+        months.addClass('disabled');
+      }
+      if (year === startYear){
+        months.slice(0, startMonth).addClass('disabled');
+      }
+      if (year === endYear){
+        months.slice(endMonth+1).addClass('disabled');
+      }
+
+      if (this.o.beforeShowMonth !== $.noop){
+        var that = this;
+        $.each(months, function(i, month){
+          var moDate = new Date(year, i, 1);
+          var before = that.o.beforeShowMonth(moDate);
+          if (before === undefined)
+            before = {};
+          else if (typeof before === 'boolean')
+            before = {enabled: before};
+          else if (typeof before === 'string')
+            before = {classes: before};
+          if (before.enabled === false && !$(month).hasClass('disabled'))
+            $(month).addClass('disabled');
+          if (before.classes)
+            $(month).addClass(before.classes);
+          if (before.tooltip)
+            $(month).prop('title', before.tooltip);
+        });
+      }
+
+      // Generating decade/years picker
+      this._fill_yearsView(
+        '.datepicker-years',
+        'year',
+        10,
+        year,
+        startYear,
+        endYear,
+        this.o.beforeShowYear
+      );
+
+      // Generating century/decades picker
+      this._fill_yearsView(
+        '.datepicker-decades',
+        'decade',
+        100,
+        year,
+        startYear,
+        endYear,
+        this.o.beforeShowDecade
+      );
+
+      // Generating millennium/centuries picker
+      this._fill_yearsView(
+        '.datepicker-centuries',
+        'century',
+        1000,
+        year,
+        startYear,
+        endYear,
+        this.o.beforeShowCentury
+      );
+    },
+
+    updateNavArrows: function(){
+      if (!this._allow_update)
+        return;
+
+      var d = new Date(this.viewDate),
+        year = d.getUTCFullYear(),
+        month = d.getUTCMonth(),
+        startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,
+        startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,
+        endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,
+        endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,
+        prevIsDisabled,
+        nextIsDisabled,
+        factor = 1;
+      switch (this.viewMode){
+        case 4:
+          factor *= 10;
+        /* falls through */
+        case 3:
+          factor *= 10;
+        /* falls through */
+        case 2:
+          factor *= 10;
+        /* falls through */
+        case 1:
+          prevIsDisabled = Math.floor(year / factor) * factor <= startYear;
+          nextIsDisabled = Math.floor(year / factor) * factor + factor > endYear;
+          break;
+        case 0:
+          prevIsDisabled = year <= startYear && month <= startMonth;
+          nextIsDisabled = year >= endYear && month >= endMonth;
+          break;
+      }
+
+      this.picker.find('.prev').toggleClass('disabled', prevIsDisabled);
+      this.picker.find('.next').toggleClass('disabled', nextIsDisabled);
+    },
+
+    click: function(e){
+      e.preventDefault();
+      e.stopPropagation();
+
+      var target, dir, day, year, month;
+      target = $(e.target);
+
+      // Clicked on the switch
+      if (target.hasClass('datepicker-switch') && this.viewMode !== this.o.maxViewMode){
+        this.setViewMode(this.viewMode + 1);
+      }
+
+      // Clicked on today button
+      if (target.hasClass('today') && !target.hasClass('day')){
+        this.setViewMode(0);
+        this._setDate(UTCToday(), this.o.todayBtn === 'linked' ? null : 'view');
+      }
+
+      // Clicked on clear button
+      if (target.hasClass('clear')){
+        this.clearDates();
+      }
+
+      if (!target.hasClass('disabled')){
+        // Clicked on a month, year, decade, century
+        if (target.hasClass('month')
+          || target.hasClass('year')
+          || target.hasClass('decade')
+          || target.hasClass('century')) {
+          this.viewDate.setUTCDate(1);
+
+          day = 1;
+          if (this.viewMode === 1){
+            month = target.parent().find('span').index(target);
+            year = this.viewDate.getUTCFullYear();
+            this.viewDate.setUTCMonth(month);
+          } else {
+            month = 0;
+            year = Number(target.text());
+            this.viewDate.setUTCFullYear(year);
+          }
+
+          this._trigger(DPGlobal.viewModes[this.viewMode - 1].e, this.viewDate);
+
+          if (this.viewMode === this.o.minViewMode){
+            this._setDate(UTCDate(year, month, day));
+          } else {
+            this.setViewMode(this.viewMode - 1);
+            this.fill();
+          }
+        }
+      }
+
+      if (this.picker.is(':visible') && this._focused_from){
+        this._focused_from.focus();
+      }
+      delete this._focused_from;
+    },
+
+    dayCellClick: function(e){
+      var $target = $(e.currentTarget);
+      var timestamp = $target.data('date');
+      var date = new Date(timestamp);
+
+      if (this.o.updateViewDate) {
+        if (date.getUTCFullYear() !== this.viewDate.getUTCFullYear()) {
+          this._trigger('changeYear', this.viewDate);
+        }
+
+        if (date.getUTCMonth() !== this.viewDate.getUTCMonth()) {
+          this._trigger('changeMonth', this.viewDate);
+        }
+      }
+      this._setDate(date);
+    },
+
+    // Clicked on prev or next
+    navArrowsClick: function(e){
+      var $target = $(e.currentTarget);
+      var dir = $target.hasClass('prev') ? -1 : 1;
+      if (this.viewMode !== 0){
+        dir *= DPGlobal.viewModes[this.viewMode].navStep * 12;
+      }
+      this.viewDate = this.moveMonth(this.viewDate, dir);
+      this._trigger(DPGlobal.viewModes[this.viewMode].e, this.viewDate);
+      this.fill();
+    },
+
+    _toggle_multidate: function(date){
+      var ix = this.dates.contains(date);
+      if (!date){
+        this.dates.clear();
+      }
+
+      if (ix !== -1){
+        if (this.o.multidate === true || this.o.multidate > 1 || this.o.toggleActive){
+          this.dates.remove(ix);
+        }
+      } else if (this.o.multidate === false) {
+        this.dates.clear();
+        this.dates.push(date);
+      }
+      else {
+        this.dates.push(date);
+      }
+
+      if (typeof this.o.multidate === 'number')
+        while (this.dates.length > this.o.multidate)
+          this.dates.remove(0);
+    },
+
+    _setDate: function(date, which){
+      if (!which || which === 'date')
+        this._toggle_multidate(date && new Date(date));
+      if ((!which && this.o.updateViewDate) || which === 'view')
+        this.viewDate = date && new Date(date);
+
+      this.fill();
+      this.setValue();
+      if (!which || which !== 'view') {
+        this._trigger('changeDate');
+      }
+      this.inputField.trigger('change');
+      if (this.o.autoclose && (!which || which === 'date')){
+        this.hide();
+      }
+    },
+
+    moveDay: function(date, dir){
+      var newDate = new Date(date);
+      newDate.setUTCDate(date.getUTCDate() + dir);
+
+      return newDate;
+    },
+
+    moveWeek: function(date, dir){
+      return this.moveDay(date, dir * 7);
+    },
+
+    moveMonth: function(date, dir){
+      if (!isValidDate(date))
+        return this.o.defaultViewDate;
+      if (!dir)
+        return date;
+      var new_date = new Date(date.valueOf()),
+        day = new_date.getUTCDate(),
+        month = new_date.getUTCMonth(),
+        mag = Math.abs(dir),
+        new_month, test;
+      dir = dir > 0 ? 1 : -1;
+      if (mag === 1){
+        test = dir === -1
+          // If going back one month, make sure month is not current month
+          // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
+          ? function(){
+            return new_date.getUTCMonth() === month;
+          }
+          // If going forward one month, make sure month is as expected
+          // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
+          : function(){
+            return new_date.getUTCMonth() !== new_month;
+          };
+        new_month = month + dir;
+        new_date.setUTCMonth(new_month);
+        // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
+        new_month = (new_month + 12) % 12;
+      }
+      else {
+        // For magnitudes >1, move one month at a time...
+        for (var i=0; i < mag; i++)
+          // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
+          new_date = this.moveMonth(new_date, dir);
+        // ...then reset the day, keeping it in the new month
+        new_month = new_date.getUTCMonth();
+        new_date.setUTCDate(day);
+        test = function(){
+          return new_month !== new_date.getUTCMonth();
+        };
+      }
+      // Common date-resetting loop -- if date is beyond end of month, make it
+      // end of month
+      while (test()){
+        new_date.setUTCDate(--day);
+        new_date.setUTCMonth(new_month);
+      }
+      return new_date;
+    },
+
+    moveYear: function(date, dir){
+      return this.moveMonth(date, dir*12);
+    },
+
+    moveAvailableDate: function(date, dir, fn){
+      do {
+        date = this[fn](date, dir);
+
+        if (!this.dateWithinRange(date))
+          return false;
+
+        fn = 'moveDay';
+      }
+      while (this.dateIsDisabled(date));
+
+      return date;
+    },
+
+    weekOfDateIsDisabled: function(date){
+      return $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1;
+    },
+
+    dateIsDisabled: function(date){
+      return (
+        this.weekOfDateIsDisabled(date) ||
+        $.grep(this.o.datesDisabled, function(d){
+          return isUTCEquals(date, d);
+        }).length > 0
+      );
+    },
+
+    dateWithinRange: function(date){
+      return date >= this.o.startDate && date <= this.o.endDate;
+    },
+
+    keydown: function(e){
+      if (!this.picker.is(':visible')){
+        if (e.keyCode === 40 || e.keyCode === 27) { // allow down to re-show picker
+          this.show();
+          e.stopPropagation();
+        }
+        return;
+      }
+      var dateChanged = false,
+        dir, newViewDate,
+        focusDate = this.focusDate || this.viewDate;
+      switch (e.keyCode){
+        case 27: // escape
+          if (this.focusDate){
+            this.focusDate = null;
+            this.viewDate = this.dates.get(-1) || this.viewDate;
+            this.fill();
+          }
+          else
+            this.hide();
+          e.preventDefault();
+          e.stopPropagation();
+          break;
+        case 37: // left
+        case 38: // up
+        case 39: // right
+        case 40: // down
+          if (!this.o.keyboardNavigation || this.o.daysOfWeekDisabled.length === 7)
+            break;
+          dir = e.keyCode === 37 || e.keyCode === 38 ? -1 : 1;
+          if (this.viewMode === 0) {
+            if (e.ctrlKey){
+              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
+
+              if (newViewDate)
+                this._trigger('changeYear', this.viewDate);
+            } else if (e.shiftKey){
+              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
+
+              if (newViewDate)
+                this._trigger('changeMonth', this.viewDate);
+            } else if (e.keyCode === 37 || e.keyCode === 39){
+              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveDay');
+            } else if (!this.weekOfDateIsDisabled(focusDate)){
+              newViewDate = this.moveAvailableDate(focusDate, dir, 'moveWeek');
+            }
+          } else if (this.viewMode === 1) {
+            if (e.keyCode === 38 || e.keyCode === 40) {
+              dir = dir * 4;
+            }
+            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveMonth');
+          } else if (this.viewMode === 2) {
+            if (e.keyCode === 38 || e.keyCode === 40) {
+              dir = dir * 4;
+            }
+            newViewDate = this.moveAvailableDate(focusDate, dir, 'moveYear');
+          }
+          if (newViewDate){
+            this.focusDate = this.viewDate = newViewDate;
+            this.setValue();
+            this.fill();
+            e.preventDefault();
+          }
+          break;
+        case 13: // enter
+          if (!this.o.forceParse)
+            break;
+          focusDate = this.focusDate || this.dates.get(-1) || this.viewDate;
+          if (this.o.keyboardNavigation) {
+            this._toggle_multidate(focusDate);
+            dateChanged = true;
+          }
+          this.focusDate = null;
+          this.viewDate = this.dates.get(-1) || this.viewDate;
+          this.setValue();
+          this.fill();
+          if (this.picker.is(':visible')){
+            e.preventDefault();
+            e.stopPropagation();
+            if (this.o.autoclose)
+              this.hide();
+          }
+          break;
+        case 9: // tab
+          this.focusDate = null;
+          this.viewDate = this.dates.get(-1) || this.viewDate;
+          this.fill();
+          this.hide();
+          break;
+      }
+      if (dateChanged){
+        if (this.dates.length)
+          this._trigger('changeDate');
+        else
+          this._trigger('clearDate');
+        this.inputField.trigger('change');
+      }
+    },
+
+    setViewMode: function(viewMode){
+      this.viewMode = viewMode;
+      this.picker
+        .children('div')
+        .hide()
+        .filter('.datepicker-' + DPGlobal.viewModes[this.viewMode].clsName)
+        .show();
+      this.updateNavArrows();
+      this._trigger('changeViewMode', new Date(this.viewDate));
+    }
+  };
+
+  var DateRangePicker = function(element, options){
+    $.data(element, 'datepicker', this);
+    this.element = $(element);
+    this.inputs = $.map(options.inputs, function(i){
+      return i.jquery ? i[0] : i;
+    });
+    delete options.inputs;
+
+    this.keepEmptyValues = options.keepEmptyValues;
+    delete options.keepEmptyValues;
+
+    datepickerPlugin.call($(this.inputs), options)
+      .on('changeDate', $.proxy(this.dateUpdated, this));
+
+    this.pickers = $.map(this.inputs, function(i){
+      return $.data(i, 'datepicker');
+    });
+    this.updateDates();
+  };
+  DateRangePicker.prototype = {
+    updateDates: function(){
+      this.dates = $.map(this.pickers, function(i){
+        return i.getUTCDate();
+      });
+      this.updateRanges();
+    },
+    updateRanges: function(){
+      var range = $.map(this.dates, function(d){
+        return d.valueOf();
+      });
+      $.each(this.pickers, function(i, p){
+        p.setRange(range);
+      });
+    },
+    clearDates: function(){
+      $.each(this.pickers, function(i, p){
+        p.clearDates();
+      });
+    },
+    dateUpdated: function(e){
+      // `this.updating` is a workaround for preventing infinite recursion
+      // between `changeDate` triggering and `setUTCDate` calling.  Until
+      // there is a better mechanism.
+      if (this.updating)
+        return;
+      this.updating = true;
+
+      var dp = $.data(e.target, 'datepicker');
+
+      if (dp === undefined) {
+        return;
+      }
+
+      var new_date = dp.getUTCDate(),
+        keep_empty_values = this.keepEmptyValues,
+        i = $.inArray(e.target, this.inputs),
+        j = i - 1,
+        k = i + 1,
+        l = this.inputs.length;
+      if (i === -1)
+        return;
+
+      $.each(this.pickers, function(i, p){
+        if (!p.getUTCDate() && (p === dp || !keep_empty_values))
+          p.setUTCDate(new_date);
+      });
+
+      if (new_date < this.dates[j]){
+        // Date being moved earlier/left
+        while (j >= 0 && new_date < this.dates[j]){
+          this.pickers[j--].setUTCDate(new_date);
+        }
+      } else if (new_date > this.dates[k]){
+        // Date being moved later/right
+        while (k < l && new_date > this.dates[k]){
+          this.pickers[k++].setUTCDate(new_date);
+        }
+      }
+      this.updateDates();
+
+      delete this.updating;
+    },
+    destroy: function(){
+      $.map(this.pickers, function(p){ p.destroy(); });
+      $(this.inputs).off('changeDate', this.dateUpdated);
+      delete this.element.data().datepicker;
+    },
+    remove: alias('destroy', 'Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead')
+  };
+
+  function opts_from_el(el, prefix){
+    // Derive options from element data-attrs
+    var data = $(el).data(),
+      out = {}, inkey,
+      replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');
+    prefix = new RegExp('^' + prefix.toLowerCase());
+    function re_lower(_,a){
+      return a.toLowerCase();
+    }
+    for (var key in data)
+      if (prefix.test(key)){
+        inkey = key.replace(replace, re_lower);
+        out[inkey] = data[key];
+      }
+    return out;
+  }
+
+  function opts_from_locale(lang){
+    // Derive options from locale plugins
+    var out = {};
+    // Check if "de-DE" style date is available, if not language should
+    // fallback to 2 letter code eg "de"
+    if (!dates[lang]){
+      lang = lang.split('-')[0];
+      if (!dates[lang])
+        return;
+    }
+    var d = dates[lang];
+    $.each(locale_opts, function(i,k){
+      if (k in d)
+        out[k] = d[k];
+    });
+    return out;
+  }
+
+  var old = $.fn.datepicker;
+  var datepickerPlugin = function(option){
+    var args = Array.apply(null, arguments);
+    args.shift();
+    var internal_return;
+    this.each(function(){
+      var $this = $(this),
+        data = $this.data('datepicker'),
+        options = typeof option === 'object' && option;
+      if (!data){
+        var elopts = opts_from_el(this, 'date'),
+          // Preliminary otions
+          xopts = $.extend({}, defaults, elopts, options),
+          locopts = opts_from_locale(xopts.language),
+          // Options priority: js args, data-attrs, locales, defaults
+          opts = $.extend({}, defaults, locopts, elopts, options);
+        if ($this.hasClass('input-daterange') || opts.inputs){
+          $.extend(opts, {
+            inputs: opts.inputs || $this.find('input').toArray()
+          });
+          data = new DateRangePicker(this, opts);
+        }
+        else {
+          data = new Datepicker(this, opts);
+        }
+        $this.data('datepicker', data);
+      }
+      if (typeof option === 'string' && typeof data[option] === 'function'){
+        internal_return = data[option].apply(data, args);
+      }
+    });
+
+    if (
+      internal_return === undefined ||
+      internal_return instanceof Datepicker ||
+      internal_return instanceof DateRangePicker
+    )
+      return this;
+
+    if (this.length > 1)
+      throw new Error('Using only allowed for the collection of a single element (' + option + ' function)');
+    else
+      return internal_return;
+  };
+  $.fn.datepicker = datepickerPlugin;
+
+  var defaults = $.fn.datepicker.defaults = {
+    assumeNearbyYear: false,
+    autoclose: false,
+    beforeShowDay: $.noop,
+    beforeShowMonth: $.noop,
+    beforeShowYear: $.noop,
+    beforeShowDecade: $.noop,
+    beforeShowCentury: $.noop,
+    calendarWeeks: false,
+    clearBtn: false,
+    toggleActive: false,
+    daysOfWeekDisabled: [],
+    daysOfWeekHighlighted: [],
+    datesDisabled: [],
+    endDate: Infinity,
+    forceParse: true,
+    format: 'mm/dd/yyyy',
+    keepEmptyValues: false,
+    keyboardNavigation: true,
+    language: 'en',
+    minViewMode: 0,
+    maxViewMode: 4,
+    multidate: false,
+    multidateSeparator: ',',
+    orientation: "auto",
+    rtl: false,
+    startDate: -Infinity,
+    startView: 0,
+    todayBtn: false,
+    todayHighlight: false,
+    updateViewDate: true,
+    weekStart: 0,
+    disableTouchKeyboard: false,
+    enableOnReadonly: true,
+    showOnFocus: true,
+    zIndexOffset: 10,
+    container: 'body',
+    immediateUpdates: false,
+    title: '',
+    templates: {
+      leftArrow: '&#x00AB;',
+      rightArrow: '&#x00BB;'
+    },
+    showWeekDays: true
+  };
+  var locale_opts = $.fn.datepicker.locale_opts = [
+    'format',
+    'rtl',
+    'weekStart'
+  ];
+  $.fn.datepicker.Constructor = Datepicker;
+  var dates = $.fn.datepicker.dates = {
+    en: {
+      days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+      daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+      daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
+      months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+      monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+      today: "Today",
+      clear: "Clear",
+      titleFormat: "MM yyyy"
+    }
+  };
+
+  var DPGlobal = {
+    viewModes: [
+      {
+        names: ['days', 'month'],
+        clsName: 'days',
+        e: 'changeMonth'
+      },
+      {
+        names: ['months', 'year'],
+        clsName: 'months',
+        e: 'changeYear',
+        navStep: 1
+      },
+      {
+        names: ['years', 'decade'],
+        clsName: 'years',
+        e: 'changeDecade',
+        navStep: 10
+      },
+      {
+        names: ['decades', 'century'],
+        clsName: 'decades',
+        e: 'changeCentury',
+        navStep: 100
+      },
+      {
+        names: ['centuries', 'millennium'],
+        clsName: 'centuries',
+        e: 'changeMillennium',
+        navStep: 1000
+      }
+    ],
+    validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,
+    nonpunctuation: /[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,
+    parseFormat: function(format){
+      if (typeof format.toValue === 'function' && typeof format.toDisplay === 'function')
+        return format;
+      // IE treats \0 as a string end in inputs (truncating the value),
+      // so it's a bad format delimiter, anyway
+      var separators = format.replace(this.validParts, '\0').split('\0'),
+        parts = format.match(this.validParts);
+      if (!separators || !separators.length || !parts || parts.length === 0){
+        throw new Error("Invalid date format.");
+      }
+      return {separators: separators, parts: parts};
+    },
+    parseDate: function(date, format, language, assumeNearby){
+      if (!date)
+        return undefined;
+      if (date instanceof Date)
+        return date;
+      if (typeof format === 'string')
+        format = DPGlobal.parseFormat(format);
+      if (format.toValue)
+        return format.toValue(date, format, language);
+      var fn_map = {
+          d: 'moveDay',
+          m: 'moveMonth',
+          w: 'moveWeek',
+          y: 'moveYear'
+        },
+        dateAliases = {
+          yesterday: '-1d',
+          today: '+0d',
+          tomorrow: '+1d'
+        },
+        parts, part, dir, i, fn;
+      if (date in dateAliases){
+        date = dateAliases[date];
+      }
+      if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(date)){
+        parts = date.match(/([\-+]\d+)([dmwy])/gi);
+        date = new Date();
+        for (i=0; i < parts.length; i++){
+          part = parts[i].match(/([\-+]\d+)([dmwy])/i);
+          dir = Number(part[1]);
+          fn = fn_map[part[2].toLowerCase()];
+          date = Datepicker.prototype[fn](date, dir);
+        }
+        return Datepicker.prototype._zero_utc_time(date);
+      }
+
+      parts = date && date.match(this.nonpunctuation) || [];
+
+      function applyNearbyYear(year, threshold){
+        if (threshold === true)
+          threshold = 10;
+
+        // if year is 2 digits or less, than the user most likely is trying to get a recent century
+        if (year < 100){
+          year += 2000;
+          // if the new year is more than threshold years in advance, use last century
+          if (year > ((new Date()).getFullYear()+threshold)){
+            year -= 100;
+          }
+        }
+
+        return year;
+      }
+
+      var parsed = {},
+        setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],
+        setters_map = {
+          yyyy: function(d,v){
+            return d.setUTCFullYear(assumeNearby ? applyNearbyYear(v, assumeNearby) : v);
+          },
+          m: function(d,v){
+            if (isNaN(d))
+              return d;
+            v -= 1;
+            while (v < 0) v += 12;
+            v %= 12;
+            d.setUTCMonth(v);
+            while (d.getUTCMonth() !== v)
+              d.setUTCDate(d.getUTCDate()-1);
+            return d;
+          },
+          d: function(d,v){
+            return d.setUTCDate(v);
+          }
+        },
+        val, filtered;
+      setters_map['yy'] = setters_map['yyyy'];
+      setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
+      setters_map['dd'] = setters_map['d'];
+      date = UTCToday();
+      var fparts = format.parts.slice();
+      // Remove noop parts
+      if (parts.length !== fparts.length){
+        fparts = $(fparts).filter(function(i,p){
+          return $.inArray(p, setters_order) !== -1;
+        }).toArray();
+      }
+      // Process remainder
+      function match_part(){
+        var m = this.slice(0, parts[i].length),
+          p = parts[i].slice(0, m.length);
+        return m.toLowerCase() === p.toLowerCase();
+      }
+      if (parts.length === fparts.length){
+        var cnt;
+        for (i=0, cnt = fparts.length; i < cnt; i++){
+          val = parseInt(parts[i], 10);
+          part = fparts[i];
+          if (isNaN(val)){
+            switch (part){
+              case 'MM':
+                filtered = $(dates[language].months).filter(match_part);
+                val = $.inArray(filtered[0], dates[language].months) + 1;
+                break;
+              case 'M':
+                filtered = $(dates[language].monthsShort).filter(match_part);
+                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
+                break;
+            }
+          }
+          parsed[part] = val;
+        }
+        var _date, s;
+        for (i=0; i < setters_order.length; i++){
+          s = setters_order[i];
+          if (s in parsed && !isNaN(parsed[s])){
+            _date = new Date(date);
+            setters_map[s](_date, parsed[s]);
+            if (!isNaN(_date))
+              date = _date;
+          }
+        }
+      }
+      return date;
+    },
+    formatDate: function(date, format, language){
+      if (!date)
+        return '';
+      if (typeof format === 'string')
+        format = DPGlobal.parseFormat(format);
+      if (format.toDisplay)
+        return format.toDisplay(date, format, language);
+      var val = {
+        d: date.getUTCDate(),
+        D: dates[language].daysShort[date.getUTCDay()],
+        DD: dates[language].days[date.getUTCDay()],
+        m: date.getUTCMonth() + 1,
+        M: dates[language].monthsShort[date.getUTCMonth()],
+        MM: dates[language].months[date.getUTCMonth()],
+        yy: date.getUTCFullYear().toString().substring(2),
+        yyyy: date.getUTCFullYear()
+      };
+      val.dd = (val.d < 10 ? '0' : '') + val.d;
+      val.mm = (val.m < 10 ? '0' : '') + val.m;
+      date = [];
+      var seps = $.extend([], format.separators);
+      for (var i=0, cnt = format.parts.length; i <= cnt; i++){
+        if (seps.length)
+          date.push(seps.shift());
+        date.push(val[format.parts[i]]);
+      }
+      return date.join('');
+    },
+    headTemplate: '<thead>'+
+      '<tr>'+
+      '<th colspan="7" class="datepicker-title"></th>'+
+      '</tr>'+
+      '<tr>'+
+      '<th class="prev">'+defaults.templates.leftArrow+'</th>'+
+      '<th colspan="5" class="datepicker-switch"></th>'+
+      '<th class="next">'+defaults.templates.rightArrow+'</th>'+
+      '</tr>'+
+      '</thead>',
+    contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
+    footTemplate: '<tfoot>'+
+      '<tr>'+
+      '<th colspan="7" class="today"></th>'+
+      '</tr>'+
+      '<tr>'+
+      '<th colspan="7" class="clear"></th>'+
+      '</tr>'+
+      '</tfoot>'
+  };
+  DPGlobal.template = '<div class="datepicker">'+
+    '<div class="datepicker-days">'+
+    '<table class="table-condensed">'+
+    DPGlobal.headTemplate+
+    '<tbody></tbody>'+
+    DPGlobal.footTemplate+
+    '</table>'+
+    '</div>'+
+    '<div class="datepicker-months">'+
+    '<table class="table-condensed">'+
+    DPGlobal.headTemplate+
+    DPGlobal.contTemplate+
+    DPGlobal.footTemplate+
+    '</table>'+
+    '</div>'+
+    '<div class="datepicker-years">'+
+    '<table class="table-condensed">'+
+    DPGlobal.headTemplate+
+    DPGlobal.contTemplate+
+    DPGlobal.footTemplate+
+    '</table>'+
+    '</div>'+
+    '<div class="datepicker-decades">'+
+    '<table class="table-condensed">'+
+    DPGlobal.headTemplate+
+    DPGlobal.contTemplate+
+    DPGlobal.footTemplate+
+    '</table>'+
+    '</div>'+
+    '<div class="datepicker-centuries">'+
+    '<table class="table-condensed">'+
+    DPGlobal.headTemplate+
+    DPGlobal.contTemplate+
+    DPGlobal.footTemplate+
+    '</table>'+
+    '</div>'+
+    '</div>';
+
+  $.fn.datepicker.DPGlobal = DPGlobal;
+
+
+  /* DATEPICKER NO CONFLICT
+  * =================== */
+
+  $.fn.datepicker.noConflict = function(){
+    $.fn.datepicker = old;
+    return this;
+  };
+
+  /* DATEPICKER VERSION
+   * =================== */
+  $.fn.datepicker.version = '1.9.0';
+
+  $.fn.datepicker.deprecated = function(msg){
+    var console = window.console;
+    if (console && console.warn) {
+      console.warn('DEPRECATED: ' + msg);
+    }
+  };
+
+
+  /* DATEPICKER DATA-API
+  * ================== */
+
+  $(document).on(
+    'focus.datepicker.data-api click.datepicker.data-api',
+    '[data-provide="datepicker"]',
+    function(e){
+      var $this = $(this);
+      if ($this.data('datepicker'))
+        return;
+      e.preventDefault();
+      // component click requires us to explicitly show it
+      datepickerPlugin.call($this, 'show');
+    }
+  );
+  $(function(){
+    datepickerPlugin.call($('[data-provide="datepicker-inline"]'));
+  });
+
+}));
+/* =========================================================
+ * bootstrap-datetimepicker.js
+ * =========================================================
+ * Copyright 2012 Stefan Petre
+ *
+ * Improvements by Andrew Rowls
+ * Improvements by Sébastien Malot
+ * Improvements by Yun Lai
+ * Improvements by Kenneth Henderick
+ * Improvements by CuGBabyBeaR
+ * Improvements by Christian Vaas <auspex@auspex.eu>
+ *
+ * Project URL : http://www.malot.fr/bootstrap-datetimepicker
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+(function(factory){
+    if (typeof define === 'function' && define.amd)
+      define(['jquery'], factory);
+    else if (typeof exports === 'object')
+      factory(require('jquery'));
+    else
+      factory(jQuery);
+
+}(function($, undefined){
+
+  // Add ECMA262-5 Array methods if not supported natively (IE8)
+  if (!('indexOf' in Array.prototype)) {
+    Array.prototype.indexOf = function (find, i) {
+      if (i === undefined) i = 0;
+      if (i < 0) i += this.length;
+      if (i < 0) i = 0;
+      for (var n = this.length; i < n; i++) {
+        if (i in this && this[i] === find) {
+          return i;
+        }
+      }
+      return -1;
+    }
+  }
+
+  // Add timezone abbreviation support for ie6+, Chrome, Firefox
+  function timeZoneAbbreviation() {
+    var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str;
+    date = (new Date()).toString();
+    formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' ');
+    if (formattedStr instanceof Array) {
+      matchedStrings = [];
+      for (var i = 0, len = formattedStr.length; i < len; i++) {
+        str = formattedStr[i];
+        if ((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0) {
+          matchedStrings.push(abbreviation);
+        }
+      }
+      formattedStr = matchedStrings.pop();
+    }
+    return formattedStr;
+  }
+
+  function UTCDate() {
+    return new Date(Date.UTC.apply(Date, arguments));
+  }
+
+  // Picker object
+  var Datetimepicker = function (element, options) {
+    var that = this;
+
+    this.element = $(element);
+
+    // add container for single page application
+    // when page switch the datetimepicker div will be removed also.
+    this.container = options.container || 'body';
+
+    this.language = options.language || this.element.data('date-language') || 'en';
+    this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr
+    this.language = this.language in dates ? this.language : 'en';
+    this.isRTL = dates[this.language].rtl || false;
+    this.formatType = options.formatType || this.element.data('format-type') || 'standard';
+    this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType);
+    this.isInline = false;
+    this.isVisible = false;
+    this.isInput = this.element.is('input');
+    this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false;
+
+    this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ));
+
+    this.component = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false;
+    this.componentReset = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false;
+    this.hasInput = this.component && this.element.find('input').length;
+    if (this.component && this.component.length === 0) {
+      this.component = false;
+    }
+    this.linkField = options.linkField || this.element.data('link-field') || false;
+    this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);
+    this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;
+    this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';
+    this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;
+    this.initialDate = options.initialDate || new Date();
+    this.zIndex = options.zIndex || this.element.data('z-index') || undefined;
+    this.title = typeof options.title === 'undefined' ? false : options.title;
+    this.timezone = options.timezone || timeZoneAbbreviation();
+
+    this.icons = {
+      leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'),
+      rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right')
+    }
+    this.icontype = this.fontAwesome ? 'fa' : 'glyphicon';
+
+    this._attachEvents();
+
+    this.clickedOutside = function (e) {
+        // Clicked outside the datetimepicker, hide it
+        if ($(e.target).closest('.datetimepicker').length === 0) {
+            that.hide();
+        }
+    }
+
+    this.formatViewType = 'datetime';
+    if ('formatViewType' in options) {
+      this.formatViewType = options.formatViewType;
+    } else if ('formatViewType' in this.element.data()) {
+      this.formatViewType = this.element.data('formatViewType');
+    }
+
+    this.minView = 0;
+    if ('minView' in options) {
+      this.minView = options.minView;
+    } else if ('minView' in this.element.data()) {
+      this.minView = this.element.data('min-view');
+    }
+    this.minView = DPGlobal.convertViewMode(this.minView);
+
+    this.maxView = DPGlobal.modes.length - 1;
+    if ('maxView' in options) {
+      this.maxView = options.maxView;
+    } else if ('maxView' in this.element.data()) {
+      this.maxView = this.element.data('max-view');
+    }
+    this.maxView = DPGlobal.convertViewMode(this.maxView);
+
+    this.wheelViewModeNavigation = false;
+    if ('wheelViewModeNavigation' in options) {
+      this.wheelViewModeNavigation = options.wheelViewModeNavigation;
+    } else if ('wheelViewModeNavigation' in this.element.data()) {
+      this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation');
+    }
+
+    this.wheelViewModeNavigationInverseDirection = false;
+
+    if ('wheelViewModeNavigationInverseDirection' in options) {
+      this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection;
+    } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) {
+      this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir');
+    }
+
+    this.wheelViewModeNavigationDelay = 100;
+    if ('wheelViewModeNavigationDelay' in options) {
+      this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay;
+    } else if ('wheelViewModeNavigationDelay' in this.element.data()) {
+      this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay');
+    }
+
+    this.startViewMode = 2;
+    if ('startView' in options) {
+      this.startViewMode = options.startView;
+    } else if ('startView' in this.element.data()) {
+      this.startViewMode = this.element.data('start-view');
+    }
+    this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);
+    this.viewMode = this.startViewMode;
+
+    this.viewSelect = this.minView;
+    if ('viewSelect' in options) {
+      this.viewSelect = options.viewSelect;
+    } else if ('viewSelect' in this.element.data()) {
+      this.viewSelect = this.element.data('view-select');
+    }
+    this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);
+
+    this.forceParse = true;
+    if ('forceParse' in options) {
+      this.forceParse = options.forceParse;
+    } else if ('dateForceParse' in this.element.data()) {
+      this.forceParse = this.element.data('date-force-parse');
+    }
+    var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template;
+    while (template.indexOf('{iconType}') !== -1) {
+      template = template.replace('{iconType}', this.icontype);
+    }
+    while (template.indexOf('{leftArrow}') !== -1) {
+      template = template.replace('{leftArrow}', this.icons.leftArrow);
+    }
+    while (template.indexOf('{rightArrow}') !== -1) {
+      template = template.replace('{rightArrow}', this.icons.rightArrow);
+    }
+    this.picker = $(template)
+      .appendTo(this.isInline ? this.element : this.container) // 'body')
+      .on({
+        click:     $.proxy(this.click, this),
+        mousedown: $.proxy(this.mousedown, this)
+      });
+
+    if (this.wheelViewModeNavigation) {
+      if ($.fn.mousewheel) {
+        this.picker.on({mousewheel: $.proxy(this.mousewheel, this)});
+      } else {
+        console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option');
+      }
+    }
+
+    if (this.isInline) {
+      this.picker.addClass('datetimepicker-inline');
+    } else {
+      this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');
+    }
+    if (this.isRTL) {
+      this.picker.addClass('datetimepicker-rtl');
+      var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i';
+      this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow);
+    }
+
+    $(document).on('mousedown touchend', this.clickedOutside);
+
+    this.autoclose = false;
+    if ('autoclose' in options) {
+      this.autoclose = options.autoclose;
+    } else if ('dateAutoclose' in this.element.data()) {
+      this.autoclose = this.element.data('date-autoclose');
+    }
+
+    this.keyboardNavigation = true;
+    if ('keyboardNavigation' in options) {
+      this.keyboardNavigation = options.keyboardNavigation;
+    } else if ('dateKeyboardNavigation' in this.element.data()) {
+      this.keyboardNavigation = this.element.data('date-keyboard-navigation');
+    }
+
+    this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);
+    this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false);
+    this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);
+
+    this.weekStart = 0;
+    if (typeof options.weekStart !== 'undefined') {
+      this.weekStart = options.weekStart;
+    } else if (typeof this.element.data('date-weekstart') !== 'undefined') {
+      this.weekStart = this.element.data('date-weekstart');
+    } else if (typeof dates[this.language].weekStart !== 'undefined') {
+      this.weekStart = dates[this.language].weekStart;
+    }
+    this.weekStart = this.weekStart % 7;
+    this.weekEnd = ((this.weekStart + 6) % 7);
+    this.onRenderDay = function (date) {
+      var render = (options.onRenderDay || function () { return []; })(date);
+      if (typeof render === 'string') {
+        render = [render];
+      }
+      var res = ['day'];
+      return res.concat((render ? render : []));
+    };
+    this.onRenderHour = function (date) {
+      var render = (options.onRenderHour || function () { return []; })(date);
+      var res = ['hour'];
+      if (typeof render === 'string') {
+        render = [render];
+      }
+      return res.concat((render ? render : []));
+    };
+    this.onRenderMinute = function (date) {
+      var render = (options.onRenderMinute || function () { return []; })(date);
+      var res = ['minute'];
+      if (typeof render === 'string') {
+        render = [render];
+      }
+      if (date < this.startDate || date > this.endDate) {
+        res.push('disabled');
+      } else if (Math.floor(this.date.getUTCMinutes() / this.minuteStep) === Math.floor(date.getUTCMinutes() / this.minuteStep)) {
+        res.push('active');
+      }
+      return res.concat((render ? render : []));
+    };
+    this.onRenderYear = function (date) {
+      var render = (options.onRenderYear || function () { return []; })(date);
+      var res = ['year'];
+      if (typeof render === 'string') {
+        render = [render];
+      }
+      if (this.date.getUTCFullYear() === date.getUTCFullYear()) {
+        res.push('active');
+      }
+      var currentYear = date.getUTCFullYear();
+      var endYear = this.endDate.getUTCFullYear();
+      if (date < this.startDate || currentYear > endYear) {
+        res.push('disabled');
+      }
+      return res.concat((render ? render : []));
+    }
+    this.onRenderMonth = function (date) {
+      var render = (options.onRenderMonth || function () { return []; })(date);
+      var res = ['month'];
+      if (typeof render === 'string') {
+        render = [render];
+      }
+      return res.concat((render ? render : []));
+    }
+    this.startDate = new Date(-8639968443048000);
+    this.endDate = new Date(8639968443048000);
+    this.datesDisabled = [];
+    this.daysOfWeekDisabled = [];
+    this.setStartDate(options.startDate || this.element.data('date-startdate'));
+    this.setEndDate(options.endDate || this.element.data('date-enddate'));
+    this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled'));
+    this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));
+    this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled'));
+    this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled'));
+    this.fillDow();
+    this.fillMonths();
+    this.update();
+    this.showMode();
+
+    if (this.isInline) {
+      this.show();
+    }
+  };
+
+  Datetimepicker.prototype = {
+    constructor: Datetimepicker,
+
+    _events:       [],
+    _attachEvents: function () {
+      this._detachEvents();
+      if (this.isInput) { // single input
+        this._events = [
+          [this.element, {
+            focus:   $.proxy(this.show, this),
+            keyup:   $.proxy(this.update, this),
+            keydown: $.proxy(this.keydown, this)
+          }]
+        ];
+      }
+      else if (this.component && this.hasInput) { // component: input + button
+        this._events = [
+          // For components that are not readonly, allow keyboard nav
+          [this.element.find('input'), {
+            focus:   $.proxy(this.show, this),
+            keyup:   $.proxy(this.update, this),
+            keydown: $.proxy(this.keydown, this)
+          }],
+          [this.component, {
+            click: $.proxy(this.show, this)
+          }]
+        ];
+        if (this.componentReset) {
+          this._events.push([
+            this.componentReset,
+            {click: $.proxy(this.reset, this)}
+          ]);
+        }
+      }
+      else if (this.element.is('div')) {  // inline datetimepicker
+        this.isInline = true;
+      }
+      else {
+        this._events = [
+          [this.element, {
+            click: $.proxy(this.show, this)
+          }]
+        ];
+      }
+      for (var i = 0, el, ev; i < this._events.length; i++) {
+        el = this._events[i][0];
+        ev = this._events[i][1];
+        el.on(ev);
+      }
+    },
+
+    _detachEvents: function () {
+      for (var i = 0, el, ev; i < this._events.length; i++) {
+        el = this._events[i][0];
+        ev = this._events[i][1];
+        el.off(ev);
+      }
+      this._events = [];
+    },
+
+    show: function (e) {
+      this.picker.show();
+      this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
+      if (this.forceParse) {
+        this.update();
+      }
+      this.place();
+      $(window).on('resize', $.proxy(this.place, this));
+      if (e) {
+        e.stopPropagation();
+        e.preventDefault();
+      }
+      this.isVisible = true;
+      this.element.trigger({
+        type: 'show',
+        date: this.date
+      });
+    },
+
+    hide: function () {
+      if (!this.isVisible) return;
+      if (this.isInline) return;
+      this.picker.hide();
+      $(window).off('resize', this.place);
+      this.viewMode = this.startViewMode;
+      this.showMode();
+      if (!this.isInput) {
+        $(document).off('mousedown', this.hide);
+      }
+
+      if (
+        this.forceParse &&
+          (
+            this.isInput && this.element.val() ||
+              this.hasInput && this.element.find('input').val()
+            )
+        )
+        this.setValue();
+      this.isVisible = false;
+      this.element.trigger({
+        type: 'hide',
+        date: this.date
+      });
+    },
+
+    remove: function () {
+      this._detachEvents();
+      $(document).off('mousedown', this.clickedOutside);
+      this.picker.remove();
+      delete this.picker;
+      delete this.element.data().datetimepicker;
+    },
+
+    getDate: function () {
+      var d = this.getUTCDate();
+      if (d === null) {
+        return null;
+      }
+      return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));
+    },
+
+    getUTCDate: function () {
+      return this.date;
+    },
+
+    getInitialDate: function () {
+      return this.initialDate
+    },
+
+    setInitialDate: function (initialDate) {
+      this.initialDate = initialDate;
+    },
+
+    setDate: function (d) {
+      this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));
+    },
+
+    setUTCDate: function (d) {
+      if (d >= this.startDate && d <= this.endDate) {
+        this.date = d;
+        this.setValue();
+        this.viewDate = this.date;
+        this.fill();
+      } else {
+        this.element.trigger({
+          type:      'outOfRange',
+          date:      d,
+          startDate: this.startDate,
+          endDate:   this.endDate
+        });
+      }
+    },
+
+    setFormat: function (format) {
+      this.format = DPGlobal.parseFormat(format, this.formatType);
+      var element;
+      if (this.isInput) {
+        element = this.element;
+      } else if (this.component) {
+        element = this.element.find('input');
+      }
+      if (element && element.val()) {
+        this.setValue();
+      }
+    },
+
+    setValue: function () {
+      var formatted = this.getFormattedDate();
+      if (!this.isInput) {
+        if (this.component) {
+          this.element.find('input').val(formatted);
+        }
+        this.element.data('date', formatted);
+      } else {
+        this.element.val(formatted);
+      }
+      if (this.linkField) {
+        $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));
+      }
+    },
+
+    getFormattedDate: function (format) {
+      format = format || this.format;
+      return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone);
+    },
+
+    setStartDate: function (startDate) {
+      this.startDate = startDate || this.startDate;
+      if (this.startDate.valueOf() !== 8639968443048000) {
+        this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone);
+      }
+      this.update();
+      this.updateNavArrows();
+    },
+
+    setEndDate: function (endDate) {
+      this.endDate = endDate || this.endDate;
+      if (this.endDate.valueOf() !== 8639968443048000) {
+        this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone);
+      }
+      this.update();
+      this.updateNavArrows();
+    },
+
+    setDatesDisabled: function (datesDisabled) {
+      this.datesDisabled = datesDisabled || [];
+      if (!$.isArray(this.datesDisabled)) {
+        this.datesDisabled = this.datesDisabled.split(/,\s*/);
+      }
+      var mThis = this;
+      this.datesDisabled = $.map(this.datesDisabled, function (d) {
+        return DPGlobal.parseDate(d, mThis.format, mThis.language, mThis.formatType, mThis.timezone).toDateString();
+      });
+      this.update();
+      this.updateNavArrows();
+    },
+
+    setTitle: function (selector, value) {
+      return this.picker.find(selector)
+        .find('th:eq(1)')
+        .text(this.title === false ? value : this.title);
+    },
+
+    setDaysOfWeekDisabled: function (daysOfWeekDisabled) {
+      this.daysOfWeekDisabled = daysOfWeekDisabled || [];
+      if (!$.isArray(this.daysOfWeekDisabled)) {
+        this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/);
+      }
+      this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {
+        return parseInt(d, 10);
+      });
+      this.update();
+      this.updateNavArrows();
+    },
+
+    setMinutesDisabled: function (minutesDisabled) {
+      this.minutesDisabled = minutesDisabled || [];
+      if (!$.isArray(this.minutesDisabled)) {
+        this.minutesDisabled = this.minutesDisabled.split(/,\s*/);
+      }
+      this.minutesDisabled = $.map(this.minutesDisabled, function (d) {
+        return parseInt(d, 10);
+      });
+      this.update();
+      this.updateNavArrows();
+    },
+
+    setHoursDisabled: function (hoursDisabled) {
+      this.hoursDisabled = hoursDisabled || [];
+      if (!$.isArray(this.hoursDisabled)) {
+        this.hoursDisabled = this.hoursDisabled.split(/,\s*/);
+      }
+      this.hoursDisabled = $.map(this.hoursDisabled, function (d) {
+        return parseInt(d, 10);
+      });
+      this.update();
+      this.updateNavArrows();
+    },
+
+    place: function () {
+      if (this.isInline) return;
+
+      if (!this.zIndex) {
+        var index_highest = 0;
+        $('div').each(function () {
+          var index_current = parseInt($(this).css('zIndex'), 10);
+          if (index_current > index_highest) {
+            index_highest = index_current;
+          }
+        });
+        this.zIndex = index_highest + 10;
+      }
+
+      var offset, top, left, containerOffset;
+      if (this.container instanceof $) {
+        containerOffset = this.container.offset();
+      } else {
+        containerOffset = $(this.container).offset();
+      }
+
+      if (this.component) {
+        offset = this.component.offset();
+        left = offset.left;
+        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {
+          left += this.component.outerWidth() - this.picker.outerWidth();
+        }
+      } else {
+        offset = this.element.offset();
+        left = offset.left;
+        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {
+          left += this.element.outerWidth() - this.picker.outerWidth();
+        }
+      }
+
+      var bodyWidth = document.body.clientWidth || window.innerWidth;
+      if (left + 220 > bodyWidth) {
+        left = bodyWidth - 220;
+      }
+
+      if (this.pickerPosition === 'top-left' || this.pickerPosition === 'top-right') {
+        top = offset.top - this.picker.outerHeight();
+      } else {
+        top = offset.top + this.height;
+      }
+
+      top = top - containerOffset.top;
+      left = left - containerOffset.left;
+
+      this.picker.css({
+        top:    top,
+        left:   left,
+        zIndex: this.zIndex
+      });
+    },
+
+    hour_minute: "^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]",
+
+    update: function () {
+      var date, fromArgs = false;
+      if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {
+        date = arguments[0];
+        fromArgs = true;
+      } else {
+        date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate;
+        if (typeof date === 'string') {
+          date = date.replace(/^\s+|\s+$/g,'');
+        }
+      }
+
+      if (!date) {
+        date = new Date();
+        fromArgs = false;
+      }
+
+      if (typeof date === "string") {
+        if (new RegExp(this.hour_minute).test(date) || new RegExp(this.hour_minute + ":[0-5][0-9]").test(date)) {
+          date = this.getDate()
+        }
+      }
+
+      this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone);
+
+      if (fromArgs) this.setValue();
+
+      if (this.date < this.startDate) {
+        this.viewDate = new Date(this.startDate);
+      } else if (this.date > this.endDate) {
+        this.viewDate = new Date(this.endDate);
+      } else {
+        this.viewDate = new Date(this.date);
+      }
+      this.fill();
+    },
+
+    fillDow: function () {
+      var dowCnt = this.weekStart,
+        html = '<tr>';
+      while (dowCnt < this.weekStart + 7) {
+        html += '<th class="dow">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>';
+      }
+      html += '</tr>';
+      this.picker.find('.datetimepicker-days thead').append(html);
+    },
+
+    fillMonths: function () {
+      var html = '';
+      var d = new Date(this.viewDate);
+      for (var i = 0; i < 12; i++) {
+        d.setUTCMonth(i);
+        var classes = this.onRenderMonth(d);
+        html += '<span class="' + classes.join(' ') + '">' + dates[this.language].monthsShort[i] + '</span>';
+      }
+      this.picker.find('.datetimepicker-months td').html(html);
+    },
+
+    fill: function () {
+      if (!this.date || !this.viewDate) {
+        return;
+      }
+      var d = new Date(this.viewDate),
+        year = d.getUTCFullYear(),
+        month = d.getUTCMonth(),
+        dayMonth = d.getUTCDate(),
+        hours = d.getUTCHours(),
+        startYear = this.startDate.getUTCFullYear(),
+        startMonth = this.startDate.getUTCMonth(),
+        endYear = this.endDate.getUTCFullYear(),
+        endMonth = this.endDate.getUTCMonth() + 1,
+        currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(),
+        today = new Date();
+      this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year)
+      if (this.formatViewType === 'time') {
+        var formatted = this.getFormattedDate();
+        this.setTitle('.datetimepicker-hours', formatted);
+        this.setTitle('.datetimepicker-minutes', formatted);
+      } else {
+        this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
+        this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
+      }
+      this.picker.find('tfoot th.today')
+        .text(dates[this.language].today || dates['en'].today)
+        .toggle(this.todayBtn !== false);
+      this.picker.find('tfoot th.clear')
+        .text(dates[this.language].clear || dates['en'].clear)
+        .toggle(this.clearBtn !== false);
+      this.updateNavArrows();
+      this.fillMonths();
+      var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),
+        day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
+      prevMonth.setUTCDate(day);
+      prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);
+      var nextMonth = new Date(prevMonth);
+      nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
+      nextMonth = nextMonth.valueOf();
+      var html = [];
+      var classes;
+      while (prevMonth.valueOf() < nextMonth) {
+        if (prevMonth.getUTCDay() === this.weekStart) {
+          html.push('<tr>');
+        }
+        classes = this.onRenderDay(prevMonth);
+        if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() < month)) {
+          classes.push('old');
+        } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() > month)) {
+          classes.push('new');
+        }
+        // Compare internal UTC date with local today, not UTC today
+        if (this.todayHighlight &&
+          prevMonth.getUTCFullYear() === today.getFullYear() &&
+          prevMonth.getUTCMonth() === today.getMonth() &&
+          prevMonth.getUTCDate() === today.getDate()) {
+          classes.push('today');
+        }
+        if (prevMonth.valueOf() === currentDate) {
+          classes.push('active');
+        }
+        if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate ||
+          $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||
+          $.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) {
+          classes.push('disabled');
+        }
+        html.push('<td class="' + classes.join(' ') + '">' + prevMonth.getUTCDate() + '</td>');
+        if (prevMonth.getUTCDay() === this.weekEnd) {
+          html.push('</tr>');
+        }
+        prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);
+      }
+      this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));
+
+      html = [];
+      var txt = '', meridian = '', meridianOld = '';
+      var hoursDisabled = this.hoursDisabled || [];
+      d = new Date(this.viewDate)
+      for (var i = 0; i < 24; i++) {
+        d.setUTCHours(i);
+        classes = this.onRenderHour(d);
+        if (hoursDisabled.indexOf(i) !== -1) {
+          classes.push('disabled');
+        }
+        var actual = UTCDate(year, month, dayMonth, i);
+        // We want the previous hour for the startDate
+        if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) {
+          classes.push('disabled');
+        } else if (hours === i) {
+          classes.push('active');
+        }
+        if (this.showMeridian && dates[this.language].meridiem.length === 2) {
+          meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);
+          if (meridian !== meridianOld) {
+            if (meridianOld !== '') {
+              html.push('</fieldset>');
+            }
+            html.push('<fieldset class="hour"><legend>' + meridian.toUpperCase() + '</legend>');
+          }
+          meridianOld = meridian;
+          txt = (i % 12 ? i % 12 : 12);
+          if (i < 12) {
+            classes.push('hour_am');
+          } else {
+            classes.push('hour_pm');
+          }
+          html.push('<span class="' + classes.join(' ') + '">' + txt + '</span>');
+          if (i === 23) {
+            html.push('</fieldset>');
+          }
+        } else {
+          txt = i + ':00';
+          html.push('<span class="' + classes.join(' ') + '">' + txt + '</span>');
+        }
+      }
+      this.picker.find('.datetimepicker-hours td').html(html.join(''));
+
+      html = [];
+      txt = '';
+      meridian = '';
+      meridianOld = '';
+      var minutesDisabled = this.minutesDisabled || [];
+      d = new Date(this.viewDate);
+      for (var i = 0; i < 60; i += this.minuteStep) {
+        if (minutesDisabled.indexOf(i) !== -1) continue;
+        d.setUTCMinutes(i);
+        d.setUTCSeconds(0);
+        classes = this.onRenderMinute(d);
+        if (this.showMeridian && dates[this.language].meridiem.length === 2) {
+          meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);
+          if (meridian !== meridianOld) {
+            if (meridianOld !== '') {
+              html.push('</fieldset>');
+            }
+            html.push('<fieldset class="minute"><legend>' + meridian.toUpperCase() + '</legend>');
+          }
+          meridianOld = meridian;
+          txt = (hours % 12 ? hours % 12 : 12);
+          html.push('<span class="' + classes.join(' ') + '">' + txt + ':' + (i < 10 ? '0' + i : i) + '</span>');
+          if (i === 59) {
+            html.push('</fieldset>');
+          }
+        } else {
+          txt = i + ':00';
+          html.push('<span class="' + classes.join(' ') + '">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>');
+        }
+      }
+      this.picker.find('.datetimepicker-minutes td').html(html.join(''));
+
+      var currentYear = this.date.getUTCFullYear();
+      var months = this.setTitle('.datetimepicker-months', year)
+        .end()
+        .find('.month').removeClass('active');
+      if (currentYear === year) {
+        // getUTCMonths() returns 0 based, and we need to select the next one
+        // To cater bootstrap 2 we don't need to select the next one
+        months.eq(this.date.getUTCMonth()).addClass('active');
+      }
+      if (year < startYear || year > endYear) {
+        months.addClass('disabled');
+      }
+      if (year === startYear) {
+        months.slice(0, startMonth).addClass('disabled');
+      }
+      if (year === endYear) {
+        months.slice(endMonth).addClass('disabled');
+      }
+
+      html = '';
+      year = parseInt(year / 10, 10) * 10;
+      var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9))
+        .end()
+        .find('td');
+      year -= 1;
+      d = new Date(this.viewDate);
+      for (var i = -1; i < 11; i++) {
+        d.setUTCFullYear(year);
+        classes = this.onRenderYear(d);
+        if (i === -1 || i === 10) {
+          classes.push(old);
+        }
+        html += '<span class="' + classes.join(' ') + '">' + year + '</span>';
+        year += 1;
+      }
+      yearCont.html(html);
+      this.place();
+    },
+
+    updateNavArrows: function () {
+      var d = new Date(this.viewDate),
+        year = d.getUTCFullYear(),
+        month = d.getUTCMonth(),
+        day = d.getUTCDate(),
+        hour = d.getUTCHours();
+      switch (this.viewMode) {
+        case 0:
+          if (year <= this.startDate.getUTCFullYear()
+            && month <= this.startDate.getUTCMonth()
+            && day <= this.startDate.getUTCDate()
+            && hour <= this.startDate.getUTCHours()) {
+            this.picker.find('.prev').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.prev').css({visibility: 'visible'});
+          }
+          if (year >= this.endDate.getUTCFullYear()
+            && month >= this.endDate.getUTCMonth()
+            && day >= this.endDate.getUTCDate()
+            && hour >= this.endDate.getUTCHours()) {
+            this.picker.find('.next').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.next').css({visibility: 'visible'});
+          }
+          break;
+        case 1:
+          if (year <= this.startDate.getUTCFullYear()
+            && month <= this.startDate.getUTCMonth()
+            && day <= this.startDate.getUTCDate()) {
+            this.picker.find('.prev').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.prev').css({visibility: 'visible'});
+          }
+          if (year >= this.endDate.getUTCFullYear()
+            && month >= this.endDate.getUTCMonth()
+            && day >= this.endDate.getUTCDate()) {
+            this.picker.find('.next').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.next').css({visibility: 'visible'});
+          }
+          break;
+        case 2:
+          if (year <= this.startDate.getUTCFullYear()
+            && month <= this.startDate.getUTCMonth()) {
+            this.picker.find('.prev').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.prev').css({visibility: 'visible'});
+          }
+          if (year >= this.endDate.getUTCFullYear()
+            && month >= this.endDate.getUTCMonth()) {
+            this.picker.find('.next').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.next').css({visibility: 'visible'});
+          }
+          break;
+        case 3:
+        case 4:
+          if (year <= this.startDate.getUTCFullYear()) {
+            this.picker.find('.prev').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.prev').css({visibility: 'visible'});
+          }
+          if (year >= this.endDate.getUTCFullYear()) {
+            this.picker.find('.next').css({visibility: 'hidden'});
+          } else {
+            this.picker.find('.next').css({visibility: 'visible'});
+          }
+          break;
+      }
+    },
+
+    mousewheel: function (e) {
+
+      e.preventDefault();
+      e.stopPropagation();
+
+      if (this.wheelPause) {
+        return;
+      }
+
+      this.wheelPause = true;
+
+      var originalEvent = e.originalEvent;
+
+      var delta = originalEvent.wheelDelta;
+
+      var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1;
+
+      if (this.wheelViewModeNavigationInverseDirection) {
+        mode = -mode;
+      }
+
+      this.showMode(mode);
+
+      setTimeout($.proxy(function () {
+
+        this.wheelPause = false
+
+      }, this), this.wheelViewModeNavigationDelay);
+
+    },
+
+    click: function (e) {
+      e.stopPropagation();
+      e.preventDefault();
+      var target = $(e.target).closest('span, td, th, legend');
+      if (target.is('.' + this.icontype)) {
+        target = $(target).parent().closest('span, td, th, legend');
+      }
+      if (target.length === 1) {
+        if (target.is('.disabled')) {
+          this.element.trigger({
+            type:      'outOfRange',
+            date:      this.viewDate,
+            startDate: this.startDate,
+            endDate:   this.endDate
+          });
+          return;
+        }
+        switch (target[0].nodeName.toLowerCase()) {
+          case 'th':
+            switch (target[0].className) {
+              case 'switch':
+                this.showMode(1);
+                break;
+              case 'prev':
+              case 'next':
+                var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);
+                switch (this.viewMode) {
+                  case 0:
+                    this.viewDate = this.moveHour(this.viewDate, dir);
+                    break;
+                  case 1:
+                    this.viewDate = this.moveDate(this.viewDate, dir);
+                    break;
+                  case 2:
+                    this.viewDate = this.moveMonth(this.viewDate, dir);
+                    break;
+                  case 3:
+                  case 4:
+                    this.viewDate = this.moveYear(this.viewDate, dir);
+                    break;
+                }
+                this.fill();
+                this.element.trigger({
+                  type:      target[0].className + ':' + this.convertViewModeText(this.viewMode),
+                  date:      this.viewDate,
+                  startDate: this.startDate,
+                  endDate:   this.endDate
+                });
+                break;
+              case 'clear':
+                this.reset();
+                if (this.autoclose) {
+                  this.hide();
+                }
+                break;
+              case 'today':
+                var date = new Date();
+                date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);
+
+                // Respect startDate and endDate.
+                if (date < this.startDate) date = this.startDate;
+                else if (date > this.endDate) date = this.endDate;
+
+                this.viewMode = this.startViewMode;
+                this.showMode(0);
+                this._setDate(date);
+                this.fill();
+                if (this.autoclose) {
+                  this.hide();
+                }
+                break;
+            }
+            break;
+          case 'span':
+            if (!target.is('.disabled')) {
+              var year = this.viewDate.getUTCFullYear(),
+                month = this.viewDate.getUTCMonth(),
+                day = this.viewDate.getUTCDate(),
+                hours = this.viewDate.getUTCHours(),
+                minutes = this.viewDate.getUTCMinutes(),
+                seconds = this.viewDate.getUTCSeconds();
+
+              if (target.is('.month')) {
+                this.viewDate.setUTCDate(1);
+                month = target.parent().find('span').index(target);
+                day = this.viewDate.getUTCDate();
+                this.viewDate.setUTCMonth(month);
+                this.element.trigger({
+                  type: 'changeMonth',
+                  date: this.viewDate
+                });
+                if (this.viewSelect >= 3) {
+                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
+                }
+              } else if (target.is('.year')) {
+                this.viewDate.setUTCDate(1);
+                year = parseInt(target.text(), 10) || 0;
+                this.viewDate.setUTCFullYear(year);
+                this.element.trigger({
+                  type: 'changeYear',
+                  date: this.viewDate
+                });
+                if (this.viewSelect >= 4) {
+                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
+                }
+              } else if (target.is('.hour')) {
+                hours = parseInt(target.text(), 10) || 0;
+                if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {
+                  if (hours === 12 && target.hasClass('hour_am')) {
+                    hours = 0;
+                  } else if (hours !== 12 && target.hasClass('hour_pm')) {
+                    hours += 12;
+                  }
+                }
+                this.viewDate.setUTCHours(hours);
+                this.element.trigger({
+                  type: 'changeHour',
+                  date: this.viewDate
+                });
+                if (this.viewSelect >= 1) {
+                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
+                }
+              } else if (target.is('.minute')) {
+                minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;
+                this.viewDate.setUTCMinutes(minutes);
+                this.element.trigger({
+                  type: 'changeMinute',
+                  date: this.viewDate
+                });
+                if (this.viewSelect >= 0) {
+                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
+                }
+              }
+              if (this.viewMode !== 0) {
+                var oldViewMode = this.viewMode;
+                this.showMode(-1);
+                this.fill();
+                if (oldViewMode === this.viewMode && this.autoclose) {
+                  this.hide();
+                }
+              } else {
+                this.fill();
+                if (this.autoclose) {
+                  this.hide();
+                }
+              }
+            }
+            break;
+          case 'td':
+            if (target.is('.day') && !target.is('.disabled')) {
+              var day = parseInt(target.text(), 10) || 1;
+              var year = this.viewDate.getUTCFullYear(),
+                month = this.viewDate.getUTCMonth(),
+                hours = this.viewDate.getUTCHours(),
+                minutes = this.viewDate.getUTCMinutes(),
+                seconds = this.viewDate.getUTCSeconds();
+              if (target.is('.old')) {
+                if (month === 0) {
+                  month = 11;
+                  year -= 1;
+                } else {
+                  month -= 1;
+                }
+              } else if (target.is('.new')) {
+                if (month === 11) {
+                  month = 0;
+                  year += 1;
+                } else {
+                  month += 1;
+                }
+              }
+              this.viewDate.setUTCFullYear(year);
+              this.viewDate.setUTCMonth(month, day);
+              this.element.trigger({
+                type: 'changeDay',
+                date: this.viewDate
+              });
+              if (this.viewSelect >= 2) {
+                this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
+              }
+            }
+            var oldViewMode = this.viewMode;
+            this.showMode(-1);
+            this.fill();
+            if (oldViewMode === this.viewMode && this.autoclose) {
+              this.hide();
+            }
+            break;
+        }
+      }
+    },
+
+    _setDate: function (date, which) {
+      if (!which || which === 'date')
+        this.date = date;
+      if (!which || which === 'view')
+        this.viewDate = date;
+      this.fill();
+      this.setValue();
+      var element;
+      if (this.isInput) {
+        element = this.element;
+      } else if (this.component) {
+        element = this.element.find('input');
+      }
+      if (element) {
+        element.change();
+      }
+      this.element.trigger({
+        type: 'changeDate',
+        date: this.getDate()
+      });
+      if(date === null)
+        this.date = this.viewDate;
+    },
+
+    moveMinute: function (date, dir) {
+      if (!dir) return date;
+      var new_date = new Date(date.valueOf());
+      //dir = dir > 0 ? 1 : -1;
+      new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep));
+      return new_date;
+    },
+
+    moveHour: function (date, dir) {
+      if (!dir) return date;
+      var new_date = new Date(date.valueOf());
+      //dir = dir > 0 ? 1 : -1;
+      new_date.setUTCHours(new_date.getUTCHours() + dir);
+      return new_date;
+    },
+
+    moveDate: function (date, dir) {
+      if (!dir) return date;
+      var new_date = new Date(date.valueOf());
+      //dir = dir > 0 ? 1 : -1;
+      new_date.setUTCDate(new_date.getUTCDate() + dir);
+      return new_date;
+    },
+
+    moveMonth: function (date, dir) {
+      if (!dir) return date;
+      var new_date = new Date(date.valueOf()),
+        day = new_date.getUTCDate(),
+        month = new_date.getUTCMonth(),
+        mag = Math.abs(dir),
+        new_month, test;
+      dir = dir > 0 ? 1 : -1;
+      if (mag === 1) {
+        test = dir === -1
+          // If going back one month, make sure month is not current month
+          // (eg, Mar 31 -> Feb 31 === Feb 28, not Mar 02)
+          ? function () {
+          return new_date.getUTCMonth() === month;
+        }
+          // If going forward one month, make sure month is as expected
+          // (eg, Jan 31 -> Feb 31 === Feb 28, not Mar 02)
+          : function () {
+          return new_date.getUTCMonth() !== new_month;
+        };
+        new_month = month + dir;
+        new_date.setUTCMonth(new_month);
+        // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
+        if (new_month < 0 || new_month > 11)
+          new_month = (new_month + 12) % 12;
+      } else {
+        // For magnitudes >1, move one month at a time...
+        for (var i = 0; i < mag; i++)
+          // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
+          new_date = this.moveMonth(new_date, dir);
+        // ...then reset the day, keeping it in the new month
+        new_month = new_date.getUTCMonth();
+        new_date.setUTCDate(day);
+        test = function () {
+          return new_month !== new_date.getUTCMonth();
+        };
+      }
+      // Common date-resetting loop -- if date is beyond end of month, make it
+      // end of month
+      while (test()) {
+        new_date.setUTCDate(--day);
+        new_date.setUTCMonth(new_month);
+      }
+      return new_date;
+    },
+
+    moveYear: function (date, dir) {
+      return this.moveMonth(date, dir * 12);
+    },
+
+    dateWithinRange: function (date) {
+      return date >= this.startDate && date <= this.endDate;
+    },
+
+    keydown: function (e) {
+      if (this.picker.is(':not(:visible)')) {
+        if (e.keyCode === 27) // allow escape to hide and re-show picker
+          this.show();
+        return;
+      }
+      var dateChanged = false,
+        dir, newDate, newViewDate;
+      switch (e.keyCode) {
+        case 27: // escape
+          this.hide();
+          e.preventDefault();
+          break;
+        case 37: // left
+        case 39: // right
+          if (!this.keyboardNavigation) break;
+          dir = e.keyCode === 37 ? -1 : 1;
+          var viewMode = this.viewMode;
+          if (e.ctrlKey) {
+            viewMode += 2;
+          } else if (e.shiftKey) {
+            viewMode += 1;
+          }
+          if (viewMode === 4) {
+            newDate = this.moveYear(this.date, dir);
+            newViewDate = this.moveYear(this.viewDate, dir);
+          } else if (viewMode === 3) {
+            newDate = this.moveMonth(this.date, dir);
+            newViewDate = this.moveMonth(this.viewDate, dir);
+          } else if (viewMode === 2) {
+            newDate = this.moveDate(this.date, dir);
+            newViewDate = this.moveDate(this.viewDate, dir);
+          } else if (viewMode === 1) {
+            newDate = this.moveHour(this.date, dir);
+            newViewDate = this.moveHour(this.viewDate, dir);
+          } else if (viewMode === 0) {
+            newDate = this.moveMinute(this.date, dir);
+            newViewDate = this.moveMinute(this.viewDate, dir);
+          }
+          if (this.dateWithinRange(newDate)) {
+            this.date = newDate;
+            this.viewDate = newViewDate;
+            this.setValue();
+            this.update();
+            e.preventDefault();
+            dateChanged = true;
+          }
+          break;
+        case 38: // up
+        case 40: // down
+          if (!this.keyboardNavigation) break;
+          dir = e.keyCode === 38 ? -1 : 1;
+          viewMode = this.viewMode;
+          if (e.ctrlKey) {
+            viewMode += 2;
+          } else if (e.shiftKey) {
+            viewMode += 1;
+          }
+          if (viewMode === 4) {
+            newDate = this.moveYear(this.date, dir);
+            newViewDate = this.moveYear(this.viewDate, dir);
+          } else if (viewMode === 3) {
+            newDate = this.moveMonth(this.date, dir);
+            newViewDate = this.moveMonth(this.viewDate, dir);
+          } else if (viewMode === 2) {
+            newDate = this.moveDate(this.date, dir * 7);
+            newViewDate = this.moveDate(this.viewDate, dir * 7);
+          } else if (viewMode === 1) {
+            if (this.showMeridian) {
+              newDate = this.moveHour(this.date, dir * 6);
+              newViewDate = this.moveHour(this.viewDate, dir * 6);
+            } else {
+              newDate = this.moveHour(this.date, dir * 4);
+              newViewDate = this.moveHour(this.viewDate, dir * 4);
+            }
+          } else if (viewMode === 0) {
+            newDate = this.moveMinute(this.date, dir * 4);
+            newViewDate = this.moveMinute(this.viewDate, dir * 4);
+          }
+          if (this.dateWithinRange(newDate)) {
+            this.date = newDate;
+            this.viewDate = newViewDate;
+            this.setValue();
+            this.update();
+            e.preventDefault();
+            dateChanged = true;
+          }
+          break;
+        case 13: // enter
+          if (this.viewMode !== 0) {
+            var oldViewMode = this.viewMode;
+            this.showMode(-1);
+            this.fill();
+            if (oldViewMode === this.viewMode && this.autoclose) {
+              this.hide();
+            }
+          } else {
+            this.fill();
+            if (this.autoclose) {
+              this.hide();
+            }
+          }
+          e.preventDefault();
+          break;
+        case 9: // tab
+          this.hide();
+          break;
+      }
+      if (dateChanged) {
+        var element;
+        if (this.isInput) {
+          element = this.element;
+        } else if (this.component) {
+          element = this.element.find('input');
+        }
+        if (element) {
+          element.change();
+        }
+        this.element.trigger({
+          type: 'changeDate',
+          date: this.getDate()
+        });
+      }
+    },
+
+    showMode: function (dir) {
+      if (dir) {
+        var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));
+        if (newViewMode >= this.minView && newViewMode <= this.maxView) {
+          this.element.trigger({
+            type:        'changeMode',
+            date:        this.viewDate,
+            oldViewMode: this.viewMode,
+            newViewMode: newViewMode
+          });
+
+          this.viewMode = newViewMode;
+        }
+      }
+      /*
+       vitalets: fixing bug of very special conditions:
+       jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.
+       Method show() does not set display css correctly and datetimepicker is not shown.
+       Changed to .css('display', 'block') solve the problem.
+       See https://github.com/vitalets/x-editable/issues/37
+
+       In jquery 1.7.2+ everything works fine.
+       */
+      //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
+      this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
+      this.updateNavArrows();
+    },
+
+    reset: function () {
+      this._setDate(null, 'date');
+    },
+
+    convertViewModeText:  function (viewMode) {
+      switch (viewMode) {
+        case 4:
+          return 'decade';
+        case 3:
+          return 'year';
+        case 2:
+          return 'month';
+        case 1:
+          return 'day';
+        case 0:
+          return 'hour';
+      }
+    }
+  };
+
+  var old = $.fn.datetimepicker;
+  $.fn.datetimepicker = function (option) {
+    var args = Array.apply(null, arguments);
+    args.shift();
+    var internal_return;
+    this.each(function () {
+      var $this = $(this),
+        data = $this.data('datetimepicker'),
+        options = typeof option === 'object' && option;
+      if (!data) {
+        $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options))));
+      }
+      if (typeof option === 'string' && typeof data[option] === 'function') {
+        internal_return = data[option].apply(data, args);
+        if (internal_return !== undefined) {
+          return false;
+        }
+      }
+    });
+    if (internal_return !== undefined)
+      return internal_return;
+    else
+      return this;
+  };
+
+  $.fn.datetimepicker.defaults = {
+  };
+  $.fn.datetimepicker.Constructor = Datetimepicker;
+  var dates = $.fn.datetimepicker.dates = {
+    en: {
+      days:        ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
+      daysShort:   ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+      daysMin:     ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],
+      months:      ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
+      monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+      meridiem:    ['am', 'pm'],
+      suffix:      ['st', 'nd', 'rd', 'th'],
+      today:       'Today',
+      clear:       'Clear'
+    }
+  };
+
+  var DPGlobal = {
+    modes:            [
+      {
+        clsName: 'minutes',
+        navFnc:  'Hours',
+        navStep: 1
+      },
+      {
+        clsName: 'hours',
+        navFnc:  'Date',
+        navStep: 1
+      },
+      {
+        clsName: 'days',
+        navFnc:  'Month',
+        navStep: 1
+      },
+      {
+        clsName: 'months',
+        navFnc:  'FullYear',
+        navStep: 1
+      },
+      {
+        clsName: 'years',
+        navFnc:  'FullYear',
+        navStep: 10
+      }
+    ],
+    isLeapYear:       function (year) {
+      return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))
+    },
+    getDaysInMonth:   function (year, month) {
+      return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
+    },
+    getDefaultFormat: function (type, field) {
+      if (type === 'standard') {
+        if (field === 'input')
+          return 'yyyy-mm-dd hh:ii';
+        else
+          return 'yyyy-mm-dd hh:ii:ss';
+      } else if (type === 'php') {
+        if (field === 'input')
+          return 'Y-m-d H:i';
+        else
+          return 'Y-m-d H:i:s';
+      } else {
+        throw new Error('Invalid format type.');
+      }
+    },
+    validParts: function (type) {
+      if (type === 'standard') {
+        return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;
+      } else if (type === 'php') {
+        return /[dDjlNwzFmMnStyYaABgGhHis]/g;
+      } else {
+        throw new Error('Invalid format type.');
+      }
+    },
+    nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,
+    parseFormat: function (format, type) {
+      // IE treats \0 as a string end in inputs (truncating the value),
+      // so it's a bad format delimiter, anyway
+      var separators = format.replace(this.validParts(type), '\0').split('\0'),
+        parts = format.match(this.validParts(type));
+      if (!separators || !separators.length || !parts || parts.length === 0) {
+        throw new Error('Invalid date format.');
+      }
+      return {separators: separators, parts: parts};
+    },
+    parseDate: function (date, format, language, type, timezone) {
+      if (date instanceof Date) {
+        var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);
+        dateUTC.setMilliseconds(0);
+        return dateUTC;
+      }
+      if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) {
+        format = this.parseFormat('yyyy-mm-dd', type);
+      }
+      if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(date)) {
+        format = this.parseFormat('yyyy-mm-dd hh:ii', type);
+      }
+      if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(date)) {
+        format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type);
+      }
+      if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(date)) {
+        var part_re = /([-+]\d+)([dmwy])/,
+          parts = date.match(/([-+]\d+)([dmwy])/g),
+          part, dir;
+        date = new Date();
+        for (var i = 0; i < parts.length; i++) {
+          part = part_re.exec(parts[i]);
+          dir = parseInt(part[1]);
+          switch (part[2]) {
+            case 'd':
+              date.setUTCDate(date.getUTCDate() + dir);
+              break;
+            case 'm':
+              date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);
+              break;
+            case 'w':
+              date.setUTCDate(date.getUTCDate() + dir * 7);
+              break;
+            case 'y':
+              date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);
+              break;
+          }
+        }
+        return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0);
+      }
+      var parts = date && date.toString().match(this.nonpunctuation) || [],
+        date = new Date(0, 0, 0, 0, 0, 0, 0),
+        parsed = {},
+        setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'],
+        setters_map = {
+          hh:   function (d, v) {
+            return d.setUTCHours(v);
+          },
+          h:    function (d, v) {
+            return d.setUTCHours(v);
+          },
+          HH:   function (d, v) {
+            return d.setUTCHours(v === 12 ? 0 : v);
+          },
+          H:    function (d, v) {
+            return d.setUTCHours(v === 12 ? 0 : v);
+          },
+          ii:   function (d, v) {
+            return d.setUTCMinutes(v);
+          },
+          i:    function (d, v) {
+            return d.setUTCMinutes(v);
+          },
+          ss:   function (d, v) {
+            return d.setUTCSeconds(v);
+          },
+          s:    function (d, v) {
+            return d.setUTCSeconds(v);
+          },
+          yyyy: function (d, v) {
+            return d.setUTCFullYear(v);
+          },
+          yy:   function (d, v) {
+            return d.setUTCFullYear(2000 + v);
+          },
+          m:    function (d, v) {
+            v -= 1;
+            while (v < 0) v += 12;
+            v %= 12;
+            d.setUTCMonth(v);
+            while (d.getUTCMonth() !== v)
+              if (isNaN(d.getUTCMonth()))
+                return d;
+              else
+                d.setUTCDate(d.getUTCDate() - 1);
+            return d;
+          },
+          d:    function (d, v) {
+            return d.setUTCDate(v);
+          },
+          p:    function (d, v) {
+            return d.setUTCHours(v === 1 ? d.getUTCHours() + 12 : d.getUTCHours());
+          },
+          z:    function () {
+            return timezone
+          }
+        },
+        val, filtered, part;
+      setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
+      setters_map['dd'] = setters_map['d'];
+      setters_map['P'] = setters_map['p'];
+      setters_map['Z'] = setters_map['z'];
+      date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
+      if (parts.length === format.parts.length) {
+        for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
+          val = parseInt(parts[i], 10);
+          part = format.parts[i];
+          if (isNaN(val)) {
+            switch (part) {
+              case 'MM':
+                filtered = $(dates[language].months).filter(function () {
+                  var m = this.slice(0, parts[i].length),
+                    p = parts[i].slice(0, m.length);
+                  return m === p;
+                });
+                val = $.inArray(filtered[0], dates[language].months) + 1;
+                break;
+              case 'M':
+                filtered = $(dates[language].monthsShort).filter(function () {
+                  var m = this.slice(0, parts[i].length),
+                    p = parts[i].slice(0, m.length);
+                  return m.toLowerCase() === p.toLowerCase();
+                });
+                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
+                break;
+              case 'p':
+              case 'P':
+                val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);
+                break;
+              case 'z':
+              case 'Z':
+                timezone;
+                break;
+
+            }
+          }
+          parsed[part] = val;
+        }
+        for (var i = 0, s; i < setters_order.length; i++) {
+          s = setters_order[i];
+          if (s in parsed && !isNaN(parsed[s]))
+            setters_map[s](date, parsed[s])
+        }
+      }
+      return date;
+    },
+    formatDate:       function (date, format, language, type, timezone) {
+      if (date === null) {
+        return '';
+      }
+      var val;
+      if (type === 'standard') {
+        val = {
+          t:    date.getTime(),
+          // year
+          yy:   date.getUTCFullYear().toString().substring(2),
+          yyyy: date.getUTCFullYear(),
+          // month
+          m:    date.getUTCMonth() + 1,
+          M:    dates[language].monthsShort[date.getUTCMonth()],
+          MM:   dates[language].months[date.getUTCMonth()],
+          // day
+          d:    date.getUTCDate(),
+          D:    dates[language].daysShort[date.getUTCDay()],
+          DD:   dates[language].days[date.getUTCDay()],
+          p:    (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),
+          // hour
+          h:    date.getUTCHours(),
+          // minute
+          i:    date.getUTCMinutes(),
+          // second
+          s:    date.getUTCSeconds(),
+          // timezone
+          z:    timezone
+        };
+
+        if (dates[language].meridiem.length === 2) {
+          val.H = (val.h % 12 === 0 ? 12 : val.h % 12);
+        }
+        else {
+          val.H = val.h;
+        }
+        val.HH = (val.H < 10 ? '0' : '') + val.H;
+        val.P = val.p.toUpperCase();
+        val.Z = val.z;
+        val.hh = (val.h < 10 ? '0' : '') + val.h;
+        val.ii = (val.i < 10 ? '0' : '') + val.i;
+        val.ss = (val.s < 10 ? '0' : '') + val.s;
+        val.dd = (val.d < 10 ? '0' : '') + val.d;
+        val.mm = (val.m < 10 ? '0' : '') + val.m;
+      } else if (type === 'php') {
+        // php format
+        val = {
+          // year
+          y: date.getUTCFullYear().toString().substring(2),
+          Y: date.getUTCFullYear(),
+          // month
+          F: dates[language].months[date.getUTCMonth()],
+          M: dates[language].monthsShort[date.getUTCMonth()],
+          n: date.getUTCMonth() + 1,
+          t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()),
+          // day
+          j: date.getUTCDate(),
+          l: dates[language].days[date.getUTCDay()],
+          D: dates[language].daysShort[date.getUTCDay()],
+          w: date.getUTCDay(), // 0 -> 6
+          N: (date.getUTCDay() === 0 ? 7 : date.getUTCDay()),       // 1 -> 7
+          S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''),
+          // hour
+          a: (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),
+          g: (date.getUTCHours() % 12 === 0 ? 12 : date.getUTCHours() % 12),
+          G: date.getUTCHours(),
+          // minute
+          i: date.getUTCMinutes(),
+          // second
+          s: date.getUTCSeconds()
+        };
+        val.m = (val.n < 10 ? '0' : '') + val.n;
+        val.d = (val.j < 10 ? '0' : '') + val.j;
+        val.A = val.a.toString().toUpperCase();
+        val.h = (val.g < 10 ? '0' : '') + val.g;
+        val.H = (val.G < 10 ? '0' : '') + val.G;
+        val.i = (val.i < 10 ? '0' : '') + val.i;
+        val.s = (val.s < 10 ? '0' : '') + val.s;
+      } else {
+        throw new Error('Invalid format type.');
+      }
+      var date = [],
+        seps = $.extend([], format.separators);
+      for (var i = 0, cnt = format.parts.length; i < cnt; i++) {
+        if (seps.length) {
+          date.push(seps.shift());
+        }
+        date.push(val[format.parts[i]]);
+      }
+      if (seps.length) {
+        date.push(seps.shift());
+      }
+      return date.join('');
+    },
+    convertViewMode:  function (viewMode) {
+      switch (viewMode) {
+        case 4:
+        case 'decade':
+          viewMode = 4;
+          break;
+        case 3:
+        case 'year':
+          viewMode = 3;
+          break;
+        case 2:
+        case 'month':
+          viewMode = 2;
+          break;
+        case 1:
+        case 'day':
+          viewMode = 1;
+          break;
+        case 0:
+        case 'hour':
+          viewMode = 0;
+          break;
+      }
+
+      return viewMode;
+    },
+    headTemplate: '<thead>' +
+                '<tr>' +
+                '<th class="prev"><i class="{iconType} {leftArrow}"/></th>' +
+                '<th colspan="5" class="switch"></th>' +
+                '<th class="next"><i class="{iconType} {rightArrow}"/></th>' +
+                '</tr>' +
+      '</thead>',
+    headTemplateV3: '<thead>' +
+                '<tr>' +
+                '<th class="prev"><span class="{iconType} {leftArrow}"></span> </th>' +
+                '<th colspan="5" class="switch"></th>' +
+                '<th class="next"><span class="{iconType} {rightArrow}"></span> </th>' +
+                '</tr>' +
+      '</thead>',
+    contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
+    footTemplate: '<tfoot>' + 
+                    '<tr><th colspan="7" class="today"></th></tr>' +
+                    '<tr><th colspan="7" class="clear"></th></tr>' +
+                  '</tfoot>'
+  };
+  DPGlobal.template = '<div class="datetimepicker">' +
+    '<div class="datetimepicker-minutes">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplate +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-hours">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplate +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-days">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplate +
+    '<tbody></tbody>' +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-months">' +
+    '<table class="table-condensed">' +
+    DPGlobal.headTemplate +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-years">' +
+    '<table class="table-condensed">' +
+    DPGlobal.headTemplate +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '</div>';
+  DPGlobal.templateV3 = '<div class="datetimepicker">' +
+    '<div class="datetimepicker-minutes">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplateV3 +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-hours">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplateV3 +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-days">' +
+    '<table class=" table-condensed">' +
+    DPGlobal.headTemplateV3 +
+    '<tbody></tbody>' +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-months">' +
+    '<table class="table-condensed">' +
+    DPGlobal.headTemplateV3 +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '<div class="datetimepicker-years">' +
+    '<table class="table-condensed">' +
+    DPGlobal.headTemplateV3 +
+    DPGlobal.contTemplate +
+    DPGlobal.footTemplate +
+    '</table>' +
+    '</div>' +
+    '</div>';
+  $.fn.datetimepicker.DPGlobal = DPGlobal;
+
+  /* DATETIMEPICKER NO CONFLICT
+   * =================== */
+
+  $.fn.datetimepicker.noConflict = function () {
+    $.fn.datetimepicker = old;
+    return this;
+  };
+
+  /* DATETIMEPICKER DATA-API
+   * ================== */
+
+  $(document).on(
+    'focus.datetimepicker.data-api click.datetimepicker.data-api',
+    '[data-provide="datetimepicker"]',
+    function (e) {
+      var $this = $(this);
+      if ($this.data('datetimepicker')) return;
+      e.preventDefault();
+      // component click requires us to explicitly show it
+      $this.datetimepicker('show');
+    }
+  );
+  $(function () {
+    $('[data-provide="datetimepicker-inline"]').datetimepicker();
+  });
+
+}));
+/*
+ * Copyright 2018-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * WebSite: http://bootstrap-viewer.leftso.com
+ */
+
+$.fn.bootstrapViewer = function (options) {
+    $(this).on('click', function () {
+        var opts = $.extend({}, $.fn.bootstrapViewer.defaults, options);
+        var viewer = $('<div class="modal fade bs-example-modal-lg text-center" id="bootstrapViewer" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" >\n' +
+            '          <div class="modal-dialog modal-lg" style="display: inline-block; width: auto;">\n' +
+            '            <div class="modal-content">\n' +
+            '             <img' +
+            '\t\t\t class="carousel-inner img-responsive img-rounded img-viewer" draggable="false"\n' +
+            '\t\t\t onclick="/*$(\'#bootstrapViewer\').modal(\'hide\');setTimeout(function(){$(\'#bootstrapViewer\').remove();},200);*/"\n' +
+            '\t\t\t onmouseover="this.style.cursor=\'move\';" \n' +
+            '\t\t\t onmouseout="this.style.cursor=\'default\'"  \n' +
+            '\t\t\t />\n' +
+            '            </div>\n' +
+            '          </div>\n' +
+            '        </div>');
+        $('body').append(viewer);
+        if ($(this).attr(opts.src)) {
+            $("#bootstrapViewer").find(".img-viewer").attr("src", $(this).attr(opts.src));
+            $("#bootstrapViewer").modal();
+        } else {
+            throw "图片不存在"
+        }
+        $('#bootstrapViewer').on('hidden.bs.modal', function(){
+          $('#bootstrapViewer').remove();
+        });
+
+        var $moveDiv = $('#bootstrapViewer .modal-dialog');
+        var isMove = false;
+        var div_x = $moveDiv.offset().left;
+        var div_y = $moveDiv.offset().top;
+
+        var mousedownFunc = function (e) {
+          if (isMove) {
+            var left = e.pageX - div_x;
+            var top = e.pageY - div_y;
+            if(left < 0){ left = 0}
+            if(top < 0){ top = 0}
+            $moveDiv.css({"left": left, "top":top});
+          }
+        }
+
+        $moveDiv.mousedown(function (e) {
+          $moveDiv.css({ left: $moveDiv[0].offsetLeft, top: $moveDiv[0].offsetTop, marginTop: 0, position: 'absolute' });
+
+          isMove = true;
+          div_x = e.pageX - $moveDiv.offset().left;
+          div_y = e.pageY - $moveDiv.offset().top;
+          $(document).mousemove(mousedownFunc);
+        }).mouseup(function () {
+          isMove = false;
+          $(document).unbind('mousemove', mousedownFunc);
+        });
+    })
+
+    $(this).on('mouseover', function () {
+        $(this).css('cursor', 'zoom-in');
+    })
+}
+$.fn.bootstrapViewer.defaults = {
+    src: 'src'
+}
+;
+/* Author:mingyuhisoft@163.com
+ * Github:https://github.com/imingyu/jquery.mloading
+ * Npm:npm install jquery.mloading.js
+ * Date:2016-7-4
+ */
+
+
+;(function (root, factory) {
+  'use strict';
+
+  if (typeof module === 'object' && typeof module.exports === 'object') {
+    factory(require('jquery'),root);
+  } if(typeof define ==="function"){
+    if(define.cmd){
+      define(function(require, exports, module){
+        var $ = require("jquery");
+        factory($,root);
+      });
+    }else{
+      define(["jquery"],function($){
+        factory($,root);
+      });
+    }
+  }else {
+    factory(root.jQuery,root);
+  }
+} (typeof window !=="undefined" ? window : this, function ($, root, undefined) {
+  'use strict';
+  if(!$){
+    $ = root.jQuery || null;
+  }
+  if(!$){
+    throw new TypeError("必须引入jquery库方可正常使用!");
+  }
+
+  var arraySlice = Array.prototype.slice,
+    comparison=function (obj1,obj2) {
+      var result=true;
+      for(var pro in obj1){
+        if(obj1[pro] !== obj2[obj1]){
+          result=true;
+          break;
+        }
+      }
+      return result;
+    }
+
+  function MLoading(dom,options) {
+    options=options||{};
+    this.dom=dom;
+    this.options=$.extend(true,{},MLoading.defaultOptions,options);
+    this.curtain=null;
+    this.render().show();
+  }
+  MLoading.prototype={
+    constructor:MLoading,
+    initElement:function () {
+      var dom=this.dom,
+        ops=this.options;
+      var curtainElement=dom.children(".mloading"),
+        bodyElement = curtainElement.children('.mloading-body'),
+        barElement = bodyElement.children('.mloading-bar'),
+        iconElement = barElement.children('.mloading-icon'),
+        textElement = barElement.find(".mloading-text");
+      if (curtainElement.length == 0) {
+        curtainElement = $('<div class="mloading"></div>');
+        dom.append(curtainElement);
+      }
+      if (bodyElement.length == 0) {
+        bodyElement = $('<div class="mloading-body"></div>');
+        curtainElement.append(bodyElement);
+      }
+      if (barElement.length == 0) {
+        barElement = $('<div class="mloading-bar"></div>');
+        bodyElement.append(barElement);
+      }
+      if (iconElement.length == 0) {
+        var _iconElement=document.createElement(ops.iconTag);
+        iconElement = $(_iconElement);
+        iconElement.addClass("mloading-icon");
+        barElement.append(iconElement);
+      }
+      if (textElement.length == 0) {
+        textElement = $('<span class="mloading-text"></span>');
+        barElement.append(textElement);
+      }
+
+      this.curtainElement=curtainElement;
+      this.bodyElement = bodyElement;
+      this.barElement = barElement;
+      this.iconElement = iconElement;
+      this.textElement = textElement;
+      return this;
+    },
+    render:function () {
+      var dom=this.dom,
+        ops=this.options;
+      this.initElement();
+      if(dom.is("html") || dom.is("body")){
+        this.curtainElement.addClass("mloading-full");
+      }else{
+        this.curtainElement.removeClass("mloading-full");
+
+        if(!dom.hasClass("mloading-container")){
+          dom.addClass("mloading-container");
+        }
+      }
+      if(ops.mask){
+        this.curtainElement.addClass("mloading-mask");
+      }else{
+        this.curtainElement.removeClass("mloading-mask");
+      }
+      if(ops.content!="" && typeof ops.content!="undefined"){
+        if(ops.html){
+          this.bodyElement.html(ops.content);
+        }else{
+          this.bodyElement.text(ops.content);
+        }
+      }else{
+        this.iconElement.attr("src",ops.icon);
+        if(ops.html){
+          this.textElement.html(ops.text);
+        }else{
+          this.textElement.text(ops.text);
+        }
+      }
+
+      return this;
+    },
+    setOptions:function (options) {
+      options=options||{};
+      var oldOptions = this.options;
+      this.options = $.extend(true,{},this.options,options);
+      if(!comparison(oldOptions,this.options)) this.render();
+    },
+    show:function () {
+      var dom=this.dom,
+        ops=this.options,
+        barElement=this.barElement;
+      this.curtainElement.addClass("active");
+      barElement.css({
+        "marginTop":"-"+barElement.outerHeight()/2+"px",
+        "marginLeft":"-"+barElement.outerWidth()/2+"px"
+      });
+
+      return this;
+    },
+    hide:function () {
+      var dom=this.dom,
+        ops=this.options;
+      this.curtainElement.removeClass("active");
+      if(!dom.is("html") && !dom.is("body")){
+        dom.removeClass("mloading-container");
+      }
+      return this;
+    },
+    destroy:function () {
+      var dom=this.dom,
+        ops=this.options;
+      this.curtainElement.remove();
+      if(!dom.is("html") && !dom.is("body")){
+        dom.removeClass("mloading-container");
+      }
+      dom.removeData(MLoading.dataKey);
+      return this;
+    }
+  };
+  MLoading.dataKey="MLoading";
+  MLoading.defaultOptions = {
+    text:"加载中...",
+    iconTag:"img",
+    icon:"data:image/gif;base64,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",
+    html:false,
+    content:"",//设置content后,text和icon设置将无效
+    mask:true//是否显示遮罩(半透明背景)
+  };
+
+  $.fn.mLoading=function (options) {
+    var ops={},
+      funName="",
+      funArgs=[];
+    if(typeof options==="object"){
+      ops = options;
+    }else if(typeof options ==="string"){
+      funName=options;
+      funArgs = arraySlice.call(arguments).splice(0,1);
+    }
+    return this.each(function (i,element) {
+      var dom = $(element),
+        plsInc=dom.data(MLoading.dataKey);
+      if(!plsInc){
+        plsInc=new MLoading(dom,ops);
+      }
+
+      if(funName){
+        var fun = plsInc[funName];
+        if(typeof fun==="function"){
+          fun.apply(plsInc,funArgs);
+        }
+      }
+    });
+  }
+}));
+/*!
+ * jquery-confirm v3.3.4 (http://craftpip.github.io/jquery-confirm/)
+ * Author: Boniface Pereira
+ * Website: www.craftpip.com
+ * Contact: hey@craftpip.com
+ *
+ * Copyright 2013-2019 jquery-confirm
+ * Licensed under MIT (https://github.com/craftpip/jquery-confirm/blob/master/LICENSE)
+ */
+
+(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory);}else{if(typeof module==="object"&&module.exports){module.exports=function(root,jQuery){if(jQuery===undefined){if(typeof window!=="undefined"){jQuery=require("jquery");}else{jQuery=require("jquery")(root);}}factory(jQuery);return jQuery;};}else{factory(jQuery);}}}(function($){var w=window;$.fn.confirm=function(options,option2){if(typeof options==="undefined"){options={};}if(typeof options==="string"){options={content:options,title:(option2)?option2:false};}$(this).each(function(){var $this=$(this);if($this.attr("jc-attached")){console.warn("jConfirm has already been attached to this element ",$this[0]);return;}$this.on("click",function(e){e.preventDefault();var jcOption=$.extend({},options);if($this.attr("data-title")){jcOption.title=$this.attr("data-title");}if($this.attr("data-content")){jcOption.content=$this.attr("data-content");}if(typeof jcOption.buttons==="undefined"){jcOption.buttons={};}jcOption["$target"]=$this;if($this.attr("href")&&Object.keys(jcOption.buttons).length===0){var buttons=$.extend(true,{},w.jconfirm.pluginDefaults.defaultButtons,(w.jconfirm.defaults||{}).defaultButtons||{});var firstBtn=Object.keys(buttons)[0];jcOption.buttons=buttons;jcOption.buttons[firstBtn].action=function(){location.href=$this.attr("href");};}jcOption.closeIcon=false;var instance=$.confirm(jcOption);});$this.attr("jc-attached",true);});return $(this);};$.confirm=function(options,option2){if(typeof options==="undefined"){options={};}if(typeof options==="string"){options={content:options,title:(option2)?option2:false};}var putDefaultButtons=!(options.buttons===false);if(typeof options.buttons!=="object"){options.buttons={};}if(Object.keys(options.buttons).length===0&&putDefaultButtons){var buttons=$.extend(true,{},w.jconfirm.pluginDefaults.defaultButtons,(w.jconfirm.defaults||{}).defaultButtons||{});options.buttons=buttons;}return w.jconfirm(options);};$.alert=function(options,option2){if(typeof options==="undefined"){options={};}if(typeof options==="string"){options={content:options,title:(option2)?option2:false};}var putDefaultButtons=!(options.buttons===false);if(typeof options.buttons!=="object"){options.buttons={};}if(Object.keys(options.buttons).length===0&&putDefaultButtons){var buttons=$.extend(true,{},w.jconfirm.pluginDefaults.defaultButtons,(w.jconfirm.defaults||{}).defaultButtons||{});var firstBtn=Object.keys(buttons)[0];options.buttons[firstBtn]=buttons[firstBtn];}return w.jconfirm(options);};$.dialog=function(options,option2){if(typeof options==="undefined"){options={};}if(typeof options==="string"){options={content:options,title:(option2)?option2:false,closeIcon:function(){}};}options.buttons={};if(typeof options.closeIcon==="undefined"){options.closeIcon=function(){};}options.confirmKeys=[13];return w.jconfirm(options);};w.jconfirm=function(options){if(typeof options==="undefined"){options={};}var pluginOptions=$.extend(true,{},w.jconfirm.pluginDefaults);if(w.jconfirm.defaults){pluginOptions=$.extend(true,pluginOptions,w.jconfirm.defaults);}pluginOptions=$.extend(true,{},pluginOptions,options);var instance=new w.Jconfirm(pluginOptions);w.jconfirm.instances.push(instance);return instance;};w.Jconfirm=function(options){$.extend(this,options);this._init();};w.Jconfirm.prototype={_init:function(){var that=this;if(!w.jconfirm.instances.length){w.jconfirm.lastFocused=$("body").find(":focus");}this._id=Math.round(Math.random()*99999);this.contentParsed=$(document.createElement("div"));if(!this.lazyOpen){setTimeout(function(){that.open();},0);}},_buildHTML:function(){var that=this;this._parseAnimation(this.animation,"o");this._parseAnimation(this.closeAnimation,"c");this._parseBgDismissAnimation(this.backgroundDismissAnimation);this._parseColumnClass(this.columnClass);this._parseTheme(this.theme);this._parseType(this.type);var template=$(this.template);template.find(".jconfirm-box").addClass(this.animationParsed).addClass(this.backgroundDismissAnimationParsed).addClass(this.typeParsed);if(this.typeAnimated){template.find(".jconfirm-box").addClass("jconfirm-type-animated");}if(this.useBootstrap){template.find(".jc-bs3-row").addClass(this.bootstrapClasses.row);template.find(".jc-bs3-row").addClass("justify-content-md-center justify-content-sm-center justify-content-xs-center justify-content-lg-center");template.find(".jconfirm-box-container").addClass(this.columnClassParsed);if(this.containerFluid){template.find(".jc-bs3-container").addClass(this.bootstrapClasses.containerFluid);}else{template.find(".jc-bs3-container").addClass(this.bootstrapClasses.container);}}else{template.find(".jconfirm-box").css("width",this.boxWidth);}if(this.titleClass){template.find(".jconfirm-title-c").addClass(this.titleClass);}template.addClass(this.themeParsed);var ariaLabel="jconfirm-box"+this._id;template.find(".jconfirm-box").attr("aria-labelledby",ariaLabel).attr("tabindex",-1);template.find(".jconfirm-content").attr("id",ariaLabel);if(this.bgOpacity!==null){template.find(".jconfirm-bg").css("opacity",this.bgOpacity);}if(this.rtl){template.addClass("jconfirm-rtl");}this.$el=template.appendTo(this.container);this.$jconfirmBoxContainer=this.$el.find(".jconfirm-box-container");this.$jconfirmBox=this.$body=this.$el.find(".jconfirm-box");this.$jconfirmBg=this.$el.find(".jconfirm-bg");this.$title=this.$el.find(".jconfirm-title");this.$titleContainer=this.$el.find(".jconfirm-title-c");this.$content=this.$el.find("div.jconfirm-content");this.$contentPane=this.$el.find(".jconfirm-content-pane");this.$icon=this.$el.find(".jconfirm-icon-c");this.$closeIcon=this.$el.find(".jconfirm-closeIcon");this.$holder=this.$el.find(".jconfirm-holder");this.$btnc=this.$el.find(".jconfirm-buttons");this.$scrollPane=this.$el.find(".jconfirm-scrollpane");that.setStartingPoint();this._contentReady=$.Deferred();this._modalReady=$.Deferred();this.$holder.css({"padding-top":this.offsetTop,"padding-bottom":this.offsetBottom,});this.setTitle();this.setIcon();this._setButtons();this._parseContent();this.initDraggable();if(this.isAjax){this.showLoading(false);}$.when(this._contentReady,this._modalReady).then(function(){if(that.isAjaxLoading){setTimeout(function(){that.isAjaxLoading=false;that.setContent();that.setTitle();that.setIcon();setTimeout(function(){that.hideLoading(false);that._updateContentMaxHeight();},100);if(typeof that.onContentReady==="function"){that.onContentReady();}},50);}else{that._updateContentMaxHeight();that.setTitle();that.setIcon();if(typeof that.onContentReady==="function"){that.onContentReady();}}if(that.autoClose){that._startCountDown();}}).then(function(){that._watchContent();});if(this.animation==="none"){this.animationSpeed=1;this.animationBounce=1;}this.$body.css(this._getCSS(this.animationSpeed,this.animationBounce));this.$contentPane.css(this._getCSS(this.animationSpeed,1));this.$jconfirmBg.css(this._getCSS(this.animationSpeed,1));this.$jconfirmBoxContainer.css(this._getCSS(this.animationSpeed,1));},_typePrefix:"jconfirm-type-",typeParsed:"",_parseType:function(type){this.typeParsed=this._typePrefix+type;},setType:function(type){var oldClass=this.typeParsed;this._parseType(type);this.$jconfirmBox.removeClass(oldClass).addClass(this.typeParsed);},themeParsed:"",_themePrefix:"jconfirm-",setTheme:function(theme){var previous=this.theme;this.theme=theme||this.theme;this._parseTheme(this.theme);if(previous){this.$el.removeClass(previous);}this.$el.addClass(this.themeParsed);this.theme=theme;},_parseTheme:function(theme){var that=this;theme=theme.split(",");$.each(theme,function(k,a){if(a.indexOf(that._themePrefix)===-1){theme[k]=that._themePrefix+$.trim(a);}});this.themeParsed=theme.join(" ").toLowerCase();},backgroundDismissAnimationParsed:"",_bgDismissPrefix:"jconfirm-hilight-",_parseBgDismissAnimation:function(bgDismissAnimation){var animation=bgDismissAnimation.split(",");var that=this;$.each(animation,function(k,a){if(a.indexOf(that._bgDismissPrefix)===-1){animation[k]=that._bgDismissPrefix+$.trim(a);}});this.backgroundDismissAnimationParsed=animation.join(" ").toLowerCase();},animationParsed:"",closeAnimationParsed:"",_animationPrefix:"jconfirm-animation-",setAnimation:function(animation){this.animation=animation||this.animation;this._parseAnimation(this.animation,"o");},_parseAnimation:function(animation,which){which=which||"o";var animations=animation.split(",");var that=this;$.each(animations,function(k,a){if(a.indexOf(that._animationPrefix)===-1){animations[k]=that._animationPrefix+$.trim(a);}});var a_string=animations.join(" ").toLowerCase();if(which==="o"){this.animationParsed=a_string;}else{this.closeAnimationParsed=a_string;}return a_string;},setCloseAnimation:function(closeAnimation){this.closeAnimation=closeAnimation||this.closeAnimation;this._parseAnimation(this.closeAnimation,"c");},setAnimationSpeed:function(speed){this.animationSpeed=speed||this.animationSpeed;},columnClassParsed:"",setColumnClass:function(colClass){if(!this.useBootstrap){console.warn("cannot set columnClass, useBootstrap is set to false");return;}this.columnClass=colClass||this.columnClass;this._parseColumnClass(this.columnClass);this.$jconfirmBoxContainer.addClass(this.columnClassParsed);},_updateContentMaxHeight:function(){var height=$(window).height()-(this.$jconfirmBox.outerHeight()-this.$contentPane.outerHeight())-(this.offsetTop+this.offsetBottom);this.$contentPane.css({"max-height":height+"px"});},setBoxWidth:function(width){if(this.useBootstrap){console.warn("cannot set boxWidth, useBootstrap is set to true");return;}this.boxWidth=width;this.$jconfirmBox.css("width",width);},_parseColumnClass:function(colClass){colClass=colClass.toLowerCase();var p;switch(colClass){case"xl":case"xlarge":p="col-md-12";break;case"l":case"large":p="col-md-8 col-md-offset-2";break;case"m":case"medium":p="col-md-6 col-md-offset-3";break;case"s":case"small":p="col-md-4 col-md-offset-4";break;case"xs":case"xsmall":p="col-md-2 col-md-offset-5";break;default:p=colClass;}this.columnClassParsed=p;},initDraggable:function(){var that=this;var $t=this.$titleContainer;this.resetDrag();if(this.draggable){$t.on("mousedown",function(e){$t.addClass("jconfirm-hand");that.mouseX=e.clientX;that.mouseY=e.clientY;that.isDrag=true;});$(window).on("mousemove."+this._id,function(e){if(that.isDrag){that.movingX=e.clientX-that.mouseX+that.initialX;that.movingY=e.clientY-that.mouseY+that.initialY;that.setDrag();}});$(window).on("mouseup."+this._id,function(){$t.removeClass("jconfirm-hand");if(that.isDrag){that.isDrag=false;that.initialX=that.movingX;that.initialY=that.movingY;}});}},resetDrag:function(){this.isDrag=false;this.initialX=0;this.initialY=0;this.movingX=0;this.movingY=0;this.mouseX=0;this.mouseY=0;this.$jconfirmBoxContainer.css("transform","translate("+0+"px, "+0+"px)");},setDrag:function(){if(!this.draggable){return;}this.alignMiddle=false;var boxWidth=this.$jconfirmBox.outerWidth();var boxHeight=this.$jconfirmBox.outerHeight();var windowWidth=$(window).width();var windowHeight=$(window).height();var that=this;var dragUpdate=1;if(that.movingX%dragUpdate===0||that.movingY%dragUpdate===0){if(that.dragWindowBorder){var leftDistance=(windowWidth/2)-boxWidth/2;var topDistance=(windowHeight/2)-boxHeight/2;topDistance-=that.dragWindowGap;leftDistance-=that.dragWindowGap;if(leftDistance+that.movingX<0){that.movingX=-leftDistance;}else{if(leftDistance-that.movingX<0){that.movingX=leftDistance;}}if(topDistance+that.movingY<0){that.movingY=-topDistance;}else{if(topDistance-that.movingY<0){that.movingY=topDistance;}}}that.$jconfirmBoxContainer.css("transform","translate("+that.movingX+"px, "+that.movingY+"px)");}},_scrollTop:function(){if(typeof pageYOffset!=="undefined"){return pageYOffset;}else{var B=document.body;var D=document.documentElement;D=(D.clientHeight)?D:B;return D.scrollTop;}},_watchContent:function(){var that=this;if(this._timer){clearInterval(this._timer);}var prevContentHeight=0;this._timer=setInterval(function(){if(that.smoothContent){var contentHeight=that.$content.outerHeight()||0;if(contentHeight!==prevContentHeight){prevContentHeight=contentHeight;}var wh=$(window).height();var total=that.offsetTop+that.offsetBottom+that.$jconfirmBox.height()-that.$contentPane.height()+that.$content.height();if(total<wh){that.$contentPane.addClass("no-scroll");}else{that.$contentPane.removeClass("no-scroll");}}},this.watchInterval);},_overflowClass:"jconfirm-overflow",_hilightAnimating:false,highlight:function(){this.hiLightModal();},hiLightModal:function(){var that=this;if(this._hilightAnimating){return;}that.$body.addClass("hilight");var duration=parseFloat(that.$body.css("animation-duration"))||2;this._hilightAnimating=true;setTimeout(function(){that._hilightAnimating=false;that.$body.removeClass("hilight");},duration*1000);},_bindEvents:function(){var that=this;this.boxClicked=false;this.$scrollPane.click(function(e){if(!that.boxClicked){var buttonName=false;var shouldClose=false;var str;if(typeof that.backgroundDismiss==="function"){str=that.backgroundDismiss();}else{str=that.backgroundDismiss;}if(typeof str==="string"&&typeof that.buttons[str]!=="undefined"){buttonName=str;shouldClose=false;}else{if(typeof str==="undefined"||!!(str)===true){shouldClose=true;}else{shouldClose=false;}}if(buttonName){var btnResponse=that.buttons[buttonName].action.apply(that);shouldClose=(typeof btnResponse==="undefined")||!!(btnResponse);}if(shouldClose){that.close();}else{that.hiLightModal();}}that.boxClicked=false;});this.$jconfirmBox.click(function(e){that.boxClicked=true;});var isKeyDown=false;$(window).on("jcKeyDown."+that._id,function(e){if(!isKeyDown){isKeyDown=true;}});$(window).on("keyup."+that._id,function(e){if(isKeyDown){that.reactOnKey(e);isKeyDown=false;}});$(window).on("resize."+this._id,function(){that._updateContentMaxHeight();setTimeout(function(){that.resetDrag();},100);});},_cubic_bezier:"0.36, 0.55, 0.19",_getCSS:function(speed,bounce){return{"-webkit-transition-duration":speed/1000+"s","transition-duration":speed/1000+"s","-webkit-transition-timing-function":"cubic-bezier("+this._cubic_bezier+", "+bounce+")","transition-timing-function":"cubic-bezier("+this._cubic_bezier+", "+bounce+")"};},_setButtons:function(){var that=this;var total_buttons=0;if(typeof this.buttons!=="object"){this.buttons={};}$.each(this.buttons,function(key,button){total_buttons+=1;if(typeof button==="function"){that.buttons[key]=button={action:button};}that.buttons[key].text=button.text||key;that.buttons[key].btnClass=button.btnClass||"btn-default";that.buttons[key].action=button.action||function(){};that.buttons[key].keys=button.keys||[];that.buttons[key].isHidden=button.isHidden||false;that.buttons[key].isDisabled=button.isDisabled||false;$.each(that.buttons[key].keys,function(i,a){that.buttons[key].keys[i]=a.toLowerCase();});var button_element=$('<button type="button" class="btn"></button>').html(that.buttons[key].text).addClass(that.buttons[key].btnClass).prop("disabled",that.buttons[key].isDisabled).css("display",that.buttons[key].isHidden?"none":"").click(function(e){e.preventDefault();var res=that.buttons[key].action.apply(that,[that.buttons[key]]);that.onAction.apply(that,[key,that.buttons[key]]);that._stopCountDown();if(typeof res==="undefined"||res){that.close();}});that.buttons[key].el=button_element;that.buttons[key].setText=function(text){button_element.html(text);};that.buttons[key].addClass=function(className){button_element.addClass(className);};that.buttons[key].removeClass=function(className){button_element.removeClass(className);};that.buttons[key].disable=function(){that.buttons[key].isDisabled=true;button_element.prop("disabled",true);};that.buttons[key].enable=function(){that.buttons[key].isDisabled=false;button_element.prop("disabled",false);};that.buttons[key].show=function(){that.buttons[key].isHidden=false;button_element.css("display","");};that.buttons[key].hide=function(){that.buttons[key].isHidden=true;button_element.css("display","none");};that["$_"+key]=that["$$"+key]=button_element;that.$btnc.append(button_element);});if(total_buttons===0){this.$btnc.hide();}if(this.closeIcon===null&&total_buttons===0){this.closeIcon=true;}if(this.closeIcon){if(this.closeIconClass){var closeHtml='<i class="'+this.closeIconClass+'"></i>';this.$closeIcon.html(closeHtml);}this.$closeIcon.click(function(e){e.preventDefault();var buttonName=false;var shouldClose=false;var str;if(typeof that.closeIcon==="function"){str=that.closeIcon();}else{str=that.closeIcon;}if(typeof str==="string"&&typeof that.buttons[str]!=="undefined"){buttonName=str;shouldClose=false;}else{if(typeof str==="undefined"||!!(str)===true){shouldClose=true;}else{shouldClose=false;}}if(buttonName){var btnResponse=that.buttons[buttonName].action.apply(that);shouldClose=(typeof btnResponse==="undefined")||!!(btnResponse);}if(shouldClose){that.close();}});this.$closeIcon.show();}else{this.$closeIcon.hide();}},setTitle:function(string,force){force=force||false;if(typeof string!=="undefined"){if(typeof string==="string"){this.title=string;}else{if(typeof string==="function"){if(typeof string.promise==="function"){console.error("Promise was returned from title function, this is not supported.");}var response=string();if(typeof response==="string"){this.title=response;}else{this.title=false;}}else{this.title=false;}}}if(this.isAjaxLoading&&!force){return;}this.$title.html(this.title||"");this.updateTitleContainer();},setIcon:function(iconClass,force){force=force||false;if(typeof iconClass!=="undefined"){if(typeof iconClass==="string"){this.icon=iconClass;}else{if(typeof iconClass==="function"){var response=iconClass();if(typeof response==="string"){this.icon=response;}else{this.icon=false;}}else{this.icon=false;}}}if(this.isAjaxLoading&&!force){return;}this.$icon.html(this.icon?'<i class="'+this.icon+'"></i>':"");this.updateTitleContainer();},updateTitleContainer:function(){if(!this.title&&!this.icon){this.$titleContainer.hide();}else{this.$titleContainer.show();}},setContentPrepend:function(content,force){if(!content){return;}this.contentParsed.prepend(content);},setContentAppend:function(content){if(!content){return;}this.contentParsed.append(content);},setContent:function(content,force){force=!!force;var that=this;if(content){this.contentParsed.html("").append(content);}if(this.isAjaxLoading&&!force){return;}this.$content.html("");this.$content.append(this.contentParsed);setTimeout(function(){that.$body.find("input[autofocus]:visible:first").focus();},100);},loadingSpinner:false,showLoading:function(disableButtons){this.loadingSpinner=true;this.$jconfirmBox.addClass("loading");if(disableButtons){this.$btnc.find("button").prop("disabled",true);}},hideLoading:function(enableButtons){this.loadingSpinner=false;this.$jconfirmBox.removeClass("loading");if(enableButtons){this.$btnc.find("button").prop("disabled",false);}},ajaxResponse:false,contentParsed:"",isAjax:false,isAjaxLoading:false,_parseContent:function(){var that=this;var e="&nbsp;";if(typeof this.content==="function"){var res=this.content.apply(this);if(typeof res==="string"){this.content=res;}else{if(typeof res==="object"&&typeof res.always==="function"){this.isAjax=true;this.isAjaxLoading=true;res.always(function(data,status,xhr){that.ajaxResponse={data:data,status:status,xhr:xhr};that._contentReady.resolve(data,status,xhr);if(typeof that.contentLoaded==="function"){that.contentLoaded(data,status,xhr);}});this.content=e;}else{this.content=e;}}}if(typeof this.content==="string"&&this.content.substr(0,4).toLowerCase()==="url:"){this.isAjax=true;this.isAjaxLoading=true;var u=this.content.substring(4,this.content.length);$.get(u).done(function(html){that.contentParsed.html(html);}).always(function(data,status,xhr){that.ajaxResponse={data:data,status:status,xhr:xhr};that._contentReady.resolve(data,status,xhr);if(typeof that.contentLoaded==="function"){that.contentLoaded(data,status,xhr);}});}if(!this.content){this.content=e;}if(!this.isAjax){this.contentParsed.html(this.content);this.setContent();that._contentReady.resolve();}},_stopCountDown:function(){clearInterval(this.autoCloseInterval);if(this.$cd){this.$cd.remove();}},_startCountDown:function(){var that=this;var opt=this.autoClose.split("|");if(opt.length!==2){console.error("Invalid option for autoClose. example 'close|10000'");return false;}var button_key=opt[0];var time=parseInt(opt[1]);if(typeof this.buttons[button_key]==="undefined"){console.error("Invalid button key '"+button_key+"' for autoClose");return false;}var seconds=Math.ceil(time/1000);this.$cd=$('<span class="countdown"> ('+seconds+")</span>").appendTo(this["$_"+button_key]);this.autoCloseInterval=setInterval(function(){that.$cd.html(" ("+(seconds-=1)+") ");if(seconds<=0){that["$$"+button_key].trigger("click");that._stopCountDown();}},1000);},_getKey:function(key){switch(key){case 192:return"tilde";case 13:return"enter";case 16:return"shift";case 9:return"tab";case 20:return"capslock";case 17:return"ctrl";case 91:return"win";case 18:return"alt";case 27:return"esc";case 32:return"space";}var initial=String.fromCharCode(key);if(/^[A-z0-9]+$/.test(initial)){return initial.toLowerCase();}else{return false;}},reactOnKey:function(e){var that=this;var a=$(".jconfirm");if(a.eq(a.length-1)[0]!==this.$el[0]){return false;}var key=e.which;if(this.$content.find(":input").is(":focus")&&/13|32/.test(key)){return false;}var keyChar=this._getKey(key);if(keyChar==="esc"&&this.escapeKey){if(this.escapeKey===true){this.$scrollPane.trigger("click");}else{if(typeof this.escapeKey==="string"||typeof this.escapeKey==="function"){var buttonKey;if(typeof this.escapeKey==="function"){buttonKey=this.escapeKey();}else{buttonKey=this.escapeKey;}if(buttonKey){if(typeof this.buttons[buttonKey]==="undefined"){console.warn("Invalid escapeKey, no buttons found with key "+buttonKey);}else{this["$_"+buttonKey].trigger("click");}}}}}$.each(this.buttons,function(key,button){if(button.keys.indexOf(keyChar)!==-1){that["$_"+key].trigger("click");}});},setDialogCenter:function(){console.info("setDialogCenter is deprecated, dialogs are centered with CSS3 tables");},_unwatchContent:function(){clearInterval(this._timer);},close:function(onClosePayload){var that=this;if(typeof this.onClose==="function"){this.onClose(onClosePayload);}this._unwatchContent();$(window).unbind("resize."+this._id);$(window).unbind("keyup."+this._id);$(window).unbind("jcKeyDown."+this._id);if(this.draggable){$(window).unbind("mousemove."+this._id);$(window).unbind("mouseup."+this._id);this.$titleContainer.unbind("mousedown");}that.$el.removeClass(that.loadedClass);$("body").removeClass("jconfirm-no-scroll-"+that._id);that.$jconfirmBoxContainer.removeClass("jconfirm-no-transition");setTimeout(function(){that.$body.addClass(that.closeAnimationParsed);that.$jconfirmBg.addClass("jconfirm-bg-h");var closeTimer=(that.closeAnimation==="none")?1:that.animationSpeed;setTimeout(function(){that.$el.remove();var l=w.jconfirm.instances;var i=w.jconfirm.instances.length-1;for(i;i>=0;i--){if(w.jconfirm.instances[i]._id===that._id){w.jconfirm.instances.splice(i,1);}}if(!w.jconfirm.instances.length){if(that.scrollToPreviousElement&&w.jconfirm.lastFocused&&w.jconfirm.lastFocused.length&&$.contains(document,w.jconfirm.lastFocused[0])){var $lf=w.jconfirm.lastFocused;if(that.scrollToPreviousElementAnimate){var st=$(window).scrollTop();var ot=w.jconfirm.lastFocused.offset().top;var wh=$(window).height();if(!(ot>st&&ot<(st+wh))){var scrollTo=(ot-Math.round((wh/3)));$("html, body").animate({scrollTop:scrollTo},that.animationSpeed,"swing",function(){$lf.focus();});}else{$lf.focus();}}else{$lf.focus();}w.jconfirm.lastFocused=false;}}if(typeof that.onDestroy==="function"){that.onDestroy();}},closeTimer*0.4);},50);return true;},open:function(){if(this.isOpen()){return false;}this._buildHTML();this._bindEvents();this._open();return true;},setStartingPoint:function(){var el=false;if(this.animateFromElement!==true&&this.animateFromElement){el=this.animateFromElement;w.jconfirm.lastClicked=false;}else{if(w.jconfirm.lastClicked&&this.animateFromElement===true){el=w.jconfirm.lastClicked;w.jconfirm.lastClicked=false;}else{return false;}}if(!el){return false;}var offset=el.offset();var iTop=el.outerHeight()/2;var iLeft=el.outerWidth()/2;iTop-=this.$jconfirmBox.outerHeight()/2;iLeft-=this.$jconfirmBox.outerWidth()/2;var sourceTop=offset.top+iTop;sourceTop=sourceTop-this._scrollTop();var sourceLeft=offset.left+iLeft;var wh=$(window).height()/2;var ww=$(window).width()/2;var targetH=wh-this.$jconfirmBox.outerHeight()/2;var targetW=ww-this.$jconfirmBox.outerWidth()/2;sourceTop-=targetH;sourceLeft-=targetW;if(Math.abs(sourceTop)>wh||Math.abs(sourceLeft)>ww){return false;}this.$jconfirmBoxContainer.css("transform","translate("+sourceLeft+"px, "+sourceTop+"px)");},_open:function(){var that=this;if(typeof that.onOpenBefore==="function"){that.onOpenBefore();}this.$body.removeClass(this.animationParsed);this.$jconfirmBg.removeClass("jconfirm-bg-h");this.$body.focus();that.$jconfirmBoxContainer.css("transform","translate("+0+"px, "+0+"px)");setTimeout(function(){that.$body.css(that._getCSS(that.animationSpeed,1));that.$body.css({"transition-property":that.$body.css("transition-property")+", margin"});that.$jconfirmBoxContainer.addClass("jconfirm-no-transition");that._modalReady.resolve();if(typeof that.onOpen==="function"){that.onOpen();}that.$el.addClass(that.loadedClass);},this.animationSpeed);},loadedClass:"jconfirm-open",isClosed:function(){return !this.$el||this.$el.parent().length===0;},isOpen:function(){return !this.isClosed();},toggle:function(){if(!this.isOpen()){this.open();}else{this.close();}}};w.jconfirm.instances=[];w.jconfirm.lastFocused=false;w.jconfirm.pluginDefaults={template:'<div class="jconfirm"><div class="jconfirm-bg jconfirm-bg-h"></div><div class="jconfirm-scrollpane"><div class="jconfirm-row"><div class="jconfirm-cell"><div class="jconfirm-holder"><div class="jc-bs3-container"><div class="jc-bs3-row"><div class="jconfirm-box-container jconfirm-animated"><div class="jconfirm-box" role="dialog" aria-labelledby="labelled" tabindex="-1"><div class="jconfirm-closeIcon">&times;</div><div class="jconfirm-title-c"><span class="jconfirm-icon-c"></span><span class="jconfirm-title"></span></div><div class="jconfirm-content-pane"><div class="jconfirm-content"></div></div><div class="jconfirm-buttons"></div><div class="jconfirm-clear"></div></div></div></div></div></div></div></div></div></div>',title:"Hello",titleClass:"",type:"default",typeAnimated:true,draggable:true,dragWindowGap:15,dragWindowBorder:true,animateFromElement:true,alignMiddle:true,smoothContent:true,content:"Are you sure to continue?",buttons:{},defaultButtons:{ok:{action:function(){}},close:{action:function(){}}},contentLoaded:function(){},icon:"",lazyOpen:false,bgOpacity:null,theme:"light",animation:"scale",closeAnimation:"scale",animationSpeed:400,animationBounce:1,escapeKey:true,rtl:false,container:"body",containerFluid:false,backgroundDismiss:false,backgroundDismissAnimation:"shake",autoClose:false,closeIcon:null,closeIconClass:false,watchInterval:100,columnClass:"col-md-4 col-md-offset-4 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1",boxWidth:"50%",scrollToPreviousElement:true,scrollToPreviousElementAnimate:true,useBootstrap:true,offsetTop:40,offsetBottom:40,bootstrapClasses:{container:"container",containerFluid:"container-fluid",row:"row"},onContentReady:function(){},onOpenBefore:function(){},onOpen:function(){},onClose:function(){},onDestroy:function(){},onAction:function(){}};var keyDown=false;$(window).on("keydown",function(e){if(!keyDown){var $target=$(e.target);var pass=false;if($target.closest(".jconfirm-box").length){pass=true;}if(pass){$(window).trigger("jcKeyDown");}keyDown=true;}});$(window).on("keyup",function(){keyDown=false;});w.jconfirm.lastClicked=false;$(document).on("mousedown","button, a, [jc-source]",function(){w.jconfirm.lastClicked=$(this);});}));
+function createMDEditor(element, opts){
+  var defaults = {
+    height: 600,
+    path: '/editormd/lib/',
+    syncScrolling: "single",
+    tex: true,
+    tocm: true,
+    emoji: true,
+    taskList: true,
+    codeFold: true,
+    searchReplace: true,
+    htmlDecode: "style,script,iframe",
+    sequenceDiagram: true,
+    autoFocus: false,
+    toolbarIcons: function () {
+      // Or return editormd.toolbarModes[name]; // full, simple, mini
+      // Using "||" set icons align right.
+      return ["bold", "italic", "|", "list-ul", "list-ol", "|", "code", "code-block", "|", "image", "table", '|', "watch", "clear"]
+    },
+    //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。
+    saveHTMLToTextarea: true,
+    dialogMaskOpacity: 0.6,
+    imageUpload: true,
+    imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
+    imageUploadURL: '/api/attachments.json'
+  }
+  var options = $.extend({}, defaults, opts);
+
+  return editormd(element, options);
+}
+
+function ajaxErrorNotifyHandler(res) {
+  var message = '';
+  if(res.status !== 500){
+    message = res.responseJSON.message;
+  } else {
+    message = '系统错误';
+  }
+  return $.notify({message: message}, {type: 'danger'});
+}
+
+function resetFileInputFunc(file){
+  file.after(file.clone().val(""));
+  file.remove();
+}
+
+function customConfirm(opts){
+  var okCallback = opts.ok;
+  var cancelCallback = opts.cancel;
+
+  var defaultOpts = {
+    title: '提示',
+    buttons: {
+      ok: {
+        text: '确认',
+        btnClass: 'btn btn-primary',
+        action: okCallback
+      },
+      cancel: {
+        text: '取消',
+        btnClass: 'btn btn-secondary',
+        action: cancelCallback
+      },
+    }
+  }
+  return $.confirm($.extend({}, defaultOpts, opts))
+}
+
+function show_success_flash(message){
+  $.notify({
+    message: message || '操作成功'
+  },{
+    type: 'success'
+  });
+}
+;
+(function (global, factory) {
+	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+	typeof define === 'function' && define.amd ? define(['exports'], factory) :
+	(factory((global.echarts = {})));
+}(this, (function (exports) { 'use strict';
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// (1) The code `if (__DEV__) ...` can be removed by build tool.
+// (2) If intend to use `__DEV__`, this module should be imported. Use a global
+// variable `__DEV__` may cause that miss the declaration (see #6535), or the
+// declaration is behind of the using position (for example in `Model.extent`,
+// And tools like rollup can not analysis the dependency if not import).
+
+var dev;
+
+// In browser
+if (typeof window !== 'undefined') {
+    dev = window.__DEV__;
+}
+// In node
+else if (typeof global !== 'undefined') {
+    dev = global.__DEV__;
+}
+
+if (typeof dev === 'undefined') {
+    dev = true;
+}
+
+var __DEV__ = dev;
+
+/**
+ * zrender: 生成唯一id
+ *
+ * @author errorrik (errorrik@gmail.com)
+ */
+
+var idStart = 0x0907;
+
+var guid = function () {
+    return idStart++;
+};
+
+/**
+ * echarts设备环境识别
+ *
+ * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。
+ * @author firede[firede@firede.us]
+ * @desc thanks zepto.
+ */
+
+var env = {};
+
+if (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {
+    // In Weixin Application
+    env = {
+        browser: {},
+        os: {},
+        node: false,
+        wxa: true, // Weixin Application
+        canvasSupported: true,
+        svgSupported: false,
+        touchEventsSupported: true
+    };
+}
+else if (typeof document === 'undefined' && typeof self !== 'undefined') {
+    // In worker
+    env = {
+        browser: {},
+        os: {},
+        node: false,
+        worker: true,
+        canvasSupported: true
+    };
+}
+else if (typeof navigator === 'undefined') {
+    // In node
+    env = {
+        browser: {},
+        os: {},
+        node: true,
+        worker: false,
+        // Assume canvas is supported
+        canvasSupported: true,
+        svgSupported: true
+    };
+}
+else {
+    env = detect(navigator.userAgent);
+}
+
+var env$1 = env;
+
+// Zepto.js
+// (c) 2010-2013 Thomas Fuchs
+// Zepto.js may be freely distributed under the MIT license.
+
+function detect(ua) {
+    var os = {};
+    var browser = {};
+    // var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/);
+    // var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
+    // var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
+    // var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
+    // var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);
+    // var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/);
+    // var touchpad = webos && ua.match(/TouchPad/);
+    // var kindle = ua.match(/Kindle\/([\d.]+)/);
+    // var silk = ua.match(/Silk\/([\d._]+)/);
+    // var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/);
+    // var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/);
+    // var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/);
+    // var playbook = ua.match(/PlayBook/);
+    // var chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
+    var firefox = ua.match(/Firefox\/([\d.]+)/);
+    // var safari = webkit && ua.match(/Mobile\//) && !chrome;
+    // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;
+    var ie = ua.match(/MSIE\s([\d.]+)/)
+        // IE 11 Trident/7.0; rv:11.0
+        || ua.match(/Trident\/.+?rv:(([\d.]+))/);
+    var edge = ua.match(/Edge\/([\d.]+)/); // IE 12 and 12+
+
+    var weChat = (/micromessenger/i).test(ua);
+
+    // Todo: clean this up with a better OS/browser seperation:
+    // - discern (more) between multiple browsers on android
+    // - decide if kindle fire in silk mode is android or not
+    // - Firefox on Android doesn't specify the Android version
+    // - possibly devide in os, device and browser hashes
+
+    // if (browser.webkit = !!webkit) browser.version = webkit[1];
+
+    // if (android) os.android = true, os.version = android[2];
+    // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');
+    // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');
+    // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
+    // if (webos) os.webos = true, os.version = webos[2];
+    // if (touchpad) os.touchpad = true;
+    // if (blackberry) os.blackberry = true, os.version = blackberry[2];
+    // if (bb10) os.bb10 = true, os.version = bb10[2];
+    // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2];
+    // if (playbook) browser.playbook = true;
+    // if (kindle) os.kindle = true, os.version = kindle[1];
+    // if (silk) browser.silk = true, browser.version = silk[1];
+    // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;
+    // if (chrome) browser.chrome = true, browser.version = chrome[1];
+    if (firefox) {
+        browser.firefox = true;
+        browser.version = firefox[1];
+    }
+    // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;
+    // if (webview) browser.webview = true;
+
+    if (ie) {
+        browser.ie = true;
+        browser.version = ie[1];
+    }
+
+    if (edge) {
+        browser.edge = true;
+        browser.version = edge[1];
+    }
+
+    // It is difficult to detect WeChat in Win Phone precisely, because ua can
+    // not be set on win phone. So we do not consider Win Phone.
+    if (weChat) {
+        browser.weChat = true;
+    }
+
+    // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||
+    //     (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));
+    // os.phone  = !!(!os.tablet && !os.ipod && (android || iphone || webos ||
+    //     (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\/([\d.]+)/)) ||
+    //     (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/))));
+
+    return {
+        browser: browser,
+        os: os,
+        node: false,
+        // 原生canvas支持,改极端点了
+        // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9)
+        canvasSupported: !!document.createElement('canvas').getContext,
+        svgSupported: typeof SVGRect !== 'undefined',
+        // works on most browsers
+        // IE10/11 does not support touch event, and MS Edge supports them but not by
+        // default, so we dont check navigator.maxTouchPoints for them here.
+        touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge,
+        // <http://caniuse.com/#search=pointer%20event>.
+        pointerEventsSupported: 'onpointerdown' in window
+            // Firefox supports pointer but not by default, only MS browsers are reliable on pointer
+            // events currently. So we dont use that on other browsers unless tested sufficiently.
+            // Although IE 10 supports pointer event, it use old style and is different from the
+            // standard. So we exclude that. (IE 10 is hardly used on touch device)
+            && (browser.edge || (browser.ie && browser.version >= 11))
+        // passiveSupported: detectPassiveSupport()
+    };
+}
+
+// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection
+// function detectPassiveSupport() {
+//     // Test via a getter in the options object to see if the passive property is accessed
+//     var supportsPassive = false;
+//     try {
+//         var opts = Object.defineProperty({}, 'passive', {
+//             get: function() {
+//                 supportsPassive = true;
+//             }
+//         });
+//         window.addEventListener('testPassive', function() {}, opts);
+//     } catch (e) {
+//     }
+//     return supportsPassive;
+// }
+
+/**
+ * @module zrender/core/util
+ */
+
+// 用于处理merge时无法遍历Date等对象的问题
+var BUILTIN_OBJECT = {
+    '[object Function]': 1,
+    '[object RegExp]': 1,
+    '[object Date]': 1,
+    '[object Error]': 1,
+    '[object CanvasGradient]': 1,
+    '[object CanvasPattern]': 1,
+    // For node-canvas
+    '[object Image]': 1,
+    '[object Canvas]': 1
+};
+
+var TYPED_ARRAY = {
+    '[object Int8Array]': 1,
+    '[object Uint8Array]': 1,
+    '[object Uint8ClampedArray]': 1,
+    '[object Int16Array]': 1,
+    '[object Uint16Array]': 1,
+    '[object Int32Array]': 1,
+    '[object Uint32Array]': 1,
+    '[object Float32Array]': 1,
+    '[object Float64Array]': 1
+};
+
+var objToString = Object.prototype.toString;
+
+var arrayProto = Array.prototype;
+var nativeForEach = arrayProto.forEach;
+var nativeFilter = arrayProto.filter;
+var nativeSlice = arrayProto.slice;
+var nativeMap = arrayProto.map;
+var nativeReduce = arrayProto.reduce;
+
+// Avoid assign to an exported variable, for transforming to cjs.
+var methods = {};
+
+function $override(name, fn) {
+    // Clear ctx instance for different environment
+    if (name === 'createCanvas') {
+        _ctx = null;
+    }
+
+    methods[name] = fn;
+}
+
+/**
+ * Those data types can be cloned:
+ *     Plain object, Array, TypedArray, number, string, null, undefined.
+ * Those data types will be assgined using the orginal data:
+ *     BUILTIN_OBJECT
+ * Instance of user defined class will be cloned to a plain object, without
+ * properties in prototype.
+ * Other data types is not supported (not sure what will happen).
+ *
+ * Caution: do not support clone Date, for performance consideration.
+ * (There might be a large number of date in `series.data`).
+ * So date should not be modified in and out of echarts.
+ *
+ * @param {*} source
+ * @return {*} new
+ */
+function clone(source) {
+    if (source == null || typeof source != 'object') {
+        return source;
+    }
+
+    var result = source;
+    var typeStr = objToString.call(source);
+
+    if (typeStr === '[object Array]') {
+        if (!isPrimitive(source)) {
+            result = [];
+            for (var i = 0, len = source.length; i < len; i++) {
+                result[i] = clone(source[i]);
+            }
+        }
+    }
+    else if (TYPED_ARRAY[typeStr]) {
+        if (!isPrimitive(source)) {
+            var Ctor = source.constructor;
+            if (source.constructor.from) {
+                result = Ctor.from(source);
+            }
+            else {
+                result = new Ctor(source.length);
+                for (var i = 0, len = source.length; i < len; i++) {
+                    result[i] = clone(source[i]);
+                }
+            }
+        }
+    }
+    else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {
+        result = {};
+        for (var key in source) {
+            if (source.hasOwnProperty(key)) {
+                result[key] = clone(source[key]);
+            }
+        }
+    }
+
+    return result;
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} target
+ * @param {*} source
+ * @param {boolean} [overwrite=false]
+ */
+function merge(target, source, overwrite) {
+    // We should escapse that source is string
+    // and enter for ... in ...
+    if (!isObject$1(source) || !isObject$1(target)) {
+        return overwrite ? clone(source) : target;
+    }
+
+    for (var key in source) {
+        if (source.hasOwnProperty(key)) {
+            var targetProp = target[key];
+            var sourceProp = source[key];
+
+            if (isObject$1(sourceProp)
+                && isObject$1(targetProp)
+                && !isArray(sourceProp)
+                && !isArray(targetProp)
+                && !isDom(sourceProp)
+                && !isDom(targetProp)
+                && !isBuiltInObject(sourceProp)
+                && !isBuiltInObject(targetProp)
+                && !isPrimitive(sourceProp)
+                && !isPrimitive(targetProp)
+            ) {
+                // 如果需要递归覆盖,就递归调用merge
+                merge(targetProp, sourceProp, overwrite);
+            }
+            else if (overwrite || !(key in target)) {
+                // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况
+                // NOTE,在 target[key] 不存在的时候也是直接覆盖
+                target[key] = clone(source[key], true);
+            }
+        }
+    }
+
+    return target;
+}
+
+/**
+ * @param {Array} targetAndSources The first item is target, and the rests are source.
+ * @param {boolean} [overwrite=false]
+ * @return {*} target
+ */
+function mergeAll(targetAndSources, overwrite) {
+    var result = targetAndSources[0];
+    for (var i = 1, len = targetAndSources.length; i < len; i++) {
+        result = merge(result, targetAndSources[i], overwrite);
+    }
+    return result;
+}
+
+/**
+ * @param {*} target
+ * @param {*} source
+ * @memberOf module:zrender/core/util
+ */
+function extend(target, source) {
+    for (var key in source) {
+        if (source.hasOwnProperty(key)) {
+            target[key] = source[key];
+        }
+    }
+    return target;
+}
+
+/**
+ * @param {*} target
+ * @param {*} source
+ * @param {boolean} [overlay=false]
+ * @memberOf module:zrender/core/util
+ */
+function defaults(target, source, overlay) {
+    for (var key in source) {
+        if (source.hasOwnProperty(key)
+            && (overlay ? source[key] != null : target[key] == null)
+        ) {
+            target[key] = source[key];
+        }
+    }
+    return target;
+}
+
+var createCanvas = function () {
+    return methods.createCanvas();
+};
+
+methods.createCanvas = function () {
+    return document.createElement('canvas');
+};
+
+// FIXME
+var _ctx;
+
+function getContext() {
+    if (!_ctx) {
+        // Use util.createCanvas instead of createCanvas
+        // because createCanvas may be overwritten in different environment
+        _ctx = createCanvas().getContext('2d');
+    }
+    return _ctx;
+}
+
+/**
+ * 查询数组中元素的index
+ * @memberOf module:zrender/core/util
+ */
+function indexOf(array, value) {
+    if (array) {
+        if (array.indexOf) {
+            return array.indexOf(value);
+        }
+        for (var i = 0, len = array.length; i < len; i++) {
+            if (array[i] === value) {
+                return i;
+            }
+        }
+    }
+    return -1;
+}
+
+/**
+ * 构造类继承关系
+ *
+ * @memberOf module:zrender/core/util
+ * @param {Function} clazz 源类
+ * @param {Function} baseClazz 基类
+ */
+function inherits(clazz, baseClazz) {
+    var clazzPrototype = clazz.prototype;
+    function F() {}
+    F.prototype = baseClazz.prototype;
+    clazz.prototype = new F();
+
+    for (var prop in clazzPrototype) {
+        clazz.prototype[prop] = clazzPrototype[prop];
+    }
+    clazz.prototype.constructor = clazz;
+    clazz.superClass = baseClazz;
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {Object|Function} target
+ * @param {Object|Function} sorce
+ * @param {boolean} overlay
+ */
+function mixin(target, source, overlay) {
+    target = 'prototype' in target ? target.prototype : target;
+    source = 'prototype' in source ? source.prototype : source;
+
+    defaults(target, source, overlay);
+}
+
+/**
+ * Consider typed array.
+ * @param {Array|TypedArray} data
+ */
+function isArrayLike(data) {
+    if (! data) {
+        return;
+    }
+    if (typeof data == 'string') {
+        return false;
+    }
+    return typeof data.length == 'number';
+}
+
+/**
+ * 数组或对象遍历
+ * @memberOf module:zrender/core/util
+ * @param {Object|Array} obj
+ * @param {Function} cb
+ * @param {*} [context]
+ */
+function each$1(obj, cb, context) {
+    if (!(obj && cb)) {
+        return;
+    }
+    if (obj.forEach && obj.forEach === nativeForEach) {
+        obj.forEach(cb, context);
+    }
+    else if (obj.length === +obj.length) {
+        for (var i = 0, len = obj.length; i < len; i++) {
+            cb.call(context, obj[i], i, obj);
+        }
+    }
+    else {
+        for (var key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                cb.call(context, obj[key], key, obj);
+            }
+        }
+    }
+}
+
+/**
+ * 数组映射
+ * @memberOf module:zrender/core/util
+ * @param {Array} obj
+ * @param {Function} cb
+ * @param {*} [context]
+ * @return {Array}
+ */
+function map(obj, cb, context) {
+    if (!(obj && cb)) {
+        return;
+    }
+    if (obj.map && obj.map === nativeMap) {
+        return obj.map(cb, context);
+    }
+    else {
+        var result = [];
+        for (var i = 0, len = obj.length; i < len; i++) {
+            result.push(cb.call(context, obj[i], i, obj));
+        }
+        return result;
+    }
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {Array} obj
+ * @param {Function} cb
+ * @param {Object} [memo]
+ * @param {*} [context]
+ * @return {Array}
+ */
+function reduce(obj, cb, memo, context) {
+    if (!(obj && cb)) {
+        return;
+    }
+    if (obj.reduce && obj.reduce === nativeReduce) {
+        return obj.reduce(cb, memo, context);
+    }
+    else {
+        for (var i = 0, len = obj.length; i < len; i++) {
+            memo = cb.call(context, memo, obj[i], i, obj);
+        }
+        return memo;
+    }
+}
+
+/**
+ * 数组过滤
+ * @memberOf module:zrender/core/util
+ * @param {Array} obj
+ * @param {Function} cb
+ * @param {*} [context]
+ * @return {Array}
+ */
+function filter(obj, cb, context) {
+    if (!(obj && cb)) {
+        return;
+    }
+    if (obj.filter && obj.filter === nativeFilter) {
+        return obj.filter(cb, context);
+    }
+    else {
+        var result = [];
+        for (var i = 0, len = obj.length; i < len; i++) {
+            if (cb.call(context, obj[i], i, obj)) {
+                result.push(obj[i]);
+            }
+        }
+        return result;
+    }
+}
+
+/**
+ * 数组项查找
+ * @memberOf module:zrender/core/util
+ * @param {Array} obj
+ * @param {Function} cb
+ * @param {*} [context]
+ * @return {*}
+ */
+function find(obj, cb, context) {
+    if (!(obj && cb)) {
+        return;
+    }
+    for (var i = 0, len = obj.length; i < len; i++) {
+        if (cb.call(context, obj[i], i, obj)) {
+            return obj[i];
+        }
+    }
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {Function} func
+ * @param {*} context
+ * @return {Function}
+ */
+function bind(func, context) {
+    var args = nativeSlice.call(arguments, 2);
+    return function () {
+        return func.apply(context, args.concat(nativeSlice.call(arguments)));
+    };
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {Function} func
+ * @return {Function}
+ */
+function curry(func) {
+    var args = nativeSlice.call(arguments, 1);
+    return function () {
+        return func.apply(this, args.concat(nativeSlice.call(arguments)));
+    };
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isArray(value) {
+    return objToString.call(value) === '[object Array]';
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isFunction$1(value) {
+    return typeof value === 'function';
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isString(value) {
+    return objToString.call(value) === '[object String]';
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isObject$1(value) {
+    // Avoid a V8 JIT bug in Chrome 19-20.
+    // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+    var type = typeof value;
+    return type === 'function' || (!!value && type == 'object');
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isBuiltInObject(value) {
+    return !!BUILTIN_OBJECT[objToString.call(value)];
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isTypedArray(value) {
+    return !!TYPED_ARRAY[objToString.call(value)];
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {*} value
+ * @return {boolean}
+ */
+function isDom(value) {
+    return typeof value === 'object'
+        && typeof value.nodeType === 'number'
+        && typeof value.ownerDocument === 'object';
+}
+
+/**
+ * Whether is exactly NaN. Notice isNaN('a') returns true.
+ * @param {*} value
+ * @return {boolean}
+ */
+function eqNaN(value) {
+    return value !== value;
+}
+
+/**
+ * If value1 is not null, then return value1, otherwise judget rest of values.
+ * Low performance.
+ * @memberOf module:zrender/core/util
+ * @return {*} Final value
+ */
+function retrieve(values) {
+    for (var i = 0, len = arguments.length; i < len; i++) {
+        if (arguments[i] != null) {
+            return arguments[i];
+        }
+    }
+}
+
+function retrieve2(value0, value1) {
+    return value0 != null
+        ? value0
+        : value1;
+}
+
+function retrieve3(value0, value1, value2) {
+    return value0 != null
+        ? value0
+        : value1 != null
+        ? value1
+        : value2;
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {Array} arr
+ * @param {number} startIndex
+ * @param {number} endIndex
+ * @return {Array}
+ */
+function slice() {
+    return Function.call.apply(nativeSlice, arguments);
+}
+
+/**
+ * Normalize css liked array configuration
+ * e.g.
+ *  3 => [3, 3, 3, 3]
+ *  [4, 2] => [4, 2, 4, 2]
+ *  [4, 3, 2] => [4, 3, 2, 3]
+ * @param {number|Array.<number>} val
+ * @return {Array.<number>}
+ */
+function normalizeCssArray(val) {
+    if (typeof (val) === 'number') {
+        return [val, val, val, val];
+    }
+    var len = val.length;
+    if (len === 2) {
+        // vertical | horizontal
+        return [val[0], val[1], val[0], val[1]];
+    }
+    else if (len === 3) {
+        // top | horizontal | bottom
+        return [val[0], val[1], val[2], val[1]];
+    }
+    return val;
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {boolean} condition
+ * @param {string} message
+ */
+function assert$1(condition, message) {
+    if (!condition) {
+        throw new Error(message);
+    }
+}
+
+/**
+ * @memberOf module:zrender/core/util
+ * @param {string} str string to be trimed
+ * @return {string} trimed string
+ */
+function trim(str) {
+    if (str == null) {
+        return null;
+    }
+    else if (typeof str.trim === 'function') {
+        return str.trim();
+    }
+    else {
+        return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+    }
+}
+
+var primitiveKey = '__ec_primitive__';
+/**
+ * Set an object as primitive to be ignored traversing children in clone or merge
+ */
+function setAsPrimitive(obj) {
+    obj[primitiveKey] = true;
+}
+
+function isPrimitive(obj) {
+    return obj[primitiveKey];
+}
+
+/**
+ * @constructor
+ * @param {Object} obj Only apply `ownProperty`.
+ */
+function HashMap(obj) {
+    var isArr = isArray(obj);
+    var thisMap = this;
+
+    (obj instanceof HashMap)
+        ? obj.each(visit)
+        : (obj && each$1(obj, visit));
+
+    function visit(value, key) {
+        isArr ? thisMap.set(value, key) : thisMap.set(key, value);
+    }
+}
+
+// Add prefix to avoid conflict with Object.prototype.
+
+HashMap.prototype = {
+    constructor: HashMap,
+    // Do not provide `has` method to avoid defining what is `has`.
+    // (We usually treat `null` and `undefined` as the same, different
+    // from ES6 Map).
+    get: function (key) {
+        return this.hasOwnProperty(key) ? this[key] : null;
+    },
+    set: function (key, value) {
+        // Comparing with invocation chaining, `return value` is more commonly
+        // used in this case: `var someVal = map.set('a', genVal());`
+        return (this[key] = value);
+    },
+    // Although util.each can be performed on this hashMap directly, user
+    // should not use the exposed keys, who are prefixed.
+    each: function (cb, context) {
+        context !== void 0 && (cb = bind(cb, context));
+        for (var key in this) {
+            this.hasOwnProperty(key) && cb(this[key], key);
+        }
+    },
+    // Do not use this method if performance sensitive.
+    removeKey: function (key) {
+        delete this[key];
+    }
+};
+
+function createHashMap(obj) {
+    return new HashMap(obj);
+}
+
+function concatArray(a, b) {
+    var newArray = new a.constructor(a.length + b.length);
+    for (var i = 0; i < a.length; i++) {
+        newArray[i] = a[i];
+    }
+    var offset = a.length;
+    for (i = 0; i < b.length; i++) {
+        newArray[i + offset] = b[i];
+    }
+    return newArray;
+}
+
+
+function noop() {}
+
+
+var zrUtil = (Object.freeze || Object)({
+	$override: $override,
+	clone: clone,
+	merge: merge,
+	mergeAll: mergeAll,
+	extend: extend,
+	defaults: defaults,
+	createCanvas: createCanvas,
+	getContext: getContext,
+	indexOf: indexOf,
+	inherits: inherits,
+	mixin: mixin,
+	isArrayLike: isArrayLike,
+	each: each$1,
+	map: map,
+	reduce: reduce,
+	filter: filter,
+	find: find,
+	bind: bind,
+	curry: curry,
+	isArray: isArray,
+	isFunction: isFunction$1,
+	isString: isString,
+	isObject: isObject$1,
+	isBuiltInObject: isBuiltInObject,
+	isTypedArray: isTypedArray,
+	isDom: isDom,
+	eqNaN: eqNaN,
+	retrieve: retrieve,
+	retrieve2: retrieve2,
+	retrieve3: retrieve3,
+	slice: slice,
+	normalizeCssArray: normalizeCssArray,
+	assert: assert$1,
+	trim: trim,
+	setAsPrimitive: setAsPrimitive,
+	isPrimitive: isPrimitive,
+	createHashMap: createHashMap,
+	concatArray: concatArray,
+	noop: noop
+});
+
+var ArrayCtor = typeof Float32Array === 'undefined'
+    ? Array
+    : Float32Array;
+
+/**
+ * 创建一个向量
+ * @param {number} [x=0]
+ * @param {number} [y=0]
+ * @return {Vector2}
+ */
+function create(x, y) {
+    var out = new ArrayCtor(2);
+    if (x == null) {
+        x = 0;
+    }
+    if (y == null) {
+        y = 0;
+    }
+    out[0] = x;
+    out[1] = y;
+    return out;
+}
+
+/**
+ * 复制向量数据
+ * @param {Vector2} out
+ * @param {Vector2} v
+ * @return {Vector2}
+ */
+function copy(out, v) {
+    out[0] = v[0];
+    out[1] = v[1];
+    return out;
+}
+
+/**
+ * 克隆一个向量
+ * @param {Vector2} v
+ * @return {Vector2}
+ */
+function clone$1(v) {
+    var out = new ArrayCtor(2);
+    out[0] = v[0];
+    out[1] = v[1];
+    return out;
+}
+
+/**
+ * 设置向量的两个项
+ * @param {Vector2} out
+ * @param {number} a
+ * @param {number} b
+ * @return {Vector2} 结果
+ */
+function set(out, a, b) {
+    out[0] = a;
+    out[1] = b;
+    return out;
+}
+
+/**
+ * 向量相加
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ */
+function add(out, v1, v2) {
+    out[0] = v1[0] + v2[0];
+    out[1] = v1[1] + v2[1];
+    return out;
+}
+
+/**
+ * 向量缩放后相加
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ * @param {number} a
+ */
+function scaleAndAdd(out, v1, v2, a) {
+    out[0] = v1[0] + v2[0] * a;
+    out[1] = v1[1] + v2[1] * a;
+    return out;
+}
+
+/**
+ * 向量相减
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ */
+function sub(out, v1, v2) {
+    out[0] = v1[0] - v2[0];
+    out[1] = v1[1] - v2[1];
+    return out;
+}
+
+/**
+ * 向量长度
+ * @param {Vector2} v
+ * @return {number}
+ */
+function len(v) {
+    return Math.sqrt(lenSquare(v));
+}
+var length = len; // jshint ignore:line
+
+/**
+ * 向量长度平方
+ * @param {Vector2} v
+ * @return {number}
+ */
+function lenSquare(v) {
+    return v[0] * v[0] + v[1] * v[1];
+}
+var lengthSquare = lenSquare;
+
+/**
+ * 向量乘法
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ */
+function mul(out, v1, v2) {
+    out[0] = v1[0] * v2[0];
+    out[1] = v1[1] * v2[1];
+    return out;
+}
+
+/**
+ * 向量除法
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ */
+function div(out, v1, v2) {
+    out[0] = v1[0] / v2[0];
+    out[1] = v1[1] / v2[1];
+    return out;
+}
+
+/**
+ * 向量点乘
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ * @return {number}
+ */
+function dot(v1, v2) {
+    return v1[0] * v2[0] + v1[1] * v2[1];
+}
+
+/**
+ * 向量缩放
+ * @param {Vector2} out
+ * @param {Vector2} v
+ * @param {number} s
+ */
+function scale(out, v, s) {
+    out[0] = v[0] * s;
+    out[1] = v[1] * s;
+    return out;
+}
+
+/**
+ * 向量归一化
+ * @param {Vector2} out
+ * @param {Vector2} v
+ */
+function normalize(out, v) {
+    var d = len(v);
+    if (d === 0) {
+        out[0] = 0;
+        out[1] = 0;
+    }
+    else {
+        out[0] = v[0] / d;
+        out[1] = v[1] / d;
+    }
+    return out;
+}
+
+/**
+ * 计算向量间距离
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ * @return {number}
+ */
+function distance(v1, v2) {
+    return Math.sqrt(
+        (v1[0] - v2[0]) * (v1[0] - v2[0])
+        + (v1[1] - v2[1]) * (v1[1] - v2[1])
+    );
+}
+var dist = distance;
+
+/**
+ * 向量距离平方
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ * @return {number}
+ */
+function distanceSquare(v1, v2) {
+    return (v1[0] - v2[0]) * (v1[0] - v2[0])
+        + (v1[1] - v2[1]) * (v1[1] - v2[1]);
+}
+var distSquare = distanceSquare;
+
+/**
+ * 求负向量
+ * @param {Vector2} out
+ * @param {Vector2} v
+ */
+function negate(out, v) {
+    out[0] = -v[0];
+    out[1] = -v[1];
+    return out;
+}
+
+/**
+ * 插值两个点
+ * @param {Vector2} out
+ * @param {Vector2} v1
+ * @param {Vector2} v2
+ * @param {number} t
+ */
+function lerp(out, v1, v2, t) {
+    out[0] = v1[0] + t * (v2[0] - v1[0]);
+    out[1] = v1[1] + t * (v2[1] - v1[1]);
+    return out;
+}
+
+/**
+ * 矩阵左乘向量
+ * @param {Vector2} out
+ * @param {Vector2} v
+ * @param {Vector2} m
+ */
+function applyTransform(out, v, m) {
+    var x = v[0];
+    var y = v[1];
+    out[0] = m[0] * x + m[2] * y + m[4];
+    out[1] = m[1] * x + m[3] * y + m[5];
+    return out;
+}
+
+/**
+ * 求两个向量最小值
+ * @param  {Vector2} out
+ * @param  {Vector2} v1
+ * @param  {Vector2} v2
+ */
+function min(out, v1, v2) {
+    out[0] = Math.min(v1[0], v2[0]);
+    out[1] = Math.min(v1[1], v2[1]);
+    return out;
+}
+
+/**
+ * 求两个向量最大值
+ * @param  {Vector2} out
+ * @param  {Vector2} v1
+ * @param  {Vector2} v2
+ */
+function max(out, v1, v2) {
+    out[0] = Math.max(v1[0], v2[0]);
+    out[1] = Math.max(v1[1], v2[1]);
+    return out;
+}
+
+
+var vector = (Object.freeze || Object)({
+	create: create,
+	copy: copy,
+	clone: clone$1,
+	set: set,
+	add: add,
+	scaleAndAdd: scaleAndAdd,
+	sub: sub,
+	len: len,
+	length: length,
+	lenSquare: lenSquare,
+	lengthSquare: lengthSquare,
+	mul: mul,
+	div: div,
+	dot: dot,
+	scale: scale,
+	normalize: normalize,
+	distance: distance,
+	dist: dist,
+	distanceSquare: distanceSquare,
+	distSquare: distSquare,
+	negate: negate,
+	lerp: lerp,
+	applyTransform: applyTransform,
+	min: min,
+	max: max
+});
+
+// TODO Draggable for group
+// FIXME Draggable on element which has parent rotation or scale
+function Draggable() {
+
+    this.on('mousedown', this._dragStart, this);
+    this.on('mousemove', this._drag, this);
+    this.on('mouseup', this._dragEnd, this);
+    this.on('globalout', this._dragEnd, this);
+    // this._dropTarget = null;
+    // this._draggingTarget = null;
+
+    // this._x = 0;
+    // this._y = 0;
+}
+
+Draggable.prototype = {
+
+    constructor: Draggable,
+
+    _dragStart: function (e) {
+        var draggingTarget = e.target;
+        if (draggingTarget && draggingTarget.draggable) {
+            this._draggingTarget = draggingTarget;
+            draggingTarget.dragging = true;
+            this._x = e.offsetX;
+            this._y = e.offsetY;
+
+            this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);
+        }
+    },
+
+    _drag: function (e) {
+        var draggingTarget = this._draggingTarget;
+        if (draggingTarget) {
+
+            var x = e.offsetX;
+            var y = e.offsetY;
+
+            var dx = x - this._x;
+            var dy = y - this._y;
+            this._x = x;
+            this._y = y;
+
+            draggingTarget.drift(dx, dy, e);
+            this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);
+
+            var dropTarget = this.findHover(x, y, draggingTarget).target;
+            var lastDropTarget = this._dropTarget;
+            this._dropTarget = dropTarget;
+
+            if (draggingTarget !== dropTarget) {
+                if (lastDropTarget && dropTarget !== lastDropTarget) {
+                    this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);
+                }
+                if (dropTarget && dropTarget !== lastDropTarget) {
+                    this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);
+                }
+            }
+        }
+    },
+
+    _dragEnd: function (e) {
+        var draggingTarget = this._draggingTarget;
+
+        if (draggingTarget) {
+            draggingTarget.dragging = false;
+        }
+
+        this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);
+
+        if (this._dropTarget) {
+            this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);
+        }
+
+        this._draggingTarget = null;
+        this._dropTarget = null;
+    }
+
+};
+
+function param(target, e) {
+    return {target: target, topTarget: e && e.topTarget};
+}
+
+/**
+ * 事件扩展
+ * @module zrender/mixin/Eventful
+ * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ *         pissang (https://www.github.com/pissang)
+ */
+
+var arrySlice = Array.prototype.slice;
+
+/**
+ * 事件分发器
+ * @alias module:zrender/mixin/Eventful
+ * @constructor
+ */
+var Eventful = function () {
+    this._$handlers = {};
+};
+
+Eventful.prototype = {
+
+    constructor: Eventful,
+
+    /**
+     * 单次触发绑定,trigger后销毁
+     *
+     * @param {string} event 事件名
+     * @param {Function} handler 响应函数
+     * @param {Object} context
+     */
+    one: function (event, handler, context) {
+        var _h = this._$handlers;
+
+        if (!handler || !event) {
+            return this;
+        }
+
+        if (!_h[event]) {
+            _h[event] = [];
+        }
+
+        for (var i = 0; i < _h[event].length; i++) {
+            if (_h[event][i].h === handler) {
+                return this;
+            }
+        }
+
+        _h[event].push({
+            h: handler,
+            one: true,
+            ctx: context || this
+        });
+
+        return this;
+    },
+
+    /**
+     * 绑定事件
+     * @param {string} event 事件名
+     * @param {Function} handler 事件处理函数
+     * @param {Object} [context]
+     */
+    on: function (event, handler, context) {
+        var _h = this._$handlers;
+
+        if (!handler || !event) {
+            return this;
+        }
+
+        if (!_h[event]) {
+            _h[event] = [];
+        }
+
+        for (var i = 0; i < _h[event].length; i++) {
+            if (_h[event][i].h === handler) {
+                return this;
+            }
+        }
+
+        _h[event].push({
+            h: handler,
+            one: false,
+            ctx: context || this
+        });
+
+        return this;
+    },
+
+    /**
+     * 是否绑定了事件
+     * @param  {string}  event
+     * @return {boolean}
+     */
+    isSilent: function (event) {
+        var _h = this._$handlers;
+        return _h[event] && _h[event].length;
+    },
+
+    /**
+     * 解绑事件
+     * @param {string} event 事件名
+     * @param {Function} [handler] 事件处理函数
+     */
+    off: function (event, handler) {
+        var _h = this._$handlers;
+
+        if (!event) {
+            this._$handlers = {};
+            return this;
+        }
+
+        if (handler) {
+            if (_h[event]) {
+                var newList = [];
+                for (var i = 0, l = _h[event].length; i < l; i++) {
+                    if (_h[event][i]['h'] != handler) {
+                        newList.push(_h[event][i]);
+                    }
+                }
+                _h[event] = newList;
+            }
+
+            if (_h[event] && _h[event].length === 0) {
+                delete _h[event];
+            }
+        }
+        else {
+            delete _h[event];
+        }
+
+        return this;
+    },
+
+    /**
+     * 事件分发
+     *
+     * @param {string} type 事件类型
+     */
+    trigger: function (type) {
+        if (this._$handlers[type]) {
+            var args = arguments;
+            var argLen = args.length;
+
+            if (argLen > 3) {
+                args = arrySlice.call(args, 1);
+            }
+
+            var _h = this._$handlers[type];
+            var len = _h.length;
+            for (var i = 0; i < len;) {
+                // Optimize advise from backbone
+                switch (argLen) {
+                    case 1:
+                        _h[i]['h'].call(_h[i]['ctx']);
+                        break;
+                    case 2:
+                        _h[i]['h'].call(_h[i]['ctx'], args[1]);
+                        break;
+                    case 3:
+                        _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);
+                        break;
+                    default:
+                        // have more than 2 given arguments
+                        _h[i]['h'].apply(_h[i]['ctx'], args);
+                        break;
+                }
+
+                if (_h[i]['one']) {
+                    _h.splice(i, 1);
+                    len--;
+                }
+                else {
+                    i++;
+                }
+            }
+        }
+
+        return this;
+    },
+
+    /**
+     * 带有context的事件分发, 最后一个参数是事件回调的context
+     * @param {string} type 事件类型
+     */
+    triggerWithContext: function (type) {
+        if (this._$handlers[type]) {
+            var args = arguments;
+            var argLen = args.length;
+
+            if (argLen > 4) {
+                args = arrySlice.call(args, 1, args.length - 1);
+            }
+            var ctx = args[args.length - 1];
+
+            var _h = this._$handlers[type];
+            var len = _h.length;
+            for (var i = 0; i < len;) {
+                // Optimize advise from backbone
+                switch (argLen) {
+                    case 1:
+                        _h[i]['h'].call(ctx);
+                        break;
+                    case 2:
+                        _h[i]['h'].call(ctx, args[1]);
+                        break;
+                    case 3:
+                        _h[i]['h'].call(ctx, args[1], args[2]);
+                        break;
+                    default:
+                        // have more than 2 given arguments
+                        _h[i]['h'].apply(ctx, args);
+                        break;
+                }
+
+                if (_h[i]['one']) {
+                    _h.splice(i, 1);
+                    len--;
+                }
+                else {
+                    i++;
+                }
+            }
+        }
+
+        return this;
+    }
+};
+
+var SILENT = 'silent';
+
+function makeEventPacket(eveType, targetInfo, event) {
+    return {
+        type: eveType,
+        event: event,
+        // target can only be an element that is not silent.
+        target: targetInfo.target,
+        // topTarget can be a silent element.
+        topTarget: targetInfo.topTarget,
+        cancelBubble: false,
+        offsetX: event.zrX,
+        offsetY: event.zrY,
+        gestureEvent: event.gestureEvent,
+        pinchX: event.pinchX,
+        pinchY: event.pinchY,
+        pinchScale: event.pinchScale,
+        wheelDelta: event.zrDelta,
+        zrByTouch: event.zrByTouch,
+        which: event.which
+    };
+}
+
+function EmptyProxy () {}
+EmptyProxy.prototype.dispose = function () {};
+
+var handlerNames = [
+    'click', 'dblclick', 'mousewheel', 'mouseout',
+    'mouseup', 'mousedown', 'mousemove', 'contextmenu'
+];
+/**
+ * @alias module:zrender/Handler
+ * @constructor
+ * @extends module:zrender/mixin/Eventful
+ * @param {module:zrender/Storage} storage Storage instance.
+ * @param {module:zrender/Painter} painter Painter instance.
+ * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.
+ * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).
+ */
+var Handler = function(storage, painter, proxy, painterRoot) {
+    Eventful.call(this);
+
+    this.storage = storage;
+
+    this.painter = painter;
+
+    this.painterRoot = painterRoot;
+
+    proxy = proxy || new EmptyProxy();
+
+    /**
+     * Proxy of event. can be Dom, WebGLSurface, etc.
+     */
+    this.proxy = null;
+
+    /**
+     * {target, topTarget, x, y}
+     * @private
+     * @type {Object}
+     */
+    this._hovered = {};
+
+    /**
+     * @private
+     * @type {Date}
+     */
+    this._lastTouchMoment;
+
+    /**
+     * @private
+     * @type {number}
+     */
+    this._lastX;
+
+    /**
+     * @private
+     * @type {number}
+     */
+    this._lastY;
+
+
+    Draggable.call(this);
+
+    this.setHandlerProxy(proxy);
+};
+
+Handler.prototype = {
+
+    constructor: Handler,
+
+    setHandlerProxy: function (proxy) {
+        if (this.proxy) {
+            this.proxy.dispose();
+        }
+
+        if (proxy) {
+            each$1(handlerNames, function (name) {
+                proxy.on && proxy.on(name, this[name], this);
+            }, this);
+            // Attach handler
+            proxy.handler = this;
+        }
+        this.proxy = proxy;
+    },
+
+    mousemove: function (event) {
+        var x = event.zrX;
+        var y = event.zrY;
+
+        var lastHovered = this._hovered;
+        var lastHoveredTarget = lastHovered.target;
+
+        // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call
+        // (like 'setOption' or 'dispatchAction') in event handlers, we should find
+        // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.
+        // See #6198.
+        if (lastHoveredTarget && !lastHoveredTarget.__zr) {
+            lastHovered = this.findHover(lastHovered.x, lastHovered.y);
+            lastHoveredTarget = lastHovered.target;
+        }
+
+        var hovered = this._hovered = this.findHover(x, y);
+        var hoveredTarget = hovered.target;
+
+        var proxy = this.proxy;
+        proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');
+
+        // Mouse out on previous hovered element
+        if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {
+            this.dispatchToElement(lastHovered, 'mouseout', event);
+        }
+
+        // Mouse moving on one element
+        this.dispatchToElement(hovered, 'mousemove', event);
+
+        // Mouse over on a new element
+        if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {
+            this.dispatchToElement(hovered, 'mouseover', event);
+        }
+    },
+
+    mouseout: function (event) {
+        this.dispatchToElement(this._hovered, 'mouseout', event);
+
+        // There might be some doms created by upper layer application
+        // at the same level of painter.getViewportRoot() (e.g., tooltip
+        // dom created by echarts), where 'globalout' event should not
+        // be triggered when mouse enters these doms. (But 'mouseout'
+        // should be triggered at the original hovered element as usual).
+        var element = event.toElement || event.relatedTarget;
+        var innerDom;
+        do {
+            element = element && element.parentNode;
+        }
+        while (element && element.nodeType != 9 && !(
+            innerDom = element === this.painterRoot
+        ));
+
+        !innerDom && this.trigger('globalout', {event: event});
+    },
+
+    /**
+     * Resize
+     */
+    resize: function (event) {
+        this._hovered = {};
+    },
+
+    /**
+     * Dispatch event
+     * @param {string} eventName
+     * @param {event=} eventArgs
+     */
+    dispatch: function (eventName, eventArgs) {
+        var handler = this[eventName];
+        handler && handler.call(this, eventArgs);
+    },
+
+    /**
+     * Dispose
+     */
+    dispose: function () {
+
+        this.proxy.dispose();
+
+        this.storage =
+        this.proxy =
+        this.painter = null;
+    },
+
+    /**
+     * 设置默认的cursor style
+     * @param {string} [cursorStyle='default'] 例如 crosshair
+     */
+    setCursorStyle: function (cursorStyle) {
+        var proxy = this.proxy;
+        proxy.setCursor && proxy.setCursor(cursorStyle);
+    },
+
+    /**
+     * 事件分发代理
+     *
+     * @private
+     * @param {Object} targetInfo {target, topTarget} 目标图形元素
+     * @param {string} eventName 事件名称
+     * @param {Object} event 事件对象
+     */
+    dispatchToElement: function (targetInfo, eventName, event) {
+        targetInfo = targetInfo || {};
+        var el = targetInfo.target;
+        if (el && el.silent) {
+            return;
+        }
+        var eventHandler = 'on' + eventName;
+        var eventPacket = makeEventPacket(eventName, targetInfo, event);
+
+        while (el) {
+            el[eventHandler]
+                && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));
+
+            el.trigger(eventName, eventPacket);
+
+            el = el.parent;
+
+            if (eventPacket.cancelBubble) {
+                break;
+            }
+        }
+
+        if (!eventPacket.cancelBubble) {
+            // 冒泡到顶级 zrender 对象
+            this.trigger(eventName, eventPacket);
+            // 分发事件到用户自定义层
+            // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在
+            this.painter && this.painter.eachOtherLayer(function (layer) {
+                if (typeof(layer[eventHandler]) == 'function') {
+                    layer[eventHandler].call(layer, eventPacket);
+                }
+                if (layer.trigger) {
+                    layer.trigger(eventName, eventPacket);
+                }
+            });
+        }
+    },
+
+    /**
+     * @private
+     * @param {number} x
+     * @param {number} y
+     * @param {module:zrender/graphic/Displayable} exclude
+     * @return {model:zrender/Element}
+     * @method
+     */
+    findHover: function(x, y, exclude) {
+        var list = this.storage.getDisplayList();
+        var out = {x: x, y: y};
+
+        for (var i = list.length - 1; i >= 0 ; i--) {
+            var hoverCheckResult;
+            if (list[i] !== exclude
+                // getDisplayList may include ignored item in VML mode
+                && !list[i].ignore
+                && (hoverCheckResult = isHover(list[i], x, y))
+            ) {
+                !out.topTarget && (out.topTarget = list[i]);
+                if (hoverCheckResult !== SILENT) {
+                    out.target = list[i];
+                    break;
+                }
+            }
+        }
+
+        return out;
+    }
+};
+
+// Common handlers
+each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {
+    Handler.prototype[name] = function (event) {
+        // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover
+        var hovered = this.findHover(event.zrX, event.zrY);
+        var hoveredTarget = hovered.target;
+
+        if (name === 'mousedown') {
+            this._downEl = hoveredTarget;
+            this._downPoint = [event.zrX, event.zrY];
+            // In case click triggered before mouseup
+            this._upEl = hoveredTarget;
+        }
+        else if (name === 'mouseup') {
+            this._upEl = hoveredTarget;
+        }
+        else if (name === 'click') {
+            if (this._downEl !== this._upEl
+                // Original click event is triggered on the whole canvas element,
+                // including the case that `mousedown` - `mousemove` - `mouseup`,
+                // which should be filtered, otherwise it will bring trouble to
+                // pan and zoom.
+                || !this._downPoint
+                // Arbitrary value
+                || dist(this._downPoint, [event.zrX, event.zrY]) > 4
+            ) {
+                return;
+            }
+            this._downPoint = null;
+        }
+
+        this.dispatchToElement(hovered, name, event);
+    };
+});
+
+function isHover(displayable, x, y) {
+    if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {
+        var el = displayable;
+        var isSilent;
+        while (el) {
+            // If clipped by ancestor.
+            // FIXME: If clipPath has neither stroke nor fill,
+            // el.clipPath.contain(x, y) will always return false.
+            if (el.clipPath && !el.clipPath.contain(x, y))  {
+                return false;
+            }
+            if (el.silent) {
+                isSilent = true;
+            }
+            el = el.parent;
+        }
+        return isSilent ? SILENT : true;
+    }
+
+    return false;
+}
+
+mixin(Handler, Eventful);
+mixin(Handler, Draggable);
+
+/**
+ * 3x2矩阵操作类
+ * @exports zrender/tool/matrix
+ */
+
+var ArrayCtor$1 = typeof Float32Array === 'undefined'
+    ? Array
+   : Float32Array;
+
+/**
+ * Create a identity matrix.
+ * @return {Float32Array|Array.<number>}
+ */
+function create$1() {
+    var out = new ArrayCtor$1(6);
+    identity(out);
+
+    return out;
+}
+
+/**
+ * 设置矩阵为单位矩阵
+ * @param {Float32Array|Array.<number>} out
+ */
+function identity(out) {
+    out[0] = 1;
+    out[1] = 0;
+    out[2] = 0;
+    out[3] = 1;
+    out[4] = 0;
+    out[5] = 0;
+    return out;
+}
+
+/**
+ * 复制矩阵
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} m
+ */
+function copy$1(out, m) {
+    out[0] = m[0];
+    out[1] = m[1];
+    out[2] = m[2];
+    out[3] = m[3];
+    out[4] = m[4];
+    out[5] = m[5];
+    return out;
+}
+
+/**
+ * 矩阵相乘
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} m1
+ * @param {Float32Array|Array.<number>} m2
+ */
+function mul$1(out, m1, m2) {
+    // Consider matrix.mul(m, m2, m);
+    // where out is the same as m2.
+    // So use temp variable to escape error.
+    var out0 = m1[0] * m2[0] + m1[2] * m2[1];
+    var out1 = m1[1] * m2[0] + m1[3] * m2[1];
+    var out2 = m1[0] * m2[2] + m1[2] * m2[3];
+    var out3 = m1[1] * m2[2] + m1[3] * m2[3];
+    var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
+    var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
+    out[0] = out0;
+    out[1] = out1;
+    out[2] = out2;
+    out[3] = out3;
+    out[4] = out4;
+    out[5] = out5;
+    return out;
+}
+
+/**
+ * 平移变换
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} a
+ * @param {Float32Array|Array.<number>} v
+ */
+function translate(out, a, v) {
+    out[0] = a[0];
+    out[1] = a[1];
+    out[2] = a[2];
+    out[3] = a[3];
+    out[4] = a[4] + v[0];
+    out[5] = a[5] + v[1];
+    return out;
+}
+
+/**
+ * 旋转变换
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} a
+ * @param {number} rad
+ */
+function rotate(out, a, rad) {
+    var aa = a[0];
+    var ac = a[2];
+    var atx = a[4];
+    var ab = a[1];
+    var ad = a[3];
+    var aty = a[5];
+    var st = Math.sin(rad);
+    var ct = Math.cos(rad);
+
+    out[0] = aa * ct + ab * st;
+    out[1] = -aa * st + ab * ct;
+    out[2] = ac * ct + ad * st;
+    out[3] = -ac * st + ct * ad;
+    out[4] = ct * atx + st * aty;
+    out[5] = ct * aty - st * atx;
+    return out;
+}
+
+/**
+ * 缩放变换
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} a
+ * @param {Float32Array|Array.<number>} v
+ */
+function scale$1(out, a, v) {
+    var vx = v[0];
+    var vy = v[1];
+    out[0] = a[0] * vx;
+    out[1] = a[1] * vy;
+    out[2] = a[2] * vx;
+    out[3] = a[3] * vy;
+    out[4] = a[4] * vx;
+    out[5] = a[5] * vy;
+    return out;
+}
+
+/**
+ * 求逆矩阵
+ * @param {Float32Array|Array.<number>} out
+ * @param {Float32Array|Array.<number>} a
+ */
+function invert(out, a) {
+
+    var aa = a[0];
+    var ac = a[2];
+    var atx = a[4];
+    var ab = a[1];
+    var ad = a[3];
+    var aty = a[5];
+
+    var det = aa * ad - ab * ac;
+    if (!det) {
+        return null;
+    }
+    det = 1.0 / det;
+
+    out[0] = ad * det;
+    out[1] = -ab * det;
+    out[2] = -ac * det;
+    out[3] = aa * det;
+    out[4] = (ac * aty - ad * atx) * det;
+    out[5] = (ab * atx - aa * aty) * det;
+    return out;
+}
+
+/**
+ * Clone a new matrix.
+ * @param {Float32Array|Array.<number>} a
+ */
+function clone$2(a) {
+    var b = create$1();
+    copy$1(b, a);
+    return b;
+}
+
+var matrix = (Object.freeze || Object)({
+	create: create$1,
+	identity: identity,
+	copy: copy$1,
+	mul: mul$1,
+	translate: translate,
+	rotate: rotate,
+	scale: scale$1,
+	invert: invert,
+	clone: clone$2
+});
+
+/**
+ * 提供变换扩展
+ * @module zrender/mixin/Transformable
+ * @author pissang (https://www.github.com/pissang)
+ */
+
+var mIdentity = identity;
+
+var EPSILON = 5e-5;
+
+function isNotAroundZero(val) {
+    return val > EPSILON || val < -EPSILON;
+}
+
+/**
+ * @alias module:zrender/mixin/Transformable
+ * @constructor
+ */
+var Transformable = function (opts) {
+    opts = opts || {};
+    // If there are no given position, rotation, scale
+    if (!opts.position) {
+        /**
+         * 平移
+         * @type {Array.<number>}
+         * @default [0, 0]
+         */
+        this.position = [0, 0];
+    }
+    if (opts.rotation == null) {
+        /**
+         * 旋转
+         * @type {Array.<number>}
+         * @default 0
+         */
+        this.rotation = 0;
+    }
+    if (!opts.scale) {
+        /**
+         * 缩放
+         * @type {Array.<number>}
+         * @default [1, 1]
+         */
+        this.scale = [1, 1];
+    }
+    /**
+     * 旋转和缩放的原点
+     * @type {Array.<number>}
+     * @default null
+     */
+    this.origin = this.origin || null;
+};
+
+var transformableProto = Transformable.prototype;
+transformableProto.transform = null;
+
+/**
+ * 判断是否需要有坐标变换
+ * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵
+ */
+transformableProto.needLocalTransform = function () {
+    return isNotAroundZero(this.rotation)
+        || isNotAroundZero(this.position[0])
+        || isNotAroundZero(this.position[1])
+        || isNotAroundZero(this.scale[0] - 1)
+        || isNotAroundZero(this.scale[1] - 1);
+};
+
+transformableProto.updateTransform = function () {
+    var parent = this.parent;
+    var parentHasTransform = parent && parent.transform;
+    var needLocalTransform = this.needLocalTransform();
+
+    var m = this.transform;
+    if (!(needLocalTransform || parentHasTransform)) {
+        m && mIdentity(m);
+        return;
+    }
+
+    m = m || create$1();
+
+    if (needLocalTransform) {
+        this.getLocalTransform(m);
+    }
+    else {
+        mIdentity(m);
+    }
+
+    // 应用父节点变换
+    if (parentHasTransform) {
+        if (needLocalTransform) {
+            mul$1(m, parent.transform, m);
+        }
+        else {
+            copy$1(m, parent.transform);
+        }
+    }
+    // 保存这个变换矩阵
+    this.transform = m;
+
+    this.invTransform = this.invTransform || create$1();
+    invert(this.invTransform, m);
+};
+
+transformableProto.getLocalTransform = function (m) {
+    return Transformable.getLocalTransform(this, m);
+};
+
+/**
+ * 将自己的transform应用到context上
+ * @param {CanvasRenderingContext2D} ctx
+ */
+transformableProto.setTransform = function (ctx) {
+    var m = this.transform;
+    var dpr = ctx.dpr || 1;
+    if (m) {
+        ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);
+    }
+    else {
+        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
+    }
+};
+
+transformableProto.restoreTransform = function (ctx) {
+    var dpr = ctx.dpr || 1;
+    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
+};
+
+var tmpTransform = [];
+
+/**
+ * 分解`transform`矩阵到`position`, `rotation`, `scale`
+ */
+transformableProto.decomposeTransform = function () {
+    if (!this.transform) {
+        return;
+    }
+    var parent = this.parent;
+    var m = this.transform;
+    if (parent && parent.transform) {
+        // Get local transform and decompose them to position, scale, rotation
+        mul$1(tmpTransform, parent.invTransform, m);
+        m = tmpTransform;
+    }
+    var sx = m[0] * m[0] + m[1] * m[1];
+    var sy = m[2] * m[2] + m[3] * m[3];
+    var position = this.position;
+    var scale$$1 = this.scale;
+    if (isNotAroundZero(sx - 1)) {
+        sx = Math.sqrt(sx);
+    }
+    if (isNotAroundZero(sy - 1)) {
+        sy = Math.sqrt(sy);
+    }
+    if (m[0] < 0) {
+        sx = -sx;
+    }
+    if (m[3] < 0) {
+        sy = -sy;
+    }
+    position[0] = m[4];
+    position[1] = m[5];
+    scale$$1[0] = sx;
+    scale$$1[1] = sy;
+    this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);
+};
+
+/**
+ * Get global scale
+ * @return {Array.<number>}
+ */
+transformableProto.getGlobalScale = function () {
+    var m = this.transform;
+    if (!m) {
+        return [1, 1];
+    }
+    var sx = Math.sqrt(m[0] * m[0] + m[1] * m[1]);
+    var sy = Math.sqrt(m[2] * m[2] + m[3] * m[3]);
+    if (m[0] < 0) {
+        sx = -sx;
+    }
+    if (m[3] < 0) {
+        sy = -sy;
+    }
+    return [sx, sy];
+};
+/**
+ * 变换坐标位置到 shape 的局部坐标空间
+ * @method
+ * @param {number} x
+ * @param {number} y
+ * @return {Array.<number>}
+ */
+transformableProto.transformCoordToLocal = function (x, y) {
+    var v2 = [x, y];
+    var invTransform = this.invTransform;
+    if (invTransform) {
+        applyTransform(v2, v2, invTransform);
+    }
+    return v2;
+};
+
+/**
+ * 变换局部坐标位置到全局坐标空间
+ * @method
+ * @param {number} x
+ * @param {number} y
+ * @return {Array.<number>}
+ */
+transformableProto.transformCoordToGlobal = function (x, y) {
+    var v2 = [x, y];
+    var transform = this.transform;
+    if (transform) {
+        applyTransform(v2, v2, transform);
+    }
+    return v2;
+};
+
+/**
+ * @static
+ * @param {Object} target
+ * @param {Array.<number>} target.origin
+ * @param {number} target.rotation
+ * @param {Array.<number>} target.position
+ * @param {Array.<number>} [m]
+ */
+Transformable.getLocalTransform = function (target, m) {
+    m = m || [];
+    mIdentity(m);
+
+    var origin = target.origin;
+    var scale$$1 = target.scale || [1, 1];
+    var rotation = target.rotation || 0;
+    var position = target.position || [0, 0];
+
+    if (origin) {
+        // Translate to origin
+        m[4] -= origin[0];
+        m[5] -= origin[1];
+    }
+    scale$1(m, m, scale$$1);
+    if (rotation) {
+        rotate(m, m, rotation);
+    }
+    if (origin) {
+        // Translate back from origin
+        m[4] += origin[0];
+        m[5] += origin[1];
+    }
+
+    m[4] += position[0];
+    m[5] += position[1];
+
+    return m;
+};
+
+/**
+ * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js
+ * @see http://sole.github.io/tween.js/examples/03_graphs.html
+ * @exports zrender/animation/easing
+ */
+var easing = {
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    linear: function (k) {
+        return k;
+    },
+
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quadraticIn: function (k) {
+        return k * k;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quadraticOut: function (k) {
+        return k * (2 - k);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quadraticInOut: function (k) {
+        if ((k *= 2) < 1) {
+            return 0.5 * k * k;
+        }
+        return -0.5 * (--k * (k - 2) - 1);
+    },
+
+    // 三次方的缓动(t^3)
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    cubicIn: function (k) {
+        return k * k * k;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    cubicOut: function (k) {
+        return --k * k * k + 1;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    cubicInOut: function (k) {
+        if ((k *= 2) < 1) {
+            return 0.5 * k * k * k;
+        }
+        return 0.5 * ((k -= 2) * k * k + 2);
+    },
+
+    // 四次方的缓动(t^4)
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quarticIn: function (k) {
+        return k * k * k * k;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quarticOut: function (k) {
+        return 1 - (--k * k * k * k);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quarticInOut: function (k) {
+        if ((k *= 2) < 1) {
+            return 0.5 * k * k * k * k;
+        }
+        return -0.5 * ((k -= 2) * k * k * k - 2);
+    },
+
+    // 五次方的缓动(t^5)
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quinticIn: function (k) {
+        return k * k * k * k * k;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quinticOut: function (k) {
+        return --k * k * k * k * k + 1;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    quinticInOut: function (k) {
+        if ((k *= 2) < 1) {
+            return 0.5 * k * k * k * k * k;
+        }
+        return 0.5 * ((k -= 2) * k * k * k * k + 2);
+    },
+
+    // 正弦曲线的缓动(sin(t))
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    sinusoidalIn: function (k) {
+        return 1 - Math.cos(k * Math.PI / 2);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    sinusoidalOut: function (k) {
+        return Math.sin(k * Math.PI / 2);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    sinusoidalInOut: function (k) {
+        return 0.5 * (1 - Math.cos(Math.PI * k));
+    },
+
+    // 指数曲线的缓动(2^t)
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    exponentialIn: function (k) {
+        return k === 0 ? 0 : Math.pow(1024, k - 1);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    exponentialOut: function (k) {
+        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    exponentialInOut: function (k) {
+        if (k === 0) {
+            return 0;
+        }
+        if (k === 1) {
+            return 1;
+        }
+        if ((k *= 2) < 1) {
+            return 0.5 * Math.pow(1024, k - 1);
+        }
+        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
+    },
+
+    // 圆形曲线的缓动(sqrt(1-t^2))
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    circularIn: function (k) {
+        return 1 - Math.sqrt(1 - k * k);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    circularOut: function (k) {
+        return Math.sqrt(1 - (--k * k));
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    circularInOut: function (k) {
+        if ((k *= 2) < 1) {
+            return -0.5 * (Math.sqrt(1 - k * k) - 1);
+        }
+        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
+    },
+
+    // 创建类似于弹簧在停止前来回振荡的动画
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    elasticIn: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) {
+            return 0;
+        }
+        if (k === 1) {
+            return 1;
+        }
+        if (!a || a < 1) {
+            a = 1; s = p / 4;
+        }
+        else {
+            s = p * Math.asin(1 / a) / (2 * Math.PI);
+        }
+        return -(a * Math.pow(2, 10 * (k -= 1)) *
+                    Math.sin((k - s) * (2 * Math.PI) / p));
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    elasticOut: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) {
+            return 0;
+        }
+        if (k === 1) {
+            return 1;
+        }
+        if (!a || a < 1) {
+            a = 1; s = p / 4;
+        }
+        else {
+            s = p * Math.asin(1 / a) / (2 * Math.PI);
+        }
+        return (a * Math.pow(2, -10 * k) *
+                Math.sin((k - s) * (2 * Math.PI) / p) + 1);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    elasticInOut: function (k) {
+        var s;
+        var a = 0.1;
+        var p = 0.4;
+        if (k === 0) {
+            return 0;
+        }
+        if (k === 1) {
+            return 1;
+        }
+        if (!a || a < 1) {
+            a = 1; s = p / 4;
+        }
+        else {
+            s = p * Math.asin(1 / a) / (2 * Math.PI);
+        }
+        if ((k *= 2) < 1) {
+            return -0.5 * (a * Math.pow(2, 10 * (k -= 1))
+                * Math.sin((k - s) * (2 * Math.PI) / p));
+        }
+        return a * Math.pow(2, -10 * (k -= 1))
+                * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
+
+    },
+
+    // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    backIn: function (k) {
+        var s = 1.70158;
+        return k * k * ((s + 1) * k - s);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    backOut: function (k) {
+        var s = 1.70158;
+        return --k * k * ((s + 1) * k + s) + 1;
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    backInOut: function (k) {
+        var s = 1.70158 * 1.525;
+        if ((k *= 2) < 1) {
+            return 0.5 * (k * k * ((s + 1) * k - s));
+        }
+        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
+    },
+
+    // 创建弹跳效果
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    bounceIn: function (k) {
+        return 1 - easing.bounceOut(1 - k);
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    bounceOut: function (k) {
+        if (k < (1 / 2.75)) {
+            return 7.5625 * k * k;
+        }
+        else if (k < (2 / 2.75)) {
+            return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;
+        }
+        else if (k < (2.5 / 2.75)) {
+            return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;
+        }
+        else {
+            return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;
+        }
+    },
+    /**
+    * @param {number} k
+    * @return {number}
+    */
+    bounceInOut: function (k) {
+        if (k < 0.5) {
+            return easing.bounceIn(k * 2) * 0.5;
+        }
+        return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;
+    }
+};
+
+/**
+ * 动画主控制器
+ * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件
+ * @config life(1000) 动画时长
+ * @config delay(0) 动画延迟时间
+ * @config loop(true)
+ * @config gap(0) 循环的间隔时间
+ * @config onframe
+ * @config easing(optional)
+ * @config ondestroy(optional)
+ * @config onrestart(optional)
+ *
+ * TODO pause
+ */
+
+function Clip(options) {
+
+    this._target = options.target;
+
+    // 生命周期
+    this._life = options.life || 1000;
+    // 延时
+    this._delay = options.delay || 0;
+    // 开始时间
+    // this._startTime = new Date().getTime() + this._delay;// 单位毫秒
+    this._initialized = false;
+
+    // 是否循环
+    this.loop = options.loop == null ? false : options.loop;
+
+    this.gap = options.gap || 0;
+
+    this.easing = options.easing || 'Linear';
+
+    this.onframe = options.onframe;
+    this.ondestroy = options.ondestroy;
+    this.onrestart = options.onrestart;
+
+    this._pausedTime = 0;
+    this._paused = false;
+}
+
+Clip.prototype = {
+
+    constructor: Clip,
+
+    step: function (globalTime, deltaTime) {
+        // Set startTime on first step, or _startTime may has milleseconds different between clips
+        // PENDING
+        if (!this._initialized) {
+            this._startTime = globalTime + this._delay;
+            this._initialized = true;
+        }
+
+        if (this._paused) {
+            this._pausedTime += deltaTime;
+            return;
+        }
+
+        var percent = (globalTime - this._startTime - this._pausedTime) / this._life;
+
+        // 还没开始
+        if (percent < 0) {
+            return;
+        }
+
+        percent = Math.min(percent, 1);
+
+        var easing$$1 = this.easing;
+        var easingFunc = typeof easing$$1 == 'string' ? easing[easing$$1] : easing$$1;
+        var schedule = typeof easingFunc === 'function'
+            ? easingFunc(percent)
+            : percent;
+
+        this.fire('frame', schedule);
+
+        // 结束
+        if (percent == 1) {
+            if (this.loop) {
+                this.restart (globalTime);
+                // 重新开始周期
+                // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件
+                return 'restart';
+            }
+
+            // 动画完成将这个控制器标识为待删除
+            // 在Animation.update中进行批量删除
+            this._needsRemove = true;
+            return 'destroy';
+        }
+
+        return null;
+    },
+
+    restart: function (globalTime) {
+        var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;
+        this._startTime = globalTime - remainder + this.gap;
+        this._pausedTime = 0;
+
+        this._needsRemove = false;
+    },
+
+    fire: function (eventType, arg) {
+        eventType = 'on' + eventType;
+        if (this[eventType]) {
+            this[eventType](this._target, arg);
+        }
+    },
+
+    pause: function () {
+        this._paused = true;
+    },
+
+    resume: function () {
+        this._paused = false;
+    }
+};
+
+// Simple LRU cache use doubly linked list
+// @module zrender/core/LRU
+
+/**
+ * Simple double linked list. Compared with array, it has O(1) remove operation.
+ * @constructor
+ */
+var LinkedList = function () {
+
+    /**
+     * @type {module:zrender/core/LRU~Entry}
+     */
+    this.head = null;
+
+    /**
+     * @type {module:zrender/core/LRU~Entry}
+     */
+    this.tail = null;
+
+    this._len = 0;
+};
+
+var linkedListProto = LinkedList.prototype;
+/**
+ * Insert a new value at the tail
+ * @param  {} val
+ * @return {module:zrender/core/LRU~Entry}
+ */
+linkedListProto.insert = function (val) {
+    var entry = new Entry(val);
+    this.insertEntry(entry);
+    return entry;
+};
+
+/**
+ * Insert an entry at the tail
+ * @param  {module:zrender/core/LRU~Entry} entry
+ */
+linkedListProto.insertEntry = function (entry) {
+    if (!this.head) {
+        this.head = this.tail = entry;
+    }
+    else {
+        this.tail.next = entry;
+        entry.prev = this.tail;
+        entry.next = null;
+        this.tail = entry;
+    }
+    this._len++;
+};
+
+/**
+ * Remove entry.
+ * @param  {module:zrender/core/LRU~Entry} entry
+ */
+linkedListProto.remove = function (entry) {
+    var prev = entry.prev;
+    var next = entry.next;
+    if (prev) {
+        prev.next = next;
+    }
+    else {
+        // Is head
+        this.head = next;
+    }
+    if (next) {
+        next.prev = prev;
+    }
+    else {
+        // Is tail
+        this.tail = prev;
+    }
+    entry.next = entry.prev = null;
+    this._len--;
+};
+
+/**
+ * @return {number}
+ */
+linkedListProto.len = function () {
+    return this._len;
+};
+
+/**
+ * Clear list
+ */
+linkedListProto.clear = function () {
+    this.head = this.tail = null;
+    this._len = 0;
+};
+
+/**
+ * @constructor
+ * @param {} val
+ */
+var Entry = function (val) {
+    /**
+     * @type {}
+     */
+    this.value = val;
+
+    /**
+     * @type {module:zrender/core/LRU~Entry}
+     */
+    this.next;
+
+    /**
+     * @type {module:zrender/core/LRU~Entry}
+     */
+    this.prev;
+};
+
+/**
+ * LRU Cache
+ * @constructor
+ * @alias module:zrender/core/LRU
+ */
+var LRU = function (maxSize) {
+
+    this._list = new LinkedList();
+
+    this._map = {};
+
+    this._maxSize = maxSize || 10;
+
+    this._lastRemovedEntry = null;
+};
+
+var LRUProto = LRU.prototype;
+
+/**
+ * @param  {string} key
+ * @param  {} value
+ * @return {} Removed value
+ */
+LRUProto.put = function (key, value) {
+    var list = this._list;
+    var map = this._map;
+    var removed = null;
+    if (map[key] == null) {
+        var len = list.len();
+        // Reuse last removed entry
+        var entry = this._lastRemovedEntry;
+
+        if (len >= this._maxSize && len > 0) {
+            // Remove the least recently used
+            var leastUsedEntry = list.head;
+            list.remove(leastUsedEntry);
+            delete map[leastUsedEntry.key];
+
+            removed = leastUsedEntry.value;
+            this._lastRemovedEntry = leastUsedEntry;
+        }
+
+        if (entry) {
+            entry.value = value;
+        }
+        else {
+            entry = new Entry(value);
+        }
+        entry.key = key;
+        list.insertEntry(entry);
+        map[key] = entry;
+    }
+
+    return removed;
+};
+
+/**
+ * @param  {string} key
+ * @return {}
+ */
+LRUProto.get = function (key) {
+    var entry = this._map[key];
+    var list = this._list;
+    if (entry != null) {
+        // Put the latest used entry in the tail
+        if (entry !== list.tail) {
+            list.remove(entry);
+            list.insertEntry(entry);
+        }
+
+        return entry.value;
+    }
+};
+
+/**
+ * Clear the cache
+ */
+LRUProto.clear = function () {
+    this._list.clear();
+    this._map = {};
+};
+
+var kCSSColorTable = {
+    '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]
+};
+
+function clampCssByte(i) {  // Clamp to integer 0 .. 255.
+    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).
+    return i < 0 ? 0 : i > 255 ? 255 : i;
+}
+
+function clampCssAngle(i) {  // Clamp to integer 0 .. 360.
+    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).
+    return i < 0 ? 0 : i > 360 ? 360 : i;
+}
+
+function clampCssFloat(f) {  // Clamp to float 0.0 .. 1.0.
+    return f < 0 ? 0 : f > 1 ? 1 : f;
+}
+
+function parseCssInt(str) {  // int or percentage.
+    if (str.length && str.charAt(str.length - 1) === '%') {
+        return clampCssByte(parseFloat(str) / 100 * 255);
+    }
+    return clampCssByte(parseInt(str, 10));
+}
+
+function parseCssFloat(str) {  // float or percentage.
+    if (str.length && str.charAt(str.length - 1) === '%') {
+        return clampCssFloat(parseFloat(str) / 100);
+    }
+    return clampCssFloat(parseFloat(str));
+}
+
+function cssHueToRgb(m1, m2, h) {
+    if (h < 0) {
+        h += 1;
+    }
+    else if (h > 1) {
+        h -= 1;
+    }
+
+    if (h * 6 < 1) {
+        return m1 + (m2 - m1) * h * 6;
+    }
+    if (h * 2 < 1) {
+        return m2;
+    }
+    if (h * 3 < 2) {
+        return m1 + (m2 - m1) * (2/3 - h) * 6;
+    }
+    return m1;
+}
+
+function lerpNumber(a, b, p) {
+    return a + (b - a) * p;
+}
+
+function setRgba(out, r, g, b, a) {
+    out[0] = r; out[1] = g; out[2] = b; out[3] = a;
+    return out;
+}
+function copyRgba(out, a) {
+    out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3];
+    return out;
+}
+
+var colorCache = new LRU(20);
+var lastRemovedArr = null;
+
+function putToCache(colorStr, rgbaArr) {
+    // Reuse removed array
+    if (lastRemovedArr) {
+        copyRgba(lastRemovedArr, rgbaArr);
+    }
+    lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));
+}
+
+/**
+ * @param {string} colorStr
+ * @param {Array.<number>} out
+ * @return {Array.<number>}
+ * @memberOf module:zrender/util/color
+ */
+function parse(colorStr, rgbaArr) {
+    if (!colorStr) {
+        return;
+    }
+    rgbaArr = rgbaArr || [];
+
+    var cached = colorCache.get(colorStr);
+    if (cached) {
+        return copyRgba(rgbaArr, cached);
+    }
+
+    // colorStr may be not string
+    colorStr = colorStr + '';
+    // Remove all whitespace, not compliant, but should just be more accepting.
+    var str = colorStr.replace(/ /g, '').toLowerCase();
+
+    // Color keywords (and transparent) lookup.
+    if (str in kCSSColorTable) {
+        copyRgba(rgbaArr, kCSSColorTable[str]);
+        putToCache(colorStr, rgbaArr);
+        return rgbaArr;
+    }
+
+    // #abc and #abc123 syntax.
+    if (str.charAt(0) === '#') {
+        if (str.length === 4) {
+            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.
+            if (!(iv >= 0 && iv <= 0xfff)) {
+                setRgba(rgbaArr, 0, 0, 0, 1);
+                return;  // Covers NaN.
+            }
+            setRgba(rgbaArr,
+                ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),
+                (iv & 0xf0) | ((iv & 0xf0) >> 4),
+                (iv & 0xf) | ((iv & 0xf) << 4),
+                1
+            );
+            putToCache(colorStr, rgbaArr);
+            return rgbaArr;
+        }
+        else if (str.length === 7) {
+            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.
+            if (!(iv >= 0 && iv <= 0xffffff)) {
+                setRgba(rgbaArr, 0, 0, 0, 1);
+                return;  // Covers NaN.
+            }
+            setRgba(rgbaArr,
+                (iv & 0xff0000) >> 16,
+                (iv & 0xff00) >> 8,
+                iv & 0xff,
+                1
+            );
+            putToCache(colorStr, rgbaArr);
+            return rgbaArr;
+        }
+
+        return;
+    }
+    var op = str.indexOf('('), ep = str.indexOf(')');
+    if (op !== -1 && ep + 1 === str.length) {
+        var fname = str.substr(0, op);
+        var params = str.substr(op + 1, ep - (op + 1)).split(',');
+        var alpha = 1;  // To allow case fallthrough.
+        switch (fname) {
+            case 'rgba':
+                if (params.length !== 4) {
+                    setRgba(rgbaArr, 0, 0, 0, 1);
+                    return;
+                }
+                alpha = parseCssFloat(params.pop()); // jshint ignore:line
+            // Fall through.
+            case 'rgb':
+                if (params.length !== 3) {
+                    setRgba(rgbaArr, 0, 0, 0, 1);
+                    return;
+                }
+                setRgba(rgbaArr,
+                    parseCssInt(params[0]),
+                    parseCssInt(params[1]),
+                    parseCssInt(params[2]),
+                    alpha
+                );
+                putToCache(colorStr, rgbaArr);
+                return rgbaArr;
+            case 'hsla':
+                if (params.length !== 4) {
+                    setRgba(rgbaArr, 0, 0, 0, 1);
+                    return;
+                }
+                params[3] = parseCssFloat(params[3]);
+                hsla2rgba(params, rgbaArr);
+                putToCache(colorStr, rgbaArr);
+                return rgbaArr;
+            case 'hsl':
+                if (params.length !== 3) {
+                    setRgba(rgbaArr, 0, 0, 0, 1);
+                    return;
+                }
+                hsla2rgba(params, rgbaArr);
+                putToCache(colorStr, rgbaArr);
+                return rgbaArr;
+            default:
+                return;
+        }
+    }
+
+    setRgba(rgbaArr, 0, 0, 0, 1);
+    return;
+}
+
+/**
+ * @param {Array.<number>} hsla
+ * @param {Array.<number>} rgba
+ * @return {Array.<number>} rgba
+ */
+function hsla2rgba(hsla, rgba) {
+    var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360;  // 0 .. 1
+    // NOTE(deanm): According to the CSS spec s/l should only be
+    // percentages, but we don't bother and let float or percentage.
+    var s = parseCssFloat(hsla[1]);
+    var l = parseCssFloat(hsla[2]);
+    var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
+    var m1 = l * 2 - m2;
+
+    rgba = rgba || [];
+    setRgba(rgba,
+        clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),
+        clampCssByte(cssHueToRgb(m1, m2, h) * 255),
+        clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),
+        1
+    );
+
+    if (hsla.length === 4) {
+        rgba[3] = hsla[3];
+    }
+
+    return rgba;
+}
+
+/**
+ * @param {Array.<number>} rgba
+ * @return {Array.<number>} hsla
+ */
+function rgba2hsla(rgba) {
+    if (!rgba) {
+        return;
+    }
+
+    // RGB from 0 to 255
+    var R = rgba[0] / 255;
+    var G = rgba[1] / 255;
+    var B = rgba[2] / 255;
+
+    var vMin = Math.min(R, G, B); // Min. value of RGB
+    var vMax = Math.max(R, G, B); // Max. value of RGB
+    var delta = vMax - vMin; // Delta RGB value
+
+    var L = (vMax + vMin) / 2;
+    var H;
+    var S;
+    // HSL results from 0 to 1
+    if (delta === 0) {
+        H = 0;
+        S = 0;
+    }
+    else {
+        if (L < 0.5) {
+            S = delta / (vMax + vMin);
+        }
+        else {
+            S = delta / (2 - vMax - vMin);
+        }
+
+        var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;
+        var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;
+        var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;
+
+        if (R === vMax) {
+            H = deltaB - deltaG;
+        }
+        else if (G === vMax) {
+            H = (1 / 3) + deltaR - deltaB;
+        }
+        else if (B === vMax) {
+            H = (2 / 3) + deltaG - deltaR;
+        }
+
+        if (H < 0) {
+            H += 1;
+        }
+
+        if (H > 1) {
+            H -= 1;
+        }
+    }
+
+    var hsla = [H * 360, S, L];
+
+    if (rgba[3] != null) {
+        hsla.push(rgba[3]);
+    }
+
+    return hsla;
+}
+
+/**
+ * @param {string} color
+ * @param {number} level
+ * @return {string}
+ * @memberOf module:zrender/util/color
+ */
+function lift(color, level) {
+    var colorArr = parse(color);
+    if (colorArr) {
+        for (var i = 0; i < 3; i++) {
+            if (level < 0) {
+                colorArr[i] = colorArr[i] * (1 - level) | 0;
+            }
+            else {
+                colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;
+            }
+            if (colorArr[i] > 255) {
+                colorArr[i] = 255;
+            }
+            else if (color[i] < 0) {
+                colorArr[i] = 0;
+            }
+        }
+        return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');
+    }
+}
+
+/**
+ * @param {string} color
+ * @return {string}
+ * @memberOf module:zrender/util/color
+ */
+function toHex(color) {
+    var colorArr = parse(color);
+    if (colorArr) {
+        return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);
+    }
+}
+
+/**
+ * Map value to color. Faster than lerp methods because color is represented by rgba array.
+ * @param {number} normalizedValue A float between 0 and 1.
+ * @param {Array.<Array.<number>>} colors List of rgba color array
+ * @param {Array.<number>} [out] Mapped gba color array
+ * @return {Array.<number>} will be null/undefined if input illegal.
+ */
+function fastLerp(normalizedValue, colors, out) {
+    if (!(colors && colors.length)
+        || !(normalizedValue >= 0 && normalizedValue <= 1)
+    ) {
+        return;
+    }
+
+    out = out || [];
+
+    var value = normalizedValue * (colors.length - 1);
+    var leftIndex = Math.floor(value);
+    var rightIndex = Math.ceil(value);
+    var leftColor = colors[leftIndex];
+    var rightColor = colors[rightIndex];
+    var dv = value - leftIndex;
+    out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));
+    out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));
+    out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));
+    out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));
+
+    return out;
+}
+
+/**
+ * @deprecated
+ */
+var fastMapToColor = fastLerp;
+
+/**
+ * @param {number} normalizedValue A float between 0 and 1.
+ * @param {Array.<string>} colors Color list.
+ * @param {boolean=} fullOutput Default false.
+ * @return {(string|Object)} Result color. If fullOutput,
+ *                           return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},
+ * @memberOf module:zrender/util/color
+ */
+function lerp$1(normalizedValue, colors, fullOutput) {
+    if (!(colors && colors.length)
+        || !(normalizedValue >= 0 && normalizedValue <= 1)
+    ) {
+        return;
+    }
+
+    var value = normalizedValue * (colors.length - 1);
+    var leftIndex = Math.floor(value);
+    var rightIndex = Math.ceil(value);
+    var leftColor = parse(colors[leftIndex]);
+    var rightColor = parse(colors[rightIndex]);
+    var dv = value - leftIndex;
+
+    var color = stringify(
+        [
+            clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),
+            clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),
+            clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),
+            clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))
+        ],
+        'rgba'
+    );
+
+    return fullOutput
+        ? {
+            color: color,
+            leftIndex: leftIndex,
+            rightIndex: rightIndex,
+            value: value
+        }
+        : color;
+}
+
+/**
+ * @deprecated
+ */
+var mapToColor = lerp$1;
+
+/**
+ * @param {string} color
+ * @param {number=} h 0 ~ 360, ignore when null.
+ * @param {number=} s 0 ~ 1, ignore when null.
+ * @param {number=} l 0 ~ 1, ignore when null.
+ * @return {string} Color string in rgba format.
+ * @memberOf module:zrender/util/color
+ */
+function modifyHSL(color, h, s, l) {
+    color = parse(color);
+
+    if (color) {
+        color = rgba2hsla(color);
+        h != null && (color[0] = clampCssAngle(h));
+        s != null && (color[1] = parseCssFloat(s));
+        l != null && (color[2] = parseCssFloat(l));
+
+        return stringify(hsla2rgba(color), 'rgba');
+    }
+}
+
+/**
+ * @param {string} color
+ * @param {number=} alpha 0 ~ 1
+ * @return {string} Color string in rgba format.
+ * @memberOf module:zrender/util/color
+ */
+function modifyAlpha(color, alpha) {
+    color = parse(color);
+
+    if (color && alpha != null) {
+        color[3] = clampCssFloat(alpha);
+        return stringify(color, 'rgba');
+    }
+}
+
+/**
+ * @param {Array.<number>} arrColor like [12,33,44,0.4]
+ * @param {string} type 'rgba', 'hsva', ...
+ * @return {string} Result color. (If input illegal, return undefined).
+ */
+function stringify(arrColor, type) {
+    if (!arrColor || !arrColor.length) {
+        return;
+    }
+    var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];
+    if (type === 'rgba' || type === 'hsva' || type === 'hsla') {
+        colorStr += ',' + arrColor[3];
+    }
+    return type + '(' + colorStr + ')';
+}
+
+
+var color = (Object.freeze || Object)({
+	parse: parse,
+	lift: lift,
+	toHex: toHex,
+	fastLerp: fastLerp,
+	fastMapToColor: fastMapToColor,
+	lerp: lerp$1,
+	mapToColor: mapToColor,
+	modifyHSL: modifyHSL,
+	modifyAlpha: modifyAlpha,
+	stringify: stringify
+});
+
+/**
+ * @module echarts/animation/Animator
+ */
+
+var arraySlice = Array.prototype.slice;
+
+function defaultGetter(target, key) {
+    return target[key];
+}
+
+function defaultSetter(target, key, value) {
+    target[key] = value;
+}
+
+/**
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} percent
+ * @return {number}
+ */
+function interpolateNumber(p0, p1, percent) {
+    return (p1 - p0) * percent + p0;
+}
+
+/**
+ * @param  {string} p0
+ * @param  {string} p1
+ * @param  {number} percent
+ * @return {string}
+ */
+function interpolateString(p0, p1, percent) {
+    return percent > 0.5 ? p1 : p0;
+}
+
+/**
+ * @param  {Array} p0
+ * @param  {Array} p1
+ * @param  {number} percent
+ * @param  {Array} out
+ * @param  {number} arrDim
+ */
+function interpolateArray(p0, p1, percent, out, arrDim) {
+    var len = p0.length;
+    if (arrDim == 1) {
+        for (var i = 0; i < len; i++) {
+            out[i] = interpolateNumber(p0[i], p1[i], percent);
+        }
+    }
+    else {
+        var len2 = len && p0[0].length;
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < len2; j++) {
+                out[i][j] = interpolateNumber(
+                    p0[i][j], p1[i][j], percent
+                );
+            }
+        }
+    }
+}
+
+// arr0 is source array, arr1 is target array.
+// Do some preprocess to avoid error happened when interpolating from arr0 to arr1
+function fillArr(arr0, arr1, arrDim) {
+    var arr0Len = arr0.length;
+    var arr1Len = arr1.length;
+    if (arr0Len !== arr1Len) {
+        // FIXME Not work for TypedArray
+        var isPreviousLarger = arr0Len > arr1Len;
+        if (isPreviousLarger) {
+            // Cut the previous
+            arr0.length = arr1Len;
+        }
+        else {
+            // Fill the previous
+            for (var i = arr0Len; i < arr1Len; i++) {
+                arr0.push(
+                    arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])
+                );
+            }
+        }
+    }
+    // Handling NaN value
+    var len2 = arr0[0] && arr0[0].length;
+    for (var i = 0; i < arr0.length; i++) {
+        if (arrDim === 1) {
+            if (isNaN(arr0[i])) {
+                arr0[i] = arr1[i];
+            }
+        }
+        else {
+            for (var j = 0; j < len2; j++) {
+                if (isNaN(arr0[i][j])) {
+                    arr0[i][j] = arr1[i][j];
+                }
+            }
+        }
+    }
+}
+
+/**
+ * @param  {Array} arr0
+ * @param  {Array} arr1
+ * @param  {number} arrDim
+ * @return {boolean}
+ */
+function isArraySame(arr0, arr1, arrDim) {
+    if (arr0 === arr1) {
+        return true;
+    }
+    var len = arr0.length;
+    if (len !== arr1.length) {
+        return false;
+    }
+    if (arrDim === 1) {
+        for (var i = 0; i < len; i++) {
+            if (arr0[i] !== arr1[i]) {
+                return false;
+            }
+        }
+    }
+    else {
+        var len2 = arr0[0].length;
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < len2; j++) {
+                if (arr0[i][j] !== arr1[i][j]) {
+                    return false;
+                }
+            }
+        }
+    }
+    return true;
+}
+
+/**
+ * Catmull Rom interpolate array
+ * @param  {Array} p0
+ * @param  {Array} p1
+ * @param  {Array} p2
+ * @param  {Array} p3
+ * @param  {number} t
+ * @param  {number} t2
+ * @param  {number} t3
+ * @param  {Array} out
+ * @param  {number} arrDim
+ */
+function catmullRomInterpolateArray(
+    p0, p1, p2, p3, t, t2, t3, out, arrDim
+) {
+    var len = p0.length;
+    if (arrDim == 1) {
+        for (var i = 0; i < len; i++) {
+            out[i] = catmullRomInterpolate(
+                p0[i], p1[i], p2[i], p3[i], t, t2, t3
+            );
+        }
+    }
+    else {
+        var len2 = p0[0].length;
+        for (var i = 0; i < len; i++) {
+            for (var j = 0; j < len2; j++) {
+                out[i][j] = catmullRomInterpolate(
+                    p0[i][j], p1[i][j], p2[i][j], p3[i][j],
+                    t, t2, t3
+                );
+            }
+        }
+    }
+}
+
+/**
+ * Catmull Rom interpolate number
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {number} t
+ * @param  {number} t2
+ * @param  {number} t3
+ * @return {number}
+ */
+function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {
+    var v0 = (p2 - p0) * 0.5;
+    var v1 = (p3 - p1) * 0.5;
+    return (2 * (p1 - p2) + v0 + v1) * t3
+            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2
+            + v0 * t + p1;
+}
+
+function cloneValue(value) {
+    if (isArrayLike(value)) {
+        var len = value.length;
+        if (isArrayLike(value[0])) {
+            var ret = [];
+            for (var i = 0; i < len; i++) {
+                ret.push(arraySlice.call(value[i]));
+            }
+            return ret;
+        }
+
+        return arraySlice.call(value);
+    }
+
+    return value;
+}
+
+function rgba2String(rgba) {
+    rgba[0] = Math.floor(rgba[0]);
+    rgba[1] = Math.floor(rgba[1]);
+    rgba[2] = Math.floor(rgba[2]);
+
+    return 'rgba(' + rgba.join(',') + ')';
+}
+
+function getArrayDim(keyframes) {
+    var lastValue = keyframes[keyframes.length - 1].value;
+    return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;
+}
+
+function createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {
+    var getter = animator._getter;
+    var setter = animator._setter;
+    var useSpline = easing === 'spline';
+
+    var trackLen = keyframes.length;
+    if (!trackLen) {
+        return;
+    }
+    // Guess data type
+    var firstVal = keyframes[0].value;
+    var isValueArray = isArrayLike(firstVal);
+    var isValueColor = false;
+    var isValueString = false;
+
+    // For vertices morphing
+    var arrDim = isValueArray ? getArrayDim(keyframes) : 0;
+
+    var trackMaxTime;
+    // Sort keyframe as ascending
+    keyframes.sort(function(a, b) {
+        return a.time - b.time;
+    });
+
+    trackMaxTime = keyframes[trackLen - 1].time;
+    // Percents of each keyframe
+    var kfPercents = [];
+    // Value of each keyframe
+    var kfValues = [];
+    var prevValue = keyframes[0].value;
+    var isAllValueEqual = true;
+    for (var i = 0; i < trackLen; i++) {
+        kfPercents.push(keyframes[i].time / trackMaxTime);
+        // Assume value is a color when it is a string
+        var value = keyframes[i].value;
+
+        // Check if value is equal, deep check if value is array
+        if (!((isValueArray && isArraySame(value, prevValue, arrDim))
+            || (!isValueArray && value === prevValue))) {
+            isAllValueEqual = false;
+        }
+        prevValue = value;
+
+        // Try converting a string to a color array
+        if (typeof value == 'string') {
+            var colorArray = parse(value);
+            if (colorArray) {
+                value = colorArray;
+                isValueColor = true;
+            }
+            else {
+                isValueString = true;
+            }
+        }
+        kfValues.push(value);
+    }
+    if (!forceAnimate && isAllValueEqual) {
+        return;
+    }
+
+    var lastValue = kfValues[trackLen - 1];
+    // Polyfill array and NaN value
+    for (var i = 0; i < trackLen - 1; i++) {
+        if (isValueArray) {
+            fillArr(kfValues[i], lastValue, arrDim);
+        }
+        else {
+            if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {
+                kfValues[i] = lastValue;
+            }
+        }
+    }
+    isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim);
+
+    // Cache the key of last frame to speed up when
+    // animation playback is sequency
+    var lastFrame = 0;
+    var lastFramePercent = 0;
+    var start;
+    var w;
+    var p0;
+    var p1;
+    var p2;
+    var p3;
+
+    if (isValueColor) {
+        var rgba = [0, 0, 0, 0];
+    }
+
+    var onframe = function (target, percent) {
+        // Find the range keyframes
+        // kf1-----kf2---------current--------kf3
+        // find kf2 and kf3 and do interpolation
+        var frame;
+        // In the easing function like elasticOut, percent may less than 0
+        if (percent < 0) {
+            frame = 0;
+        }
+        else if (percent < lastFramePercent) {
+            // Start from next key
+            // PENDING start from lastFrame ?
+            start = Math.min(lastFrame + 1, trackLen - 1);
+            for (frame = start; frame >= 0; frame--) {
+                if (kfPercents[frame] <= percent) {
+                    break;
+                }
+            }
+            // PENDING really need to do this ?
+            frame = Math.min(frame, trackLen - 2);
+        }
+        else {
+            for (frame = lastFrame; frame < trackLen; frame++) {
+                if (kfPercents[frame] > percent) {
+                    break;
+                }
+            }
+            frame = Math.min(frame - 1, trackLen - 2);
+        }
+        lastFrame = frame;
+        lastFramePercent = percent;
+
+        var range = (kfPercents[frame + 1] - kfPercents[frame]);
+        if (range === 0) {
+            return;
+        }
+        else {
+            w = (percent - kfPercents[frame]) / range;
+        }
+        if (useSpline) {
+            p1 = kfValues[frame];
+            p0 = kfValues[frame === 0 ? frame : frame - 1];
+            p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];
+            p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];
+            if (isValueArray) {
+                catmullRomInterpolateArray(
+                    p0, p1, p2, p3, w, w * w, w * w * w,
+                    getter(target, propName),
+                    arrDim
+                );
+            }
+            else {
+                var value;
+                if (isValueColor) {
+                    value = catmullRomInterpolateArray(
+                        p0, p1, p2, p3, w, w * w, w * w * w,
+                        rgba, 1
+                    );
+                    value = rgba2String(rgba);
+                }
+                else if (isValueString) {
+                    // String is step(0.5)
+                    return interpolateString(p1, p2, w);
+                }
+                else {
+                    value = catmullRomInterpolate(
+                        p0, p1, p2, p3, w, w * w, w * w * w
+                    );
+                }
+                setter(
+                    target,
+                    propName,
+                    value
+                );
+            }
+        }
+        else {
+            if (isValueArray) {
+                interpolateArray(
+                    kfValues[frame], kfValues[frame + 1], w,
+                    getter(target, propName),
+                    arrDim
+                );
+            }
+            else {
+                var value;
+                if (isValueColor) {
+                    interpolateArray(
+                        kfValues[frame], kfValues[frame + 1], w,
+                        rgba, 1
+                    );
+                    value = rgba2String(rgba);
+                }
+                else if (isValueString) {
+                    // String is step(0.5)
+                    return interpolateString(kfValues[frame], kfValues[frame + 1], w);
+                }
+                else {
+                    value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);
+                }
+                setter(
+                    target,
+                    propName,
+                    value
+                );
+            }
+        }
+    };
+
+    var clip = new Clip({
+        target: animator._target,
+        life: trackMaxTime,
+        loop: animator._loop,
+        delay: animator._delay,
+        onframe: onframe,
+        ondestroy: oneTrackDone
+    });
+
+    if (easing && easing !== 'spline') {
+        clip.easing = easing;
+    }
+
+    return clip;
+}
+
+/**
+ * @alias module:zrender/animation/Animator
+ * @constructor
+ * @param {Object} target
+ * @param {boolean} loop
+ * @param {Function} getter
+ * @param {Function} setter
+ */
+var Animator = function(target, loop, getter, setter) {
+    this._tracks = {};
+    this._target = target;
+
+    this._loop = loop || false;
+
+    this._getter = getter || defaultGetter;
+    this._setter = setter || defaultSetter;
+
+    this._clipCount = 0;
+
+    this._delay = 0;
+
+    this._doneList = [];
+
+    this._onframeList = [];
+
+    this._clipList = [];
+};
+
+Animator.prototype = {
+    /**
+     * 设置动画关键帧
+     * @param  {number} time 关键帧时间,单位是ms
+     * @param  {Object} props 关键帧的属性值,key-value表示
+     * @return {module:zrender/animation/Animator}
+     */
+    when: function(time /* ms */, props) {
+        var tracks = this._tracks;
+        for (var propName in props) {
+            if (!props.hasOwnProperty(propName)) {
+                continue;
+            }
+
+            if (!tracks[propName]) {
+                tracks[propName] = [];
+                // Invalid value
+                var value = this._getter(this._target, propName);
+                if (value == null) {
+                    // zrLog('Invalid property ' + propName);
+                    continue;
+                }
+                // If time is 0
+                //  Then props is given initialize value
+                // Else
+                //  Initialize value from current prop value
+                if (time !== 0) {
+                    tracks[propName].push({
+                        time: 0,
+                        value: cloneValue(value)
+                    });
+                }
+            }
+            tracks[propName].push({
+                time: time,
+                value: props[propName]
+            });
+        }
+        return this;
+    },
+    /**
+     * 添加动画每一帧的回调函数
+     * @param  {Function} callback
+     * @return {module:zrender/animation/Animator}
+     */
+    during: function (callback) {
+        this._onframeList.push(callback);
+        return this;
+    },
+
+    pause: function () {
+        for (var i = 0; i < this._clipList.length; i++) {
+            this._clipList[i].pause();
+        }
+        this._paused = true;
+    },
+
+    resume: function () {
+        for (var i = 0; i < this._clipList.length; i++) {
+            this._clipList[i].resume();
+        }
+        this._paused = false;
+    },
+
+    isPaused: function () {
+        return !!this._paused;
+    },
+
+    _doneCallback: function () {
+        // Clear all tracks
+        this._tracks = {};
+        // Clear all clips
+        this._clipList.length = 0;
+
+        var doneList = this._doneList;
+        var len = doneList.length;
+        for (var i = 0; i < len; i++) {
+            doneList[i].call(this);
+        }
+    },
+    /**
+     * 开始执行动画
+     * @param  {string|Function} [easing]
+     *         动画缓动函数,详见{@link module:zrender/animation/easing}
+     * @param  {boolean} forceAnimate
+     * @return {module:zrender/animation/Animator}
+     */
+    start: function (easing, forceAnimate) {
+
+        var self = this;
+        var clipCount = 0;
+
+        var oneTrackDone = function() {
+            clipCount--;
+            if (!clipCount) {
+                self._doneCallback();
+            }
+        };
+
+        var lastClip;
+        for (var propName in this._tracks) {
+            if (!this._tracks.hasOwnProperty(propName)) {
+                continue;
+            }
+            var clip = createTrackClip(
+                this, easing, oneTrackDone,
+                this._tracks[propName], propName, forceAnimate
+            );
+            if (clip) {
+                this._clipList.push(clip);
+                clipCount++;
+
+                // If start after added to animation
+                if (this.animation) {
+                    this.animation.addClip(clip);
+                }
+
+                lastClip = clip;
+            }
+        }
+
+        // Add during callback on the last clip
+        if (lastClip) {
+            var oldOnFrame = lastClip.onframe;
+            lastClip.onframe = function (target, percent) {
+                oldOnFrame(target, percent);
+
+                for (var i = 0; i < self._onframeList.length; i++) {
+                    self._onframeList[i](target, percent);
+                }
+            };
+        }
+
+        // This optimization will help the case that in the upper application
+        // the view may be refreshed frequently, where animation will be
+        // called repeatly but nothing changed.
+        if (!clipCount) {
+            this._doneCallback();
+        }
+        return this;
+    },
+    /**
+     * 停止动画
+     * @param {boolean} forwardToLast If move to last frame before stop
+     */
+    stop: function (forwardToLast) {
+        var clipList = this._clipList;
+        var animation = this.animation;
+        for (var i = 0; i < clipList.length; i++) {
+            var clip = clipList[i];
+            if (forwardToLast) {
+                // Move to last frame before stop
+                clip.onframe(this._target, 1);
+            }
+            animation && animation.removeClip(clip);
+        }
+        clipList.length = 0;
+    },
+    /**
+     * 设置动画延迟开始的时间
+     * @param  {number} time 单位ms
+     * @return {module:zrender/animation/Animator}
+     */
+    delay: function (time) {
+        this._delay = time;
+        return this;
+    },
+    /**
+     * 添加动画结束的回调
+     * @param  {Function} cb
+     * @return {module:zrender/animation/Animator}
+     */
+    done: function(cb) {
+        if (cb) {
+            this._doneList.push(cb);
+        }
+        return this;
+    },
+
+    /**
+     * @return {Array.<module:zrender/animation/Clip>}
+     */
+    getClips: function () {
+        return this._clipList;
+    }
+};
+
+var dpr = 1;
+
+// If in browser environment
+if (typeof window !== 'undefined') {
+    dpr = Math.max(window.devicePixelRatio || 1, 1);
+}
+
+/**
+ * config默认配置项
+ * @exports zrender/config
+ * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ */
+
+/**
+ * debug日志选项:catchBrushException为true下有效
+ * 0 : 不生成debug数据,发布用
+ * 1 : 异常抛出,调试用
+ * 2 : 控制台输出,调试用
+ */
+var debugMode = 0;
+
+// retina 屏幕优化
+var devicePixelRatio = dpr;
+
+var log = function () {
+};
+
+if (debugMode === 1) {
+    log = function () {
+        for (var k in arguments) {
+            throw new Error(arguments[k]);
+        }
+    };
+}
+else if (debugMode > 1) {
+    log = function () {
+        for (var k in arguments) {
+            console.log(arguments[k]);
+        }
+    };
+}
+
+var zrLog = log;
+
+/**
+ * @alias modue:zrender/mixin/Animatable
+ * @constructor
+ */
+var Animatable = function () {
+
+    /**
+     * @type {Array.<module:zrender/animation/Animator>}
+     * @readOnly
+     */
+    this.animators = [];
+};
+
+Animatable.prototype = {
+
+    constructor: Animatable,
+
+    /**
+     * 动画
+     *
+     * @param {string} path The path to fetch value from object, like 'a.b.c'.
+     * @param {boolean} [loop] Whether to loop animation.
+     * @return {module:zrender/animation/Animator}
+     * @example:
+     *     el.animate('style', false)
+     *         .when(1000, {x: 10} )
+     *         .done(function(){ // Animation done })
+     *         .start()
+     */
+    animate: function (path, loop) {
+        var target;
+        var animatingShape = false;
+        var el = this;
+        var zr = this.__zr;
+        if (path) {
+            var pathSplitted = path.split('.');
+            var prop = el;
+            // If animating shape
+            animatingShape = pathSplitted[0] === 'shape';
+            for (var i = 0, l = pathSplitted.length; i < l; i++) {
+                if (!prop) {
+                    continue;
+                }
+                prop = prop[pathSplitted[i]];
+            }
+            if (prop) {
+                target = prop;
+            }
+        }
+        else {
+            target = el;
+        }
+
+        if (!target) {
+            zrLog(
+                'Property "'
+                + path
+                + '" is not existed in element '
+                + el.id
+            );
+            return;
+        }
+
+        var animators = el.animators;
+
+        var animator = new Animator(target, loop);
+
+        animator.during(function (target) {
+            el.dirty(animatingShape);
+        })
+        .done(function () {
+            // FIXME Animator will not be removed if use `Animator#stop` to stop animation
+            animators.splice(indexOf(animators, animator), 1);
+        });
+
+        animators.push(animator);
+
+        // If animate after added to the zrender
+        if (zr) {
+            zr.animation.addAnimator(animator);
+        }
+
+        return animator;
+    },
+
+    /**
+     * 停止动画
+     * @param {boolean} forwardToLast If move to last frame before stop
+     */
+    stopAnimation: function (forwardToLast) {
+        var animators = this.animators;
+        var len = animators.length;
+        for (var i = 0; i < len; i++) {
+            animators[i].stop(forwardToLast);
+        }
+        animators.length = 0;
+
+        return this;
+    },
+
+    /**
+     * Caution: this method will stop previous animation.
+     * So do not use this method to one element twice before
+     * animation starts, unless you know what you are doing.
+     * @param {Object} target
+     * @param {number} [time=500] Time in ms
+     * @param {string} [easing='linear']
+     * @param {number} [delay=0]
+     * @param {Function} [callback]
+     * @param {Function} [forceAnimate] Prevent stop animation and callback
+     *        immediently when target values are the same as current values.
+     *
+     * @example
+     *  // Animate position
+     *  el.animateTo({
+     *      position: [10, 10]
+     *  }, function () { // done })
+     *
+     *  // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing
+     *  el.animateTo({
+     *      shape: {
+     *          width: 500
+     *      },
+     *      style: {
+     *          fill: 'red'
+     *      }
+     *      position: [10, 10]
+     *  }, 100, 100, 'cubicOut', function () { // done })
+     */
+        // TODO Return animation key
+    animateTo: function (target, time, delay, easing, callback, forceAnimate) {
+        // animateTo(target, time, easing, callback);
+        if (isString(delay)) {
+            callback = easing;
+            easing = delay;
+            delay = 0;
+        }
+        // animateTo(target, time, delay, callback);
+        else if (isFunction$1(easing)) {
+            callback = easing;
+            easing = 'linear';
+            delay = 0;
+        }
+        // animateTo(target, time, callback);
+        else if (isFunction$1(delay)) {
+            callback = delay;
+            delay = 0;
+        }
+        // animateTo(target, callback)
+        else if (isFunction$1(time)) {
+            callback = time;
+            time = 500;
+        }
+        // animateTo(target)
+        else if (!time) {
+            time = 500;
+        }
+        // Stop all previous animations
+        this.stopAnimation();
+        this._animateToShallow('', this, target, time, delay);
+
+        // Animators may be removed immediately after start
+        // if there is nothing to animate
+        var animators = this.animators.slice();
+        var count = animators.length;
+        function done() {
+            count--;
+            if (!count) {
+                callback && callback();
+            }
+        }
+
+        // No animators. This should be checked before animators[i].start(),
+        // because 'done' may be executed immediately if no need to animate.
+        if (!count) {
+            callback && callback();
+        }
+        // Start after all animators created
+        // Incase any animator is done immediately when all animation properties are not changed
+        for (var i = 0; i < animators.length; i++) {
+            animators[i]
+                .done(done)
+                .start(easing, forceAnimate);
+        }
+    },
+
+    /**
+     * @private
+     * @param {string} path=''
+     * @param {Object} source=this
+     * @param {Object} target
+     * @param {number} [time=500]
+     * @param {number} [delay=0]
+     *
+     * @example
+     *  // Animate position
+     *  el._animateToShallow({
+     *      position: [10, 10]
+     *  })
+     *
+     *  // Animate shape, style and position in 100ms, delayed 100ms
+     *  el._animateToShallow({
+     *      shape: {
+     *          width: 500
+     *      },
+     *      style: {
+     *          fill: 'red'
+     *      }
+     *      position: [10, 10]
+     *  }, 100, 100)
+     */
+    _animateToShallow: function (path, source, target, time, delay) {
+        var objShallow = {};
+        var propertyCount = 0;
+        for (var name in target) {
+            if (!target.hasOwnProperty(name)) {
+                continue;
+            }
+
+            if (source[name] != null) {
+                if (isObject$1(target[name]) && !isArrayLike(target[name])) {
+                    this._animateToShallow(
+                        path ? path + '.' + name : name,
+                        source[name],
+                        target[name],
+                        time,
+                        delay
+                    );
+                }
+                else {
+                    objShallow[name] = target[name];
+                    propertyCount++;
+                }
+            }
+            else if (target[name] != null) {
+                // Attr directly if not has property
+                // FIXME, if some property not needed for element ?
+                if (!path) {
+                    this.attr(name, target[name]);
+                }
+                else {  // Shape or style
+                    var props = {};
+                    props[path] = {};
+                    props[path][name] = target[name];
+                    this.attr(props);
+                }
+            }
+        }
+
+        if (propertyCount > 0) {
+            this.animate(path, false)
+                .when(time == null ? 500 : time, objShallow)
+                .delay(delay || 0);
+        }
+
+        return this;
+    }
+};
+
+/**
+ * @alias module:zrender/Element
+ * @constructor
+ * @extends {module:zrender/mixin/Animatable}
+ * @extends {module:zrender/mixin/Transformable}
+ * @extends {module:zrender/mixin/Eventful}
+ */
+var Element = function (opts) { // jshint ignore:line
+
+    Transformable.call(this, opts);
+    Eventful.call(this, opts);
+    Animatable.call(this, opts);
+
+    /**
+     * 画布元素ID
+     * @type {string}
+     */
+    this.id = opts.id || guid();
+};
+
+Element.prototype = {
+
+    /**
+     * 元素类型
+     * Element type
+     * @type {string}
+     */
+    type: 'element',
+
+    /**
+     * 元素名字
+     * Element name
+     * @type {string}
+     */
+    name: '',
+
+    /**
+     * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值
+     * ZRender instance will be assigned when element is associated with zrender
+     * @name module:/zrender/Element#__zr
+     * @type {module:zrender/ZRender}
+     */
+    __zr: null,
+
+    /**
+     * 图形是否忽略,为true时忽略图形的绘制以及事件触发
+     * If ignore drawing and events of the element object
+     * @name module:/zrender/Element#ignore
+     * @type {boolean}
+     * @default false
+     */
+    ignore: false,
+
+    /**
+     * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪
+     * 该路径会继承被裁减对象的变换
+     * @type {module:zrender/graphic/Path}
+     * @see http://www.w3.org/TR/2dcontext/#clipping-region
+     * @readOnly
+     */
+    clipPath: null,
+
+    /**
+     * 是否是 Group
+     * @type {boolean}
+     */
+    isGroup: false,
+
+    /**
+     * Drift element
+     * @param  {number} dx dx on the global space
+     * @param  {number} dy dy on the global space
+     */
+    drift: function (dx, dy) {
+        switch (this.draggable) {
+            case 'horizontal':
+                dy = 0;
+                break;
+            case 'vertical':
+                dx = 0;
+                break;
+        }
+
+        var m = this.transform;
+        if (!m) {
+            m = this.transform = [1, 0, 0, 1, 0, 0];
+        }
+        m[4] += dx;
+        m[5] += dy;
+
+        this.decomposeTransform();
+        this.dirty(false);
+    },
+
+    /**
+     * Hook before update
+     */
+    beforeUpdate: function () {},
+    /**
+     * Hook after update
+     */
+    afterUpdate: function () {},
+    /**
+     * Update each frame
+     */
+    update: function () {
+        this.updateTransform();
+    },
+
+    /**
+     * @param  {Function} cb
+     * @param  {}   context
+     */
+    traverse: function (cb, context) {},
+
+    /**
+     * @protected
+     */
+    attrKV: function (key, value) {
+        if (key === 'position' || key === 'scale' || key === 'origin') {
+            // Copy the array
+            if (value) {
+                var target = this[key];
+                if (!target) {
+                    target = this[key] = [];
+                }
+                target[0] = value[0];
+                target[1] = value[1];
+            }
+        }
+        else {
+            this[key] = value;
+        }
+    },
+
+    /**
+     * Hide the element
+     */
+    hide: function () {
+        this.ignore = true;
+        this.__zr && this.__zr.refresh();
+    },
+
+    /**
+     * Show the element
+     */
+    show: function () {
+        this.ignore = false;
+        this.__zr && this.__zr.refresh();
+    },
+
+    /**
+     * @param {string|Object} key
+     * @param {*} value
+     */
+    attr: function (key, value) {
+        if (typeof key === 'string') {
+            this.attrKV(key, value);
+        }
+        else if (isObject$1(key)) {
+            for (var name in key) {
+                if (key.hasOwnProperty(name)) {
+                    this.attrKV(name, key[name]);
+                }
+            }
+        }
+
+        this.dirty(false);
+
+        return this;
+    },
+
+    /**
+     * @param {module:zrender/graphic/Path} clipPath
+     */
+    setClipPath: function (clipPath) {
+        var zr = this.__zr;
+        if (zr) {
+            clipPath.addSelfToZr(zr);
+        }
+
+        // Remove previous clip path
+        if (this.clipPath && this.clipPath !== clipPath) {
+            this.removeClipPath();
+        }
+
+        this.clipPath = clipPath;
+        clipPath.__zr = zr;
+        clipPath.__clipTarget = this;
+
+        this.dirty(false);
+    },
+
+    /**
+     */
+    removeClipPath: function () {
+        var clipPath = this.clipPath;
+        if (clipPath) {
+            if (clipPath.__zr) {
+                clipPath.removeSelfFromZr(clipPath.__zr);
+            }
+
+            clipPath.__zr = null;
+            clipPath.__clipTarget = null;
+            this.clipPath = null;
+
+            this.dirty(false);
+        }
+    },
+
+    /**
+     * Add self from zrender instance.
+     * Not recursively because it will be invoked when element added to storage.
+     * @param {module:zrender/ZRender} zr
+     */
+    addSelfToZr: function (zr) {
+        this.__zr = zr;
+        // 添加动画
+        var animators = this.animators;
+        if (animators) {
+            for (var i = 0; i < animators.length; i++) {
+                zr.animation.addAnimator(animators[i]);
+            }
+        }
+
+        if (this.clipPath) {
+            this.clipPath.addSelfToZr(zr);
+        }
+    },
+
+    /**
+     * Remove self from zrender instance.
+     * Not recursively because it will be invoked when element added to storage.
+     * @param {module:zrender/ZRender} zr
+     */
+    removeSelfFromZr: function (zr) {
+        this.__zr = null;
+        // 移除动画
+        var animators = this.animators;
+        if (animators) {
+            for (var i = 0; i < animators.length; i++) {
+                zr.animation.removeAnimator(animators[i]);
+            }
+        }
+
+        if (this.clipPath) {
+            this.clipPath.removeSelfFromZr(zr);
+        }
+    }
+};
+
+mixin(Element, Animatable);
+mixin(Element, Transformable);
+mixin(Element, Eventful);
+
+/**
+ * @module echarts/core/BoundingRect
+ */
+
+var v2ApplyTransform = applyTransform;
+var mathMin = Math.min;
+var mathMax = Math.max;
+
+/**
+ * @alias module:echarts/core/BoundingRect
+ */
+function BoundingRect(x, y, width, height) {
+
+    if (width < 0) {
+        x = x + width;
+        width = -width;
+    }
+    if (height < 0) {
+        y = y + height;
+        height = -height;
+    }
+
+    /**
+     * @type {number}
+     */
+    this.x = x;
+    /**
+     * @type {number}
+     */
+    this.y = y;
+    /**
+     * @type {number}
+     */
+    this.width = width;
+    /**
+     * @type {number}
+     */
+    this.height = height;
+}
+
+BoundingRect.prototype = {
+
+    constructor: BoundingRect,
+
+    /**
+     * @param {module:echarts/core/BoundingRect} other
+     */
+    union: function (other) {
+        var x = mathMin(other.x, this.x);
+        var y = mathMin(other.y, this.y);
+
+        this.width = mathMax(
+                other.x + other.width,
+                this.x + this.width
+            ) - x;
+        this.height = mathMax(
+                other.y + other.height,
+                this.y + this.height
+            ) - y;
+        this.x = x;
+        this.y = y;
+    },
+
+    /**
+     * @param {Array.<number>} m
+     * @methods
+     */
+    applyTransform: (function () {
+        var lt = [];
+        var rb = [];
+        var lb = [];
+        var rt = [];
+        return function (m) {
+            // In case usage like this
+            // el.getBoundingRect().applyTransform(el.transform)
+            // And element has no transform
+            if (!m) {
+                return;
+            }
+            lt[0] = lb[0] = this.x;
+            lt[1] = rt[1] = this.y;
+            rb[0] = rt[0] = this.x + this.width;
+            rb[1] = lb[1] = this.y + this.height;
+
+            v2ApplyTransform(lt, lt, m);
+            v2ApplyTransform(rb, rb, m);
+            v2ApplyTransform(lb, lb, m);
+            v2ApplyTransform(rt, rt, m);
+
+            this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);
+            this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);
+            var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);
+            var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);
+            this.width = maxX - this.x;
+            this.height = maxY - this.y;
+        };
+    })(),
+
+    /**
+     * Calculate matrix of transforming from self to target rect
+     * @param  {module:zrender/core/BoundingRect} b
+     * @return {Array.<number>}
+     */
+    calculateTransform: function (b) {
+        var a = this;
+        var sx = b.width / a.width;
+        var sy = b.height / a.height;
+
+        var m = create$1();
+
+        // 矩阵右乘
+        translate(m, m, [-a.x, -a.y]);
+        scale$1(m, m, [sx, sy]);
+        translate(m, m, [b.x, b.y]);
+
+        return m;
+    },
+
+    /**
+     * @param {(module:echarts/core/BoundingRect|Object)} b
+     * @return {boolean}
+     */
+    intersect: function (b) {
+        if (!b) {
+            return false;
+        }
+
+        if (!(b instanceof BoundingRect)) {
+            // Normalize negative width/height.
+            b = BoundingRect.create(b);
+        }
+
+        var a = this;
+        var ax0 = a.x;
+        var ax1 = a.x + a.width;
+        var ay0 = a.y;
+        var ay1 = a.y + a.height;
+
+        var bx0 = b.x;
+        var bx1 = b.x + b.width;
+        var by0 = b.y;
+        var by1 = b.y + b.height;
+
+        return ! (ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);
+    },
+
+    contain: function (x, y) {
+        var rect = this;
+        return x >= rect.x
+            && x <= (rect.x + rect.width)
+            && y >= rect.y
+            && y <= (rect.y + rect.height);
+    },
+
+    /**
+     * @return {module:echarts/core/BoundingRect}
+     */
+    clone: function () {
+        return new BoundingRect(this.x, this.y, this.width, this.height);
+    },
+
+    /**
+     * Copy from another rect
+     */
+    copy: function (other) {
+        this.x = other.x;
+        this.y = other.y;
+        this.width = other.width;
+        this.height = other.height;
+    },
+
+    plain: function () {
+        return {
+            x: this.x,
+            y: this.y,
+            width: this.width,
+            height: this.height
+        };
+    }
+};
+
+/**
+ * @param {Object|module:zrender/core/BoundingRect} rect
+ * @param {number} rect.x
+ * @param {number} rect.y
+ * @param {number} rect.width
+ * @param {number} rect.height
+ * @return {module:zrender/core/BoundingRect}
+ */
+BoundingRect.create = function (rect) {
+    return new BoundingRect(rect.x, rect.y, rect.width, rect.height);
+};
+
+/**
+ * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上
+ * @module zrender/graphic/Group
+ * @example
+ *     var Group = require('zrender/container/Group');
+ *     var Circle = require('zrender/graphic/shape/Circle');
+ *     var g = new Group();
+ *     g.position[0] = 100;
+ *     g.position[1] = 100;
+ *     g.add(new Circle({
+ *         style: {
+ *             x: 100,
+ *             y: 100,
+ *             r: 20,
+ *         }
+ *     }));
+ *     zr.add(g);
+ */
+
+/**
+ * @alias module:zrender/graphic/Group
+ * @constructor
+ * @extends module:zrender/mixin/Transformable
+ * @extends module:zrender/mixin/Eventful
+ */
+var Group = function (opts) {
+
+    opts = opts || {};
+
+    Element.call(this, opts);
+
+    for (var key in opts) {
+        if (opts.hasOwnProperty(key)) {
+            this[key] = opts[key];
+        }
+    }
+
+    this._children = [];
+
+    this.__storage = null;
+
+    this.__dirty = true;
+};
+
+Group.prototype = {
+
+    constructor: Group,
+
+    isGroup: true,
+
+    /**
+     * @type {string}
+     */
+    type: 'group',
+
+    /**
+     * 所有子孙元素是否响应鼠标事件
+     * @name module:/zrender/container/Group#silent
+     * @type {boolean}
+     * @default false
+     */
+    silent: false,
+
+    /**
+     * @return {Array.<module:zrender/Element>}
+     */
+    children: function () {
+        return this._children.slice();
+    },
+
+    /**
+     * 获取指定 index 的儿子节点
+     * @param  {number} idx
+     * @return {module:zrender/Element}
+     */
+    childAt: function (idx) {
+        return this._children[idx];
+    },
+
+    /**
+     * 获取指定名字的儿子节点
+     * @param  {string} name
+     * @return {module:zrender/Element}
+     */
+    childOfName: function (name) {
+        var children = this._children;
+        for (var i = 0; i < children.length; i++) {
+            if (children[i].name === name) {
+                return children[i];
+            }
+            }
+    },
+
+    /**
+     * @return {number}
+     */
+    childCount: function () {
+        return this._children.length;
+    },
+
+    /**
+     * 添加子节点到最后
+     * @param {module:zrender/Element} child
+     */
+    add: function (child) {
+        if (child && child !== this && child.parent !== this) {
+
+            this._children.push(child);
+
+            this._doAdd(child);
+        }
+
+        return this;
+    },
+
+    /**
+     * 添加子节点在 nextSibling 之前
+     * @param {module:zrender/Element} child
+     * @param {module:zrender/Element} nextSibling
+     */
+    addBefore: function (child, nextSibling) {
+        if (child && child !== this && child.parent !== this
+            && nextSibling && nextSibling.parent === this) {
+
+            var children = this._children;
+            var idx = children.indexOf(nextSibling);
+
+            if (idx >= 0) {
+                children.splice(idx, 0, child);
+                this._doAdd(child);
+            }
+        }
+
+        return this;
+    },
+
+    _doAdd: function (child) {
+        if (child.parent) {
+            child.parent.remove(child);
+        }
+
+        child.parent = this;
+
+        var storage = this.__storage;
+        var zr = this.__zr;
+        if (storage && storage !== child.__storage) {
+
+            storage.addToStorage(child);
+
+            if (child instanceof Group) {
+                child.addChildrenToStorage(storage);
+            }
+        }
+
+        zr && zr.refresh();
+    },
+
+    /**
+     * 移除子节点
+     * @param {module:zrender/Element} child
+     */
+    remove: function (child) {
+        var zr = this.__zr;
+        var storage = this.__storage;
+        var children = this._children;
+
+        var idx = indexOf(children, child);
+        if (idx < 0) {
+            return this;
+        }
+        children.splice(idx, 1);
+
+        child.parent = null;
+
+        if (storage) {
+
+            storage.delFromStorage(child);
+
+            if (child instanceof Group) {
+                child.delChildrenFromStorage(storage);
+            }
+        }
+
+        zr && zr.refresh();
+
+        return this;
+    },
+
+    /**
+     * 移除所有子节点
+     */
+    removeAll: function () {
+        var children = this._children;
+        var storage = this.__storage;
+        var child;
+        var i;
+        for (i = 0; i < children.length; i++) {
+            child = children[i];
+            if (storage) {
+                storage.delFromStorage(child);
+                if (child instanceof Group) {
+                    child.delChildrenFromStorage(storage);
+                }
+            }
+            child.parent = null;
+        }
+        children.length = 0;
+
+        return this;
+    },
+
+    /**
+     * 遍历所有子节点
+     * @param  {Function} cb
+     * @param  {}   context
+     */
+    eachChild: function (cb, context) {
+        var children = this._children;
+        for (var i = 0; i < children.length; i++) {
+            var child = children[i];
+            cb.call(context, child, i);
+        }
+        return this;
+    },
+
+    /**
+     * 深度优先遍历所有子孙节点
+     * @param  {Function} cb
+     * @param  {}   context
+     */
+    traverse: function (cb, context) {
+        for (var i = 0; i < this._children.length; i++) {
+            var child = this._children[i];
+            cb.call(context, child);
+
+            if (child.type === 'group') {
+                child.traverse(cb, context);
+            }
+        }
+        return this;
+    },
+
+    addChildrenToStorage: function (storage) {
+        for (var i = 0; i < this._children.length; i++) {
+            var child = this._children[i];
+            storage.addToStorage(child);
+            if (child instanceof Group) {
+                child.addChildrenToStorage(storage);
+            }
+        }
+    },
+
+    delChildrenFromStorage: function (storage) {
+        for (var i = 0; i < this._children.length; i++) {
+            var child = this._children[i];
+            storage.delFromStorage(child);
+            if (child instanceof Group) {
+                child.delChildrenFromStorage(storage);
+            }
+        }
+    },
+
+    dirty: function () {
+        this.__dirty = true;
+        this.__zr && this.__zr.refresh();
+        return this;
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getBoundingRect: function (includeChildren) {
+        // TODO Caching
+        var rect = null;
+        var tmpRect = new BoundingRect(0, 0, 0, 0);
+        var children = includeChildren || this._children;
+        var tmpMat = [];
+
+        for (var i = 0; i < children.length; i++) {
+            var child = children[i];
+            if (child.ignore || child.invisible) {
+                continue;
+            }
+
+            var childRect = child.getBoundingRect();
+            var transform = child.getLocalTransform(tmpMat);
+            // TODO
+            // The boundingRect cacluated by transforming original
+            // rect may be bigger than the actual bundingRect when rotation
+            // is used. (Consider a circle rotated aginst its center, where
+            // the actual boundingRect should be the same as that not be
+            // rotated.) But we can not find better approach to calculate
+            // actual boundingRect yet, considering performance.
+            if (transform) {
+                tmpRect.copy(childRect);
+                tmpRect.applyTransform(transform);
+                rect = rect || tmpRect.clone();
+                rect.union(tmpRect);
+            }
+            else {
+                rect = rect || childRect.clone();
+                rect.union(childRect);
+            }
+        }
+        return rect || tmpRect;
+    }
+};
+
+inherits(Group, Element);
+
+// https://github.com/mziccard/node-timsort
+var DEFAULT_MIN_MERGE = 32;
+
+var DEFAULT_MIN_GALLOPING = 7;
+
+function minRunLength(n) {
+    var r = 0;
+
+    while (n >= DEFAULT_MIN_MERGE) {
+        r |= n & 1;
+        n >>= 1;
+    }
+
+    return n + r;
+}
+
+function makeAscendingRun(array, lo, hi, compare) {
+    var runHi = lo + 1;
+
+    if (runHi === hi) {
+        return 1;
+    }
+
+    if (compare(array[runHi++], array[lo]) < 0) {
+        while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {
+            runHi++;
+        }
+
+        reverseRun(array, lo, runHi);
+    }
+    else {
+        while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {
+            runHi++;
+        }
+    }
+
+    return runHi - lo;
+}
+
+function reverseRun(array, lo, hi) {
+    hi--;
+
+    while (lo < hi) {
+        var t = array[lo];
+        array[lo++] = array[hi];
+        array[hi--] = t;
+    }
+}
+
+function binaryInsertionSort(array, lo, hi, start, compare) {
+    if (start === lo) {
+        start++;
+    }
+
+    for (; start < hi; start++) {
+        var pivot = array[start];
+
+        var left = lo;
+        var right = start;
+        var mid;
+
+        while (left < right) {
+            mid = left + right >>> 1;
+
+            if (compare(pivot, array[mid]) < 0) {
+                right = mid;
+            }
+            else {
+                left = mid + 1;
+            }
+        }
+
+        var n = start - left;
+
+        switch (n) {
+            case 3:
+                array[left + 3] = array[left + 2];
+
+            case 2:
+                array[left + 2] = array[left + 1];
+
+            case 1:
+                array[left + 1] = array[left];
+                break;
+            default:
+                while (n > 0) {
+                    array[left + n] = array[left + n - 1];
+                    n--;
+                }
+        }
+
+        array[left] = pivot;
+    }
+}
+
+function gallopLeft(value, array, start, length, hint, compare) {
+    var lastOffset = 0;
+    var maxOffset = 0;
+    var offset = 1;
+
+    if (compare(value, array[start + hint]) > 0) {
+        maxOffset = length - hint;
+
+        while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {
+            lastOffset = offset;
+            offset = (offset << 1) + 1;
+
+            if (offset <= 0) {
+                offset = maxOffset;
+            }
+        }
+
+        if (offset > maxOffset) {
+            offset = maxOffset;
+        }
+
+        lastOffset += hint;
+        offset += hint;
+    }
+    else {
+        maxOffset = hint + 1;
+        while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {
+            lastOffset = offset;
+            offset = (offset << 1) + 1;
+
+            if (offset <= 0) {
+                offset = maxOffset;
+            }
+        }
+        if (offset > maxOffset) {
+            offset = maxOffset;
+        }
+
+        var tmp = lastOffset;
+        lastOffset = hint - offset;
+        offset = hint - tmp;
+    }
+
+    lastOffset++;
+    while (lastOffset < offset) {
+        var m = lastOffset + (offset - lastOffset >>> 1);
+
+        if (compare(value, array[start + m]) > 0) {
+            lastOffset = m + 1;
+        }
+        else {
+            offset = m;
+        }
+    }
+    return offset;
+}
+
+function gallopRight(value, array, start, length, hint, compare) {
+    var lastOffset = 0;
+    var maxOffset = 0;
+    var offset = 1;
+
+    if (compare(value, array[start + hint]) < 0) {
+        maxOffset = hint + 1;
+
+        while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {
+            lastOffset = offset;
+            offset = (offset << 1) + 1;
+
+            if (offset <= 0) {
+                offset = maxOffset;
+            }
+        }
+
+        if (offset > maxOffset) {
+            offset = maxOffset;
+        }
+
+        var tmp = lastOffset;
+        lastOffset = hint - offset;
+        offset = hint - tmp;
+    }
+    else {
+        maxOffset = length - hint;
+
+        while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {
+            lastOffset = offset;
+            offset = (offset << 1) + 1;
+
+            if (offset <= 0) {
+                offset = maxOffset;
+            }
+        }
+
+        if (offset > maxOffset) {
+            offset = maxOffset;
+        }
+
+        lastOffset += hint;
+        offset += hint;
+    }
+
+    lastOffset++;
+
+    while (lastOffset < offset) {
+        var m = lastOffset + (offset - lastOffset >>> 1);
+
+        if (compare(value, array[start + m]) < 0) {
+            offset = m;
+        }
+        else {
+            lastOffset = m + 1;
+        }
+    }
+
+    return offset;
+}
+
+function TimSort(array, compare) {
+    var minGallop = DEFAULT_MIN_GALLOPING;
+    var runStart;
+    var runLength;
+    var stackSize = 0;
+
+    var tmp = [];
+
+    runStart = [];
+    runLength = [];
+
+    function pushRun(_runStart, _runLength) {
+        runStart[stackSize] = _runStart;
+        runLength[stackSize] = _runLength;
+        stackSize += 1;
+    }
+
+    function mergeRuns() {
+        while (stackSize > 1) {
+            var n = stackSize - 2;
+
+            if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) {
+                if (runLength[n - 1] < runLength[n + 1]) {
+                    n--;
+                }
+            }
+            else if (runLength[n] > runLength[n + 1]) {
+                break;
+            }
+            mergeAt(n);
+        }
+    }
+
+    function forceMergeRuns() {
+        while (stackSize > 1) {
+            var n = stackSize - 2;
+
+            if (n > 0 && runLength[n - 1] < runLength[n + 1]) {
+                n--;
+            }
+
+            mergeAt(n);
+        }
+    }
+
+    function mergeAt(i) {
+        var start1 = runStart[i];
+        var length1 = runLength[i];
+        var start2 = runStart[i + 1];
+        var length2 = runLength[i + 1];
+
+        runLength[i] = length1 + length2;
+
+        if (i === stackSize - 3) {
+            runStart[i + 1] = runStart[i + 2];
+            runLength[i + 1] = runLength[i + 2];
+        }
+
+        stackSize--;
+
+        var k = gallopRight(array[start2], array, start1, length1, 0, compare);
+        start1 += k;
+        length1 -= k;
+
+        if (length1 === 0) {
+            return;
+        }
+
+        length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);
+
+        if (length2 === 0) {
+            return;
+        }
+
+        if (length1 <= length2) {
+            mergeLow(start1, length1, start2, length2);
+        }
+        else {
+            mergeHigh(start1, length1, start2, length2);
+        }
+    }
+
+    function mergeLow(start1, length1, start2, length2) {
+        var i = 0;
+
+        for (i = 0; i < length1; i++) {
+            tmp[i] = array[start1 + i];
+        }
+
+        var cursor1 = 0;
+        var cursor2 = start2;
+        var dest = start1;
+
+        array[dest++] = array[cursor2++];
+
+        if (--length2 === 0) {
+            for (i = 0; i < length1; i++) {
+                array[dest + i] = tmp[cursor1 + i];
+            }
+            return;
+        }
+
+        if (length1 === 1) {
+            for (i = 0; i < length2; i++) {
+                array[dest + i] = array[cursor2 + i];
+            }
+            array[dest + length2] = tmp[cursor1];
+            return;
+        }
+
+        var _minGallop = minGallop;
+        var count1, count2, exit;
+
+        while (1) {
+            count1 = 0;
+            count2 = 0;
+            exit = false;
+
+            do {
+                if (compare(array[cursor2], tmp[cursor1]) < 0) {
+                    array[dest++] = array[cursor2++];
+                    count2++;
+                    count1 = 0;
+
+                    if (--length2 === 0) {
+                        exit = true;
+                        break;
+                    }
+                }
+                else {
+                    array[dest++] = tmp[cursor1++];
+                    count1++;
+                    count2 = 0;
+                    if (--length1 === 1) {
+                        exit = true;
+                        break;
+                    }
+                }
+            } while ((count1 | count2) < _minGallop);
+
+            if (exit) {
+                break;
+            }
+
+            do {
+                count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);
+
+                if (count1 !== 0) {
+                    for (i = 0; i < count1; i++) {
+                        array[dest + i] = tmp[cursor1 + i];
+                    }
+
+                    dest += count1;
+                    cursor1 += count1;
+                    length1 -= count1;
+                    if (length1 <= 1) {
+                        exit = true;
+                        break;
+                    }
+                }
+
+                array[dest++] = array[cursor2++];
+
+                if (--length2 === 0) {
+                    exit = true;
+                    break;
+                }
+
+                count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);
+
+                if (count2 !== 0) {
+                    for (i = 0; i < count2; i++) {
+                        array[dest + i] = array[cursor2 + i];
+                    }
+
+                    dest += count2;
+                    cursor2 += count2;
+                    length2 -= count2;
+
+                    if (length2 === 0) {
+                        exit = true;
+                        break;
+                    }
+                }
+                array[dest++] = tmp[cursor1++];
+
+                if (--length1 === 1) {
+                    exit = true;
+                    break;
+                }
+
+                _minGallop--;
+            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);
+
+            if (exit) {
+                break;
+            }
+
+            if (_minGallop < 0) {
+                _minGallop = 0;
+            }
+
+            _minGallop += 2;
+        }
+
+        minGallop = _minGallop;
+
+        minGallop < 1 && (minGallop = 1);
+
+        if (length1 === 1) {
+            for (i = 0; i < length2; i++) {
+                array[dest + i] = array[cursor2 + i];
+            }
+            array[dest + length2] = tmp[cursor1];
+        }
+        else if (length1 === 0) {
+            throw new Error();
+            // throw new Error('mergeLow preconditions were not respected');
+        }
+        else {
+            for (i = 0; i < length1; i++) {
+                array[dest + i] = tmp[cursor1 + i];
+            }
+        }
+    }
+
+    function mergeHigh (start1, length1, start2, length2) {
+        var i = 0;
+
+        for (i = 0; i < length2; i++) {
+            tmp[i] = array[start2 + i];
+        }
+
+        var cursor1 = start1 + length1 - 1;
+        var cursor2 = length2 - 1;
+        var dest = start2 + length2 - 1;
+        var customCursor = 0;
+        var customDest = 0;
+
+        array[dest--] = array[cursor1--];
+
+        if (--length1 === 0) {
+            customCursor = dest - (length2 - 1);
+
+            for (i = 0; i < length2; i++) {
+                array[customCursor + i] = tmp[i];
+            }
+
+            return;
+        }
+
+        if (length2 === 1) {
+            dest -= length1;
+            cursor1 -= length1;
+            customDest = dest + 1;
+            customCursor = cursor1 + 1;
+
+            for (i = length1 - 1; i >= 0; i--) {
+                array[customDest + i] = array[customCursor + i];
+            }
+
+            array[dest] = tmp[cursor2];
+            return;
+        }
+
+        var _minGallop = minGallop;
+
+        while (true) {
+            var count1 = 0;
+            var count2 = 0;
+            var exit = false;
+
+            do {
+                if (compare(tmp[cursor2], array[cursor1]) < 0) {
+                    array[dest--] = array[cursor1--];
+                    count1++;
+                    count2 = 0;
+                    if (--length1 === 0) {
+                        exit = true;
+                        break;
+                    }
+                }
+                else {
+                    array[dest--] = tmp[cursor2--];
+                    count2++;
+                    count1 = 0;
+                    if (--length2 === 1) {
+                        exit = true;
+                        break;
+                    }
+                }
+            } while ((count1 | count2) < _minGallop);
+
+            if (exit) {
+                break;
+            }
+
+            do {
+                count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);
+
+                if (count1 !== 0) {
+                    dest -= count1;
+                    cursor1 -= count1;
+                    length1 -= count1;
+                    customDest = dest + 1;
+                    customCursor = cursor1 + 1;
+
+                    for (i = count1 - 1; i >= 0; i--) {
+                        array[customDest + i] = array[customCursor + i];
+                    }
+
+                    if (length1 === 0) {
+                        exit = true;
+                        break;
+                    }
+                }
+
+                array[dest--] = tmp[cursor2--];
+
+                if (--length2 === 1) {
+                    exit = true;
+                    break;
+                }
+
+                count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);
+
+                if (count2 !== 0) {
+                    dest -= count2;
+                    cursor2 -= count2;
+                    length2 -= count2;
+                    customDest = dest + 1;
+                    customCursor = cursor2 + 1;
+
+                    for (i = 0; i < count2; i++) {
+                        array[customDest + i] = tmp[customCursor + i];
+                    }
+
+                    if (length2 <= 1) {
+                        exit = true;
+                        break;
+                    }
+                }
+
+                array[dest--] = array[cursor1--];
+
+                if (--length1 === 0) {
+                    exit = true;
+                    break;
+                }
+
+                _minGallop--;
+            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);
+
+            if (exit) {
+                break;
+            }
+
+            if (_minGallop < 0) {
+                _minGallop = 0;
+            }
+
+            _minGallop += 2;
+        }
+
+        minGallop = _minGallop;
+
+        if (minGallop < 1) {
+            minGallop = 1;
+        }
+
+        if (length2 === 1) {
+            dest -= length1;
+            cursor1 -= length1;
+            customDest = dest + 1;
+            customCursor = cursor1 + 1;
+
+            for (i = length1 - 1; i >= 0; i--) {
+                array[customDest + i] = array[customCursor + i];
+            }
+
+            array[dest] = tmp[cursor2];
+        }
+        else if (length2 === 0) {
+            throw new Error();
+            // throw new Error('mergeHigh preconditions were not respected');
+        }
+        else {
+            customCursor = dest - (length2 - 1);
+            for (i = 0; i < length2; i++) {
+                array[customCursor + i] = tmp[i];
+            }
+        }
+    }
+
+    this.mergeRuns = mergeRuns;
+    this.forceMergeRuns = forceMergeRuns;
+    this.pushRun = pushRun;
+}
+
+function sort(array, compare, lo, hi) {
+    if (!lo) {
+        lo = 0;
+    }
+    if (!hi) {
+        hi = array.length;
+    }
+
+    var remaining = hi - lo;
+
+    if (remaining < 2) {
+        return;
+    }
+
+    var runLength = 0;
+
+    if (remaining < DEFAULT_MIN_MERGE) {
+        runLength = makeAscendingRun(array, lo, hi, compare);
+        binaryInsertionSort(array, lo, hi, lo + runLength, compare);
+        return;
+    }
+
+    var ts = new TimSort(array, compare);
+
+    var minRun = minRunLength(remaining);
+
+    do {
+        runLength = makeAscendingRun(array, lo, hi, compare);
+        if (runLength < minRun) {
+            var force = remaining;
+            if (force > minRun) {
+                force = minRun;
+            }
+
+            binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);
+            runLength = force;
+        }
+
+        ts.pushRun(lo, runLength);
+        ts.mergeRuns();
+
+        remaining -= runLength;
+        lo += runLength;
+    } while (remaining !== 0);
+
+    ts.forceMergeRuns();
+}
+
+// Use timsort because in most case elements are partially sorted
+// https://jsfiddle.net/pissang/jr4x7mdm/8/
+function shapeCompareFunc(a, b) {
+    if (a.zlevel === b.zlevel) {
+        if (a.z === b.z) {
+            // if (a.z2 === b.z2) {
+            //     // FIXME Slow has renderidx compare
+            //     // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement
+            //     // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012
+            //     return a.__renderidx - b.__renderidx;
+            // }
+            return a.z2 - b.z2;
+        }
+        return a.z - b.z;
+    }
+    return a.zlevel - b.zlevel;
+}
+/**
+ * 内容仓库 (M)
+ * @alias module:zrender/Storage
+ * @constructor
+ */
+var Storage = function () { // jshint ignore:line
+    this._roots = [];
+
+    this._displayList = [];
+
+    this._displayListLen = 0;
+};
+
+Storage.prototype = {
+
+    constructor: Storage,
+
+    /**
+     * @param  {Function} cb
+     *
+     */
+    traverse: function (cb, context) {
+        for (var i = 0; i < this._roots.length; i++) {
+            this._roots[i].traverse(cb, context);
+        }
+    },
+
+    /**
+     * 返回所有图形的绘制队列
+     * @param {boolean} [update=false] 是否在返回前更新该数组
+     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效
+     *
+     * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}
+     * @return {Array.<module:zrender/graphic/Displayable>}
+     */
+    getDisplayList: function (update, includeIgnore) {
+        includeIgnore = includeIgnore || false;
+        if (update) {
+            this.updateDisplayList(includeIgnore);
+        }
+        return this._displayList;
+    },
+
+    /**
+     * 更新图形的绘制队列。
+     * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,
+     * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列
+     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组
+     */
+    updateDisplayList: function (includeIgnore) {
+        this._displayListLen = 0;
+
+        var roots = this._roots;
+        var displayList = this._displayList;
+        for (var i = 0, len = roots.length; i < len; i++) {
+            this._updateAndAddDisplayable(roots[i], null, includeIgnore);
+        }
+
+        displayList.length = this._displayListLen;
+
+        env$1.canvasSupported && sort(displayList, shapeCompareFunc);
+    },
+
+    _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {
+
+        if (el.ignore && !includeIgnore) {
+            return;
+        }
+
+        el.beforeUpdate();
+
+        if (el.__dirty) {
+
+            el.update();
+
+        }
+
+        el.afterUpdate();
+
+        var userSetClipPath = el.clipPath;
+        if (userSetClipPath) {
+
+            // FIXME 效率影响
+            if (clipPaths) {
+                clipPaths = clipPaths.slice();
+            }
+            else {
+                clipPaths = [];
+            }
+
+            var currentClipPath = userSetClipPath;
+            var parentClipPath = el;
+            // Recursively add clip path
+            while (currentClipPath) {
+                // clipPath 的变换是基于使用这个 clipPath 的元素
+                currentClipPath.parent = parentClipPath;
+                currentClipPath.updateTransform();
+
+                clipPaths.push(currentClipPath);
+
+                parentClipPath = currentClipPath;
+                currentClipPath = currentClipPath.clipPath;
+            }
+        }
+
+        if (el.isGroup) {
+            var children = el._children;
+
+            for (var i = 0; i < children.length; i++) {
+                var child = children[i];
+
+                // Force to mark as dirty if group is dirty
+                // FIXME __dirtyPath ?
+                if (el.__dirty) {
+                    child.__dirty = true;
+                }
+
+                this._updateAndAddDisplayable(child, clipPaths, includeIgnore);
+            }
+
+            // Mark group clean here
+            el.__dirty = false;
+
+        }
+        else {
+            el.__clipPaths = clipPaths;
+
+            this._displayList[this._displayListLen++] = el;
+        }
+    },
+
+    /**
+     * 添加图形(Shape)或者组(Group)到根节点
+     * @param {module:zrender/Element} el
+     */
+    addRoot: function (el) {
+        if (el.__storage === this) {
+            return;
+        }
+
+        if (el instanceof Group) {
+            el.addChildrenToStorage(this);
+        }
+
+        this.addToStorage(el);
+        this._roots.push(el);
+    },
+
+    /**
+     * 删除指定的图形(Shape)或者组(Group)
+     * @param {string|Array.<string>} [el] 如果为空清空整个Storage
+     */
+    delRoot: function (el) {
+        if (el == null) {
+            // 不指定el清空
+            for (var i = 0; i < this._roots.length; i++) {
+                var root = this._roots[i];
+                if (root instanceof Group) {
+                    root.delChildrenFromStorage(this);
+                }
+            }
+
+            this._roots = [];
+            this._displayList = [];
+            this._displayListLen = 0;
+
+            return;
+        }
+
+        if (el instanceof Array) {
+            for (var i = 0, l = el.length; i < l; i++) {
+                this.delRoot(el[i]);
+            }
+            return;
+        }
+
+
+        var idx = indexOf(this._roots, el);
+        if (idx >= 0) {
+            this.delFromStorage(el);
+            this._roots.splice(idx, 1);
+            if (el instanceof Group) {
+                el.delChildrenFromStorage(this);
+            }
+        }
+    },
+
+    addToStorage: function (el) {
+        if (el) {
+            el.__storage = this;
+            el.dirty(false);
+        }
+        return this;
+    },
+
+    delFromStorage: function (el) {
+        if (el) {
+            el.__storage = null;
+        }
+
+        return this;
+    },
+
+    /**
+     * 清空并且释放Storage
+     */
+    dispose: function () {
+        this._renderList =
+        this._roots = null;
+    },
+
+    displayableSortFunc: shapeCompareFunc
+};
+
+var SHADOW_PROPS = {
+    'shadowBlur': 1,
+    'shadowOffsetX': 1,
+    'shadowOffsetY': 1,
+    'textShadowBlur': 1,
+    'textShadowOffsetX': 1,
+    'textShadowOffsetY': 1,
+    'textBoxShadowBlur': 1,
+    'textBoxShadowOffsetX': 1,
+    'textBoxShadowOffsetY': 1
+};
+
+var fixShadow = function (ctx, propName, value) {
+    if (SHADOW_PROPS.hasOwnProperty(propName)) {
+        return value *= ctx.dpr;
+    }
+    return value;
+};
+
+var STYLE_COMMON_PROPS = [
+    ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'],
+    ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]
+];
+
+// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4);
+// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4);
+
+var Style = function (opts, host) {
+    this.extendFrom(opts, false);
+    this.host = host;
+};
+
+function createLinearGradient(ctx, obj, rect) {
+    var x = obj.x == null ? 0 : obj.x;
+    var x2 = obj.x2 == null ? 1 : obj.x2;
+    var y = obj.y == null ? 0 : obj.y;
+    var y2 = obj.y2 == null ? 0 : obj.y2;
+
+    if (!obj.global) {
+        x = x * rect.width + rect.x;
+        x2 = x2 * rect.width + rect.x;
+        y = y * rect.height + rect.y;
+        y2 = y2 * rect.height + rect.y;
+    }
+
+    // Fix NaN when rect is Infinity
+    x = isNaN(x) ? 0 : x;
+    x2 = isNaN(x2) ? 1 : x2;
+    y = isNaN(y) ? 0 : y;
+    y2 = isNaN(y2) ? 0 : y2;
+
+    var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);
+
+    return canvasGradient;
+}
+
+function createRadialGradient(ctx, obj, rect) {
+    var width = rect.width;
+    var height = rect.height;
+    var min = Math.min(width, height);
+
+    var x = obj.x == null ? 0.5 : obj.x;
+    var y = obj.y == null ? 0.5 : obj.y;
+    var r = obj.r == null ? 0.5 : obj.r;
+    if (!obj.global) {
+        x = x * width + rect.x;
+        y = y * height + rect.y;
+        r = r * min;
+    }
+
+    var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);
+
+    return canvasGradient;
+}
+
+
+Style.prototype = {
+
+    constructor: Style,
+
+    /**
+     * @type {module:zrender/graphic/Displayable}
+     */
+    host: null,
+
+    /**
+     * @type {string}
+     */
+    fill: '#000',
+
+    /**
+     * @type {string}
+     */
+    stroke: null,
+
+    /**
+     * @type {number}
+     */
+    opacity: 1,
+
+    /**
+     * @type {Array.<number>}
+     */
+    lineDash: null,
+
+    /**
+     * @type {number}
+     */
+    lineDashOffset: 0,
+
+    /**
+     * @type {number}
+     */
+    shadowBlur: 0,
+
+    /**
+     * @type {number}
+     */
+    shadowOffsetX: 0,
+
+    /**
+     * @type {number}
+     */
+    shadowOffsetY: 0,
+
+    /**
+     * @type {number}
+     */
+    lineWidth: 1,
+
+    /**
+     * If stroke ignore scale
+     * @type {Boolean}
+     */
+    strokeNoScale: false,
+
+    // Bounding rect text configuration
+    // Not affected by element transform
+    /**
+     * @type {string}
+     */
+    text: null,
+
+    /**
+     * If `fontSize` or `fontFamily` exists, `font` will be reset by
+     * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.
+     * So do not visit it directly in upper application (like echarts),
+     * but use `contain/text#makeFont` instead.
+     * @type {string}
+     */
+    font: null,
+
+    /**
+     * The same as font. Use font please.
+     * @deprecated
+     * @type {string}
+     */
+    textFont: null,
+
+    /**
+     * It helps merging respectively, rather than parsing an entire font string.
+     * @type {string}
+     */
+    fontStyle: null,
+
+    /**
+     * It helps merging respectively, rather than parsing an entire font string.
+     * @type {string}
+     */
+    fontWeight: null,
+
+    /**
+     * It helps merging respectively, rather than parsing an entire font string.
+     * Should be 12 but not '12px'.
+     * @type {number}
+     */
+    fontSize: null,
+
+    /**
+     * It helps merging respectively, rather than parsing an entire font string.
+     * @type {string}
+     */
+    fontFamily: null,
+
+    /**
+     * Reserved for special functinality, like 'hr'.
+     * @type {string}
+     */
+    textTag: null,
+
+    /**
+     * @type {string}
+     */
+    textFill: '#000',
+
+    /**
+     * @type {string}
+     */
+    textStroke: null,
+
+    /**
+     * @type {number}
+     */
+    textWidth: null,
+
+    /**
+     * Only for textBackground.
+     * @type {number}
+     */
+    textHeight: null,
+
+    /**
+     * textStroke may be set as some color as a default
+     * value in upper applicaion, where the default value
+     * of textStrokeWidth should be 0 to make sure that
+     * user can choose to do not use text stroke.
+     * @type {number}
+     */
+    textStrokeWidth: 0,
+
+    /**
+     * @type {number}
+     */
+    textLineHeight: null,
+
+    /**
+     * 'inside', 'left', 'right', 'top', 'bottom'
+     * [x, y]
+     * Based on x, y of rect.
+     * @type {string|Array.<number>}
+     * @default 'inside'
+     */
+    textPosition: 'inside',
+
+    /**
+     * If not specified, use the boundingRect of a `displayable`.
+     * @type {Object}
+     */
+    textRect: null,
+
+    /**
+     * [x, y]
+     * @type {Array.<number>}
+     */
+    textOffset: null,
+
+    /**
+     * @type {string}
+     */
+    textAlign: null,
+
+    /**
+     * @type {string}
+     */
+    textVerticalAlign: null,
+
+    /**
+     * @type {number}
+     */
+    textDistance: 5,
+
+    /**
+     * @type {string}
+     */
+    textShadowColor: 'transparent',
+
+    /**
+     * @type {number}
+     */
+    textShadowBlur: 0,
+
+    /**
+     * @type {number}
+     */
+    textShadowOffsetX: 0,
+
+    /**
+     * @type {number}
+     */
+    textShadowOffsetY: 0,
+
+    /**
+     * @type {string}
+     */
+    textBoxShadowColor: 'transparent',
+
+    /**
+     * @type {number}
+     */
+    textBoxShadowBlur: 0,
+
+    /**
+     * @type {number}
+     */
+    textBoxShadowOffsetX: 0,
+
+    /**
+     * @type {number}
+     */
+    textBoxShadowOffsetY: 0,
+
+    /**
+     * Whether transform text.
+     * Only useful in Path and Image element
+     * @type {boolean}
+     */
+    transformText: false,
+
+    /**
+     * Text rotate around position of Path or Image
+     * Only useful in Path and Image element and transformText is false.
+     */
+    textRotation: 0,
+
+    /**
+     * Text origin of text rotation, like [10, 40].
+     * Based on x, y of rect.
+     * Useful in label rotation of circular symbol.
+     * By default, this origin is textPosition.
+     * Can be 'center'.
+     * @type {string|Array.<number>}
+     */
+    textOrigin: null,
+
+    /**
+     * @type {string}
+     */
+    textBackgroundColor: null,
+
+    /**
+     * @type {string}
+     */
+    textBorderColor: null,
+
+    /**
+     * @type {number}
+     */
+    textBorderWidth: 0,
+
+    /**
+     * @type {number}
+     */
+    textBorderRadius: 0,
+
+    /**
+     * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`
+     * @type {number|Array.<number>}
+     */
+    textPadding: null,
+
+    /**
+     * Text styles for rich text.
+     * @type {Object}
+     */
+    rich: null,
+
+    /**
+     * {outerWidth, outerHeight, ellipsis, placeholder}
+     * @type {Object}
+     */
+    truncate: null,
+
+    /**
+     * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
+     * @type {string}
+     */
+    blend: null,
+
+    /**
+     * @param {CanvasRenderingContext2D} ctx
+     */
+    bind: function (ctx, el, prevEl) {
+        var style = this;
+        var prevStyle = prevEl && prevEl.style;
+        var firstDraw = !prevStyle;
+
+        for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {
+            var prop = STYLE_COMMON_PROPS[i];
+            var styleName = prop[0];
+
+            if (firstDraw || style[styleName] !== prevStyle[styleName]) {
+                // FIXME Invalid property value will cause style leak from previous element.
+                ctx[styleName] =
+                    fixShadow(ctx, styleName, style[styleName] || prop[1]);
+            }
+        }
+
+        if ((firstDraw || style.fill !== prevStyle.fill)) {
+            ctx.fillStyle = style.fill;
+        }
+        if ((firstDraw || style.stroke !== prevStyle.stroke)) {
+            ctx.strokeStyle = style.stroke;
+        }
+        if ((firstDraw || style.opacity !== prevStyle.opacity)) {
+            ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;
+        }
+
+        if ((firstDraw || style.blend !== prevStyle.blend)) {
+            ctx.globalCompositeOperation = style.blend || 'source-over';
+        }
+        if (this.hasStroke()) {
+            var lineWidth = style.lineWidth;
+            ctx.lineWidth = lineWidth / (
+                (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1
+            );
+        }
+    },
+
+    hasFill: function () {
+        var fill = this.fill;
+        return fill != null && fill !== 'none';
+    },
+
+    hasStroke: function () {
+        var stroke = this.stroke;
+        return stroke != null && stroke !== 'none' && this.lineWidth > 0;
+    },
+
+    /**
+     * Extend from other style
+     * @param {zrender/graphic/Style} otherStyle
+     * @param {boolean} overwrite true: overwrirte any way.
+     *                            false: overwrite only when !target.hasOwnProperty
+     *                            others: overwrite when property is not null/undefined.
+     */
+    extendFrom: function (otherStyle, overwrite) {
+        if (otherStyle) {
+            for (var name in otherStyle) {
+                if (otherStyle.hasOwnProperty(name)
+                    && (overwrite === true
+                        || (
+                            overwrite === false
+                                ? !this.hasOwnProperty(name)
+                                : otherStyle[name] != null
+                        )
+                    )
+                ) {
+                    this[name] = otherStyle[name];
+                }
+            }
+        }
+    },
+
+    /**
+     * Batch setting style with a given object
+     * @param {Object|string} obj
+     * @param {*} [obj]
+     */
+    set: function (obj, value) {
+        if (typeof obj === 'string') {
+            this[obj] = value;
+        }
+        else {
+            this.extendFrom(obj, true);
+        }
+    },
+
+    /**
+     * Clone
+     * @return {zrender/graphic/Style} [description]
+     */
+    clone: function () {
+        var newStyle = new this.constructor();
+        newStyle.extendFrom(this, true);
+        return newStyle;
+    },
+
+    getGradient: function (ctx, obj, rect) {
+        var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient;
+        var canvasGradient = method(ctx, obj, rect);
+        var colorStops = obj.colorStops;
+        for (var i = 0; i < colorStops.length; i++) {
+            canvasGradient.addColorStop(
+                colorStops[i].offset, colorStops[i].color
+            );
+        }
+        return canvasGradient;
+    }
+
+};
+
+var styleProto = Style.prototype;
+for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {
+    var prop = STYLE_COMMON_PROPS[i];
+    if (!(prop[0] in styleProto)) {
+        styleProto[prop[0]] = prop[1];
+    }
+}
+
+// Provide for others
+Style.getGradient = styleProto.getGradient;
+
+var Pattern = function (image, repeat) {
+    // Should do nothing more in this constructor. Because gradient can be
+    // declard by `color: {image: ...}`, where this constructor will not be called.
+
+    this.image = image;
+    this.repeat = repeat;
+
+    // Can be cloned
+    this.type = 'pattern';
+};
+
+Pattern.prototype.getCanvasPattern = function (ctx) {
+    return ctx.createPattern(this.image, this.repeat || 'repeat');
+};
+
+/**
+ * @module zrender/Layer
+ * @author pissang(https://www.github.com/pissang)
+ */
+
+function returnFalse() {
+    return false;
+}
+
+/**
+ * 创建dom
+ *
+ * @inner
+ * @param {string} id dom id 待用
+ * @param {Painter} painter painter instance
+ * @param {number} number
+ */
+function createDom(id, painter, dpr) {
+    var newDom = createCanvas();
+    var width = painter.getWidth();
+    var height = painter.getHeight();
+
+    var newDomStyle = newDom.style;
+    if (newDomStyle) {  // In node or some other non-browser environment
+        newDomStyle.position = 'absolute';
+        newDomStyle.left = 0;
+        newDomStyle.top = 0;
+        newDomStyle.width = width + 'px';
+        newDomStyle.height = height + 'px';
+
+        newDom.setAttribute('data-zr-dom-id', id);
+    }
+
+    newDom.width = width * dpr;
+    newDom.height = height * dpr;
+
+    return newDom;
+}
+
+/**
+ * @alias module:zrender/Layer
+ * @constructor
+ * @extends module:zrender/mixin/Transformable
+ * @param {string} id
+ * @param {module:zrender/Painter} painter
+ * @param {number} [dpr]
+ */
+var Layer = function(id, painter, dpr) {
+    var dom;
+    dpr = dpr || devicePixelRatio;
+    if (typeof id === 'string') {
+        dom = createDom(id, painter, dpr);
+    }
+    // Not using isDom because in node it will return false
+    else if (isObject$1(id)) {
+        dom = id;
+        id = dom.id;
+    }
+    this.id = id;
+    this.dom = dom;
+
+    var domStyle = dom.style;
+    if (domStyle) { // Not in node
+        dom.onselectstart = returnFalse; // 避免页面选中的尴尬
+        domStyle['-webkit-user-select'] = 'none';
+        domStyle['user-select'] = 'none';
+        domStyle['-webkit-touch-callout'] = 'none';
+        domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';
+        domStyle['padding'] = 0;
+        domStyle['margin'] = 0;
+        domStyle['border-width'] = 0;
+    }
+
+    this.domBack = null;
+    this.ctxBack = null;
+
+    this.painter = painter;
+
+    this.config = null;
+
+    // Configs
+    /**
+     * 每次清空画布的颜色
+     * @type {string}
+     * @default 0
+     */
+    this.clearColor = 0;
+    /**
+     * 是否开启动态模糊
+     * @type {boolean}
+     * @default false
+     */
+    this.motionBlur = false;
+    /**
+     * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显
+     * @type {number}
+     * @default 0.7
+     */
+    this.lastFrameAlpha = 0.7;
+
+    /**
+     * Layer dpr
+     * @type {number}
+     */
+    this.dpr = dpr;
+};
+
+Layer.prototype = {
+
+    constructor: Layer,
+
+    __dirty: true,
+
+    __used: false,
+
+    __drawIndex: 0,
+    __startIndex: 0,
+    __endIndex: 0,
+
+    incremental: false,
+
+    getElementCount: function () {
+        return this.__endIndex - this.__startIndex;
+    },
+
+    initContext: function () {
+        this.ctx = this.dom.getContext('2d');
+        this.ctx.dpr = this.dpr;
+    },
+
+    createBackBuffer: function () {
+        var dpr = this.dpr;
+
+        this.domBack = createDom('back-' + this.id, this.painter, dpr);
+        this.ctxBack = this.domBack.getContext('2d');
+
+        if (dpr != 1) {
+            this.ctxBack.scale(dpr, dpr);
+        }
+    },
+
+    /**
+     * @param  {number} width
+     * @param  {number} height
+     */
+    resize: function (width, height) {
+        var dpr = this.dpr;
+
+        var dom = this.dom;
+        var domStyle = dom.style;
+        var domBack = this.domBack;
+
+        if (domStyle) {
+            domStyle.width = width + 'px';
+            domStyle.height = height + 'px';
+        }
+
+        dom.width = width * dpr;
+        dom.height = height * dpr;
+
+        if (domBack) {
+            domBack.width = width * dpr;
+            domBack.height = height * dpr;
+
+            if (dpr != 1) {
+                this.ctxBack.scale(dpr, dpr);
+            }
+        }
+    },
+
+    /**
+     * 清空该层画布
+     * @param {boolean} [clearAll]=false Clear all with out motion blur
+     * @param {Color} [clearColor]
+     */
+    clear: function (clearAll, clearColor) {
+        var dom = this.dom;
+        var ctx = this.ctx;
+        var width = dom.width;
+        var height = dom.height;
+
+        var clearColor = clearColor || this.clearColor;
+        var haveMotionBLur = this.motionBlur && !clearAll;
+        var lastFrameAlpha = this.lastFrameAlpha;
+
+        var dpr = this.dpr;
+
+        if (haveMotionBLur) {
+            if (!this.domBack) {
+                this.createBackBuffer();
+            }
+
+            this.ctxBack.globalCompositeOperation = 'copy';
+            this.ctxBack.drawImage(
+                dom, 0, 0,
+                width / dpr,
+                height / dpr
+            );
+        }
+
+        ctx.clearRect(0, 0, width, height);
+        if (clearColor && clearColor !== 'transparent') {
+            var clearColorGradientOrPattern;
+            // Gradient
+            if (clearColor.colorStops) {
+                // Cache canvas gradient
+                clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {
+                    x: 0,
+                    y: 0,
+                    width: width,
+                    height: height
+                });
+
+                clearColor.__canvasGradient = clearColorGradientOrPattern;
+            }
+            // Pattern
+            else if (clearColor.image) {
+                clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);
+            }
+            ctx.save();
+            ctx.fillStyle = clearColorGradientOrPattern || clearColor;
+            ctx.fillRect(0, 0, width, height);
+            ctx.restore();
+        }
+
+        if (haveMotionBLur) {
+            var domBack = this.domBack;
+            ctx.save();
+            ctx.globalAlpha = lastFrameAlpha;
+            ctx.drawImage(domBack, 0, 0, width, height);
+            ctx.restore();
+        }
+    }
+};
+
+var requestAnimationFrame = (
+    typeof window !== 'undefined'
+    && (
+        (window.requestAnimationFrame && window.requestAnimationFrame.bind(window))
+        // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809
+        || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))
+        || window.mozRequestAnimationFrame
+        || window.webkitRequestAnimationFrame
+    )
+) || function (func) {
+    setTimeout(func, 16);
+};
+
+var globalImageCache = new LRU(50);
+
+/**
+ * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc
+ * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image
+ */
+function findExistImage(newImageOrSrc) {
+    if (typeof newImageOrSrc === 'string') {
+        var cachedImgObj = globalImageCache.get(newImageOrSrc);
+        return cachedImgObj && cachedImgObj.image;
+    }
+    else {
+        return newImageOrSrc;
+    }
+}
+
+/**
+ * Caution: User should cache loaded images, but not just count on LRU.
+ * Consider if required images more than LRU size, will dead loop occur?
+ *
+ * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc
+ * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.
+ * @param {module:zrender/Element} [hostEl] For calling `dirty`.
+ * @param {Function} [cb] params: (image, cbPayload)
+ * @param {Object} [cbPayload] Payload on cb calling.
+ * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image
+ */
+function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {
+    if (!newImageOrSrc) {
+        return image;
+    }
+    else if (typeof newImageOrSrc === 'string') {
+
+        // Image should not be loaded repeatly.
+        if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) {
+            return image;
+        }
+
+        // Only when there is no existent image or existent image src
+        // is different, this method is responsible for load.
+        var cachedImgObj = globalImageCache.get(newImageOrSrc);
+
+        var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload};
+
+        if (cachedImgObj) {
+            image = cachedImgObj.image;
+            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);
+        }
+        else {
+            !image && (image = new Image());
+            image.onload = imageOnLoad;
+
+            globalImageCache.put(
+                newImageOrSrc,
+                image.__cachedImgObj = {
+                    image: image,
+                    pending: [pendingWrap]
+                }
+            );
+
+            image.src = image.__zrImageSrc = newImageOrSrc;
+        }
+
+        return image;
+    }
+    // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas
+    else {
+        return newImageOrSrc;
+    }
+}
+
+function imageOnLoad() {
+    var cachedImgObj = this.__cachedImgObj;
+    this.onload = this.__cachedImgObj = null;
+
+    for (var i = 0; i < cachedImgObj.pending.length; i++) {
+        var pendingWrap = cachedImgObj.pending[i];
+        var cb = pendingWrap.cb;
+        cb && cb(this, pendingWrap.cbPayload);
+        pendingWrap.hostEl.dirty();
+    }
+    cachedImgObj.pending.length = 0;
+}
+
+function isImageReady(image) {
+    return image && image.width && image.height;
+}
+
+var textWidthCache = {};
+var textWidthCacheCounter = 0;
+
+var TEXT_CACHE_MAX = 5000;
+var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g;
+
+var DEFAULT_FONT = '12px sans-serif';
+
+// Avoid assign to an exported variable, for transforming to cjs.
+var methods$1 = {};
+
+function $override$1(name, fn) {
+    methods$1[name] = fn;
+}
+
+/**
+ * @public
+ * @param {string} text
+ * @param {string} font
+ * @return {number} width
+ */
+function getWidth(text, font) {
+    font = font || DEFAULT_FONT;
+    var key = text + ':' + font;
+    if (textWidthCache[key]) {
+        return textWidthCache[key];
+    }
+
+    var textLines = (text + '').split('\n');
+    var width = 0;
+
+    for (var i = 0, l = textLines.length; i < l; i++) {
+        // textContain.measureText may be overrided in SVG or VML
+        width = Math.max(measureText(textLines[i], font).width, width);
+    }
+
+    if (textWidthCacheCounter > TEXT_CACHE_MAX) {
+        textWidthCacheCounter = 0;
+        textWidthCache = {};
+    }
+    textWidthCacheCounter++;
+    textWidthCache[key] = width;
+
+    return width;
+}
+
+/**
+ * @public
+ * @param {string} text
+ * @param {string} font
+ * @param {string} [textAlign='left']
+ * @param {string} [textVerticalAlign='top']
+ * @param {Array.<number>} [textPadding]
+ * @param {Object} [rich]
+ * @param {Object} [truncate]
+ * @return {Object} {x, y, width, height, lineHeight}
+ */
+function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {
+    return rich
+        ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate)
+        : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate);
+}
+
+function getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate) {
+    var contentBlock = parsePlainText(text, font, textPadding, truncate);
+    var outerWidth = getWidth(text, font);
+    if (textPadding) {
+        outerWidth += textPadding[1] + textPadding[3];
+    }
+    var outerHeight = contentBlock.outerHeight;
+
+    var x = adjustTextX(0, outerWidth, textAlign);
+    var y = adjustTextY(0, outerHeight, textVerticalAlign);
+
+    var rect = new BoundingRect(x, y, outerWidth, outerHeight);
+    rect.lineHeight = contentBlock.lineHeight;
+
+    return rect;
+}
+
+function getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {
+    var contentBlock = parseRichText(text, {
+        rich: rich,
+        truncate: truncate,
+        font: font,
+        textAlign: textAlign,
+        textPadding: textPadding
+    });
+    var outerWidth = contentBlock.outerWidth;
+    var outerHeight = contentBlock.outerHeight;
+
+    var x = adjustTextX(0, outerWidth, textAlign);
+    var y = adjustTextY(0, outerHeight, textVerticalAlign);
+
+    return new BoundingRect(x, y, outerWidth, outerHeight);
+}
+
+/**
+ * @public
+ * @param {number} x
+ * @param {number} width
+ * @param {string} [textAlign='left']
+ * @return {number} Adjusted x.
+ */
+function adjustTextX(x, width, textAlign) {
+    // FIXME Right to left language
+    if (textAlign === 'right') {
+        x -= width;
+    }
+    else if (textAlign === 'center') {
+        x -= width / 2;
+    }
+    return x;
+}
+
+/**
+ * @public
+ * @param {number} y
+ * @param {number} height
+ * @param {string} [textVerticalAlign='top']
+ * @return {number} Adjusted y.
+ */
+function adjustTextY(y, height, textVerticalAlign) {
+    if (textVerticalAlign === 'middle') {
+        y -= height / 2;
+    }
+    else if (textVerticalAlign === 'bottom') {
+        y -= height;
+    }
+    return y;
+}
+
+/**
+ * @public
+ * @param {stirng} textPosition
+ * @param {Object} rect {x, y, width, height}
+ * @param {number} distance
+ * @return {Object} {x, y, textAlign, textVerticalAlign}
+ */
+function adjustTextPositionOnRect(textPosition, rect, distance) {
+
+    var x = rect.x;
+    var y = rect.y;
+
+    var height = rect.height;
+    var width = rect.width;
+    var halfHeight = height / 2;
+
+    var textAlign = 'left';
+    var textVerticalAlign = 'top';
+
+    switch (textPosition) {
+        case 'left':
+            x -= distance;
+            y += halfHeight;
+            textAlign = 'right';
+            textVerticalAlign = 'middle';
+            break;
+        case 'right':
+            x += distance + width;
+            y += halfHeight;
+            textVerticalAlign = 'middle';
+            break;
+        case 'top':
+            x += width / 2;
+            y -= distance;
+            textAlign = 'center';
+            textVerticalAlign = 'bottom';
+            break;
+        case 'bottom':
+            x += width / 2;
+            y += height + distance;
+            textAlign = 'center';
+            break;
+        case 'inside':
+            x += width / 2;
+            y += halfHeight;
+            textAlign = 'center';
+            textVerticalAlign = 'middle';
+            break;
+        case 'insideLeft':
+            x += distance;
+            y += halfHeight;
+            textVerticalAlign = 'middle';
+            break;
+        case 'insideRight':
+            x += width - distance;
+            y += halfHeight;
+            textAlign = 'right';
+            textVerticalAlign = 'middle';
+            break;
+        case 'insideTop':
+            x += width / 2;
+            y += distance;
+            textAlign = 'center';
+            break;
+        case 'insideBottom':
+            x += width / 2;
+            y += height - distance;
+            textAlign = 'center';
+            textVerticalAlign = 'bottom';
+            break;
+        case 'insideTopLeft':
+            x += distance;
+            y += distance;
+            break;
+        case 'insideTopRight':
+            x += width - distance;
+            y += distance;
+            textAlign = 'right';
+            break;
+        case 'insideBottomLeft':
+            x += distance;
+            y += height - distance;
+            textVerticalAlign = 'bottom';
+            break;
+        case 'insideBottomRight':
+            x += width - distance;
+            y += height - distance;
+            textAlign = 'right';
+            textVerticalAlign = 'bottom';
+            break;
+    }
+
+    return {
+        x: x,
+        y: y,
+        textAlign: textAlign,
+        textVerticalAlign: textVerticalAlign
+    };
+}
+
+/**
+ * Show ellipsis if overflow.
+ *
+ * @public
+ * @param  {string} text
+ * @param  {string} containerWidth
+ * @param  {string} font
+ * @param  {number} [ellipsis='...']
+ * @param  {Object} [options]
+ * @param  {number} [options.maxIterations=3]
+ * @param  {number} [options.minChar=0] If truncate result are less
+ *                  then minChar, ellipsis will not show, which is
+ *                  better for user hint in some cases.
+ * @param  {number} [options.placeholder=''] When all truncated, use the placeholder.
+ * @return {string}
+ */
+function truncateText(text, containerWidth, font, ellipsis, options) {
+    if (!containerWidth) {
+        return '';
+    }
+
+    var textLines = (text + '').split('\n');
+    options = prepareTruncateOptions(containerWidth, font, ellipsis, options);
+
+    // FIXME
+    // It is not appropriate that every line has '...' when truncate multiple lines.
+    for (var i = 0, len = textLines.length; i < len; i++) {
+        textLines[i] = truncateSingleLine(textLines[i], options);
+    }
+
+    return textLines.join('\n');
+}
+
+function prepareTruncateOptions(containerWidth, font, ellipsis, options) {
+    options = extend({}, options);
+
+    options.font = font;
+    var ellipsis = retrieve2(ellipsis, '...');
+    options.maxIterations = retrieve2(options.maxIterations, 2);
+    var minChar = options.minChar = retrieve2(options.minChar, 0);
+    // FIXME
+    // Other languages?
+    options.cnCharWidth = getWidth('国', font);
+    // FIXME
+    // Consider proportional font?
+    var ascCharWidth = options.ascCharWidth = getWidth('a', font);
+    options.placeholder = retrieve2(options.placeholder, '');
+
+    // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.
+    // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.
+    var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.
+    for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {
+        contentWidth -= ascCharWidth;
+    }
+
+    var ellipsisWidth = getWidth(ellipsis);
+    if (ellipsisWidth > contentWidth) {
+        ellipsis = '';
+        ellipsisWidth = 0;
+    }
+
+    contentWidth = containerWidth - ellipsisWidth;
+
+    options.ellipsis = ellipsis;
+    options.ellipsisWidth = ellipsisWidth;
+    options.contentWidth = contentWidth;
+    options.containerWidth = containerWidth;
+
+    return options;
+}
+
+function truncateSingleLine(textLine, options) {
+    var containerWidth = options.containerWidth;
+    var font = options.font;
+    var contentWidth = options.contentWidth;
+
+    if (!containerWidth) {
+        return '';
+    }
+
+    var lineWidth = getWidth(textLine, font);
+
+    if (lineWidth <= containerWidth) {
+        return textLine;
+    }
+
+    for (var j = 0;; j++) {
+        if (lineWidth <= contentWidth || j >= options.maxIterations) {
+            textLine += options.ellipsis;
+            break;
+        }
+
+        var subLength = j === 0
+            ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)
+            : lineWidth > 0
+            ? Math.floor(textLine.length * contentWidth / lineWidth)
+            : 0;
+
+        textLine = textLine.substr(0, subLength);
+        lineWidth = getWidth(textLine, font);
+    }
+
+    if (textLine === '') {
+        textLine = options.placeholder;
+    }
+
+    return textLine;
+}
+
+function estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {
+    var width = 0;
+    var i = 0;
+    for (var len = text.length; i < len && width < contentWidth; i++) {
+        var charCode = text.charCodeAt(i);
+        width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;
+    }
+    return i;
+}
+
+/**
+ * @public
+ * @param {string} font
+ * @return {number} line height
+ */
+function getLineHeight(font) {
+    // FIXME A rough approach.
+    return getWidth('国', font);
+}
+
+/**
+ * @public
+ * @param {string} text
+ * @param {string} font
+ * @return {Object} width
+ */
+function measureText(text, font) {
+    return methods$1.measureText(text, font);
+}
+
+// Avoid assign to an exported variable, for transforming to cjs.
+methods$1.measureText = function (text, font) {
+    var ctx = getContext();
+    ctx.font = font || DEFAULT_FONT;
+    return ctx.measureText(text);
+};
+
+/**
+ * @public
+ * @param {string} text
+ * @param {string} font
+ * @param {Object} [truncate]
+ * @return {Object} block: {lineHeight, lines, height, outerHeight}
+ *  Notice: for performance, do not calculate outerWidth util needed.
+ */
+function parsePlainText(text, font, padding, truncate) {
+    text != null && (text += '');
+
+    var lineHeight = getLineHeight(font);
+    var lines = text ? text.split('\n') : [];
+    var height = lines.length * lineHeight;
+    var outerHeight = height;
+
+    if (padding) {
+        outerHeight += padding[0] + padding[2];
+    }
+
+    if (text && truncate) {
+        var truncOuterHeight = truncate.outerHeight;
+        var truncOuterWidth = truncate.outerWidth;
+        if (truncOuterHeight != null && outerHeight > truncOuterHeight) {
+            text = '';
+            lines = [];
+        }
+        else if (truncOuterWidth != null) {
+            var options = prepareTruncateOptions(
+                truncOuterWidth - (padding ? padding[1] + padding[3] : 0),
+                font,
+                truncate.ellipsis,
+                {minChar: truncate.minChar, placeholder: truncate.placeholder}
+            );
+
+            // FIXME
+            // It is not appropriate that every line has '...' when truncate multiple lines.
+            for (var i = 0, len = lines.length; i < len; i++) {
+                lines[i] = truncateSingleLine(lines[i], options);
+            }
+        }
+    }
+
+    return {
+        lines: lines,
+        height: height,
+        outerHeight: outerHeight,
+        lineHeight: lineHeight
+    };
+}
+
+/**
+ * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'
+ * Also consider 'bbbb{a|xxx\nzzz}xxxx\naaaa'.
+ *
+ * @public
+ * @param {string} text
+ * @param {Object} style
+ * @return {Object} block
+ * {
+ *      width,
+ *      height,
+ *      lines: [{
+ *          lineHeight,
+ *          width,
+ *          tokens: [[{
+ *              styleName,
+ *              text,
+ *              width,      // include textPadding
+ *              height,     // include textPadding
+ *              textWidth, // pure text width
+ *              textHeight, // pure text height
+ *              lineHeihgt,
+ *              font,
+ *              textAlign,
+ *              textVerticalAlign
+ *          }], [...], ...]
+ *      }, ...]
+ * }
+ * If styleName is undefined, it is plain text.
+ */
+function parseRichText(text, style) {
+    var contentBlock = {lines: [], width: 0, height: 0};
+
+    text != null && (text += '');
+    if (!text) {
+        return contentBlock;
+    }
+
+    var lastIndex = STYLE_REG.lastIndex = 0;
+    var result;
+    while ((result = STYLE_REG.exec(text)) != null) {
+        var matchedIndex = result.index;
+        if (matchedIndex > lastIndex) {
+            pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));
+        }
+        pushTokens(contentBlock, result[2], result[1]);
+        lastIndex = STYLE_REG.lastIndex;
+    }
+
+    if (lastIndex < text.length) {
+        pushTokens(contentBlock, text.substring(lastIndex, text.length));
+    }
+
+    var lines = contentBlock.lines;
+    var contentHeight = 0;
+    var contentWidth = 0;
+    // For `textWidth: 100%`
+    var pendingList = [];
+
+    var stlPadding = style.textPadding;
+
+    var truncate = style.truncate;
+    var truncateWidth = truncate && truncate.outerWidth;
+    var truncateHeight = truncate && truncate.outerHeight;
+    if (stlPadding) {
+        truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);
+        truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);
+    }
+
+    // Calculate layout info of tokens.
+    for (var i = 0; i < lines.length; i++) {
+        var line = lines[i];
+        var lineHeight = 0;
+        var lineWidth = 0;
+
+        for (var j = 0; j < line.tokens.length; j++) {
+            var token = line.tokens[j];
+            var tokenStyle = token.styleName && style.rich[token.styleName] || {};
+            // textPadding should not inherit from style.
+            var textPadding = token.textPadding = tokenStyle.textPadding;
+
+            // textFont has been asigned to font by `normalizeStyle`.
+            var font = token.font = tokenStyle.font || style.font;
+
+            // textHeight can be used when textVerticalAlign is specified in token.
+            var tokenHeight = token.textHeight = retrieve2(
+                // textHeight should not be inherited, consider it can be specified
+                // as box height of the block.
+                tokenStyle.textHeight, getLineHeight(font)
+            );
+            textPadding && (tokenHeight += textPadding[0] + textPadding[2]);
+            token.height = tokenHeight;
+            token.lineHeight = retrieve3(
+                tokenStyle.textLineHeight, style.textLineHeight, tokenHeight
+            );
+
+            token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;
+            token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';
+
+            if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {
+                return {lines: [], width: 0, height: 0};
+            }
+
+            token.textWidth = getWidth(token.text, font);
+            var tokenWidth = tokenStyle.textWidth;
+            var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto';
+
+            // Percent width, can be `100%`, can be used in drawing separate
+            // line when box width is needed to be auto.
+            if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {
+                token.percentWidth = tokenWidth;
+                pendingList.push(token);
+                tokenWidth = 0;
+                // Do not truncate in this case, because there is no user case
+                // and it is too complicated.
+            }
+            else {
+                if (tokenWidthNotSpecified) {
+                    tokenWidth = token.textWidth;
+
+                    // FIXME: If image is not loaded and textWidth is not specified, calling
+                    // `getBoundingRect()` will not get correct result.
+                    var textBackgroundColor = tokenStyle.textBackgroundColor;
+                    var bgImg = textBackgroundColor && textBackgroundColor.image;
+
+                    // Use cases:
+                    // (1) If image is not loaded, it will be loaded at render phase and call
+                    // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded
+                    // image, and then the right size will be calculated here at the next tick.
+                    // See `graphic/helper/text.js`.
+                    // (2) If image loaded, and `textBackgroundColor.image` is image src string,
+                    // use `imageHelper.findExistImage` to find cached image.
+                    // `imageHelper.findExistImage` will always be called here before
+                    // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`
+                    // which ensures that image will not be rendered before correct size calcualted.
+                    if (bgImg) {
+                        bgImg = findExistImage(bgImg);
+                        if (isImageReady(bgImg)) {
+                            tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);
+                        }
+                    }
+                }
+
+                var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;
+                tokenWidth += paddingW;
+
+                var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;
+
+                if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {
+                    if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {
+                        token.text = '';
+                        token.textWidth = tokenWidth = 0;
+                    }
+                    else {
+                        token.text = truncateText(
+                            token.text, remianTruncWidth - paddingW, font, truncate.ellipsis,
+                            {minChar: truncate.minChar}
+                        );
+                        token.textWidth = getWidth(token.text, font);
+                        tokenWidth = token.textWidth + paddingW;
+                    }
+                }
+            }
+
+            lineWidth += (token.width = tokenWidth);
+            tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));
+        }
+
+        line.width = lineWidth;
+        line.lineHeight = lineHeight;
+        contentHeight += lineHeight;
+        contentWidth = Math.max(contentWidth, lineWidth);
+    }
+
+    contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);
+    contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);
+
+    if (stlPadding) {
+        contentBlock.outerWidth += stlPadding[1] + stlPadding[3];
+        contentBlock.outerHeight += stlPadding[0] + stlPadding[2];
+    }
+
+    for (var i = 0; i < pendingList.length; i++) {
+        var token = pendingList[i];
+        var percentWidth = token.percentWidth;
+        // Should not base on outerWidth, because token can not be placed out of padding.
+        token.width = parseInt(percentWidth, 10) / 100 * contentWidth;
+    }
+
+    return contentBlock;
+}
+
+function pushTokens(block, str, styleName) {
+    var isEmptyStr = str === '';
+    var strs = str.split('\n');
+    var lines = block.lines;
+
+    for (var i = 0; i < strs.length; i++) {
+        var text = strs[i];
+        var token = {
+            styleName: styleName,
+            text: text,
+            isLineHolder: !text && !isEmptyStr
+        };
+
+        // The first token should be appended to the last line.
+        if (!i) {
+            var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens;
+
+            // Consider cases:
+            // (1) ''.split('\n') => ['', '\n', ''], the '' at the first item
+            // (which is a placeholder) should be replaced by new token.
+            // (2) A image backage, where token likes {a|}.
+            // (3) A redundant '' will affect textAlign in line.
+            // (4) tokens with the same tplName should not be merged, because
+            // they should be displayed in different box (with border and padding).
+            var tokensLen = tokens.length;
+            (tokensLen === 1 && tokens[0].isLineHolder)
+                ? (tokens[0] = token)
+                // Consider text is '', only insert when it is the "lineHolder" or
+                // "emptyStr". Otherwise a redundant '' will affect textAlign in line.
+                : ((text || !tokensLen || isEmptyStr) && tokens.push(token));
+        }
+        // Other tokens always start a new line.
+        else {
+            // If there is '', insert it as a placeholder.
+            lines.push({tokens: [token]});
+        }
+    }
+}
+
+function makeFont(style) {
+    // FIXME in node-canvas fontWeight is before fontStyle
+    // Use `fontSize` `fontFamily` to check whether font properties are defined.
+    var font = (style.fontSize || style.fontFamily) && [
+        style.fontStyle,
+        style.fontWeight,
+        (style.fontSize || 12) + 'px',
+        // If font properties are defined, `fontFamily` should not be ignored.
+        style.fontFamily || 'sans-serif'
+    ].join(' ');
+    return font && trim(font) || style.textFont || style.font;
+}
+
+function buildPath(ctx, shape) {
+    var x = shape.x;
+    var y = shape.y;
+    var width = shape.width;
+    var height = shape.height;
+    var r = shape.r;
+    var r1;
+    var r2;
+    var r3;
+    var r4;
+
+    // Convert width and height to positive for better borderRadius
+    if (width < 0) {
+        x = x + width;
+        width = -width;
+    }
+    if (height < 0) {
+        y = y + height;
+        height = -height;
+    }
+
+    if (typeof r === 'number') {
+        r1 = r2 = r3 = r4 = r;
+    }
+    else if (r instanceof Array) {
+        if (r.length === 1) {
+            r1 = r2 = r3 = r4 = r[0];
+        }
+        else if (r.length === 2) {
+            r1 = r3 = r[0];
+            r2 = r4 = r[1];
+        }
+        else if (r.length === 3) {
+            r1 = r[0];
+            r2 = r4 = r[1];
+            r3 = r[2];
+        }
+        else {
+            r1 = r[0];
+            r2 = r[1];
+            r3 = r[2];
+            r4 = r[3];
+        }
+    }
+    else {
+        r1 = r2 = r3 = r4 = 0;
+    }
+
+    var total;
+    if (r1 + r2 > width) {
+        total = r1 + r2;
+        r1 *= width / total;
+        r2 *= width / total;
+    }
+    if (r3 + r4 > width) {
+        total = r3 + r4;
+        r3 *= width / total;
+        r4 *= width / total;
+    }
+    if (r2 + r3 > height) {
+        total = r2 + r3;
+        r2 *= height / total;
+        r3 *= height / total;
+    }
+    if (r1 + r4 > height) {
+        total = r1 + r4;
+        r1 *= height / total;
+        r4 *= height / total;
+    }
+    ctx.moveTo(x + r1, y);
+    ctx.lineTo(x + width - r2, y);
+    r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);
+    ctx.lineTo(x + width, y + height - r3);
+    r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);
+    ctx.lineTo(x + r4, y + height);
+    r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);
+    ctx.lineTo(x, y + r1);
+    r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);
+}
+
+// TODO: Have not support 'start', 'end' yet.
+var VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1};
+var VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};
+
+/**
+ * @param {module:zrender/graphic/Style} style
+ * @return {module:zrender/graphic/Style} The input style.
+ */
+function normalizeTextStyle(style) {
+    normalizeStyle(style);
+    each$1(style.rich, normalizeStyle);
+    return style;
+}
+
+function normalizeStyle(style) {
+    if (style) {
+
+        style.font = makeFont(style);
+
+        var textAlign = style.textAlign;
+        textAlign === 'middle' && (textAlign = 'center');
+        style.textAlign = (
+            textAlign == null || VALID_TEXT_ALIGN[textAlign]
+        ) ? textAlign : 'left';
+
+        // Compatible with textBaseline.
+        var textVerticalAlign = style.textVerticalAlign || style.textBaseline;
+        textVerticalAlign === 'center' && (textVerticalAlign = 'middle');
+        style.textVerticalAlign = (
+            textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign]
+        ) ? textVerticalAlign : 'top';
+
+        var textPadding = style.textPadding;
+        if (textPadding) {
+            style.textPadding = normalizeCssArray(style.textPadding);
+        }
+    }
+}
+
+/**
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {string} text
+ * @param {module:zrender/graphic/Style} style
+ * @param {Object|boolean} [rect] {x, y, width, height}
+ *                  If set false, rect text is not used.
+ */
+function renderText(hostEl, ctx, text, style, rect) {
+    style.rich
+        ? renderRichText(hostEl, ctx, text, style, rect)
+        : renderPlainText(hostEl, ctx, text, style, rect);
+}
+
+function renderPlainText(hostEl, ctx, text, style, rect) {
+    var font = setCtx(ctx, 'font', style.font || DEFAULT_FONT);
+
+    var textPadding = style.textPadding;
+
+    var contentBlock = hostEl.__textCotentBlock;
+    if (!contentBlock || hostEl.__dirty) {
+        contentBlock = hostEl.__textCotentBlock = parsePlainText(
+            text, font, textPadding, style.truncate
+        );
+    }
+
+    var outerHeight = contentBlock.outerHeight;
+
+    var textLines = contentBlock.lines;
+    var lineHeight = contentBlock.lineHeight;
+
+    var boxPos = getBoxPosition(outerHeight, style, rect);
+    var baseX = boxPos.baseX;
+    var baseY = boxPos.baseY;
+    var textAlign = boxPos.textAlign;
+    var textVerticalAlign = boxPos.textVerticalAlign;
+
+    // Origin of textRotation should be the base point of text drawing.
+    applyTextRotation(ctx, style, rect, baseX, baseY);
+
+    var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign);
+    var textX = baseX;
+    var textY = boxY;
+
+    var needDrawBg = needDrawBackground(style);
+    if (needDrawBg || textPadding) {
+        // Consider performance, do not call getTextWidth util necessary.
+        var textWidth = getWidth(text, font);
+        var outerWidth = textWidth;
+        textPadding && (outerWidth += textPadding[1] + textPadding[3]);
+        var boxX = adjustTextX(baseX, outerWidth, textAlign);
+
+        needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);
+
+        if (textPadding) {
+            textX = getTextXForPadding(baseX, textAlign, textPadding);
+            textY += textPadding[0];
+        }
+    }
+
+    setCtx(ctx, 'textAlign', textAlign || 'left');
+    // Force baseline to be "middle". Otherwise, if using "top", the
+    // text will offset downward a little bit in font "Microsoft YaHei".
+    setCtx(ctx, 'textBaseline', 'middle');
+
+    // Always set shadowBlur and shadowOffset to avoid leak from displayable.
+    setCtx(ctx, 'shadowBlur', style.textShadowBlur || 0);
+    setCtx(ctx, 'shadowColor', style.textShadowColor || 'transparent');
+    setCtx(ctx, 'shadowOffsetX', style.textShadowOffsetX || 0);
+    setCtx(ctx, 'shadowOffsetY', style.textShadowOffsetY || 0);
+
+    // `textBaseline` is set as 'middle'.
+    textY += lineHeight / 2;
+
+    var textStrokeWidth = style.textStrokeWidth;
+    var textStroke = getStroke(style.textStroke, textStrokeWidth);
+    var textFill = getFill(style.textFill);
+
+    if (textStroke) {
+        setCtx(ctx, 'lineWidth', textStrokeWidth);
+        setCtx(ctx, 'strokeStyle', textStroke);
+    }
+    if (textFill) {
+        setCtx(ctx, 'fillStyle', textFill);
+    }
+
+    for (var i = 0; i < textLines.length; i++) {
+        // Fill after stroke so the outline will not cover the main part.
+        textStroke && ctx.strokeText(textLines[i], textX, textY);
+        textFill && ctx.fillText(textLines[i], textX, textY);
+        textY += lineHeight;
+    }
+}
+
+function renderRichText(hostEl, ctx, text, style, rect) {
+    var contentBlock = hostEl.__textCotentBlock;
+
+    if (!contentBlock || hostEl.__dirty) {
+        contentBlock = hostEl.__textCotentBlock = parseRichText(text, style);
+    }
+
+    drawRichText(hostEl, ctx, contentBlock, style, rect);
+}
+
+function drawRichText(hostEl, ctx, contentBlock, style, rect) {
+    var contentWidth = contentBlock.width;
+    var outerWidth = contentBlock.outerWidth;
+    var outerHeight = contentBlock.outerHeight;
+    var textPadding = style.textPadding;
+
+    var boxPos = getBoxPosition(outerHeight, style, rect);
+    var baseX = boxPos.baseX;
+    var baseY = boxPos.baseY;
+    var textAlign = boxPos.textAlign;
+    var textVerticalAlign = boxPos.textVerticalAlign;
+
+    // Origin of textRotation should be the base point of text drawing.
+    applyTextRotation(ctx, style, rect, baseX, baseY);
+
+    var boxX = adjustTextX(baseX, outerWidth, textAlign);
+    var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign);
+    var xLeft = boxX;
+    var lineTop = boxY;
+    if (textPadding) {
+        xLeft += textPadding[3];
+        lineTop += textPadding[0];
+    }
+    var xRight = xLeft + contentWidth;
+
+    needDrawBackground(style) && drawBackground(
+        hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight
+    );
+
+    for (var i = 0; i < contentBlock.lines.length; i++) {
+        var line = contentBlock.lines[i];
+        var tokens = line.tokens;
+        var tokenCount = tokens.length;
+        var lineHeight = line.lineHeight;
+        var usedWidth = line.width;
+
+        var leftIndex = 0;
+        var lineXLeft = xLeft;
+        var lineXRight = xRight;
+        var rightIndex = tokenCount - 1;
+        var token;
+
+        while (
+            leftIndex < tokenCount
+            && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')
+        ) {
+            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');
+            usedWidth -= token.width;
+            lineXLeft += token.width;
+            leftIndex++;
+        }
+
+        while (
+            rightIndex >= 0
+            && (token = tokens[rightIndex], token.textAlign === 'right')
+        ) {
+            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');
+            usedWidth -= token.width;
+            lineXRight -= token.width;
+            rightIndex--;
+        }
+
+        // The other tokens are placed as textAlign 'center' if there is enough space.
+        lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;
+        while (leftIndex <= rightIndex) {
+            token = tokens[leftIndex];
+            // Consider width specified by user, use 'center' rather than 'left'.
+            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');
+            lineXLeft += token.width;
+            leftIndex++;
+        }
+
+        lineTop += lineHeight;
+    }
+}
+
+function applyTextRotation(ctx, style, rect, x, y) {
+    // textRotation only apply in RectText.
+    if (rect && style.textRotation) {
+        var origin = style.textOrigin;
+        if (origin === 'center') {
+            x = rect.width / 2 + rect.x;
+            y = rect.height / 2 + rect.y;
+        }
+        else if (origin) {
+            x = origin[0] + rect.x;
+            y = origin[1] + rect.y;
+        }
+
+        ctx.translate(x, y);
+        // Positive: anticlockwise
+        ctx.rotate(-style.textRotation);
+        ctx.translate(-x, -y);
+    }
+}
+
+function placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {
+    var tokenStyle = style.rich[token.styleName] || {};
+
+    // 'ctx.textBaseline' is always set as 'middle', for sake of
+    // the bias of "Microsoft YaHei".
+    var textVerticalAlign = token.textVerticalAlign;
+    var y = lineTop + lineHeight / 2;
+    if (textVerticalAlign === 'top') {
+        y = lineTop + token.height / 2;
+    }
+    else if (textVerticalAlign === 'bottom') {
+        y = lineTop + lineHeight - token.height / 2;
+    }
+
+    !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(
+        hostEl,
+        ctx,
+        tokenStyle,
+        textAlign === 'right'
+            ? x - token.width
+            : textAlign === 'center'
+            ? x - token.width / 2
+            : x,
+        y - token.height / 2,
+        token.width,
+        token.height
+    );
+
+    var textPadding = token.textPadding;
+    if (textPadding) {
+        x = getTextXForPadding(x, textAlign, textPadding);
+        y -= token.height / 2 - textPadding[2] - token.textHeight / 2;
+    }
+
+    setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));
+    setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');
+    setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));
+    setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));
+
+    setCtx(ctx, 'textAlign', textAlign);
+    // Force baseline to be "middle". Otherwise, if using "top", the
+    // text will offset downward a little bit in font "Microsoft YaHei".
+    setCtx(ctx, 'textBaseline', 'middle');
+
+    setCtx(ctx, 'font', token.font || DEFAULT_FONT);
+
+    var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);
+    var textFill = getFill(tokenStyle.textFill || style.textFill);
+    var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth);
+
+    // Fill after stroke so the outline will not cover the main part.
+    if (textStroke) {
+        setCtx(ctx, 'lineWidth', textStrokeWidth);
+        setCtx(ctx, 'strokeStyle', textStroke);
+        ctx.strokeText(token.text, x, y);
+    }
+    if (textFill) {
+        setCtx(ctx, 'fillStyle', textFill);
+        ctx.fillText(token.text, x, y);
+    }
+}
+
+function needDrawBackground(style) {
+    return style.textBackgroundColor
+        || (style.textBorderWidth && style.textBorderColor);
+}
+
+// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius}
+// shape: {x, y, width, height}
+function drawBackground(hostEl, ctx, style, x, y, width, height) {
+    var textBackgroundColor = style.textBackgroundColor;
+    var textBorderWidth = style.textBorderWidth;
+    var textBorderColor = style.textBorderColor;
+    var isPlainBg = isString(textBackgroundColor);
+
+    setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);
+    setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');
+    setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);
+    setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);
+
+    if (isPlainBg || (textBorderWidth && textBorderColor)) {
+        ctx.beginPath();
+        var textBorderRadius = style.textBorderRadius;
+        if (!textBorderRadius) {
+            ctx.rect(x, y, width, height);
+        }
+        else {
+            buildPath(ctx, {
+                x: x, y: y, width: width, height: height, r: textBorderRadius
+            });
+        }
+        ctx.closePath();
+    }
+
+    if (isPlainBg) {
+        setCtx(ctx, 'fillStyle', textBackgroundColor);
+        ctx.fill();
+    }
+    else if (isObject$1(textBackgroundColor)) {
+        var image = textBackgroundColor.image;
+
+        image = createOrUpdateImage(
+            image, null, hostEl, onBgImageLoaded, textBackgroundColor
+        );
+        if (image && isImageReady(image)) {
+            ctx.drawImage(image, x, y, width, height);
+        }
+    }
+
+    if (textBorderWidth && textBorderColor) {
+        setCtx(ctx, 'lineWidth', textBorderWidth);
+        setCtx(ctx, 'strokeStyle', textBorderColor);
+        ctx.stroke();
+    }
+}
+
+function onBgImageLoaded(image, textBackgroundColor) {
+    // Replace image, so that `contain/text.js#parseRichText`
+    // will get correct result in next tick.
+    textBackgroundColor.image = image;
+}
+
+function getBoxPosition(blockHeiht, style, rect) {
+    var baseX = style.x || 0;
+    var baseY = style.y || 0;
+    var textAlign = style.textAlign;
+    var textVerticalAlign = style.textVerticalAlign;
+
+    // Text position represented by coord
+    if (rect) {
+        var textPosition = style.textPosition;
+        if (textPosition instanceof Array) {
+            // Percent
+            baseX = rect.x + parsePercent(textPosition[0], rect.width);
+            baseY = rect.y + parsePercent(textPosition[1], rect.height);
+        }
+        else {
+            var res = adjustTextPositionOnRect(
+                textPosition, rect, style.textDistance
+            );
+            baseX = res.x;
+            baseY = res.y;
+            // Default align and baseline when has textPosition
+            textAlign = textAlign || res.textAlign;
+            textVerticalAlign = textVerticalAlign || res.textVerticalAlign;
+        }
+
+        // textOffset is only support in RectText, otherwise
+        // we have to adjust boundingRect for textOffset.
+        var textOffset = style.textOffset;
+        if (textOffset) {
+            baseX += textOffset[0];
+            baseY += textOffset[1];
+        }
+    }
+
+    return {
+        baseX: baseX,
+        baseY: baseY,
+        textAlign: textAlign,
+        textVerticalAlign: textVerticalAlign
+    };
+}
+
+function setCtx(ctx, prop, value) {
+    ctx[prop] = fixShadow(ctx, prop, value);
+    return ctx[prop];
+}
+
+/**
+ * @param {string} [stroke] If specified, do not check style.textStroke.
+ * @param {string} [lineWidth] If specified, do not check style.textStroke.
+ * @param {number} style
+ */
+function getStroke(stroke, lineWidth) {
+    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')
+        ? null
+        // TODO pattern and gradient?
+        : (stroke.image || stroke.colorStops)
+        ? '#000'
+        : stroke;
+}
+
+function getFill(fill) {
+    return (fill == null || fill === 'none')
+        ? null
+        // TODO pattern and gradient?
+        : (fill.image || fill.colorStops)
+        ? '#000'
+        : fill;
+}
+
+function parsePercent(value, maxValue) {
+    if (typeof value === 'string') {
+        if (value.lastIndexOf('%') >= 0) {
+            return parseFloat(value) / 100 * maxValue;
+        }
+        return parseFloat(value);
+    }
+    return value;
+}
+
+function getTextXForPadding(x, textAlign, textPadding) {
+    return textAlign === 'right'
+        ? (x - textPadding[1])
+        : textAlign === 'center'
+        ? (x + textPadding[3] / 2 - textPadding[1] / 2)
+        : (x + textPadding[3]);
+}
+
+/**
+ * @param {string} text
+ * @param {module:zrender/Style} style
+ * @return {boolean}
+ */
+function needDrawText(text, style) {
+    return text != null
+        && (text
+            || style.textBackgroundColor
+            || (style.textBorderWidth && style.textBorderColor)
+            || style.textPadding
+        );
+}
+
+/**
+ * Mixin for drawing text in a element bounding rect
+ * @module zrender/mixin/RectText
+ */
+
+var tmpRect$1 = new BoundingRect();
+
+var RectText = function () {};
+
+RectText.prototype = {
+
+    constructor: RectText,
+
+    /**
+     * Draw text in a rect with specified position.
+     * @param  {CanvasRenderingContext2D} ctx
+     * @param  {Object} rect Displayable rect
+     */
+    drawRectText: function (ctx, rect) {
+        var style = this.style;
+
+        rect = style.textRect || rect;
+
+        // Optimize, avoid normalize every time.
+        this.__dirty && normalizeTextStyle(style, true);
+
+        var text = style.text;
+
+        // Convert to string
+        text != null && (text += '');
+
+        if (!needDrawText(text, style)) {
+            return;
+        }
+
+        // FIXME
+        ctx.save();
+
+        // Transform rect to view space
+        var transform = this.transform;
+        if (!style.transformText) {
+            if (transform) {
+                tmpRect$1.copy(rect);
+                tmpRect$1.applyTransform(transform);
+                rect = tmpRect$1;
+            }
+        }
+        else {
+            this.setTransform(ctx);
+        }
+
+        // transformText and textRotation can not be used at the same time.
+        renderText(this, ctx, text, style, rect);
+
+        ctx.restore();
+    }
+};
+
+/**
+ * 可绘制的图形基类
+ * Base class of all displayable graphic objects
+ * @module zrender/graphic/Displayable
+ */
+
+
+/**
+ * @alias module:zrender/graphic/Displayable
+ * @extends module:zrender/Element
+ * @extends module:zrender/graphic/mixin/RectText
+ */
+function Displayable(opts) {
+
+    opts = opts || {};
+
+    Element.call(this, opts);
+
+    // Extend properties
+    for (var name in opts) {
+        if (
+            opts.hasOwnProperty(name) &&
+            name !== 'style'
+        ) {
+            this[name] = opts[name];
+        }
+    }
+
+    /**
+     * @type {module:zrender/graphic/Style}
+     */
+    this.style = new Style(opts.style, this);
+
+    this._rect = null;
+    // Shapes for cascade clipping.
+    this.__clipPaths = [];
+
+    // FIXME Stateful must be mixined after style is setted
+    // Stateful.call(this, opts);
+}
+
+Displayable.prototype = {
+
+    constructor: Displayable,
+
+    type: 'displayable',
+
+    /**
+     * Displayable 是否为脏,Painter 中会根据该标记判断是否需要是否需要重新绘制
+     * Dirty flag. From which painter will determine if this displayable object needs brush
+     * @name module:zrender/graphic/Displayable#__dirty
+     * @type {boolean}
+     */
+    __dirty: true,
+
+    /**
+     * 图形是否可见,为true时不绘制图形,但是仍能触发鼠标事件
+     * If ignore drawing of the displayable object. Mouse event will still be triggered
+     * @name module:/zrender/graphic/Displayable#invisible
+     * @type {boolean}
+     * @default false
+     */
+    invisible: false,
+
+    /**
+     * @name module:/zrender/graphic/Displayable#z
+     * @type {number}
+     * @default 0
+     */
+    z: 0,
+
+    /**
+     * @name module:/zrender/graphic/Displayable#z
+     * @type {number}
+     * @default 0
+     */
+    z2: 0,
+
+    /**
+     * z层level,决定绘画在哪层canvas中
+     * @name module:/zrender/graphic/Displayable#zlevel
+     * @type {number}
+     * @default 0
+     */
+    zlevel: 0,
+
+    /**
+     * 是否可拖拽
+     * @name module:/zrender/graphic/Displayable#draggable
+     * @type {boolean}
+     * @default false
+     */
+    draggable: false,
+
+    /**
+     * 是否正在拖拽
+     * @name module:/zrender/graphic/Displayable#draggable
+     * @type {boolean}
+     * @default false
+     */
+    dragging: false,
+
+    /**
+     * 是否相应鼠标事件
+     * @name module:/zrender/graphic/Displayable#silent
+     * @type {boolean}
+     * @default false
+     */
+    silent: false,
+
+    /**
+     * If enable culling
+     * @type {boolean}
+     * @default false
+     */
+    culling: false,
+
+    /**
+     * Mouse cursor when hovered
+     * @name module:/zrender/graphic/Displayable#cursor
+     * @type {string}
+     */
+    cursor: 'pointer',
+
+    /**
+     * If hover area is bounding rect
+     * @name module:/zrender/graphic/Displayable#rectHover
+     * @type {string}
+     */
+    rectHover: false,
+
+    /**
+     * Render the element progressively when the value >= 0,
+     * usefull for large data.
+     * @type {boolean}
+     */
+    progressive: false,
+
+    /**
+     * @type {boolean}
+     */
+    incremental: false,
+    // inplace is used with incremental
+    inplace: false,
+
+    beforeBrush: function (ctx) {},
+
+    afterBrush: function (ctx) {},
+
+    /**
+     * 图形绘制方法
+     * @param {CanvasRenderingContext2D} ctx
+     */
+    // Interface
+    brush: function (ctx, prevEl) {},
+
+    /**
+     * 获取最小包围盒
+     * @return {module:zrender/core/BoundingRect}
+     */
+    // Interface
+    getBoundingRect: function () {},
+
+    /**
+     * 判断坐标 x, y 是否在图形上
+     * If displayable element contain coord x, y
+     * @param  {number} x
+     * @param  {number} y
+     * @return {boolean}
+     */
+    contain: function (x, y) {
+        return this.rectContain(x, y);
+    },
+
+    /**
+     * @param  {Function} cb
+     * @param  {}   context
+     */
+    traverse: function (cb, context) {
+        cb.call(context, this);
+    },
+
+    /**
+     * 判断坐标 x, y 是否在图形的包围盒上
+     * If bounding rect of element contain coord x, y
+     * @param  {number} x
+     * @param  {number} y
+     * @return {boolean}
+     */
+    rectContain: function (x, y) {
+        var coord = this.transformCoordToLocal(x, y);
+        var rect = this.getBoundingRect();
+        return rect.contain(coord[0], coord[1]);
+    },
+
+    /**
+     * 标记图形元素为脏,并且在下一帧重绘
+     * Mark displayable element dirty and refresh next frame
+     */
+    dirty: function () {
+        this.__dirty = true;
+
+        this._rect = null;
+
+        this.__zr && this.__zr.refresh();
+    },
+
+    /**
+     * 图形是否会触发事件
+     * If displayable object binded any event
+     * @return {boolean}
+     */
+    // TODO, 通过 bind 绑定的事件
+    // isSilent: function () {
+    //     return !(
+    //         this.hoverable || this.draggable
+    //         || this.onmousemove || this.onmouseover || this.onmouseout
+    //         || this.onmousedown || this.onmouseup || this.onclick
+    //         || this.ondragenter || this.ondragover || this.ondragleave
+    //         || this.ondrop
+    //     );
+    // },
+    /**
+     * Alias for animate('style')
+     * @param {boolean} loop
+     */
+    animateStyle: function (loop) {
+        return this.animate('style', loop);
+    },
+
+    attrKV: function (key, value) {
+        if (key !== 'style') {
+            Element.prototype.attrKV.call(this, key, value);
+        }
+        else {
+            this.style.set(value);
+        }
+    },
+
+    /**
+     * @param {Object|string} key
+     * @param {*} value
+     */
+    setStyle: function (key, value) {
+        this.style.set(key, value);
+        this.dirty(false);
+        return this;
+    },
+
+    /**
+     * Use given style object
+     * @param  {Object} obj
+     */
+    useStyle: function (obj) {
+        this.style = new Style(obj, this);
+        this.dirty(false);
+        return this;
+    }
+};
+
+inherits(Displayable, Element);
+
+mixin(Displayable, RectText);
+
+/**
+ * @alias zrender/graphic/Image
+ * @extends module:zrender/graphic/Displayable
+ * @constructor
+ * @param {Object} opts
+ */
+function ZImage(opts) {
+    Displayable.call(this, opts);
+}
+
+ZImage.prototype = {
+
+    constructor: ZImage,
+
+    type: 'image',
+
+    brush: function (ctx, prevEl) {
+        var style = this.style;
+        var src = style.image;
+
+        // Must bind each time
+        style.bind(ctx, this, prevEl);
+
+        var image = this._image = createOrUpdateImage(
+            src,
+            this._image,
+            this,
+            this.onload
+        );
+
+        if (!image || !isImageReady(image)) {
+            return;
+        }
+
+        // 图片已经加载完成
+        // if (image.nodeName.toUpperCase() == 'IMG') {
+        //     if (!image.complete) {
+        //         return;
+        //     }
+        // }
+        // Else is canvas
+
+        var x = style.x || 0;
+        var y = style.y || 0;
+        var width = style.width;
+        var height = style.height;
+        var aspect = image.width / image.height;
+        if (width == null && height != null) {
+            // Keep image/height ratio
+            width = height * aspect;
+        }
+        else if (height == null && width != null) {
+            height = width / aspect;
+        }
+        else if (width == null && height == null) {
+            width = image.width;
+            height = image.height;
+        }
+
+        // 设置transform
+        this.setTransform(ctx);
+
+        if (style.sWidth && style.sHeight) {
+            var sx = style.sx || 0;
+            var sy = style.sy || 0;
+            ctx.drawImage(
+                image,
+                sx, sy, style.sWidth, style.sHeight,
+                x, y, width, height
+            );
+        }
+        else if (style.sx && style.sy) {
+            var sx = style.sx;
+            var sy = style.sy;
+            var sWidth = width - sx;
+            var sHeight = height - sy;
+            ctx.drawImage(
+                image,
+                sx, sy, sWidth, sHeight,
+                x, y, width, height
+            );
+        }
+        else {
+            ctx.drawImage(image, x, y, width, height);
+        }
+
+        // Draw rect text
+        if (style.text != null) {
+            // Only restore transform when needs draw text.
+            this.restoreTransform(ctx);    
+            this.drawRectText(ctx, this.getBoundingRect());
+        }
+    },
+
+    getBoundingRect: function () {
+        var style = this.style;
+        if (! this._rect) {
+            this._rect = new BoundingRect(
+                style.x || 0, style.y || 0, style.width || 0, style.height || 0
+            );
+        }
+        return this._rect;
+    }
+};
+
+inherits(ZImage, Displayable);
+
+var HOVER_LAYER_ZLEVEL = 1e5;
+var CANVAS_ZLEVEL = 314159;
+
+var EL_AFTER_INCREMENTAL_INC = 0.01;
+var INCREMENTAL_INC = 0.001;
+
+function parseInt10(val) {
+    return parseInt(val, 10);
+}
+
+function isLayerValid(layer) {
+    if (!layer) {
+        return false;
+    }
+
+    if (layer.__builtin__) {
+        return true;
+    }
+
+    if (typeof(layer.resize) !== 'function'
+        || typeof(layer.refresh) !== 'function'
+    ) {
+        return false;
+    }
+
+    return true;
+}
+
+var tmpRect = new BoundingRect(0, 0, 0, 0);
+var viewRect = new BoundingRect(0, 0, 0, 0);
+function isDisplayableCulled(el, width, height) {
+    tmpRect.copy(el.getBoundingRect());
+    if (el.transform) {
+        tmpRect.applyTransform(el.transform);
+    }
+    viewRect.width = width;
+    viewRect.height = height;
+    return !tmpRect.intersect(viewRect);
+}
+
+function isClipPathChanged(clipPaths, prevClipPaths) {
+    if (clipPaths == prevClipPaths) { // Can both be null or undefined
+        return false;
+    }
+
+    if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {
+        return true;
+    }
+    for (var i = 0; i < clipPaths.length; i++) {
+        if (clipPaths[i] !== prevClipPaths[i]) {
+            return true;
+        }
+    }
+}
+
+function doClip(clipPaths, ctx) {
+    for (var i = 0; i < clipPaths.length; i++) {
+        var clipPath = clipPaths[i];
+
+        clipPath.setTransform(ctx);
+        ctx.beginPath();
+        clipPath.buildPath(ctx, clipPath.shape);
+        ctx.clip();
+        // Transform back
+        clipPath.restoreTransform(ctx);
+    }
+}
+
+function createRoot(width, height) {
+    var domRoot = document.createElement('div');
+
+    // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬
+    domRoot.style.cssText = [
+        'position:relative',
+        'overflow:hidden',
+        'width:' + width + 'px',
+        'height:' + height + 'px',
+        'padding:0',
+        'margin:0',
+        'border-width:0'
+    ].join(';') + ';';
+
+    return domRoot;
+}
+
+
+/**
+ * @alias module:zrender/Painter
+ * @constructor
+ * @param {HTMLElement} root 绘图容器
+ * @param {module:zrender/Storage} storage
+ * @param {Object} opts
+ */
+var Painter = function (root, storage, opts) {
+
+    this.type = 'canvas';
+
+    // In node environment using node-canvas
+    var singleCanvas = !root.nodeName // In node ?
+        || root.nodeName.toUpperCase() === 'CANVAS';
+
+    this._opts = opts = extend({}, opts || {});
+
+    /**
+     * @type {number}
+     */
+    this.dpr = opts.devicePixelRatio || devicePixelRatio;
+    /**
+     * @type {boolean}
+     * @private
+     */
+    this._singleCanvas = singleCanvas;
+    /**
+     * 绘图容器
+     * @type {HTMLElement}
+     */
+    this.root = root;
+
+    var rootStyle = root.style;
+
+    if (rootStyle) {
+        rootStyle['-webkit-tap-highlight-color'] = 'transparent';
+        rootStyle['-webkit-user-select'] =
+        rootStyle['user-select'] =
+        rootStyle['-webkit-touch-callout'] = 'none';
+
+        root.innerHTML = '';
+    }
+
+    /**
+     * @type {module:zrender/Storage}
+     */
+    this.storage = storage;
+
+    /**
+     * @type {Array.<number>}
+     * @private
+     */
+    var zlevelList = this._zlevelList = [];
+
+    /**
+     * @type {Object.<string, module:zrender/Layer>}
+     * @private
+     */
+    var layers = this._layers = {};
+
+    /**
+     * @type {Object.<string, Object>}
+     * @private
+     */
+    this._layerConfig = {};
+
+    /**
+     * zrender will do compositing when root is a canvas and have multiple zlevels.
+     */
+    this._needsManuallyCompositing = false;
+
+    if (!singleCanvas) {
+        this._width = this._getSize(0);
+        this._height = this._getSize(1);
+
+        var domRoot = this._domRoot = createRoot(
+            this._width, this._height
+        );
+        root.appendChild(domRoot);
+    }
+    else {
+        var width = root.width;
+        var height = root.height;
+
+        if (opts.width != null) {
+            width = opts.width;
+        }
+        if (opts.height != null) {
+            height = opts.height;
+        }
+        this.dpr = opts.devicePixelRatio || 1;
+
+        // Use canvas width and height directly
+        root.width = width * this.dpr;
+        root.height = height * this.dpr;
+
+        this._width = width;
+        this._height = height;
+
+        // Create layer if only one given canvas
+        // Device can be specified to create a high dpi image.
+        var mainLayer = new Layer(root, this, this.dpr);
+        mainLayer.__builtin__ = true;
+        mainLayer.initContext();
+        // FIXME Use canvas width and height
+        // mainLayer.resize(width, height);
+        layers[CANVAS_ZLEVEL] = mainLayer;
+        mainLayer.zlevel = CANVAS_ZLEVEL;
+        // Not use common zlevel.
+        zlevelList.push(CANVAS_ZLEVEL);
+
+        this._domRoot = root;
+    }
+
+    /**
+     * @type {module:zrender/Layer}
+     * @private
+     */
+    this._hoverlayer = null;
+
+    this._hoverElements = [];
+};
+
+Painter.prototype = {
+
+    constructor: Painter,
+
+    getType: function () {
+        return 'canvas';
+    },
+
+    /**
+     * If painter use a single canvas
+     * @return {boolean}
+     */
+    isSingleCanvas: function () {
+        return this._singleCanvas;
+    },
+    /**
+     * @return {HTMLDivElement}
+     */
+    getViewportRoot: function () {
+        return this._domRoot;
+    },
+
+    getViewportRootOffset: function () {
+        var viewportRoot = this.getViewportRoot();
+        if (viewportRoot) {
+            return {
+                offsetLeft: viewportRoot.offsetLeft || 0,
+                offsetTop: viewportRoot.offsetTop || 0
+            };
+        }
+    },
+
+    /**
+     * 刷新
+     * @param {boolean} [paintAll=false] 强制绘制所有displayable
+     */
+    refresh: function (paintAll) {
+
+        var list = this.storage.getDisplayList(true);
+
+        var zlevelList = this._zlevelList;
+
+        this._redrawId = Math.random();
+
+        this._paintList(list, paintAll, this._redrawId);
+
+        // Paint custum layers
+        for (var i = 0; i < zlevelList.length; i++) {
+            var z = zlevelList[i];
+            var layer = this._layers[z];
+            if (!layer.__builtin__ && layer.refresh) {
+                var clearColor = i === 0 ? this._backgroundColor : null;
+                layer.refresh(clearColor);
+            }
+        }
+
+        this.refreshHover();
+
+        return this;
+    },
+
+    addHover: function (el, hoverStyle) {
+        if (el.__hoverMir) {
+            return;
+        }
+        var elMirror = new el.constructor({
+            style: el.style,
+            shape: el.shape
+        });
+        elMirror.__from = el;
+        el.__hoverMir = elMirror;
+        elMirror.setStyle(hoverStyle);
+        this._hoverElements.push(elMirror);
+    },
+
+    removeHover: function (el) {
+        var elMirror = el.__hoverMir;
+        var hoverElements = this._hoverElements;
+        var idx = indexOf(hoverElements, elMirror);
+        if (idx >= 0) {
+            hoverElements.splice(idx, 1);
+        }
+        el.__hoverMir = null;
+    },
+
+    clearHover: function (el) {
+        var hoverElements = this._hoverElements;
+        for (var i = 0; i < hoverElements.length; i++) {
+            var from = hoverElements[i].__from;
+            if (from) {
+                from.__hoverMir = null;
+            }
+        }
+        hoverElements.length = 0;
+    },
+
+    refreshHover: function () {
+        var hoverElements = this._hoverElements;
+        var len = hoverElements.length;
+        var hoverLayer = this._hoverlayer;
+        hoverLayer && hoverLayer.clear();
+
+        if (!len) {
+            return;
+        }
+        sort(hoverElements, this.storage.displayableSortFunc);
+
+        // Use a extream large zlevel
+        // FIXME?
+        if (!hoverLayer) {
+            hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);
+        }
+
+        var scope = {};
+        hoverLayer.ctx.save();
+        for (var i = 0; i < len;) {
+            var el = hoverElements[i];
+            var originalEl = el.__from;
+            // Original el is removed
+            // PENDING
+            if (!(originalEl && originalEl.__zr)) {
+                hoverElements.splice(i, 1);
+                originalEl.__hoverMir = null;
+                len--;
+                continue;
+            }
+            i++;
+
+            // Use transform
+            // FIXME style and shape ?
+            if (!originalEl.invisible) {
+                el.transform = originalEl.transform;
+                el.invTransform = originalEl.invTransform;
+                el.__clipPaths = originalEl.__clipPaths;
+                // el.
+                this._doPaintEl(el, hoverLayer, true, scope);
+            }
+        }
+        hoverLayer.ctx.restore();
+    },
+
+    getHoverLayer: function () {
+        return this.getLayer(HOVER_LAYER_ZLEVEL);
+    },
+
+    _paintList: function (list, paintAll, redrawId) {
+        if (this._redrawId !== redrawId) {
+            return;
+        }
+
+        paintAll = paintAll || false;
+
+        this._updateLayerStatus(list);
+
+        var finished = this._doPaintList(list, paintAll);
+
+        if (this._needsManuallyCompositing) {
+            this._compositeManually();
+        }
+
+        if (!finished) {
+            var self = this;
+            requestAnimationFrame(function () {
+                self._paintList(list, paintAll, redrawId);
+            });
+        }
+    },
+
+    _compositeManually: function () {
+        var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;
+        var width = this._domRoot.width;
+        var height = this._domRoot.height;
+        ctx.clearRect(0, 0, width, height);
+        // PENDING, If only builtin layer?
+        this.eachBuiltinLayer(function (layer) {
+            if (layer.virtual) {
+                ctx.drawImage(layer.dom, 0, 0, width, height);
+            }
+        });
+    },
+
+    _doPaintList: function (list, paintAll) {
+        var layerList = [];
+        for (var zi = 0; zi < this._zlevelList.length; zi++) {
+            var zlevel = this._zlevelList[zi];
+            var layer = this._layers[zlevel];
+            if (layer.__builtin__
+                && layer !== this._hoverlayer
+                && (layer.__dirty || paintAll)
+            ) {
+                layerList.push(layer);
+            }
+        }
+
+        var finished = true;
+
+        for (var k = 0; k < layerList.length; k++) {
+            var layer = layerList[k];
+            var ctx = layer.ctx;
+            var scope = {};
+            ctx.save();
+
+            var start = paintAll ? layer.__startIndex : layer.__drawIndex;
+
+            var useTimer = !paintAll && layer.incremental && Date.now;
+            var startTime = useTimer && Date.now();
+
+            var clearColor = layer.zlevel === this._zlevelList[0]
+                ? this._backgroundColor : null;
+            // All elements in this layer are cleared.
+            if (layer.__startIndex === layer.__endIndex) {
+                layer.clear(false, clearColor);
+            }
+            else if (start === layer.__startIndex) {
+                var firstEl = list[start];
+                if (!firstEl.incremental || !firstEl.notClear || paintAll) {
+                    layer.clear(false, clearColor);
+                }
+            }
+            if (start === -1) {
+                console.error('For some unknown reason. drawIndex is -1');
+                start = layer.__startIndex;
+            }
+            for (var i = start; i < layer.__endIndex; i++) {
+                var el = list[i];
+                this._doPaintEl(el, layer, paintAll, scope);
+                el.__dirty = false;
+
+                if (useTimer) {
+                    // Date.now can be executed in 13,025,305 ops/second.
+                    var dTime = Date.now() - startTime;
+                    // Give 15 millisecond to draw.
+                    // The rest elements will be drawn in the next frame.
+                    if (dTime > 15) {
+                        break;
+                    }
+                }
+            }
+
+            layer.__drawIndex = i;
+
+            if (layer.__drawIndex < layer.__endIndex) {
+                finished = false;
+            }
+
+            if (scope.prevElClipPaths) {
+                // Needs restore the state. If last drawn element is in the clipping area.
+                ctx.restore();
+            }
+
+            ctx.restore();
+        }
+
+        if (env$1.wxa) {
+            // Flush for weixin application
+            each$1(this._layers, function (layer) {
+                if (layer && layer.ctx && layer.ctx.draw) {
+                    layer.ctx.draw();
+                }
+            });
+        }
+
+        return finished;
+    },
+
+    _doPaintEl: function (el, currentLayer, forcePaint, scope) {
+        var ctx = currentLayer.ctx;
+        var m = el.transform;
+        if (
+            (currentLayer.__dirty || forcePaint)
+            // Ignore invisible element
+            && !el.invisible
+            // Ignore transparent element
+            && el.style.opacity !== 0
+            // Ignore scale 0 element, in some environment like node-canvas
+            // Draw a scale 0 element can cause all following draw wrong
+            // And setTransform with scale 0 will cause set back transform failed.
+            && !(m && !m[0] && !m[3])
+            // Ignore culled element
+            && !(el.culling && isDisplayableCulled(el, this._width, this._height))
+        ) {
+
+            var clipPaths = el.__clipPaths;
+
+            // Optimize when clipping on group with several elements
+            if (!scope.prevElClipPaths
+                || isClipPathChanged(clipPaths, scope.prevElClipPaths)
+            ) {
+                // If has previous clipping state, restore from it
+                if (scope.prevElClipPaths) {
+                    currentLayer.ctx.restore();
+                    scope.prevElClipPaths = null;
+
+                    // Reset prevEl since context has been restored
+                    scope.prevEl = null;
+                }
+                // New clipping state
+                if (clipPaths) {
+                    ctx.save();
+                    doClip(clipPaths, ctx);
+                    scope.prevElClipPaths = clipPaths;
+                }
+            }
+            el.beforeBrush && el.beforeBrush(ctx);
+
+            el.brush(ctx, scope.prevEl || null);
+            scope.prevEl = el;
+
+            el.afterBrush && el.afterBrush(ctx);
+        }
+    },
+
+    /**
+     * 获取 zlevel 所在层,如果不存在则会创建一个新的层
+     * @param {number} zlevel
+     * @param {boolean} virtual Virtual layer will not be inserted into dom.
+     * @return {module:zrender/Layer}
+     */
+    getLayer: function (zlevel, virtual) {
+        if (this._singleCanvas && !this._needsManuallyCompositing) {
+            zlevel = CANVAS_ZLEVEL;
+        }
+        var layer = this._layers[zlevel];
+        if (!layer) {
+            // Create a new layer
+            layer = new Layer('zr_' + zlevel, this, this.dpr);
+            layer.zlevel = zlevel;
+            layer.__builtin__ = true;
+
+            if (this._layerConfig[zlevel]) {
+                merge(layer, this._layerConfig[zlevel], true);
+            }
+
+            if (virtual) {
+                layer.virtual = virtual;
+            }
+
+            this.insertLayer(zlevel, layer);
+
+            // Context is created after dom inserted to document
+            // Or excanvas will get 0px clientWidth and clientHeight
+            layer.initContext();
+        }
+
+        return layer;
+    },
+
+    insertLayer: function (zlevel, layer) {
+
+        var layersMap = this._layers;
+        var zlevelList = this._zlevelList;
+        var len = zlevelList.length;
+        var prevLayer = null;
+        var i = -1;
+        var domRoot = this._domRoot;
+
+        if (layersMap[zlevel]) {
+            zrLog('ZLevel ' + zlevel + ' has been used already');
+            return;
+        }
+        // Check if is a valid layer
+        if (!isLayerValid(layer)) {
+            zrLog('Layer of zlevel ' + zlevel + ' is not valid');
+            return;
+        }
+
+        if (len > 0 && zlevel > zlevelList[0]) {
+            for (i = 0; i < len - 1; i++) {
+                if (
+                    zlevelList[i] < zlevel
+                    && zlevelList[i + 1] > zlevel
+                ) {
+                    break;
+                }
+            }
+            prevLayer = layersMap[zlevelList[i]];
+        }
+        zlevelList.splice(i + 1, 0, zlevel);
+
+        layersMap[zlevel] = layer;
+
+        // Vitual layer will not directly show on the screen.
+        // (It can be a WebGL layer and assigned to a ZImage element)
+        // But it still under management of zrender.
+        if (!layer.virtual) {
+            if (prevLayer) {
+                var prevDom = prevLayer.dom;
+                if (prevDom.nextSibling) {
+                    domRoot.insertBefore(
+                        layer.dom,
+                        prevDom.nextSibling
+                    );
+                }
+                else {
+                    domRoot.appendChild(layer.dom);
+                }
+            }
+            else {
+                if (domRoot.firstChild) {
+                    domRoot.insertBefore(layer.dom, domRoot.firstChild);
+                }
+                else {
+                    domRoot.appendChild(layer.dom);
+                }
+            }
+        }
+    },
+
+    // Iterate each layer
+    eachLayer: function (cb, context) {
+        var zlevelList = this._zlevelList;
+        var z;
+        var i;
+        for (i = 0; i < zlevelList.length; i++) {
+            z = zlevelList[i];
+            cb.call(context, this._layers[z], z);
+        }
+    },
+
+    // Iterate each buildin layer
+    eachBuiltinLayer: function (cb, context) {
+        var zlevelList = this._zlevelList;
+        var layer;
+        var z;
+        var i;
+        for (i = 0; i < zlevelList.length; i++) {
+            z = zlevelList[i];
+            layer = this._layers[z];
+            if (layer.__builtin__) {
+                cb.call(context, layer, z);
+            }
+        }
+    },
+
+    // Iterate each other layer except buildin layer
+    eachOtherLayer: function (cb, context) {
+        var zlevelList = this._zlevelList;
+        var layer;
+        var z;
+        var i;
+        for (i = 0; i < zlevelList.length; i++) {
+            z = zlevelList[i];
+            layer = this._layers[z];
+            if (!layer.__builtin__) {
+                cb.call(context, layer, z);
+            }
+        }
+    },
+
+    /**
+     * 获取所有已创建的层
+     * @param {Array.<module:zrender/Layer>} [prevLayer]
+     */
+    getLayers: function () {
+        return this._layers;
+    },
+
+    _updateLayerStatus: function (list) {
+
+        this.eachBuiltinLayer(function (layer, z) {
+            layer.__dirty = layer.__used = false;
+        });
+
+        function updatePrevLayer(idx) {
+            if (prevLayer) {
+                if (prevLayer.__endIndex !== idx) {
+                    prevLayer.__dirty = true;
+                }
+                prevLayer.__endIndex = idx;
+            }
+        }
+
+        if (this._singleCanvas) {
+            for (var i = 1; i < list.length; i++) {
+                var el = list[i];
+                if (el.zlevel !== list[i - 1].zlevel || el.incremental) {
+                    this._needsManuallyCompositing = true;
+                    break;
+                }
+            }
+        }
+
+        var prevLayer = null;
+        var incrementalLayerCount = 0;
+        for (var i = 0; i < list.length; i++) {
+            var el = list[i];
+            var zlevel = el.zlevel;
+            var layer;
+            // PENDING If change one incremental element style ?
+            // TODO Where there are non-incremental elements between incremental elements.
+            if (el.incremental) {
+                layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);
+                layer.incremental = true;
+                incrementalLayerCount = 1;
+            }
+            else {
+                layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);
+            }
+
+            if (!layer.__builtin__) {
+                zrLog('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);
+            }
+
+            if (layer !== prevLayer) {
+                layer.__used = true;
+                if (layer.__startIndex !== i) {
+                    layer.__dirty = true;
+                }
+                layer.__startIndex = i;
+                if (!layer.incremental) {
+                    layer.__drawIndex = i;
+                }
+                else {
+                    // Mark layer draw index needs to update.
+                    layer.__drawIndex = -1;
+                }
+                updatePrevLayer(i);
+                prevLayer = layer;
+            }
+            if (el.__dirty) {
+                layer.__dirty = true;
+                if (layer.incremental && layer.__drawIndex < 0) {
+                    // Start draw from the first dirty element.
+                    layer.__drawIndex = i;
+                }
+            }
+        }
+
+        updatePrevLayer(i);
+
+        this.eachBuiltinLayer(function (layer, z) {
+            // Used in last frame but not in this frame. Needs clear
+            if (!layer.__used && layer.getElementCount() > 0) {
+                layer.__dirty = true;
+                layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;
+            }
+            // For incremental layer. In case start index changed and no elements are dirty.
+            if (layer.__dirty && layer.__drawIndex < 0) {
+                layer.__drawIndex = layer.__startIndex;
+            }
+        });
+    },
+
+    /**
+     * 清除hover层外所有内容
+     */
+    clear: function () {
+        this.eachBuiltinLayer(this._clearLayer);
+        return this;
+    },
+
+    _clearLayer: function (layer) {
+        layer.clear();
+    },
+
+    setBackgroundColor: function (backgroundColor) {
+        this._backgroundColor = backgroundColor;
+    },
+
+    /**
+     * 修改指定zlevel的绘制参数
+     *
+     * @param {string} zlevel
+     * @param {Object} config 配置对象
+     * @param {string} [config.clearColor=0] 每次清空画布的颜色
+     * @param {string} [config.motionBlur=false] 是否开启动态模糊
+     * @param {number} [config.lastFrameAlpha=0.7]
+     *                 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显
+     */
+    configLayer: function (zlevel, config) {
+        if (config) {
+            var layerConfig = this._layerConfig;
+            if (!layerConfig[zlevel]) {
+                layerConfig[zlevel] = config;
+            }
+            else {
+                merge(layerConfig[zlevel], config, true);
+            }
+
+            for (var i = 0; i < this._zlevelList.length; i++) {
+                var _zlevel = this._zlevelList[i];
+                if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {
+                    var layer = this._layers[_zlevel];
+                    merge(layer, layerConfig[zlevel], true);
+                }
+            }
+        }
+    },
+
+    /**
+     * 删除指定层
+     * @param {number} zlevel 层所在的zlevel
+     */
+    delLayer: function (zlevel) {
+        var layers = this._layers;
+        var zlevelList = this._zlevelList;
+        var layer = layers[zlevel];
+        if (!layer) {
+            return;
+        }
+        layer.dom.parentNode.removeChild(layer.dom);
+        delete layers[zlevel];
+
+        zlevelList.splice(indexOf(zlevelList, zlevel), 1);
+    },
+
+    /**
+     * 区域大小变化后重绘
+     */
+    resize: function (width, height) {
+        if (!this._domRoot.style) { // Maybe in node or worker
+            if (width == null || height == null) {
+                return;
+            }
+            this._width = width;
+            this._height = height;
+
+            this.getLayer(CANVAS_ZLEVEL).resize(width, height);
+        }
+        else {
+            var domRoot = this._domRoot;
+            // FIXME Why ?
+            domRoot.style.display = 'none';
+
+            // Save input w/h
+            var opts = this._opts;
+            width != null && (opts.width = width);
+            height != null && (opts.height = height);
+
+            width = this._getSize(0);
+            height = this._getSize(1);
+
+            domRoot.style.display = '';
+
+            // 优化没有实际改变的resize
+            if (this._width != width || height != this._height) {
+                domRoot.style.width = width + 'px';
+                domRoot.style.height = height + 'px';
+
+                for (var id in this._layers) {
+                    if (this._layers.hasOwnProperty(id)) {
+                        this._layers[id].resize(width, height);
+                    }
+                }
+                each$1(this._progressiveLayers, function (layer) {
+                    layer.resize(width, height);
+                });
+
+                this.refresh(true);
+            }
+
+            this._width = width;
+            this._height = height;
+
+        }
+        return this;
+    },
+
+    /**
+     * 清除单独的一个层
+     * @param {number} zlevel
+     */
+    clearLayer: function (zlevel) {
+        var layer = this._layers[zlevel];
+        if (layer) {
+            layer.clear();
+        }
+    },
+
+    /**
+     * 释放
+     */
+    dispose: function () {
+        this.root.innerHTML = '';
+
+        this.root =
+        this.storage =
+
+        this._domRoot =
+        this._layers = null;
+    },
+
+    /**
+     * Get canvas which has all thing rendered
+     * @param {Object} opts
+     * @param {string} [opts.backgroundColor]
+     * @param {number} [opts.pixelRatio]
+     */
+    getRenderedCanvas: function (opts) {
+        opts = opts || {};
+        if (this._singleCanvas && !this._compositeManually) {
+            return this._layers[CANVAS_ZLEVEL].dom;
+        }
+
+        var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);
+        imageLayer.initContext();
+        imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);
+
+        if (opts.pixelRatio <= this.dpr) {
+            this.refresh();
+
+            var width = imageLayer.dom.width;
+            var height = imageLayer.dom.height;
+            var ctx = imageLayer.ctx;
+            this.eachLayer(function (layer) {
+                if (layer.__builtin__) {
+                    ctx.drawImage(layer.dom, 0, 0, width, height);
+                }
+                else if (layer.renderToCanvas) {
+                    imageLayer.ctx.save();
+                    layer.renderToCanvas(imageLayer.ctx);
+                    imageLayer.ctx.restore();
+                }
+            });
+        }
+        else {
+            // PENDING, echarts-gl and incremental rendering.
+            var scope = {};
+            var displayList = this.storage.getDisplayList(true);
+            for (var i = 0; i < displayList.length; i++) {
+                var el = displayList[i];
+                this._doPaintEl(el, imageLayer, true, scope);
+            }
+        }
+
+        return imageLayer.dom;
+    },
+    /**
+     * 获取绘图区域宽度
+     */
+    getWidth: function () {
+        return this._width;
+    },
+
+    /**
+     * 获取绘图区域高度
+     */
+    getHeight: function () {
+        return this._height;
+    },
+
+    _getSize: function (whIdx) {
+        var opts = this._opts;
+        var wh = ['width', 'height'][whIdx];
+        var cwh = ['clientWidth', 'clientHeight'][whIdx];
+        var plt = ['paddingLeft', 'paddingTop'][whIdx];
+        var prb = ['paddingRight', 'paddingBottom'][whIdx];
+
+        if (opts[wh] != null && opts[wh] !== 'auto') {
+            return parseFloat(opts[wh]);
+        }
+
+        var root = this.root;
+        // IE8 does not support getComputedStyle, but it use VML.
+        var stl = document.defaultView.getComputedStyle(root);
+
+        return (
+            (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))
+            - (parseInt10(stl[plt]) || 0)
+            - (parseInt10(stl[prb]) || 0)
+        ) | 0;
+    },
+
+    pathToImage: function (path, dpr) {
+        dpr = dpr || this.dpr;
+
+        var canvas = document.createElement('canvas');
+        var ctx = canvas.getContext('2d');
+        var rect = path.getBoundingRect();
+        var style = path.style;
+        var shadowBlurSize = style.shadowBlur * dpr;
+        var shadowOffsetX = style.shadowOffsetX * dpr;
+        var shadowOffsetY = style.shadowOffsetY * dpr;
+        var lineWidth = style.hasStroke() ? style.lineWidth : 0;
+
+        var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);
+        var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);
+        var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);
+        var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);
+        var width = rect.width + leftMargin + rightMargin;
+        var height = rect.height + topMargin + bottomMargin;
+
+        canvas.width = width * dpr;
+        canvas.height = height * dpr;
+
+        ctx.scale(dpr, dpr);
+        ctx.clearRect(0, 0, width, height);
+        ctx.dpr = dpr;
+
+        var pathTransform = {
+            position: path.position,
+            rotation: path.rotation,
+            scale: path.scale
+        };
+        path.position = [leftMargin - rect.x, topMargin - rect.y];
+        path.rotation = 0;
+        path.scale = [1, 1];
+        path.updateTransform();
+        if (path) {
+            path.brush(ctx);
+        }
+
+        var ImageShape = ZImage;
+        var imgShape = new ImageShape({
+            style: {
+                x: 0,
+                y: 0,
+                image: canvas
+            }
+        });
+
+        if (pathTransform.position != null) {
+            imgShape.position = path.position = pathTransform.position;
+        }
+
+        if (pathTransform.rotation != null) {
+            imgShape.rotation = path.rotation = pathTransform.rotation;
+        }
+
+        if (pathTransform.scale != null) {
+            imgShape.scale = path.scale = pathTransform.scale;
+        }
+
+        return imgShape;
+    }
+};
+
+/**
+ * 事件辅助类
+ * @module zrender/core/event
+ * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ */
+
+var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;
+
+var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;
+
+function getBoundingClientRect(el) {
+    // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect
+    return el.getBoundingClientRect ? el.getBoundingClientRect() : {left: 0, top: 0};
+}
+
+// `calculate` is optional, default false
+function clientToLocal(el, e, out, calculate) {
+    out = out || {};
+
+    // According to the W3C Working Draft, offsetX and offsetY should be relative
+    // to the padding edge of the target element. The only browser using this convention
+    // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does
+    // not support the properties.
+    // (see http://www.jacklmoore.com/notes/mouse-position/)
+    // In zr painter.dom, padding edge equals to border edge.
+
+    // FIXME
+    // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and
+    // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y
+    // is too complex. So css-transfrom dont support in this case temporarily.
+    if (calculate || !env$1.canvasSupported) {
+        defaultGetZrXY(el, e, out);
+    }
+    // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned
+    // ancestor element, so we should make sure el is positioned (e.g., not position:static).
+    // BTW1, Webkit don't return the same results as FF in non-simple cases (like add
+    // zoom-factor, overflow / opacity layers, transforms ...)
+    // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.
+    // <https://bugs.jquery.com/ticket/8523#comment:14>
+    // BTW3, In ff, offsetX/offsetY is always 0.
+    else if (env$1.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {
+        out.zrX = e.layerX;
+        out.zrY = e.layerY;
+    }
+    // For IE6+, chrome, safari, opera. (When will ff support offsetX?)
+    else if (e.offsetX != null) {
+        out.zrX = e.offsetX;
+        out.zrY = e.offsetY;
+    }
+    // For some other device, e.g., IOS safari.
+    else {
+        defaultGetZrXY(el, e, out);
+    }
+
+    return out;
+}
+
+function defaultGetZrXY(el, e, out) {
+    // This well-known method below does not support css transform.
+    var box = getBoundingClientRect(el);
+    out.zrX = e.clientX - box.left;
+    out.zrY = e.clientY - box.top;
+}
+
+/**
+ * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标.
+ * `calculate` is optional, default false.
+ */
+function normalizeEvent(el, e, calculate) {
+
+    e = e || window.event;
+
+    if (e.zrX != null) {
+        return e;
+    }
+
+    var eventType = e.type;
+    var isTouch = eventType && eventType.indexOf('touch') >= 0;
+
+    if (!isTouch) {
+        clientToLocal(el, e, e, calculate);
+        e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
+    }
+    else {
+        var touch = eventType != 'touchend'
+            ? e.targetTouches[0]
+            : e.changedTouches[0];
+        touch && clientToLocal(el, touch, e, calculate);
+    }
+
+    // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;
+    // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js
+    // If e.which has been defined, if may be readonly,
+    // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
+    var button = e.button;
+    if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {
+        e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));
+    }
+
+    return e;
+}
+
+/**
+ * @param {HTMLElement} el
+ * @param {string} name
+ * @param {Function} handler
+ */
+function addEventListener(el, name, handler) {
+    if (isDomLevel2) {
+        // Reproduct the console warning:
+        // [Violation] Added non-passive event listener to a scroll-blocking <some> event.
+        // Consider marking event handler as 'passive' to make the page more responsive.
+        // Just set console log level: verbose in chrome dev tool.
+        // then the warning log will be printed when addEventListener called.
+        // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
+        // We have not yet found a neat way to using passive. Because in zrender the dom event
+        // listener delegate all of the upper events of element. Some of those events need
+        // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.
+        // Before passive can be adopted, these issues should be considered:
+        // (1) Whether and how a zrender user specifies an event listener passive. And by default,
+        // passive or not.
+        // (2) How to tread that some zrender event listener is passive, and some is not. If
+        // we use other way but not preventDefault of mousewheel and touchmove, browser
+        // compatibility should be handled.
+
+        // var opts = (env.passiveSupported && name === 'mousewheel')
+        //     ? {passive: true}
+        //     // By default, the third param of el.addEventListener is `capture: false`.
+        //     : void 0;
+        // el.addEventListener(name, handler /* , opts */);
+        el.addEventListener(name, handler);
+    }
+    else {
+        el.attachEvent('on' + name, handler);
+    }
+}
+
+function removeEventListener(el, name, handler) {
+    if (isDomLevel2) {
+        el.removeEventListener(name, handler);
+    }
+    else {
+        el.detachEvent('on' + name, handler);
+    }
+}
+
+/**
+ * preventDefault and stopPropagation.
+ * Notice: do not do that in zrender. Upper application
+ * do that if necessary.
+ *
+ * @memberOf module:zrender/core/event
+ * @method
+ * @param {Event} e : event对象
+ */
+var stop = isDomLevel2
+    ? function (e) {
+        e.preventDefault();
+        e.stopPropagation();
+        e.cancelBubble = true;
+    }
+    : function (e) {
+        e.returnValue = false;
+        e.cancelBubble = true;
+    };
+
+function notLeftMouse(e) {
+    // If e.which is undefined, considered as left mouse event.
+    return e.which > 1;
+}
+
+/**
+ * 动画主类, 调度和管理所有动画控制器
+ *
+ * @module zrender/animation/Animation
+ * @author pissang(https://github.com/pissang)
+ */
+// TODO Additive animation
+// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/
+// https://developer.apple.com/videos/wwdc2014/#236
+
+/**
+ * @typedef {Object} IZRenderStage
+ * @property {Function} update
+ */
+
+/**
+ * @alias module:zrender/animation/Animation
+ * @constructor
+ * @param {Object} [options]
+ * @param {Function} [options.onframe]
+ * @param {IZRenderStage} [options.stage]
+ * @example
+ *     var animation = new Animation();
+ *     var obj = {
+ *         x: 100,
+ *         y: 100
+ *     };
+ *     animation.animate(node.position)
+ *         .when(1000, {
+ *             x: 500,
+ *             y: 500
+ *         })
+ *         .when(2000, {
+ *             x: 100,
+ *             y: 100
+ *         })
+ *         .start('spline');
+ */
+var Animation = function (options) {
+
+    options = options || {};
+
+    this.stage = options.stage || {};
+
+    this.onframe = options.onframe || function() {};
+
+    // private properties
+    this._clips = [];
+
+    this._running = false;
+
+    this._time;
+
+    this._pausedTime;
+
+    this._pauseStart;
+
+    this._paused = false;
+
+    Eventful.call(this);
+};
+
+Animation.prototype = {
+
+    constructor: Animation,
+    /**
+     * 添加 clip
+     * @param {module:zrender/animation/Clip} clip
+     */
+    addClip: function (clip) {
+        this._clips.push(clip);
+    },
+    /**
+     * 添加 animator
+     * @param {module:zrender/animation/Animator} animator
+     */
+    addAnimator: function (animator) {
+        animator.animation = this;
+        var clips = animator.getClips();
+        for (var i = 0; i < clips.length; i++) {
+            this.addClip(clips[i]);
+        }
+    },
+    /**
+     * 删除动画片段
+     * @param {module:zrender/animation/Clip} clip
+     */
+    removeClip: function(clip) {
+        var idx = indexOf(this._clips, clip);
+        if (idx >= 0) {
+            this._clips.splice(idx, 1);
+        }
+    },
+
+    /**
+     * 删除动画片段
+     * @param {module:zrender/animation/Animator} animator
+     */
+    removeAnimator: function (animator) {
+        var clips = animator.getClips();
+        for (var i = 0; i < clips.length; i++) {
+            this.removeClip(clips[i]);
+        }
+        animator.animation = null;
+    },
+
+    _update: function() {
+        var time = new Date().getTime() - this._pausedTime;
+        var delta = time - this._time;
+        var clips = this._clips;
+        var len = clips.length;
+
+        var deferredEvents = [];
+        var deferredClips = [];
+        for (var i = 0; i < len; i++) {
+            var clip = clips[i];
+            var e = clip.step(time, delta);
+            // Throw out the events need to be called after
+            // stage.update, like destroy
+            if (e) {
+                deferredEvents.push(e);
+                deferredClips.push(clip);
+            }
+        }
+
+        // Remove the finished clip
+        for (var i = 0; i < len;) {
+            if (clips[i]._needsRemove) {
+                clips[i] = clips[len - 1];
+                clips.pop();
+                len--;
+            }
+            else {
+                i++;
+            }
+        }
+
+        len = deferredEvents.length;
+        for (var i = 0; i < len; i++) {
+            deferredClips[i].fire(deferredEvents[i]);
+        }
+
+        this._time = time;
+
+        this.onframe(delta);
+
+        // 'frame' should be triggered before stage, because upper application
+        // depends on the sequence (e.g., echarts-stream and finish
+        // event judge)
+        this.trigger('frame', delta);
+
+        if (this.stage.update) {
+            this.stage.update();
+        }
+    },
+
+    _startLoop: function () {
+        var self = this;
+
+        this._running = true;
+
+        function step() {
+            if (self._running) {
+
+                requestAnimationFrame(step);
+
+                !self._paused && self._update();
+            }
+        }
+
+        requestAnimationFrame(step);
+    },
+
+    /**
+     * Start animation.
+     */
+    start: function () {
+
+        this._time = new Date().getTime();
+        this._pausedTime = 0;
+
+        this._startLoop();
+    },
+
+    /**
+     * Stop animation.
+     */
+    stop: function () {
+        this._running = false;
+    },
+
+    /**
+     * Pause animation.
+     */
+    pause: function () {
+        if (!this._paused) {
+            this._pauseStart = new Date().getTime();
+            this._paused = true;
+        }
+    },
+
+    /**
+     * Resume animation.
+     */
+    resume: function () {
+        if (this._paused) {
+            this._pausedTime += (new Date().getTime()) - this._pauseStart;
+            this._paused = false;
+        }
+    },
+
+    /**
+     * Clear animation.
+     */
+    clear: function () {
+        this._clips = [];
+    },
+
+    /**
+     * Whether animation finished.
+     */
+    isFinished: function () {
+        return !this._clips.length;
+    },
+
+    /**
+     * Creat animator for a target, whose props can be animated.
+     *
+     * @param  {Object} target
+     * @param  {Object} options
+     * @param  {boolean} [options.loop=false] Whether loop animation.
+     * @param  {Function} [options.getter=null] Get value from target.
+     * @param  {Function} [options.setter=null] Set value to target.
+     * @return {module:zrender/animation/Animation~Animator}
+     */
+    // TODO Gap
+    animate: function (target, options) {
+        options = options || {};
+
+        var animator = new Animator(
+            target,
+            options.loop,
+            options.getter,
+            options.setter
+        );
+
+        this.addAnimator(animator);
+
+        return animator;
+    }
+};
+
+mixin(Animation, Eventful);
+
+/**
+ * Only implements needed gestures for mobile.
+ */
+
+var GestureMgr = function () {
+
+    /**
+     * @private
+     * @type {Array.<Object>}
+     */
+    this._track = [];
+};
+
+GestureMgr.prototype = {
+
+    constructor: GestureMgr,
+
+    recognize: function (event, target, root) {
+        this._doTrack(event, target, root);
+        return this._recognize(event);
+    },
+
+    clear: function () {
+        this._track.length = 0;
+        return this;
+    },
+
+    _doTrack: function (event, target, root) {
+        var touches = event.touches;
+
+        if (!touches) {
+            return;
+        }
+
+        var trackItem = {
+            points: [],
+            touches: [],
+            target: target,
+            event: event
+        };
+
+        for (var i = 0, len = touches.length; i < len; i++) {
+            var touch = touches[i];
+            var pos = clientToLocal(root, touch, {});
+            trackItem.points.push([pos.zrX, pos.zrY]);
+            trackItem.touches.push(touch);
+        }
+
+        this._track.push(trackItem);
+    },
+
+    _recognize: function (event) {
+        for (var eventName in recognizers) {
+            if (recognizers.hasOwnProperty(eventName)) {
+                var gestureInfo = recognizers[eventName](this._track, event);
+                if (gestureInfo) {
+                    return gestureInfo;
+                }
+            }
+        }
+    }
+};
+
+function dist$1(pointPair) {
+    var dx = pointPair[1][0] - pointPair[0][0];
+    var dy = pointPair[1][1] - pointPair[0][1];
+
+    return Math.sqrt(dx * dx + dy * dy);
+}
+
+function center(pointPair) {
+    return [
+        (pointPair[0][0] + pointPair[1][0]) / 2,
+        (pointPair[0][1] + pointPair[1][1]) / 2
+    ];
+}
+
+var recognizers = {
+
+    pinch: function (track, event) {
+        var trackLen = track.length;
+
+        if (!trackLen) {
+            return;
+        }
+
+        var pinchEnd = (track[trackLen - 1] || {}).points;
+        var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;
+
+        if (pinchPre
+            && pinchPre.length > 1
+            && pinchEnd
+            && pinchEnd.length > 1
+        ) {
+            var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre);
+            !isFinite(pinchScale) && (pinchScale = 1);
+
+            event.pinchScale = pinchScale;
+
+            var pinchCenter = center(pinchEnd);
+            event.pinchX = pinchCenter[0];
+            event.pinchY = pinchCenter[1];
+
+            return {
+                type: 'pinch',
+                target: track[0].target,
+                event: event
+            };
+        }
+    }
+
+    // Only pinch currently.
+};
+
+var TOUCH_CLICK_DELAY = 300;
+
+var mouseHandlerNames = [
+    'click', 'dblclick', 'mousewheel', 'mouseout',
+    'mouseup', 'mousedown', 'mousemove', 'contextmenu'
+];
+
+var touchHandlerNames = [
+    'touchstart', 'touchend', 'touchmove'
+];
+
+var pointerEventNames = {
+    pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1
+};
+
+var pointerHandlerNames = map(mouseHandlerNames, function (name) {
+    var nm = name.replace('mouse', 'pointer');
+    return pointerEventNames[nm] ? nm : name;
+});
+
+function eventNameFix(name) {
+    return (name === 'mousewheel' && env$1.browser.firefox) ? 'DOMMouseScroll' : name;
+}
+
+function processGesture(proxy, event, stage) {
+    var gestureMgr = proxy._gestureMgr;
+
+    stage === 'start' && gestureMgr.clear();
+
+    var gestureInfo = gestureMgr.recognize(
+        event,
+        proxy.handler.findHover(event.zrX, event.zrY, null).target,
+        proxy.dom
+    );
+
+    stage === 'end' && gestureMgr.clear();
+
+    // Do not do any preventDefault here. Upper application do that if necessary.
+    if (gestureInfo) {
+        var type = gestureInfo.type;
+        event.gestureEvent = type;
+
+        proxy.handler.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event);
+    }
+}
+
+// function onMSGestureChange(proxy, event) {
+//     if (event.translationX || event.translationY) {
+//         // mousemove is carried by MSGesture to reduce the sensitivity.
+//         proxy.handler.dispatchToElement(event.target, 'mousemove', event);
+//     }
+//     if (event.scale !== 1) {
+//         event.pinchX = event.offsetX;
+//         event.pinchY = event.offsetY;
+//         event.pinchScale = event.scale;
+//         proxy.handler.dispatchToElement(event.target, 'pinch', event);
+//     }
+// }
+
+/**
+ * Prevent mouse event from being dispatched after Touch Events action
+ * @see <https://github.com/deltakosh/handjs/blob/master/src/hand.base.js>
+ * 1. Mobile browsers dispatch mouse events 300ms after touchend.
+ * 2. Chrome for Android dispatch mousedown for long-touch about 650ms
+ * Result: Blocking Mouse Events for 700ms.
+ */
+function setTouchTimer(instance) {
+    instance._touching = true;
+    clearTimeout(instance._touchTimer);
+    instance._touchTimer = setTimeout(function () {
+        instance._touching = false;
+    }, 700);
+}
+
+
+var domHandlers = {
+    /**
+     * Mouse move handler
+     * @inner
+     * @param {Event} event
+     */
+    mousemove: function (event) {
+        event = normalizeEvent(this.dom, event);
+
+        this.trigger('mousemove', event);
+    },
+
+    /**
+     * Mouse out handler
+     * @inner
+     * @param {Event} event
+     */
+    mouseout: function (event) {
+        event = normalizeEvent(this.dom, event);
+
+        var element = event.toElement || event.relatedTarget;
+        if (element != this.dom) {
+            while (element && element.nodeType != 9) {
+                // 忽略包含在root中的dom引起的mouseOut
+                if (element === this.dom) {
+                    return;
+                }
+
+                element = element.parentNode;
+            }
+        }
+
+        this.trigger('mouseout', event);
+    },
+
+    /**
+     * Touch开始响应函数
+     * @inner
+     * @param {Event} event
+     */
+    touchstart: function (event) {
+        // Default mouse behaviour should not be disabled here.
+        // For example, page may needs to be slided.
+        event = normalizeEvent(this.dom, event);
+
+        // Mark touch, which is useful in distinguish touch and
+        // mouse event in upper applicatoin.
+        event.zrByTouch = true;
+
+        this._lastTouchMoment = new Date();
+
+        processGesture(this, event, 'start');
+
+        // In touch device, trigger `mousemove`(`mouseover`) should
+        // be triggered, and must before `mousedown` triggered.
+        domHandlers.mousemove.call(this, event);
+
+        domHandlers.mousedown.call(this, event);
+
+        setTouchTimer(this);
+    },
+
+    /**
+     * Touch移动响应函数
+     * @inner
+     * @param {Event} event
+     */
+    touchmove: function (event) {
+
+        event = normalizeEvent(this.dom, event);
+
+        // Mark touch, which is useful in distinguish touch and
+        // mouse event in upper applicatoin.
+        event.zrByTouch = true;
+
+        processGesture(this, event, 'change');
+
+        // Mouse move should always be triggered no matter whether
+        // there is gestrue event, because mouse move and pinch may
+        // be used at the same time.
+        domHandlers.mousemove.call(this, event);
+
+        setTouchTimer(this);
+    },
+
+    /**
+     * Touch结束响应函数
+     * @inner
+     * @param {Event} event
+     */
+    touchend: function (event) {
+
+        event = normalizeEvent(this.dom, event);
+
+        // Mark touch, which is useful in distinguish touch and
+        // mouse event in upper applicatoin.
+        event.zrByTouch = true;
+
+        processGesture(this, event, 'end');
+
+        domHandlers.mouseup.call(this, event);
+
+        // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is
+        // triggered in `touchstart`. This seems to be illogical, but by this mechanism,
+        // we can conveniently implement "hover style" in both PC and touch device just
+        // by listening to `mouseover` to add "hover style" and listening to `mouseout`
+        // to remove "hover style" on an element, without any additional code for
+        // compatibility. (`mouseout` will not be triggered in `touchend`, so "hover
+        // style" will remain for user view)
+
+        // click event should always be triggered no matter whether
+        // there is gestrue event. System click can not be prevented.
+        if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {
+            domHandlers.click.call(this, event);
+        }
+
+        setTouchTimer(this);
+    },
+
+    pointerdown: function (event) {
+        domHandlers.mousedown.call(this, event);
+
+        // if (useMSGuesture(this, event)) {
+        //     this._msGesture.addPointer(event.pointerId);
+        // }
+    },
+
+    pointermove: function (event) {
+        // FIXME
+        // pointermove is so sensitive that it always triggered when
+        // tap(click) on touch screen, which affect some judgement in
+        // upper application. So, we dont support mousemove on MS touch
+        // device yet.
+        if (!isPointerFromTouch(event)) {
+            domHandlers.mousemove.call(this, event);
+        }
+    },
+
+    pointerup: function (event) {
+        domHandlers.mouseup.call(this, event);
+    },
+
+    pointerout: function (event) {
+        // pointerout will be triggered when tap on touch screen
+        // (IE11+/Edge on MS Surface) after click event triggered,
+        // which is inconsistent with the mousout behavior we defined
+        // in touchend. So we unify them.
+        // (check domHandlers.touchend for detailed explanation)
+        if (!isPointerFromTouch(event)) {
+            domHandlers.mouseout.call(this, event);
+        }
+    }
+};
+
+function isPointerFromTouch(event) {
+    var pointerType = event.pointerType;
+    return pointerType === 'pen' || pointerType === 'touch';
+}
+
+// function useMSGuesture(handlerProxy, event) {
+//     return isPointerFromTouch(event) && !!handlerProxy._msGesture;
+// }
+
+// Common handlers
+each$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {
+    domHandlers[name] = function (event) {
+        event = normalizeEvent(this.dom, event);
+        this.trigger(name, event);
+    };
+});
+
+/**
+ * 为控制类实例初始化dom 事件处理函数
+ *
+ * @inner
+ * @param {module:zrender/Handler} instance 控制类实例
+ */
+function initDomHandler(instance) {
+    each$1(touchHandlerNames, function (name) {
+        instance._handlers[name] = bind(domHandlers[name], instance);
+    });
+
+    each$1(pointerHandlerNames, function (name) {
+        instance._handlers[name] = bind(domHandlers[name], instance);
+    });
+
+    each$1(mouseHandlerNames, function (name) {
+        instance._handlers[name] = makeMouseHandler(domHandlers[name], instance);
+    });
+
+    function makeMouseHandler(fn, instance) {
+        return function () {
+            if (instance._touching) {
+                return;
+            }
+            return fn.apply(instance, arguments);
+        };
+    }
+}
+
+
+function HandlerDomProxy(dom) {
+    Eventful.call(this);
+
+    this.dom = dom;
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._touching = false;
+
+    /**
+     * @private
+     * @type {number}
+     */
+    this._touchTimer;
+
+    /**
+     * @private
+     * @type {module:zrender/core/GestureMgr}
+     */
+    this._gestureMgr = new GestureMgr();
+
+    this._handlers = {};
+
+    initDomHandler(this);
+
+    if (env$1.pointerEventsSupported) { // Only IE11+/Edge
+        // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),
+        // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event
+        // at the same time.
+        // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on
+        // screen, which do not occurs in pointer event.
+        // So we use pointer event to both detect touch gesture and mouse behavior.
+        mountHandlers(pointerHandlerNames, this);
+
+        // FIXME
+        // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,
+        // which does not prevent defuault behavior occasionally (which may cause view port
+        // zoomed in but use can not zoom it back). And event.preventDefault() does not work.
+        // So we have to not to use MSGesture and not to support touchmove and pinch on MS
+        // touch screen. And we only support click behavior on MS touch screen now.
+
+        // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.
+        // We dont support touch on IE on win7.
+        // See <https://msdn.microsoft.com/en-us/library/dn433243(v=vs.85).aspx>
+        // if (typeof MSGesture === 'function') {
+        //     (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line
+        //     dom.addEventListener('MSGestureChange', onMSGestureChange);
+        // }
+    }
+    else {
+        if (env$1.touchEventsSupported) {
+            mountHandlers(touchHandlerNames, this);
+            // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.
+            // addEventListener(root, 'mouseout', this._mouseoutHandler);
+        }
+
+        // 1. Considering some devices that both enable touch and mouse event (like on MS Surface
+        // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise
+        // mouse event can not be handle in those devices.
+        // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent
+        // mouseevent after touch event triggered, see `setTouchTimer`.
+        mountHandlers(mouseHandlerNames, this);
+    }
+
+    function mountHandlers(handlerNames, instance) {
+        each$1(handlerNames, function (name) {
+            addEventListener(dom, eventNameFix(name), instance._handlers[name]);
+        }, instance);
+    }
+}
+
+var handlerDomProxyProto = HandlerDomProxy.prototype;
+handlerDomProxyProto.dispose = function () {
+    var handlerNames = mouseHandlerNames.concat(touchHandlerNames);
+
+    for (var i = 0; i < handlerNames.length; i++) {
+        var name = handlerNames[i];
+        removeEventListener(this.dom, eventNameFix(name), this._handlers[name]);
+    }
+};
+
+handlerDomProxyProto.setCursor = function (cursorStyle) {
+    this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');
+};
+
+mixin(HandlerDomProxy, Eventful);
+
+/*!
+* 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 useVML = !env$1.canvasSupported;
+
+var painterCtors = {
+    canvas: Painter
+};
+
+var instances$1 = {};    // ZRender实例map索引
+
+/**
+ * @type {string}
+ */
+var version$1 = '4.0.4';
+
+/**
+ * Initializing a zrender instance
+ * @param {HTMLElement} dom
+ * @param {Object} opts
+ * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'
+ * @param {number} [opts.devicePixelRatio]
+ * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)
+ * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)
+ * @return {module:zrender/ZRender}
+ */
+function init$1(dom, opts) {
+    var zr = new ZRender(guid(), dom, opts);
+    instances$1[zr.id] = zr;
+    return zr;
+}
+
+/**
+ * Dispose zrender instance
+ * @param {module:zrender/ZRender} zr
+ */
+function dispose$1(zr) {
+    if (zr) {
+        zr.dispose();
+    }
+    else {
+        for (var key in instances$1) {
+            if (instances$1.hasOwnProperty(key)) {
+                instances$1[key].dispose();
+            }
+        }
+        instances$1 = {};
+    }
+
+    return this;
+}
+
+/**
+ * Get zrender instance by id
+ * @param {string} id zrender instance id
+ * @return {module:zrender/ZRender}
+ */
+function getInstance(id) {
+    return instances$1[id];
+}
+
+function registerPainter(name, Ctor) {
+    painterCtors[name] = Ctor;
+}
+
+function delInstance(id) {
+    delete instances$1[id];
+}
+
+/**
+ * @module zrender/ZRender
+ */
+/**
+ * @constructor
+ * @alias module:zrender/ZRender
+ * @param {string} id
+ * @param {HTMLElement} dom
+ * @param {Object} opts
+ * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'
+ * @param {number} [opts.devicePixelRatio]
+ * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)
+ * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)
+ */
+var ZRender = function (id, dom, opts) {
+
+    opts = opts || {};
+
+    /**
+     * @type {HTMLDomElement}
+     */
+    this.dom = dom;
+
+    /**
+     * @type {string}
+     */
+    this.id = id;
+
+    var self = this;
+    var storage = new Storage();
+
+    var rendererType = opts.renderer;
+    // TODO WebGL
+    if (useVML) {
+        if (!painterCtors.vml) {
+            throw new Error('You need to require \'zrender/vml/vml\' to support IE8');
+        }
+        rendererType = 'vml';
+    }
+    else if (!rendererType || !painterCtors[rendererType]) {
+        rendererType = 'canvas';
+    }
+    var painter = new painterCtors[rendererType](dom, storage, opts, id);
+
+    this.storage = storage;
+    this.painter = painter;
+
+    var handerProxy = (!env$1.node && !env$1.worker) ? new HandlerDomProxy(painter.getViewportRoot()) : null;
+    this.handler = new Handler(storage, painter, handerProxy, painter.root);
+
+    /**
+     * @type {module:zrender/animation/Animation}
+     */
+    this.animation = new Animation({
+        stage: {
+            update: bind(this.flush, this)
+        }
+    });
+    this.animation.start();
+
+    /**
+     * @type {boolean}
+     * @private
+     */
+    this._needsRefresh;
+
+    // 修改 storage.delFromStorage, 每次删除元素之前删除动画
+    // FIXME 有点ugly
+    var oldDelFromStorage = storage.delFromStorage;
+    var oldAddToStorage = storage.addToStorage;
+
+    storage.delFromStorage = function (el) {
+        oldDelFromStorage.call(storage, el);
+
+        el && el.removeSelfFromZr(self);
+    };
+
+    storage.addToStorage = function (el) {
+        oldAddToStorage.call(storage, el);
+
+        el.addSelfToZr(self);
+    };
+};
+
+ZRender.prototype = {
+
+    constructor: ZRender,
+    /**
+     * 获取实例唯一标识
+     * @return {string}
+     */
+    getId: function () {
+        return this.id;
+    },
+
+    /**
+     * 添加元素
+     * @param  {module:zrender/Element} el
+     */
+    add: function (el) {
+        this.storage.addRoot(el);
+        this._needsRefresh = true;
+    },
+
+    /**
+     * 删除元素
+     * @param  {module:zrender/Element} el
+     */
+    remove: function (el) {
+        this.storage.delRoot(el);
+        this._needsRefresh = true;
+    },
+
+    /**
+     * Change configuration of layer
+     * @param {string} zLevel
+     * @param {Object} config
+     * @param {string} [config.clearColor=0] Clear color
+     * @param {string} [config.motionBlur=false] If enable motion blur
+     * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer
+    */
+    configLayer: function (zLevel, config) {
+        if (this.painter.configLayer) {
+            this.painter.configLayer(zLevel, config);
+        }
+        this._needsRefresh = true;
+    },
+
+    /**
+     * Set background color
+     * @param {string} backgroundColor
+     */
+    setBackgroundColor: function (backgroundColor) {
+        if (this.painter.setBackgroundColor) {
+            this.painter.setBackgroundColor(backgroundColor);
+        }
+        this._needsRefresh = true;
+    },
+
+    /**
+     * Repaint the canvas immediately
+     */
+    refreshImmediately: function () {
+        // var start = new Date();
+        // Clear needsRefresh ahead to avoid something wrong happens in refresh
+        // Or it will cause zrender refreshes again and again.
+        this._needsRefresh = false;
+        this.painter.refresh();
+        /**
+         * Avoid trigger zr.refresh in Element#beforeUpdate hook
+         */
+        this._needsRefresh = false;
+        // var end = new Date();
+        // var log = document.getElementById('log');
+        // if (log) {
+        //     log.innerHTML = log.innerHTML + '<br>' + (end - start);
+        // }
+    },
+
+    /**
+     * Mark and repaint the canvas in the next frame of browser
+     */
+    refresh: function() {
+        this._needsRefresh = true;
+    },
+
+    /**
+     * Perform all refresh
+     */
+    flush: function () {
+        var triggerRendered;
+
+        if (this._needsRefresh) {
+            triggerRendered = true;
+            this.refreshImmediately();
+        }
+        if (this._needsRefreshHover) {
+            triggerRendered = true;
+            this.refreshHoverImmediately();
+        }
+
+        triggerRendered && this.trigger('rendered');
+    },
+
+    /**
+     * Add element to hover layer
+     * @param  {module:zrender/Element} el
+     * @param {Object} style
+     */
+    addHover: function (el, style) {
+        if (this.painter.addHover) {
+            this.painter.addHover(el, style);
+            this.refreshHover();
+        }
+    },
+
+    /**
+     * Add element from hover layer
+     * @param  {module:zrender/Element} el
+     */
+    removeHover: function (el) {
+        if (this.painter.removeHover) {
+            this.painter.removeHover(el);
+            this.refreshHover();
+        }
+    },
+
+    /**
+     * Clear all hover elements in hover layer
+     * @param  {module:zrender/Element} el
+     */
+    clearHover: function () {
+        if (this.painter.clearHover) {
+            this.painter.clearHover();
+            this.refreshHover();
+        }
+    },
+
+    /**
+     * Refresh hover in next frame
+     */
+    refreshHover: function () {
+        this._needsRefreshHover = true;
+    },
+
+    /**
+     * Refresh hover immediately
+     */
+    refreshHoverImmediately: function () {
+        this._needsRefreshHover = false;
+        this.painter.refreshHover && this.painter.refreshHover();
+    },
+
+    /**
+     * Resize the canvas.
+     * Should be invoked when container size is changed
+     * @param {Object} [opts]
+     * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)
+     * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)
+     */
+    resize: function(opts) {
+        opts = opts || {};
+        this.painter.resize(opts.width, opts.height);
+        this.handler.resize();
+    },
+
+    /**
+     * Stop and clear all animation immediately
+     */
+    clearAnimation: function () {
+        this.animation.clear();
+    },
+
+    /**
+     * Get container width
+     */
+    getWidth: function() {
+        return this.painter.getWidth();
+    },
+
+    /**
+     * Get container height
+     */
+    getHeight: function() {
+        return this.painter.getHeight();
+    },
+
+    /**
+     * Export the canvas as Base64 URL
+     * @param {string} type
+     * @param {string} [backgroundColor='#fff']
+     * @return {string} Base64 URL
+     */
+    // toDataURL: function(type, backgroundColor) {
+    //     return this.painter.getRenderedCanvas({
+    //         backgroundColor: backgroundColor
+    //     }).toDataURL(type);
+    // },
+
+    /**
+     * Converting a path to image.
+     * It has much better performance of drawing image rather than drawing a vector path.
+     * @param {module:zrender/graphic/Path} e
+     * @param {number} width
+     * @param {number} height
+     */
+    pathToImage: function(e, dpr) {
+        return this.painter.pathToImage(e, dpr);
+    },
+
+    /**
+     * Set default cursor
+     * @param {string} [cursorStyle='default'] 例如 crosshair
+     */
+    setCursorStyle: function (cursorStyle) {
+        this.handler.setCursorStyle(cursorStyle);
+    },
+
+    /**
+     * Find hovered element
+     * @param {number} x
+     * @param {number} y
+     * @return {Object} {target, topTarget}
+     */
+    findHover: function (x, y) {
+        return this.handler.findHover(x, y);
+    },
+
+    /**
+     * Bind event
+     *
+     * @param {string} eventName Event name
+     * @param {Function} eventHandler Handler function
+     * @param {Object} [context] Context object
+     */
+    on: function(eventName, eventHandler, context) {
+        this.handler.on(eventName, eventHandler, context);
+    },
+
+    /**
+     * Unbind event
+     * @param {string} eventName Event name
+     * @param {Function} [eventHandler] Handler function
+     */
+    off: function(eventName, eventHandler) {
+        this.handler.off(eventName, eventHandler);
+    },
+
+    /**
+     * Trigger event manually
+     *
+     * @param {string} eventName Event name
+     * @param {event=} event Event object
+     */
+    trigger: function (eventName, event) {
+        this.handler.trigger(eventName, event);
+    },
+
+
+    /**
+     * Clear all objects and the canvas.
+     */
+    clear: function () {
+        this.storage.delRoot();
+        this.painter.clear();
+    },
+
+    /**
+     * Dispose self.
+     */
+    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;
+
+        delInstance(this.id);
+    }
+};
+
+
+
+var zrender = (Object.freeze || Object)({
+	version: version$1,
+	init: init$1,
+	dispose: dispose$1,
+	getInstance: getInstance,
+	registerPainter: registerPainter
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$2 = each$1;
+var isObject$2 = isObject$1;
+var isArray$1 = isArray;
+
+/**
+ * Make the name displayable. But we should
+ * make sure it is not duplicated with user
+ * specified name, so use '\0';
+ */
+var DUMMY_COMPONENT_NAME_PREFIX = 'series\0';
+
+/**
+ * If value is not array, then translate it to array.
+ * @param  {*} value
+ * @return {Array} [value] or value
+ */
+function normalizeToArray(value) {
+    return value instanceof Array
+        ? value
+        : value == null
+        ? []
+        : [value];
+}
+
+/**
+ * Sync default option between normal and emphasis like `position` and `show`
+ * In case some one will write code like
+ *     label: {
+ *          show: false,
+ *          position: 'outside',
+ *          fontSize: 18
+ *     },
+ *     emphasis: {
+ *          label: { show: true }
+ *     }
+ * @param {Object} opt
+ * @param {string} key
+ * @param {Array.<string>} subOpts
+ */
+function defaultEmphasis(opt, key, subOpts) {
+    // Caution: performance sensitive.
+    if (opt) {
+        opt[key] = opt[key] || {};
+        opt.emphasis = opt.emphasis || {};
+        opt.emphasis[key] = opt.emphasis[key] || {};
+
+        // Default emphasis option from normal
+        for (var i = 0, len = subOpts.length; i < len; i++) {
+            var subOptName = subOpts[i];
+            if (!opt.emphasis[key].hasOwnProperty(subOptName)
+                && opt[key].hasOwnProperty(subOptName)
+            ) {
+                opt.emphasis[key][subOptName] = opt[key][subOptName];
+            }
+        }
+    }
+}
+
+var TEXT_STYLE_OPTIONS = [
+    'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',
+    'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth',
+    'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline',
+    'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY',
+    'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY',
+    'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding'
+];
+
+// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([
+//     'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',
+//     'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',
+//     // FIXME: deprecated, check and remove it.
+//     'textStyle'
+// ]);
+
+/**
+ * The method do not ensure performance.
+ * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]
+ * This helper method retieves value from data.
+ * @param {string|number|Date|Array|Object} dataItem
+ * @return {number|string|Date|Array.<number|string|Date>}
+ */
+function getDataItemValue(dataItem) {
+    return (isObject$2(dataItem) && !isArray$1(dataItem) && !(dataItem instanceof Date))
+        ? dataItem.value : dataItem;
+}
+
+/**
+ * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]
+ * This helper method determine if dataItem has extra option besides value
+ * @param {string|number|Date|Array|Object} dataItem
+ */
+function isDataItemOption(dataItem) {
+    return isObject$2(dataItem)
+        && !(dataItem instanceof Array);
+        // // markLine data can be array
+        // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));
+}
+
+/**
+ * Mapping to exists for merge.
+ *
+ * @public
+ * @param {Array.<Object>|Array.<module:echarts/model/Component>} exists
+ * @param {Object|Array.<Object>} newCptOptions
+ * @return {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],
+ *                          index of which is the same as exists.
+ */
+function mappingToExists(exists, newCptOptions) {
+    // Mapping by the order by original option (but not order of
+    // new option) in merge mode. Because we should ensure
+    // some specified index (like xAxisIndex) is consistent with
+    // original option, which is easy to understand, espatially in
+    // media query. And in most case, merge option is used to
+    // update partial option but not be expected to change order.
+    newCptOptions = (newCptOptions || []).slice();
+
+    var result = map(exists || [], function (obj, index) {
+        return {exist: obj};
+    });
+
+    // Mapping by id or name if specified.
+    each$2(newCptOptions, function (cptOption, index) {
+        if (!isObject$2(cptOption)) {
+            return;
+        }
+
+        // id has highest priority.
+        for (var i = 0; i < result.length; i++) {
+            if (!result[i].option // Consider name: two map to one.
+                && cptOption.id != null
+                && result[i].exist.id === cptOption.id + ''
+            ) {
+                result[i].option = cptOption;
+                newCptOptions[index] = null;
+                return;
+            }
+        }
+
+        for (var i = 0; i < result.length; i++) {
+            var exist = result[i].exist;
+            if (!result[i].option // Consider name: two map to one.
+                // Can not match when both ids exist but different.
+                && (exist.id == null || cptOption.id == null)
+                && cptOption.name != null
+                && !isIdInner(cptOption)
+                && !isIdInner(exist)
+                && exist.name === cptOption.name + ''
+            ) {
+                result[i].option = cptOption;
+                newCptOptions[index] = null;
+                return;
+            }
+        }
+    });
+
+    // Otherwise mapping by index.
+    each$2(newCptOptions, function (cptOption, index) {
+        if (!isObject$2(cptOption)) {
+            return;
+        }
+
+        var i = 0;
+        for (; i < result.length; i++) {
+            var exist = result[i].exist;
+            if (!result[i].option
+                // Existing model that already has id should be able to
+                // mapped to (because after mapping performed model may
+                // be assigned with a id, whish should not affect next
+                // mapping), except those has inner id.
+                && !isIdInner(exist)
+                // Caution:
+                // Do not overwrite id. But name can be overwritten,
+                // because axis use name as 'show label text'.
+                // 'exist' always has id and name and we dont
+                // need to check it.
+                && cptOption.id == null
+            ) {
+                result[i].option = cptOption;
+                break;
+            }
+        }
+
+        if (i >= result.length) {
+            result.push({option: cptOption});
+        }
+    });
+
+    return result;
+}
+
+/**
+ * Make id and name for mapping result (result of mappingToExists)
+ * into `keyInfo` field.
+ *
+ * @public
+ * @param {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],
+ *                          which order is the same as exists.
+ * @return {Array.<Object>} The input.
+ */
+function makeIdAndName(mapResult) {
+    // We use this id to hash component models and view instances
+    // in echarts. id can be specified by user, or auto generated.
+
+    // The id generation rule ensures new view instance are able
+    // to mapped to old instance when setOption are called in
+    // no-merge mode. So we generate model id by name and plus
+    // type in view id.
+
+    // name can be duplicated among components, which is convenient
+    // to specify multi components (like series) by one name.
+
+    // Ensure that each id is distinct.
+    var idMap = createHashMap();
+
+    each$2(mapResult, function (item, index) {
+        var existCpt = item.exist;
+        existCpt && idMap.set(existCpt.id, item);
+    });
+
+    each$2(mapResult, function (item, index) {
+        var opt = item.option;
+
+        assert$1(
+            !opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item,
+            'id duplicates: ' + (opt && opt.id)
+        );
+
+        opt && opt.id != null && idMap.set(opt.id, item);
+        !item.keyInfo && (item.keyInfo = {});
+    });
+
+    // Make name and id.
+    each$2(mapResult, function (item, index) {
+        var existCpt = item.exist;
+        var opt = item.option;
+        var keyInfo = item.keyInfo;
+
+        if (!isObject$2(opt)) {
+            return;
+        }
+
+        // name can be overwitten. Consider case: axis.name = '20km'.
+        // But id generated by name will not be changed, which affect
+        // only in that case: setOption with 'not merge mode' and view
+        // instance will be recreated, which can be accepted.
+        keyInfo.name = opt.name != null
+            ? opt.name + ''
+            : existCpt
+            ? existCpt.name
+            // Avoid diffferent series has the same name,
+            // because name may be used like in color pallet.
+            : DUMMY_COMPONENT_NAME_PREFIX + index;
+
+        if (existCpt) {
+            keyInfo.id = existCpt.id;
+        }
+        else if (opt.id != null) {
+            keyInfo.id = opt.id + '';
+        }
+        else {
+            // Consider this situatoin:
+            //  optionA: [{name: 'a'}, {name: 'a'}, {..}]
+            //  optionB [{..}, {name: 'a'}, {name: 'a'}]
+            // Series with the same name between optionA and optionB
+            // should be mapped.
+            var idNum = 0;
+            do {
+                keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++;
+            }
+            while (idMap.get(keyInfo.id));
+        }
+
+        idMap.set(keyInfo.id, item);
+    });
+}
+
+function isNameSpecified(componentModel) {
+    var name = componentModel.name;
+    // Is specified when `indexOf` get -1 or > 0.
+    return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));
+}
+
+/**
+ * @public
+ * @param {Object} cptOption
+ * @return {boolean}
+ */
+function isIdInner(cptOption) {
+    return isObject$2(cptOption)
+        && cptOption.id
+        && (cptOption.id + '').indexOf('\0_ec_\0') === 0;
+}
+
+/**
+ * A helper for removing duplicate items between batchA and batchB,
+ * and in themselves, and categorize by series.
+ *
+ * @param {Array.<Object>} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]
+ * @param {Array.<Object>} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]
+ * @return {Array.<Array.<Object>, Array.<Object>>} result: [resultBatchA, resultBatchB]
+ */
+function compressBatches(batchA, batchB) {
+    var mapA = {};
+    var mapB = {};
+
+    makeMap(batchA || [], mapA);
+    makeMap(batchB || [], mapB, mapA);
+
+    return [mapToArray(mapA), mapToArray(mapB)];
+
+    function makeMap(sourceBatch, map$$1, otherMap) {
+        for (var i = 0, len = sourceBatch.length; i < len; i++) {
+            var seriesId = sourceBatch[i].seriesId;
+            var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);
+            var otherDataIndices = otherMap && otherMap[seriesId];
+
+            for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {
+                var dataIndex = dataIndices[j];
+
+                if (otherDataIndices && otherDataIndices[dataIndex]) {
+                    otherDataIndices[dataIndex] = null;
+                }
+                else {
+                    (map$$1[seriesId] || (map$$1[seriesId] = {}))[dataIndex] = 1;
+                }
+            }
+        }
+    }
+
+    function mapToArray(map$$1, isData) {
+        var result = [];
+        for (var i in map$$1) {
+            if (map$$1.hasOwnProperty(i) && map$$1[i] != null) {
+                if (isData) {
+                    result.push(+i);
+                }
+                else {
+                    var dataIndices = mapToArray(map$$1[i], true);
+                    dataIndices.length && result.push({seriesId: i, dataIndex: dataIndices});
+                }
+            }
+        }
+        return result;
+    }
+}
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name
+ *                         each of which can be Array or primary type.
+ * @return {number|Array.<number>} dataIndex If not found, return undefined/null.
+ */
+function queryDataIndex(data, payload) {
+    if (payload.dataIndexInside != null) {
+        return payload.dataIndexInside;
+    }
+    else if (payload.dataIndex != null) {
+        return isArray(payload.dataIndex)
+            ? map(payload.dataIndex, function (value) {
+                return data.indexOfRawIndex(value);
+            })
+            : data.indexOfRawIndex(payload.dataIndex);
+    }
+    else if (payload.name != null) {
+        return isArray(payload.name)
+            ? map(payload.name, function (value) {
+                return data.indexOfName(value);
+            })
+            : data.indexOfName(payload.name);
+    }
+}
+
+/**
+ * Enable property storage to any host object.
+ * Notice: Serialization is not supported.
+ *
+ * For example:
+ * var inner = zrUitl.makeInner();
+ *
+ * function some1(hostObj) {
+ *      inner(hostObj).someProperty = 1212;
+ *      ...
+ * }
+ * function some2() {
+ *      var fields = inner(this);
+ *      fields.someProperty1 = 1212;
+ *      fields.someProperty2 = 'xx';
+ *      ...
+ * }
+ *
+ * @return {Function}
+ */
+function makeInner() {
+    // Consider different scope by es module import.
+    var key = '__\0ec_inner_' + innerUniqueIndex++ + '_' + Math.random().toFixed(5);
+    return function (hostObj) {
+        return hostObj[key] || (hostObj[key] = {});
+    };
+}
+var innerUniqueIndex = 0;
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ * @param {string|Object} finder
+ *        If string, e.g., 'geo', means {geoIndex: 0}.
+ *        If Object, could contain some of these properties below:
+ *        {
+ *            seriesIndex, seriesId, seriesName,
+ *            geoIndex, geoId, geoName,
+ *            bmapIndex, bmapId, bmapName,
+ *            xAxisIndex, xAxisId, xAxisName,
+ *            yAxisIndex, yAxisId, yAxisName,
+ *            gridIndex, gridId, gridName,
+ *            ... (can be extended)
+ *        }
+ *        Each properties can be number|string|Array.<number>|Array.<string>
+ *        For example, a finder could be
+ *        {
+ *            seriesIndex: 3,
+ *            geoId: ['aa', 'cc'],
+ *            gridName: ['xx', 'rr']
+ *        }
+ *        xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)
+ *        If nothing or null/undefined specified, return nothing.
+ * @param {Object} [opt]
+ * @param {string} [opt.defaultMainType]
+ * @param {Array.<string>} [opt.includeMainTypes]
+ * @return {Object} result like:
+ *        {
+ *            seriesModels: [seriesModel1, seriesModel2],
+ *            seriesModel: seriesModel1, // The first model
+ *            geoModels: [geoModel1, geoModel2],
+ *            geoModel: geoModel1, // The first model
+ *            ...
+ *        }
+ */
+function parseFinder(ecModel, finder, opt) {
+    if (isString(finder)) {
+        var obj = {};
+        obj[finder + 'Index'] = 0;
+        finder = obj;
+    }
+
+    var defaultMainType = opt && opt.defaultMainType;
+    if (defaultMainType
+        && !has(finder, defaultMainType + 'Index')
+        && !has(finder, defaultMainType + 'Id')
+        && !has(finder, defaultMainType + 'Name')
+    ) {
+        finder[defaultMainType + 'Index'] = 0;
+    }
+
+    var result = {};
+
+    each$2(finder, function (value, key) {
+        var value = finder[key];
+
+        // Exclude 'dataIndex' and other illgal keys.
+        if (key === 'dataIndex' || key === 'dataIndexInside') {
+            result[key] = value;
+            return;
+        }
+
+        var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || [];
+        var mainType = parsedKey[1];
+        var queryType = (parsedKey[2] || '').toLowerCase();
+
+        if (!mainType
+            || !queryType
+            || value == null
+            || (queryType === 'index' && value === 'none')
+            || (opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0)
+        ) {
+            return;
+        }
+
+        var queryParam = {mainType: mainType};
+        if (queryType !== 'index' || value !== 'all') {
+            queryParam[queryType] = value;
+        }
+
+        var models = ecModel.queryComponents(queryParam);
+        result[mainType + 'Models'] = models;
+        result[mainType + 'Model'] = models[0];
+    });
+
+    return result;
+}
+
+function has(obj, prop) {
+    return obj && obj.hasOwnProperty(prop);
+}
+
+function setAttribute(dom, key, value) {
+    dom.setAttribute
+        ? dom.setAttribute(key, value)
+        : (dom[key] = value);
+}
+
+function getAttribute(dom, key) {
+    return dom.getAttribute
+        ? dom.getAttribute(key)
+        : dom[key];
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var TYPE_DELIMITER = '.';
+var IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';
+
+/**
+ * Notice, parseClassType('') should returns {main: '', sub: ''}
+ * @public
+ */
+function parseClassType$1(componentType) {
+    var ret = {main: '', sub: ''};
+    if (componentType) {
+        componentType = componentType.split(TYPE_DELIMITER);
+        ret.main = componentType[0] || '';
+        ret.sub = componentType[1] || '';
+    }
+    return ret;
+}
+
+/**
+ * @public
+ */
+function checkClassType(componentType) {
+    assert$1(
+        /^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType),
+        'componentType "' + componentType + '" illegal'
+    );
+}
+
+/**
+ * @public
+ */
+function enableClassExtend(RootClass, mandatoryMethods) {
+
+    RootClass.$constructor = RootClass;
+    RootClass.extend = function (proto) {
+
+        if (__DEV__) {
+            each$1(mandatoryMethods, function (method) {
+                if (!proto[method]) {
+                    console.warn(
+                        'Method `' + method + '` should be implemented'
+                        + (proto.type ? ' in ' + proto.type : '') + '.'
+                    );
+                }
+            });
+        }
+
+        var superClass = this;
+        var ExtendedClass = function () {
+            if (!proto.$constructor) {
+                superClass.apply(this, arguments);
+            }
+            else {
+                proto.$constructor.apply(this, arguments);
+            }
+        };
+
+        extend(ExtendedClass.prototype, proto);
+
+        ExtendedClass.extend = this.extend;
+        ExtendedClass.superCall = superCall;
+        ExtendedClass.superApply = superApply;
+        inherits(ExtendedClass, this);
+        ExtendedClass.superClass = superClass;
+
+        return ExtendedClass;
+    };
+}
+
+var classBase = 0;
+
+/**
+ * Can not use instanceof, consider different scope by
+ * cross domain or es module import in ec extensions.
+ * Mount a method "isInstance()" to Clz.
+ */
+function enableClassCheck(Clz) {
+    var classAttr = ['__\0is_clz', classBase++, Math.random().toFixed(3)].join('_');
+    Clz.prototype[classAttr] = true;
+
+    if (__DEV__) {
+        assert$1(!Clz.isInstance, 'The method "is" can not be defined.');
+    }
+
+    Clz.isInstance = function (obj) {
+        return !!(obj && obj[classAttr]);
+    };
+}
+
+// superCall should have class info, which can not be fetch from 'this'.
+// Consider this case:
+// class A has method f,
+// class B inherits class A, overrides method f, f call superApply('f'),
+// class C inherits class B, do not overrides method f,
+// then when method of class C is called, dead loop occured.
+function superCall(context, methodName) {
+    var args = slice(arguments, 2);
+    return this.superClass.prototype[methodName].apply(context, args);
+}
+
+function superApply(context, methodName, args) {
+    return this.superClass.prototype[methodName].apply(context, args);
+}
+
+/**
+ * @param {Object} entity
+ * @param {Object} options
+ * @param {boolean} [options.registerWhenExtend]
+ * @public
+ */
+function enableClassManagement(entity, options) {
+    options = options || {};
+
+    /**
+     * Component model classes
+     * key: componentType,
+     * value:
+     *     componentClass, when componentType is 'xxx'
+     *     or Object.<subKey, componentClass>, when componentType is 'xxx.yy'
+     * @type {Object}
+     */
+    var storage = {};
+
+    entity.registerClass = function (Clazz, componentType) {
+        if (componentType) {
+            checkClassType(componentType);
+            componentType = parseClassType$1(componentType);
+
+            if (!componentType.sub) {
+                if (__DEV__) {
+                    if (storage[componentType.main]) {
+                        console.warn(componentType.main + ' exists.');
+                    }
+                }
+                storage[componentType.main] = Clazz;
+            }
+            else if (componentType.sub !== IS_CONTAINER) {
+                var container = makeContainer(componentType);
+                container[componentType.sub] = Clazz;
+            }
+        }
+        return Clazz;
+    };
+
+    entity.getClass = function (componentMainType, subType, throwWhenNotFound) {
+        var Clazz = storage[componentMainType];
+
+        if (Clazz && Clazz[IS_CONTAINER]) {
+            Clazz = subType ? Clazz[subType] : null;
+        }
+
+        if (throwWhenNotFound && !Clazz) {
+            throw new Error(
+                !subType
+                    ? componentMainType + '.' + 'type should be specified.'
+                    : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.'
+            );
+        }
+
+        return Clazz;
+    };
+
+    entity.getClassesByMainType = function (componentType) {
+        componentType = parseClassType$1(componentType);
+
+        var result = [];
+        var obj = storage[componentType.main];
+
+        if (obj && obj[IS_CONTAINER]) {
+            each$1(obj, function (o, type) {
+                type !== IS_CONTAINER && result.push(o);
+            });
+        }
+        else {
+            result.push(obj);
+        }
+
+        return result;
+    };
+
+    entity.hasClass = function (componentType) {
+        // Just consider componentType.main.
+        componentType = parseClassType$1(componentType);
+        return !!storage[componentType.main];
+    };
+
+    /**
+     * @return {Array.<string>} Like ['aa', 'bb'], but can not be ['aa.xx']
+     */
+    entity.getAllClassMainTypes = function () {
+        var types = [];
+        each$1(storage, function (obj, type) {
+            types.push(type);
+        });
+        return types;
+    };
+
+    /**
+     * If a main type is container and has sub types
+     * @param  {string}  mainType
+     * @return {boolean}
+     */
+    entity.hasSubTypes = function (componentType) {
+        componentType = parseClassType$1(componentType);
+        var obj = storage[componentType.main];
+        return obj && obj[IS_CONTAINER];
+    };
+
+    entity.parseClassType = parseClassType$1;
+
+    function makeContainer(componentType) {
+        var container = storage[componentType.main];
+        if (!container || !container[IS_CONTAINER]) {
+            container = storage[componentType.main] = {};
+            container[IS_CONTAINER] = true;
+        }
+        return container;
+    }
+
+    if (options.registerWhenExtend) {
+        var originalExtend = entity.extend;
+        if (originalExtend) {
+            entity.extend = function (proto) {
+                var ExtendedClass = originalExtend.call(this, proto);
+                return entity.registerClass(ExtendedClass, proto.type);
+            };
+        }
+    }
+
+    return entity;
+}
+
+/**
+ * @param {string|Array.<string>} properties
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO Parse shadow style
+// TODO Only shallow path support
+var makeStyleMapper = function (properties) {
+    // Normalize
+    for (var i = 0; i < properties.length; i++) {
+        if (!properties[i][1]) {
+            properties[i][1] = properties[i][0];
+        }
+    }
+    return function (model, excludes, includes) {
+        var style = {};
+        for (var i = 0; i < properties.length; i++) {
+            var propName = properties[i][1];
+            if ((excludes && indexOf(excludes, propName) >= 0)
+                || (includes && indexOf(includes, propName) < 0)
+            ) {
+                continue;
+            }
+            var val = model.getShallow(propName);
+            if (val != null) {
+                style[properties[i][0]] = val;
+            }
+        }
+        return style;
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var getLineStyle = makeStyleMapper(
+    [
+        ['lineWidth', 'width'],
+        ['stroke', 'color'],
+        ['opacity'],
+        ['shadowBlur'],
+        ['shadowOffsetX'],
+        ['shadowOffsetY'],
+        ['shadowColor']
+    ]
+);
+
+var lineStyleMixin = {
+    getLineStyle: function (excludes) {
+        var style = getLineStyle(this, excludes);
+        var lineDash = this.getLineDash(style.lineWidth);
+        lineDash && (style.lineDash = lineDash);
+        return style;
+    },
+
+    getLineDash: function (lineWidth) {
+        if (lineWidth == null) {
+            lineWidth = 1;
+        }
+        var lineType = this.get('type');
+        var dotSize = Math.max(lineWidth, 2);
+        var dashSize = lineWidth * 4;
+        return (lineType === 'solid' || lineType == null) ? null
+            : (lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize]);
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var getAreaStyle = makeStyleMapper(
+    [
+        ['fill', 'color'],
+        ['shadowBlur'],
+        ['shadowOffsetX'],
+        ['shadowOffsetY'],
+        ['opacity'],
+        ['shadowColor']
+    ]
+);
+
+var areaStyleMixin = {
+    getAreaStyle: function (excludes, includes) {
+        return getAreaStyle(this, excludes, includes);
+    }
+};
+
+/**
+ * 曲线辅助模块
+ * @module zrender/core/curve
+ * @author pissang(https://www.github.com/pissang)
+ */
+
+var mathPow = Math.pow;
+var mathSqrt$2 = Math.sqrt;
+
+var EPSILON$1 = 1e-8;
+var EPSILON_NUMERIC = 1e-4;
+
+var THREE_SQRT = mathSqrt$2(3);
+var ONE_THIRD = 1 / 3;
+
+// 临时变量
+var _v0 = create();
+var _v1 = create();
+var _v2 = create();
+
+function isAroundZero(val) {
+    return val > -EPSILON$1 && val < EPSILON$1;
+}
+function isNotAroundZero$1(val) {
+    return val > EPSILON$1 || val < -EPSILON$1;
+}
+/**
+ * 计算三次贝塞尔值
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {number} t
+ * @return {number}
+ */
+function cubicAt(p0, p1, p2, p3, t) {
+    var onet = 1 - t;
+    return onet * onet * (onet * p0 + 3 * t * p1)
+            + t * t * (t * p3 + 3 * onet * p2);
+}
+
+/**
+ * 计算三次贝塞尔导数值
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {number} t
+ * @return {number}
+ */
+function cubicDerivativeAt(p0, p1, p2, p3, t) {
+    var onet = 1 - t;
+    return 3 * (
+        ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet
+        + (p3 - p2) * t * t
+    );
+}
+
+/**
+ * 计算三次贝塞尔方程根,使用盛金公式
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {number} val
+ * @param  {Array.<number>} roots
+ * @return {number} 有效根数目
+ */
+function cubicRootAt(p0, p1, p2, p3, val, roots) {
+    // Evaluate roots of cubic functions
+    var a = p3 + 3 * (p1 - p2) - p0;
+    var b = 3 * (p2 - p1 * 2 + p0);
+    var c = 3 * (p1  - p0);
+    var d = p0 - val;
+
+    var A = b * b - 3 * a * c;
+    var B = b * c - 9 * a * d;
+    var C = c * c - 3 * b * d;
+
+    var n = 0;
+
+    if (isAroundZero(A) && isAroundZero(B)) {
+        if (isAroundZero(b)) {
+            roots[0] = 0;
+        }
+        else {
+            var t1 = -c / b;  //t1, t2, t3, b is not zero
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+        }
+    }
+    else {
+        var disc = B * B - 4 * A * C;
+
+        if (isAroundZero(disc)) {
+            var K = B / A;
+            var t1 = -b / a + K;  // t1, a is not zero
+            var t2 = -K / 2;  // t2, t3
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+            if (t2 >= 0 && t2 <= 1) {
+                roots[n++] = t2;
+            }
+        }
+        else if (disc > 0) {
+            var discSqrt = mathSqrt$2(disc);
+            var Y1 = A * b + 1.5 * a * (-B + discSqrt);
+            var Y2 = A * b + 1.5 * a * (-B - discSqrt);
+            if (Y1 < 0) {
+                Y1 = -mathPow(-Y1, ONE_THIRD);
+            }
+            else {
+                Y1 = mathPow(Y1, ONE_THIRD);
+            }
+            if (Y2 < 0) {
+                Y2 = -mathPow(-Y2, ONE_THIRD);
+            }
+            else {
+                Y2 = mathPow(Y2, ONE_THIRD);
+            }
+            var t1 = (-b - (Y1 + Y2)) / (3 * a);
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+        }
+        else {
+            var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$2(A * A * A));
+            var theta = Math.acos(T) / 3;
+            var ASqrt = mathSqrt$2(A);
+            var tmp = Math.cos(theta);
+
+            var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);
+            var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);
+            var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+            if (t2 >= 0 && t2 <= 1) {
+                roots[n++] = t2;
+            }
+            if (t3 >= 0 && t3 <= 1) {
+                roots[n++] = t3;
+            }
+        }
+    }
+    return n;
+}
+
+/**
+ * 计算三次贝塞尔方程极限值的位置
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {Array.<number>} extrema
+ * @return {number} 有效数目
+ */
+function cubicExtrema(p0, p1, p2, p3, extrema) {
+    var b = 6 * p2 - 12 * p1 + 6 * p0;
+    var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;
+    var c = 3 * p1 - 3 * p0;
+
+    var n = 0;
+    if (isAroundZero(a)) {
+        if (isNotAroundZero$1(b)) {
+            var t1 = -c / b;
+            if (t1 >= 0 && t1 <=1) {
+                extrema[n++] = t1;
+            }
+        }
+    }
+    else {
+        var disc = b * b - 4 * a * c;
+        if (isAroundZero(disc)) {
+            extrema[0] = -b / (2 * a);
+        }
+        else if (disc > 0) {
+            var discSqrt = mathSqrt$2(disc);
+            var t1 = (-b + discSqrt) / (2 * a);
+            var t2 = (-b - discSqrt) / (2 * a);
+            if (t1 >= 0 && t1 <= 1) {
+                extrema[n++] = t1;
+            }
+            if (t2 >= 0 && t2 <= 1) {
+                extrema[n++] = t2;
+            }
+        }
+    }
+    return n;
+}
+
+/**
+ * 细分三次贝塞尔曲线
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} p3
+ * @param  {number} t
+ * @param  {Array.<number>} out
+ */
+function cubicSubdivide(p0, p1, p2, p3, t, out) {
+    var p01 = (p1 - p0) * t + p0;
+    var p12 = (p2 - p1) * t + p1;
+    var p23 = (p3 - p2) * t + p2;
+
+    var p012 = (p12 - p01) * t + p01;
+    var p123 = (p23 - p12) * t + p12;
+
+    var p0123 = (p123 - p012) * t + p012;
+    // Seg0
+    out[0] = p0;
+    out[1] = p01;
+    out[2] = p012;
+    out[3] = p0123;
+    // Seg1
+    out[4] = p0123;
+    out[5] = p123;
+    out[6] = p23;
+    out[7] = p3;
+}
+
+/**
+ * 投射点到三次贝塞尔曲线上,返回投射距离。
+ * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。
+ * @param {number} x0
+ * @param {number} y0
+ * @param {number} x1
+ * @param {number} y1
+ * @param {number} x2
+ * @param {number} y2
+ * @param {number} x3
+ * @param {number} y3
+ * @param {number} x
+ * @param {number} y
+ * @param {Array.<number>} [out] 投射点
+ * @return {number}
+ */
+function cubicProjectPoint(
+    x0, y0, x1, y1, x2, y2, x3, y3,
+    x, y, out
+) {
+    // http://pomax.github.io/bezierinfo/#projections
+    var t;
+    var interval = 0.005;
+    var d = Infinity;
+    var prev;
+    var next;
+    var d1;
+    var d2;
+
+    _v0[0] = x;
+    _v0[1] = y;
+
+    // 先粗略估计一下可能的最小距离的 t 值
+    // PENDING
+    for (var _t = 0; _t < 1; _t += 0.05) {
+        _v1[0] = cubicAt(x0, x1, x2, x3, _t);
+        _v1[1] = cubicAt(y0, y1, y2, y3, _t);
+        d1 = distSquare(_v0, _v1);
+        if (d1 < d) {
+            t = _t;
+            d = d1;
+        }
+    }
+    d = Infinity;
+
+    // At most 32 iteration
+    for (var i = 0; i < 32; i++) {
+        if (interval < EPSILON_NUMERIC) {
+            break;
+        }
+        prev = t - interval;
+        next = t + interval;
+        // t - interval
+        _v1[0] = cubicAt(x0, x1, x2, x3, prev);
+        _v1[1] = cubicAt(y0, y1, y2, y3, prev);
+
+        d1 = distSquare(_v1, _v0);
+
+        if (prev >= 0 && d1 < d) {
+            t = prev;
+            d = d1;
+        }
+        else {
+            // t + interval
+            _v2[0] = cubicAt(x0, x1, x2, x3, next);
+            _v2[1] = cubicAt(y0, y1, y2, y3, next);
+            d2 = distSquare(_v2, _v0);
+
+            if (next <= 1 && d2 < d) {
+                t = next;
+                d = d2;
+            }
+            else {
+                interval *= 0.5;
+            }
+        }
+    }
+    // t
+    if (out) {
+        out[0] = cubicAt(x0, x1, x2, x3, t);
+        out[1] = cubicAt(y0, y1, y2, y3, t);
+    }
+    // console.log(interval, i);
+    return mathSqrt$2(d);
+}
+
+/**
+ * 计算二次方贝塞尔值
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} t
+ * @return {number}
+ */
+function quadraticAt(p0, p1, p2, t) {
+    var onet = 1 - t;
+    return onet * (onet * p0 + 2 * t * p1) + t * t * p2;
+}
+
+/**
+ * 计算二次方贝塞尔导数值
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} t
+ * @return {number}
+ */
+function quadraticDerivativeAt(p0, p1, p2, t) {
+    return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));
+}
+
+/**
+ * 计算二次方贝塞尔方程根
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} t
+ * @param  {Array.<number>} roots
+ * @return {number} 有效根数目
+ */
+function quadraticRootAt(p0, p1, p2, val, roots) {
+    var a = p0 - 2 * p1 + p2;
+    var b = 2 * (p1 - p0);
+    var c = p0 - val;
+
+    var n = 0;
+    if (isAroundZero(a)) {
+        if (isNotAroundZero$1(b)) {
+            var t1 = -c / b;
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+        }
+    }
+    else {
+        var disc = b * b - 4 * a * c;
+        if (isAroundZero(disc)) {
+            var t1 = -b / (2 * a);
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+        }
+        else if (disc > 0) {
+            var discSqrt = mathSqrt$2(disc);
+            var t1 = (-b + discSqrt) / (2 * a);
+            var t2 = (-b - discSqrt) / (2 * a);
+            if (t1 >= 0 && t1 <= 1) {
+                roots[n++] = t1;
+            }
+            if (t2 >= 0 && t2 <= 1) {
+                roots[n++] = t2;
+            }
+        }
+    }
+    return n;
+}
+
+/**
+ * 计算二次贝塞尔方程极限值
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @return {number}
+ */
+function quadraticExtremum(p0, p1, p2) {
+    var divider = p0 + p2 - 2 * p1;
+    if (divider === 0) {
+        // p1 is center of p0 and p2
+        return 0.5;
+    }
+    else {
+        return (p0 - p1) / divider;
+    }
+}
+
+/**
+ * 细分二次贝塞尔曲线
+ * @memberOf module:zrender/core/curve
+ * @param  {number} p0
+ * @param  {number} p1
+ * @param  {number} p2
+ * @param  {number} t
+ * @param  {Array.<number>} out
+ */
+function quadraticSubdivide(p0, p1, p2, t, out) {
+    var p01 = (p1 - p0) * t + p0;
+    var p12 = (p2 - p1) * t + p1;
+    var p012 = (p12 - p01) * t + p01;
+
+    // Seg0
+    out[0] = p0;
+    out[1] = p01;
+    out[2] = p012;
+
+    // Seg1
+    out[3] = p012;
+    out[4] = p12;
+    out[5] = p2;
+}
+
+/**
+ * 投射点到二次贝塞尔曲线上,返回投射距离。
+ * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。
+ * @param {number} x0
+ * @param {number} y0
+ * @param {number} x1
+ * @param {number} y1
+ * @param {number} x2
+ * @param {number} y2
+ * @param {number} x
+ * @param {number} y
+ * @param {Array.<number>} out 投射点
+ * @return {number}
+ */
+function quadraticProjectPoint(
+    x0, y0, x1, y1, x2, y2,
+    x, y, out
+) {
+    // http://pomax.github.io/bezierinfo/#projections
+    var t;
+    var interval = 0.005;
+    var d = Infinity;
+
+    _v0[0] = x;
+    _v0[1] = y;
+
+    // 先粗略估计一下可能的最小距离的 t 值
+    // PENDING
+    for (var _t = 0; _t < 1; _t += 0.05) {
+        _v1[0] = quadraticAt(x0, x1, x2, _t);
+        _v1[1] = quadraticAt(y0, y1, y2, _t);
+        var d1 = distSquare(_v0, _v1);
+        if (d1 < d) {
+            t = _t;
+            d = d1;
+        }
+    }
+    d = Infinity;
+
+    // At most 32 iteration
+    for (var i = 0; i < 32; i++) {
+        if (interval < EPSILON_NUMERIC) {
+            break;
+        }
+        var prev = t - interval;
+        var next = t + interval;
+        // t - interval
+        _v1[0] = quadraticAt(x0, x1, x2, prev);
+        _v1[1] = quadraticAt(y0, y1, y2, prev);
+
+        var d1 = distSquare(_v1, _v0);
+
+        if (prev >= 0 && d1 < d) {
+            t = prev;
+            d = d1;
+        }
+        else {
+            // t + interval
+            _v2[0] = quadraticAt(x0, x1, x2, next);
+            _v2[1] = quadraticAt(y0, y1, y2, next);
+            var d2 = distSquare(_v2, _v0);
+            if (next <= 1 && d2 < d) {
+                t = next;
+                d = d2;
+            }
+            else {
+                interval *= 0.5;
+            }
+        }
+    }
+    // t
+    if (out) {
+        out[0] = quadraticAt(x0, x1, x2, t);
+        out[1] = quadraticAt(y0, y1, y2, t);
+    }
+    // console.log(interval, i);
+    return mathSqrt$2(d);
+}
+
+/**
+ * @author Yi Shen(https://github.com/pissang)
+ */
+
+var mathMin$3 = Math.min;
+var mathMax$3 = Math.max;
+var mathSin$2 = Math.sin;
+var mathCos$2 = Math.cos;
+var PI2 = Math.PI * 2;
+
+var start = create();
+var end = create();
+var extremity = create();
+
+/**
+ * 从顶点数组中计算出最小包围盒,写入`min`和`max`中
+ * @module zrender/core/bbox
+ * @param {Array<Object>} points 顶点数组
+ * @param {number} min
+ * @param {number} max
+ */
+function fromPoints(points, min$$1, max$$1) {
+    if (points.length === 0) {
+        return;
+    }
+    var p = points[0];
+    var left = p[0];
+    var right = p[0];
+    var top = p[1];
+    var bottom = p[1];
+    var i;
+
+    for (i = 1; i < points.length; i++) {
+        p = points[i];
+        left = mathMin$3(left, p[0]);
+        right = mathMax$3(right, p[0]);
+        top = mathMin$3(top, p[1]);
+        bottom = mathMax$3(bottom, p[1]);
+    }
+
+    min$$1[0] = left;
+    min$$1[1] = top;
+    max$$1[0] = right;
+    max$$1[1] = bottom;
+}
+
+/**
+ * @memberOf module:zrender/core/bbox
+ * @param {number} x0
+ * @param {number} y0
+ * @param {number} x1
+ * @param {number} y1
+ * @param {Array.<number>} min
+ * @param {Array.<number>} max
+ */
+function fromLine(x0, y0, x1, y1, min$$1, max$$1) {
+    min$$1[0] = mathMin$3(x0, x1);
+    min$$1[1] = mathMin$3(y0, y1);
+    max$$1[0] = mathMax$3(x0, x1);
+    max$$1[1] = mathMax$3(y0, y1);
+}
+
+var xDim = [];
+var yDim = [];
+/**
+ * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中
+ * @memberOf module:zrender/core/bbox
+ * @param {number} x0
+ * @param {number} y0
+ * @param {number} x1
+ * @param {number} y1
+ * @param {number} x2
+ * @param {number} y2
+ * @param {number} x3
+ * @param {number} y3
+ * @param {Array.<number>} min
+ * @param {Array.<number>} max
+ */
+function fromCubic(
+    x0, y0, x1, y1, x2, y2, x3, y3, min$$1, max$$1
+) {
+    var cubicExtrema$$1 = cubicExtrema;
+    var cubicAt$$1 = cubicAt;
+    var i;
+    var n = cubicExtrema$$1(x0, x1, x2, x3, xDim);
+    min$$1[0] = Infinity;
+    min$$1[1] = Infinity;
+    max$$1[0] = -Infinity;
+    max$$1[1] = -Infinity;
+
+    for (i = 0; i < n; i++) {
+        var x = cubicAt$$1(x0, x1, x2, x3, xDim[i]);
+        min$$1[0] = mathMin$3(x, min$$1[0]);
+        max$$1[0] = mathMax$3(x, max$$1[0]);
+    }
+    n = cubicExtrema$$1(y0, y1, y2, y3, yDim);
+    for (i = 0; i < n; i++) {
+        var y = cubicAt$$1(y0, y1, y2, y3, yDim[i]);
+        min$$1[1] = mathMin$3(y, min$$1[1]);
+        max$$1[1] = mathMax$3(y, max$$1[1]);
+    }
+
+    min$$1[0] = mathMin$3(x0, min$$1[0]);
+    max$$1[0] = mathMax$3(x0, max$$1[0]);
+    min$$1[0] = mathMin$3(x3, min$$1[0]);
+    max$$1[0] = mathMax$3(x3, max$$1[0]);
+
+    min$$1[1] = mathMin$3(y0, min$$1[1]);
+    max$$1[1] = mathMax$3(y0, max$$1[1]);
+    min$$1[1] = mathMin$3(y3, min$$1[1]);
+    max$$1[1] = mathMax$3(y3, max$$1[1]);
+}
+
+/**
+ * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中
+ * @memberOf module:zrender/core/bbox
+ * @param {number} x0
+ * @param {number} y0
+ * @param {number} x1
+ * @param {number} y1
+ * @param {number} x2
+ * @param {number} y2
+ * @param {Array.<number>} min
+ * @param {Array.<number>} max
+ */
+function fromQuadratic(x0, y0, x1, y1, x2, y2, min$$1, max$$1) {
+    var quadraticExtremum$$1 = quadraticExtremum;
+    var quadraticAt$$1 = quadraticAt;
+    // Find extremities, where derivative in x dim or y dim is zero
+    var tx =
+        mathMax$3(
+            mathMin$3(quadraticExtremum$$1(x0, x1, x2), 1), 0
+        );
+    var ty =
+        mathMax$3(
+            mathMin$3(quadraticExtremum$$1(y0, y1, y2), 1), 0
+        );
+
+    var x = quadraticAt$$1(x0, x1, x2, tx);
+    var y = quadraticAt$$1(y0, y1, y2, ty);
+
+    min$$1[0] = mathMin$3(x0, x2, x);
+    min$$1[1] = mathMin$3(y0, y2, y);
+    max$$1[0] = mathMax$3(x0, x2, x);
+    max$$1[1] = mathMax$3(y0, y2, y);
+}
+
+/**
+ * 从圆弧中计算出最小包围盒,写入`min`和`max`中
+ * @method
+ * @memberOf module:zrender/core/bbox
+ * @param {number} x
+ * @param {number} y
+ * @param {number} rx
+ * @param {number} ry
+ * @param {number} startAngle
+ * @param {number} endAngle
+ * @param {number} anticlockwise
+ * @param {Array.<number>} min
+ * @param {Array.<number>} max
+ */
+function fromArc(
+    x, y, rx, ry, startAngle, endAngle, anticlockwise, min$$1, max$$1
+) {
+    var vec2Min = min;
+    var vec2Max = max;
+
+    var diff = Math.abs(startAngle - endAngle);
+
+
+    if (diff % PI2 < 1e-4 && diff > 1e-4) {
+        // Is a circle
+        min$$1[0] = x - rx;
+        min$$1[1] = y - ry;
+        max$$1[0] = x + rx;
+        max$$1[1] = y + ry;
+        return;
+    }
+
+    start[0] = mathCos$2(startAngle) * rx + x;
+    start[1] = mathSin$2(startAngle) * ry + y;
+
+    end[0] = mathCos$2(endAngle) * rx + x;
+    end[1] = mathSin$2(endAngle) * ry + y;
+
+    vec2Min(min$$1, start, end);
+    vec2Max(max$$1, start, end);
+
+    // Thresh to [0, Math.PI * 2]
+    startAngle = startAngle % (PI2);
+    if (startAngle < 0) {
+        startAngle = startAngle + PI2;
+    }
+    endAngle = endAngle % (PI2);
+    if (endAngle < 0) {
+        endAngle = endAngle + PI2;
+    }
+
+    if (startAngle > endAngle && !anticlockwise) {
+        endAngle += PI2;
+    }
+    else if (startAngle < endAngle && anticlockwise) {
+        startAngle += PI2;
+    }
+    if (anticlockwise) {
+        var tmp = endAngle;
+        endAngle = startAngle;
+        startAngle = tmp;
+    }
+
+    // var number = 0;
+    // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;
+    for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {
+        if (angle > startAngle) {
+            extremity[0] = mathCos$2(angle) * rx + x;
+            extremity[1] = mathSin$2(angle) * ry + y;
+
+            vec2Min(min$$1, extremity, min$$1);
+            vec2Max(max$$1, extremity, max$$1);
+        }
+    }
+}
+
+/**
+ * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中
+ * 可以用于 isInsidePath 判断以及获取boundingRect
+ *
+ * @module zrender/core/PathProxy
+ * @author Yi Shen (http://www.github.com/pissang)
+ */
+
+// TODO getTotalLength, getPointAtLength
+
+var CMD = {
+    M: 1,
+    L: 2,
+    C: 3,
+    Q: 4,
+    A: 5,
+    Z: 6,
+    // Rect
+    R: 7
+};
+
+// var CMD_MEM_SIZE = {
+//     M: 3,
+//     L: 3,
+//     C: 7,
+//     Q: 5,
+//     A: 9,
+//     R: 5,
+//     Z: 1
+// };
+
+var min$1 = [];
+var max$1 = [];
+var min2 = [];
+var max2 = [];
+var mathMin$2 = Math.min;
+var mathMax$2 = Math.max;
+var mathCos$1 = Math.cos;
+var mathSin$1 = Math.sin;
+var mathSqrt$1 = Math.sqrt;
+var mathAbs = Math.abs;
+
+var hasTypedArray = typeof Float32Array != 'undefined';
+
+/**
+ * @alias module:zrender/core/PathProxy
+ * @constructor
+ */
+var PathProxy = function (notSaveData) {
+
+    this._saveData = !(notSaveData || false);
+
+    if (this._saveData) {
+        /**
+         * Path data. Stored as flat array
+         * @type {Array.<Object>}
+         */
+        this.data = [];
+    }
+
+    this._ctx = null;
+};
+
+/**
+ * 快速计算Path包围盒(并不是最小包围盒)
+ * @return {Object}
+ */
+PathProxy.prototype = {
+
+    constructor: PathProxy,
+
+    _xi: 0,
+    _yi: 0,
+
+    _x0: 0,
+    _y0: 0,
+    // Unit x, Unit y. Provide for avoiding drawing that too short line segment
+    _ux: 0,
+    _uy: 0,
+
+    _len: 0,
+
+    _lineDash: null,
+
+    _dashOffset: 0,
+
+    _dashIdx: 0,
+
+    _dashSum: 0,
+
+    /**
+     * @readOnly
+     */
+    setScale: function (sx, sy) {
+        this._ux = mathAbs(1 / devicePixelRatio / sx) || 0;
+        this._uy = mathAbs(1 / devicePixelRatio / sy) || 0;
+    },
+
+    getContext: function () {
+        return this._ctx;
+    },
+
+    /**
+     * @param  {CanvasRenderingContext2D} ctx
+     * @return {module:zrender/core/PathProxy}
+     */
+    beginPath: function (ctx) {
+
+        this._ctx = ctx;
+
+        ctx && ctx.beginPath();
+
+        ctx && (this.dpr = ctx.dpr);
+
+        // Reset
+        if (this._saveData) {
+            this._len = 0;
+        }
+
+        if (this._lineDash) {
+            this._lineDash = null;
+
+            this._dashOffset = 0;
+        }
+
+        return this;
+    },
+
+    /**
+     * @param  {number} x
+     * @param  {number} y
+     * @return {module:zrender/core/PathProxy}
+     */
+    moveTo: function (x, y) {
+        this.addData(CMD.M, x, y);
+        this._ctx && this._ctx.moveTo(x, y);
+
+        // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用
+        // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。
+        // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要
+        // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持
+        this._x0 = x;
+        this._y0 = y;
+
+        this._xi = x;
+        this._yi = y;
+
+        return this;
+    },
+
+    /**
+     * @param  {number} x
+     * @param  {number} y
+     * @return {module:zrender/core/PathProxy}
+     */
+    lineTo: function (x, y) {
+        var exceedUnit = mathAbs(x - this._xi) > this._ux
+            || mathAbs(y - this._yi) > this._uy
+            // Force draw the first segment
+            || this._len < 5;
+
+        this.addData(CMD.L, x, y);
+
+        if (this._ctx && exceedUnit) {
+            this._needsDash() ? this._dashedLineTo(x, y)
+                : this._ctx.lineTo(x, y);
+        }
+        if (exceedUnit) {
+            this._xi = x;
+            this._yi = y;
+        }
+
+        return this;
+    },
+
+    /**
+     * @param  {number} x1
+     * @param  {number} y1
+     * @param  {number} x2
+     * @param  {number} y2
+     * @param  {number} x3
+     * @param  {number} y3
+     * @return {module:zrender/core/PathProxy}
+     */
+    bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {
+        this.addData(CMD.C, x1, y1, x2, y2, x3, y3);
+        if (this._ctx) {
+            this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)
+                : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
+        }
+        this._xi = x3;
+        this._yi = y3;
+        return this;
+    },
+
+    /**
+     * @param  {number} x1
+     * @param  {number} y1
+     * @param  {number} x2
+     * @param  {number} y2
+     * @return {module:zrender/core/PathProxy}
+     */
+    quadraticCurveTo: function (x1, y1, x2, y2) {
+        this.addData(CMD.Q, x1, y1, x2, y2);
+        if (this._ctx) {
+            this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2)
+                : this._ctx.quadraticCurveTo(x1, y1, x2, y2);
+        }
+        this._xi = x2;
+        this._yi = y2;
+        return this;
+    },
+
+    /**
+     * @param  {number} cx
+     * @param  {number} cy
+     * @param  {number} r
+     * @param  {number} startAngle
+     * @param  {number} endAngle
+     * @param  {boolean} anticlockwise
+     * @return {module:zrender/core/PathProxy}
+     */
+    arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {
+        this.addData(
+            CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1
+        );
+        this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);
+
+        this._xi = mathCos$1(endAngle) * r + cx;
+        this._yi = mathSin$1(endAngle) * r + cx;
+        return this;
+    },
+
+    // TODO
+    arcTo: function (x1, y1, x2, y2, radius) {
+        if (this._ctx) {
+            this._ctx.arcTo(x1, y1, x2, y2, radius);
+        }
+        return this;
+    },
+
+    // TODO
+    rect: function (x, y, w, h) {
+        this._ctx && this._ctx.rect(x, y, w, h);
+        this.addData(CMD.R, x, y, w, h);
+        return this;
+    },
+
+    /**
+     * @return {module:zrender/core/PathProxy}
+     */
+    closePath: function () {
+        this.addData(CMD.Z);
+
+        var ctx = this._ctx;
+        var x0 = this._x0;
+        var y0 = this._y0;
+        if (ctx) {
+            this._needsDash() && this._dashedLineTo(x0, y0);
+            ctx.closePath();
+        }
+
+        this._xi = x0;
+        this._yi = y0;
+        return this;
+    },
+
+    /**
+     * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。
+     * stroke 同样
+     * @param {CanvasRenderingContext2D} ctx
+     * @return {module:zrender/core/PathProxy}
+     */
+    fill: function (ctx) {
+        ctx && ctx.fill();
+        this.toStatic();
+    },
+
+    /**
+     * @param {CanvasRenderingContext2D} ctx
+     * @return {module:zrender/core/PathProxy}
+     */
+    stroke: function (ctx) {
+        ctx && ctx.stroke();
+        this.toStatic();
+    },
+
+    /**
+     * 必须在其它绘制命令前调用
+     * Must be invoked before all other path drawing methods
+     * @return {module:zrender/core/PathProxy}
+     */
+    setLineDash: function (lineDash) {
+        if (lineDash instanceof Array) {
+            this._lineDash = lineDash;
+
+            this._dashIdx = 0;
+
+            var lineDashSum = 0;
+            for (var i = 0; i < lineDash.length; i++) {
+                lineDashSum += lineDash[i];
+            }
+            this._dashSum = lineDashSum;
+        }
+        return this;
+    },
+
+    /**
+     * 必须在其它绘制命令前调用
+     * Must be invoked before all other path drawing methods
+     * @return {module:zrender/core/PathProxy}
+     */
+    setLineDashOffset: function (offset) {
+        this._dashOffset = offset;
+        return this;
+    },
+
+    /**
+     *
+     * @return {boolean}
+     */
+    len: function () {
+        return this._len;
+    },
+
+    /**
+     * 直接设置 Path 数据
+     */
+    setData: function (data) {
+
+        var len$$1 = data.length;
+
+        if (! (this.data && this.data.length == len$$1) && hasTypedArray) {
+            this.data = new Float32Array(len$$1);
+        }
+
+        for (var i = 0; i < len$$1; i++) {
+            this.data[i] = data[i];
+        }
+
+        this._len = len$$1;
+    },
+
+    /**
+     * 添加子路径
+     * @param {module:zrender/core/PathProxy|Array.<module:zrender/core/PathProxy>} path
+     */
+    appendPath: function (path) {
+        if (!(path instanceof Array)) {
+            path = [path];
+        }
+        var len$$1 = path.length;
+        var appendSize = 0;
+        var offset = this._len;
+        for (var i = 0; i < len$$1; i++) {
+            appendSize += path[i].len();
+        }
+        if (hasTypedArray && (this.data instanceof Float32Array)) {
+            this.data = new Float32Array(offset + appendSize);
+        }
+        for (var i = 0; i < len$$1; i++) {
+            var appendPathData = path[i].data;
+            for (var k = 0; k < appendPathData.length; k++) {
+                this.data[offset++] = appendPathData[k];
+            }
+        }
+        this._len = offset;
+    },
+
+    /**
+     * 填充 Path 数据。
+     * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。
+     */
+    addData: function (cmd) {
+        if (!this._saveData) {
+            return;
+        }
+
+        var data = this.data;
+        if (this._len + arguments.length > data.length) {
+            // 因为之前的数组已经转换成静态的 Float32Array
+            // 所以不够用时需要扩展一个新的动态数组
+            this._expandData();
+            data = this.data;
+        }
+        for (var i = 0; i < arguments.length; i++) {
+            data[this._len++] = arguments[i];
+        }
+
+        this._prevCmd = cmd;
+    },
+
+    _expandData: function () {
+        // Only if data is Float32Array
+        if (!(this.data instanceof Array)) {
+            var newData = [];
+            for (var i = 0; i < this._len; i++) {
+                newData[i] = this.data[i];
+            }
+            this.data = newData;
+        }
+    },
+
+    /**
+     * If needs js implemented dashed line
+     * @return {boolean}
+     * @private
+     */
+    _needsDash: function () {
+        return this._lineDash;
+    },
+
+    _dashedLineTo: function (x1, y1) {
+        var dashSum = this._dashSum;
+        var offset = this._dashOffset;
+        var lineDash = this._lineDash;
+        var ctx = this._ctx;
+
+        var x0 = this._xi;
+        var y0 = this._yi;
+        var dx = x1 - x0;
+        var dy = y1 - y0;
+        var dist$$1 = mathSqrt$1(dx * dx + dy * dy);
+        var x = x0;
+        var y = y0;
+        var dash;
+        var nDash = lineDash.length;
+        var idx;
+        dx /= dist$$1;
+        dy /= dist$$1;
+
+        if (offset < 0) {
+            // Convert to positive offset
+            offset = dashSum + offset;
+        }
+        offset %= dashSum;
+        x -= offset * dx;
+        y -= offset * dy;
+
+        while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)
+        || (dx == 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) {
+            idx = this._dashIdx;
+            dash = lineDash[idx];
+            x += dx * dash;
+            y += dy * dash;
+            this._dashIdx = (idx + 1) % nDash;
+            // Skip positive offset
+            if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {
+                continue;
+            }
+            ctx[idx % 2 ? 'moveTo' : 'lineTo'](
+                dx >= 0 ? mathMin$2(x, x1) : mathMax$2(x, x1),
+                dy >= 0 ? mathMin$2(y, y1) : mathMax$2(y, y1)
+            );
+        }
+        // Offset for next lineTo
+        dx = x - x1;
+        dy = y - y1;
+        this._dashOffset = -mathSqrt$1(dx * dx + dy * dy);
+    },
+
+    // Not accurate dashed line to
+    _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {
+        var dashSum = this._dashSum;
+        var offset = this._dashOffset;
+        var lineDash = this._lineDash;
+        var ctx = this._ctx;
+
+        var x0 = this._xi;
+        var y0 = this._yi;
+        var t;
+        var dx;
+        var dy;
+        var cubicAt$$1 = cubicAt;
+        var bezierLen = 0;
+        var idx = this._dashIdx;
+        var nDash = lineDash.length;
+
+        var x;
+        var y;
+
+        var tmpLen = 0;
+
+        if (offset < 0) {
+            // Convert to positive offset
+            offset = dashSum + offset;
+        }
+        offset %= dashSum;
+        // Bezier approx length
+        for (t = 0; t < 1; t += 0.1) {
+            dx = cubicAt$$1(x0, x1, x2, x3, t + 0.1)
+                - cubicAt$$1(x0, x1, x2, x3, t);
+            dy = cubicAt$$1(y0, y1, y2, y3, t + 0.1)
+                - cubicAt$$1(y0, y1, y2, y3, t);
+            bezierLen += mathSqrt$1(dx * dx + dy * dy);
+        }
+
+        // Find idx after add offset
+        for (; idx < nDash; idx++) {
+            tmpLen += lineDash[idx];
+            if (tmpLen > offset) {
+                break;
+            }
+        }
+        t = (tmpLen - offset) / bezierLen;
+
+        while (t <= 1) {
+
+            x = cubicAt$$1(x0, x1, x2, x3, t);
+            y = cubicAt$$1(y0, y1, y2, y3, t);
+
+            // Use line to approximate dashed bezier
+            // Bad result if dash is long
+            idx % 2 ? ctx.moveTo(x, y)
+                : ctx.lineTo(x, y);
+
+            t += lineDash[idx] / bezierLen;
+
+            idx = (idx + 1) % nDash;
+        }
+
+        // Finish the last segment and calculate the new offset
+        (idx % 2 !== 0) && ctx.lineTo(x3, y3);
+        dx = x3 - x;
+        dy = y3 - y;
+        this._dashOffset = -mathSqrt$1(dx * dx + dy * dy);
+    },
+
+    _dashedQuadraticTo: function (x1, y1, x2, y2) {
+        // Convert quadratic to cubic using degree elevation
+        var x3 = x2;
+        var y3 = y2;
+        x2 = (x2 + 2 * x1) / 3;
+        y2 = (y2 + 2 * y1) / 3;
+        x1 = (this._xi + 2 * x1) / 3;
+        y1 = (this._yi + 2 * y1) / 3;
+
+        this._dashedBezierTo(x1, y1, x2, y2, x3, y3);
+    },
+
+    /**
+     * 转成静态的 Float32Array 减少堆内存占用
+     * Convert dynamic array to static Float32Array
+     */
+    toStatic: function () {
+        var data = this.data;
+        if (data instanceof Array) {
+            data.length = this._len;
+            if (hasTypedArray) {
+                this.data = new Float32Array(data);
+            }
+        }
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getBoundingRect: function () {
+        min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE;
+        max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE;
+
+        var data = this.data;
+        var xi = 0;
+        var yi = 0;
+        var x0 = 0;
+        var y0 = 0;
+
+        for (var i = 0; i < data.length;) {
+            var cmd = data[i++];
+
+            if (i == 1) {
+                // 如果第一个命令是 L, C, Q
+                // 则 previous point 同绘制命令的第一个 point
+                //
+                // 第一个命令为 Arc 的情况下会在后面特殊处理
+                xi = data[i];
+                yi = data[i + 1];
+
+                x0 = xi;
+                y0 = yi;
+            }
+
+            switch (cmd) {
+                case CMD.M:
+                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点
+                    // 在 closePath 的时候使用
+                    x0 = data[i++];
+                    y0 = data[i++];
+                    xi = x0;
+                    yi = y0;
+                    min2[0] = x0;
+                    min2[1] = y0;
+                    max2[0] = x0;
+                    max2[1] = y0;
+                    break;
+                case CMD.L:
+                    fromLine(xi, yi, data[i], data[i + 1], min2, max2);
+                    xi = data[i++];
+                    yi = data[i++];
+                    break;
+                case CMD.C:
+                    fromCubic(
+                        xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],
+                        min2, max2
+                    );
+                    xi = data[i++];
+                    yi = data[i++];
+                    break;
+                case CMD.Q:
+                    fromQuadratic(
+                        xi, yi, data[i++], data[i++], data[i], data[i + 1],
+                        min2, max2
+                    );
+                    xi = data[i++];
+                    yi = data[i++];
+                    break;
+                case CMD.A:
+                    // TODO Arc 判断的开销比较大
+                    var cx = data[i++];
+                    var cy = data[i++];
+                    var rx = data[i++];
+                    var ry = data[i++];
+                    var startAngle = data[i++];
+                    var endAngle = data[i++] + startAngle;
+                    // TODO Arc 旋转
+                    var psi = data[i++];
+                    var anticlockwise = 1 - data[i++];
+
+                    if (i == 1) {
+                        // 直接使用 arc 命令
+                        // 第一个命令起点还未定义
+                        x0 = mathCos$1(startAngle) * rx + cx;
+                        y0 = mathSin$1(startAngle) * ry + cy;
+                    }
+
+                    fromArc(
+                        cx, cy, rx, ry, startAngle, endAngle,
+                        anticlockwise, min2, max2
+                    );
+
+                    xi = mathCos$1(endAngle) * rx + cx;
+                    yi = mathSin$1(endAngle) * ry + cy;
+                    break;
+                case CMD.R:
+                    x0 = xi = data[i++];
+                    y0 = yi = data[i++];
+                    var width = data[i++];
+                    var height = data[i++];
+                    // Use fromLine
+                    fromLine(x0, y0, x0 + width, y0 + height, min2, max2);
+                    break;
+                case CMD.Z:
+                    xi = x0;
+                    yi = y0;
+                    break;
+            }
+
+            // Union
+            min(min$1, min$1, min2);
+            max(max$1, max$1, max2);
+        }
+
+        // No data
+        if (i === 0) {
+            min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0;
+        }
+
+        return new BoundingRect(
+            min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1]
+        );
+    },
+
+    /**
+     * Rebuild path from current data
+     * Rebuild path will not consider javascript implemented line dash.
+     * @param {CanvasRenderingContext2D} ctx
+     */
+    rebuildPath: function (ctx) {
+        var d = this.data;
+        var x0, y0;
+        var xi, yi;
+        var x, y;
+        var ux = this._ux;
+        var uy = this._uy;
+        var len$$1 = this._len;
+        for (var i = 0; i < len$$1;) {
+            var cmd = d[i++];
+
+            if (i == 1) {
+                // 如果第一个命令是 L, C, Q
+                // 则 previous point 同绘制命令的第一个 point
+                //
+                // 第一个命令为 Arc 的情况下会在后面特殊处理
+                xi = d[i];
+                yi = d[i + 1];
+
+                x0 = xi;
+                y0 = yi;
+            }
+            switch (cmd) {
+                case CMD.M:
+                    x0 = xi = d[i++];
+                    y0 = yi = d[i++];
+                    ctx.moveTo(xi, yi);
+                    break;
+                case CMD.L:
+                    x = d[i++];
+                    y = d[i++];
+                    // Not draw too small seg between
+                    if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len$$1 - 1) {
+                        ctx.lineTo(x, y);
+                        xi = x;
+                        yi = y;
+                    }
+                    break;
+                case CMD.C:
+                    ctx.bezierCurveTo(
+                        d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]
+                    );
+                    xi = d[i - 2];
+                    yi = d[i - 1];
+                    break;
+                case CMD.Q:
+                    ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);
+                    xi = d[i - 2];
+                    yi = d[i - 1];
+                    break;
+                case CMD.A:
+                    var cx = d[i++];
+                    var cy = d[i++];
+                    var rx = d[i++];
+                    var ry = d[i++];
+                    var theta = d[i++];
+                    var dTheta = d[i++];
+                    var psi = d[i++];
+                    var fs = d[i++];
+                    var r = (rx > ry) ? rx : ry;
+                    var scaleX = (rx > ry) ? 1 : rx / ry;
+                    var scaleY = (rx > ry) ? ry / rx : 1;
+                    var isEllipse = Math.abs(rx - ry) > 1e-3;
+                    var endAngle = theta + dTheta;
+                    if (isEllipse) {
+                        ctx.translate(cx, cy);
+                        ctx.rotate(psi);
+                        ctx.scale(scaleX, scaleY);
+                        ctx.arc(0, 0, r, theta, endAngle, 1 - fs);
+                        ctx.scale(1 / scaleX, 1 / scaleY);
+                        ctx.rotate(-psi);
+                        ctx.translate(-cx, -cy);
+                    }
+                    else {
+                        ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);
+                    }
+
+                    if (i == 1) {
+                        // 直接使用 arc 命令
+                        // 第一个命令起点还未定义
+                        x0 = mathCos$1(theta) * rx + cx;
+                        y0 = mathSin$1(theta) * ry + cy;
+                    }
+                    xi = mathCos$1(endAngle) * rx + cx;
+                    yi = mathSin$1(endAngle) * ry + cy;
+                    break;
+                case CMD.R:
+                    x0 = xi = d[i];
+                    y0 = yi = d[i + 1];
+                    ctx.rect(d[i++], d[i++], d[i++], d[i++]);
+                    break;
+                case CMD.Z:
+                    ctx.closePath();
+                    xi = x0;
+                    yi = y0;
+            }
+        }
+    }
+};
+
+PathProxy.CMD = CMD;
+
+/**
+ * 线段包含判断
+ * @param  {number}  x0
+ * @param  {number}  y0
+ * @param  {number}  x1
+ * @param  {number}  y1
+ * @param  {number}  lineWidth
+ * @param  {number}  x
+ * @param  {number}  y
+ * @return {boolean}
+ */
+function containStroke$1(x0, y0, x1, y1, lineWidth, x, y) {
+    if (lineWidth === 0) {
+        return false;
+    }
+    var _l = lineWidth;
+    var _a = 0;
+    var _b = x0;
+    // Quick reject
+    if (
+        (y > y0 + _l && y > y1 + _l)
+        || (y < y0 - _l && y < y1 - _l)
+        || (x > x0 + _l && x > x1 + _l)
+        || (x < x0 - _l && x < x1 - _l)
+    ) {
+        return false;
+    }
+
+    if (x0 !== x1) {
+        _a = (y0 - y1) / (x0 - x1);
+        _b = (x0 * y1 - x1 * y0) / (x0 - x1) ;
+    }
+    else {
+        return Math.abs(x - x0) <= _l / 2;
+    }
+    var tmp = _a * x - y + _b;
+    var _s = tmp * tmp / (_a * _a + 1);
+    return _s <= _l / 2 * _l / 2;
+}
+
+/**
+ * 三次贝塞尔曲线描边包含判断
+ * @param  {number}  x0
+ * @param  {number}  y0
+ * @param  {number}  x1
+ * @param  {number}  y1
+ * @param  {number}  x2
+ * @param  {number}  y2
+ * @param  {number}  x3
+ * @param  {number}  y3
+ * @param  {number}  lineWidth
+ * @param  {number}  x
+ * @param  {number}  y
+ * @return {boolean}
+ */
+function containStroke$2(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {
+    if (lineWidth === 0) {
+        return false;
+    }
+    var _l = lineWidth;
+    // Quick reject
+    if (
+        (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)
+        || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)
+        || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)
+        || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)
+    ) {
+        return false;
+    }
+    var d = cubicProjectPoint(
+        x0, y0, x1, y1, x2, y2, x3, y3,
+        x, y, null
+    );
+    return d <= _l / 2;
+}
+
+/**
+ * 二次贝塞尔曲线描边包含判断
+ * @param  {number}  x0
+ * @param  {number}  y0
+ * @param  {number}  x1
+ * @param  {number}  y1
+ * @param  {number}  x2
+ * @param  {number}  y2
+ * @param  {number}  lineWidth
+ * @param  {number}  x
+ * @param  {number}  y
+ * @return {boolean}
+ */
+function containStroke$3(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {
+    if (lineWidth === 0) {
+        return false;
+    }
+    var _l = lineWidth;
+    // Quick reject
+    if (
+        (y > y0 + _l && y > y1 + _l && y > y2 + _l)
+        || (y < y0 - _l && y < y1 - _l && y < y2 - _l)
+        || (x > x0 + _l && x > x1 + _l && x > x2 + _l)
+        || (x < x0 - _l && x < x1 - _l && x < x2 - _l)
+    ) {
+        return false;
+    }
+    var d = quadraticProjectPoint(
+        x0, y0, x1, y1, x2, y2,
+        x, y, null
+    );
+    return d <= _l / 2;
+}
+
+var PI2$3 = Math.PI * 2;
+
+function normalizeRadian(angle) {
+    angle %= PI2$3;
+    if (angle < 0) {
+        angle += PI2$3;
+    }
+    return angle;
+}
+
+var PI2$2 = Math.PI * 2;
+
+/**
+ * 圆弧描边包含判断
+ * @param  {number}  cx
+ * @param  {number}  cy
+ * @param  {number}  r
+ * @param  {number}  startAngle
+ * @param  {number}  endAngle
+ * @param  {boolean}  anticlockwise
+ * @param  {number} lineWidth
+ * @param  {number}  x
+ * @param  {number}  y
+ * @return {Boolean}
+ */
+function containStroke$4(
+    cx, cy, r, startAngle, endAngle, anticlockwise,
+    lineWidth, x, y
+) {
+
+    if (lineWidth === 0) {
+        return false;
+    }
+    var _l = lineWidth;
+
+    x -= cx;
+    y -= cy;
+    var d = Math.sqrt(x * x + y * y);
+
+    if ((d - _l > r) || (d + _l < r)) {
+        return false;
+    }
+    if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) {
+        // Is a circle
+        return true;
+    }
+    if (anticlockwise) {
+        var tmp = startAngle;
+        startAngle = normalizeRadian(endAngle);
+        endAngle = normalizeRadian(tmp);
+    } else {
+        startAngle = normalizeRadian(startAngle);
+        endAngle = normalizeRadian(endAngle);
+    }
+    if (startAngle > endAngle) {
+        endAngle += PI2$2;
+    }
+
+    var angle = Math.atan2(y, x);
+    if (angle < 0) {
+        angle += PI2$2;
+    }
+    return (angle >= startAngle && angle <= endAngle)
+        || (angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle);
+}
+
+function windingLine(x0, y0, x1, y1, x, y) {
+    if ((y > y0 && y > y1) || (y < y0 && y < y1)) {
+        return 0;
+    }
+    // Ignore horizontal line
+    if (y1 === y0) {
+        return 0;
+    }
+    var dir = y1 < y0 ? 1 : -1;
+    var t = (y - y0) / (y1 - y0);
+
+    // Avoid winding error when intersection point is the connect point of two line of polygon
+    if (t === 1 || t === 0) {
+        dir = y1 < y0 ? 0.5 : -0.5;
+    }
+
+    var x_ = t * (x1 - x0) + x0;
+
+    // If (x, y) on the line, considered as "contain".
+    return x_ === x ? Infinity : x_ > x ? dir : 0;
+}
+
+var CMD$1 = PathProxy.CMD;
+var PI2$1 = Math.PI * 2;
+
+var EPSILON$2 = 1e-4;
+
+function isAroundEqual(a, b) {
+    return Math.abs(a - b) < EPSILON$2;
+}
+
+// 临时数组
+var roots = [-1, -1, -1];
+var extrema = [-1, -1];
+
+function swapExtrema() {
+    var tmp = extrema[0];
+    extrema[0] = extrema[1];
+    extrema[1] = tmp;
+}
+
+function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {
+    // Quick reject
+    if (
+        (y > y0 && y > y1 && y > y2 && y > y3)
+        || (y < y0 && y < y1 && y < y2 && y < y3)
+    ) {
+        return 0;
+    }
+    var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots);
+    if (nRoots === 0) {
+        return 0;
+    }
+    else {
+        var w = 0;
+        var nExtrema = -1;
+        var y0_, y1_;
+        for (var i = 0; i < nRoots; i++) {
+            var t = roots[i];
+
+            // Avoid winding error when intersection point is the connect point of two line of polygon
+            var unit = (t === 0 || t === 1) ? 0.5 : 1;
+
+            var x_ = cubicAt(x0, x1, x2, x3, t);
+            if (x_ < x) { // Quick reject
+                continue;
+            }
+            if (nExtrema < 0) {
+                nExtrema = cubicExtrema(y0, y1, y2, y3, extrema);
+                if (extrema[1] < extrema[0] && nExtrema > 1) {
+                    swapExtrema();
+                }
+                y0_ = cubicAt(y0, y1, y2, y3, extrema[0]);
+                if (nExtrema > 1) {
+                    y1_ = cubicAt(y0, y1, y2, y3, extrema[1]);
+                }
+            }
+            if (nExtrema == 2) {
+                // 分成三段单调函数
+                if (t < extrema[0]) {
+                    w += y0_ < y0 ? unit : -unit;
+                }
+                else if (t < extrema[1]) {
+                    w += y1_ < y0_ ? unit : -unit;
+                }
+                else {
+                    w += y3 < y1_ ? unit : -unit;
+                }
+            }
+            else {
+                // 分成两段单调函数
+                if (t < extrema[0]) {
+                    w += y0_ < y0 ? unit : -unit;
+                }
+                else {
+                    w += y3 < y0_ ? unit : -unit;
+                }
+            }
+        }
+        return w;
+    }
+}
+
+function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {
+    // Quick reject
+    if (
+        (y > y0 && y > y1 && y > y2)
+        || (y < y0 && y < y1 && y < y2)
+    ) {
+        return 0;
+    }
+    var nRoots = quadraticRootAt(y0, y1, y2, y, roots);
+    if (nRoots === 0) {
+        return 0;
+    }
+    else {
+        var t = quadraticExtremum(y0, y1, y2);
+        if (t >= 0 && t <= 1) {
+            var w = 0;
+            var y_ = quadraticAt(y0, y1, y2, t);
+            for (var i = 0; i < nRoots; i++) {
+                // Remove one endpoint.
+                var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;
+
+                var x_ = quadraticAt(x0, x1, x2, roots[i]);
+                if (x_ < x) {   // Quick reject
+                    continue;
+                }
+                if (roots[i] < t) {
+                    w += y_ < y0 ? unit : -unit;
+                }
+                else {
+                    w += y2 < y_ ? unit : -unit;
+                }
+            }
+            return w;
+        }
+        else {
+            // Remove one endpoint.
+            var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;
+
+            var x_ = quadraticAt(x0, x1, x2, roots[0]);
+            if (x_ < x) {   // Quick reject
+                return 0;
+            }
+            return y2 < y0 ? unit : -unit;
+        }
+    }
+}
+
+// TODO
+// Arc 旋转
+function windingArc(
+    cx, cy, r, startAngle, endAngle, anticlockwise, x, y
+) {
+    y -= cy;
+    if (y > r || y < -r) {
+        return 0;
+    }
+    var tmp = Math.sqrt(r * r - y * y);
+    roots[0] = -tmp;
+    roots[1] = tmp;
+
+    var diff = Math.abs(startAngle - endAngle);
+    if (diff < 1e-4) {
+        return 0;
+    }
+    if (diff % PI2$1 < 1e-4) {
+        // Is a circle
+        startAngle = 0;
+        endAngle = PI2$1;
+        var dir = anticlockwise ? 1 : -1;
+        if (x >= roots[0] + cx && x <= roots[1] + cx) {
+            return dir;
+        } else {
+            return 0;
+        }
+    }
+
+    if (anticlockwise) {
+        var tmp = startAngle;
+        startAngle = normalizeRadian(endAngle);
+        endAngle = normalizeRadian(tmp);
+    }
+    else {
+        startAngle = normalizeRadian(startAngle);
+        endAngle = normalizeRadian(endAngle);
+    }
+    if (startAngle > endAngle) {
+        endAngle += PI2$1;
+    }
+
+    var w = 0;
+    for (var i = 0; i < 2; i++) {
+        var x_ = roots[i];
+        if (x_ + cx > x) {
+            var angle = Math.atan2(y, x_);
+            var dir = anticlockwise ? 1 : -1;
+            if (angle < 0) {
+                angle = PI2$1 + angle;
+            }
+            if (
+                (angle >= startAngle && angle <= endAngle)
+                || (angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle)
+            ) {
+                if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {
+                    dir = -dir;
+                }
+                w += dir;
+            }
+        }
+    }
+    return w;
+}
+
+function containPath(data, lineWidth, isStroke, x, y) {
+    var w = 0;
+    var xi = 0;
+    var yi = 0;
+    var x0 = 0;
+    var y0 = 0;
+
+    for (var i = 0; i < data.length;) {
+        var cmd = data[i++];
+        // Begin a new subpath
+        if (cmd === CMD$1.M && i > 1) {
+            // Close previous subpath
+            if (!isStroke) {
+                w += windingLine(xi, yi, x0, y0, x, y);
+            }
+            // 如果被任何一个 subpath 包含
+            // if (w !== 0) {
+            //     return true;
+            // }
+        }
+
+        if (i == 1) {
+            // 如果第一个命令是 L, C, Q
+            // 则 previous point 同绘制命令的第一个 point
+            //
+            // 第一个命令为 Arc 的情况下会在后面特殊处理
+            xi = data[i];
+            yi = data[i + 1];
+
+            x0 = xi;
+            y0 = yi;
+        }
+
+        switch (cmd) {
+            case CMD$1.M:
+                // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点
+                // 在 closePath 的时候使用
+                x0 = data[i++];
+                y0 = data[i++];
+                xi = x0;
+                yi = y0;
+                break;
+            case CMD$1.L:
+                if (isStroke) {
+                    if (containStroke$1(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {
+                        return true;
+                    }
+                }
+                else {
+                    // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN
+                    w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;
+                }
+                xi = data[i++];
+                yi = data[i++];
+                break;
+            case CMD$1.C:
+                if (isStroke) {
+                    if (containStroke$2(xi, yi,
+                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],
+                        lineWidth, x, y
+                    )) {
+                        return true;
+                    }
+                }
+                else {
+                    w += windingCubic(
+                        xi, yi,
+                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],
+                        x, y
+                    ) || 0;
+                }
+                xi = data[i++];
+                yi = data[i++];
+                break;
+            case CMD$1.Q:
+                if (isStroke) {
+                    if (containStroke$3(xi, yi,
+                        data[i++], data[i++], data[i], data[i + 1],
+                        lineWidth, x, y
+                    )) {
+                        return true;
+                    }
+                }
+                else {
+                    w += windingQuadratic(
+                        xi, yi,
+                        data[i++], data[i++], data[i], data[i + 1],
+                        x, y
+                    ) || 0;
+                }
+                xi = data[i++];
+                yi = data[i++];
+                break;
+            case CMD$1.A:
+                // TODO Arc 判断的开销比较大
+                var cx = data[i++];
+                var cy = data[i++];
+                var rx = data[i++];
+                var ry = data[i++];
+                var theta = data[i++];
+                var dTheta = data[i++];
+                // TODO Arc 旋转
+                var psi = data[i++];
+                var anticlockwise = 1 - data[i++];
+                var x1 = Math.cos(theta) * rx + cx;
+                var y1 = Math.sin(theta) * ry + cy;
+                // 不是直接使用 arc 命令
+                if (i > 1) {
+                    w += windingLine(xi, yi, x1, y1, x, y);
+                }
+                else {
+                    // 第一个命令起点还未定义
+                    x0 = x1;
+                    y0 = y1;
+                }
+                // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放
+                var _x = (x - cx) * ry / rx + cx;
+                if (isStroke) {
+                    if (containStroke$4(
+                        cx, cy, ry, theta, theta + dTheta, anticlockwise,
+                        lineWidth, _x, y
+                    )) {
+                        return true;
+                    }
+                }
+                else {
+                    w += windingArc(
+                        cx, cy, ry, theta, theta + dTheta, anticlockwise,
+                        _x, y
+                    );
+                }
+                xi = Math.cos(theta + dTheta) * rx + cx;
+                yi = Math.sin(theta + dTheta) * ry + cy;
+                break;
+            case CMD$1.R:
+                x0 = xi = data[i++];
+                y0 = yi = data[i++];
+                var width = data[i++];
+                var height = data[i++];
+                var x1 = x0 + width;
+                var y1 = y0 + height;
+                if (isStroke) {
+                    if (containStroke$1(x0, y0, x1, y0, lineWidth, x, y)
+                        || containStroke$1(x1, y0, x1, y1, lineWidth, x, y)
+                        || containStroke$1(x1, y1, x0, y1, lineWidth, x, y)
+                        || containStroke$1(x0, y1, x0, y0, lineWidth, x, y)
+                    ) {
+                        return true;
+                    }
+                }
+                else {
+                    // FIXME Clockwise ?
+                    w += windingLine(x1, y0, x1, y1, x, y);
+                    w += windingLine(x0, y1, x0, y0, x, y);
+                }
+                break;
+            case CMD$1.Z:
+                if (isStroke) {
+                    if (containStroke$1(
+                        xi, yi, x0, y0, lineWidth, x, y
+                    )) {
+                        return true;
+                    }
+                }
+                else {
+                    // Close a subpath
+                    w += windingLine(xi, yi, x0, y0, x, y);
+                    // 如果被任何一个 subpath 包含
+                    // FIXME subpaths may overlap
+                    // if (w !== 0) {
+                    //     return true;
+                    // }
+                }
+                xi = x0;
+                yi = y0;
+                break;
+        }
+    }
+    if (!isStroke && !isAroundEqual(yi, y0)) {
+        w += windingLine(xi, yi, x0, y0, x, y) || 0;
+    }
+    return w !== 0;
+}
+
+function contain(pathData, x, y) {
+    return containPath(pathData, 0, false, x, y);
+}
+
+function containStroke(pathData, lineWidth, x, y) {
+    return containPath(pathData, lineWidth, true, x, y);
+}
+
+var getCanvasPattern = Pattern.prototype.getCanvasPattern;
+
+var abs = Math.abs;
+
+var pathProxyForDraw = new PathProxy(true);
+/**
+ * @alias module:zrender/graphic/Path
+ * @extends module:zrender/graphic/Displayable
+ * @constructor
+ * @param {Object} opts
+ */
+function Path(opts) {
+    Displayable.call(this, opts);
+
+    /**
+     * @type {module:zrender/core/PathProxy}
+     * @readOnly
+     */
+    this.path = null;
+}
+
+Path.prototype = {
+
+    constructor: Path,
+
+    type: 'path',
+
+    __dirtyPath: true,
+
+    strokeContainThreshold: 5,
+
+    brush: function (ctx, prevEl) {
+        var style = this.style;
+        var path = this.path || pathProxyForDraw;
+        var hasStroke = style.hasStroke();
+        var hasFill = style.hasFill();
+        var fill = style.fill;
+        var stroke = style.stroke;
+        var hasFillGradient = hasFill && !!(fill.colorStops);
+        var hasStrokeGradient = hasStroke && !!(stroke.colorStops);
+        var hasFillPattern = hasFill && !!(fill.image);
+        var hasStrokePattern = hasStroke && !!(stroke.image);
+
+        style.bind(ctx, this, prevEl);
+        this.setTransform(ctx);
+
+        if (this.__dirty) {
+            var rect;
+            // Update gradient because bounding rect may changed
+            if (hasFillGradient) {
+                rect = rect || this.getBoundingRect();
+                this._fillGradient = style.getGradient(ctx, fill, rect);
+            }
+            if (hasStrokeGradient) {
+                rect = rect || this.getBoundingRect();
+                this._strokeGradient = style.getGradient(ctx, stroke, rect);
+            }
+        }
+        // Use the gradient or pattern
+        if (hasFillGradient) {
+            // PENDING If may have affect the state
+            ctx.fillStyle = this._fillGradient;
+        }
+        else if (hasFillPattern) {
+            ctx.fillStyle = getCanvasPattern.call(fill, ctx);
+        }
+        if (hasStrokeGradient) {
+            ctx.strokeStyle = this._strokeGradient;
+        }
+        else if (hasStrokePattern) {
+            ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);
+        }
+
+        var lineDash = style.lineDash;
+        var lineDashOffset = style.lineDashOffset;
+
+        var ctxLineDash = !!ctx.setLineDash;
+
+        // Update path sx, sy
+        var scale = this.getGlobalScale();
+        path.setScale(scale[0], scale[1]);
+
+        // Proxy context
+        // Rebuild path in following 2 cases
+        // 1. Path is dirty
+        // 2. Path needs javascript implemented lineDash stroking.
+        //    In this case, lineDash information will not be saved in PathProxy
+        if (this.__dirtyPath
+            || (lineDash && !ctxLineDash && hasStroke)
+        ) {
+            path.beginPath(ctx);
+
+            // Setting line dash before build path
+            if (lineDash && !ctxLineDash) {
+                path.setLineDash(lineDash);
+                path.setLineDashOffset(lineDashOffset);
+            }
+
+            this.buildPath(path, this.shape, false);
+
+            // Clear path dirty flag
+            if (this.path) {
+                this.__dirtyPath = false;
+            }
+        }
+        else {
+            // Replay path building
+            ctx.beginPath();
+            this.path.rebuildPath(ctx);
+        }
+
+        hasFill && path.fill(ctx);
+
+        if (lineDash && ctxLineDash) {
+            ctx.setLineDash(lineDash);
+            ctx.lineDashOffset = lineDashOffset;
+        }
+
+        hasStroke && path.stroke(ctx);
+
+        if (lineDash && ctxLineDash) {
+            // PENDING
+            // Remove lineDash
+            ctx.setLineDash([]);
+        }
+
+        // Draw rect text
+        if (style.text != null) {
+            // Only restore transform when needs draw text.
+            this.restoreTransform(ctx);    
+            this.drawRectText(ctx, this.getBoundingRect());
+        }
+    },
+
+    // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath
+    // Like in circle
+    buildPath: function (ctx, shapeCfg, inBundle) {},
+
+    createPathProxy: function () {
+        this.path = new PathProxy();
+    },
+
+    getBoundingRect: function () {
+        var rect = this._rect;
+        var style = this.style;
+        var needsUpdateRect = !rect;
+        if (needsUpdateRect) {
+            var path = this.path;
+            if (!path) {
+                // Create path on demand.
+                path = this.path = new PathProxy();
+            }
+            if (this.__dirtyPath) {
+                path.beginPath();
+                this.buildPath(path, this.shape, false);
+            }
+            rect = path.getBoundingRect();
+        }
+        this._rect = rect;
+
+        if (style.hasStroke()) {
+            // Needs update rect with stroke lineWidth when
+            // 1. Element changes scale or lineWidth
+            // 2. Shape is changed
+            var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());
+            if (this.__dirty || needsUpdateRect) {
+                rectWithStroke.copy(rect);
+                // FIXME Must after updateTransform
+                var w = style.lineWidth;
+                // PENDING, Min line width is needed when line is horizontal or vertical
+                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;
+
+                // Only add extra hover lineWidth when there are no fill
+                if (!style.hasFill()) {
+                    w = Math.max(w, this.strokeContainThreshold || 4);
+                }
+                // Consider line width
+                // Line scale can't be 0;
+                if (lineScale > 1e-10) {
+                    rectWithStroke.width += w / lineScale;
+                    rectWithStroke.height += w / lineScale;
+                    rectWithStroke.x -= w / lineScale / 2;
+                    rectWithStroke.y -= w / lineScale / 2;
+                }
+            }
+
+            // Return rect with stroke
+            return rectWithStroke;
+        }
+
+        return rect;
+    },
+
+    contain: function (x, y) {
+        var localPos = this.transformCoordToLocal(x, y);
+        var rect = this.getBoundingRect();
+        var style = this.style;
+        x = localPos[0];
+        y = localPos[1];
+
+        if (rect.contain(x, y)) {
+            var pathData = this.path.data;
+            if (style.hasStroke()) {
+                var lineWidth = style.lineWidth;
+                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;
+                // Line scale can't be 0;
+                if (lineScale > 1e-10) {
+                    // Only add extra hover lineWidth when there are no fill
+                    if (!style.hasFill()) {
+                        lineWidth = Math.max(lineWidth, this.strokeContainThreshold);
+                    }
+                    if (containStroke(
+                        pathData, lineWidth / lineScale, x, y
+                    )) {
+                        return true;
+                    }
+                }
+            }
+            if (style.hasFill()) {
+                return contain(pathData, x, y);
+            }
+        }
+        return false;
+    },
+
+    /**
+     * @param  {boolean} dirtyPath
+     */
+    dirty: function (dirtyPath) {
+        if (dirtyPath == null) {
+            dirtyPath = true;
+        }
+        // Only mark dirty, not mark clean
+        if (dirtyPath) {
+            this.__dirtyPath = dirtyPath;
+            this._rect = null;
+        }
+
+        this.__dirty = true;
+
+        this.__zr && this.__zr.refresh();
+
+        // Used as a clipping path
+        if (this.__clipTarget) {
+            this.__clipTarget.dirty();
+        }
+    },
+
+    /**
+     * Alias for animate('shape')
+     * @param {boolean} loop
+     */
+    animateShape: function (loop) {
+        return this.animate('shape', loop);
+    },
+
+    // Overwrite attrKV
+    attrKV: function (key, value) {
+        // FIXME
+        if (key === 'shape') {
+            this.setShape(value);
+            this.__dirtyPath = true;
+            this._rect = null;
+        }
+        else {
+            Displayable.prototype.attrKV.call(this, key, value);
+        }
+    },
+
+    /**
+     * @param {Object|string} key
+     * @param {*} value
+     */
+    setShape: function (key, value) {
+        var shape = this.shape;
+        // Path from string may not have shape
+        if (shape) {
+            if (isObject$1(key)) {
+                for (var name in key) {
+                    if (key.hasOwnProperty(name)) {
+                        shape[name] = key[name];
+                    }
+                }
+            }
+            else {
+                shape[key] = value;
+            }
+            this.dirty(true);
+        }
+        return this;
+    },
+
+    getLineScale: function () {
+        var m = this.transform;
+        // Get the line scale.
+        // Determinant of `m` means how much the area is enlarged by the
+        // transformation. So its square root can be used as a scale factor
+        // for width.
+        return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10
+            ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))
+            : 1;
+    }
+};
+
+/**
+ * 扩展一个 Path element, 比如星形,圆等。
+ * Extend a path element
+ * @param {Object} props
+ * @param {string} props.type Path type
+ * @param {Function} props.init Initialize
+ * @param {Function} props.buildPath Overwrite buildPath method
+ * @param {Object} [props.style] Extended default style config
+ * @param {Object} [props.shape] Extended default shape config
+ */
+Path.extend = function (defaults$$1) {
+    var Sub = function (opts) {
+        Path.call(this, opts);
+
+        if (defaults$$1.style) {
+            // Extend default style
+            this.style.extendFrom(defaults$$1.style, false);
+        }
+
+        // Extend default shape
+        var defaultShape = defaults$$1.shape;
+        if (defaultShape) {
+            this.shape = this.shape || {};
+            var thisShape = this.shape;
+            for (var name in defaultShape) {
+                if (
+                    ! thisShape.hasOwnProperty(name)
+                    && defaultShape.hasOwnProperty(name)
+                ) {
+                    thisShape[name] = defaultShape[name];
+                }
+            }
+        }
+
+        defaults$$1.init && defaults$$1.init.call(this, opts);
+    };
+
+    inherits(Sub, Path);
+
+    // FIXME 不能 extend position, rotation 等引用对象
+    for (var name in defaults$$1) {
+        // Extending prototype values and methods
+        if (name !== 'style' && name !== 'shape') {
+            Sub.prototype[name] = defaults$$1[name];
+        }
+    }
+
+    return Sub;
+};
+
+inherits(Path, Displayable);
+
+var CMD$2 = PathProxy.CMD;
+
+var points = [[], [], []];
+var mathSqrt$3 = Math.sqrt;
+var mathAtan2 = Math.atan2;
+
+var transformPath = function (path, m) {
+    var data = path.data;
+    var cmd;
+    var nPoint;
+    var i;
+    var j;
+    var k;
+    var p;
+
+    var M = CMD$2.M;
+    var C = CMD$2.C;
+    var L = CMD$2.L;
+    var R = CMD$2.R;
+    var A = CMD$2.A;
+    var Q = CMD$2.Q;
+
+    for (i = 0, j = 0; i < data.length;) {
+        cmd = data[i++];
+        j = i;
+        nPoint = 0;
+
+        switch (cmd) {
+            case M:
+                nPoint = 1;
+                break;
+            case L:
+                nPoint = 1;
+                break;
+            case C:
+                nPoint = 3;
+                break;
+            case Q:
+                nPoint = 2;
+                break;
+            case A:
+                var x = m[4];
+                var y = m[5];
+                var sx = mathSqrt$3(m[0] * m[0] + m[1] * m[1]);
+                var sy = mathSqrt$3(m[2] * m[2] + m[3] * m[3]);
+                var angle = mathAtan2(-m[1] / sy, m[0] / sx);
+                // cx
+                data[i] *= sx;
+                data[i++] += x;
+                // cy
+                data[i] *= sy;
+                data[i++] += y;
+                // Scale rx and ry
+                // FIXME Assume psi is 0 here
+                data[i++] *= sx;
+                data[i++] *= sy;
+
+                // Start angle
+                data[i++] += angle;
+                // end angle
+                data[i++] += angle;
+                // FIXME psi
+                i += 2;
+                j = i;
+                break;
+            case R:
+                // x0, y0
+                p[0] = data[i++];
+                p[1] = data[i++];
+                applyTransform(p, p, m);
+                data[j++] = p[0];
+                data[j++] = p[1];
+                // x1, y1
+                p[0] += data[i++];
+                p[1] += data[i++];
+                applyTransform(p, p, m);
+                data[j++] = p[0];
+                data[j++] = p[1];
+        }
+
+        for (k = 0; k < nPoint; k++) {
+            var p = points[k];
+            p[0] = data[i++];
+            p[1] = data[i++];
+
+            applyTransform(p, p, m);
+            // Write back
+            data[j++] = p[0];
+            data[j++] = p[1];
+        }
+    }
+};
+
+// command chars
+var cc = [
+    'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',
+    'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'
+];
+
+var mathSqrt = Math.sqrt;
+var mathSin = Math.sin;
+var mathCos = Math.cos;
+var PI = Math.PI;
+
+var vMag = function(v) {
+    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
+};
+var vRatio = function(u, v) {
+    return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
+};
+var vAngle = function(u, v) {
+    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)
+            * Math.acos(vRatio(u, v));
+};
+
+function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {
+    var psi = psiDeg * (PI / 180.0);
+    var xp = mathCos(psi) * (x1 - x2) / 2.0
+                + mathSin(psi) * (y1 - y2) / 2.0;
+    var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0
+                + mathCos(psi) * (y1 - y2) / 2.0;
+
+    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);
+
+    if (lambda > 1) {
+        rx *= mathSqrt(lambda);
+        ry *= mathSqrt(lambda);
+    }
+
+    var f = (fa === fs ? -1 : 1)
+        * mathSqrt((((rx * rx) * (ry * ry))
+                - ((rx * rx) * (yp * yp))
+                - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)
+                + (ry * ry) * (xp * xp))
+            ) || 0;
+
+    var cxp = f * rx * yp / ry;
+    var cyp = f * -ry * xp / rx;
+
+    var cx = (x1 + x2) / 2.0
+                + mathCos(psi) * cxp
+                - mathSin(psi) * cyp;
+    var cy = (y1 + y2) / 2.0
+            + mathSin(psi) * cxp
+            + mathCos(psi) * cyp;
+
+    var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);
+    var u = [ (xp - cxp) / rx, (yp - cyp) / ry ];
+    var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];
+    var dTheta = vAngle(u, v);
+
+    if (vRatio(u, v) <= -1) {
+        dTheta = PI;
+    }
+    if (vRatio(u, v) >= 1) {
+        dTheta = 0;
+    }
+    if (fs === 0 && dTheta > 0) {
+        dTheta = dTheta - 2 * PI;
+    }
+    if (fs === 1 && dTheta < 0) {
+        dTheta = dTheta + 2 * PI;
+    }
+
+    path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);
+}
+
+function createPathProxyFromString(data) {
+    if (!data) {
+        return [];
+    }
+
+    // command string
+    var cs = data.replace(/-/g, ' -')
+        .replace(/  /g, ' ')
+        .replace(/ /g, ',')
+        .replace(/,,/g, ',');
+
+    var n;
+    // create pipes so that we can split the data
+    for (n = 0; n < cc.length; n++) {
+        cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);
+    }
+
+    // create array
+    var arr = cs.split('|');
+    // init context point
+    var cpx = 0;
+    var cpy = 0;
+
+    var path = new PathProxy();
+    var CMD = PathProxy.CMD;
+
+    var prevCmd;
+    for (n = 1; n < arr.length; n++) {
+        var str = arr[n];
+        var c = str.charAt(0);
+        var off = 0;
+        var p = str.slice(1).replace(/e,-/g, 'e-').split(',');
+        var cmd;
+
+        if (p.length > 0 && p[0] === '') {
+            p.shift();
+        }
+
+        for (var i = 0; i < p.length; i++) {
+            p[i] = parseFloat(p[i]);
+        }
+        while (off < p.length && !isNaN(p[off])) {
+            if (isNaN(p[0])) {
+                break;
+            }
+            var ctlPtx;
+            var ctlPty;
+
+            var rx;
+            var ry;
+            var psi;
+            var fa;
+            var fs;
+
+            var x1 = cpx;
+            var y1 = cpy;
+
+            // convert l, H, h, V, and v to L
+            switch (c) {
+                case 'l':
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'L':
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'm':
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    cmd = CMD.M;
+                    path.addData(cmd, cpx, cpy);
+                    c = 'l';
+                    break;
+                case 'M':
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    cmd = CMD.M;
+                    path.addData(cmd, cpx, cpy);
+                    c = 'L';
+                    break;
+                case 'h':
+                    cpx += p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'H':
+                    cpx = p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'v':
+                    cpy += p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'V':
+                    cpy = p[off++];
+                    cmd = CMD.L;
+                    path.addData(cmd, cpx, cpy);
+                    break;
+                case 'C':
+                    cmd = CMD.C;
+                    path.addData(
+                        cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]
+                    );
+                    cpx = p[off - 2];
+                    cpy = p[off - 1];
+                    break;
+                case 'c':
+                    cmd = CMD.C;
+                    path.addData(
+                        cmd,
+                        p[off++] + cpx, p[off++] + cpy,
+                        p[off++] + cpx, p[off++] + cpy,
+                        p[off++] + cpx, p[off++] + cpy
+                    );
+                    cpx += p[off - 2];
+                    cpy += p[off - 1];
+                    break;
+                case 'S':
+                    ctlPtx = cpx;
+                    ctlPty = cpy;
+                    var len = path.len();
+                    var pathData = path.data;
+                    if (prevCmd === CMD.C) {
+                        ctlPtx += cpx - pathData[len - 4];
+                        ctlPty += cpy - pathData[len - 3];
+                    }
+                    cmd = CMD.C;
+                    x1 = p[off++];
+                    y1 = p[off++];
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);
+                    break;
+                case 's':
+                    ctlPtx = cpx;
+                    ctlPty = cpy;
+                    var len = path.len();
+                    var pathData = path.data;
+                    if (prevCmd === CMD.C) {
+                        ctlPtx += cpx - pathData[len - 4];
+                        ctlPty += cpy - pathData[len - 3];
+                    }
+                    cmd = CMD.C;
+                    x1 = cpx + p[off++];
+                    y1 = cpy + p[off++];
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);
+                    break;
+                case 'Q':
+                    x1 = p[off++];
+                    y1 = p[off++];
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    cmd = CMD.Q;
+                    path.addData(cmd, x1, y1, cpx, cpy);
+                    break;
+                case 'q':
+                    x1 = p[off++] + cpx;
+                    y1 = p[off++] + cpy;
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    cmd = CMD.Q;
+                    path.addData(cmd, x1, y1, cpx, cpy);
+                    break;
+                case 'T':
+                    ctlPtx = cpx;
+                    ctlPty = cpy;
+                    var len = path.len();
+                    var pathData = path.data;
+                    if (prevCmd === CMD.Q) {
+                        ctlPtx += cpx - pathData[len - 4];
+                        ctlPty += cpy - pathData[len - 3];
+                    }
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    cmd = CMD.Q;
+                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);
+                    break;
+                case 't':
+                    ctlPtx = cpx;
+                    ctlPty = cpy;
+                    var len = path.len();
+                    var pathData = path.data;
+                    if (prevCmd === CMD.Q) {
+                        ctlPtx += cpx - pathData[len - 4];
+                        ctlPty += cpy - pathData[len - 3];
+                    }
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    cmd = CMD.Q;
+                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);
+                    break;
+                case 'A':
+                    rx = p[off++];
+                    ry = p[off++];
+                    psi = p[off++];
+                    fa = p[off++];
+                    fs = p[off++];
+
+                    x1 = cpx, y1 = cpy;
+                    cpx = p[off++];
+                    cpy = p[off++];
+                    cmd = CMD.A;
+                    processArc(
+                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path
+                    );
+                    break;
+                case 'a':
+                    rx = p[off++];
+                    ry = p[off++];
+                    psi = p[off++];
+                    fa = p[off++];
+                    fs = p[off++];
+
+                    x1 = cpx, y1 = cpy;
+                    cpx += p[off++];
+                    cpy += p[off++];
+                    cmd = CMD.A;
+                    processArc(
+                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path
+                    );
+                    break;
+            }
+        }
+
+        if (c === 'z' || c === 'Z') {
+            cmd = CMD.Z;
+            path.addData(cmd);
+        }
+
+        prevCmd = cmd;
+    }
+
+    path.toStatic();
+
+    return path;
+}
+
+// TODO Optimize double memory cost problem
+function createPathOptions(str, opts) {
+    var pathProxy = createPathProxyFromString(str);
+    opts = opts || {};
+    opts.buildPath = function (path) {
+        if (path.setData) {
+            path.setData(pathProxy.data);
+            // Svg and vml renderer don't have context
+            var ctx = path.getContext();
+            if (ctx) {
+                path.rebuildPath(ctx);
+            }
+        }
+        else {
+            var ctx = path;
+            pathProxy.rebuildPath(ctx);
+        }
+    };
+
+    opts.applyTransform = function (m) {
+        transformPath(pathProxy, m);
+        this.dirty(true);
+    };
+
+    return opts;
+}
+
+/**
+ * Create a Path object from path string data
+ * http://www.w3.org/TR/SVG/paths.html#PathData
+ * @param  {Object} opts Other options
+ */
+function createFromString(str, opts) {
+    return new Path(createPathOptions(str, opts));
+}
+
+/**
+ * Create a Path class from path string data
+ * @param  {string} str
+ * @param  {Object} opts Other options
+ */
+function extendFromString(str, opts) {
+    return Path.extend(createPathOptions(str, opts));
+}
+
+/**
+ * Merge multiple paths
+ */
+// TODO Apply transform
+// TODO stroke dash
+// TODO Optimize double memory cost problem
+function mergePath$1(pathEls, opts) {
+    var pathList = [];
+    var len = pathEls.length;
+    for (var i = 0; i < len; i++) {
+        var pathEl = pathEls[i];
+        if (!pathEl.path) {
+            pathEl.createPathProxy();
+        }
+        if (pathEl.__dirtyPath) {
+            pathEl.buildPath(pathEl.path, pathEl.shape, true);
+        }
+        pathList.push(pathEl.path);
+    }
+
+    var pathBundle = new Path(opts);
+    // Need path proxy.
+    pathBundle.createPathProxy();
+    pathBundle.buildPath = function (path) {
+        path.appendPath(pathList);
+        // Svg and vml renderer don't have context
+        var ctx = path.getContext();
+        if (ctx) {
+            path.rebuildPath(ctx);
+        }
+    };
+
+    return pathBundle;
+}
+
+/**
+ * @alias zrender/graphic/Text
+ * @extends module:zrender/graphic/Displayable
+ * @constructor
+ * @param {Object} opts
+ */
+var Text = function (opts) { // jshint ignore:line
+    Displayable.call(this, opts);
+};
+
+Text.prototype = {
+
+    constructor: Text,
+
+    type: 'text',
+
+    brush: function (ctx, prevEl) {
+        var style = this.style;
+
+        // Optimize, avoid normalize every time.
+        this.__dirty && normalizeTextStyle(style, true);
+
+        // Use props with prefix 'text'.
+        style.fill = style.stroke = style.shadowBlur = style.shadowColor =
+            style.shadowOffsetX = style.shadowOffsetY = null;
+
+        var text = style.text;
+        // Convert to string
+        text != null && (text += '');
+
+        // Always bind style
+        style.bind(ctx, this, prevEl);
+
+        if (!needDrawText(text, style)) {
+            return;
+        }
+
+        this.setTransform(ctx);
+
+        renderText(this, ctx, text, style);
+
+        this.restoreTransform(ctx);
+    },
+
+    getBoundingRect: function () {
+        var style = this.style;
+
+        // Optimize, avoid normalize every time.
+        this.__dirty && normalizeTextStyle(style, true);
+
+        if (!this._rect) {
+            var text = style.text;
+            text != null ? (text += '') : (text = '');
+
+            var rect = getBoundingRect(
+                style.text + '',
+                style.font,
+                style.textAlign,
+                style.textVerticalAlign,
+                style.textPadding,
+                style.rich
+            );
+
+            rect.x += style.x || 0;
+            rect.y += style.y || 0;
+
+            if (getStroke(style.textStroke, style.textStrokeWidth)) {
+                var w = style.textStrokeWidth;
+                rect.x -= w / 2;
+                rect.y -= w / 2;
+                rect.width += w;
+                rect.height += w;
+            }
+
+            this._rect = rect;
+        }
+
+        return this._rect;
+    }
+};
+
+inherits(Text, Displayable);
+
+/**
+ * 圆形
+ * @module zrender/shape/Circle
+ */
+
+var Circle = Path.extend({
+
+    type: 'circle',
+
+    shape: {
+        cx: 0,
+        cy: 0,
+        r: 0
+    },
+
+
+    buildPath : function (ctx, shape, inBundle) {
+        // Better stroking in ShapeBundle
+        // Always do it may have performence issue ( fill may be 2x more cost)
+        if (inBundle) {
+            ctx.moveTo(shape.cx + shape.r, shape.cy);
+        }
+        // else {
+        //     if (ctx.allocate && !ctx.data.length) {
+        //         ctx.allocate(ctx.CMD_MEM_SIZE.A);
+        //     }
+        // }
+        // Better stroking in ShapeBundle
+        // ctx.moveTo(shape.cx + shape.r, shape.cy);
+        ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);
+    }
+});
+
+// Fix weird bug in some version of IE11 (like 11.0.9600.178**),
+// where exception "unexpected call to method or property access"
+// might be thrown when calling ctx.fill or ctx.stroke after a path
+// whose area size is zero is drawn and ctx.clip() is called and
+// shadowBlur is set. See #4572, #3112, #5777.
+// (e.g.,
+//  ctx.moveTo(10, 10);
+//  ctx.lineTo(20, 10);
+//  ctx.closePath();
+//  ctx.clip();
+//  ctx.shadowBlur = 10;
+//  ...
+//  ctx.fill();
+// )
+
+var shadowTemp = [
+    ['shadowBlur', 0],
+    ['shadowColor', '#000'],
+    ['shadowOffsetX', 0],
+    ['shadowOffsetY', 0]
+];
+
+var fixClipWithShadow = function (orignalBrush) {
+
+    // version string can be: '11.0'
+    return (env$1.browser.ie && env$1.browser.version >= 11)
+
+        ? function () {
+            var clipPaths = this.__clipPaths;
+            var style = this.style;
+            var modified;
+
+            if (clipPaths) {
+                for (var i = 0; i < clipPaths.length; i++) {
+                    var clipPath = clipPaths[i];
+                    var shape = clipPath && clipPath.shape;
+                    var type = clipPath && clipPath.type;
+
+                    if (shape && (
+                        (type === 'sector' && shape.startAngle === shape.endAngle)
+                        || (type === 'rect' && (!shape.width || !shape.height))
+                    )) {
+                        for (var j = 0; j < shadowTemp.length; j++) {
+                            // It is save to put shadowTemp static, because shadowTemp
+                            // will be all modified each item brush called.
+                            shadowTemp[j][2] = style[shadowTemp[j][0]];
+                            style[shadowTemp[j][0]] = shadowTemp[j][1];
+                        }
+                        modified = true;
+                        break;
+                    }
+                }
+            }
+
+            orignalBrush.apply(this, arguments);
+
+            if (modified) {
+                for (var j = 0; j < shadowTemp.length; j++) {
+                    style[shadowTemp[j][0]] = shadowTemp[j][2];
+                }
+            }
+        }
+
+        : orignalBrush;
+};
+
+/**
+ * 扇形
+ * @module zrender/graphic/shape/Sector
+ */
+
+var Sector = Path.extend({
+
+    type: 'sector',
+
+    shape: {
+
+        cx: 0,
+
+        cy: 0,
+
+        r0: 0,
+
+        r: 0,
+
+        startAngle: 0,
+
+        endAngle: Math.PI * 2,
+
+        clockwise: true
+    },
+
+    brush: fixClipWithShadow(Path.prototype.brush),
+
+    buildPath: function (ctx, shape) {
+
+        var x = shape.cx;
+        var y = shape.cy;
+        var r0 = Math.max(shape.r0 || 0, 0);
+        var r = Math.max(shape.r, 0);
+        var startAngle = shape.startAngle;
+        var endAngle = shape.endAngle;
+        var clockwise = shape.clockwise;
+
+        var unitX = Math.cos(startAngle);
+        var unitY = Math.sin(startAngle);
+
+        ctx.moveTo(unitX * r0 + x, unitY * r0 + y);
+
+        ctx.lineTo(unitX * r + x, unitY * r + y);
+
+        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);
+
+        ctx.lineTo(
+            Math.cos(endAngle) * r0 + x,
+            Math.sin(endAngle) * r0 + y
+        );
+
+        if (r0 !== 0) {
+            ctx.arc(x, y, r0, endAngle, startAngle, clockwise);
+        }
+
+        ctx.closePath();
+    }
+});
+
+/**
+ * 圆环
+ * @module zrender/graphic/shape/Ring
+ */
+
+var Ring = Path.extend({
+
+    type: 'ring',
+
+    shape: {
+        cx: 0,
+        cy: 0,
+        r: 0,
+        r0: 0
+    },
+
+    buildPath: function (ctx, shape) {
+        var x = shape.cx;
+        var y = shape.cy;
+        var PI2 = Math.PI * 2;
+        ctx.moveTo(x + shape.r, y);
+        ctx.arc(x, y, shape.r, 0, PI2, false);
+        ctx.moveTo(x + shape.r0, y);
+        ctx.arc(x, y, shape.r0, 0, PI2, true);
+    }
+});
+
+/**
+ * Catmull-Rom spline 插值折线
+ * @module zrender/shape/util/smoothSpline
+ * @author pissang (https://www.github.com/pissang)
+ *         Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ *         errorrik (errorrik@gmail.com)
+ */
+
+/**
+ * @inner
+ */
+function interpolate(p0, p1, p2, p3, t, t2, t3) {
+    var v0 = (p2 - p0) * 0.5;
+    var v1 = (p3 - p1) * 0.5;
+    return (2 * (p1 - p2) + v0 + v1) * t3
+            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2
+            + v0 * t + p1;
+}
+
+/**
+ * @alias module:zrender/shape/util/smoothSpline
+ * @param {Array} points 线段顶点数组
+ * @param {boolean} isLoop
+ * @return {Array}
+ */
+var smoothSpline = function (points, isLoop) {
+    var len$$1 = points.length;
+    var ret = [];
+
+    var distance$$1 = 0;
+    for (var i = 1; i < len$$1; i++) {
+        distance$$1 += distance(points[i - 1], points[i]);
+    }
+
+    var segs = distance$$1 / 2;
+    segs = segs < len$$1 ? len$$1 : segs;
+    for (var i = 0; i < segs; i++) {
+        var pos = i / (segs - 1) * (isLoop ? len$$1 : len$$1 - 1);
+        var idx = Math.floor(pos);
+
+        var w = pos - idx;
+
+        var p0;
+        var p1 = points[idx % len$$1];
+        var p2;
+        var p3;
+        if (!isLoop) {
+            p0 = points[idx === 0 ? idx : idx - 1];
+            p2 = points[idx > len$$1 - 2 ? len$$1 - 1 : idx + 1];
+            p3 = points[idx > len$$1 - 3 ? len$$1 - 1 : idx + 2];
+        }
+        else {
+            p0 = points[(idx - 1 + len$$1) % len$$1];
+            p2 = points[(idx + 1) % len$$1];
+            p3 = points[(idx + 2) % len$$1];
+        }
+
+        var w2 = w * w;
+        var w3 = w * w2;
+
+        ret.push([
+            interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),
+            interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)
+        ]);
+    }
+    return ret;
+};
+
+/**
+ * 贝塞尔平滑曲线
+ * @module zrender/shape/util/smoothBezier
+ * @author pissang (https://www.github.com/pissang)
+ *         Kener (@Kener-林峰, kener.linfeng@gmail.com)
+ *         errorrik (errorrik@gmail.com)
+ */
+
+/**
+ * 贝塞尔平滑曲线
+ * @alias module:zrender/shape/util/smoothBezier
+ * @param {Array} points 线段顶点数组
+ * @param {number} smooth 平滑等级, 0-1
+ * @param {boolean} isLoop
+ * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内
+ *                           比如 [[0, 0], [100, 100]], 这个包围盒会与
+ *                           整个折线的包围盒做一个并集用来约束控制点。
+ * @param {Array} 计算出来的控制点数组
+ */
+var smoothBezier = function (points, smooth, isLoop, constraint) {
+    var cps = [];
+
+    var v = [];
+    var v1 = [];
+    var v2 = [];
+    var prevPoint;
+    var nextPoint;
+
+    var min$$1, max$$1;
+    if (constraint) {
+        min$$1 = [Infinity, Infinity];
+        max$$1 = [-Infinity, -Infinity];
+        for (var i = 0, len$$1 = points.length; i < len$$1; i++) {
+            min(min$$1, min$$1, points[i]);
+            max(max$$1, max$$1, points[i]);
+        }
+        // 与指定的包围盒做并集
+        min(min$$1, min$$1, constraint[0]);
+        max(max$$1, max$$1, constraint[1]);
+    }
+
+    for (var i = 0, len$$1 = points.length; i < len$$1; i++) {
+        var point = points[i];
+
+        if (isLoop) {
+            prevPoint = points[i ? i - 1 : len$$1 - 1];
+            nextPoint = points[(i + 1) % len$$1];
+        }
+        else {
+            if (i === 0 || i === len$$1 - 1) {
+                cps.push(clone$1(points[i]));
+                continue;
+            }
+            else {
+                prevPoint = points[i - 1];
+                nextPoint = points[i + 1];
+            }
+        }
+
+        sub(v, nextPoint, prevPoint);
+
+        // use degree to scale the handle length
+        scale(v, v, smooth);
+
+        var d0 = distance(point, prevPoint);
+        var d1 = distance(point, nextPoint);
+        var sum = d0 + d1;
+        if (sum !== 0) {
+            d0 /= sum;
+            d1 /= sum;
+        }
+
+        scale(v1, v, -d0);
+        scale(v2, v, d1);
+        var cp0 = add([], point, v1);
+        var cp1 = add([], point, v2);
+        if (constraint) {
+            max(cp0, cp0, min$$1);
+            min(cp0, cp0, max$$1);
+            max(cp1, cp1, min$$1);
+            min(cp1, cp1, max$$1);
+        }
+        cps.push(cp0);
+        cps.push(cp1);
+    }
+
+    if (isLoop) {
+        cps.push(cps.shift());
+    }
+
+    return cps;
+};
+
+function buildPath$1(ctx, shape, closePath) {
+    var points = shape.points;
+    var smooth = shape.smooth;
+    if (points && points.length >= 2) {
+        if (smooth && smooth !== 'spline') {
+            var controlPoints = smoothBezier(
+                points, smooth, closePath, shape.smoothConstraint
+            );
+
+            ctx.moveTo(points[0][0], points[0][1]);
+            var len = points.length;
+            for (var i = 0; i < (closePath ? len : len - 1); i++) {
+                var cp1 = controlPoints[i * 2];
+                var cp2 = controlPoints[i * 2 + 1];
+                var p = points[(i + 1) % len];
+                ctx.bezierCurveTo(
+                    cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]
+                );
+            }
+        }
+        else {
+            if (smooth === 'spline') {
+                points = smoothSpline(points, closePath);
+            }
+
+            ctx.moveTo(points[0][0], points[0][1]);
+            for (var i = 1, l = points.length; i < l; i++) {
+                ctx.lineTo(points[i][0], points[i][1]);
+            }
+        }
+
+        closePath && ctx.closePath();
+    }
+}
+
+/**
+ * 多边形
+ * @module zrender/shape/Polygon
+ */
+
+var Polygon = Path.extend({
+
+    type: 'polygon',
+
+    shape: {
+        points: null,
+
+        smooth: false,
+
+        smoothConstraint: null
+    },
+
+    buildPath: function (ctx, shape) {
+        buildPath$1(ctx, shape, true);
+    }
+});
+
+/**
+ * @module zrender/graphic/shape/Polyline
+ */
+
+var Polyline = Path.extend({
+
+    type: 'polyline',
+
+    shape: {
+        points: null,
+
+        smooth: false,
+
+        smoothConstraint: null
+    },
+
+    style: {
+        stroke: '#000',
+
+        fill: null
+    },
+
+    buildPath: function (ctx, shape) {
+        buildPath$1(ctx, shape, false);
+    }
+});
+
+/**
+ * 矩形
+ * @module zrender/graphic/shape/Rect
+ */
+
+var Rect = Path.extend({
+
+    type: 'rect',
+
+    shape: {
+        // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4
+        // r缩写为1         相当于 [1, 1, 1, 1]
+        // r缩写为[1]       相当于 [1, 1, 1, 1]
+        // r缩写为[1, 2]    相当于 [1, 2, 1, 2]
+        // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]
+        r: 0,
+
+        x: 0,
+        y: 0,
+        width: 0,
+        height: 0
+    },
+
+    buildPath: function (ctx, shape) {
+        var x = shape.x;
+        var y = shape.y;
+        var width = shape.width;
+        var height = shape.height;
+        if (!shape.r) {
+            ctx.rect(x, y, width, height);
+        }
+        else {
+            buildPath(ctx, shape);
+        }
+        ctx.closePath();
+        return;
+    }
+});
+
+/**
+ * 直线
+ * @module zrender/graphic/shape/Line
+ */
+
+var Line = Path.extend({
+
+    type: 'line',
+
+    shape: {
+        // Start point
+        x1: 0,
+        y1: 0,
+        // End point
+        x2: 0,
+        y2: 0,
+
+        percent: 1
+    },
+
+    style: {
+        stroke: '#000',
+        fill: null
+    },
+
+    buildPath: function (ctx, shape) {
+        var x1 = shape.x1;
+        var y1 = shape.y1;
+        var x2 = shape.x2;
+        var y2 = shape.y2;
+        var percent = shape.percent;
+
+        if (percent === 0) {
+            return;
+        }
+
+        ctx.moveTo(x1, y1);
+
+        if (percent < 1) {
+            x2 = x1 * (1 - percent) + x2 * percent;
+            y2 = y1 * (1 - percent) + y2 * percent;
+        }
+        ctx.lineTo(x2, y2);
+    },
+
+    /**
+     * Get point at percent
+     * @param  {number} percent
+     * @return {Array.<number>}
+     */
+    pointAt: function (p) {
+        var shape = this.shape;
+        return [
+            shape.x1 * (1 - p) + shape.x2 * p,
+            shape.y1 * (1 - p) + shape.y2 * p
+        ];
+    }
+});
+
+/**
+ * 贝塞尔曲线
+ * @module zrender/shape/BezierCurve
+ */
+
+var out = [];
+
+function someVectorAt(shape, t, isTangent) {
+    var cpx2 = shape.cpx2;
+    var cpy2 = shape.cpy2;
+    if (cpx2 === null || cpy2 === null) {
+        return [
+            (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),
+            (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)
+        ];
+    }
+    else {
+        return [
+            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),
+            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)
+        ];
+    }
+}
+
+var BezierCurve = Path.extend({
+
+    type: 'bezier-curve',
+
+    shape: {
+        x1: 0,
+        y1: 0,
+        x2: 0,
+        y2: 0,
+        cpx1: 0,
+        cpy1: 0,
+        // cpx2: 0,
+        // cpy2: 0
+
+        // Curve show percent, for animating
+        percent: 1
+    },
+
+    style: {
+        stroke: '#000',
+        fill: null
+    },
+
+    buildPath: function (ctx, shape) {
+        var x1 = shape.x1;
+        var y1 = shape.y1;
+        var x2 = shape.x2;
+        var y2 = shape.y2;
+        var cpx1 = shape.cpx1;
+        var cpy1 = shape.cpy1;
+        var cpx2 = shape.cpx2;
+        var cpy2 = shape.cpy2;
+        var percent = shape.percent;
+        if (percent === 0) {
+            return;
+        }
+
+        ctx.moveTo(x1, y1);
+
+        if (cpx2 == null || cpy2 == null) {
+            if (percent < 1) {
+                quadraticSubdivide(
+                    x1, cpx1, x2, percent, out
+                );
+                cpx1 = out[1];
+                x2 = out[2];
+                quadraticSubdivide(
+                    y1, cpy1, y2, percent, out
+                );
+                cpy1 = out[1];
+                y2 = out[2];
+            }
+
+            ctx.quadraticCurveTo(
+                cpx1, cpy1,
+                x2, y2
+            );
+        }
+        else {
+            if (percent < 1) {
+                cubicSubdivide(
+                    x1, cpx1, cpx2, x2, percent, out
+                );
+                cpx1 = out[1];
+                cpx2 = out[2];
+                x2 = out[3];
+                cubicSubdivide(
+                    y1, cpy1, cpy2, y2, percent, out
+                );
+                cpy1 = out[1];
+                cpy2 = out[2];
+                y2 = out[3];
+            }
+            ctx.bezierCurveTo(
+                cpx1, cpy1,
+                cpx2, cpy2,
+                x2, y2
+            );
+        }
+    },
+
+    /**
+     * Get point at percent
+     * @param  {number} t
+     * @return {Array.<number>}
+     */
+    pointAt: function (t) {
+        return someVectorAt(this.shape, t, false);
+    },
+
+    /**
+     * Get tangent at percent
+     * @param  {number} t
+     * @return {Array.<number>}
+     */
+    tangentAt: function (t) {
+        var p = someVectorAt(this.shape, t, true);
+        return normalize(p, p);
+    }
+});
+
+/**
+ * 圆弧
+ * @module zrender/graphic/shape/Arc
+ */
+
+var Arc = Path.extend({
+
+    type: 'arc',
+
+    shape: {
+
+        cx: 0,
+
+        cy: 0,
+
+        r: 0,
+
+        startAngle: 0,
+
+        endAngle: Math.PI * 2,
+
+        clockwise: true
+    },
+
+    style: {
+
+        stroke: '#000',
+
+        fill: null
+    },
+
+    buildPath: function (ctx, shape) {
+
+        var x = shape.cx;
+        var y = shape.cy;
+        var r = Math.max(shape.r, 0);
+        var startAngle = shape.startAngle;
+        var endAngle = shape.endAngle;
+        var clockwise = shape.clockwise;
+
+        var unitX = Math.cos(startAngle);
+        var unitY = Math.sin(startAngle);
+
+        ctx.moveTo(unitX * r + x, unitY * r + y);
+        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);
+    }
+});
+
+// CompoundPath to improve performance
+
+var CompoundPath = Path.extend({
+
+    type: 'compound',
+
+    shape: {
+
+        paths: null
+    },
+
+    _updatePathDirty: function () {
+        var dirtyPath = this.__dirtyPath;
+        var paths = this.shape.paths;
+        for (var i = 0; i < paths.length; i++) {
+            // Mark as dirty if any subpath is dirty
+            dirtyPath = dirtyPath || paths[i].__dirtyPath;
+        }
+        this.__dirtyPath = dirtyPath;
+        this.__dirty = this.__dirty || dirtyPath;
+    },
+
+    beforeBrush: function () {
+        this._updatePathDirty();
+        var paths = this.shape.paths || [];
+        var scale = this.getGlobalScale();
+        // Update path scale
+        for (var i = 0; i < paths.length; i++) {
+            if (!paths[i].path) {
+                paths[i].createPathProxy();
+            }
+            paths[i].path.setScale(scale[0], scale[1]);
+        }
+    },
+
+    buildPath: function (ctx, shape) {
+        var paths = shape.paths || [];
+        for (var i = 0; i < paths.length; i++) {
+            paths[i].buildPath(ctx, paths[i].shape, true);
+        }
+    },
+
+    afterBrush: function () {
+        var paths = this.shape.paths || [];
+        for (var i = 0; i < paths.length; i++) {
+            paths[i].__dirtyPath = false;
+        }
+    },
+
+    getBoundingRect: function () {
+        this._updatePathDirty();
+        return Path.prototype.getBoundingRect.call(this);
+    }
+});
+
+/**
+ * @param {Array.<Object>} colorStops
+ */
+var Gradient = function (colorStops) {
+
+    this.colorStops = colorStops || [];
+
+};
+
+Gradient.prototype = {
+
+    constructor: Gradient,
+
+    addColorStop: function (offset, color) {
+        this.colorStops.push({
+
+            offset: offset,
+
+            color: color
+        });
+    }
+
+};
+
+/**
+ * x, y, x2, y2 are all percent from 0 to 1
+ * @param {number} [x=0]
+ * @param {number} [y=0]
+ * @param {number} [x2=1]
+ * @param {number} [y2=0]
+ * @param {Array.<Object>} colorStops
+ * @param {boolean} [globalCoord=false]
+ */
+var LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) {
+    // Should do nothing more in this constructor. Because gradient can be
+    // declard by `color: {type: 'linear', colorStops: ...}`, where
+    // this constructor will not be called.
+
+    this.x = x == null ? 0 : x;
+
+    this.y = y == null ? 0 : y;
+
+    this.x2 = x2 == null ? 1 : x2;
+
+    this.y2 = y2 == null ? 0 : y2;
+
+    // Can be cloned
+    this.type = 'linear';
+
+    // If use global coord
+    this.global = globalCoord || false;
+
+    Gradient.call(this, colorStops);
+};
+
+LinearGradient.prototype = {
+
+    constructor: LinearGradient
+};
+
+inherits(LinearGradient, Gradient);
+
+/**
+ * x, y, r are all percent from 0 to 1
+ * @param {number} [x=0.5]
+ * @param {number} [y=0.5]
+ * @param {number} [r=0.5]
+ * @param {Array.<Object>} [colorStops]
+ * @param {boolean} [globalCoord=false]
+ */
+var RadialGradient = function (x, y, r, colorStops, globalCoord) {
+    // Should do nothing more in this constructor. Because gradient can be
+    // declard by `color: {type: 'radial', colorStops: ...}`, where
+    // this constructor will not be called.
+
+    this.x = x == null ? 0.5 : x;
+
+    this.y = y == null ? 0.5 : y;
+
+    this.r = r == null ? 0.5 : r;
+
+    // Can be cloned
+    this.type = 'radial';
+
+    // If use global coord
+    this.global = globalCoord || false;
+
+    Gradient.call(this, colorStops);
+};
+
+RadialGradient.prototype = {
+
+    constructor: RadialGradient
+};
+
+inherits(RadialGradient, Gradient);
+
+/**
+ * Displayable for incremental rendering. It will be rendered in a separate layer
+ * IncrementalDisplay have too main methods. `clearDisplayables` and `addDisplayables`
+ * addDisplayables will render the added displayables incremetally.
+ *
+ * It use a not clearFlag to tell the painter don't clear the layer if it's the first element.
+ */
+// TODO Style override ?
+function IncrementalDisplayble(opts) {
+
+    Displayable.call(this, opts);
+
+    this._displayables = [];
+
+    this._temporaryDisplayables = [];
+
+    this._cursor = 0;
+
+    this.notClear = true;
+}
+
+IncrementalDisplayble.prototype.incremental = true;
+
+IncrementalDisplayble.prototype.clearDisplaybles = function () {
+    this._displayables = [];
+    this._temporaryDisplayables = [];
+    this._cursor = 0;
+    this.dirty();
+
+    this.notClear = false;
+};
+
+IncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {
+    if (notPersistent) {
+        this._temporaryDisplayables.push(displayable);
+    }
+    else {
+        this._displayables.push(displayable);
+    }
+    this.dirty();
+};
+
+IncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {
+    notPersistent = notPersistent || false;
+    for (var i = 0; i < displayables.length; i++) {
+        this.addDisplayable(displayables[i], notPersistent);
+    }
+};
+
+IncrementalDisplayble.prototype.eachPendingDisplayable = function  (cb) {
+    for (var i = this._cursor; i < this._displayables.length; i++) {
+        cb && cb(this._displayables[i]);
+    }
+    for (var i = 0; i < this._temporaryDisplayables.length; i++) {
+        cb && cb(this._temporaryDisplayables[i]);
+    }
+};
+
+IncrementalDisplayble.prototype.update = function () {
+    this.updateTransform();
+    for (var i = this._cursor; i < this._displayables.length; i++) {
+        var displayable = this._displayables[i];
+        // PENDING
+        displayable.parent = this;
+        displayable.update();
+        displayable.parent = null;
+    }
+    for (var i = 0; i < this._temporaryDisplayables.length; i++) {
+        var displayable = this._temporaryDisplayables[i];
+        // PENDING
+        displayable.parent = this;
+        displayable.update();
+        displayable.parent = null;
+    }
+};
+
+IncrementalDisplayble.prototype.brush = function (ctx, prevEl) {
+    // Render persistant displayables.
+    for (var i = this._cursor; i < this._displayables.length; i++) {
+        var displayable = this._displayables[i];
+        displayable.beforeBrush && displayable.beforeBrush(ctx);
+        displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]);
+        displayable.afterBrush && displayable.afterBrush(ctx);
+    }
+    this._cursor = i;
+    // Render temporary displayables.
+    for (var i = 0; i < this._temporaryDisplayables.length; i++) {
+        var displayable = this._temporaryDisplayables[i];
+        displayable.beforeBrush && displayable.beforeBrush(ctx);
+        displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]);
+        displayable.afterBrush && displayable.afterBrush(ctx);
+    }
+
+    this._temporaryDisplayables = [];
+
+    this.notClear = true;
+};
+
+var m = [];
+IncrementalDisplayble.prototype.getBoundingRect = function () {
+    if (!this._rect) {
+        var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);
+        for (var i = 0; i < this._displayables.length; i++) {
+            var displayable = this._displayables[i];
+            var childRect = displayable.getBoundingRect().clone();
+            if (displayable.needLocalTransform()) {
+                childRect.applyTransform(displayable.getLocalTransform(m));
+            }
+            rect.union(childRect);
+        }
+        this._rect = rect;
+    }
+    return this._rect;
+};
+
+IncrementalDisplayble.prototype.contain = function (x, y) {
+    var localPos = this.transformCoordToLocal(x, y);
+    var rect = this.getBoundingRect();
+
+    if (rect.contain(localPos[0], localPos[1])) {
+        for (var i = 0; i < this._displayables.length; i++) {
+            var displayable = this._displayables[i];
+            if (displayable.contain(x, y)) {
+                return true;
+            }
+        }
+    }
+    return false;
+};
+
+inherits(IncrementalDisplayble, Displayable);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var round = Math.round;
+var mathMax$1 = Math.max;
+var mathMin$1 = Math.min;
+
+var EMPTY_OBJ = {};
+
+/**
+ * Extend shape with parameters
+ */
+function extendShape(opts) {
+    return Path.extend(opts);
+}
+
+/**
+ * Extend path
+ */
+function extendPath(pathData, opts) {
+    return extendFromString(pathData, opts);
+}
+
+/**
+ * Create a path element from path data string
+ * @param {string} pathData
+ * @param {Object} opts
+ * @param {module:zrender/core/BoundingRect} rect
+ * @param {string} [layout=cover] 'center' or 'cover'
+ */
+function makePath(pathData, opts, rect, layout) {
+    var path = createFromString(pathData, opts);
+    var boundingRect = path.getBoundingRect();
+    if (rect) {
+        if (layout === 'center') {
+            rect = centerGraphic(rect, boundingRect);
+        }
+
+        resizePath(path, rect);
+    }
+    return path;
+}
+
+/**
+ * Create a image element from image url
+ * @param {string} imageUrl image url
+ * @param {Object} opts options
+ * @param {module:zrender/core/BoundingRect} rect constrain rect
+ * @param {string} [layout=cover] 'center' or 'cover'
+ */
+function makeImage(imageUrl, rect, layout) {
+    var path = new ZImage({
+        style: {
+            image: imageUrl,
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        },
+        onload: function (img) {
+            if (layout === 'center') {
+                var boundingRect = {
+                    width: img.width,
+                    height: img.height
+                };
+                path.setStyle(centerGraphic(rect, boundingRect));
+            }
+        }
+    });
+    return path;
+}
+
+/**
+ * Get position of centered element in bounding box.
+ *
+ * @param  {Object} rect         element local bounding box
+ * @param  {Object} boundingRect constraint bounding box
+ * @return {Object} element position containing x, y, width, and height
+ */
+function centerGraphic(rect, boundingRect) {
+    // Set rect to center, keep width / height ratio.
+    var aspect = boundingRect.width / boundingRect.height;
+    var width = rect.height * aspect;
+    var height;
+    if (width <= rect.width) {
+        height = rect.height;
+    }
+    else {
+        width = rect.width;
+        height = width / aspect;
+    }
+    var cx = rect.x + rect.width / 2;
+    var cy = rect.y + rect.height / 2;
+
+    return {
+        x: cx - width / 2,
+        y: cy - height / 2,
+        width: width,
+        height: height
+    };
+}
+
+var mergePath = mergePath$1;
+
+/**
+ * Resize a path to fit the rect
+ * @param {module:zrender/graphic/Path} path
+ * @param {Object} rect
+ */
+function resizePath(path, rect) {
+    if (!path.applyTransform) {
+        return;
+    }
+
+    var pathRect = path.getBoundingRect();
+
+    var m = pathRect.calculateTransform(rect);
+
+    path.applyTransform(m);
+}
+
+/**
+ * Sub pixel optimize line for canvas
+ *
+ * @param {Object} param
+ * @param {Object} [param.shape]
+ * @param {number} [param.shape.x1]
+ * @param {number} [param.shape.y1]
+ * @param {number} [param.shape.x2]
+ * @param {number} [param.shape.y2]
+ * @param {Object} [param.style]
+ * @param {number} [param.style.lineWidth]
+ * @return {Object} Modified param
+ */
+function subPixelOptimizeLine(param) {
+    var shape = param.shape;
+    var lineWidth = param.style.lineWidth;
+
+    if (round(shape.x1 * 2) === round(shape.x2 * 2)) {
+        shape.x1 = shape.x2 = subPixelOptimize(shape.x1, lineWidth, true);
+    }
+    if (round(shape.y1 * 2) === round(shape.y2 * 2)) {
+        shape.y1 = shape.y2 = subPixelOptimize(shape.y1, lineWidth, true);
+    }
+    return param;
+}
+
+/**
+ * Sub pixel optimize rect for canvas
+ *
+ * @param {Object} param
+ * @param {Object} [param.shape]
+ * @param {number} [param.shape.x]
+ * @param {number} [param.shape.y]
+ * @param {number} [param.shape.width]
+ * @param {number} [param.shape.height]
+ * @param {Object} [param.style]
+ * @param {number} [param.style.lineWidth]
+ * @return {Object} Modified param
+ */
+function subPixelOptimizeRect(param) {
+    var shape = param.shape;
+    var lineWidth = param.style.lineWidth;
+    var originX = shape.x;
+    var originY = shape.y;
+    var originWidth = shape.width;
+    var originHeight = shape.height;
+    shape.x = subPixelOptimize(shape.x, lineWidth, true);
+    shape.y = subPixelOptimize(shape.y, lineWidth, true);
+    shape.width = Math.max(
+        subPixelOptimize(originX + originWidth, lineWidth, false) - shape.x,
+        originWidth === 0 ? 0 : 1
+    );
+    shape.height = Math.max(
+        subPixelOptimize(originY + originHeight, lineWidth, false) - shape.y,
+        originHeight === 0 ? 0 : 1
+    );
+    return param;
+}
+
+/**
+ * Sub pixel optimize for canvas
+ *
+ * @param {number} position Coordinate, such as x, y
+ * @param {number} lineWidth Should be nonnegative integer.
+ * @param {boolean=} positiveOrNegative Default false (negative).
+ * @return {number} Optimized position.
+ */
+function subPixelOptimize(position, lineWidth, positiveOrNegative) {
+    // Assure that (position + lineWidth / 2) is near integer edge,
+    // otherwise line will be fuzzy in canvas.
+    var doubledPosition = round(position * 2);
+    return (doubledPosition + round(lineWidth)) % 2 === 0
+        ? doubledPosition / 2
+        : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;
+}
+
+function hasFillOrStroke(fillOrStroke) {
+    return fillOrStroke != null && fillOrStroke != 'none';
+}
+
+function liftColor(color) {
+    return typeof color === 'string' ? lift(color, -0.1) : color;
+}
+
+/**
+ * @private
+ */
+function cacheElementStl(el) {
+    if (el.__hoverStlDirty) {
+        var stroke = el.style.stroke;
+        var fill = el.style.fill;
+
+        // Create hoverStyle on mouseover
+        var hoverStyle = el.__hoverStl;
+        hoverStyle.fill = hoverStyle.fill
+            || (hasFillOrStroke(fill) ? liftColor(fill) : null);
+        hoverStyle.stroke = hoverStyle.stroke
+            || (hasFillOrStroke(stroke) ? liftColor(stroke) : null);
+
+        var normalStyle = {};
+        for (var name in hoverStyle) {
+            // See comment in `doSingleEnterHover`.
+            if (hoverStyle[name] != null) {
+                normalStyle[name] = el.style[name];
+            }
+        }
+
+        el.__normalStl = normalStyle;
+
+        el.__hoverStlDirty = false;
+    }
+}
+
+/**
+ * @private
+ */
+function doSingleEnterHover(el) {
+    if (el.__isHover) {
+        return;
+    }
+
+    cacheElementStl(el);
+
+    if (el.useHoverLayer) {
+        el.__zr && el.__zr.addHover(el, el.__hoverStl);
+    }
+    else {
+        var style = el.style;
+        var insideRollbackOpt = style.insideRollbackOpt;
+
+        // Consider case: only `position: 'top'` is set on emphasis, then text
+        // color should be returned to `autoColor`, rather than remain '#fff'.
+        // So we should rollback then apply again after style merging.
+        insideRollbackOpt && rollbackInsideStyle(style);
+
+        // styles can be:
+        // {
+        //    label: {
+        //        show: false,
+        //        position: 'outside',
+        //        fontSize: 18
+        //    },
+        //    emphasis: {
+        //        label: {
+        //            show: true
+        //        }
+        //    }
+        // },
+        // where properties of `emphasis` may not appear in `normal`. We previously use
+        // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`.
+        // But consider rich text and setOption in merge mode, it is impossible to cover
+        // all properties in merge. So we use merge mode when setting style here, where
+        // only properties that is not `null/undefined` can be set. The disadventage:
+        // null/undefined can not be used to remove style any more in `emphasis`.
+        style.extendFrom(el.__hoverStl);
+
+        // Do not save `insideRollback`.
+        if (insideRollbackOpt) {
+            applyInsideStyle(style, style.insideOriginalTextPosition, insideRollbackOpt);
+
+            // textFill may be rollbacked to null.
+            if (style.textFill == null) {
+                style.textFill = insideRollbackOpt.autoColor;
+            }
+        }
+
+        el.dirty(false);
+        el.z2 += 1;
+    }
+
+    el.__isHover = true;
+}
+
+/**
+ * @inner
+ */
+function doSingleLeaveHover(el) {
+    if (!el.__isHover) {
+        return;
+    }
+
+    var normalStl = el.__normalStl;
+    if (el.useHoverLayer) {
+        el.__zr && el.__zr.removeHover(el);
+    }
+    else {
+        // Consider null/undefined value, should use
+        // `setStyle` but not `extendFrom(stl, true)`.
+        normalStl && el.setStyle(normalStl);
+        el.z2 -= 1;
+    }
+
+    el.__isHover = false;
+}
+
+/**
+ * @inner
+ */
+function doEnterHover(el) {
+    el.type === 'group'
+        ? el.traverse(function (child) {
+            if (child.type !== 'group') {
+                doSingleEnterHover(child);
+            }
+        })
+        : doSingleEnterHover(el);
+}
+
+function doLeaveHover(el) {
+    el.type === 'group'
+        ? el.traverse(function (child) {
+            if (child.type !== 'group') {
+                doSingleLeaveHover(child);
+            }
+        })
+        : doSingleLeaveHover(el);
+}
+
+/**
+ * @inner
+ */
+function setElementHoverStl(el, hoverStl) {
+    // If element has sepcified hoverStyle, then use it instead of given hoverStyle
+    // Often used when item group has a label element and it's hoverStyle is different
+    el.__hoverStl = el.hoverStyle || hoverStl || {};
+    el.__hoverStlDirty = true;
+
+    if (el.__isHover) {
+        cacheElementStl(el);
+    }
+}
+
+/**
+ * @inner
+ */
+function onElementMouseOver(e) {
+    if (this.__hoverSilentOnTouch && e.zrByTouch) {
+        return;
+    }
+
+    // Only if element is not in emphasis status
+    !this.__isEmphasis && doEnterHover(this);
+}
+
+/**
+ * @inner
+ */
+function onElementMouseOut(e) {
+    if (this.__hoverSilentOnTouch && e.zrByTouch) {
+        return;
+    }
+
+    // Only if element is not in emphasis status
+    !this.__isEmphasis && doLeaveHover(this);
+}
+
+/**
+ * @inner
+ */
+function enterEmphasis() {
+    this.__isEmphasis = true;
+    doEnterHover(this);
+}
+
+/**
+ * @inner
+ */
+function leaveEmphasis() {
+    this.__isEmphasis = false;
+    doLeaveHover(this);
+}
+
+/**
+ * Set hover style of element.
+ * This method can be called repeatly without side-effects.
+ * @param {module:zrender/Element} el
+ * @param {Object} [hoverStyle]
+ * @param {Object} [opt]
+ * @param {boolean} [opt.hoverSilentOnTouch=false]
+ *        In touch device, mouseover event will be trigger on touchstart event
+ *        (see module:zrender/dom/HandlerProxy). By this mechanism, we can
+ *        conviniently use hoverStyle when tap on touch screen without additional
+ *        code for compatibility.
+ *        But if the chart/component has select feature, which usually also use
+ *        hoverStyle, there might be conflict between 'select-highlight' and
+ *        'hover-highlight' especially when roam is enabled (see geo for example).
+ *        In this case, hoverSilentOnTouch should be used to disable hover-highlight
+ *        on touch device.
+ */
+function setHoverStyle(el, hoverStyle, opt) {
+    el.__hoverSilentOnTouch = opt && opt.hoverSilentOnTouch;
+
+    el.type === 'group'
+        ? el.traverse(function (child) {
+            if (child.type !== 'group') {
+                setElementHoverStl(child, hoverStyle);
+            }
+        })
+        : setElementHoverStl(el, hoverStyle);
+
+    // Duplicated function will be auto-ignored, see Eventful.js.
+    el.on('mouseover', onElementMouseOver)
+        .on('mouseout', onElementMouseOut);
+
+    // Emphasis, normal can be triggered manually
+    el.on('emphasis', enterEmphasis)
+        .on('normal', leaveEmphasis);
+}
+
+/**
+ * @param {Object|module:zrender/graphic/Style} normalStyle
+ * @param {Object} emphasisStyle
+ * @param {module:echarts/model/Model} normalModel
+ * @param {module:echarts/model/Model} emphasisModel
+ * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.
+ * @param {string|Function} [opt.defaultText]
+ * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by
+ *      `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`
+ * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by
+ *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`
+ * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by
+ *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`
+ * @param {Object} [normalSpecified]
+ * @param {Object} [emphasisSpecified]
+ */
+function setLabelStyle(
+    normalStyle, emphasisStyle,
+    normalModel, emphasisModel,
+    opt,
+    normalSpecified, emphasisSpecified
+) {
+    opt = opt || EMPTY_OBJ;
+    var labelFetcher = opt.labelFetcher;
+    var labelDataIndex = opt.labelDataIndex;
+    var labelDimIndex = opt.labelDimIndex;
+
+    // This scenario, `label.normal.show = true; label.emphasis.show = false`,
+    // is not supported util someone requests.
+
+    var showNormal = normalModel.getShallow('show');
+    var showEmphasis = emphasisModel.getShallow('show');
+
+    // Consider performance, only fetch label when necessary.
+    // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,
+    // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.
+    var baseText;
+    if (showNormal || showEmphasis) {
+        if (labelFetcher) {
+            baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex);
+        }
+        if (baseText == null) {
+            baseText = isFunction$1(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;
+        }
+    }
+    var normalStyleText = showNormal ? baseText : null;
+    var emphasisStyleText = showEmphasis
+        ? retrieve2(
+            labelFetcher
+                ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex)
+                : null,
+            baseText
+        )
+        : null;
+
+    // Optimize: If style.text is null, text will not be drawn.
+    if (normalStyleText != null || emphasisStyleText != null) {
+        // Always set `textStyle` even if `normalStyle.text` is null, because default
+        // values have to be set on `normalStyle`.
+        // If we set default values on `emphasisStyle`, consider case:
+        // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);`
+        // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);`
+        // Then the 'red' will not work on emphasis.
+        setTextStyle(normalStyle, normalModel, normalSpecified, opt);
+        setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true);
+    }
+
+    normalStyle.text = normalStyleText;
+    emphasisStyle.text = emphasisStyleText;
+}
+
+/**
+ * Set basic textStyle properties.
+ * @param {Object|module:zrender/graphic/Style} textStyle
+ * @param {module:echarts/model/Model} model
+ * @param {Object} [specifiedTextStyle] Can be overrided by settings in model.
+ * @param {Object} [opt] See `opt` of `setTextStyleCommon`.
+ * @param {boolean} [isEmphasis]
+ */
+function setTextStyle(
+    textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis
+) {
+    setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);
+    specifiedTextStyle && extend(textStyle, specifiedTextStyle);
+    textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);
+
+    return textStyle;
+}
+
+/**
+ * Set text option in the style.
+ * @deprecated
+ * @param {Object} textStyle
+ * @param {module:echarts/model/Model} labelModel
+ * @param {string|boolean} defaultColor Default text color.
+ *        If set as false, it will be processed as a emphasis style.
+ */
+function setText(textStyle, labelModel, defaultColor) {
+    var opt = {isRectText: true};
+    var isEmphasis;
+
+    if (defaultColor === false) {
+        isEmphasis = true;
+    }
+    else {
+        // Support setting color as 'auto' to get visual color.
+        opt.autoColor = defaultColor;
+    }
+    setTextStyleCommon(textStyle, labelModel, opt, isEmphasis);
+    textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);
+}
+
+/**
+ * {
+ *      disableBox: boolean, Whether diable drawing box of block (outer most).
+ *      isRectText: boolean,
+ *      autoColor: string, specify a color when color is 'auto',
+ *              for textFill, textStroke, textBackgroundColor, and textBorderColor.
+ *              If autoColor specified, it is used as default textFill.
+ *      useInsideStyle:
+ *              `true`: Use inside style (textFill, textStroke, textStrokeWidth)
+ *                  if `textFill` is not specified.
+ *              `false`: Do not use inside style.
+ *              `null/undefined`: use inside style if `isRectText` is true and
+ *                  `textFill` is not specified and textPosition contains `'inside'`.
+ *      forceRich: boolean
+ * }
+ */
+function setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) {
+    // Consider there will be abnormal when merge hover style to normal style if given default value.
+    opt = opt || EMPTY_OBJ;
+
+    if (opt.isRectText) {
+        var textPosition = textStyleModel.getShallow('position')
+            || (isEmphasis ? null : 'inside');
+        // 'outside' is not a valid zr textPostion value, but used
+        // in bar series, and magric type should be considered.
+        textPosition === 'outside' && (textPosition = 'top');
+        textStyle.textPosition = textPosition;
+        textStyle.textOffset = textStyleModel.getShallow('offset');
+        var labelRotate = textStyleModel.getShallow('rotate');
+        labelRotate != null && (labelRotate *= Math.PI / 180);
+        textStyle.textRotation = labelRotate;
+        textStyle.textDistance = retrieve2(
+            textStyleModel.getShallow('distance'), isEmphasis ? null : 5
+        );
+    }
+
+    var ecModel = textStyleModel.ecModel;
+    var globalTextStyle = ecModel && ecModel.option.textStyle;
+
+    // Consider case:
+    // {
+    //     data: [{
+    //         value: 12,
+    //         label: {
+    //             rich: {
+    //                 // no 'a' here but using parent 'a'.
+    //             }
+    //         }
+    //     }],
+    //     rich: {
+    //         a: { ... }
+    //     }
+    // }
+    var richItemNames = getRichItemNames(textStyleModel);
+    var richResult;
+    if (richItemNames) {
+        richResult = {};
+        for (var name in richItemNames) {
+            if (richItemNames.hasOwnProperty(name)) {
+                // Cascade is supported in rich.
+                var richTextStyle = textStyleModel.getModel(['rich', name]);
+                // In rich, never `disableBox`.
+                setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);
+            }
+        }
+    }
+    textStyle.rich = richResult;
+
+    setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);
+
+    if (opt.forceRich && !opt.textStyle) {
+        opt.textStyle = {};
+    }
+
+    return textStyle;
+}
+
+// Consider case:
+// {
+//     data: [{
+//         value: 12,
+//         label: {
+//             rich: {
+//                 // no 'a' here but using parent 'a'.
+//             }
+//         }
+//     }],
+//     rich: {
+//         a: { ... }
+//     }
+// }
+function getRichItemNames(textStyleModel) {
+    // Use object to remove duplicated names.
+    var richItemNameMap;
+    while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {
+        var rich = (textStyleModel.option || EMPTY_OBJ).rich;
+        if (rich) {
+            richItemNameMap = richItemNameMap || {};
+            for (var name in rich) {
+                if (rich.hasOwnProperty(name)) {
+                    richItemNameMap[name] = 1;
+                }
+            }
+        }
+        textStyleModel = textStyleModel.parentModel;
+    }
+    return richItemNameMap;
+}
+
+function setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) {
+    // In merge mode, default value should not be given.
+    globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ;
+
+    textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt)
+        || globalTextStyle.color;
+    textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt)
+        || globalTextStyle.textBorderColor;
+    textStyle.textStrokeWidth = retrieve2(
+        textStyleModel.getShallow('textBorderWidth'),
+        globalTextStyle.textBorderWidth
+    );
+
+    if (!isEmphasis) {
+        if (isBlock) {
+            // Always set `insideRollback`, for clearing previous.
+            var originalTextPosition = textStyle.textPosition;
+            textStyle.insideRollback = applyInsideStyle(textStyle, originalTextPosition, opt);
+            // Save original textPosition, because style.textPosition will be repalced by
+            // real location (like [10, 30]) in zrender.
+            textStyle.insideOriginalTextPosition = originalTextPosition;
+            textStyle.insideRollbackOpt = opt;
+        }
+
+        // Set default finally.
+        if (textStyle.textFill == null) {
+            textStyle.textFill = opt.autoColor;
+        }
+    }
+
+    // Do not use `getFont` here, because merge should be supported, where
+    // part of these properties may be changed in emphasis style, and the
+    // others should remain their original value got from normal style.
+    textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle;
+    textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight;
+    textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize;
+    textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily;
+
+    textStyle.textAlign = textStyleModel.getShallow('align');
+    textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign')
+        || textStyleModel.getShallow('baseline');
+
+    textStyle.textLineHeight = textStyleModel.getShallow('lineHeight');
+    textStyle.textWidth = textStyleModel.getShallow('width');
+    textStyle.textHeight = textStyleModel.getShallow('height');
+    textStyle.textTag = textStyleModel.getShallow('tag');
+
+    if (!isBlock || !opt.disableBox) {
+        textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt);
+        textStyle.textPadding = textStyleModel.getShallow('padding');
+        textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt);
+        textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth');
+        textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius');
+
+        textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor');
+        textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur');
+        textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX');
+        textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY');
+    }
+
+    textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor')
+        || globalTextStyle.textShadowColor;
+    textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur')
+        || globalTextStyle.textShadowBlur;
+    textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX')
+        || globalTextStyle.textShadowOffsetX;
+    textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY')
+        || globalTextStyle.textShadowOffsetY;
+}
+
+function getAutoColor(color, opt) {
+    return color !== 'auto' ? color : (opt && opt.autoColor) ? opt.autoColor : null;
+}
+
+function applyInsideStyle(textStyle, textPosition, opt) {
+    var useInsideStyle = opt.useInsideStyle;
+    var insideRollback;
+
+    if (textStyle.textFill == null
+        && useInsideStyle !== false
+        && (useInsideStyle === true
+            || (opt.isRectText
+                && textPosition
+                // textPosition can be [10, 30]
+                && typeof textPosition === 'string'
+                && textPosition.indexOf('inside') >= 0
+            )
+        )
+    ) {
+        insideRollback = {
+            textFill: null,
+            textStroke: textStyle.textStroke,
+            textStrokeWidth: textStyle.textStrokeWidth
+        };
+        textStyle.textFill = '#fff';
+        // Consider text with #fff overflow its container.
+        if (textStyle.textStroke == null) {
+            textStyle.textStroke = opt.autoColor;
+            textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);
+        }
+    }
+
+    return insideRollback;
+}
+
+function rollbackInsideStyle(style) {
+    var insideRollback = style.insideRollback;
+    if (insideRollback) {
+        style.textFill = insideRollback.textFill;
+        style.textStroke = insideRollback.textStroke;
+        style.textStrokeWidth = insideRollback.textStrokeWidth;
+    }
+}
+
+function getFont(opt, ecModel) {
+    // ecModel or default text style model.
+    var gTextStyleModel = ecModel || ecModel.getModel('textStyle');
+    return trim([
+        // FIXME in node-canvas fontWeight is before fontStyle
+        opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '',
+        opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '',
+        (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px',
+        opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'
+    ].join(' '));
+}
+
+function animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {
+    if (typeof dataIndex === 'function') {
+        cb = dataIndex;
+        dataIndex = null;
+    }
+    // Do not check 'animation' property directly here. Consider this case:
+    // animation model is an `itemModel`, whose does not have `isAnimationEnabled`
+    // but its parent model (`seriesModel`) does.
+    var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();
+
+    if (animationEnabled) {
+        var postfix = isUpdate ? 'Update' : '';
+        var duration = animatableModel.getShallow('animationDuration' + postfix);
+        var animationEasing = animatableModel.getShallow('animationEasing' + postfix);
+        var animationDelay = animatableModel.getShallow('animationDelay' + postfix);
+        if (typeof animationDelay === 'function') {
+            animationDelay = animationDelay(
+                dataIndex,
+                animatableModel.getAnimationDelayParams
+                    ? animatableModel.getAnimationDelayParams(el, dataIndex)
+                    : null
+            );
+        }
+        if (typeof duration === 'function') {
+            duration = duration(dataIndex);
+        }
+
+        duration > 0
+            ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb)
+            : (el.stopAnimation(), el.attr(props), cb && cb());
+    }
+    else {
+        el.stopAnimation();
+        el.attr(props);
+        cb && cb();
+    }
+}
+
+/**
+ * Update graphic element properties with or without animation according to the
+ * configuration in series.
+ *
+ * Caution: this method will stop previous animation.
+ * So if do not use this method to one element twice before
+ * animation starts, unless you know what you are doing.
+ *
+ * @param {module:zrender/Element} el
+ * @param {Object} props
+ * @param {module:echarts/model/Model} [animatableModel]
+ * @param {number} [dataIndex]
+ * @param {Function} [cb]
+ * @example
+ *     graphic.updateProps(el, {
+ *         position: [100, 100]
+ *     }, seriesModel, dataIndex, function () { console.log('Animation done!'); });
+ *     // Or
+ *     graphic.updateProps(el, {
+ *         position: [100, 100]
+ *     }, seriesModel, function () { console.log('Animation done!'); });
+ */
+function updateProps(el, props, animatableModel, dataIndex, cb) {
+    animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);
+}
+
+/**
+ * Init graphic element properties with or without animation according to the
+ * configuration in series.
+ *
+ * Caution: this method will stop previous animation.
+ * So if do not use this method to one element twice before
+ * animation starts, unless you know what you are doing.
+ *
+ * @param {module:zrender/Element} el
+ * @param {Object} props
+ * @param {module:echarts/model/Model} [animatableModel]
+ * @param {number} [dataIndex]
+ * @param {Function} cb
+ */
+function initProps(el, props, animatableModel, dataIndex, cb) {
+    animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);
+}
+
+/**
+ * Get transform matrix of target (param target),
+ * in coordinate of its ancestor (param ancestor)
+ *
+ * @param {module:zrender/mixin/Transformable} target
+ * @param {module:zrender/mixin/Transformable} [ancestor]
+ */
+function getTransform(target, ancestor) {
+    var mat = identity([]);
+
+    while (target && target !== ancestor) {
+        mul$1(mat, target.getLocalTransform(), mat);
+        target = target.parent;
+    }
+
+    return mat;
+}
+
+/**
+ * Apply transform to an vertex.
+ * @param {Array.<number>} target [x, y]
+ * @param {Array.<number>|TypedArray.<number>|Object} transform Can be:
+ *      + Transform matrix: like [1, 0, 0, 1, 0, 0]
+ *      + {position, rotation, scale}, the same as `zrender/Transformable`.
+ * @param {boolean=} invert Whether use invert matrix.
+ * @return {Array.<number>} [x, y]
+ */
+function applyTransform$1(target, transform, invert$$1) {
+    if (transform && !isArrayLike(transform)) {
+        transform = Transformable.getLocalTransform(transform);
+    }
+
+    if (invert$$1) {
+        transform = invert([], transform);
+    }
+    return applyTransform([], target, transform);
+}
+
+/**
+ * @param {string} direction 'left' 'right' 'top' 'bottom'
+ * @param {Array.<number>} transform Transform matrix: like [1, 0, 0, 1, 0, 0]
+ * @param {boolean=} invert Whether use invert matrix.
+ * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom'
+ */
+function transformDirection(direction, transform, invert$$1) {
+
+    // Pick a base, ensure that transform result will not be (0, 0).
+    var hBase = (transform[4] === 0 || transform[5] === 0 || transform[0] === 0)
+        ? 1 : Math.abs(2 * transform[4] / transform[0]);
+    var vBase = (transform[4] === 0 || transform[5] === 0 || transform[2] === 0)
+        ? 1 : Math.abs(2 * transform[4] / transform[2]);
+
+    var vertex = [
+        direction === 'left' ? -hBase : direction === 'right' ? hBase : 0,
+        direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0
+    ];
+
+    vertex = applyTransform$1(vertex, transform, invert$$1);
+
+    return Math.abs(vertex[0]) > Math.abs(vertex[1])
+        ? (vertex[0] > 0 ? 'right' : 'left')
+        : (vertex[1] > 0 ? 'bottom' : 'top');
+}
+
+/**
+ * Apply group transition animation from g1 to g2.
+ * If no animatableModel, no animation.
+ */
+function groupTransition(g1, g2, animatableModel, cb) {
+    if (!g1 || !g2) {
+        return;
+    }
+
+    function getElMap(g) {
+        var elMap = {};
+        g.traverse(function (el) {
+            if (!el.isGroup && el.anid) {
+                elMap[el.anid] = el;
+            }
+        });
+        return elMap;
+    }
+    function getAnimatableProps(el) {
+        var obj = {
+            position: clone$1(el.position),
+            rotation: el.rotation
+        };
+        if (el.shape) {
+            obj.shape = extend({}, el.shape);
+        }
+        return obj;
+    }
+    var elMap1 = getElMap(g1);
+
+    g2.traverse(function (el) {
+        if (!el.isGroup && el.anid) {
+            var oldEl = elMap1[el.anid];
+            if (oldEl) {
+                var newProp = getAnimatableProps(el);
+                el.attr(getAnimatableProps(oldEl));
+                updateProps(el, newProp, animatableModel, el.dataIndex);
+            }
+            // else {
+            //     if (el.previousProps) {
+            //         graphic.updateProps
+            //     }
+            // }
+        }
+    });
+}
+
+/**
+ * @param {Array.<Array.<number>>} points Like: [[23, 44], [53, 66], ...]
+ * @param {Object} rect {x, y, width, height}
+ * @return {Array.<Array.<number>>} A new clipped points.
+ */
+function clipPointsByRect(points, rect) {
+    return map(points, function (point) {
+        var x = point[0];
+        x = mathMax$1(x, rect.x);
+        x = mathMin$1(x, rect.x + rect.width);
+        var y = point[1];
+        y = mathMax$1(y, rect.y);
+        y = mathMin$1(y, rect.y + rect.height);
+        return [x, y];
+    });
+}
+
+/**
+ * @param {Object} targetRect {x, y, width, height}
+ * @param {Object} rect {x, y, width, height}
+ * @return {Object} A new clipped rect. If rect size are negative, return undefined.
+ */
+function clipRectByRect(targetRect, rect) {
+    var x = mathMax$1(targetRect.x, rect.x);
+    var x2 = mathMin$1(targetRect.x + targetRect.width, rect.x + rect.width);
+    var y = mathMax$1(targetRect.y, rect.y);
+    var y2 = mathMin$1(targetRect.y + targetRect.height, rect.y + rect.height);
+
+    if (x2 >= x && y2 >= y) {
+        return {
+            x: x,
+            y: y,
+            width: x2 - x,
+            height: y2 - y
+        };
+    }
+}
+
+/**
+ * @param {string} iconStr Support 'image://' or 'path://' or direct svg path.
+ * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`.
+ * @param {Object} [rect] {x, y, width, height}
+ * @return {module:zrender/Element} Icon path or image element.
+ */
+function createIcon(iconStr, opt, rect) {
+    opt = extend({rectHover: true}, opt);
+    var style = opt.style = {strokeNoScale: true};
+    rect = rect || {x: -1, y: -1, width: 2, height: 2};
+
+    if (iconStr) {
+        return iconStr.indexOf('image://') === 0
+            ? (
+                style.image = iconStr.slice(8),
+                defaults(style, rect),
+                new ZImage(opt)
+            )
+            : (
+                makePath(
+                    iconStr.replace('path://', ''),
+                    opt,
+                    rect,
+                    'center'
+                )
+            );
+    }
+}
+
+
+
+
+var graphic = (Object.freeze || Object)({
+	extendShape: extendShape,
+	extendPath: extendPath,
+	makePath: makePath,
+	makeImage: makeImage,
+	mergePath: mergePath,
+	resizePath: resizePath,
+	subPixelOptimizeLine: subPixelOptimizeLine,
+	subPixelOptimizeRect: subPixelOptimizeRect,
+	subPixelOptimize: subPixelOptimize,
+	setHoverStyle: setHoverStyle,
+	setLabelStyle: setLabelStyle,
+	setTextStyle: setTextStyle,
+	setText: setText,
+	getFont: getFont,
+	updateProps: updateProps,
+	initProps: initProps,
+	getTransform: getTransform,
+	applyTransform: applyTransform$1,
+	transformDirection: transformDirection,
+	groupTransition: groupTransition,
+	clipPointsByRect: clipPointsByRect,
+	clipRectByRect: clipRectByRect,
+	createIcon: createIcon,
+	Group: Group,
+	Image: ZImage,
+	Text: Text,
+	Circle: Circle,
+	Sector: Sector,
+	Ring: Ring,
+	Polygon: Polygon,
+	Polyline: Polyline,
+	Rect: Rect,
+	Line: Line,
+	BezierCurve: BezierCurve,
+	Arc: Arc,
+	IncrementalDisplayable: IncrementalDisplayble,
+	CompoundPath: CompoundPath,
+	LinearGradient: LinearGradient,
+	RadialGradient: RadialGradient,
+	BoundingRect: BoundingRect
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PATH_COLOR = ['textStyle', 'color'];
+
+var textStyleMixin = {
+    /**
+     * Get color property or get color from option.textStyle.color
+     * @param {boolean} [isEmphasis]
+     * @return {string}
+     */
+    getTextColor: function (isEmphasis) {
+        var ecModel = this.ecModel;
+        return this.getShallow('color')
+            || (
+                (!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null
+            );
+    },
+
+    /**
+     * Create font string from fontStyle, fontWeight, fontSize, fontFamily
+     * @return {string}
+     */
+    getFont: function () {
+        return getFont({
+            fontStyle: this.getShallow('fontStyle'),
+            fontWeight: this.getShallow('fontWeight'),
+            fontSize: this.getShallow('fontSize'),
+            fontFamily: this.getShallow('fontFamily')
+        }, this.ecModel);
+    },
+
+    getTextRect: function (text) {
+        return getBoundingRect(
+            text,
+            this.getFont(),
+            this.getShallow('align'),
+            this.getShallow('verticalAlign') || this.getShallow('baseline'),
+            this.getShallow('padding'),
+            this.getShallow('rich'),
+            this.getShallow('truncateText')
+        );
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var getItemStyle = makeStyleMapper(
+    [
+        ['fill', 'color'],
+        ['stroke', 'borderColor'],
+        ['lineWidth', 'borderWidth'],
+        ['opacity'],
+        ['shadowBlur'],
+        ['shadowOffsetX'],
+        ['shadowOffsetY'],
+        ['shadowColor'],
+        ['textPosition'],
+        ['textAlign']
+    ]
+);
+
+var itemStyleMixin = {
+    getItemStyle: function (excludes, includes) {
+        var style = getItemStyle(this, excludes, includes);
+        var lineDash = this.getBorderLineDash();
+        lineDash && (style.lineDash = lineDash);
+        return style;
+    },
+
+    getBorderLineDash: function () {
+        var lineType = this.get('borderType');
+        return (lineType === 'solid' || lineType == null) ? null
+            : (lineType === 'dashed' ? [5, 5] : [1, 1]);
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/model/Model
+ */
+
+var mixin$1 = mixin;
+var inner = makeInner();
+
+/**
+ * @alias module:echarts/model/Model
+ * @constructor
+ * @param {Object} option
+ * @param {module:echarts/model/Model} [parentModel]
+ * @param {module:echarts/model/Global} [ecModel]
+ */
+function Model(option, parentModel, ecModel) {
+    /**
+     * @type {module:echarts/model/Model}
+     * @readOnly
+     */
+    this.parentModel = parentModel;
+
+    /**
+     * @type {module:echarts/model/Global}
+     * @readOnly
+     */
+    this.ecModel = ecModel;
+
+    /**
+     * @type {Object}
+     * @protected
+     */
+    this.option = option;
+
+    // Simple optimization
+    // if (this.init) {
+    //     if (arguments.length <= 4) {
+    //         this.init(option, parentModel, ecModel, extraOpt);
+    //     }
+    //     else {
+    //         this.init.apply(this, arguments);
+    //     }
+    // }
+}
+
+Model.prototype = {
+
+    constructor: Model,
+
+    /**
+     * Model 的初始化函数
+     * @param {Object} option
+     */
+    init: null,
+
+    /**
+     * 从新的 Option merge
+     */
+    mergeOption: function (option) {
+        merge(this.option, option, true);
+    },
+
+    /**
+     * @param {string|Array.<string>} path
+     * @param {boolean} [ignoreParent=false]
+     * @return {*}
+     */
+    get: function (path, ignoreParent) {
+        if (path == null) {
+            return this.option;
+        }
+
+        return doGet(
+            this.option,
+            this.parsePath(path),
+            !ignoreParent && getParent(this, path)
+        );
+    },
+
+    /**
+     * @param {string} key
+     * @param {boolean} [ignoreParent=false]
+     * @return {*}
+     */
+    getShallow: function (key, ignoreParent) {
+        var option = this.option;
+
+        var val = option == null ? option : option[key];
+        var parentModel = !ignoreParent && getParent(this, key);
+        if (val == null && parentModel) {
+            val = parentModel.getShallow(key);
+        }
+        return val;
+    },
+
+    /**
+     * @param {string|Array.<string>} [path]
+     * @param {module:echarts/model/Model} [parentModel]
+     * @return {module:echarts/model/Model}
+     */
+    getModel: function (path, parentModel) {
+        var obj = path == null
+            ? this.option
+            : doGet(this.option, path = this.parsePath(path));
+
+        var thisParentModel;
+        parentModel = parentModel || (
+            (thisParentModel = getParent(this, path))
+                && thisParentModel.getModel(path)
+        );
+
+        return new Model(obj, parentModel, this.ecModel);
+    },
+
+    /**
+     * If model has option
+     */
+    isEmpty: function () {
+        return this.option == null;
+    },
+
+    restoreData: function () {},
+
+    // Pending
+    clone: function () {
+        var Ctor = this.constructor;
+        return new Ctor(clone(this.option));
+    },
+
+    setReadOnly: function (properties) {
+        // clazzUtil.setReadOnly(this, properties);
+    },
+
+    // If path is null/undefined, return null/undefined.
+    parsePath: function(path) {
+        if (typeof path === 'string') {
+            path = path.split('.');
+        }
+        return path;
+    },
+
+    /**
+     * @param {Function} getParentMethod
+     *        param {Array.<string>|string} path
+     *        return {module:echarts/model/Model}
+     */
+    customizeGetParent: function (getParentMethod) {
+        inner(this).getParent = getParentMethod;
+    },
+
+    isAnimationEnabled: function () {
+        if (!env$1.node) {
+            if (this.option.animation != null) {
+                return !!this.option.animation;
+            }
+            else if (this.parentModel) {
+                return this.parentModel.isAnimationEnabled();
+            }
+        }
+    }
+
+};
+
+function doGet(obj, pathArr, parentModel) {
+    for (var i = 0; i < pathArr.length; i++) {
+        // Ignore empty
+        if (!pathArr[i]) {
+            continue;
+        }
+        // obj could be number/string/... (like 0)
+        obj = (obj && typeof obj === 'object') ? obj[pathArr[i]] : null;
+        if (obj == null) {
+            break;
+        }
+    }
+    if (obj == null && parentModel) {
+        obj = parentModel.get(pathArr);
+    }
+    return obj;
+}
+
+// `path` can be null/undefined
+function getParent(model, path) {
+    var getParentMethod = inner(model).getParent;
+    return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;
+}
+
+// Enable Model.extend.
+enableClassExtend(Model);
+enableClassCheck(Model);
+
+mixin$1(Model, lineStyleMixin);
+mixin$1(Model, areaStyleMixin);
+mixin$1(Model, textStyleMixin);
+mixin$1(Model, itemStyleMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var base = 0;
+
+/**
+ * @public
+ * @param {string} type
+ * @return {string}
+ */
+function getUID(type) {
+    // Considering the case of crossing js context,
+    // use Math.random to make id as unique as possible.
+    return [(type || ''), base++, Math.random().toFixed(5)].join('_');
+}
+
+/**
+ * @inner
+ */
+function enableSubTypeDefaulter(entity) {
+
+    var subTypeDefaulters = {};
+
+    entity.registerSubTypeDefaulter = function (componentType, defaulter) {
+        componentType = parseClassType$1(componentType);
+        subTypeDefaulters[componentType.main] = defaulter;
+    };
+
+    entity.determineSubType = function (componentType, option) {
+        var type = option.type;
+        if (!type) {
+            var componentTypeMain = parseClassType$1(componentType).main;
+            if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {
+                type = subTypeDefaulters[componentTypeMain](option);
+            }
+        }
+        return type;
+    };
+
+    return entity;
+}
+
+/**
+ * Topological travel on Activity Network (Activity On Vertices).
+ * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].
+ *
+ * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.
+ *
+ * If there is circle dependencey, Error will be thrown.
+ *
+ */
+function enableTopologicalTravel(entity, dependencyGetter) {
+
+    /**
+     * @public
+     * @param {Array.<string>} targetNameList Target Component type list.
+     *                                           Can be ['aa', 'bb', 'aa.xx']
+     * @param {Array.<string>} fullNameList By which we can build dependency graph.
+     * @param {Function} callback Params: componentType, dependencies.
+     * @param {Object} context Scope of callback.
+     */
+    entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {
+        if (!targetNameList.length) {
+            return;
+        }
+
+        var result = makeDepndencyGraph(fullNameList);
+        var graph = result.graph;
+        var stack = result.noEntryList;
+
+        var targetNameSet = {};
+        each$1(targetNameList, function (name) {
+            targetNameSet[name] = true;
+        });
+
+        while (stack.length) {
+            var currComponentType = stack.pop();
+            var currVertex = graph[currComponentType];
+            var isInTargetNameSet = !!targetNameSet[currComponentType];
+            if (isInTargetNameSet) {
+                callback.call(context, currComponentType, currVertex.originalDeps.slice());
+                delete targetNameSet[currComponentType];
+            }
+            each$1(
+                currVertex.successor,
+                isInTargetNameSet ? removeEdgeAndAdd : removeEdge
+            );
+        }
+
+        each$1(targetNameSet, function () {
+            throw new Error('Circle dependency may exists');
+        });
+
+        function removeEdge(succComponentType) {
+            graph[succComponentType].entryCount--;
+            if (graph[succComponentType].entryCount === 0) {
+                stack.push(succComponentType);
+            }
+        }
+
+        // Consider this case: legend depends on series, and we call
+        // chart.setOption({series: [...]}), where only series is in option.
+        // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will
+        // not be called, but only sereis.mergeOption is called. Thus legend
+        // have no chance to update its local record about series (like which
+        // name of series is available in legend).
+        function removeEdgeAndAdd(succComponentType) {
+            targetNameSet[succComponentType] = true;
+            removeEdge(succComponentType);
+        }
+    };
+
+    /**
+     * DepndencyGraph: {Object}
+     * key: conponentType,
+     * value: {
+     *     successor: [conponentTypes...],
+     *     originalDeps: [conponentTypes...],
+     *     entryCount: {number}
+     * }
+     */
+    function makeDepndencyGraph(fullNameList) {
+        var graph = {};
+        var noEntryList = [];
+
+        each$1(fullNameList, function (name) {
+
+            var thisItem = createDependencyGraphItem(graph, name);
+            var originalDeps = thisItem.originalDeps = dependencyGetter(name);
+
+            var availableDeps = getAvailableDependencies(originalDeps, fullNameList);
+            thisItem.entryCount = availableDeps.length;
+            if (thisItem.entryCount === 0) {
+                noEntryList.push(name);
+            }
+
+            each$1(availableDeps, function (dependentName) {
+                if (indexOf(thisItem.predecessor, dependentName) < 0) {
+                    thisItem.predecessor.push(dependentName);
+                }
+                var thatItem = createDependencyGraphItem(graph, dependentName);
+                if (indexOf(thatItem.successor, dependentName) < 0) {
+                    thatItem.successor.push(name);
+                }
+            });
+        });
+
+        return {graph: graph, noEntryList: noEntryList};
+    }
+
+    function createDependencyGraphItem(graph, name) {
+        if (!graph[name]) {
+            graph[name] = {predecessor: [], successor: []};
+        }
+        return graph[name];
+    }
+
+    function getAvailableDependencies(originalDeps, fullNameList) {
+        var availableDeps = [];
+        each$1(originalDeps, function (dep) {
+            indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);
+        });
+        return availableDeps;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var RADIAN_EPSILON = 1e-4;
+
+function _trim(str) {
+    return str.replace(/^\s+/, '').replace(/\s+$/, '');
+}
+
+/**
+ * Linear mapping a value from domain to range
+ * @memberOf module:echarts/util/number
+ * @param  {(number|Array.<number>)} val
+ * @param  {Array.<number>} domain Domain extent domain[0] can be bigger than domain[1]
+ * @param  {Array.<number>} range  Range extent range[0] can be bigger than range[1]
+ * @param  {boolean} clamp
+ * @return {(number|Array.<number>}
+ */
+function linearMap(val, domain, range, clamp) {
+    var subDomain = domain[1] - domain[0];
+    var subRange = range[1] - range[0];
+
+    if (subDomain === 0) {
+        return subRange === 0
+            ? range[0]
+            : (range[0] + range[1]) / 2;
+    }
+
+    // Avoid accuracy problem in edge, such as
+    // 146.39 - 62.83 === 83.55999999999999.
+    // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError
+    // It is a little verbose for efficiency considering this method
+    // is a hotspot.
+    if (clamp) {
+        if (subDomain > 0) {
+            if (val <= domain[0]) {
+                return range[0];
+            }
+            else if (val >= domain[1]) {
+                return range[1];
+            }
+        }
+        else {
+            if (val >= domain[0]) {
+                return range[0];
+            }
+            else if (val <= domain[1]) {
+                return range[1];
+            }
+        }
+    }
+    else {
+        if (val === domain[0]) {
+            return range[0];
+        }
+        if (val === domain[1]) {
+            return range[1];
+        }
+    }
+
+    return (val - domain[0]) / subDomain * subRange + range[0];
+}
+
+/**
+ * Convert a percent string to absolute number.
+ * Returns NaN if percent is not a valid string or number
+ * @memberOf module:echarts/util/number
+ * @param {string|number} percent
+ * @param {number} all
+ * @return {number}
+ */
+function parsePercent$1(percent, all) {
+    switch (percent) {
+        case 'center':
+        case 'middle':
+            percent = '50%';
+            break;
+        case 'left':
+        case 'top':
+            percent = '0%';
+            break;
+        case 'right':
+        case 'bottom':
+            percent = '100%';
+            break;
+    }
+    if (typeof percent === 'string') {
+        if (_trim(percent).match(/%$/)) {
+            return parseFloat(percent) / 100 * all;
+        }
+
+        return parseFloat(percent);
+    }
+
+    return percent == null ? NaN : +percent;
+}
+
+/**
+ * (1) Fix rounding error of float numbers.
+ * (2) Support return string to avoid scientific notation like '3.5e-7'.
+ *
+ * @param {number} x
+ * @param {number} [precision]
+ * @param {boolean} [returnStr]
+ * @return {number|string}
+ */
+function round$1(x, precision, returnStr) {
+    if (precision == null) {
+        precision = 10;
+    }
+    // Avoid range error
+    precision = Math.min(Math.max(0, precision), 20);
+    x = (+x).toFixed(precision);
+    return returnStr ? x : +x;
+}
+
+function asc(arr) {
+    arr.sort(function (a, b) {
+        return a - b;
+    });
+    return arr;
+}
+
+/**
+ * Get precision
+ * @param {number} val
+ */
+function getPrecision(val) {
+    val = +val;
+    if (isNaN(val)) {
+        return 0;
+    }
+    // It is much faster than methods converting number to string as follows
+    //      var tmp = val.toString();
+    //      return tmp.length - 1 - tmp.indexOf('.');
+    // especially when precision is low
+    var e = 1;
+    var count = 0;
+    while (Math.round(val * e) / e !== val) {
+        e *= 10;
+        count++;
+    }
+    return count;
+}
+
+/**
+ * @param {string|number} val
+ * @return {number}
+ */
+function getPrecisionSafe(val) {
+    var str = val.toString();
+
+    // Consider scientific notation: '3.4e-12' '3.4e+12'
+    var eIndex = str.indexOf('e');
+    if (eIndex > 0) {
+        var precision = +str.slice(eIndex + 1);
+        return precision < 0 ? -precision : 0;
+    }
+    else {
+        var dotIndex = str.indexOf('.');
+        return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;
+    }
+}
+
+/**
+ * Minimal dicernible data precisioin according to a single pixel.
+ *
+ * @param {Array.<number>} dataExtent
+ * @param {Array.<number>} pixelExtent
+ * @return {number} precision
+ */
+function getPixelPrecision(dataExtent, pixelExtent) {
+    var log = Math.log;
+    var LN10 = Math.LN10;
+    var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);
+    var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10);
+    // toFixed() digits argument must be between 0 and 20.
+    var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);
+    return !isFinite(precision) ? 20 : precision;
+}
+
+/**
+ * Get a data of given precision, assuring the sum of percentages
+ * in valueList is 1.
+ * The largest remainer method is used.
+ * https://en.wikipedia.org/wiki/Largest_remainder_method
+ *
+ * @param {Array.<number>} valueList a list of all data
+ * @param {number} idx index of the data to be processed in valueList
+ * @param {number} precision integer number showing digits of precision
+ * @return {number} percent ranging from 0 to 100
+ */
+function getPercentWithPrecision(valueList, idx, precision) {
+    if (!valueList[idx]) {
+        return 0;
+    }
+
+    var sum = reduce(valueList, function (acc, val) {
+        return acc + (isNaN(val) ? 0 : val);
+    }, 0);
+    if (sum === 0) {
+        return 0;
+    }
+
+    var digits = Math.pow(10, precision);
+    var votesPerQuota = map(valueList, function (val) {
+        return (isNaN(val) ? 0 : val) / sum * digits * 100;
+    });
+    var targetSeats = digits * 100;
+
+    var seats = map(votesPerQuota, function (votes) {
+        // Assign automatic seats.
+        return Math.floor(votes);
+    });
+    var currentSum = reduce(seats, function (acc, val) {
+        return acc + val;
+    }, 0);
+
+    var remainder = map(votesPerQuota, function (votes, idx) {
+        return votes - seats[idx];
+    });
+
+    // Has remainding votes.
+    while (currentSum < targetSeats) {
+        // Find next largest remainder.
+        var max = Number.NEGATIVE_INFINITY;
+        var maxId = null;
+        for (var i = 0, len = remainder.length; i < len; ++i) {
+            if (remainder[i] > max) {
+                max = remainder[i];
+                maxId = i;
+            }
+        }
+
+        // Add a vote to max remainder.
+        ++seats[maxId];
+        remainder[maxId] = 0;
+        ++currentSum;
+    }
+
+    return seats[idx] / digits;
+}
+
+// Number.MAX_SAFE_INTEGER, ie do not support.
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * To 0 - 2 * PI, considering negative radian.
+ * @param {number} radian
+ * @return {number}
+ */
+function remRadian(radian) {
+    var pi2 = Math.PI * 2;
+    return (radian % pi2 + pi2) % pi2;
+}
+
+/**
+ * @param {type} radian
+ * @return {boolean}
+ */
+function isRadianAroundZero(val) {
+    return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;
+}
+
+var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; // jshint ignore:line
+
+/**
+ * @param {string|Date|number} value These values can be accepted:
+ *   + An instance of Date, represent a time in its own time zone.
+ *   + Or string in a subset of ISO 8601, only including:
+ *     + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',
+ *     + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',
+ *     + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',
+ *     all of which will be treated as local time if time zone is not specified
+ *     (see <https://momentjs.com/>).
+ *   + Or other string format, including (all of which will be treated as loacal time):
+ *     '2012', '2012-3-1', '2012/3/1', '2012/03/01',
+ *     '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'
+ *   + a timestamp, which represent a time in UTC.
+ * @return {Date} date
+ */
+function parseDate(value) {
+    if (value instanceof Date) {
+        return value;
+    }
+    else if (typeof value === 'string') {
+        // Different browsers parse date in different way, so we parse it manually.
+        // Some other issues:
+        // new Date('1970-01-01') is UTC,
+        // new Date('1970/01/01') and new Date('1970-1-01') is local.
+        // See issue #3623
+        var match = TIME_REG.exec(value);
+
+        if (!match) {
+            // return Invalid Date.
+            return new Date(NaN);
+        }
+
+        // Use local time when no timezone offset specifed.
+        if (!match[8]) {
+            // match[n] can only be string or undefined.
+            // But take care of '12' + 1 => '121'.
+            return new Date(
+                +match[1],
+                +(match[2] || 1) - 1,
+                +match[3] || 1,
+                +match[4] || 0,
+                +(match[5] || 0),
+                +match[6] || 0,
+                +match[7] || 0
+            );
+        }
+        // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,
+        // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).
+        // For example, system timezone is set as "Time Zone: America/Toronto",
+        // then these code will get different result:
+        // `new Date(1478411999999).getTimezoneOffset();  // get 240`
+        // `new Date(1478412000000).getTimezoneOffset();  // get 300`
+        // So we should not use `new Date`, but use `Date.UTC`.
+        else {
+            var hour = +match[4] || 0;
+            if (match[8].toUpperCase() !== 'Z') {
+                hour -= match[8].slice(0, 3);
+            }
+            return new Date(Date.UTC(
+                +match[1],
+                +(match[2] || 1) - 1,
+                +match[3] || 1,
+                hour,
+                +(match[5] || 0),
+                +match[6] || 0,
+                +match[7] || 0
+            ));
+        }
+    }
+    else if (value == null) {
+        return new Date(NaN);
+    }
+
+    return new Date(Math.round(value));
+}
+
+/**
+ * Quantity of a number. e.g. 0.1, 1, 10, 100
+ *
+ * @param  {number} val
+ * @return {number}
+ */
+function quantity(val) {
+    return Math.pow(10, quantityExponent(val));
+}
+
+function quantityExponent(val) {
+    return Math.floor(Math.log(val) / Math.LN10);
+}
+
+/**
+ * find a “nice” number approximately equal to x. Round the number if round = true,
+ * take ceiling if round = false. The primary observation is that the “nicest”
+ * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.
+ *
+ * See "Nice Numbers for Graph Labels" of Graphic Gems.
+ *
+ * @param  {number} val Non-negative value.
+ * @param  {boolean} round
+ * @return {number}
+ */
+function nice(val, round) {
+    var exponent = quantityExponent(val);
+    var exp10 = Math.pow(10, exponent);
+    var f = val / exp10; // 1 <= f < 10
+    var nf;
+    if (round) {
+        if (f < 1.5) { nf = 1; }
+        else if (f < 2.5) { nf = 2; }
+        else if (f < 4) { nf = 3; }
+        else if (f < 7) { nf = 5; }
+        else { nf = 10; }
+    }
+    else {
+        if (f < 1) { nf = 1; }
+        else if (f < 2) { nf = 2; }
+        else if (f < 3) { nf = 3; }
+        else if (f < 5) { nf = 5; }
+        else { nf = 10; }
+    }
+    val = nf * exp10;
+
+    // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).
+    // 20 is the uppper bound of toFixed.
+    return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;
+}
+
+/**
+ * Order intervals asc, and split them when overlap.
+ * expect(numberUtil.reformIntervals([
+ *     {interval: [18, 62], close: [1, 1]},
+ *     {interval: [-Infinity, -70], close: [0, 0]},
+ *     {interval: [-70, -26], close: [1, 1]},
+ *     {interval: [-26, 18], close: [1, 1]},
+ *     {interval: [62, 150], close: [1, 1]},
+ *     {interval: [106, 150], close: [1, 1]},
+ *     {interval: [150, Infinity], close: [0, 0]}
+ * ])).toEqual([
+ *     {interval: [-Infinity, -70], close: [0, 0]},
+ *     {interval: [-70, -26], close: [1, 1]},
+ *     {interval: [-26, 18], close: [0, 1]},
+ *     {interval: [18, 62], close: [0, 1]},
+ *     {interval: [62, 150], close: [0, 1]},
+ *     {interval: [150, Infinity], close: [0, 0]}
+ * ]);
+ * @param {Array.<Object>} list, where `close` mean open or close
+ *        of the interval, and Infinity can be used.
+ * @return {Array.<Object>} The origin list, which has been reformed.
+ */
+function reformIntervals(list) {
+    list.sort(function (a, b) {
+        return littleThan(a, b, 0) ? -1 : 1;
+    });
+
+    var curr = -Infinity;
+    var currClose = 1;
+    for (var i = 0; i < list.length;) {
+        var interval = list[i].interval;
+        var close = list[i].close;
+
+        for (var lg = 0; lg < 2; lg++) {
+            if (interval[lg] <= curr) {
+                interval[lg] = curr;
+                close[lg] = !lg ? 1 - currClose : 1;
+            }
+            curr = interval[lg];
+            currClose = close[lg];
+        }
+
+        if (interval[0] === interval[1] && close[0] * close[1] !== 1) {
+            list.splice(i, 1);
+        }
+        else {
+            i++;
+        }
+    }
+
+    return list;
+
+    function littleThan(a, b, lg) {
+        return a.interval[lg] < b.interval[lg]
+            || (
+                a.interval[lg] === b.interval[lg]
+                && (
+                    (a.close[lg] - b.close[lg] === (!lg ? 1 : -1))
+                    || (!lg && littleThan(a, b, 1))
+                )
+            );
+    }
+}
+
+/**
+ * parseFloat NaNs numeric-cast false positives (null|true|false|"")
+ * ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ * subtraction forces infinities to NaN
+ *
+ * @param {*} v
+ * @return {boolean}
+ */
+function isNumeric(v) {
+    return v - parseFloat(v) >= 0;
+}
+
+
+var number = (Object.freeze || Object)({
+	linearMap: linearMap,
+	parsePercent: parsePercent$1,
+	round: round$1,
+	asc: asc,
+	getPrecision: getPrecision,
+	getPrecisionSafe: getPrecisionSafe,
+	getPixelPrecision: getPixelPrecision,
+	getPercentWithPrecision: getPercentWithPrecision,
+	MAX_SAFE_INTEGER: MAX_SAFE_INTEGER,
+	remRadian: remRadian,
+	isRadianAroundZero: isRadianAroundZero,
+	parseDate: parseDate,
+	quantity: quantity,
+	nice: nice,
+	reformIntervals: reformIntervals,
+	isNumeric: isNumeric
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * 每三位默认加,格式化
+ * @param {string|number} x
+ * @return {string}
+ */
+function addCommas(x) {
+    if (isNaN(x)) {
+        return '-';
+    }
+    x = (x + '').split('.');
+    return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,'$1,')
+            + (x.length > 1 ? ('.' + x[1]) : '');
+}
+
+/**
+ * @param {string} str
+ * @param {boolean} [upperCaseFirst=false]
+ * @return {string} str
+ */
+function toCamelCase(str, upperCaseFirst) {
+    str = (str || '').toLowerCase().replace(/-(.)/g, function(match, group1) {
+        return group1.toUpperCase();
+    });
+
+    if (upperCaseFirst && str) {
+        str = str.charAt(0).toUpperCase() + str.slice(1);
+    }
+
+    return str;
+}
+
+var normalizeCssArray$1 = normalizeCssArray;
+
+
+var replaceReg = /([&<>"'])/g;
+var replaceMap = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    '\'': '&#39;'
+};
+
+function encodeHTML(source) {
+    return source == null
+        ? ''
+        : (source + '').replace(replaceReg, function (str, c) {
+            return replaceMap[c];
+        });
+}
+
+var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
+
+var wrapVar = function (varName, seriesIdx) {
+    return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';
+};
+
+/**
+ * Template formatter
+ * @param {string} tpl
+ * @param {Array.<Object>|Object} paramsList
+ * @param {boolean} [encode=false]
+ * @return {string}
+ */
+function formatTpl(tpl, paramsList, encode) {
+    if (!isArray(paramsList)) {
+        paramsList = [paramsList];
+    }
+    var seriesLen = paramsList.length;
+    if (!seriesLen) {
+        return '';
+    }
+
+    var $vars = paramsList[0].$vars || [];
+    for (var i = 0; i < $vars.length; i++) {
+        var alias = TPL_VAR_ALIAS[i];
+        tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));
+    }
+    for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {
+        for (var k = 0; k < $vars.length; k++) {
+            var val = paramsList[seriesIdx][$vars[k]];
+            tpl = tpl.replace(
+                wrapVar(TPL_VAR_ALIAS[k], seriesIdx),
+                encode ? encodeHTML(val) : val
+            );
+        }
+    }
+
+    return tpl;
+}
+
+/**
+ * simple Template formatter
+ *
+ * @param {string} tpl
+ * @param {Object} param
+ * @param {boolean} [encode=false]
+ * @return {string}
+ */
+function formatTplSimple(tpl, param, encode) {
+    each$1(param, function (value, key) {
+        tpl = tpl.replace(
+            '{' + key + '}',
+            encode ? encodeHTML(value) : value
+        );
+    });
+    return tpl;
+}
+
+/**
+ * @param {Object|string} [opt] If string, means color.
+ * @param {string} [opt.color]
+ * @param {string} [opt.extraCssText]
+ * @param {string} [opt.type='item'] 'item' or 'subItem'
+ * @return {string}
+ */
+function getTooltipMarker(opt, extraCssText) {
+    opt = isString(opt) ? {color: opt, extraCssText: extraCssText} : (opt || {});
+    var color = opt.color;
+    var type = opt.type;
+    var extraCssText = opt.extraCssText;
+
+    if (!color) {
+        return '';
+    }
+
+    return type === 'subItem'
+        ? '<span style="display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;'
+            + 'border-radius:4px;width:4px;height:4px;background-color:'
+            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>'
+        : '<span style="display:inline-block;margin-right:5px;'
+            + 'border-radius:10px;width:10px;height:10px;background-color:'
+            + encodeHTML(color) + ';' + (extraCssText || '') + '"></span>';
+}
+
+function pad(str, len) {
+    str += '';
+    return '0000'.substr(0, len - str.length) + str;
+}
+
+
+/**
+ * ISO Date format
+ * @param {string} tpl
+ * @param {number} value
+ * @param {boolean} [isUTC=false] Default in local time.
+ *           see `module:echarts/scale/Time`
+ *           and `module:echarts/util/number#parseDate`.
+ * @inner
+ */
+function formatTime(tpl, value, isUTC) {
+    if (tpl === 'week'
+        || tpl === 'month'
+        || tpl === 'quarter'
+        || tpl === 'half-year'
+        || tpl === 'year'
+    ) {
+        tpl = 'MM-dd\nyyyy';
+    }
+
+    var date = parseDate(value);
+    var utc = isUTC ? 'UTC' : '';
+    var y = date['get' + utc + 'FullYear']();
+    var M = date['get' + utc + 'Month']() + 1;
+    var d = date['get' + utc + 'Date']();
+    var h = date['get' + utc + 'Hours']();
+    var m = date['get' + utc + 'Minutes']();
+    var s = date['get' + utc + 'Seconds']();
+    var S = date['get' + utc + 'Milliseconds']();
+
+    tpl = tpl.replace('MM', pad(M, 2))
+        .replace('M', M)
+        .replace('yyyy', y)
+        .replace('yy', y % 100)
+        .replace('dd', pad(d, 2))
+        .replace('d', d)
+        .replace('hh', pad(h, 2))
+        .replace('h', h)
+        .replace('mm', pad(m, 2))
+        .replace('m', m)
+        .replace('ss', pad(s, 2))
+        .replace('s', s)
+        .replace('SSS', pad(S, 3));
+
+    return tpl;
+}
+
+/**
+ * Capital first
+ * @param {string} str
+ * @return {string}
+ */
+function capitalFirst(str) {
+    return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;
+}
+
+var truncateText$1 = truncateText;
+
+var getTextRect = getBoundingRect;
+
+
+var format = (Object.freeze || Object)({
+	addCommas: addCommas,
+	toCamelCase: toCamelCase,
+	normalizeCssArray: normalizeCssArray$1,
+	encodeHTML: encodeHTML,
+	formatTpl: formatTpl,
+	formatTplSimple: formatTplSimple,
+	getTooltipMarker: getTooltipMarker,
+	formatTime: formatTime,
+	capitalFirst: capitalFirst,
+	truncateText: truncateText$1,
+	getTextRect: getTextRect
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Layout helpers for each component positioning
+
+var each$3 = each$1;
+
+/**
+ * @public
+ */
+var LOCATION_PARAMS = [
+    'left', 'right', 'top', 'bottom', 'width', 'height'
+];
+
+/**
+ * @public
+ */
+var HV_NAMES = [
+    ['width', 'left', 'right'],
+    ['height', 'top', 'bottom']
+];
+
+function boxLayout(orient, group, gap, maxWidth, maxHeight) {
+    var x = 0;
+    var y = 0;
+
+    if (maxWidth == null) {
+        maxWidth = Infinity;
+    }
+    if (maxHeight == null) {
+        maxHeight = Infinity;
+    }
+    var currentLineMaxSize = 0;
+
+    group.eachChild(function (child, idx) {
+        var position = child.position;
+        var rect = child.getBoundingRect();
+        var nextChild = group.childAt(idx + 1);
+        var nextChildRect = nextChild && nextChild.getBoundingRect();
+        var nextX;
+        var nextY;
+
+        if (orient === 'horizontal') {
+            var moveX = rect.width + (nextChildRect ? (-nextChildRect.x + rect.x) : 0);
+            nextX = x + moveX;
+            // Wrap when width exceeds maxWidth or meet a `newline` group
+            // FIXME compare before adding gap?
+            if (nextX > maxWidth || child.newline) {
+                x = 0;
+                nextX = moveX;
+                y += currentLineMaxSize + gap;
+                currentLineMaxSize = rect.height;
+            }
+            else {
+                // FIXME: consider rect.y is not `0`?
+                currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);
+            }
+        }
+        else {
+            var moveY = rect.height + (nextChildRect ? (-nextChildRect.y + rect.y) : 0);
+            nextY = y + moveY;
+            // Wrap when width exceeds maxHeight or meet a `newline` group
+            if (nextY > maxHeight || child.newline) {
+                x += currentLineMaxSize + gap;
+                y = 0;
+                nextY = moveY;
+                currentLineMaxSize = rect.width;
+            }
+            else {
+                currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);
+            }
+        }
+
+        if (child.newline) {
+            return;
+        }
+
+        position[0] = x;
+        position[1] = y;
+
+        orient === 'horizontal'
+            ? (x = nextX + gap)
+            : (y = nextY + gap);
+    });
+}
+
+/**
+ * VBox or HBox layouting
+ * @param {string} orient
+ * @param {module:zrender/container/Group} group
+ * @param {number} gap
+ * @param {number} [width=Infinity]
+ * @param {number} [height=Infinity]
+ */
+var box = boxLayout;
+
+/**
+ * VBox layouting
+ * @param {module:zrender/container/Group} group
+ * @param {number} gap
+ * @param {number} [width=Infinity]
+ * @param {number} [height=Infinity]
+ */
+var vbox = curry(boxLayout, 'vertical');
+
+/**
+ * HBox layouting
+ * @param {module:zrender/container/Group} group
+ * @param {number} gap
+ * @param {number} [width=Infinity]
+ * @param {number} [height=Infinity]
+ */
+var hbox = curry(boxLayout, 'horizontal');
+
+/**
+ * If x or x2 is not specified or 'center' 'left' 'right',
+ * the width would be as long as possible.
+ * If y or y2 is not specified or 'middle' 'top' 'bottom',
+ * the height would be as long as possible.
+ *
+ * @param {Object} positionInfo
+ * @param {number|string} [positionInfo.x]
+ * @param {number|string} [positionInfo.y]
+ * @param {number|string} [positionInfo.x2]
+ * @param {number|string} [positionInfo.y2]
+ * @param {Object} containerRect {width, height}
+ * @param {string|number} margin
+ * @return {Object} {width, height}
+ */
+function getAvailableSize(positionInfo, containerRect, margin) {
+    var containerWidth = containerRect.width;
+    var containerHeight = containerRect.height;
+
+    var x = parsePercent$1(positionInfo.x, containerWidth);
+    var y = parsePercent$1(positionInfo.y, containerHeight);
+    var x2 = parsePercent$1(positionInfo.x2, containerWidth);
+    var y2 = parsePercent$1(positionInfo.y2, containerHeight);
+
+    (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0);
+    (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth);
+    (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0);
+    (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight);
+
+    margin = normalizeCssArray$1(margin || 0);
+
+    return {
+        width: Math.max(x2 - x - margin[1] - margin[3], 0),
+        height: Math.max(y2 - y - margin[0] - margin[2], 0)
+    };
+}
+
+/**
+ * Parse position info.
+ *
+ * @param {Object} positionInfo
+ * @param {number|string} [positionInfo.left]
+ * @param {number|string} [positionInfo.top]
+ * @param {number|string} [positionInfo.right]
+ * @param {number|string} [positionInfo.bottom]
+ * @param {number|string} [positionInfo.width]
+ * @param {number|string} [positionInfo.height]
+ * @param {number|string} [positionInfo.aspect] Aspect is width / height
+ * @param {Object} containerRect
+ * @param {string|number} [margin]
+ *
+ * @return {module:zrender/core/BoundingRect}
+ */
+function getLayoutRect(
+    positionInfo, containerRect, margin
+) {
+    margin = normalizeCssArray$1(margin || 0);
+
+    var containerWidth = containerRect.width;
+    var containerHeight = containerRect.height;
+
+    var left = parsePercent$1(positionInfo.left, containerWidth);
+    var top = parsePercent$1(positionInfo.top, containerHeight);
+    var right = parsePercent$1(positionInfo.right, containerWidth);
+    var bottom = parsePercent$1(positionInfo.bottom, containerHeight);
+    var width = parsePercent$1(positionInfo.width, containerWidth);
+    var height = parsePercent$1(positionInfo.height, containerHeight);
+
+    var verticalMargin = margin[2] + margin[0];
+    var horizontalMargin = margin[1] + margin[3];
+    var aspect = positionInfo.aspect;
+
+    // If width is not specified, calculate width from left and right
+    if (isNaN(width)) {
+        width = containerWidth - right - horizontalMargin - left;
+    }
+    if (isNaN(height)) {
+        height = containerHeight - bottom - verticalMargin - top;
+    }
+
+    if (aspect != null) {
+        // If width and height are not given
+        // 1. Graph should not exceeds the container
+        // 2. Aspect must be keeped
+        // 3. Graph should take the space as more as possible
+        // FIXME
+        // Margin is not considered, because there is no case that both
+        // using margin and aspect so far.
+        if (isNaN(width) && isNaN(height)) {
+            if (aspect > containerWidth / containerHeight) {
+                width = containerWidth * 0.8;
+            }
+            else {
+                height = containerHeight * 0.8;
+            }
+        }
+
+        // Calculate width or height with given aspect
+        if (isNaN(width)) {
+            width = aspect * height;
+        }
+        if (isNaN(height)) {
+            height = width / aspect;
+        }
+    }
+
+    // If left is not specified, calculate left from right and width
+    if (isNaN(left)) {
+        left = containerWidth - right - width - horizontalMargin;
+    }
+    if (isNaN(top)) {
+        top = containerHeight - bottom - height - verticalMargin;
+    }
+
+    // Align left and top
+    switch (positionInfo.left || positionInfo.right) {
+        case 'center':
+            left = containerWidth / 2 - width / 2 - margin[3];
+            break;
+        case 'right':
+            left = containerWidth - width - horizontalMargin;
+            break;
+    }
+    switch (positionInfo.top || positionInfo.bottom) {
+        case 'middle':
+        case 'center':
+            top = containerHeight / 2 - height / 2 - margin[0];
+            break;
+        case 'bottom':
+            top = containerHeight - height - verticalMargin;
+            break;
+    }
+    // If something is wrong and left, top, width, height are calculated as NaN
+    left = left || 0;
+    top = top || 0;
+    if (isNaN(width)) {
+        // Width may be NaN if only one value is given except width
+        width = containerWidth - horizontalMargin - left - (right || 0);
+    }
+    if (isNaN(height)) {
+        // Height may be NaN if only one value is given except height
+        height = containerHeight - verticalMargin - top - (bottom || 0);
+    }
+
+    var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);
+    rect.margin = margin;
+    return rect;
+}
+
+
+/**
+ * Position a zr element in viewport
+ *  Group position is specified by either
+ *  {left, top}, {right, bottom}
+ *  If all properties exists, right and bottom will be igonred.
+ *
+ * Logic:
+ *     1. Scale (against origin point in parent coord)
+ *     2. Rotate (against origin point in parent coord)
+ *     3. Traslate (with el.position by this method)
+ * So this method only fixes the last step 'Traslate', which does not affect
+ * scaling and rotating.
+ *
+ * If be called repeatly with the same input el, the same result will be gotten.
+ *
+ * @param {module:zrender/Element} el Should have `getBoundingRect` method.
+ * @param {Object} positionInfo
+ * @param {number|string} [positionInfo.left]
+ * @param {number|string} [positionInfo.top]
+ * @param {number|string} [positionInfo.right]
+ * @param {number|string} [positionInfo.bottom]
+ * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw'
+ * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw'
+ * @param {Object} containerRect
+ * @param {string|number} margin
+ * @param {Object} [opt]
+ * @param {Array.<number>} [opt.hv=[1,1]] Only horizontal or only vertical.
+ * @param {Array.<number>} [opt.boundingMode='all']
+ *        Specify how to calculate boundingRect when locating.
+ *        'all': Position the boundingRect that is transformed and uioned
+ *               both itself and its descendants.
+ *               This mode simplies confine the elements in the bounding
+ *               of their container (e.g., using 'right: 0').
+ *        'raw': Position the boundingRect that is not transformed and only itself.
+ *               This mode is useful when you want a element can overflow its
+ *               container. (Consider a rotated circle needs to be located in a corner.)
+ *               In this mode positionInfo.width/height can only be number.
+ */
+function positionElement(el, positionInfo, containerRect, margin, opt) {
+    var h = !opt || !opt.hv || opt.hv[0];
+    var v = !opt || !opt.hv || opt.hv[1];
+    var boundingMode = opt && opt.boundingMode || 'all';
+
+    if (!h && !v) {
+        return;
+    }
+
+    var rect;
+    if (boundingMode === 'raw') {
+        rect = el.type === 'group'
+            ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0)
+            : el.getBoundingRect();
+    }
+    else {
+        rect = el.getBoundingRect();
+        if (el.needLocalTransform()) {
+            var transform = el.getLocalTransform();
+            // Notice: raw rect may be inner object of el,
+            // which should not be modified.
+            rect = rect.clone();
+            rect.applyTransform(transform);
+        }
+    }
+
+    // The real width and height can not be specified but calculated by the given el.
+    positionInfo = getLayoutRect(
+        defaults(
+            {width: rect.width, height: rect.height},
+            positionInfo
+        ),
+        containerRect,
+        margin
+    );
+
+    // Because 'tranlate' is the last step in transform
+    // (see zrender/core/Transformable#getLocalTransform),
+    // we can just only modify el.position to get final result.
+    var elPos = el.position;
+    var dx = h ? positionInfo.x - rect.x : 0;
+    var dy = v ? positionInfo.y - rect.y : 0;
+
+    el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);
+}
+
+/**
+ * @param {Object} option Contains some of the properties in HV_NAMES.
+ * @param {number} hvIdx 0: horizontal; 1: vertical.
+ */
+function sizeCalculable(option, hvIdx) {
+    return option[HV_NAMES[hvIdx][0]] != null
+        || (option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null);
+}
+
+/**
+ * Consider Case:
+ * When defulat option has {left: 0, width: 100}, and we set {right: 0}
+ * through setOption or media query, using normal zrUtil.merge will cause
+ * {right: 0} does not take effect.
+ *
+ * @example
+ * ComponentModel.extend({
+ *     init: function () {
+ *         ...
+ *         var inputPositionParams = layout.getLayoutParams(option);
+ *         this.mergeOption(inputPositionParams);
+ *     },
+ *     mergeOption: function (newOption) {
+ *         newOption && zrUtil.merge(thisOption, newOption, true);
+ *         layout.mergeLayoutParam(thisOption, newOption);
+ *     }
+ * });
+ *
+ * @param {Object} targetOption
+ * @param {Object} newOption
+ * @param {Object|string} [opt]
+ * @param {boolean|Array.<boolean>} [opt.ignoreSize=false] Used for the components
+ *  that width (or height) should not be calculated by left and right (or top and bottom).
+ */
+function mergeLayoutParam(targetOption, newOption, opt) {
+    !isObject$1(opt) && (opt = {});
+
+    var ignoreSize = opt.ignoreSize;
+    !isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);
+
+    var hResult = merge$$1(HV_NAMES[0], 0);
+    var vResult = merge$$1(HV_NAMES[1], 1);
+
+    copy(HV_NAMES[0], targetOption, hResult);
+    copy(HV_NAMES[1], targetOption, vResult);
+
+    function merge$$1(names, hvIdx) {
+        var newParams = {};
+        var newValueCount = 0;
+        var merged = {};
+        var mergedValueCount = 0;
+        var enoughParamNumber = 2;
+
+        each$3(names, function (name) {
+            merged[name] = targetOption[name];
+        });
+        each$3(names, function (name) {
+            // Consider case: newOption.width is null, which is
+            // set by user for removing width setting.
+            hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);
+            hasValue(newParams, name) && newValueCount++;
+            hasValue(merged, name) && mergedValueCount++;
+        });
+
+        if (ignoreSize[hvIdx]) {
+            // Only one of left/right is premitted to exist.
+            if (hasValue(newOption, names[1])) {
+                merged[names[2]] = null;
+            }
+            else if (hasValue(newOption, names[2])) {
+                merged[names[1]] = null;
+            }
+            return merged;
+        }
+
+        // Case: newOption: {width: ..., right: ...},
+        // or targetOption: {right: ...} and newOption: {width: ...},
+        // There is no conflict when merged only has params count
+        // little than enoughParamNumber.
+        if (mergedValueCount === enoughParamNumber || !newValueCount) {
+            return merged;
+        }
+        // Case: newOption: {width: ..., right: ...},
+        // Than we can make sure user only want those two, and ignore
+        // all origin params in targetOption.
+        else if (newValueCount >= enoughParamNumber) {
+            return newParams;
+        }
+        else {
+            // Chose another param from targetOption by priority.
+            for (var i = 0; i < names.length; i++) {
+                var name = names[i];
+                if (!hasProp(newParams, name) && hasProp(targetOption, name)) {
+                    newParams[name] = targetOption[name];
+                    break;
+                }
+            }
+            return newParams;
+        }
+    }
+
+    function hasProp(obj, name) {
+        return obj.hasOwnProperty(name);
+    }
+
+    function hasValue(obj, name) {
+        return obj[name] != null && obj[name] !== 'auto';
+    }
+
+    function copy(names, target, source) {
+        each$3(names, function (name) {
+            target[name] = source[name];
+        });
+    }
+}
+
+/**
+ * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.
+ * @param {Object} source
+ * @return {Object} Result contains those props.
+ */
+function getLayoutParams(source) {
+    return copyLayoutParams({}, source);
+}
+
+/**
+ * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.
+ * @param {Object} source
+ * @return {Object} Result contains those props.
+ */
+function copyLayoutParams(target, source) {
+    source && target && each$3(LOCATION_PARAMS, function (name) {
+        source.hasOwnProperty(name) && (target[name] = source[name]);
+    });
+    return target;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var boxLayoutMixin = {
+    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')
+        };
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Component model
+ *
+ * @module echarts/model/Component
+ */
+
+var inner$1 = makeInner();
+
+/**
+ * @alias module:echarts/model/Component
+ * @constructor
+ * @param {Object} option
+ * @param {module:echarts/model/Model} parentModel
+ * @param {module:echarts/model/Model} ecModel
+ */
+var ComponentModel = Model.extend({
+
+    type: 'component',
+
+    /**
+     * @readOnly
+     * @type {string}
+     */
+    id: '',
+
+    /**
+     * Because simplified concept is probably better, series.name (or component.name)
+     * has been having too many resposibilities:
+     * (1) Generating id (which requires name in option should not be modified).
+     * (2) As an index to mapping series when merging option or calling API (a name
+     * can refer to more then one components, which is convinient is some case).
+     * (3) Display.
+     * @readOnly
+     */
+    name: '',
+
+    /**
+     * @readOnly
+     * @type {string}
+     */
+    mainType: '',
+
+    /**
+     * @readOnly
+     * @type {string}
+     */
+    subType: '',
+
+    /**
+     * @readOnly
+     * @type {number}
+     */
+    componentIndex: 0,
+
+    /**
+     * @type {Object}
+     * @protected
+     */
+    defaultOption: null,
+
+    /**
+     * @type {module:echarts/model/Global}
+     * @readOnly
+     */
+    ecModel: null,
+
+    /**
+     * key: componentType
+     * value:  Component model list, can not be null.
+     * @type {Object.<string, Array.<module:echarts/model/Model>>}
+     * @readOnly
+     */
+    dependentModels: [],
+
+    /**
+     * @type {string}
+     * @readOnly
+     */
+    uid: null,
+
+    /**
+     * Support merge layout params.
+     * Only support 'box' now (left/right/top/bottom/width/height).
+     * @type {string|Object} Object can be {ignoreSize: true}
+     * @readOnly
+     */
+    layoutMode: null,
+
+    $constructor: function (option, parentModel, ecModel, extraOpt) {
+        Model.call(this, option, parentModel, ecModel, extraOpt);
+
+        this.uid = getUID('ec_cpt_model');
+    },
+
+    init: function (option, parentModel, ecModel, extraOpt) {
+        this.mergeDefaultAndTheme(option, ecModel);
+    },
+
+    mergeDefaultAndTheme: function (option, ecModel) {
+        var layoutMode = this.layoutMode;
+        var inputPositionParams = layoutMode
+            ? getLayoutParams(option) : {};
+
+        var themeModel = ecModel.getTheme();
+        merge(option, themeModel.get(this.mainType));
+        merge(option, this.getDefaultOption());
+
+        if (layoutMode) {
+            mergeLayoutParam(option, inputPositionParams, layoutMode);
+        }
+    },
+
+    mergeOption: function (option, extraOpt) {
+        merge(this.option, option, true);
+
+        var layoutMode = this.layoutMode;
+        if (layoutMode) {
+            mergeLayoutParam(this.option, option, layoutMode);
+        }
+    },
+
+    // Hooker after init or mergeOption
+    optionUpdated: function (newCptOption, isInit) {},
+
+    getDefaultOption: function () {
+        var fields = inner$1(this);
+        if (!fields.defaultOption) {
+            var optList = [];
+            var Class = this.constructor;
+            while (Class) {
+                var opt = Class.prototype.defaultOption;
+                opt && optList.push(opt);
+                Class = Class.superClass;
+            }
+
+            var defaultOption = {};
+            for (var i = optList.length - 1; i >= 0; i--) {
+                defaultOption = merge(defaultOption, optList[i], true);
+            }
+            fields.defaultOption = defaultOption;
+        }
+        return fields.defaultOption;
+    },
+
+    getReferringComponents: function (mainType) {
+        return this.ecModel.queryComponents({
+            mainType: mainType,
+            index: this.get(mainType + 'Index', true),
+            id: this.get(mainType + 'Id', true)
+        });
+    }
+
+});
+
+// Reset ComponentModel.extend, add preConstruct.
+// clazzUtil.enableClassExtend(
+//     ComponentModel,
+//     function (option, parentModel, ecModel, extraOpt) {
+//         // Set dependentModels, componentIndex, name, id, mainType, subType.
+//         zrUtil.extend(this, extraOpt);
+
+//         this.uid = componentUtil.getUID('componentModel');
+
+//         // this.setReadOnly([
+//         //     'type', 'id', 'uid', 'name', 'mainType', 'subType',
+//         //     'dependentModels', 'componentIndex'
+//         // ]);
+//     }
+// );
+
+// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.
+enableClassManagement(
+    ComponentModel, {registerWhenExtend: true}
+);
+enableSubTypeDefaulter(ComponentModel);
+
+// Add capability of ComponentModel.topologicalTravel.
+enableTopologicalTravel(ComponentModel, getDependencies);
+
+function getDependencies(componentType) {
+    var deps = [];
+    each$1(ComponentModel.getClassesByMainType(componentType), function (Clazz) {
+        deps = deps.concat(Clazz.prototype.dependencies || []);
+    });
+
+    // Ensure main type.
+    deps = map(deps, function (type) {
+        return parseClassType$1(type).main;
+    });
+
+    // Hack dataset for convenience.
+    if (componentType !== 'dataset' && indexOf(deps, 'dataset') <= 0) {
+        deps.unshift('dataset');
+    }
+
+    return deps;
+}
+
+mixin(ComponentModel, boxLayoutMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var platform = '';
+// Navigator not exists in node
+if (typeof navigator !== 'undefined') {
+    platform = navigator.platform || '';
+}
+
+var globalDefault = {
+    // backgroundColor: 'rgba(0,0,0,0)',
+
+    // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization
+    // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'],
+    // Light colors:
+    // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'],
+    // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'],
+    // Dark colors:
+    color: ['#c23531','#2f4554', '#61a0a8', '#d48265', '#91c7ae','#749f83',  '#ca8622', '#bda29a','#6e7074', '#546570', '#c4ccd3'],
+
+    gradientColor: ['#f6efa6', '#d88273', '#bf444c'],
+
+    // If xAxis and yAxis declared, grid is created by default.
+    // grid: {},
+
+    textStyle: {
+        // color: '#000',
+        // decoration: 'none',
+        // PENDING
+        fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',
+        // fontFamily: 'Arial, Verdana, sans-serif',
+        fontSize: 12,
+        fontStyle: 'normal',
+        fontWeight: 'normal'
+    },
+
+    // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/
+    // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
+    // Default is source-over
+    blendMode: null,
+
+    animation: 'auto',
+    animationDuration: 1000,
+    animationDurationUpdate: 300,
+    animationEasing: 'exponentialOut',
+    animationEasingUpdate: 'cubicOut',
+
+    animationThreshold: 2000,
+    // Configuration for progressive/incremental rendering
+    progressiveThreshold: 3000,
+    progressive: 400,
+
+    // Threshold of if use single hover layer to optimize.
+    // It is recommended that `hoverLayerThreshold` is equivalent to or less than
+    // `progressiveThreshold`, otherwise hover will cause restart of progressive,
+    // which is unexpected.
+    // see example <echarts/test/heatmap-large.html>.
+    hoverLayerThreshold: 3000,
+
+    // See: module:echarts/scale/Time
+    useUTC: false
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$2 = makeInner();
+
+function getNearestColorPalette(colors, requestColorNum) {
+    var paletteNum = colors.length;
+    // TODO colors must be in order
+    for (var i = 0; i < paletteNum; i++) {
+        if (colors[i].length > requestColorNum) {
+            return colors[i];
+        }
+    }
+    return colors[paletteNum - 1];
+}
+
+var colorPaletteMixin = {
+    clearColorPalette: function () {
+        inner$2(this).colorIdx = 0;
+        inner$2(this).colorNameMap = {};
+    },
+
+    /**
+     * @param {string} name MUST NOT be null/undefined. Otherwise call this function
+     *                 twise with the same parameters will get different result.
+     * @param {Object} [scope=this]
+     * @param {Object} [requestColorNum]
+     * @return {string} color string.
+     */
+    getColorFromPalette: function (name, scope, requestColorNum) {
+        scope = scope || this;
+        var scopeFields = inner$2(scope);
+        var colorIdx = scopeFields.colorIdx || 0;
+        var colorNameMap = scopeFields.colorNameMap = scopeFields.colorNameMap || {};
+        // Use `hasOwnProperty` to avoid conflict with Object.prototype.
+        if (colorNameMap.hasOwnProperty(name)) {
+            return colorNameMap[name];
+        }
+        var defaultColorPalette = normalizeToArray(this.get('color', true));
+        var layeredColorPalette = this.get('colorLayer', true);
+        var colorPalette = ((requestColorNum == null || !layeredColorPalette)
+            ? defaultColorPalette : getNearestColorPalette(layeredColorPalette, requestColorNum));
+
+        // In case can't find in layered color palette.
+        colorPalette = colorPalette || defaultColorPalette;
+
+        if (!colorPalette || !colorPalette.length) {
+            return;
+        }
+
+        var color = colorPalette[colorIdx];
+        if (name) {
+            colorNameMap[name] = color;
+        }
+        scopeFields.colorIdx = (colorIdx + 1) % colorPalette.length;
+
+        return color;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Helper for model references.
+ * There are many manners to refer axis/coordSys.
+ */
+
+// TODO
+// merge relevant logic to this file?
+// check: "modelHelper" of tooltip and "BrushTargetManager".
+
+/**
+ * @return {Object} For example:
+ * {
+ *     coordSysName: 'cartesian2d',
+ *     coordSysDims: ['x', 'y', ...],
+ *     axisMap: HashMap({
+ *         x: xAxisModel,
+ *         y: yAxisModel
+ *     }),
+ *     categoryAxisMap: HashMap({
+ *         x: xAxisModel,
+ *         y: undefined
+ *     }),
+ *     // It also indicate that whether there is category axis.
+ *     firstCategoryDimIndex: 1,
+ *     // To replace user specified encode.
+ * }
+ */
+function getCoordSysDefineBySeries(seriesModel) {
+    var coordSysName = seriesModel.get('coordinateSystem');
+    var result = {
+        coordSysName: coordSysName,
+        coordSysDims: [],
+        axisMap: createHashMap(),
+        categoryAxisMap: createHashMap()
+    };
+    var fetch = fetchers[coordSysName];
+    if (fetch) {
+        fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);
+        return result;
+    }
+}
+
+var fetchers = {
+
+    cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {
+        var xAxisModel = seriesModel.getReferringComponents('xAxis')[0];
+        var yAxisModel = seriesModel.getReferringComponents('yAxis')[0];
+
+        if (__DEV__) {
+            if (!xAxisModel) {
+                throw new Error('xAxis "' + retrieve(
+                    seriesModel.get('xAxisIndex'),
+                    seriesModel.get('xAxisId'),
+                    0
+                ) + '" not found');
+            }
+            if (!yAxisModel) {
+                throw new Error('yAxis "' + retrieve(
+                    seriesModel.get('xAxisIndex'),
+                    seriesModel.get('yAxisId'),
+                    0
+                ) + '" not found');
+            }
+        }
+
+        result.coordSysDims = ['x', 'y'];
+        axisMap.set('x', xAxisModel);
+        axisMap.set('y', yAxisModel);
+
+        if (isCategory(xAxisModel)) {
+            categoryAxisMap.set('x', xAxisModel);
+            result.firstCategoryDimIndex = 0;
+        }
+        if (isCategory(yAxisModel)) {
+            categoryAxisMap.set('y', yAxisModel);
+            result.firstCategoryDimIndex = 1;
+        }
+    },
+
+    singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {
+        var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0];
+
+        if (__DEV__) {
+            if (!singleAxisModel) {
+                throw new Error('singleAxis should be specified.');
+            }
+        }
+
+        result.coordSysDims = ['single'];
+        axisMap.set('single', singleAxisModel);
+
+        if (isCategory(singleAxisModel)) {
+            categoryAxisMap.set('single', singleAxisModel);
+            result.firstCategoryDimIndex = 0;
+        }
+    },
+
+    polar: function (seriesModel, result, axisMap, categoryAxisMap) {
+        var polarModel = seriesModel.getReferringComponents('polar')[0];
+        var radiusAxisModel = polarModel.findAxisModel('radiusAxis');
+        var angleAxisModel = polarModel.findAxisModel('angleAxis');
+
+        if (__DEV__) {
+            if (!angleAxisModel) {
+                throw new Error('angleAxis option not found');
+            }
+            if (!radiusAxisModel) {
+                throw new Error('radiusAxis option not found');
+            }
+        }
+
+        result.coordSysDims = ['radius', 'angle'];
+        axisMap.set('radius', radiusAxisModel);
+        axisMap.set('angle', angleAxisModel);
+
+        if (isCategory(radiusAxisModel)) {
+            categoryAxisMap.set('radius', radiusAxisModel);
+            result.firstCategoryDimIndex = 0;
+        }
+        if (isCategory(angleAxisModel)) {
+            categoryAxisMap.set('angle', angleAxisModel);
+            result.firstCategoryDimIndex = 1;
+        }
+    },
+
+    geo: function (seriesModel, result, axisMap, categoryAxisMap) {
+        result.coordSysDims = ['lng', 'lat'];
+    },
+
+    parallel: function (seriesModel, result, axisMap, categoryAxisMap) {
+        var ecModel = seriesModel.ecModel;
+        var parallelModel = ecModel.getComponent(
+            'parallel', seriesModel.get('parallelIndex')
+        );
+        var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();
+
+        each$1(parallelModel.parallelAxisIndex, function (axisIndex, index) {
+            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);
+            var axisDim = coordSysDims[index];
+            axisMap.set(axisDim, axisModel);
+
+            if (isCategory(axisModel) && result.firstCategoryDimIndex == null) {
+                categoryAxisMap.set(axisDim, axisModel);
+                result.firstCategoryDimIndex = index;
+            }
+        });
+    }
+};
+
+function isCategory(axisModel) {
+    return axisModel.get('type') === 'category';
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Avoid typo.
+var SOURCE_FORMAT_ORIGINAL = 'original';
+var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';
+var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';
+var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';
+var SOURCE_FORMAT_UNKNOWN = 'unknown';
+// ??? CHANGE A NAME
+var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';
+
+var SERIES_LAYOUT_BY_COLUMN = 'column';
+var SERIES_LAYOUT_BY_ROW = 'row';
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * [sourceFormat]
+ *
+ * + "original":
+ * This format is only used in series.data, where
+ * itemStyle can be specified in data item.
+ *
+ * + "arrayRows":
+ * [
+ *     ['product', 'score', 'amount'],
+ *     ['Matcha Latte', 89.3, 95.8],
+ *     ['Milk Tea', 92.1, 89.4],
+ *     ['Cheese Cocoa', 94.4, 91.2],
+ *     ['Walnut Brownie', 85.4, 76.9]
+ * ]
+ *
+ * + "objectRows":
+ * [
+ *     {product: 'Matcha Latte', score: 89.3, amount: 95.8},
+ *     {product: 'Milk Tea', score: 92.1, amount: 89.4},
+ *     {product: 'Cheese Cocoa', score: 94.4, amount: 91.2},
+ *     {product: 'Walnut Brownie', score: 85.4, amount: 76.9}
+ * ]
+ *
+ * + "keyedColumns":
+ * {
+ *     'product': ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'],
+ *     'count': [823, 235, 1042, 988],
+ *     'score': [95.8, 81.4, 91.2, 76.9]
+ * }
+ *
+ * + "typedArray"
+ *
+ * + "unknown"
+ */
+
+/**
+ * @constructor
+ * @param {Object} fields
+ * @param {string} fields.sourceFormat
+ * @param {Array|Object} fields.fromDataset
+ * @param {Array|Object} [fields.data]
+ * @param {string} [seriesLayoutBy='column']
+ * @param {Array.<Object|string>} [dimensionsDefine]
+ * @param {Objet|HashMap} [encodeDefine]
+ * @param {number} [startIndex=0]
+ * @param {number} [dimensionsDetectCount]
+ */
+function Source(fields) {
+
+    /**
+     * @type {boolean}
+     */
+    this.fromDataset = fields.fromDataset;
+
+    /**
+     * Not null/undefined.
+     * @type {Array|Object}
+     */
+    this.data = fields.data || (
+        fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []
+    );
+
+    /**
+     * See also "detectSourceFormat".
+     * Not null/undefined.
+     * @type {string}
+     */
+    this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;
+
+    /**
+     * 'row' or 'column'
+     * Not null/undefined.
+     * @type {string} seriesLayoutBy
+     */
+    this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;
+
+    /**
+     * dimensions definition in option.
+     * can be null/undefined.
+     * @type {Array.<Object|string>}
+     */
+    this.dimensionsDefine = fields.dimensionsDefine;
+
+    /**
+     * encode definition in option.
+     * can be null/undefined.
+     * @type {Objet|HashMap}
+     */
+    this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);
+
+    /**
+     * Not null/undefined, uint.
+     * @type {number}
+     */
+    this.startIndex = fields.startIndex || 0;
+
+    /**
+     * Can be null/undefined (when unknown), uint.
+     * @type {number}
+     */
+    this.dimensionsDetectCount = fields.dimensionsDetectCount;
+}
+
+/**
+ * Wrap original series data for some compatibility cases.
+ */
+Source.seriesDataToSource = function (data) {
+    return new Source({
+        data: data,
+        sourceFormat: isTypedArray(data)
+            ? SOURCE_FORMAT_TYPED_ARRAY
+            : SOURCE_FORMAT_ORIGINAL,
+        fromDataset: false
+    });
+};
+
+enableClassCheck(Source);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$3 = makeInner();
+
+/**
+ * @see {module:echarts/data/Source}
+ * @param {module:echarts/component/dataset/DatasetModel} datasetModel
+ * @return {string} sourceFormat
+ */
+function detectSourceFormat(datasetModel) {
+    var data = datasetModel.option.source;
+    var sourceFormat = SOURCE_FORMAT_UNKNOWN;
+
+    if (isTypedArray(data)) {
+        sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;
+    }
+    else if (isArray(data)) {
+        // FIXME Whether tolerate null in top level array?
+        for (var i = 0, len = data.length; i < len; i++) {
+            var item = data[i];
+
+            if (item == null) {
+                continue;
+            }
+            else if (isArray(item)) {
+                sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;
+                break;
+            }
+            else if (isObject$1(item)) {
+                sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;
+                break;
+            }
+        }
+    }
+    else if (isObject$1(data)) {
+        for (var key in data) {
+            if (data.hasOwnProperty(key) && isArrayLike(data[key])) {
+                sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;
+                break;
+            }
+        }
+    }
+    else if (data != null) {
+        throw new Error('Invalid data');
+    }
+
+    inner$3(datasetModel).sourceFormat = sourceFormat;
+}
+
+/**
+ * [Scenarios]:
+ * (1) Provide source data directly:
+ *     series: {
+ *         encode: {...},
+ *         dimensions: [...]
+ *         seriesLayoutBy: 'row',
+ *         data: [[...]]
+ *     }
+ * (2) Refer to datasetModel.
+ *     series: [{
+ *         encode: {...}
+ *         // Ignore datasetIndex means `datasetIndex: 0`
+ *         // and the dimensions defination in dataset is used
+ *     }, {
+ *         encode: {...},
+ *         seriesLayoutBy: 'column',
+ *         datasetIndex: 1
+ *     }]
+ *
+ * Get data from series itself or datset.
+ * @return {module:echarts/data/Source} source
+ */
+function getSource(seriesModel) {
+    return inner$3(seriesModel).source;
+}
+
+/**
+ * MUST be called before mergeOption of all series.
+ * @param {module:echarts/model/Global} ecModel
+ */
+function resetSourceDefaulter(ecModel) {
+    // `datasetMap` is used to make default encode.
+    inner$3(ecModel).datasetMap = createHashMap();
+}
+
+/**
+ * [Caution]:
+ * MUST be called after series option merged and
+ * before "series.getInitailData()" called.
+ *
+ * [The rule of making default encode]:
+ * Category axis (if exists) alway map to the first dimension.
+ * Each other axis occupies a subsequent dimension.
+ *
+ * [Why make default encode]:
+ * Simplify the typing of encode in option, avoiding the case like that:
+ * series: [{encode: {x: 0, y: 1}}, {encode: {x: 0, y: 2}}, {encode: {x: 0, y: 3}}],
+ * where the "y" have to be manually typed as "1, 2, 3, ...".
+ *
+ * @param {module:echarts/model/Series} seriesModel
+ */
+function prepareSource(seriesModel) {
+    var seriesOption = seriesModel.option;
+
+    var data = seriesOption.data;
+    var sourceFormat = isTypedArray(data)
+        ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;
+    var fromDataset = false;
+
+    var seriesLayoutBy = seriesOption.seriesLayoutBy;
+    var sourceHeader = seriesOption.sourceHeader;
+    var dimensionsDefine = seriesOption.dimensions;
+
+    var datasetModel = getDatasetModel(seriesModel);
+    if (datasetModel) {
+        var datasetOption = datasetModel.option;
+
+        data = datasetOption.source;
+        sourceFormat = inner$3(datasetModel).sourceFormat;
+        fromDataset = true;
+
+        // These settings from series has higher priority.
+        seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy;
+        sourceHeader == null && (sourceHeader = datasetOption.sourceHeader);
+        dimensionsDefine = dimensionsDefine || datasetOption.dimensions;
+    }
+
+    var completeResult = completeBySourceData(
+        data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine
+    );
+
+    // Note: dataset option does not have `encode`.
+    var encodeDefine = seriesOption.encode;
+    if (!encodeDefine && datasetModel) {
+        encodeDefine = makeDefaultEncode(
+            seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult
+        );
+    }
+
+    inner$3(seriesModel).source = new Source({
+        data: data,
+        fromDataset: fromDataset,
+        seriesLayoutBy: seriesLayoutBy,
+        sourceFormat: sourceFormat,
+        dimensionsDefine: completeResult.dimensionsDefine,
+        startIndex: completeResult.startIndex,
+        dimensionsDetectCount: completeResult.dimensionsDetectCount,
+        encodeDefine: encodeDefine
+    });
+}
+
+// return {startIndex, dimensionsDefine, dimensionsCount}
+function completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {
+    if (!data) {
+        return {dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)};
+    }
+
+    var dimensionsDetectCount;
+    var startIndex;
+    var findPotentialName;
+
+    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
+        // Rule: Most of the first line are string: it is header.
+        // Caution: consider a line with 5 string and 1 number,
+        // it still can not be sure it is a head, because the
+        // 5 string may be 5 values of category columns.
+        if (sourceHeader === 'auto' || sourceHeader == null) {
+            arrayRowsTravelFirst(function (val) {
+                // '-' is regarded as null/undefined.
+                if (val != null && val !== '-') {
+                    if (isString(val)) {
+                        startIndex == null && (startIndex = 1);
+                    }
+                    else {
+                        startIndex = 0;
+                    }
+                }
+            // 10 is an experience number, avoid long loop.
+            }, seriesLayoutBy, data, 10);
+        }
+        else {
+            startIndex = sourceHeader ? 1 : 0;
+        }
+
+        if (!dimensionsDefine && startIndex === 1) {
+            dimensionsDefine = [];
+            arrayRowsTravelFirst(function (val, index) {
+                dimensionsDefine[index] = val != null ? val : '';
+            }, seriesLayoutBy, data);
+        }
+
+        dimensionsDetectCount = dimensionsDefine
+            ? dimensionsDefine.length
+            : seriesLayoutBy === SERIES_LAYOUT_BY_ROW
+            ? data.length
+            : data[0]
+            ? data[0].length
+            : null;
+    }
+    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
+        if (!dimensionsDefine) {
+            dimensionsDefine = objectRowsCollectDimensions(data);
+            findPotentialName = true;
+        }
+    }
+    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
+        if (!dimensionsDefine) {
+            dimensionsDefine = [];
+            findPotentialName = true;
+            each$1(data, function (colArr, key) {
+                dimensionsDefine.push(key);
+            });
+        }
+    }
+    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
+        var value0 = getDataItemValue(data[0]);
+        dimensionsDetectCount = isArray(value0) && value0.length || 1;
+    }
+    else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
+        if (__DEV__) {
+            assert$1(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.');
+        }
+    }
+
+    var potentialNameDimIndex;
+    if (findPotentialName) {
+        each$1(dimensionsDefine, function (dim, idx) {
+            if ((isObject$1(dim) ? dim.name : dim) === 'name') {
+                potentialNameDimIndex = idx;
+            }
+        });
+    }
+
+    return {
+        startIndex: startIndex,
+        dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),
+        dimensionsDetectCount: dimensionsDetectCount,
+        potentialNameDimIndex: potentialNameDimIndex
+        // TODO: potentialIdDimIdx
+    };
+}
+
+// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],
+// which is reasonable. But dimension name is duplicated.
+// Returns undefined or an array contains only object without null/undefiend or string.
+function normalizeDimensionsDefine(dimensionsDefine) {
+    if (!dimensionsDefine) {
+        // The meaning of null/undefined is different from empty array.
+        return;
+    }
+    var nameMap = createHashMap();
+    return map(dimensionsDefine, function (item, index) {
+        item = extend({}, isObject$1(item) ? item : {name: item});
+
+        // User can set null in dimensions.
+        // We dont auto specify name, othewise a given name may
+        // cause it be refered unexpectedly.
+        if (item.name == null) {
+            return item;
+        }
+
+        // Also consider number form like 2012.
+        item.name += '';
+        // User may also specify displayName.
+        // displayName will always exists except user not
+        // specified or dim name is not specified or detected.
+        // (A auto generated dim name will not be used as
+        // displayName).
+        if (item.displayName == null) {
+            item.displayName = item.name;
+        }
+
+        var exist = nameMap.get(item.name);
+        if (!exist) {
+            nameMap.set(item.name, {count: 1});
+        }
+        else {
+            item.name += '-' + exist.count++;
+        }
+
+        return item;
+    });
+}
+
+function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {
+    maxLoop == null && (maxLoop = Infinity);
+    if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
+        for (var i = 0; i < data.length && i < maxLoop; i++) {
+            cb(data[i] ? data[i][0] : null, i);
+        }
+    }
+    else {
+        var value0 = data[0] || [];
+        for (var i = 0; i < value0.length && i < maxLoop; i++) {
+            cb(value0[i], i);
+        }
+    }
+}
+
+function objectRowsCollectDimensions(data) {
+    var firstIndex = 0;
+    var obj;
+    while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line
+    if (obj) {
+        var dimensions = [];
+        each$1(obj, function (value, key) {
+            dimensions.push(key);
+        });
+        return dimensions;
+    }
+}
+
+// ??? TODO merge to completedimensions, where also has
+// default encode making logic. And the default rule
+// should depends on series? consider 'map'.
+function makeDefaultEncode(
+    seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult
+) {
+    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);
+    var encode = {};
+    // var encodeTooltip = [];
+    // var encodeLabel = [];
+    var encodeItemName = [];
+    var encodeSeriesName = [];
+    var seriesType = seriesModel.subType;
+
+    // ??? TODO refactor: provide by series itself.
+    // Consider the case: 'map' series is based on geo coordSys,
+    // 'graph', 'heatmap' can be based on cartesian. But can not
+    // give default rule simply here.
+    var nSeriesMap = createHashMap(['pie', 'map', 'funnel']);
+    var cSeriesMap = createHashMap([
+        'line', 'bar', 'pictorialBar', 'scatter', 'effectScatter', 'candlestick', 'boxplot'
+    ]);
+
+    // Usually in this case series will use the first data
+    // dimension as the "value" dimension, or other default
+    // processes respectively.
+    if (coordSysDefine && cSeriesMap.get(seriesType) != null) {
+        var ecModel = seriesModel.ecModel;
+        var datasetMap = inner$3(ecModel).datasetMap;
+        var key = datasetModel.uid + '_' + seriesLayoutBy;
+        var datasetRecord = datasetMap.get(key)
+            || datasetMap.set(key, {categoryWayDim: 1, valueWayDim: 0});
+
+        // TODO
+        // Auto detect first time axis and do arrangement.
+        each$1(coordSysDefine.coordSysDims, function (coordDim) {
+            // In value way.
+            if (coordSysDefine.firstCategoryDimIndex == null) {
+                var dataDim = datasetRecord.valueWayDim++;
+                encode[coordDim] = dataDim;
+
+                // ??? TODO give a better default series name rule?
+                // especially when encode x y specified.
+                // consider: when mutiple series share one dimension
+                // category axis, series name should better use
+                // the other dimsion name. On the other hand, use
+                // both dimensions name.
+
+                encodeSeriesName.push(dataDim);
+                // encodeTooltip.push(dataDim);
+                // encodeLabel.push(dataDim);
+            }
+            // In category way, category axis.
+            else if (coordSysDefine.categoryAxisMap.get(coordDim)) {
+                encode[coordDim] = 0;
+                encodeItemName.push(0);
+            }
+            // In category way, non-category axis.
+            else {
+                var dataDim = datasetRecord.categoryWayDim++;
+                encode[coordDim] = dataDim;
+                // encodeTooltip.push(dataDim);
+                // encodeLabel.push(dataDim);
+                encodeSeriesName.push(dataDim);
+            }
+        });
+    }
+    // Do not make a complex rule! Hard to code maintain and not necessary.
+    // ??? TODO refactor: provide by series itself.
+    // [{name: ..., value: ...}, ...] like:
+    else if (nSeriesMap.get(seriesType) != null) {
+        // Find the first not ordinal. (5 is an experience value)
+        var firstNotOrdinal;
+        for (var i = 0; i < 5 && firstNotOrdinal == null; i++) {
+            if (!doGuessOrdinal(
+                data, sourceFormat, seriesLayoutBy,
+                completeResult.dimensionsDefine, completeResult.startIndex, i
+            )) {
+                firstNotOrdinal = i;
+            }
+        }
+        if (firstNotOrdinal != null) {
+            encode.value = firstNotOrdinal;
+            var nameDimIndex = completeResult.potentialNameDimIndex
+                || Math.max(firstNotOrdinal - 1, 0);
+            // By default, label use itemName in charts.
+            // So we dont set encodeLabel here.
+            encodeSeriesName.push(nameDimIndex);
+            encodeItemName.push(nameDimIndex);
+            // encodeTooltip.push(firstNotOrdinal);
+        }
+    }
+
+    // encodeTooltip.length && (encode.tooltip = encodeTooltip);
+    // encodeLabel.length && (encode.label = encodeLabel);
+    encodeItemName.length && (encode.itemName = encodeItemName);
+    encodeSeriesName.length && (encode.seriesName = encodeSeriesName);
+
+    return encode;
+}
+
+/**
+ * If return null/undefined, indicate that should not use datasetModel.
+ */
+function getDatasetModel(seriesModel) {
+    var option = seriesModel.option;
+    // Caution: consider the scenario:
+    // A dataset is declared and a series is not expected to use the dataset,
+    // and at the beginning `setOption({series: { noData })` (just prepare other
+    // option but no data), then `setOption({series: {data: [...]}); In this case,
+    // the user should set an empty array to avoid that dataset is used by default.
+    var thisData = option.data;
+    if (!thisData) {
+        return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0);
+    }
+}
+
+/**
+ * The rule should not be complex, otherwise user might not
+ * be able to known where the data is wrong.
+ * The code is ugly, but how to make it neat?
+ *
+ * @param {module:echars/data/Source} source
+ * @param {number} dimIndex
+ * @return {boolean} Whether ordinal.
+ */
+function guessOrdinal(source, dimIndex) {
+    return doGuessOrdinal(
+        source.data,
+        source.sourceFormat,
+        source.seriesLayoutBy,
+        source.dimensionsDefine,
+        source.startIndex,
+        dimIndex
+    );
+}
+
+// dimIndex may be overflow source data.
+function doGuessOrdinal(
+    data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex
+) {
+    var result;
+    // Experience value.
+    var maxLoop = 5;
+
+    if (isTypedArray(data)) {
+        return false;
+    }
+
+    // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine
+    // always exists in source.
+    var dimName;
+    if (dimensionsDefine) {
+        dimName = dimensionsDefine[dimIndex];
+        dimName = isObject$1(dimName) ? dimName.name : dimName;
+    }
+
+    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {
+        if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {
+            var sample = data[dimIndex];
+            for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {
+                if ((result = detectValue(sample[startIndex + i])) != null) {
+                    return result;
+                }
+            }
+        }
+        else {
+            for (var i = 0; i < data.length && i < maxLoop; i++) {
+                var row = data[startIndex + i];
+                if (row && (result = detectValue(row[dimIndex])) != null) {
+                    return result;
+                }
+            }
+        }
+    }
+    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {
+        if (!dimName) {
+            return;
+        }
+        for (var i = 0; i < data.length && i < maxLoop; i++) {
+            var item = data[i];
+            if (item && (result = detectValue(item[dimName])) != null) {
+                return result;
+            }
+        }
+    }
+    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {
+        if (!dimName) {
+            return;
+        }
+        var sample = data[dimName];
+        if (!sample || isTypedArray(sample)) {
+            return false;
+        }
+        for (var i = 0; i < sample.length && i < maxLoop; i++) {
+            if ((result = detectValue(sample[i])) != null) {
+                return result;
+            }
+        }
+    }
+    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {
+        for (var i = 0; i < data.length && i < maxLoop; i++) {
+            var item = data[i];
+            var val = getDataItemValue(item);
+            if (!isArray(val)) {
+                return false;
+            }
+            if ((result = detectValue(val[dimIndex])) != null) {
+                return result;
+            }
+        }
+    }
+
+    function detectValue(val) {
+        // Consider usage convenience, '1', '2' will be treated as "number".
+        // `isFinit('')` get `true`.
+        if (val != null && isFinite(val) && val !== '') {
+            return false;
+        }
+        else if (isString(val) && val !== '-') {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * ECharts global model
+ *
+ * @module {echarts/model/Global}
+ */
+
+
+/**
+ * Caution: If the mechanism should be changed some day, these cases
+ * should be considered:
+ *
+ * (1) In `merge option` mode, if using the same option to call `setOption`
+ * many times, the result should be the same (try our best to ensure that).
+ * (2) In `merge option` mode, if a component has no id/name specified, it
+ * will be merged by index, and the result sequence of the components is
+ * consistent to the original sequence.
+ * (3) `reset` feature (in toolbox). Find detailed info in comments about
+ * `mergeOption` in module:echarts/model/OptionManager.
+ */
+
+var OPTION_INNER_KEY = '\0_ec_inner';
+
+/**
+ * @alias module:echarts/model/Global
+ *
+ * @param {Object} option
+ * @param {module:echarts/model/Model} parentModel
+ * @param {Object} theme
+ */
+var GlobalModel = Model.extend({
+
+    init: function (option, parentModel, theme, optionManager) {
+        theme = theme || {};
+
+        this.option = null; // Mark as not initialized.
+
+        /**
+         * @type {module:echarts/model/Model}
+         * @private
+         */
+        this._theme = new Model(theme);
+
+        /**
+         * @type {module:echarts/model/OptionManager}
+         */
+        this._optionManager = optionManager;
+    },
+
+    setOption: function (option, optionPreprocessorFuncs) {
+        assert$1(
+            !(OPTION_INNER_KEY in option),
+            'please use chart.getOption()'
+        );
+
+        this._optionManager.setOption(option, optionPreprocessorFuncs);
+
+        this.resetOption(null);
+    },
+
+    /**
+     * @param {string} type null/undefined: reset all.
+     *                      'recreate': force recreate all.
+     *                      'timeline': only reset timeline option
+     *                      'media': only reset media query option
+     * @return {boolean} Whether option changed.
+     */
+    resetOption: function (type) {
+        var optionChanged = false;
+        var optionManager = this._optionManager;
+
+        if (!type || type === 'recreate') {
+            var baseOption = optionManager.mountOption(type === 'recreate');
+
+            if (!this.option || type === 'recreate') {
+                initBase.call(this, baseOption);
+            }
+            else {
+                this.restoreData();
+                this.mergeOption(baseOption);
+            }
+            optionChanged = true;
+        }
+
+        if (type === 'timeline' || type === 'media') {
+            this.restoreData();
+        }
+
+        if (!type || type === 'recreate' || type === 'timeline') {
+            var timelineOption = optionManager.getTimelineOption(this);
+            timelineOption && (this.mergeOption(timelineOption), optionChanged = true);
+        }
+
+        if (!type || type === 'recreate' || type === 'media') {
+            var mediaOptions = optionManager.getMediaOption(this, this._api);
+            if (mediaOptions.length) {
+                each$1(mediaOptions, function (mediaOption) {
+                    this.mergeOption(mediaOption, optionChanged = true);
+                }, this);
+            }
+        }
+
+        return optionChanged;
+    },
+
+    /**
+     * @protected
+     */
+    mergeOption: function (newOption) {
+        var option = this.option;
+        var componentsMap = this._componentsMap;
+        var newCptTypes = [];
+
+        resetSourceDefaulter(this);
+
+        // If no component class, merge directly.
+        // For example: color, animaiton options, etc.
+        each$1(newOption, function (componentOption, mainType) {
+            if (componentOption == null) {
+                return;
+            }
+
+            if (!ComponentModel.hasClass(mainType)) {
+                // globalSettingTask.dirty();
+                option[mainType] = option[mainType] == null
+                    ? clone(componentOption)
+                    : merge(option[mainType], componentOption, true);
+            }
+            else if (mainType) {
+                newCptTypes.push(mainType);
+            }
+        });
+
+        ComponentModel.topologicalTravel(
+            newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this
+        );
+
+        function visitComponent(mainType, dependencies) {
+
+            var newCptOptionList = normalizeToArray(newOption[mainType]);
+
+            var mapResult = mappingToExists(
+                componentsMap.get(mainType), newCptOptionList
+            );
+
+            makeIdAndName(mapResult);
+
+            // Set mainType and complete subType.
+            each$1(mapResult, function (item, index) {
+                var opt = item.option;
+                if (isObject$1(opt)) {
+                    item.keyInfo.mainType = mainType;
+                    item.keyInfo.subType = determineSubType(mainType, opt, item.exist);
+                }
+            });
+
+            var dependentModels = getComponentsByTypes(
+                componentsMap, dependencies
+            );
+
+            option[mainType] = [];
+            componentsMap.set(mainType, []);
+
+            each$1(mapResult, function (resultItem, index) {
+                var componentModel = resultItem.exist;
+                var newCptOption = resultItem.option;
+
+                assert$1(
+                    isObject$1(newCptOption) || componentModel,
+                    'Empty component definition'
+                );
+
+                // Consider where is no new option and should be merged using {},
+                // see removeEdgeAndAdd in topologicalTravel and
+                // ComponentModel.getAllClassMainTypes.
+                if (!newCptOption) {
+                    componentModel.mergeOption({}, this);
+                    componentModel.optionUpdated({}, false);
+                }
+                else {
+                    var ComponentModelClass = ComponentModel.getClass(
+                        mainType, resultItem.keyInfo.subType, true
+                    );
+
+                    if (componentModel && componentModel instanceof ComponentModelClass) {
+                        componentModel.name = resultItem.keyInfo.name;
+                        // componentModel.settingTask && componentModel.settingTask.dirty();
+                        componentModel.mergeOption(newCptOption, this);
+                        componentModel.optionUpdated(newCptOption, false);
+                    }
+                    else {
+                        // PENDING Global as parent ?
+                        var extraOpt = extend(
+                            {
+                                dependentModels: dependentModels,
+                                componentIndex: index
+                            },
+                            resultItem.keyInfo
+                        );
+                        componentModel = new ComponentModelClass(
+                            newCptOption, this, this, extraOpt
+                        );
+                        extend(componentModel, extraOpt);
+                        componentModel.init(newCptOption, this, this, extraOpt);
+
+                        // Call optionUpdated after init.
+                        // newCptOption has been used as componentModel.option
+                        // and may be merged with theme and default, so pass null
+                        // to avoid confusion.
+                        componentModel.optionUpdated(null, true);
+                    }
+                }
+
+                componentsMap.get(mainType)[index] = componentModel;
+                option[mainType][index] = componentModel.option;
+            }, this);
+
+            // Backup series for filtering.
+            if (mainType === 'series') {
+                createSeriesIndices(this, componentsMap.get('series'));
+            }
+        }
+
+        this._seriesIndicesMap = createHashMap(
+            this._seriesIndices = this._seriesIndices || []
+        );
+    },
+
+    /**
+     * Get option for output (cloned option and inner info removed)
+     * @public
+     * @return {Object}
+     */
+    getOption: function () {
+        var option = clone(this.option);
+
+        each$1(option, function (opts, mainType) {
+            if (ComponentModel.hasClass(mainType)) {
+                var opts = normalizeToArray(opts);
+                for (var i = opts.length - 1; i >= 0; i--) {
+                    // Remove options with inner id.
+                    if (isIdInner(opts[i])) {
+                        opts.splice(i, 1);
+                    }
+                }
+                option[mainType] = opts;
+            }
+        });
+
+        delete option[OPTION_INNER_KEY];
+
+        return option;
+    },
+
+    /**
+     * @return {module:echarts/model/Model}
+     */
+    getTheme: function () {
+        return this._theme;
+    },
+
+    /**
+     * @param {string} mainType
+     * @param {number} [idx=0]
+     * @return {module:echarts/model/Component}
+     */
+    getComponent: function (mainType, idx) {
+        var list = this._componentsMap.get(mainType);
+        if (list) {
+            return list[idx || 0];
+        }
+    },
+
+    /**
+     * If none of index and id and name used, return all components with mainType.
+     * @param {Object} condition
+     * @param {string} condition.mainType
+     * @param {string} [condition.subType] If ignore, only query by mainType
+     * @param {number|Array.<number>} [condition.index] Either input index or id or name.
+     * @param {string|Array.<string>} [condition.id] Either input index or id or name.
+     * @param {string|Array.<string>} [condition.name] Either input index or id or name.
+     * @return {Array.<module:echarts/model/Component>}
+     */
+    queryComponents: function (condition) {
+        var mainType = condition.mainType;
+        if (!mainType) {
+            return [];
+        }
+
+        var index = condition.index;
+        var id = condition.id;
+        var name = condition.name;
+
+        var cpts = this._componentsMap.get(mainType);
+
+        if (!cpts || !cpts.length) {
+            return [];
+        }
+
+        var result;
+
+        if (index != null) {
+            if (!isArray(index)) {
+                index = [index];
+            }
+            result = filter(map(index, function (idx) {
+                return cpts[idx];
+            }), function (val) {
+                return !!val;
+            });
+        }
+        else if (id != null) {
+            var isIdArray = isArray(id);
+            result = filter(cpts, function (cpt) {
+                return (isIdArray && indexOf(id, cpt.id) >= 0)
+                    || (!isIdArray && cpt.id === id);
+            });
+        }
+        else if (name != null) {
+            var isNameArray = isArray(name);
+            result = filter(cpts, function (cpt) {
+                return (isNameArray && indexOf(name, cpt.name) >= 0)
+                    || (!isNameArray && cpt.name === name);
+            });
+        }
+        else {
+            // Return all components with mainType
+            result = cpts.slice();
+        }
+
+        return filterBySubType(result, condition);
+    },
+
+    /**
+     * The interface is different from queryComponents,
+     * which is convenient for inner usage.
+     *
+     * @usage
+     * var result = findComponents(
+     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}
+     * );
+     * var result = findComponents(
+     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}
+     * );
+     * var result = findComponents(
+     *     {mainType: 'series'},
+     *     function (model, index) {...}
+     * );
+     * // result like [component0, componnet1, ...]
+     *
+     * @param {Object} condition
+     * @param {string} condition.mainType Mandatory.
+     * @param {string} [condition.subType] Optional.
+     * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName},
+     *        where xxx is mainType.
+     *        If query attribute is null/undefined or has no index/id/name,
+     *        do not filtering by query conditions, which is convenient for
+     *        no-payload situations or when target of action is global.
+     * @param {Function} [condition.filter] parameter: component, return boolean.
+     * @return {Array.<module:echarts/model/Component>}
+     */
+    findComponents: function (condition) {
+        var query = condition.query;
+        var mainType = condition.mainType;
+
+        var queryCond = getQueryCond(query);
+        var result = queryCond
+            ? this.queryComponents(queryCond)
+            : this._componentsMap.get(mainType);
+
+        return doFilter(filterBySubType(result, condition));
+
+        function getQueryCond(q) {
+            var indexAttr = mainType + 'Index';
+            var idAttr = mainType + 'Id';
+            var nameAttr = mainType + 'Name';
+            return q && (
+                    q[indexAttr] != null
+                    || q[idAttr] != null
+                    || q[nameAttr] != null
+                )
+                ? {
+                    mainType: mainType,
+                    // subType will be filtered finally.
+                    index: q[indexAttr],
+                    id: q[idAttr],
+                    name: q[nameAttr]
+                }
+                : null;
+        }
+
+        function doFilter(res) {
+            return condition.filter
+                    ? filter(res, condition.filter)
+                    : res;
+        }
+    },
+
+    /**
+     * @usage
+     * eachComponent('legend', function (legendModel, index) {
+     *     ...
+     * });
+     * eachComponent(function (componentType, model, index) {
+     *     // componentType does not include subType
+     *     // (componentType is 'xxx' but not 'xxx.aa')
+     * });
+     * eachComponent(
+     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},
+     *     function (model, index) {...}
+     * );
+     * eachComponent(
+     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}},
+     *     function (model, index) {...}
+     * );
+     *
+     * @param {string|Object=} mainType When mainType is object, the definition
+     *                                  is the same as the method 'findComponents'.
+     * @param {Function} cb
+     * @param {*} context
+     */
+    eachComponent: function (mainType, cb, context) {
+        var componentsMap = this._componentsMap;
+
+        if (typeof mainType === 'function') {
+            context = cb;
+            cb = mainType;
+            componentsMap.each(function (components, componentType) {
+                each$1(components, function (component, index) {
+                    cb.call(context, componentType, component, index);
+                });
+            });
+        }
+        else if (isString(mainType)) {
+            each$1(componentsMap.get(mainType), cb, context);
+        }
+        else if (isObject$1(mainType)) {
+            var queryResult = this.findComponents(mainType);
+            each$1(queryResult, cb, context);
+        }
+    },
+
+    /**
+     * @param {string} name
+     * @return {Array.<module:echarts/model/Series>}
+     */
+    getSeriesByName: function (name) {
+        var series = this._componentsMap.get('series');
+        return filter(series, function (oneSeries) {
+            return oneSeries.name === name;
+        });
+    },
+
+    /**
+     * @param {number} seriesIndex
+     * @return {module:echarts/model/Series}
+     */
+    getSeriesByIndex: function (seriesIndex) {
+        return this._componentsMap.get('series')[seriesIndex];
+    },
+
+    /**
+     * Get series list before filtered by type.
+     * FIXME: rename to getRawSeriesByType?
+     *
+     * @param {string} subType
+     * @return {Array.<module:echarts/model/Series>}
+     */
+    getSeriesByType: function (subType) {
+        var series = this._componentsMap.get('series');
+        return filter(series, function (oneSeries) {
+            return oneSeries.subType === subType;
+        });
+    },
+
+    /**
+     * @return {Array.<module:echarts/model/Series>}
+     */
+    getSeries: function () {
+        return this._componentsMap.get('series').slice();
+    },
+
+    /**
+     * @return {number}
+     */
+    getSeriesCount: function () {
+        return this._componentsMap.get('series').length;
+    },
+
+    /**
+     * After filtering, series may be different
+     * frome raw series.
+     *
+     * @param {Function} cb
+     * @param {*} context
+     */
+    eachSeries: function (cb, context) {
+        assertSeriesInitialized(this);
+        each$1(this._seriesIndices, function (rawSeriesIndex) {
+            var series = this._componentsMap.get('series')[rawSeriesIndex];
+            cb.call(context, series, rawSeriesIndex);
+        }, this);
+    },
+
+    /**
+     * Iterate raw series before filtered.
+     *
+     * @param {Function} cb
+     * @param {*} context
+     */
+    eachRawSeries: function (cb, context) {
+        each$1(this._componentsMap.get('series'), cb, context);
+    },
+
+    /**
+     * After filtering, series may be different.
+     * frome raw series.
+     *
+     * @parma {string} subType
+     * @param {Function} cb
+     * @param {*} context
+     */
+    eachSeriesByType: function (subType, cb, context) {
+        assertSeriesInitialized(this);
+        each$1(this._seriesIndices, function (rawSeriesIndex) {
+            var series = this._componentsMap.get('series')[rawSeriesIndex];
+            if (series.subType === subType) {
+                cb.call(context, series, rawSeriesIndex);
+            }
+        }, this);
+    },
+
+    /**
+     * Iterate raw series before filtered of given type.
+     *
+     * @parma {string} subType
+     * @param {Function} cb
+     * @param {*} context
+     */
+    eachRawSeriesByType: function (subType, cb, context) {
+        return each$1(this.getSeriesByType(subType), cb, context);
+    },
+
+    /**
+     * @param {module:echarts/model/Series} seriesModel
+     */
+    isSeriesFiltered: function (seriesModel) {
+        assertSeriesInitialized(this);
+        return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;
+    },
+
+    /**
+     * @return {Array.<number>}
+     */
+    getCurrentSeriesIndices: function () {
+        return (this._seriesIndices || []).slice();
+    },
+
+    /**
+     * @param {Function} cb
+     * @param {*} context
+     */
+    filterSeries: function (cb, context) {
+        assertSeriesInitialized(this);
+        var filteredSeries = filter(
+            this._componentsMap.get('series'), cb, context
+        );
+        createSeriesIndices(this, filteredSeries);
+    },
+
+    restoreData: function (payload) {
+        var componentsMap = this._componentsMap;
+
+        createSeriesIndices(this, componentsMap.get('series'));
+
+        var componentTypes = [];
+        componentsMap.each(function (components, componentType) {
+            componentTypes.push(componentType);
+        });
+
+        ComponentModel.topologicalTravel(
+            componentTypes,
+            ComponentModel.getAllClassMainTypes(),
+            function (componentType, dependencies) {
+                each$1(componentsMap.get(componentType), function (component) {
+                    (componentType !== 'series' || !isNotTargetSeries(component, payload))
+                        && component.restoreData();
+                });
+            }
+        );
+    }
+
+});
+
+function isNotTargetSeries(seriesModel, payload) {
+    if (payload) {
+        var index = payload.seiresIndex;
+        var id = payload.seriesId;
+        var name = payload.seriesName;
+        return (index != null && seriesModel.componentIndex !== index)
+            || (id != null && seriesModel.id !== id)
+            || (name != null && seriesModel.name !== name);
+    }
+}
+
+/**
+ * @inner
+ */
+function mergeTheme(option, theme) {
+    // PENDING
+    // NOT use `colorLayer` in theme if option has `color`
+    var notMergeColorLayer = option.color && !option.colorLayer;
+
+    each$1(theme, function (themeItem, name) {
+        if (name === 'colorLayer' && notMergeColorLayer) {
+            return;
+        }
+        // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理
+        if (!ComponentModel.hasClass(name)) {
+            if (typeof themeItem === 'object') {
+                option[name] = !option[name]
+                    ? clone(themeItem)
+                    : merge(option[name], themeItem, false);
+            }
+            else {
+                if (option[name] == null) {
+                    option[name] = themeItem;
+                }
+            }
+        }
+    });
+}
+
+function initBase(baseOption) {
+    baseOption = baseOption;
+
+    // Using OPTION_INNER_KEY to mark that this option can not be used outside,
+    // i.e. `chart.setOption(chart.getModel().option);` is forbiden.
+    this.option = {};
+    this.option[OPTION_INNER_KEY] = 1;
+
+    /**
+     * Init with series: [], in case of calling findSeries method
+     * before series initialized.
+     * @type {Object.<string, Array.<module:echarts/model/Model>>}
+     * @private
+     */
+    this._componentsMap = createHashMap({series: []});
+
+    /**
+     * Mapping between filtered series list and raw series list.
+     * key: filtered series indices, value: raw series indices.
+     * @type {Array.<nubmer>}
+     * @private
+     */
+    this._seriesIndices;
+
+    this._seriesIndicesMap;
+
+    mergeTheme(baseOption, this._theme.option);
+
+    // TODO Needs clone when merging to the unexisted property
+    merge(baseOption, globalDefault, false);
+
+    this.mergeOption(baseOption);
+}
+
+/**
+ * @inner
+ * @param {Array.<string>|string} types model types
+ * @return {Object} key: {string} type, value: {Array.<Object>} models
+ */
+function getComponentsByTypes(componentsMap, types) {
+    if (!isArray(types)) {
+        types = types ? [types] : [];
+    }
+
+    var ret = {};
+    each$1(types, function (type) {
+        ret[type] = (componentsMap.get(type) || []).slice();
+    });
+
+    return ret;
+}
+
+/**
+ * @inner
+ */
+function determineSubType(mainType, newCptOption, existComponent) {
+    var subType = newCptOption.type
+        ? newCptOption.type
+        : existComponent
+        ? existComponent.subType
+        // Use determineSubType only when there is no existComponent.
+        : ComponentModel.determineSubType(mainType, newCptOption);
+
+    // tooltip, markline, markpoint may always has no subType
+    return subType;
+}
+
+/**
+ * @inner
+ */
+function createSeriesIndices(ecModel, seriesModels) {
+    ecModel._seriesIndicesMap = createHashMap(
+        ecModel._seriesIndices = map(seriesModels, function (series) {
+            return series.componentIndex;
+        }) || []
+    );
+}
+
+/**
+ * @inner
+ */
+function filterBySubType(components, condition) {
+    // Using hasOwnProperty for restrict. Consider
+    // subType is undefined in user payload.
+    return condition.hasOwnProperty('subType')
+        ? filter(components, function (cpt) {
+            return cpt.subType === condition.subType;
+        })
+        : components;
+}
+
+/**
+ * @inner
+ */
+function assertSeriesInitialized(ecModel) {
+    // Components that use _seriesIndices should depends on series component,
+    // which make sure that their initialization is after series.
+    if (__DEV__) {
+        if (!ecModel._seriesIndices) {
+            throw new Error('Option should contains series.');
+        }
+    }
+}
+
+mixin(GlobalModel, colorPaletteMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var echartsAPIList = [
+    'getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed',
+    'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption',
+    'getViewOfComponentModel', 'getViewOfSeriesModel'
+];
+// And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js
+
+function ExtensionAPI(chartInstance) {
+    each$1(echartsAPIList, function (name) {
+        this[name] = bind(chartInstance[name], chartInstance);
+    }, this);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var coordinateSystemCreators = {};
+
+function CoordinateSystemManager() {
+
+    this._coordinateSystems = [];
+}
+
+CoordinateSystemManager.prototype = {
+
+    constructor: CoordinateSystemManager,
+
+    create: function (ecModel, api) {
+        var coordinateSystems = [];
+        each$1(coordinateSystemCreators, function (creater, type) {
+            var list = creater.create(ecModel, api);
+            coordinateSystems = coordinateSystems.concat(list || []);
+        });
+
+        this._coordinateSystems = coordinateSystems;
+    },
+
+    update: function (ecModel, api) {
+        each$1(this._coordinateSystems, function (coordSys) {
+            coordSys.update && coordSys.update(ecModel, api);
+        });
+    },
+
+    getCoordinateSystems: function () {
+        return this._coordinateSystems.slice();
+    }
+};
+
+CoordinateSystemManager.register = function (type, coordinateSystemCreator) {
+    coordinateSystemCreators[type] = coordinateSystemCreator;
+};
+
+CoordinateSystemManager.get = function (type) {
+    return coordinateSystemCreators[type];
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * ECharts option manager
+ *
+ * @module {echarts/model/OptionManager}
+ */
+
+
+var each$4 = each$1;
+var clone$3 = clone;
+var map$1 = map;
+var merge$1 = merge;
+
+var QUERY_REG = /^(min|max)?(.+)$/;
+
+/**
+ * TERM EXPLANATIONS:
+ *
+ * [option]:
+ *
+ *     An object that contains definitions of components. For example:
+ *     var option = {
+ *         title: {...},
+ *         legend: {...},
+ *         visualMap: {...},
+ *         series: [
+ *             {data: [...]},
+ *             {data: [...]},
+ *             ...
+ *         ]
+ *     };
+ *
+ * [rawOption]:
+ *
+ *     An object input to echarts.setOption. 'rawOption' may be an
+ *     'option', or may be an object contains multi-options. For example:
+ *     var option = {
+ *         baseOption: {
+ *             title: {...},
+ *             legend: {...},
+ *             series: [
+ *                 {data: [...]},
+ *                 {data: [...]},
+ *                 ...
+ *             ]
+ *         },
+ *         timeline: {...},
+ *         options: [
+ *             {title: {...}, series: {data: [...]}},
+ *             {title: {...}, series: {data: [...]}},
+ *             ...
+ *         ],
+ *         media: [
+ *             {
+ *                 query: {maxWidth: 320},
+ *                 option: {series: {x: 20}, visualMap: {show: false}}
+ *             },
+ *             {
+ *                 query: {minWidth: 320, maxWidth: 720},
+ *                 option: {series: {x: 500}, visualMap: {show: true}}
+ *             },
+ *             {
+ *                 option: {series: {x: 1200}, visualMap: {show: true}}
+ *             }
+ *         ]
+ *     };
+ *
+ * @alias module:echarts/model/OptionManager
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function OptionManager(api) {
+
+    /**
+     * @private
+     * @type {module:echarts/ExtensionAPI}
+     */
+    this._api = api;
+
+    /**
+     * @private
+     * @type {Array.<number>}
+     */
+    this._timelineOptions = [];
+
+    /**
+     * @private
+     * @type {Array.<Object>}
+     */
+    this._mediaList = [];
+
+    /**
+     * @private
+     * @type {Object}
+     */
+    this._mediaDefault;
+
+    /**
+     * -1, means default.
+     * empty means no media.
+     * @private
+     * @type {Array.<number>}
+     */
+    this._currentMediaIndices = [];
+
+    /**
+     * @private
+     * @type {Object}
+     */
+    this._optionBackup;
+
+    /**
+     * @private
+     * @type {Object}
+     */
+    this._newBaseOption;
+}
+
+// timeline.notMerge is not supported in ec3. Firstly there is rearly
+// case that notMerge is needed. Secondly supporting 'notMerge' requires
+// rawOption cloned and backuped when timeline changed, which does no
+// good to performance. What's more, that both timeline and setOption
+// method supply 'notMerge' brings complex and some problems.
+// Consider this case:
+// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);
+// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);
+
+OptionManager.prototype = {
+
+    constructor: OptionManager,
+
+    /**
+     * @public
+     * @param {Object} rawOption Raw option.
+     * @param {module:echarts/model/Global} ecModel
+     * @param {Array.<Function>} optionPreprocessorFuncs
+     * @return {Object} Init option
+     */
+    setOption: function (rawOption, optionPreprocessorFuncs) {
+        if (rawOption) {
+            // That set dat primitive is dangerous if user reuse the data when setOption again.
+            each$1(normalizeToArray(rawOption.series), function (series) {
+                series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);
+            });
+        }
+
+        // Caution: some series modify option data, if do not clone,
+        // it should ensure that the repeat modify correctly
+        // (create a new object when modify itself).
+        rawOption = clone$3(rawOption, true);
+
+        // FIXME
+        // 如果 timeline options 或者 media 中设置了某个属性,而baseOption中没有设置,则进行警告。
+
+        var oldOptionBackup = this._optionBackup;
+        var newParsedOption = parseRawOption.call(
+            this, rawOption, optionPreprocessorFuncs, !oldOptionBackup
+        );
+        this._newBaseOption = newParsedOption.baseOption;
+
+        // For setOption at second time (using merge mode);
+        if (oldOptionBackup) {
+            // Only baseOption can be merged.
+            mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption);
+
+            // For simplicity, timeline options and media options do not support merge,
+            // that is, if you `setOption` twice and both has timeline options, the latter
+            // timeline opitons will not be merged to the formers, but just substitude them.
+            if (newParsedOption.timelineOptions.length) {
+                oldOptionBackup.timelineOptions = newParsedOption.timelineOptions;
+            }
+            if (newParsedOption.mediaList.length) {
+                oldOptionBackup.mediaList = newParsedOption.mediaList;
+            }
+            if (newParsedOption.mediaDefault) {
+                oldOptionBackup.mediaDefault = newParsedOption.mediaDefault;
+            }
+        }
+        else {
+            this._optionBackup = newParsedOption;
+        }
+    },
+
+    /**
+     * @param {boolean} isRecreate
+     * @return {Object}
+     */
+    mountOption: function (isRecreate) {
+        var optionBackup = this._optionBackup;
+
+        // TODO
+        // 如果没有reset功能则不clone。
+
+        this._timelineOptions = map$1(optionBackup.timelineOptions, clone$3);
+        this._mediaList = map$1(optionBackup.mediaList, clone$3);
+        this._mediaDefault = clone$3(optionBackup.mediaDefault);
+        this._currentMediaIndices = [];
+
+        return clone$3(isRecreate
+            // this._optionBackup.baseOption, which is created at the first `setOption`
+            // called, and is merged into every new option by inner method `mergeOption`
+            // each time `setOption` called, can be only used in `isRecreate`, because
+            // its reliability is under suspicion. In other cases option merge is
+            // performed by `model.mergeOption`.
+            ? optionBackup.baseOption : this._newBaseOption
+        );
+    },
+
+    /**
+     * @param {module:echarts/model/Global} ecModel
+     * @return {Object}
+     */
+    getTimelineOption: function (ecModel) {
+        var option;
+        var timelineOptions = this._timelineOptions;
+
+        if (timelineOptions.length) {
+            // getTimelineOption can only be called after ecModel inited,
+            // so we can get currentIndex from timelineModel.
+            var timelineModel = ecModel.getComponent('timeline');
+            if (timelineModel) {
+                option = clone$3(
+                    timelineOptions[timelineModel.getCurrentIndex()],
+                    true
+                );
+            }
+        }
+
+        return option;
+    },
+
+    /**
+     * @param {module:echarts/model/Global} ecModel
+     * @return {Array.<Object>}
+     */
+    getMediaOption: function (ecModel) {
+        var ecWidth = this._api.getWidth();
+        var ecHeight = this._api.getHeight();
+        var mediaList = this._mediaList;
+        var mediaDefault = this._mediaDefault;
+        var indices = [];
+        var result = [];
+
+        // No media defined.
+        if (!mediaList.length && !mediaDefault) {
+            return result;
+        }
+
+        // Multi media may be applied, the latter defined media has higher priority.
+        for (var i = 0, len = mediaList.length; i < len; i++) {
+            if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {
+                indices.push(i);
+            }
+        }
+
+        // FIXME
+        // 是否mediaDefault应该强制用户设置,否则可能修改不能回归。
+        if (!indices.length && mediaDefault) {
+            indices = [-1];
+        }
+
+        if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {
+            result = map$1(indices, function (index) {
+                return clone$3(
+                    index === -1 ? mediaDefault.option : mediaList[index].option
+                );
+            });
+        }
+        // Otherwise return nothing.
+
+        this._currentMediaIndices = indices;
+
+        return result;
+    }
+};
+
+function parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {
+    var timelineOptions = [];
+    var mediaList = [];
+    var mediaDefault;
+    var baseOption;
+
+    // Compatible with ec2.
+    var timelineOpt = rawOption.timeline;
+
+    if (rawOption.baseOption) {
+        baseOption = rawOption.baseOption;
+    }
+
+    // For timeline
+    if (timelineOpt || rawOption.options) {
+        baseOption = baseOption || {};
+        timelineOptions = (rawOption.options || []).slice();
+    }
+
+    // For media query
+    if (rawOption.media) {
+        baseOption = baseOption || {};
+        var media = rawOption.media;
+        each$4(media, function (singleMedia) {
+            if (singleMedia && singleMedia.option) {
+                if (singleMedia.query) {
+                    mediaList.push(singleMedia);
+                }
+                else if (!mediaDefault) {
+                    // Use the first media default.
+                    mediaDefault = singleMedia;
+                }
+            }
+        });
+    }
+
+    // For normal option
+    if (!baseOption) {
+        baseOption = rawOption;
+    }
+
+    // Set timelineOpt to baseOption in ec3,
+    // which is convenient for merge option.
+    if (!baseOption.timeline) {
+        baseOption.timeline = timelineOpt;
+    }
+
+    // Preprocess.
+    each$4([baseOption].concat(timelineOptions)
+        .concat(map(mediaList, function (media) {
+            return media.option;
+        })),
+        function (option) {
+            each$4(optionPreprocessorFuncs, function (preProcess) {
+                preProcess(option, isNew);
+            });
+        }
+    );
+
+    return {
+        baseOption: baseOption,
+        timelineOptions: timelineOptions,
+        mediaDefault: mediaDefault,
+        mediaList: mediaList
+    };
+}
+
+/**
+ * @see <http://www.w3.org/TR/css3-mediaqueries/#media1>
+ * Support: width, height, aspectRatio
+ * Can use max or min as prefix.
+ */
+function applyMediaQuery(query, ecWidth, ecHeight) {
+    var realMap = {
+        width: ecWidth,
+        height: ecHeight,
+        aspectratio: ecWidth / ecHeight // lowser case for convenientce.
+    };
+
+    var applicatable = true;
+
+    each$1(query, function (value, attr) {
+        var matched = attr.match(QUERY_REG);
+
+        if (!matched || !matched[1] || !matched[2]) {
+            return;
+        }
+
+        var operator = matched[1];
+        var realAttr = matched[2].toLowerCase();
+
+        if (!compare(realMap[realAttr], value, operator)) {
+            applicatable = false;
+        }
+    });
+
+    return applicatable;
+}
+
+function compare(real, expect, operator) {
+    if (operator === 'min') {
+        return real >= expect;
+    }
+    else if (operator === 'max') {
+        return real <= expect;
+    }
+    else { // Equals
+        return real === expect;
+    }
+}
+
+function indicesEquals(indices1, indices2) {
+    // indices is always order by asc and has only finite number.
+    return indices1.join(',') === indices2.join(',');
+}
+
+/**
+ * Consider case:
+ * `chart.setOption(opt1);`
+ * Then user do some interaction like dataZoom, dataView changing.
+ * `chart.setOption(opt2);`
+ * Then user press 'reset button' in toolbox.
+ *
+ * After doing that all of the interaction effects should be reset, the
+ * chart should be the same as the result of invoke
+ * `chart.setOption(opt1); chart.setOption(opt2);`.
+ *
+ * Although it is not able ensure that
+ * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to
+ * `chart.setOption(merge(opt1, opt2));` exactly,
+ * this might be the only simple way to implement that feature.
+ *
+ * MEMO: We've considered some other approaches:
+ * 1. Each model handle its self restoration but not uniform treatment.
+ *     (Too complex in logic and error-prone)
+ * 2. Use a shadow ecModel. (Performace expensive)
+ */
+function mergeOption(oldOption, newOption) {
+    newOption = newOption || {};
+
+    each$4(newOption, function (newCptOpt, mainType) {
+        if (newCptOpt == null) {
+            return;
+        }
+
+        var oldCptOpt = oldOption[mainType];
+
+        if (!ComponentModel.hasClass(mainType)) {
+            oldOption[mainType] = merge$1(oldCptOpt, newCptOpt, true);
+        }
+        else {
+            newCptOpt = normalizeToArray(newCptOpt);
+            oldCptOpt = normalizeToArray(oldCptOpt);
+
+            var mapResult = mappingToExists(oldCptOpt, newCptOpt);
+
+            oldOption[mainType] = map$1(mapResult, function (item) {
+                return (item.option && item.exist)
+                    ? merge$1(item.exist, item.option, true)
+                    : (item.exist || item.option);
+            });
+        }
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$5 = each$1;
+var isObject$3 = isObject$1;
+
+var POSSIBLE_STYLES = [
+    'areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle',
+    'chordStyle', 'label', 'labelLine'
+];
+
+function compatEC2ItemStyle(opt) {
+    var itemStyleOpt = opt && opt.itemStyle;
+    if (!itemStyleOpt) {
+        return;
+    }
+    for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {
+        var styleName = POSSIBLE_STYLES[i];
+        var normalItemStyleOpt = itemStyleOpt.normal;
+        var emphasisItemStyleOpt = itemStyleOpt.emphasis;
+        if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {
+            opt[styleName] = opt[styleName] || {};
+            if (!opt[styleName].normal) {
+                opt[styleName].normal = normalItemStyleOpt[styleName];
+            }
+            else {
+                merge(opt[styleName].normal, normalItemStyleOpt[styleName]);
+            }
+            normalItemStyleOpt[styleName] = null;
+        }
+        if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {
+            opt[styleName] = opt[styleName] || {};
+            if (!opt[styleName].emphasis) {
+                opt[styleName].emphasis = emphasisItemStyleOpt[styleName];
+            }
+            else {
+                merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);
+            }
+            emphasisItemStyleOpt[styleName] = null;
+        }
+    }
+}
+
+function convertNormalEmphasis(opt, optType, useExtend) {
+    if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {
+        var normalOpt = opt[optType].normal;
+        var emphasisOpt = opt[optType].emphasis;
+
+        if (normalOpt) {
+            // Timeline controlStyle has other properties besides normal and emphasis
+            if (useExtend) {
+                opt[optType].normal = opt[optType].emphasis = null;
+                defaults(opt[optType], normalOpt);
+            }
+            else {
+                opt[optType] = normalOpt;
+            }
+        }
+        if (emphasisOpt) {
+            opt.emphasis = opt.emphasis || {};
+            opt.emphasis[optType] = emphasisOpt;
+        }
+    }
+}
+function removeEC3NormalStatus(opt) {
+    convertNormalEmphasis(opt, 'itemStyle');
+    convertNormalEmphasis(opt, 'lineStyle');
+    convertNormalEmphasis(opt, 'areaStyle');
+    convertNormalEmphasis(opt, 'label');
+    convertNormalEmphasis(opt, 'labelLine');
+    // treemap
+    convertNormalEmphasis(opt, 'upperLabel');
+    // graph
+    convertNormalEmphasis(opt, 'edgeLabel');
+}
+
+function compatTextStyle(opt, propName) {
+    // Check whether is not object (string\null\undefined ...)
+    var labelOptSingle = isObject$3(opt) && opt[propName];
+    var textStyle = isObject$3(labelOptSingle) && labelOptSingle.textStyle;
+    if (textStyle) {
+        for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) {
+            var propName = TEXT_STYLE_OPTIONS[i];
+            if (textStyle.hasOwnProperty(propName)) {
+                labelOptSingle[propName] = textStyle[propName];
+            }
+        }
+    }
+}
+
+function compatEC3CommonStyles(opt) {
+    if (opt) {
+        removeEC3NormalStatus(opt);
+        compatTextStyle(opt, 'label');
+        opt.emphasis && compatTextStyle(opt.emphasis, 'label');
+    }
+}
+
+function processSeries(seriesOpt) {
+    if (!isObject$3(seriesOpt)) {
+        return;
+    }
+
+    compatEC2ItemStyle(seriesOpt);
+    removeEC3NormalStatus(seriesOpt);
+
+    compatTextStyle(seriesOpt, 'label');
+    // treemap
+    compatTextStyle(seriesOpt, 'upperLabel');
+    // graph
+    compatTextStyle(seriesOpt, 'edgeLabel');
+    if (seriesOpt.emphasis) {
+        compatTextStyle(seriesOpt.emphasis, 'label');
+        // treemap
+        compatTextStyle(seriesOpt.emphasis, 'upperLabel');
+        // graph
+        compatTextStyle(seriesOpt.emphasis, 'edgeLabel');
+    }
+
+    var markPoint = seriesOpt.markPoint;
+    if (markPoint) {
+        compatEC2ItemStyle(markPoint);
+        compatEC3CommonStyles(markPoint);
+    }
+
+    var markLine = seriesOpt.markLine;
+    if (markLine) {
+        compatEC2ItemStyle(markLine);
+        compatEC3CommonStyles(markLine);
+    }
+
+    var markArea = seriesOpt.markArea;
+    if (markArea) {
+        compatEC3CommonStyles(markArea);
+    }
+
+    var data = seriesOpt.data;
+
+    // Break with ec3: if `setOption` again, there may be no `type` in option,
+    // then the backward compat based on option type will not be performed.
+
+    if (seriesOpt.type === 'graph') {
+        data = data || seriesOpt.nodes;
+        var edgeData = seriesOpt.links || seriesOpt.edges;
+        if (edgeData && !isTypedArray(edgeData)) {
+            for (var i = 0; i < edgeData.length; i++) {
+                compatEC3CommonStyles(edgeData[i]);
+            }
+        }
+        each$1(seriesOpt.categories, function (opt) {
+            removeEC3NormalStatus(opt);
+        });
+    }
+
+    if (data && !isTypedArray(data)) {
+        for (var i = 0; i < data.length; i++) {
+            compatEC3CommonStyles(data[i]);
+        }
+    }
+
+    // mark point data
+    var markPoint = seriesOpt.markPoint;
+    if (markPoint && markPoint.data) {
+        var mpData = markPoint.data;
+        for (var i = 0; i < mpData.length; i++) {
+            compatEC3CommonStyles(mpData[i]);
+        }
+    }
+    // mark line data
+    var markLine = seriesOpt.markLine;
+    if (markLine && markLine.data) {
+        var mlData = markLine.data;
+        for (var i = 0; i < mlData.length; i++) {
+            if (isArray(mlData[i])) {
+                compatEC3CommonStyles(mlData[i][0]);
+                compatEC3CommonStyles(mlData[i][1]);
+            }
+            else {
+                compatEC3CommonStyles(mlData[i]);
+            }
+        }
+    }
+
+    // Series
+    if (seriesOpt.type === 'gauge') {
+        compatTextStyle(seriesOpt, 'axisLabel');
+        compatTextStyle(seriesOpt, 'title');
+        compatTextStyle(seriesOpt, 'detail');
+    }
+    else if (seriesOpt.type === 'treemap') {
+        convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');
+        each$1(seriesOpt.levels, function (opt) {
+            removeEC3NormalStatus(opt);
+        });
+    }
+    else if (seriesOpt.type === 'tree') {
+        removeEC3NormalStatus(seriesOpt.leaves);
+    }
+    // sunburst starts from ec4, so it does not need to compat levels.
+}
+
+function toArr(o) {
+    return isArray(o) ? o : o ? [o] : [];
+}
+
+function toObj(o) {
+    return (isArray(o) ? o[0] : o) || {};
+}
+
+var compatStyle = function (option, isTheme) {
+    each$5(toArr(option.series), function (seriesOpt) {
+        isObject$3(seriesOpt) && processSeries(seriesOpt);
+    });
+
+    var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];
+    isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');
+
+    each$5(
+        axes,
+        function (axisName) {
+            each$5(toArr(option[axisName]), function (axisOpt) {
+                if (axisOpt) {
+                    compatTextStyle(axisOpt, 'axisLabel');
+                    compatTextStyle(axisOpt.axisPointer, 'label');
+                }
+            });
+        }
+    );
+
+    each$5(toArr(option.parallel), function (parallelOpt) {
+        var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;
+        compatTextStyle(parallelAxisDefault, 'axisLabel');
+        compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');
+    });
+
+    each$5(toArr(option.calendar), function (calendarOpt) {
+        convertNormalEmphasis(calendarOpt, 'itemStyle');
+        compatTextStyle(calendarOpt, 'dayLabel');
+        compatTextStyle(calendarOpt, 'monthLabel');
+        compatTextStyle(calendarOpt, 'yearLabel');
+    });
+
+    // radar.name.textStyle
+    each$5(toArr(option.radar), function (radarOpt) {
+        compatTextStyle(radarOpt, 'name');
+    });
+
+    each$5(toArr(option.geo), function (geoOpt) {
+        if (isObject$3(geoOpt)) {
+            compatEC3CommonStyles(geoOpt);
+            each$5(toArr(geoOpt.regions), function (regionObj) {
+                compatEC3CommonStyles(regionObj);
+            });
+        }
+    });
+
+    each$5(toArr(option.timeline), function (timelineOpt) {
+        compatEC3CommonStyles(timelineOpt);
+        convertNormalEmphasis(timelineOpt, 'label');
+        convertNormalEmphasis(timelineOpt, 'itemStyle');
+        convertNormalEmphasis(timelineOpt, 'controlStyle', true);
+
+        var data = timelineOpt.data;
+        isArray(data) && each$1(data, function (item) {
+            if (isObject$1(item)) {
+                convertNormalEmphasis(item, 'label');
+                convertNormalEmphasis(item, 'itemStyle');
+            }
+        });
+    });
+
+    each$5(toArr(option.toolbox), function (toolboxOpt) {
+        convertNormalEmphasis(toolboxOpt, 'iconStyle');
+        each$5(toolboxOpt.feature, function (featureOpt) {
+            convertNormalEmphasis(featureOpt, 'iconStyle');
+        });
+    });
+
+    compatTextStyle(toObj(option.axisPointer), 'label');
+    compatTextStyle(toObj(option.tooltip).axisPointer, 'label');
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Compatitable with 2.0
+
+function get(opt, path) {
+    path = path.split(',');
+    var obj = opt;
+    for (var i = 0; i < path.length; i++) {
+        obj = obj && obj[path[i]];
+        if (obj == null) {
+            break;
+        }
+    }
+    return obj;
+}
+
+function set$1(opt, path, val, overwrite) {
+    path = path.split(',');
+    var obj = opt;
+    var key;
+    for (var i = 0; i < path.length - 1; i++) {
+        key = path[i];
+        if (obj[key] == null) {
+            obj[key] = {};
+        }
+        obj = obj[key];
+    }
+    if (overwrite || obj[path[i]] == null) {
+        obj[path[i]] = val;
+    }
+}
+
+function compatLayoutProperties(option) {
+    each$1(LAYOUT_PROPERTIES, function (prop) {
+        if (prop[0] in option && !(prop[1] in option)) {
+            option[prop[1]] = option[prop[0]];
+        }
+    });
+}
+
+var LAYOUT_PROPERTIES = [
+    ['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']
+];
+
+var COMPATITABLE_COMPONENTS = [
+    'grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'
+];
+
+var backwardCompat = function (option, isTheme) {
+    compatStyle(option, isTheme);
+
+    // Make sure series array for model initialization.
+    option.series = normalizeToArray(option.series);
+
+    each$1(option.series, function (seriesOpt) {
+        if (!isObject$1(seriesOpt)) {
+            return;
+        }
+
+        var seriesType = seriesOpt.type;
+
+        if (seriesType === 'pie' || seriesType === 'gauge') {
+            if (seriesOpt.clockWise != null) {
+                seriesOpt.clockwise = seriesOpt.clockWise;
+            }
+        }
+        if (seriesType === 'gauge') {
+            var pointerColor = get(seriesOpt, 'pointer.color');
+            pointerColor != null
+                && set$1(seriesOpt, 'itemStyle.normal.color', pointerColor);
+        }
+
+        compatLayoutProperties(seriesOpt);
+    });
+
+    // dataRange has changed to visualMap
+    if (option.dataRange) {
+        option.visualMap = option.dataRange;
+    }
+
+    each$1(COMPATITABLE_COMPONENTS, function (componentName) {
+        var options = option[componentName];
+        if (options) {
+            if (!isArray(options)) {
+                options = [options];
+            }
+            each$1(options, function (option) {
+                compatLayoutProperties(option);
+            });
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// (1) [Caution]: the logic is correct based on the premises:
+//     data processing stage is blocked in stream.
+//     See <module:echarts/stream/Scheduler#performDataProcessorTasks>
+// (2) Only register once when import repeatly.
+//     Should be executed before after series filtered and before stack calculation.
+var dataStack = function (ecModel) {
+    var stackInfoMap = createHashMap();
+    ecModel.eachSeries(function (seriesModel) {
+        var stack = seriesModel.get('stack');
+        // Compatibal: when `stack` is set as '', do not stack.
+        if (stack) {
+            var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);
+            var data = seriesModel.getData();
+
+            var stackInfo = {
+                // Used for calculate axis extent automatically.
+                stackResultDimension: data.getCalculationInfo('stackResultDimension'),
+                stackedOverDimension: data.getCalculationInfo('stackedOverDimension'),
+                stackedDimension: data.getCalculationInfo('stackedDimension'),
+                stackedByDimension: data.getCalculationInfo('stackedByDimension'),
+                isStackedByIndex: data.getCalculationInfo('isStackedByIndex'),
+                data: data,
+                seriesModel: seriesModel
+            };
+
+            // If stacked on axis that do not support data stack.
+            if (!stackInfo.stackedDimension
+                || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)
+            ) {
+                return;
+            }
+
+            stackInfoList.length && data.setCalculationInfo(
+                'stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel
+            );
+
+            stackInfoList.push(stackInfo);
+        }
+    });
+
+    stackInfoMap.each(calculateStack);
+};
+
+function calculateStack(stackInfoList) {
+    each$1(stackInfoList, function (targetStackInfo, idxInStack) {
+        var resultVal = [];
+        var resultNaN = [NaN, NaN];
+        var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];
+        var targetData = targetStackInfo.data;
+        var isStackedByIndex = targetStackInfo.isStackedByIndex;
+
+        // Should not write on raw data, because stack series model list changes
+        // depending on legend selection.
+        var newData = targetData.map(dims, function (v0, v1, dataIndex) {
+            var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex);
+
+            // Consider `connectNulls` of line area, if value is NaN, stackedOver
+            // should also be NaN, to draw a appropriate belt area.
+            if (isNaN(sum)) {
+                return resultNaN;
+            }
+
+            var byValue;
+            var stackedDataRawIndex;
+
+            if (isStackedByIndex) {
+                stackedDataRawIndex = targetData.getRawIndex(dataIndex);
+            }
+            else {
+                byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);
+            }
+
+            // If stackOver is NaN, chart view will render point on value start.
+            var stackedOver = NaN;
+
+            for (var j = idxInStack - 1; j >= 0; j--) {
+                var stackInfo = stackInfoList[j];
+
+                // Has been optimized by inverted indices on `stackedByDimension`.
+                if (!isStackedByIndex) {
+                    stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);
+                }
+
+                if (stackedDataRawIndex >= 0) {
+                    var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex);
+
+                    // Considering positive stack, negative stack and empty data
+                    if ((sum >= 0 && val > 0) // Positive stack
+                        || (sum <= 0 && val < 0) // Negative stack
+                    ) {
+                        sum += val;
+                        stackedOver = val;
+                        break;
+                    }
+                }
+            }
+
+            resultVal[0] = sum;
+            resultVal[1] = stackedOver;
+
+            return resultVal;
+        });
+
+        targetData.hostModel.setData(newData);
+        // Update for consequent calculation
+        targetStackInfo.data = newData;
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO
+// ??? refactor? check the outer usage of data provider.
+// merge with defaultDimValueGetter?
+
+/**
+ * If normal array used, mutable chunk size is supported.
+ * If typed array used, chunk size must be fixed.
+ */
+function DefaultDataProvider(source, dimSize) {
+    if (!Source.isInstance(source)) {
+        source = Source.seriesDataToSource(source);
+    }
+    this._source = source;
+
+    var data = this._data = source.data;
+    var sourceFormat = source.sourceFormat;
+
+    // Typed array. TODO IE10+?
+    if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {
+        if (__DEV__) {
+            if (dimSize == null) {
+                throw new Error('Typed array data must specify dimension size');
+            }
+        }
+        this._offset = 0;
+        this._dimSize = dimSize;
+        this._data = data;
+    }
+
+    var methods = providerMethods[
+        sourceFormat === SOURCE_FORMAT_ARRAY_ROWS
+        ? sourceFormat + '_' + source.seriesLayoutBy
+        : sourceFormat
+    ];
+
+    if (__DEV__) {
+        assert$1(methods, 'Invalide sourceFormat: ' + sourceFormat);
+    }
+
+    extend(this, methods);
+}
+
+var providerProto = DefaultDataProvider.prototype;
+// If data is pure without style configuration
+providerProto.pure = false;
+// If data is persistent and will not be released after use.
+providerProto.persistent = true;
+
+// ???! FIXME legacy data provider do not has method getSource
+providerProto.getSource = function () {
+    return this._source;
+};
+
+var providerMethods = {
+
+    'arrayRows_column': {
+        pure: true,
+        count: function () {
+            return Math.max(0, this._data.length - this._source.startIndex);
+        },
+        getItem: function (idx) {
+            return this._data[idx + this._source.startIndex];
+        },
+        appendData: appendDataSimply
+    },
+
+    'arrayRows_row': {
+        pure: true,
+        count: function () {
+            var row = this._data[0];
+            return row ? Math.max(0, row.length - this._source.startIndex) : 0;
+        },
+        getItem: function (idx) {
+            idx += this._source.startIndex;
+            var item = [];
+            var data = this._data;
+            for (var i = 0; i < data.length; i++) {
+                var row = data[i];
+                item.push(row ? row[idx] : null);
+            }
+            return item;
+        },
+        appendData: function () {
+            throw new Error('Do not support appendData when set seriesLayoutBy: "row".');
+        }
+    },
+
+    'objectRows': {
+        pure: true,
+        count: countSimply,
+        getItem: getItemSimply,
+        appendData: appendDataSimply
+    },
+
+    'keyedColumns': {
+        pure: true,
+        count: function () {
+            var dimName = this._source.dimensionsDefine[0].name;
+            var col = this._data[dimName];
+            return col ? col.length : 0;
+        },
+        getItem: function (idx) {
+            var item = [];
+            var dims = this._source.dimensionsDefine;
+            for (var i = 0; i < dims.length; i++) {
+                var col = this._data[dims[i].name];
+                item.push(col ? col[idx] : null);
+            }
+            return item;
+        },
+        appendData: function (newData) {
+            var data = this._data;
+            each$1(newData, function (newCol, key) {
+                var oldCol = data[key] || (data[key] = []);
+                for (var i = 0; i < (newCol || []).length; i++) {
+                    oldCol.push(newCol[i]);
+                }
+            });
+        }
+    },
+
+    'original': {
+        count: countSimply,
+        getItem: getItemSimply,
+        appendData: appendDataSimply
+    },
+
+    'typedArray': {
+        persistent: false,
+        pure: true,
+        count: function () {
+            return this._data ? (this._data.length / this._dimSize) : 0;
+        },
+        getItem: function (idx, out) {
+            idx = idx - this._offset;
+            out = out || [];
+            var offset = this._dimSize * idx;
+            for (var i = 0; i < this._dimSize; i++) {
+                out[i] = this._data[offset + i];
+            }
+            return out;
+        },
+        appendData: function (newData) {
+            if (__DEV__) {
+                assert$1(
+                    isTypedArray(newData),
+                    'Added data must be TypedArray if data in initialization is TypedArray'
+                );
+            }
+
+            this._data = newData;
+        },
+
+        // Clean self if data is already used.
+        clean: function () {
+            // PENDING
+            this._offset += this.count();
+            this._data = null;
+        }
+    }
+};
+
+function countSimply() {
+    return this._data.length;
+}
+function getItemSimply(idx) {
+    return this._data[idx];
+}
+function appendDataSimply(newData) {
+    for (var i = 0; i < newData.length; i++) {
+        this._data.push(newData[i]);
+    }
+}
+
+
+
+var rawValueGetters = {
+
+    arrayRows: getRawValueSimply,
+
+    objectRows: function (dataItem, dataIndex, dimIndex, dimName) {
+        return dimIndex != null ? dataItem[dimName] : dataItem;
+    },
+
+    keyedColumns: getRawValueSimply,
+
+    original: function (dataItem, dataIndex, dimIndex, dimName) {
+        // FIXME
+        // In some case (markpoint in geo (geo-map.html)), dataItem
+        // is {coord: [...]}
+        var value = getDataItemValue(dataItem);
+        return (dimIndex == null || !(value instanceof Array))
+            ? value
+            : value[dimIndex];
+    },
+
+    typedArray: getRawValueSimply
+};
+
+function getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) {
+    return dimIndex != null ? dataItem[dimIndex] : dataItem;
+}
+
+
+var defaultDimValueGetters = {
+
+    arrayRows: getDimValueSimply,
+
+    objectRows: function (dataItem, dimName, dataIndex, dimIndex) {
+        return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]);
+    },
+
+    keyedColumns: getDimValueSimply,
+
+    original: function (dataItem, dimName, dataIndex, dimIndex) {
+        // Performance sensitive, do not use modelUtil.getDataItemValue.
+        // If dataItem is an plain object with no value field, the var `value`
+        // will be assigned with the object, but it will be tread correctly
+        // in the `convertDataValue`.
+        var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);
+
+        // If any dataItem is like { value: 10 }
+        if (!this._rawData.pure && isDataItemOption(dataItem)) {
+            this.hasItemOption = true;
+        }
+        return converDataValue(
+            (value instanceof Array)
+                ? value[dimIndex]
+                // If value is a single number or something else not array.
+                : value,
+            this._dimensionInfos[dimName]
+        );
+    },
+
+    typedArray: function (dataItem, dimName, dataIndex, dimIndex) {
+        return dataItem[dimIndex];
+    }
+
+};
+
+function getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) {
+    return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]);
+}
+
+/**
+ * This helper method convert value in data.
+ * @param {string|number|Date} value
+ * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'.
+ *        If "dimInfo.ordinalParseAndSave", ordinal value can be parsed.
+ */
+function converDataValue(value, dimInfo) {
+    // Performance sensitive.
+    var dimType = dimInfo && dimInfo.type;
+    if (dimType === 'ordinal') {
+        // If given value is a category string
+        var ordinalMeta = dimInfo && dimInfo.ordinalMeta;
+        return ordinalMeta
+            ? ordinalMeta.parseAndCollect(value)
+            : value;
+    }
+
+    if (dimType === 'time'
+        // spead up when using timestamp
+        && typeof value !== 'number'
+        && value != null
+        && value !== '-'
+    ) {
+        value = +parseDate(value);
+    }
+
+    // dimType defaults 'number'.
+    // If dimType is not ordinal and value is null or undefined or NaN or '-',
+    // parse to NaN.
+    return (value == null || value === '')
+        ? NaN
+        // If string (like '-'), using '+' parse to NaN
+        // If object, also parse to NaN
+        : +value;
+}
+
+// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,
+// Consider persistent.
+// Caution: why use raw value to display on label or tooltip?
+// A reason is to avoid format. For example time value we do not know
+// how to format is expected. More over, if stack is used, calculated
+// value may be 0.91000000001, which have brings trouble to display.
+// TODO: consider how to treat null/undefined/NaN when display?
+/**
+ * @param {module:echarts/data/List} data
+ * @param {number} dataIndex
+ * @param {string|number} [dim] dimName or dimIndex
+ * @return {Array.<number>|string|number} can be null/undefined.
+ */
+function retrieveRawValue(data, dataIndex, dim) {
+    if (!data) {
+        return;
+    }
+
+    // Consider data may be not persistent.
+    var dataItem = data.getRawDataItem(dataIndex);
+
+    if (dataItem == null) {
+        return;
+    }
+
+    var sourceFormat = data.getProvider().getSource().sourceFormat;
+    var dimName;
+    var dimIndex;
+
+    var dimInfo = data.getDimensionInfo(dim);
+    if (dimInfo) {
+        dimName = dimInfo.name;
+        dimIndex = dimInfo.index;
+    }
+
+    return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName);
+}
+
+/**
+ * Compatible with some cases (in pie, map) like:
+ * data: [{name: 'xx', value: 5, selected: true}, ...]
+ * where only sourceFormat is 'original' and 'objectRows' supported.
+ *
+ * ??? TODO
+ * Supported detail options in data item when using 'arrayRows'.
+ *
+ * @param {module:echarts/data/List} data
+ * @param {number} dataIndex
+ * @param {string} attr like 'selected'
+ */
+function retrieveRawAttr(data, dataIndex, attr) {
+    if (!data) {
+        return;
+    }
+
+    var sourceFormat = data.getProvider().getSource().sourceFormat;
+
+    if (sourceFormat !== SOURCE_FORMAT_ORIGINAL
+        && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS
+    ) {
+        return;
+    }
+
+    var dataItem = data.getRawDataItem(dataIndex);
+    if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject$1(dataItem)) {
+        dataItem = null;
+    }
+    if (dataItem) {
+        return dataItem[attr];
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var DIMENSION_LABEL_REG = /\{@(.+?)\}/g;
+
+// PENDING A little ugly
+var dataFormatMixin = {
+    /**
+     * Get params for formatter
+     * @param {number} dataIndex
+     * @param {string} [dataType]
+     * @return {Object}
+     */
+    getDataParams: function (dataIndex, dataType) {
+        var data = this.getData(dataType);
+        var rawValue = this.getRawValue(dataIndex, dataType);
+        var rawDataIndex = data.getRawIndex(dataIndex);
+        var name = data.getName(dataIndex);
+        var itemOpt = data.getRawDataItem(dataIndex);
+        var color = data.getItemVisual(dataIndex, 'color');
+
+        return {
+            componentType: this.mainType,
+            componentSubType: this.subType,
+            seriesType: this.mainType === 'series' ? this.subType : null,
+            seriesIndex: this.seriesIndex,
+            seriesId: this.id,
+            seriesName: this.name,
+            name: name,
+            dataIndex: rawDataIndex,
+            data: itemOpt,
+            dataType: dataType,
+            value: rawValue,
+            color: color,
+            marker: getTooltipMarker(color),
+
+            // Param name list for mapping `a`, `b`, `c`, `d`, `e`
+            $vars: ['seriesName', 'name', 'value']
+        };
+    },
+
+    /**
+     * Format label
+     * @param {number} dataIndex
+     * @param {string} [status='normal'] 'normal' or 'emphasis'
+     * @param {string} [dataType]
+     * @param {number} [dimIndex]
+     * @param {string} [labelProp='label']
+     * @return {string} If not formatter, return null/undefined
+     */
+    getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {
+        status = status || 'normal';
+        var data = this.getData(dataType);
+        var itemModel = data.getItemModel(dataIndex);
+
+        var params = this.getDataParams(dataIndex, dataType);
+        if (dimIndex != null && (params.value instanceof Array)) {
+            params.value = params.value[dimIndex];
+        }
+
+        var formatter = itemModel.get(
+            status === 'normal'
+            ? [labelProp || 'label', 'formatter']
+            : [status, labelProp || 'label', 'formatter']
+        );
+
+        if (typeof formatter === 'function') {
+            params.status = status;
+            return formatter(params);
+        }
+        else if (typeof formatter === 'string') {
+            var str = formatTpl(formatter, params);
+
+            // Support 'aaa{@[3]}bbb{@product}ccc'.
+            // Do not support '}' in dim name util have to.
+            return str.replace(DIMENSION_LABEL_REG, function (origin, dim) {
+                var len = dim.length;
+                if (dim.charAt(0) === '[' && dim.charAt(len - 1) === ']') {
+                    dim = +dim.slice(1, len - 1); // Also: '[]' => 0
+                }
+                return retrieveRawValue(data, dataIndex, dim);
+            });
+        }
+    },
+
+    /**
+     * Get raw value in option
+     * @param {number} idx
+     * @param {string} [dataType]
+     * @return {Array|number|string}
+     */
+    getRawValue: function (idx, dataType) {
+        return retrieveRawValue(this.getData(dataType), idx);
+    },
+
+    /**
+     * Should be implemented.
+     * @param {number} dataIndex
+     * @param {boolean} [multipleSeries=false]
+     * @param {number} [dataType]
+     * @return {string} tooltip string
+     */
+    formatTooltip: function () {
+        // Empty function
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {Object} define
+ * @return See the return of `createTask`.
+ */
+function createTask(define) {
+    return new Task(define);
+}
+
+/**
+ * @constructor
+ * @param {Object} define
+ * @param {Function} define.reset Custom reset
+ * @param {Function} [define.plan] Returns 'reset' indicate reset immediately.
+ * @param {Function} [define.count] count is used to determin data task.
+ * @param {Function} [define.onDirty] count is used to determin data task.
+ */
+function Task(define) {
+    define = define || {};
+
+    this._reset = define.reset;
+    this._plan = define.plan;
+    this._count = define.count;
+    this._onDirty = define.onDirty;
+
+    this._dirty = true;
+
+    // Context must be specified implicitly, to
+    // avoid miss update context when model changed.
+    this.context;
+}
+
+var taskProto = Task.prototype;
+
+/**
+ * @param {Object} performArgs
+ * @param {number} [performArgs.step] Specified step.
+ * @param {number} [performArgs.skip] Skip customer perform call.
+ * @param {number} [performArgs.modBy] Sampling window size.
+ * @param {number} [performArgs.modDataCount] Sampling count.
+ */
+taskProto.perform = function (performArgs) {
+    var upTask = this._upstream;
+    var skip = performArgs && performArgs.skip;
+
+    // TODO some refactor.
+    // Pull data. Must pull data each time, because context.data
+    // may be updated by Series.setData.
+    if (this._dirty && upTask) {
+        var context = this.context;
+        context.data = context.outputData = upTask.context.outputData;
+    }
+
+    if (this.__pipeline) {
+        this.__pipeline.currentTask = this;
+    }
+
+    var planResult;
+    if (this._plan && !skip) {
+        planResult = this._plan(this.context);
+    }
+
+    // Support sharding by mod, which changes the render sequence and makes the rendered graphic
+    // elements uniformed distributed when progress, especially when moving or zooming.
+    var lastModBy = normalizeModBy(this._modBy);
+    var lastModDataCount = this._modDataCount || 0;
+    var modBy = normalizeModBy(performArgs && performArgs.modBy);
+    var modDataCount = performArgs && performArgs.modDataCount || 0;
+    if (lastModBy !== modBy || lastModDataCount !== modDataCount) {
+        planResult = 'reset';
+    }
+
+    function normalizeModBy(val) {
+        !(val >= 1) && (val = 1); // jshint ignore:line
+        return val;
+    }
+
+    var forceFirstProgress;
+    if (this._dirty || planResult === 'reset') {
+        this._dirty = false;
+        forceFirstProgress = reset(this, skip);
+    }
+
+    this._modBy = modBy;
+    this._modDataCount = modDataCount;
+
+    var step = performArgs && performArgs.step;
+
+    if (upTask) {
+
+        if (__DEV__) {
+            assert$1(upTask._outputDueEnd != null);
+        }
+        this._dueEnd = upTask._outputDueEnd;
+    }
+    // DataTask or overallTask
+    else {
+        if (__DEV__) {
+            assert$1(!this._progress || this._count);
+        }
+        this._dueEnd = this._count ? this._count(this.context) : Infinity;
+    }
+
+    // Note: Stubs, that its host overall task let it has progress, has progress.
+    // If no progress, pass index from upstream to downstream each time plan called.
+    if (this._progress) {
+        var start = this._dueIndex;
+        var end = Math.min(
+            step != null ? this._dueIndex + step : Infinity,
+            this._dueEnd
+        );
+
+        if (!skip && (forceFirstProgress || start < end)) {
+            var progress = this._progress;
+            if (isArray(progress)) {
+                for (var i = 0; i < progress.length; i++) {
+                    doProgress(this, progress[i], start, end, modBy, modDataCount);
+                }
+            }
+            else {
+                doProgress(this, progress, start, end, modBy, modDataCount);
+            }
+        }
+
+        this._dueIndex = end;
+        // If no `outputDueEnd`, assume that output data and
+        // input data is the same, so use `dueIndex` as `outputDueEnd`.
+        var outputDueEnd = this._settedOutputEnd != null
+            ? this._settedOutputEnd : end;
+
+        if (__DEV__) {
+            // ??? Can not rollback.
+            assert$1(outputDueEnd >= this._outputDueEnd);
+        }
+
+        this._outputDueEnd = outputDueEnd;
+    }
+    else {
+        // (1) Some overall task has no progress.
+        // (2) Stubs, that its host overall task do not let it has progress, has no progress.
+        // This should always be performed so it can be passed to downstream.
+        this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null
+            ? this._settedOutputEnd : this._dueEnd;
+    }
+
+    return this.unfinished();
+};
+
+var iterator = (function () {
+
+    var end;
+    var current;
+    var modBy;
+    var modDataCount;
+    var winCount;
+
+    var it = {
+        reset: function (s, e, sStep, sCount) {
+            current = s;
+            end = e;
+
+            modBy = sStep;
+            modDataCount = sCount;
+            winCount = Math.ceil(modDataCount / modBy);
+
+            it.next = (modBy > 1 && modDataCount > 0) ? modNext : sequentialNext;
+        }
+    };
+
+    return it;
+
+    function sequentialNext() {
+        return current < end ? current++ : null;
+    }
+
+    function modNext() {
+        var dataIndex = (current % winCount) * modBy + Math.ceil(current / winCount);
+        var result = current >= end
+            ? null
+            : dataIndex < modDataCount
+            ? dataIndex
+            // If modDataCount is smaller than data.count() (consider `appendData` case),
+            // Use normal linear rendering mode.
+            : current;
+        current++;
+        return result;
+    }
+})();
+
+taskProto.dirty = function () {
+    this._dirty = true;
+    this._onDirty && this._onDirty(this.context);
+};
+
+function doProgress(taskIns, progress, start, end, modBy, modDataCount) {
+    iterator.reset(start, end, modBy, modDataCount);
+    taskIns._callingProgress = progress;
+    taskIns._callingProgress({
+        start: start, end: end, count: end - start, next: iterator.next
+    }, taskIns.context);
+}
+
+function reset(taskIns, skip) {
+    taskIns._dueIndex = taskIns._outputDueEnd = taskIns._dueEnd = 0;
+    taskIns._settedOutputEnd = null;
+
+    var progress;
+    var forceFirstProgress;
+
+    if (!skip && taskIns._reset) {
+        progress = taskIns._reset(taskIns.context);
+        if (progress && progress.progress) {
+            forceFirstProgress = progress.forceFirstProgress;
+            progress = progress.progress;
+        }
+        // To simplify no progress checking, array must has item.
+        if (isArray(progress) && !progress.length) {
+            progress = null;
+        }
+    }
+
+    taskIns._progress = progress;
+    taskIns._modBy = taskIns._modDataCount = null;
+
+    var downstream = taskIns._downstream;
+    downstream && downstream.dirty();
+
+    return forceFirstProgress;
+}
+
+/**
+ * @return {boolean}
+ */
+taskProto.unfinished = function () {
+    return this._progress && this._dueIndex < this._dueEnd;
+};
+
+/**
+ * @param {Object} downTask The downstream task.
+ * @return {Object} The downstream task.
+ */
+taskProto.pipe = function (downTask) {
+    if (__DEV__) {
+        assert$1(downTask && !downTask._disposed && downTask !== this);
+    }
+
+    // If already downstream, do not dirty downTask.
+    if (this._downstream !== downTask || this._dirty) {
+        this._downstream = downTask;
+        downTask._upstream = this;
+        downTask.dirty();
+    }
+};
+
+taskProto.dispose = function () {
+    if (this._disposed) {
+        return;
+    }
+
+    this._upstream && (this._upstream._downstream = null);
+    this._downstream && (this._downstream._upstream = null);
+
+    this._dirty = false;
+    this._disposed = true;
+};
+
+taskProto.getUpstream = function () {
+    return this._upstream;
+};
+
+taskProto.getDownstream = function () {
+    return this._downstream;
+};
+
+taskProto.setOutputEnd = function (end) {
+    // This only happend in dataTask, dataZoom, map, currently.
+    // where dataZoom do not set end each time, but only set
+    // when reset. So we should record the setted end, in case
+    // that the stub of dataZoom perform again and earse the
+    // setted end by upstream.
+    this._outputDueEnd = this._settedOutputEnd = end;
+};
+
+
+///////////////////////////////////////////////////////////
+// For stream debug (Should be commented out after used!)
+// Usage: printTask(this, 'begin');
+// Usage: printTask(this, null, {someExtraProp});
+// function printTask(task, prefix, extra) {
+//     window.ecTaskUID == null && (window.ecTaskUID = 0);
+//     task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`);
+//     task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`);
+//     var props = [];
+//     if (task.__pipeline) {
+//         var val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`;
+//         props.push({text: 'idx', value: val});
+//     } else {
+//         var stubCount = 0;
+//         task.agentStubMap.each(() => stubCount++);
+//         props.push({text: 'idx', value: `overall (stubs: ${stubCount})`});
+//     }
+//     props.push({text: 'uid', value: task.uidDebug});
+//     if (task.__pipeline) {
+//         props.push({text: 'pid', value: task.__pipeline.id});
+//         task.agent && props.push(
+//             {text: 'stubFor', value: task.agent.uidDebug}
+//         );
+//     }
+//     props.push(
+//         {text: 'dirty', value: task._dirty},
+//         {text: 'dueIndex', value: task._dueIndex},
+//         {text: 'dueEnd', value: task._dueEnd},
+//         {text: 'outputDueEnd', value: task._outputDueEnd}
+//     );
+//     if (extra) {
+//         Object.keys(extra).forEach(key => {
+//             props.push({text: key, value: extra[key]});
+//         });
+//     }
+//     var args = ['color: blue'];
+//     var msg = `%c[${prefix || 'T'}] %c` + props.map(item => (
+//         args.push('color: black', 'color: red'),
+//         `${item.text}: %c${item.value}`
+//     )).join('%c, ');
+//     console.log.apply(console, [msg].concat(args));
+//     // console.log(this);
+// }
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$4 = makeInner();
+
+var SeriesModel = ComponentModel.extend({
+
+    type: 'series.__base__',
+
+    /**
+     * @readOnly
+     */
+    seriesIndex: 0,
+
+    // coodinateSystem will be injected in the echarts/CoordinateSystem
+    coordinateSystem: null,
+
+    /**
+     * @type {Object}
+     * @protected
+     */
+    defaultOption: null,
+
+    /**
+     * Data provided for legend
+     * @type {Function}
+     */
+    // PENDING
+    legendDataProvider: null,
+
+    /**
+     * Access path of color for visual
+     */
+    visualColorAccessPath: 'itemStyle.color',
+
+    /**
+     * Support merge layout params.
+     * Only support 'box' now (left/right/top/bottom/width/height).
+     * @type {string|Object} Object can be {ignoreSize: true}
+     * @readOnly
+     */
+    layoutMode: null,
+
+    init: function (option, parentModel, ecModel, extraOpt) {
+
+        /**
+         * @type {number}
+         * @readOnly
+         */
+        this.seriesIndex = this.componentIndex;
+
+        this.dataTask = createTask({
+            count: dataTaskCount,
+            reset: dataTaskReset
+        });
+        this.dataTask.context = {model: this};
+
+        this.mergeDefaultAndTheme(option, ecModel);
+
+        prepareSource(this);
+
+
+        var data = this.getInitialData(option, ecModel);
+        wrapData(data, this);
+        this.dataTask.context.data = data;
+
+        if (__DEV__) {
+            assert$1(data, 'getInitialData returned invalid data.');
+        }
+
+        /**
+         * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph}
+         * @private
+         */
+        inner$4(this).dataBeforeProcessed = data;
+
+        // If we reverse the order (make data firstly, and then make
+        // dataBeforeProcessed by cloneShallow), cloneShallow will
+        // cause data.graph.data !== data when using
+        // module:echarts/data/Graph or module:echarts/data/Tree.
+        // See module:echarts/data/helper/linkList
+
+        // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model
+        // init or merge stage, because the data can be restored. So we do not `restoreData`
+        // and `setData` here, which forbids calling `seriesModel.getData()` in this stage.
+        // Call `seriesModel.getRawData()` instead.
+        // this.restoreData();
+
+        autoSeriesName(this);
+    },
+
+    /**
+     * Util for merge default and theme to option
+     * @param  {Object} option
+     * @param  {module:echarts/model/Global} ecModel
+     */
+    mergeDefaultAndTheme: function (option, ecModel) {
+        var layoutMode = this.layoutMode;
+        var inputPositionParams = layoutMode
+            ? getLayoutParams(option) : {};
+
+        // Backward compat: using subType on theme.
+        // But if name duplicate between series subType
+        // (for example: parallel) add component mainType,
+        // add suffix 'Series'.
+        var themeSubType = this.subType;
+        if (ComponentModel.hasClass(themeSubType)) {
+            themeSubType += 'Series';
+        }
+        merge(
+            option,
+            ecModel.getTheme().get(this.subType)
+        );
+        merge(option, this.getDefaultOption());
+
+        // Default label emphasis `show`
+        defaultEmphasis(option, 'label', ['show']);
+
+        this.fillDataTextStyle(option.data);
+
+        if (layoutMode) {
+            mergeLayoutParam(option, inputPositionParams, layoutMode);
+        }
+    },
+
+    mergeOption: function (newSeriesOption, ecModel) {
+        // this.settingTask.dirty();
+
+        newSeriesOption = merge(this.option, newSeriesOption, true);
+        this.fillDataTextStyle(newSeriesOption.data);
+
+        var layoutMode = this.layoutMode;
+        if (layoutMode) {
+            mergeLayoutParam(this.option, newSeriesOption, layoutMode);
+        }
+
+        prepareSource(this);
+
+        var data = this.getInitialData(newSeriesOption, ecModel);
+        wrapData(data, this);
+        this.dataTask.dirty();
+        this.dataTask.context.data = data;
+
+        inner$4(this).dataBeforeProcessed = data;
+
+        autoSeriesName(this);
+    },
+
+    fillDataTextStyle: function (data) {
+        // Default data label emphasis `show`
+        // FIXME Tree structure data ?
+        // FIXME Performance ?
+        if (data && !isTypedArray(data)) {
+            var props = ['show'];
+            for (var i = 0; i < data.length; i++) {
+                if (data[i] && data[i].label) {
+                    defaultEmphasis(data[i], 'label', props);
+                }
+            }
+        }
+    },
+
+    /**
+     * Init a data structure from data related option in series
+     * Must be overwritten
+     */
+    getInitialData: function () {},
+
+    /**
+     * Append data to list
+     * @param {Object} params
+     * @param {Array|TypedArray} params.data
+     */
+    appendData: function (params) {
+        // FIXME ???
+        // (1) If data from dataset, forbidden append.
+        // (2) support append data of dataset.
+        var data = this.getRawData();
+        data.appendData(params.data);
+    },
+
+    /**
+     * Consider some method like `filter`, `map` need make new data,
+     * We should make sure that `seriesModel.getData()` get correct
+     * data in the stream procedure. So we fetch data from upstream
+     * each time `task.perform` called.
+     * @param {string} [dataType]
+     * @return {module:echarts/data/List}
+     */
+    getData: function (dataType) {
+        var task = getCurrentTask(this);
+        if (task) {
+            var data = task.context.data;
+            return dataType == null ? data : data.getLinkedData(dataType);
+        }
+        else {
+            // When series is not alive (that may happen when click toolbox
+            // restore or setOption with not merge mode), series data may
+            // be still need to judge animation or something when graphic
+            // elements want to know whether fade out.
+            return inner$4(this).data;
+        }
+    },
+
+    /**
+     * @param {module:echarts/data/List} data
+     */
+    setData: function (data) {
+        var task = getCurrentTask(this);
+        if (task) {
+            var context = task.context;
+            // Consider case: filter, data sample.
+            if (context.data !== data && task.modifyOutputEnd) {
+                task.setOutputEnd(data.count());
+            }
+            context.outputData = data;
+            // Caution: setData should update context.data,
+            // Because getData may be called multiply in a
+            // single stage and expect to get the data just
+            // set. (For example, AxisProxy, x y both call
+            // getData and setDate sequentially).
+            // So the context.data should be fetched from
+            // upstream each time when a stage starts to be
+            // performed.
+            if (task !== this.dataTask) {
+                context.data = data;
+            }
+        }
+        inner$4(this).data = data;
+    },
+
+    /**
+     * @see {module:echarts/data/helper/sourceHelper#getSource}
+     * @return {module:echarts/data/Source} source
+     */
+    getSource: function () {
+        return getSource(this);
+    },
+
+    /**
+     * Get data before processed
+     * @return {module:echarts/data/List}
+     */
+    getRawData: function () {
+        return inner$4(this).dataBeforeProcessed;
+    },
+
+    /**
+     * Get base axis if has coordinate system and has axis.
+     * By default use coordSys.getBaseAxis();
+     * Can be overrided for some chart.
+     * @return {type} description
+     */
+    getBaseAxis: function () {
+        var coordSys = this.coordinateSystem;
+        return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();
+    },
+
+    // FIXME
+    /**
+     * Default tooltip formatter
+     *
+     * @param {number} dataIndex
+     * @param {boolean} [multipleSeries=false]
+     * @param {number} [dataType]
+     */
+    formatTooltip: function (dataIndex, multipleSeries, dataType) {
+
+        function formatArrayValue(value) {
+            // ??? TODO refactor these logic.
+            // check: category-no-encode-has-axis-data in dataset.html
+            var vertially = reduce(value, function (vertially, val, idx) {
+                var dimItem = data.getDimensionInfo(idx);
+                return vertially |= dimItem && dimItem.tooltip !== false && dimItem.displayName != null;
+            }, 0);
+
+            var result = [];
+
+            tooltipDims.length
+                ? each$1(tooltipDims, function (dim) {
+                    setEachItem(retrieveRawValue(data, dataIndex, dim), dim);
+                })
+                // By default, all dims is used on tooltip.
+                : each$1(value, setEachItem);
+
+            function setEachItem(val, dim) {
+                var dimInfo = data.getDimensionInfo(dim);
+                // If `dimInfo.tooltip` is not set, show tooltip.
+                if (!dimInfo || dimInfo.otherDims.tooltip === false) {
+                    return;
+                }
+                var dimType = dimInfo.type;
+                var dimHead = getTooltipMarker({color: color, type: 'subItem'});
+                var valStr = (vertially
+                        ? dimHead + encodeHTML(dimInfo.displayName || '-') + ': '
+                        : ''
+                    )
+                    // FIXME should not format time for raw data?
+                    + encodeHTML(dimType === 'ordinal'
+                        ? val + ''
+                        : dimType === 'time'
+                        ? (multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val))
+                        : addCommas(val)
+                    );
+                valStr && result.push(valStr);
+            }
+
+            return (vertially ? '<br/>' : '') + result.join(vertially ? '<br/>' : ', ');
+        }
+
+        function formatSingleValue(val) {
+            return encodeHTML(addCommas(val));
+        }
+
+        var data = this.getData();
+        var tooltipDims = data.mapDimension('defaultedTooltip', true);
+        var tooltipDimLen = tooltipDims.length;
+        var value = this.getRawValue(dataIndex);
+        var isValueArr = isArray(value);
+
+        var color = data.getItemVisual(dataIndex, 'color');
+        if (isObject$1(color) && color.colorStops) {
+            color = (color.colorStops[0] || {}).color;
+        }
+        color = color || 'transparent';
+
+        // Complicated rule for pretty tooltip.
+        var formattedValue = (tooltipDimLen > 1 || (isValueArr && !tooltipDimLen))
+            ? formatArrayValue(value)
+            : tooltipDimLen
+            ? formatSingleValue(retrieveRawValue(data, dataIndex, tooltipDims[0]))
+            : formatSingleValue(isValueArr ? value[0] : value);
+
+        var colorEl = getTooltipMarker(color);
+
+        var name = data.getName(dataIndex);
+
+        var seriesName = this.name;
+        if (!isNameSpecified(this)) {
+            seriesName = '';
+        }
+        seriesName = seriesName
+            ? encodeHTML(seriesName) + (!multipleSeries ? '<br/>' : ': ')
+            : '';
+
+        return !multipleSeries
+            ? seriesName + colorEl
+                + (name
+                    ? encodeHTML(name) + ': ' + formattedValue
+                    : formattedValue
+                )
+            : colorEl + seriesName + formattedValue;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    isAnimationEnabled: function () {
+        if (env$1.node) {
+            return false;
+        }
+
+        var animationEnabled = this.getShallow('animation');
+        if (animationEnabled) {
+            if (this.getData().count() > this.getShallow('animationThreshold')) {
+                animationEnabled = false;
+            }
+        }
+        return animationEnabled;
+    },
+
+    restoreData: function () {
+        this.dataTask.dirty();
+    },
+
+    getColorFromPalette: function (name, scope, requestColorNum) {
+        var ecModel = this.ecModel;
+        // PENDING
+        var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope, requestColorNum);
+        if (!color) {
+            color = ecModel.getColorFromPalette(name, scope, requestColorNum);
+        }
+        return color;
+    },
+
+    /**
+     * Use `data.mapDimension(coordDim, true)` instead.
+     * @deprecated
+     */
+    coordDimToDataDim: function (coordDim) {
+        return this.getRawData().mapDimension(coordDim, true);
+    },
+
+    /**
+     * Get progressive rendering count each step
+     * @return {number}
+     */
+    getProgressive: function () {
+        return this.get('progressive');
+    },
+
+    /**
+     * Get progressive rendering count each step
+     * @return {number}
+     */
+    getProgressiveThreshold: function () {
+        return this.get('progressiveThreshold');
+    },
+
+    /**
+     * Get data indices for show tooltip content. See tooltip.
+     * @abstract
+     * @param {Array.<string>|string} dim
+     * @param {Array.<number>} value
+     * @param {module:echarts/coord/single/SingleAxis} baseAxis
+     * @return {Object} {dataIndices, nestestValue}.
+     */
+    getAxisTooltipData: null,
+
+    /**
+     * See tooltip.
+     * @abstract
+     * @param {number} dataIndex
+     * @return {Array.<number>} Point of tooltip. null/undefined can be returned.
+     */
+    getTooltipPosition: null,
+
+    /**
+     * @see {module:echarts/stream/Scheduler}
+     */
+    pipeTask: null,
+
+    /**
+     * Convinient for override in extended class.
+     * @protected
+     * @type {Function}
+     */
+    preventIncremental: null,
+
+    /**
+     * @public
+     * @readOnly
+     * @type {Object}
+     */
+    pipelineContext: null
+
+});
+
+
+mixin(SeriesModel, dataFormatMixin);
+mixin(SeriesModel, colorPaletteMixin);
+
+/**
+ * MUST be called after `prepareSource` called
+ * Here we need to make auto series, especially for auto legend. But we
+ * do not modify series.name in option to avoid side effects.
+ */
+function autoSeriesName(seriesModel) {
+    // User specified name has higher priority, otherwise it may cause
+    // series can not be queried unexpectedly.
+    var name = seriesModel.name;
+    if (!isNameSpecified(seriesModel)) {
+        seriesModel.name = getSeriesAutoName(seriesModel) || name;
+    }
+}
+
+function getSeriesAutoName(seriesModel) {
+    var data = seriesModel.getRawData();
+    var dataDims = data.mapDimension('seriesName', true);
+    var nameArr = [];
+    each$1(dataDims, function (dataDim) {
+        var dimInfo = data.getDimensionInfo(dataDim);
+        dimInfo.displayName && nameArr.push(dimInfo.displayName);
+    });
+    return nameArr.join(' ');
+}
+
+function dataTaskCount(context) {
+    return context.model.getRawData().count();
+}
+
+function dataTaskReset(context) {
+    var seriesModel = context.model;
+    seriesModel.setData(seriesModel.getRawData().cloneShallow());
+    return dataTaskProgress;
+}
+
+function dataTaskProgress(param, context) {
+    // Avoid repead cloneShallow when data just created in reset.
+    if (param.end > context.outputData.count()) {
+        context.model.getRawData().cloneShallow(context.outputData);
+    }
+}
+
+// TODO refactor
+function wrapData(data, seriesModel) {
+    each$1(data.CHANGABLE_METHODS, function (methodName) {
+        data.wrapMethod(methodName, curry(onDataSelfChange, seriesModel));
+    });
+}
+
+function onDataSelfChange(seriesModel) {
+    var task = getCurrentTask(seriesModel);
+    if (task) {
+        // Consider case: filter, selectRange
+        task.setOutputEnd(this.count());
+    }
+}
+
+function getCurrentTask(seriesModel) {
+    var scheduler = (seriesModel.ecModel || {}).scheduler;
+    var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);
+
+    if (pipeline) {
+        // When pipline finished, the currrentTask keep the last
+        // task (renderTask).
+        var task = pipeline.currentTask;
+        if (task) {
+            var agentStubMap = task.agentStubMap;
+            if (agentStubMap) {
+                task = agentStubMap.get(seriesModel.uid);
+            }
+        }
+        return task;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var Component = function () {
+    /**
+     * @type {module:zrender/container/Group}
+     * @readOnly
+     */
+    this.group = new Group();
+
+    /**
+     * @type {string}
+     * @readOnly
+     */
+    this.uid = getUID('viewComponent');
+};
+
+Component.prototype = {
+
+    constructor: Component,
+
+    init: function (ecModel, api) {},
+
+    render: function (componentModel, ecModel, api, payload) {},
+
+    dispose: function () {}
+
+};
+
+var componentProto = Component.prototype;
+componentProto.updateView
+    = componentProto.updateLayout
+    = componentProto.updateVisual
+    = function (seriesModel, ecModel, api, payload) {
+        // Do nothing;
+    };
+// Enable Component.extend.
+enableClassExtend(Component);
+
+// Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.
+enableClassManagement(Component, {registerWhenExtend: true});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @return {string} If large mode changed, return string 'reset';
+ */
+var createRenderPlanner = function () {
+    var inner = makeInner();
+
+    return function (seriesModel) {
+        var fields = inner(seriesModel);
+        var pipelineContext = seriesModel.pipelineContext;
+
+        var originalLarge = fields.large;
+        var originalProgressive = fields.progressiveRender;
+
+        var large = fields.large = pipelineContext.large;
+        var progressive = fields.progressiveRender = pipelineContext.progressiveRender;
+
+        return !!((originalLarge ^ large) || (originalProgressive ^ progressive)) && 'reset';
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$5 = makeInner();
+var renderPlanner = createRenderPlanner();
+
+function Chart() {
+
+    /**
+     * @type {module:zrender/container/Group}
+     * @readOnly
+     */
+    this.group = new Group();
+
+    /**
+     * @type {string}
+     * @readOnly
+     */
+    this.uid = getUID('viewChart');
+
+    this.renderTask = createTask({
+        plan: renderTaskPlan,
+        reset: renderTaskReset
+    });
+    this.renderTask.context = {view: this};
+}
+
+Chart.prototype = {
+
+    type: 'chart',
+
+    /**
+     * Init the chart.
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    init: function (ecModel, api) {},
+
+    /**
+     * Render the chart.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     */
+    render: function (seriesModel, ecModel, api, payload) {},
+
+    /**
+     * Highlight series or specified data item.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     */
+    highlight: function (seriesModel, ecModel, api, payload) {
+        toggleHighlight(seriesModel.getData(), payload, 'emphasis');
+    },
+
+    /**
+     * Downplay series or specified data item.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     */
+    downplay: function (seriesModel, ecModel, api, payload) {
+        toggleHighlight(seriesModel.getData(), payload, 'normal');
+    },
+
+    /**
+     * Remove self.
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    remove: function (ecModel, api) {
+        this.group.removeAll();
+    },
+
+    /**
+     * Dispose self.
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    dispose: function () {},
+
+    /**
+     * Rendering preparation in progressive mode.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     */
+    incrementalPrepareRender: null,
+
+    /**
+     * Render in progressive mode.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     */
+    incrementalRender: null,
+
+    /**
+     * Update transform directly.
+     * @param  {module:echarts/model/Series} seriesModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @param  {Object} payload
+     * @return {Object} {update: true}
+     */
+    updateTransform: null
+
+    /**
+     * The view contains the given point.
+     * @interface
+     * @param {Array.<number>} point
+     * @return {boolean}
+     */
+    // containPoint: function () {}
+
+};
+
+var chartProto = Chart.prototype;
+chartProto.updateView
+    = chartProto.updateLayout
+    = chartProto.updateVisual
+    = function (seriesModel, ecModel, api, payload) {
+        this.render(seriesModel, ecModel, api, payload);
+    };
+
+/**
+ * Set state of single element
+ * @param  {module:zrender/Element} el
+ * @param  {string} state
+ */
+function elSetState(el, state) {
+    if (el) {
+        el.trigger(state);
+        if (el.type === 'group') {
+            for (var i = 0; i < el.childCount(); i++) {
+                elSetState(el.childAt(i), state);
+            }
+        }
+    }
+}
+/**
+ * @param  {module:echarts/data/List} data
+ * @param  {Object} payload
+ * @param  {string} state 'normal'|'emphasis'
+ */
+function toggleHighlight(data, payload, state) {
+    var dataIndex = queryDataIndex(data, payload);
+
+    if (dataIndex != null) {
+        each$1(normalizeToArray(dataIndex), function (dataIdx) {
+            elSetState(data.getItemGraphicEl(dataIdx), state);
+        });
+    }
+    else {
+        data.eachItemGraphicEl(function (el) {
+            elSetState(el, state);
+        });
+    }
+}
+
+// Enable Chart.extend.
+enableClassExtend(Chart, ['dispose']);
+
+// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.
+enableClassManagement(Chart, {registerWhenExtend: true});
+
+Chart.markUpdateMethod = function (payload, methodName) {
+    inner$5(payload).updateMethod = methodName;
+};
+
+function renderTaskPlan(context) {
+    return renderPlanner(context.model);
+}
+
+function renderTaskReset(context) {
+    var seriesModel = context.model;
+    var ecModel = context.ecModel;
+    var api = context.api;
+    var payload = context.payload;
+    // ???! remove updateView updateVisual
+    var progressiveRender = seriesModel.pipelineContext.progressiveRender;
+    var view = context.view;
+
+    var updateMethod = payload && inner$5(payload).updateMethod;
+    var methodName = progressiveRender
+        ? 'incrementalPrepareRender'
+        : (updateMethod && view[updateMethod])
+        ? updateMethod
+        // `appendData` is also supported when data amount
+        // is less than progressive threshold.
+        : 'render';
+
+    if (methodName !== 'render') {
+        view[methodName](seriesModel, ecModel, api, payload);
+    }
+
+    return progressMethodMap[methodName];
+}
+
+var progressMethodMap = {
+    incrementalPrepareRender: {
+        progress: function (params, context) {
+            context.view.incrementalRender(
+                params, context.model, context.ecModel, context.api, context.payload
+            );
+        }
+    },
+    render: {
+        // Put view.render in `progress` to support appendData. But in this case
+        // view.render should not be called in reset, otherwise it will be called
+        // twise. Use `forceFirstProgress` to make sure that view.render is called
+        // in any cases.
+        forceFirstProgress: true,
+        progress: function (params, context) {
+            context.view.render(
+                context.model, context.ecModel, context.api, context.payload
+            );
+        }
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var ORIGIN_METHOD = '\0__throttleOriginMethod';
+var RATE = '\0__throttleRate';
+var THROTTLE_TYPE = '\0__throttleType';
+
+/**
+ * @public
+ * @param {(Function)} fn
+ * @param {number} [delay=0] Unit: ms.
+ * @param {boolean} [debounce=false]
+ *        true: If call interval less than `delay`, only the last call works.
+ *        false: If call interval less than `delay, call works on fixed rate.
+ * @return {(Function)} throttled fn.
+ */
+function throttle(fn, delay, debounce) {
+
+    var currCall;
+    var lastCall = 0;
+    var lastExec = 0;
+    var timer = null;
+    var diff;
+    var scope;
+    var args;
+    var debounceNextCall;
+
+    delay = delay || 0;
+
+    function exec() {
+        lastExec = (new Date()).getTime();
+        timer = null;
+        fn.apply(scope, args || []);
+    }
+
+    var cb = function () {
+        currCall = (new Date()).getTime();
+        scope = this;
+        args = arguments;
+        var thisDelay = debounceNextCall || delay;
+        var thisDebounce = debounceNextCall || debounce;
+        debounceNextCall = null;
+        diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;
+
+        clearTimeout(timer);
+
+        // Here we should make sure that: the `exec` SHOULD NOT be called later
+        // than a new call of `cb`, that is, preserving the command order. Consider
+        // calculating "scale rate" when roaming as an example. When a call of `cb`
+        // happens, either the `exec` is called dierectly, or the call is delayed.
+        // But the delayed call should never be later than next call of `cb`. Under
+        // this assurance, we can simply update view state each time `dispatchAction`
+        // triggered by user roaming, but not need to add extra code to avoid the
+        // state being "rolled-back".
+        if (thisDebounce) {
+            timer = setTimeout(exec, thisDelay);
+        }
+        else {
+            if (diff >= 0) {
+                exec();
+            }
+            else {
+                timer = setTimeout(exec, -diff);
+            }
+        }
+
+        lastCall = currCall;
+    };
+
+    /**
+     * Clear throttle.
+     * @public
+     */
+    cb.clear = function () {
+        if (timer) {
+            clearTimeout(timer);
+            timer = null;
+        }
+    };
+
+    /**
+     * Enable debounce once.
+     */
+    cb.debounceNextCall = function (debounceDelay) {
+        debounceNextCall = debounceDelay;
+    };
+
+    return cb;
+}
+
+/**
+ * Create throttle method or update throttle rate.
+ *
+ * @example
+ * ComponentView.prototype.render = function () {
+ *     ...
+ *     throttle.createOrUpdate(
+ *         this,
+ *         '_dispatchAction',
+ *         this.model.get('throttle'),
+ *         'fixRate'
+ *     );
+ * };
+ * ComponentView.prototype.remove = function () {
+ *     throttle.clear(this, '_dispatchAction');
+ * };
+ * ComponentView.prototype.dispose = function () {
+ *     throttle.clear(this, '_dispatchAction');
+ * };
+ *
+ * @public
+ * @param {Object} obj
+ * @param {string} fnAttr
+ * @param {number} [rate]
+ * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce'
+ * @return {Function} throttled function.
+ */
+function createOrUpdate(obj, fnAttr, rate, throttleType) {
+    var fn = obj[fnAttr];
+
+    if (!fn) {
+        return;
+    }
+
+    var originFn = fn[ORIGIN_METHOD] || fn;
+    var lastThrottleType = fn[THROTTLE_TYPE];
+    var lastRate = fn[RATE];
+
+    if (lastRate !== rate || lastThrottleType !== throttleType) {
+        if (rate == null || !throttleType) {
+            return (obj[fnAttr] = originFn);
+        }
+
+        fn = obj[fnAttr] = throttle(
+            originFn, rate, throttleType === 'debounce'
+        );
+        fn[ORIGIN_METHOD] = originFn;
+        fn[THROTTLE_TYPE] = throttleType;
+        fn[RATE] = rate;
+    }
+
+    return fn;
+}
+
+/**
+ * Clear throttle. Example see throttle.createOrUpdate.
+ *
+ * @public
+ * @param {Object} obj
+ * @param {string} fnAttr
+ */
+function clear(obj, fnAttr) {
+    var fn = obj[fnAttr];
+    if (fn && fn[ORIGIN_METHOD]) {
+        obj[fnAttr] = fn[ORIGIN_METHOD];
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var seriesColor = {
+    createOnAllSeries: true,
+    performRawSeries: true,
+    reset: function (seriesModel, ecModel) {
+        var data = seriesModel.getData();
+        var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.');
+        var color = seriesModel.get(colorAccessPath) // Set in itemStyle
+            || seriesModel.getColorFromPalette(
+                // TODO series count changed.
+                seriesModel.name, null, ecModel.getSeriesCount()
+            );  // Default color
+
+        // FIXME Set color function or use the platte color
+        data.setVisual('color', color);
+
+        // Only visible series has each data be visual encoded
+        if (!ecModel.isSeriesFiltered(seriesModel)) {
+            if (typeof color === 'function' && !(color instanceof Gradient)) {
+                data.each(function (idx) {
+                    data.setItemVisual(
+                        idx, 'color', color(seriesModel.getDataParams(idx))
+                    );
+                });
+            }
+
+            // itemStyle in each data item
+            var dataEach = function (data, idx) {
+                var itemModel = data.getItemModel(idx);
+                var color = itemModel.get(colorAccessPath, true);
+                if (color != null) {
+                    data.setItemVisual(idx, 'color', color);
+                }
+            };
+
+            return { dataEach: data.hasItemOption ? dataEach : null };
+        }
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var lang = {
+    toolbox: {
+        brush: {
+            title: {
+                rect: '矩形选择',
+                polygon: '圈选',
+                lineX: '横向选择',
+                lineY: '纵向选择',
+                keep: '保持选择',
+                clear: '清除选择'
+            }
+        },
+        dataView: {
+            title: '数据视图',
+            lang: ['数据视图', '关闭', '刷新']
+        },
+        dataZoom: {
+            title: {
+                zoom: '区域缩放',
+                back: '区域缩放还原'
+            }
+        },
+        magicType: {
+            title: {
+                line: '切换为折线图',
+                bar: '切换为柱状图',
+                stack: '切换为堆叠',
+                tiled: '切换为平铺'
+            }
+        },
+        restore: {
+            title: '还原'
+        },
+        saveAsImage: {
+            title: '保存为图片',
+            lang: ['右键另存为图片']
+        }
+    },
+    series: {
+        typeNames: {
+            pie: '饼图',
+            bar: '柱状图',
+            line: '折线图',
+            scatter: '散点图',
+            effectScatter: '涟漪散点图',
+            radar: '雷达图',
+            tree: '树图',
+            treemap: '矩形树图',
+            boxplot: '箱型图',
+            candlestick: 'K线图',
+            k: 'K线图',
+            heatmap: '热力图',
+            map: '地图',
+            parallel: '平行坐标图',
+            lines: '线图',
+            graph: '关系图',
+            sankey: '桑基图',
+            funnel: '漏斗图',
+            gauge: '仪表盘图',
+            pictorialBar: '象形柱图',
+            themeRiver: '主题河流图',
+            sunburst: '旭日图'
+        }
+    },
+    aria: {
+        general: {
+            withTitle: '这是一个关于“{title}”的图表。',
+            withoutTitle: '这是一个图表,'
+        },
+        series: {
+            single: {
+                prefix: '',
+                withName: '图表类型是{seriesType},表示{seriesName}。',
+                withoutName: '图表类型是{seriesType}。'
+            },
+            multiple: {
+                prefix: '它由{seriesCount}个图表系列组成。',
+                withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',
+                withoutName: '第{seriesId}个系列是一个{seriesType},',
+                separator: {
+                    middle: ';',
+                    end: '。'
+                }
+            }
+        },
+        data: {
+            allData: '其数据是——',
+            partialData: '其中,前{displayCnt}项是——',
+            withName: '{name}的数据是{value}',
+            withoutName: '{value}',
+            separator: {
+                middle: ',',
+                end: ''
+            }
+        }
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var aria = function (dom, ecModel) {
+    var ariaModel = ecModel.getModel('aria');
+    if (!ariaModel.get('show')) {
+        return;
+    }
+    else if (ariaModel.get('description')) {
+        dom.setAttribute('aria-label', ariaModel.get('description'));
+        return;
+    }
+
+    var seriesCnt = 0;
+    ecModel.eachSeries(function (seriesModel, idx) {
+        ++seriesCnt;
+    }, this);
+
+    var maxDataCnt = ariaModel.get('data.maxCount') || 10;
+    var maxSeriesCnt = ariaModel.get('series.maxCount') || 10;
+    var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);
+
+    var ariaLabel;
+    if (seriesCnt < 1) {
+        // No series, no aria label
+        return;
+    }
+    else {
+        var title = getTitle();
+        if (title) {
+            ariaLabel = replace(getConfig('general.withTitle'), {
+                title: title
+            });
+        }
+        else {
+            ariaLabel = getConfig('general.withoutTitle');
+        }
+
+        var seriesLabels = [];
+        var prefix = seriesCnt > 1
+            ? 'series.multiple.prefix'
+            : 'series.single.prefix';
+        ariaLabel += replace(getConfig(prefix), { seriesCount: seriesCnt });
+
+        ecModel.eachSeries(function (seriesModel, idx) {
+            if (idx < displaySeriesCnt) {
+                var seriesLabel;
+
+                var seriesName = seriesModel.get('name');
+                var seriesTpl = 'series.'
+                    + (seriesCnt > 1 ? 'multiple' : 'single') + '.';
+                seriesLabel = getConfig(seriesName
+                    ? seriesTpl + 'withName'
+                    : seriesTpl + 'withoutName');
+
+                seriesLabel = replace(seriesLabel, {
+                    seriesId: seriesModel.seriesIndex,
+                    seriesName: seriesModel.get('name'),
+                    seriesType: getSeriesTypeName(seriesModel.subType)
+                });
+
+                var data = seriesModel.getData();
+                window.data = data;
+                if (data.count() > maxDataCnt) {
+                    // Show part of data
+                    seriesLabel += replace(getConfig('data.partialData'), {
+                        displayCnt: maxDataCnt
+                    });
+                }
+                else {
+                    seriesLabel += getConfig('data.allData');
+                }
+
+                var dataLabels = [];
+                for (var i = 0; i < data.count(); i++) {
+                    if (i < maxDataCnt) {
+                        var name = data.getName(i);
+                        var value = retrieveRawValue(data, i);
+                        dataLabels.push(
+                            replace(
+                                name
+                                    ? getConfig('data.withName')
+                                    : getConfig('data.withoutName'),
+                                {
+                                    name: name,
+                                    value: value
+                                }
+                            )
+                        );
+                    }
+                }
+                seriesLabel += dataLabels
+                    .join(getConfig('data.separator.middle'))
+                    + getConfig('data.separator.end');
+
+                seriesLabels.push(seriesLabel);
+            }
+        });
+
+        ariaLabel += seriesLabels
+            .join(getConfig('series.multiple.separator.middle'))
+            + getConfig('series.multiple.separator.end');
+
+        dom.setAttribute('aria-label', ariaLabel);
+    }
+
+    function replace(str, keyValues) {
+        if (typeof str !== 'string') {
+            return str;
+        }
+
+        var result = str;
+        each$1(keyValues, function (value, key) {
+            result = result.replace(
+                new RegExp('\\{\\s*' + key + '\\s*\\}', 'g'),
+                value
+            );
+        });
+        return result;
+    }
+
+    function getConfig(path) {
+        var userConfig = ariaModel.get(path);
+        if (userConfig == null) {
+            var pathArr = path.split('.');
+            var result = lang.aria;
+            for (var i = 0; i < pathArr.length; ++i) {
+                result = result[pathArr[i]];
+            }
+            return result;
+        }
+        else {
+            return userConfig;
+        }
+    }
+
+    function getTitle() {
+        var title = ecModel.getModel('title').option;
+        if (title && title.length) {
+            title = title[0];
+        }
+        return title && title.text;
+    }
+
+    function getSeriesTypeName(type) {
+        return lang.series.typeNames[type] || '自定义图';
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PI$1 = Math.PI;
+
+/**
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {Object} [opts]
+ * @param {string} [opts.text]
+ * @param {string} [opts.color]
+ * @param {string} [opts.textColor]
+ * @return {module:zrender/Element}
+ */
+var loadingDefault = function (api, opts) {
+    opts = opts || {};
+    defaults(opts, {
+        text: 'loading',
+        color: '#c23531',
+        textColor: '#000',
+        maskColor: 'rgba(255, 255, 255, 0.8)',
+        zlevel: 0
+    });
+    var mask = new Rect({
+        style: {
+            fill: opts.maskColor
+        },
+        zlevel: opts.zlevel,
+        z: 10000
+    });
+    var arc = new Arc({
+        shape: {
+            startAngle: -PI$1 / 2,
+            endAngle: -PI$1 / 2 + 0.1,
+            r: 10
+        },
+        style: {
+            stroke: opts.color,
+            lineCap: 'round',
+            lineWidth: 5
+        },
+        zlevel: opts.zlevel,
+        z: 10001
+    });
+    var labelRect = new Rect({
+        style: {
+            fill: 'none',
+            text: opts.text,
+            textPosition: 'right',
+            textDistance: 10,
+            textFill: opts.textColor
+        },
+        zlevel: opts.zlevel,
+        z: 10001
+    });
+
+    arc.animateShape(true)
+        .when(1000, {
+            endAngle: PI$1 * 3 / 2
+        })
+        .start('circularInOut');
+    arc.animateShape(true)
+        .when(1000, {
+            startAngle: PI$1 * 3 / 2
+        })
+        .delay(300)
+        .start('circularInOut');
+
+    var group = new Group();
+    group.add(arc);
+    group.add(labelRect);
+    group.add(mask);
+    // Inject resize
+    group.resize = function () {
+        var cx = api.getWidth() / 2;
+        var cy = api.getHeight() / 2;
+        arc.setShape({
+            cx: cx,
+            cy: cy
+        });
+        var r = arc.shape.r;
+        labelRect.setShape({
+            x: cx - r,
+            y: cy - r,
+            width: r * 2,
+            height: r * 2
+        });
+
+        mask.setShape({
+            x: 0,
+            y: 0,
+            width: api.getWidth(),
+            height: api.getHeight()
+        });
+    };
+    group.resize();
+    return group;
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/stream/Scheduler
+ */
+
+/**
+ * @constructor
+ */
+function Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) {
+    this.ecInstance = ecInstance;
+    this.api = api;
+    this.unfinished;
+
+    // Fix current processors in case that in some rear cases that
+    // processors might be registered after echarts instance created.
+    // Register processors incrementally for a echarts instance is
+    // not supported by this stream architecture.
+    var dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice();
+    var visualHandlers = this._visualHandlers = visualHandlers.slice();
+    this._allHandlers = dataProcessorHandlers.concat(visualHandlers);
+
+    /**
+     * @private
+     * @type {
+     *     [handlerUID: string]: {
+     *         seriesTaskMap?: {
+     *             [seriesUID: string]: Task
+     *         },
+     *         overallTask?: Task
+     *     }
+     * }
+     */
+    this._stageTaskMap = createHashMap();
+}
+
+var proto = Scheduler.prototype;
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ * @param {Object} payload
+ */
+proto.restoreData = function (ecModel, payload) {
+    // TODO: Only restroe needed series and components, but not all components.
+    // Currently `restoreData` of all of the series and component will be called.
+    // But some independent components like `title`, `legend`, `graphic`, `toolbox`,
+    // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`,
+    // and some components like coordinate system, axes, dataZoom, visualMap only
+    // need their target series refresh.
+    // (1) If we are implementing this feature some day, we should consider these cases:
+    // if a data processor depends on a component (e.g., dataZoomProcessor depends
+    // on the settings of `dataZoom`), it should be re-performed if the component
+    // is modified by `setOption`.
+    // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`,
+    // it should be re-performed when the result array of `getTargetSeries` changed.
+    // We use `dependencies` to cover these issues.
+    // (3) How to update target series when coordinate system related components modified.
+
+    // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty,
+    // and this case all of the tasks will be set as dirty.
+
+    ecModel.restoreData(payload);
+
+    // Theoretically an overall task not only depends on each of its target series, but also
+    // depends on all of the series.
+    // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks
+    // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure
+    // that the overall task is set as dirty and to be performed, otherwise it probably cause
+    // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it
+    // probably cause state chaos (consider `dataZoomProcessor`).
+    this._stageTaskMap.each(function (taskRecord) {
+        var overallTask = taskRecord.overallTask;
+        overallTask && overallTask.dirty();
+    });
+};
+
+// If seriesModel provided, incremental threshold is check by series data.
+proto.getPerformArgs = function (task, isBlock) {
+    // For overall task
+    if (!task.__pipeline) {
+        return;
+    }
+
+    var pipeline = this._pipelineMap.get(task.__pipeline.id);
+    var pCtx = pipeline.context;
+    var incremental = !isBlock
+        && pipeline.progressiveEnabled
+        && (!pCtx || pCtx.progressiveRender)
+        && task.__idxInPipeline > pipeline.blockIndex;
+
+    var step = incremental ? pipeline.step : null;
+    var modDataCount = pCtx && pCtx.modDataCount;
+    var modBy = modDataCount != null ? Math.ceil(modDataCount / step): null;
+
+    return {step: step, modBy: modBy, modDataCount: modDataCount};
+};
+
+proto.getPipeline = function (pipelineId) {
+    return this._pipelineMap.get(pipelineId);
+};
+
+/**
+ * Current, progressive rendering starts from visual and layout.
+ * Always detect render mode in the same stage, avoiding that incorrect
+ * detection caused by data filtering.
+ * Caution:
+ * `updateStreamModes` use `seriesModel.getData()`.
+ */
+proto.updateStreamModes = function (seriesModel, view) {
+    var pipeline = this._pipelineMap.get(seriesModel.uid);
+    var data = seriesModel.getData();
+    var dataLen = data.count();
+
+    // `progressiveRender` means that can render progressively in each
+    // animation frame. Note that some types of series do not provide
+    // `view.incrementalPrepareRender` but support `chart.appendData`. We
+    // use the term `incremental` but not `progressive` to describe the
+    // case that `chart.appendData`.
+    var progressiveRender = pipeline.progressiveEnabled
+        && view.incrementalPrepareRender
+        && dataLen >= pipeline.threshold;
+
+    var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold');
+
+    // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint.
+    // see `test/candlestick-large3.html`
+    var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null;
+
+    seriesModel.pipelineContext = pipeline.context = {
+        progressiveRender: progressiveRender,
+        modDataCount: modDataCount,
+        large: large
+    };
+};
+
+proto.restorePipelines = function (ecModel) {
+    var scheduler = this;
+    var pipelineMap = scheduler._pipelineMap = createHashMap();
+
+    ecModel.eachSeries(function (seriesModel) {
+        var progressive = seriesModel.getProgressive();
+        var pipelineId = seriesModel.uid;
+
+        pipelineMap.set(pipelineId, {
+            id: pipelineId,
+            head: null,
+            tail: null,
+            threshold: seriesModel.getProgressiveThreshold(),
+            progressiveEnabled: progressive
+                && !(seriesModel.preventIncremental && seriesModel.preventIncremental()),
+            blockIndex: -1,
+            step: Math.round(progressive || 700),
+            count: 0
+        });
+
+        pipe(scheduler, seriesModel, seriesModel.dataTask);
+    });
+};
+
+proto.prepareStageTasks = function () {
+    var stageTaskMap = this._stageTaskMap;
+    var ecModel = this.ecInstance.getModel();
+    var api = this.api;
+
+    each$1(this._allHandlers, function (handler) {
+        var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, []);
+
+        handler.reset && createSeriesStageTask(this, handler, record, ecModel, api);
+        handler.overallReset && createOverallStageTask(this, handler, record, ecModel, api);
+    }, this);
+};
+
+proto.prepareView = function (view, model, ecModel, api) {
+    var renderTask = view.renderTask;
+    var context = renderTask.context;
+
+    context.model = model;
+    context.ecModel = ecModel;
+    context.api = api;
+
+    renderTask.__block = !view.incrementalPrepareRender;
+
+    pipe(this, model, renderTask);
+};
+
+
+proto.performDataProcessorTasks = function (ecModel, payload) {
+    // If we do not use `block` here, it should be considered when to update modes.
+    performStageTasks(this, this._dataProcessorHandlers, ecModel, payload, {block: true});
+};
+
+// opt
+// opt.visualType: 'visual' or 'layout'
+// opt.setDirty
+proto.performVisualTasks = function (ecModel, payload, opt) {
+    performStageTasks(this, this._visualHandlers, ecModel, payload, opt);
+};
+
+function performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) {
+    opt = opt || {};
+    var unfinished;
+
+    each$1(stageHandlers, function (stageHandler, idx) {
+        if (opt.visualType && opt.visualType !== stageHandler.visualType) {
+            return;
+        }
+
+        var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid);
+        var seriesTaskMap = stageHandlerRecord.seriesTaskMap;
+        var overallTask = stageHandlerRecord.overallTask;
+
+        if (overallTask) {
+            var overallNeedDirty;
+            var agentStubMap = overallTask.agentStubMap;
+            agentStubMap.each(function (stub) {
+                if (needSetDirty(opt, stub)) {
+                    stub.dirty();
+                    overallNeedDirty = true;
+                }
+            });
+            overallNeedDirty && overallTask.dirty();
+            updatePayload(overallTask, payload);
+            var performArgs = scheduler.getPerformArgs(overallTask, opt.block);
+            // Execute stubs firstly, which may set the overall task dirty,
+            // then execute the overall task. And stub will call seriesModel.setData,
+            // which ensures that in the overallTask seriesModel.getData() will not
+            // return incorrect data.
+            agentStubMap.each(function (stub) {
+                stub.perform(performArgs);
+            });
+            unfinished |= overallTask.perform(performArgs);
+        }
+        else if (seriesTaskMap) {
+            seriesTaskMap.each(function (task, pipelineId) {
+                if (needSetDirty(opt, task)) {
+                    task.dirty();
+                }
+                var performArgs = scheduler.getPerformArgs(task, opt.block);
+                performArgs.skip = !stageHandler.performRawSeries
+                    && ecModel.isSeriesFiltered(task.context.model);
+                updatePayload(task, payload);
+                unfinished |= task.perform(performArgs);
+            });
+        }
+    });
+
+    function needSetDirty(opt, task) {
+        return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id));
+    }
+
+    scheduler.unfinished |= unfinished;
+}
+
+proto.performSeriesTasks = function (ecModel) {
+    var unfinished;
+
+    ecModel.eachSeries(function (seriesModel) {
+        // Progress to the end for dataInit and dataRestore.
+        unfinished |= seriesModel.dataTask.perform();
+    });
+
+    this.unfinished |= unfinished;
+};
+
+proto.plan = function () {
+    // Travel pipelines, check block.
+    this._pipelineMap.each(function (pipeline) {
+        var task = pipeline.tail;
+        do {
+            if (task.__block) {
+                pipeline.blockIndex = task.__idxInPipeline;
+                break;
+            }
+            task = task.getUpstream();
+        }
+        while (task);
+    });
+};
+
+var updatePayload = proto.updatePayload = function (task, payload) {
+    payload !== 'remain' && (task.context.payload = payload);
+};
+
+function createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {
+    var seriesTaskMap = stageHandlerRecord.seriesTaskMap
+        || (stageHandlerRecord.seriesTaskMap = createHashMap());
+    var seriesType = stageHandler.seriesType;
+    var getTargetSeries = stageHandler.getTargetSeries;
+
+    // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily,
+    // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`,
+    // it works but it may cause other irrelevant charts blocked.
+    if (stageHandler.createOnAllSeries) {
+        ecModel.eachRawSeries(create);
+    }
+    else if (seriesType) {
+        ecModel.eachRawSeriesByType(seriesType, create);
+    }
+    else if (getTargetSeries) {
+        getTargetSeries(ecModel, api).each(create);
+    }
+
+    function create(seriesModel) {
+        var pipelineId = seriesModel.uid;
+
+        // Init tasks for each seriesModel only once.
+        // Reuse original task instance.
+        var task = seriesTaskMap.get(pipelineId)
+            || seriesTaskMap.set(pipelineId, createTask({
+                plan: seriesTaskPlan,
+                reset: seriesTaskReset,
+                count: seriesTaskCount
+            }));
+        task.context = {
+            model: seriesModel,
+            ecModel: ecModel,
+            api: api,
+            useClearVisual: stageHandler.isVisual && !stageHandler.isLayout,
+            plan: stageHandler.plan,
+            reset: stageHandler.reset,
+            scheduler: scheduler
+        };
+        pipe(scheduler, seriesModel, task);
+    }
+
+    // Clear unused series tasks.
+    var pipelineMap = scheduler._pipelineMap;
+    seriesTaskMap.each(function (task, pipelineId) {
+        if (!pipelineMap.get(pipelineId)) {
+            task.dispose();
+            seriesTaskMap.removeKey(pipelineId);
+        }
+    });
+}
+
+function createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {
+    var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask
+        // For overall task, the function only be called on reset stage.
+        || createTask({reset: overallTaskReset});
+
+    overallTask.context = {
+        ecModel: ecModel,
+        api: api,
+        overallReset: stageHandler.overallReset,
+        scheduler: scheduler
+    };
+
+    // Reuse orignal stubs.
+    var agentStubMap = overallTask.agentStubMap = overallTask.agentStubMap || createHashMap();
+
+    var seriesType = stageHandler.seriesType;
+    var getTargetSeries = stageHandler.getTargetSeries;
+    var overallProgress = true;
+    var modifyOutputEnd = stageHandler.modifyOutputEnd;
+
+    // An overall task with seriesType detected or has `getTargetSeries`, we add
+    // stub in each pipelines, it will set the overall task dirty when the pipeline
+    // progress. Moreover, to avoid call the overall task each frame (too frequent),
+    // we set the pipeline block.
+    if (seriesType) {
+        ecModel.eachRawSeriesByType(seriesType, createStub);
+    }
+    else if (getTargetSeries) {
+        getTargetSeries(ecModel, api).each(createStub);
+    }
+    // Otherwise, (usually it is legancy case), the overall task will only be
+    // executed when upstream dirty. Otherwise the progressive rendering of all
+    // pipelines will be disabled unexpectedly. But it still needs stubs to receive
+    // dirty info from upsteam.
+    else {
+        overallProgress = false;
+        each$1(ecModel.getSeries(), createStub);
+    }
+
+    function createStub(seriesModel) {
+        var pipelineId = seriesModel.uid;
+        var stub = agentStubMap.get(pipelineId);
+        if (!stub) {
+            stub = agentStubMap.set(pipelineId, createTask(
+                {reset: stubReset, onDirty: stubOnDirty}
+            ));
+            // When the result of `getTargetSeries` changed, the overallTask
+            // should be set as dirty and re-performed.
+            overallTask.dirty();
+        }
+        stub.context = {
+            model: seriesModel,
+            overallProgress: overallProgress,
+            modifyOutputEnd: modifyOutputEnd
+        };
+        stub.agent = overallTask;
+        stub.__block = overallProgress;
+
+        pipe(scheduler, seriesModel, stub);
+    }
+
+    // Clear unused stubs.
+    var pipelineMap = scheduler._pipelineMap;
+    agentStubMap.each(function (stub, pipelineId) {
+        if (!pipelineMap.get(pipelineId)) {
+            stub.dispose();
+            // When the result of `getTargetSeries` changed, the overallTask
+            // should be set as dirty and re-performed.
+            overallTask.dirty();
+            agentStubMap.removeKey(pipelineId);
+        }
+    });
+}
+
+function overallTaskReset(context) {
+    context.overallReset(
+        context.ecModel, context.api, context.payload
+    );
+}
+
+function stubReset(context, upstreamContext) {
+    return context.overallProgress && stubProgress;
+}
+
+function stubProgress() {
+    this.agent.dirty();
+    this.getDownstream().dirty();
+}
+
+function stubOnDirty() {
+    this.agent && this.agent.dirty();
+}
+
+function seriesTaskPlan(context) {
+    return context.plan && context.plan(
+        context.model, context.ecModel, context.api, context.payload
+    );
+}
+
+function seriesTaskReset(context) {
+    if (context.useClearVisual) {
+        context.data.clearAllVisual();
+    }
+    var resetDefines = context.resetDefines = normalizeToArray(context.reset(
+        context.model, context.ecModel, context.api, context.payload
+    ));
+    return resetDefines.length > 1
+        ? map(resetDefines, function (v, idx) {
+            return makeSeriesTaskProgress(idx);
+        })
+        : singleSeriesTaskProgress;
+}
+
+var singleSeriesTaskProgress = makeSeriesTaskProgress(0);
+
+function makeSeriesTaskProgress(resetDefineIdx) {
+    return function (params, context) {
+        var data = context.data;
+        var resetDefine = context.resetDefines[resetDefineIdx];
+
+        if (resetDefine && resetDefine.dataEach) {
+            for (var i = params.start; i < params.end; i++) {
+                resetDefine.dataEach(data, i);
+            }
+        }
+        else if (resetDefine && resetDefine.progress) {
+            resetDefine.progress(params, data);
+        }
+    };
+}
+
+function seriesTaskCount(context) {
+    return context.data.count();
+}
+
+function pipe(scheduler, seriesModel, task) {
+    var pipelineId = seriesModel.uid;
+    var pipeline = scheduler._pipelineMap.get(pipelineId);
+    !pipeline.head && (pipeline.head = task);
+    pipeline.tail && pipeline.tail.pipe(task);
+    pipeline.tail = task;
+    task.__idxInPipeline = pipeline.count++;
+    task.__pipeline = pipeline;
+}
+
+Scheduler.wrapStageHandler = function (stageHandler, visualType) {
+    if (isFunction$1(stageHandler)) {
+        stageHandler = {
+            overallReset: stageHandler,
+            seriesType: detectSeriseType(stageHandler)
+        };
+    }
+
+    stageHandler.uid = getUID('stageHandler');
+    visualType && (stageHandler.visualType = visualType);
+
+    return stageHandler;
+};
+
+
+
+/**
+ * Only some legacy stage handlers (usually in echarts extensions) are pure function.
+ * To ensure that they can work normally, they should work in block mode, that is,
+ * they should not be started util the previous tasks finished. So they cause the
+ * progressive rendering disabled. We try to detect the series type, to narrow down
+ * the block range to only the series type they concern, but not all series.
+ */
+function detectSeriseType(legacyFunc) {
+    seriesType = null;
+    try {
+        // Assume there is no async when calling `eachSeriesByType`.
+        legacyFunc(ecModelMock, apiMock);
+    }
+    catch (e) {
+    }
+    return seriesType;
+}
+
+var ecModelMock = {};
+var apiMock = {};
+var seriesType;
+
+mockMethods(ecModelMock, GlobalModel);
+mockMethods(apiMock, ExtensionAPI);
+ecModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) {
+    seriesType = type;
+};
+ecModelMock.eachComponent = function (cond) {
+    if (cond.mainType === 'series' && cond.subType) {
+        seriesType = cond.subType;
+    }
+};
+
+function mockMethods(target, Clz) {
+    for (var name in Clz.prototype) {
+        // Do not use hasOwnProperty
+        target[name] = noop;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var colorAll = ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C','#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'];
+
+var lightTheme = {
+
+    color: colorAll,
+
+    colorLayer: [
+        ['#37A2DA', '#ffd85c', '#fd7b5f'],
+        ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'],
+        ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'],
+        colorAll
+    ]
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var contrastColor = '#eee';
+var axisCommon = function () {
+    return {
+        axisLine: {
+            lineStyle: {
+                color: contrastColor
+            }
+        },
+        axisTick: {
+            lineStyle: {
+                color: contrastColor
+            }
+        },
+        axisLabel: {
+            textStyle: {
+                color: contrastColor
+            }
+        },
+        splitLine: {
+            lineStyle: {
+                type: 'dashed',
+                color: '#aaa'
+            }
+        },
+        splitArea: {
+            areaStyle: {
+                color: contrastColor
+            }
+        }
+    };
+};
+
+var colorPalette = ['#dd6b66','#759aa0','#e69d87','#8dc1a9','#ea7e53','#eedd78','#73a373','#73b9bc','#7289ab', '#91ca8c','#f49f42'];
+var theme = {
+    color: colorPalette,
+    backgroundColor: '#333',
+    tooltip: {
+        axisPointer: {
+            lineStyle: {
+                color: contrastColor
+            },
+            crossStyle: {
+                color: contrastColor
+            }
+        }
+    },
+    legend: {
+        textStyle: {
+            color: contrastColor
+        }
+    },
+    textStyle: {
+        color: contrastColor
+    },
+    title: {
+        textStyle: {
+            color: contrastColor
+        }
+    },
+    toolbox: {
+        iconStyle: {
+            normal: {
+                borderColor: contrastColor
+            }
+        }
+    },
+    dataZoom: {
+        textStyle: {
+            color: contrastColor
+        }
+    },
+    visualMap: {
+        textStyle: {
+            color: contrastColor
+        }
+    },
+    timeline: {
+        lineStyle: {
+            color: contrastColor
+        },
+        itemStyle: {
+            normal: {
+                color: colorPalette[1]
+            }
+        },
+        label: {
+            normal: {
+                textStyle: {
+                    color: contrastColor
+                }
+            }
+        },
+        controlStyle: {
+            normal: {
+                color: contrastColor,
+                borderColor: contrastColor
+            }
+        }
+    },
+    timeAxis: axisCommon(),
+    logAxis: axisCommon(),
+    valueAxis: axisCommon(),
+    categoryAxis: axisCommon(),
+
+    line: {
+        symbol: 'circle'
+    },
+    graph: {
+        color: colorPalette
+    },
+    gauge: {
+        title: {
+            textStyle: {
+                color: contrastColor
+            }
+        }
+    },
+    candlestick: {
+        itemStyle: {
+            normal: {
+                color: '#FD1050',
+                color0: '#0CF49B',
+                borderColor: '#FD1050',
+                borderColor0: '#0CF49B'
+            }
+        }
+    }
+};
+theme.categoryAxis.splitLine.show = false;
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * This module is imported by echarts directly.
+ *
+ * Notice:
+ * Always keep this file exists for backward compatibility.
+ * Because before 4.1.0, dataset is an optional component,
+ * some users may import this module manually.
+ */
+
+ComponentModel.extend({
+
+    type: 'dataset',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+
+        // 'row', 'column'
+        seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,
+
+        // null/'auto': auto detect header, see "module:echarts/data/helper/sourceHelper"
+        sourceHeader: null,
+
+        dimensions: null,
+
+        source: null
+    },
+
+    optionUpdated: function () {
+        detectSourceFormat(this);
+    }
+
+});
+
+Component.extend({
+
+    type: 'dataset'
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+var assert = assert$1;
+var each = each$1;
+var isFunction = isFunction$1;
+var isObject = isObject$1;
+var parseClassType = ComponentModel.parseClassType;
+
+var version = '4.1.0';
+
+var dependencies = {
+    zrender: '4.0.4'
+};
+
+var TEST_FRAME_REMAIN_TIME = 1;
+
+var PRIORITY_PROCESSOR_FILTER = 1000;
+var PRIORITY_PROCESSOR_STATISTIC = 5000;
+
+var PRIORITY_VISUAL_LAYOUT = 1000;
+var PRIORITY_VISUAL_GLOBAL = 2000;
+var PRIORITY_VISUAL_CHART = 3000;
+var PRIORITY_VISUAL_COMPONENT = 4000;
+// FIXME
+// necessary?
+var PRIORITY_VISUAL_BRUSH = 5000;
+
+var PRIORITY = {
+    PROCESSOR: {
+        FILTER: PRIORITY_PROCESSOR_FILTER,
+        STATISTIC: PRIORITY_PROCESSOR_STATISTIC
+    },
+    VISUAL: {
+        LAYOUT: PRIORITY_VISUAL_LAYOUT,
+        GLOBAL: PRIORITY_VISUAL_GLOBAL,
+        CHART: PRIORITY_VISUAL_CHART,
+        COMPONENT: PRIORITY_VISUAL_COMPONENT,
+        BRUSH: PRIORITY_VISUAL_BRUSH
+    }
+};
+
+// Main process have three entries: `setOption`, `dispatchAction` and `resize`,
+// where they must not be invoked nestedly, except the only case: invoke
+// dispatchAction with updateMethod "none" in main process.
+// This flag is used to carry out this rule.
+// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).
+var IN_MAIN_PROCESS = '__flagInMainProcess';
+var OPTION_UPDATED = '__optionUpdated';
+var ACTION_REG = /^[a-zA-Z0-9_]+$/;
+
+
+function createRegisterEventWithLowercaseName(method) {
+    return function (eventName, handler, context) {
+        // Event name is all lowercase
+        eventName = eventName && eventName.toLowerCase();
+        Eventful.prototype[method].call(this, eventName, handler, context);
+    };
+}
+
+/**
+ * @module echarts~MessageCenter
+ */
+function MessageCenter() {
+    Eventful.call(this);
+}
+MessageCenter.prototype.on = createRegisterEventWithLowercaseName('on');
+MessageCenter.prototype.off = createRegisterEventWithLowercaseName('off');
+MessageCenter.prototype.one = createRegisterEventWithLowercaseName('one');
+mixin(MessageCenter, Eventful);
+
+/**
+ * @module echarts~ECharts
+ */
+function ECharts(dom, theme$$1, opts) {
+    opts = opts || {};
+
+    // Get theme by name
+    if (typeof theme$$1 === 'string') {
+        theme$$1 = themeStorage[theme$$1];
+    }
+
+    /**
+     * @type {string}
+     */
+    this.id;
+
+    /**
+     * Group id
+     * @type {string}
+     */
+    this.group;
+
+    /**
+     * @type {HTMLElement}
+     * @private
+     */
+    this._dom = dom;
+
+    var defaultRenderer = 'canvas';
+    if (__DEV__) {
+        defaultRenderer = (
+            typeof window === 'undefined' ? global : window
+        ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer;
+    }
+
+    /**
+     * @type {module:zrender/ZRender}
+     * @private
+     */
+    var zr = this._zr = init$1(dom, {
+        renderer: opts.renderer || defaultRenderer,
+        devicePixelRatio: opts.devicePixelRatio,
+        width: opts.width,
+        height: opts.height
+    });
+
+    /**
+     * Expect 60 pfs.
+     * @type {Function}
+     * @private
+     */
+    this._throttledZrFlush = throttle(bind(zr.flush, zr), 17);
+
+    var theme$$1 = clone(theme$$1);
+    theme$$1 && backwardCompat(theme$$1, true);
+    /**
+     * @type {Object}
+     * @private
+     */
+    this._theme = theme$$1;
+
+    /**
+     * @type {Array.<module:echarts/view/Chart>}
+     * @private
+     */
+    this._chartsViews = [];
+
+    /**
+     * @type {Object.<string, module:echarts/view/Chart>}
+     * @private
+     */
+    this._chartsMap = {};
+
+    /**
+     * @type {Array.<module:echarts/view/Component>}
+     * @private
+     */
+    this._componentsViews = [];
+
+    /**
+     * @type {Object.<string, module:echarts/view/Component>}
+     * @private
+     */
+    this._componentsMap = {};
+
+    /**
+     * @type {module:echarts/CoordinateSystem}
+     * @private
+     */
+    this._coordSysMgr = new CoordinateSystemManager();
+
+    /**
+     * @type {module:echarts/ExtensionAPI}
+     * @private
+     */
+    var api = this._api = createExtensionAPI(this);
+
+    // Sort on demand
+    function prioritySortFunc(a, b) {
+        return a.__prio - b.__prio;
+    }
+    sort(visualFuncs, prioritySortFunc);
+    sort(dataProcessorFuncs, prioritySortFunc);
+
+    /**
+     * @type {module:echarts/stream/Scheduler}
+     */
+    this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs);
+
+    Eventful.call(this);
+
+    /**
+     * @type {module:echarts~MessageCenter}
+     * @private
+     */
+    this._messageCenter = new MessageCenter();
+
+    // Init mouse events
+    this._initEvents();
+
+    // In case some people write `window.onresize = chart.resize`
+    this.resize = bind(this.resize, this);
+
+    // Can't dispatch action during rendering procedure
+    this._pendingActions = [];
+
+    zr.animation.on('frame', this._onframe, this);
+
+    bindRenderedEvent(zr, this);
+
+    // ECharts instance can be used as value.
+    setAsPrimitive(this);
+}
+
+var echartsProto = ECharts.prototype;
+
+echartsProto._onframe = function () {
+    if (this._disposed) {
+        return;
+    }
+
+    var scheduler = this._scheduler;
+
+    // Lazy update
+    if (this[OPTION_UPDATED]) {
+        var silent = this[OPTION_UPDATED].silent;
+
+        this[IN_MAIN_PROCESS] = true;
+
+        prepare(this);
+        updateMethods.update.call(this);
+
+        this[IN_MAIN_PROCESS] = false;
+
+        this[OPTION_UPDATED] = false;
+
+        flushPendingActions.call(this, silent);
+
+        triggerUpdatedEvent.call(this, silent);
+    }
+    // Avoid do both lazy update and progress in one frame.
+    else if (scheduler.unfinished) {
+        // Stream progress.
+        var remainTime = TEST_FRAME_REMAIN_TIME;
+        var ecModel = this._model;
+        var api = this._api;
+        scheduler.unfinished = false;
+        do {
+            var startTime = +new Date();
+
+            scheduler.performSeriesTasks(ecModel);
+
+            // Currently dataProcessorFuncs do not check threshold.
+            scheduler.performDataProcessorTasks(ecModel);
+
+            updateStreamModes(this, ecModel);
+
+            // Do not update coordinate system here. Because that coord system update in
+            // each frame is not a good user experience. So we follow the rule that
+            // the extent of the coordinate system is determin in the first frame (the
+            // frame is executed immedietely after task reset.
+            // this._coordSysMgr.update(ecModel, api);
+
+            // console.log('--- ec frame visual ---', remainTime);
+            scheduler.performVisualTasks(ecModel);
+
+            renderSeries(this, this._model, api, 'remain');
+
+            remainTime -= (+new Date() - startTime);
+        }
+        while (remainTime > 0 && scheduler.unfinished);
+
+        // Call flush explicitly for trigger finished event.
+        if (!scheduler.unfinished) {
+            this._zr.flush();
+        }
+        // Else, zr flushing be ensue within the same frame,
+        // because zr flushing is after onframe event.
+    }
+};
+
+/**
+ * @return {HTMLElement}
+ */
+echartsProto.getDom = function () {
+    return this._dom;
+};
+
+/**
+ * @return {module:zrender~ZRender}
+ */
+echartsProto.getZr = function () {
+    return this._zr;
+};
+
+/**
+ * Usage:
+ * chart.setOption(option, notMerge, lazyUpdate);
+ * chart.setOption(option, {
+ *     notMerge: ...,
+ *     lazyUpdate: ...,
+ *     silent: ...
+ * });
+ *
+ * @param {Object} option
+ * @param {Object|boolean} [opts] opts or notMerge.
+ * @param {boolean} [opts.notMerge=false]
+ * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently.
+ */
+echartsProto.setOption = function (option, notMerge, lazyUpdate) {
+    if (__DEV__) {
+        assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.');
+    }
+
+    var silent;
+    if (isObject(notMerge)) {
+        lazyUpdate = notMerge.lazyUpdate;
+        silent = notMerge.silent;
+        notMerge = notMerge.notMerge;
+    }
+
+    this[IN_MAIN_PROCESS] = true;
+
+    if (!this._model || notMerge) {
+        var optionManager = new OptionManager(this._api);
+        var theme$$1 = this._theme;
+        var ecModel = this._model = new GlobalModel(null, null, theme$$1, optionManager);
+        ecModel.scheduler = this._scheduler;
+        ecModel.init(null, null, theme$$1, optionManager);
+    }
+
+    this._model.setOption(option, optionPreprocessorFuncs);
+
+    if (lazyUpdate) {
+        this[OPTION_UPDATED] = {silent: silent};
+        this[IN_MAIN_PROCESS] = false;
+    }
+    else {
+        prepare(this);
+
+        updateMethods.update.call(this);
+
+        // Ensure zr refresh sychronously, and then pixel in canvas can be
+        // fetched after `setOption`.
+        this._zr.flush();
+
+        this[OPTION_UPDATED] = false;
+        this[IN_MAIN_PROCESS] = false;
+
+        flushPendingActions.call(this, silent);
+        triggerUpdatedEvent.call(this, silent);
+    }
+};
+
+/**
+ * @DEPRECATED
+ */
+echartsProto.setTheme = function () {
+    console.log('ECharts#setTheme() is DEPRECATED in ECharts 3.0');
+};
+
+/**
+ * @return {module:echarts/model/Global}
+ */
+echartsProto.getModel = function () {
+    return this._model;
+};
+
+/**
+ * @return {Object}
+ */
+echartsProto.getOption = function () {
+    return this._model && this._model.getOption();
+};
+
+/**
+ * @return {number}
+ */
+echartsProto.getWidth = function () {
+    return this._zr.getWidth();
+};
+
+/**
+ * @return {number}
+ */
+echartsProto.getHeight = function () {
+    return this._zr.getHeight();
+};
+
+/**
+ * @return {number}
+ */
+echartsProto.getDevicePixelRatio = function () {
+    return this._zr.painter.dpr || window.devicePixelRatio || 1;
+};
+
+/**
+ * Get canvas which has all thing rendered
+ * @param {Object} opts
+ * @param {string} [opts.backgroundColor]
+ * @return {string}
+ */
+echartsProto.getRenderedCanvas = function (opts) {
+    if (!env$1.canvasSupported) {
+        return;
+    }
+    opts = opts || {};
+    opts.pixelRatio = opts.pixelRatio || 1;
+    opts.backgroundColor = opts.backgroundColor
+        || this._model.get('backgroundColor');
+    var zr = this._zr;
+    // var list = zr.storage.getDisplayList();
+    // Stop animations
+    // Never works before in init animation, so remove it.
+    // zrUtil.each(list, function (el) {
+    //     el.stopAnimation(true);
+    // });
+    return zr.painter.getRenderedCanvas(opts);
+};
+
+/**
+ * Get svg data url
+ * @return {string}
+ */
+echartsProto.getSvgDataUrl = function () {
+    if (!env$1.svgSupported) {
+        return;
+    }
+
+    var zr = this._zr;
+    var list = zr.storage.getDisplayList();
+    // Stop animations
+    each$1(list, function (el) {
+        el.stopAnimation(true);
+    });
+
+    return zr.painter.pathToDataUrl();
+};
+
+/**
+ * @return {string}
+ * @param {Object} opts
+ * @param {string} [opts.type='png']
+ * @param {string} [opts.pixelRatio=1]
+ * @param {string} [opts.backgroundColor]
+ * @param {string} [opts.excludeComponents]
+ */
+echartsProto.getDataURL = function (opts) {
+    opts = opts || {};
+    var excludeComponents = opts.excludeComponents;
+    var ecModel = this._model;
+    var excludesComponentViews = [];
+    var self = this;
+
+    each(excludeComponents, function (componentType) {
+        ecModel.eachComponent({
+            mainType: componentType
+        }, function (component) {
+            var view = self._componentsMap[component.__viewId];
+            if (!view.group.ignore) {
+                excludesComponentViews.push(view);
+                view.group.ignore = true;
+            }
+        });
+    });
+
+    var url = this._zr.painter.getType() === 'svg'
+        ? this.getSvgDataUrl()
+        : this.getRenderedCanvas(opts).toDataURL(
+            'image/' + (opts && opts.type || 'png')
+        );
+
+    each(excludesComponentViews, function (view) {
+        view.group.ignore = false;
+    });
+
+    return url;
+};
+
+
+/**
+ * @return {string}
+ * @param {Object} opts
+ * @param {string} [opts.type='png']
+ * @param {string} [opts.pixelRatio=1]
+ * @param {string} [opts.backgroundColor]
+ */
+echartsProto.getConnectedDataURL = function (opts) {
+    if (!env$1.canvasSupported) {
+        return;
+    }
+    var groupId = this.group;
+    var mathMin = Math.min;
+    var mathMax = Math.max;
+    var MAX_NUMBER = Infinity;
+    if (connectedGroups[groupId]) {
+        var left = MAX_NUMBER;
+        var top = MAX_NUMBER;
+        var right = -MAX_NUMBER;
+        var bottom = -MAX_NUMBER;
+        var canvasList = [];
+        var dpr = (opts && opts.pixelRatio) || 1;
+
+        each$1(instances, function (chart, id) {
+            if (chart.group === groupId) {
+                var canvas = chart.getRenderedCanvas(
+                    clone(opts)
+                );
+                var boundingRect = chart.getDom().getBoundingClientRect();
+                left = mathMin(boundingRect.left, left);
+                top = mathMin(boundingRect.top, top);
+                right = mathMax(boundingRect.right, right);
+                bottom = mathMax(boundingRect.bottom, bottom);
+                canvasList.push({
+                    dom: canvas,
+                    left: boundingRect.left,
+                    top: boundingRect.top
+                });
+            }
+        });
+
+        left *= dpr;
+        top *= dpr;
+        right *= dpr;
+        bottom *= dpr;
+        var width = right - left;
+        var height = bottom - top;
+        var targetCanvas = createCanvas();
+        targetCanvas.width = width;
+        targetCanvas.height = height;
+        var zr = init$1(targetCanvas);
+
+        each(canvasList, function (item) {
+            var img = new ZImage({
+                style: {
+                    x: item.left * dpr - left,
+                    y: item.top * dpr - top,
+                    image: item.dom
+                }
+            });
+            zr.add(img);
+        });
+        zr.refreshImmediately();
+
+        return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));
+    }
+    else {
+        return this.getDataURL(opts);
+    }
+};
+
+/**
+ * Convert from logical coordinate system to pixel coordinate system.
+ * See CoordinateSystem#convertToPixel.
+ * @param {string|Object} finder
+ *        If string, e.g., 'geo', means {geoIndex: 0}.
+ *        If Object, could contain some of these properties below:
+ *        {
+ *            seriesIndex / seriesId / seriesName,
+ *            geoIndex / geoId, geoName,
+ *            bmapIndex / bmapId / bmapName,
+ *            xAxisIndex / xAxisId / xAxisName,
+ *            yAxisIndex / yAxisId / yAxisName,
+ *            gridIndex / gridId / gridName,
+ *            ... (can be extended)
+ *        }
+ * @param {Array|number} value
+ * @return {Array|number} result
+ */
+echartsProto.convertToPixel = curry(doConvertPixel, 'convertToPixel');
+
+/**
+ * Convert from pixel coordinate system to logical coordinate system.
+ * See CoordinateSystem#convertFromPixel.
+ * @param {string|Object} finder
+ *        If string, e.g., 'geo', means {geoIndex: 0}.
+ *        If Object, could contain some of these properties below:
+ *        {
+ *            seriesIndex / seriesId / seriesName,
+ *            geoIndex / geoId / geoName,
+ *            bmapIndex / bmapId / bmapName,
+ *            xAxisIndex / xAxisId / xAxisName,
+ *            yAxisIndex / yAxisId / yAxisName
+ *            gridIndex / gridId / gridName,
+ *            ... (can be extended)
+ *        }
+ * @param {Array|number} value
+ * @return {Array|number} result
+ */
+echartsProto.convertFromPixel = curry(doConvertPixel, 'convertFromPixel');
+
+function doConvertPixel(methodName, finder, value) {
+    var ecModel = this._model;
+    var coordSysList = this._coordSysMgr.getCoordinateSystems();
+    var result;
+
+    finder = parseFinder(ecModel, finder);
+
+    for (var i = 0; i < coordSysList.length; i++) {
+        var coordSys = coordSysList[i];
+        if (coordSys[methodName]
+            && (result = coordSys[methodName](ecModel, finder, value)) != null
+        ) {
+            return result;
+        }
+    }
+
+    if (__DEV__) {
+        console.warn(
+            'No coordinate system that supports ' + methodName + ' found by the given finder.'
+        );
+    }
+}
+
+/**
+ * Is the specified coordinate systems or components contain the given pixel point.
+ * @param {string|Object} finder
+ *        If string, e.g., 'geo', means {geoIndex: 0}.
+ *        If Object, could contain some of these properties below:
+ *        {
+ *            seriesIndex / seriesId / seriesName,
+ *            geoIndex / geoId / geoName,
+ *            bmapIndex / bmapId / bmapName,
+ *            xAxisIndex / xAxisId / xAxisName,
+ *            yAxisIndex / yAxisId / yAxisName,
+ *            gridIndex / gridId / gridName,
+ *            ... (can be extended)
+ *        }
+ * @param {Array|number} value
+ * @return {boolean} result
+ */
+echartsProto.containPixel = function (finder, value) {
+    var ecModel = this._model;
+    var result;
+
+    finder = parseFinder(ecModel, finder);
+
+    each$1(finder, function (models, key) {
+        key.indexOf('Models') >= 0 && each$1(models, function (model) {
+            var coordSys = model.coordinateSystem;
+            if (coordSys && coordSys.containPoint) {
+                result |= !!coordSys.containPoint(value);
+            }
+            else if (key === 'seriesModels') {
+                var view = this._chartsMap[model.__viewId];
+                if (view && view.containPoint) {
+                    result |= view.containPoint(value, model);
+                }
+                else {
+                    if (__DEV__) {
+                        console.warn(key + ': ' + (view
+                            ? 'The found component do not support containPoint.'
+                            : 'No view mapping to the found component.'
+                        ));
+                    }
+                }
+            }
+            else {
+                if (__DEV__) {
+                    console.warn(key + ': containPoint is not supported');
+                }
+            }
+        }, this);
+    }, this);
+
+    return !!result;
+};
+
+/**
+ * Get visual from series or data.
+ * @param {string|Object} finder
+ *        If string, e.g., 'series', means {seriesIndex: 0}.
+ *        If Object, could contain some of these properties below:
+ *        {
+ *            seriesIndex / seriesId / seriesName,
+ *            dataIndex / dataIndexInside
+ *        }
+ *        If dataIndex is not specified, series visual will be fetched,
+ *        but not data item visual.
+ *        If all of seriesIndex, seriesId, seriesName are not specified,
+ *        visual will be fetched from first series.
+ * @param {string} visualType 'color', 'symbol', 'symbolSize'
+ */
+echartsProto.getVisual = function (finder, visualType) {
+    var ecModel = this._model;
+
+    finder = parseFinder(ecModel, finder, {defaultMainType: 'series'});
+
+    var seriesModel = finder.seriesModel;
+
+    if (__DEV__) {
+        if (!seriesModel) {
+            console.warn('There is no specified seires model');
+        }
+    }
+
+    var data = seriesModel.getData();
+
+    var dataIndexInside = finder.hasOwnProperty('dataIndexInside')
+        ? finder.dataIndexInside
+        : finder.hasOwnProperty('dataIndex')
+        ? data.indexOfRawIndex(finder.dataIndex)
+        : null;
+
+    return dataIndexInside != null
+        ? data.getItemVisual(dataIndexInside, visualType)
+        : data.getVisual(visualType);
+};
+
+/**
+ * Get view of corresponding component model
+ * @param  {module:echarts/model/Component} componentModel
+ * @return {module:echarts/view/Component}
+ */
+echartsProto.getViewOfComponentModel = function (componentModel) {
+    return this._componentsMap[componentModel.__viewId];
+};
+
+/**
+ * Get view of corresponding series model
+ * @param  {module:echarts/model/Series} seriesModel
+ * @return {module:echarts/view/Chart}
+ */
+echartsProto.getViewOfSeriesModel = function (seriesModel) {
+    return this._chartsMap[seriesModel.__viewId];
+};
+
+var updateMethods = {
+
+    prepareAndUpdate: function (payload) {
+        prepare(this);
+        updateMethods.update.call(this, payload);
+    },
+
+    /**
+     * @param {Object} payload
+     * @private
+     */
+    update: function (payload) {
+        // console.profile && console.profile('update');
+
+        var ecModel = this._model;
+        var api = this._api;
+        var zr = this._zr;
+        var coordSysMgr = this._coordSysMgr;
+        var scheduler = this._scheduler;
+
+        // update before setOption
+        if (!ecModel) {
+            return;
+        }
+
+        scheduler.restoreData(ecModel, payload);
+
+        scheduler.performSeriesTasks(ecModel);
+
+        // TODO
+        // Save total ecModel here for undo/redo (after restoring data and before processing data).
+        // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call.
+
+        // Create new coordinate system each update
+        // In LineView may save the old coordinate system and use it to get the orignal point
+        coordSysMgr.create(ecModel, api);
+
+        scheduler.performDataProcessorTasks(ecModel, payload);
+
+        // Current stream render is not supported in data process. So we can update
+        // stream modes after data processing, where the filtered data is used to
+        // deteming whether use progressive rendering.
+        updateStreamModes(this, ecModel);
+
+        // We update stream modes before coordinate system updated, then the modes info
+        // can be fetched when coord sys updating (consider the barGrid extent fix). But
+        // the drawback is the full coord info can not be fetched. Fortunately this full
+        // coord is not requied in stream mode updater currently.
+        coordSysMgr.update(ecModel, api);
+
+        clearColorPalette(ecModel);
+        scheduler.performVisualTasks(ecModel, payload);
+
+        render(this, ecModel, api, payload);
+
+        // Set background
+        var backgroundColor = ecModel.get('backgroundColor') || 'transparent';
+
+        // In IE8
+        if (!env$1.canvasSupported) {
+            var colorArr = parse(backgroundColor);
+            backgroundColor = stringify(colorArr, 'rgb');
+            if (colorArr[3] === 0) {
+                backgroundColor = 'transparent';
+            }
+        }
+        else {
+            zr.setBackgroundColor(backgroundColor);
+        }
+
+        performPostUpdateFuncs(ecModel, api);
+
+        // console.profile && console.profileEnd('update');
+    },
+
+    /**
+     * @param {Object} payload
+     * @private
+     */
+    updateTransform: function (payload) {
+        var ecModel = this._model;
+        var ecIns = this;
+        var api = this._api;
+
+        // update before setOption
+        if (!ecModel) {
+            return;
+        }
+
+        // ChartView.markUpdateMethod(payload, 'updateTransform');
+
+        var componentDirtyList = [];
+        ecModel.eachComponent(function (componentType, componentModel) {
+            var componentView = ecIns.getViewOfComponentModel(componentModel);
+            if (componentView && componentView.__alive) {
+                if (componentView.updateTransform) {
+                    var result = componentView.updateTransform(componentModel, ecModel, api, payload);
+                    result && result.update && componentDirtyList.push(componentView);
+                }
+                else {
+                    componentDirtyList.push(componentView);
+                }
+            }
+        });
+
+        var seriesDirtyMap = createHashMap();
+        ecModel.eachSeries(function (seriesModel) {
+            var chartView = ecIns._chartsMap[seriesModel.__viewId];
+            if (chartView.updateTransform) {
+                var result = chartView.updateTransform(seriesModel, ecModel, api, payload);
+                result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);
+            }
+            else {
+                seriesDirtyMap.set(seriesModel.uid, 1);
+            }
+        });
+
+        clearColorPalette(ecModel);
+        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
+        // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);
+        this._scheduler.performVisualTasks(
+            ecModel, payload, {setDirty: true, dirtyMap: seriesDirtyMap}
+        );
+
+        // Currently, not call render of components. Geo render cost a lot.
+        // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);
+        renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap);
+
+        performPostUpdateFuncs(ecModel, this._api);
+    },
+
+    /**
+     * @param {Object} payload
+     * @private
+     */
+    updateView: function (payload) {
+        var ecModel = this._model;
+
+        // update before setOption
+        if (!ecModel) {
+            return;
+        }
+
+        Chart.markUpdateMethod(payload, 'updateView');
+
+        clearColorPalette(ecModel);
+
+        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
+        this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});
+
+        render(this, this._model, this._api, payload);
+
+        performPostUpdateFuncs(ecModel, this._api);
+    },
+
+    /**
+     * @param {Object} payload
+     * @private
+     */
+    updateVisual: function (payload) {
+        updateMethods.update.call(this, payload);
+
+        // var ecModel = this._model;
+
+        // // update before setOption
+        // if (!ecModel) {
+        //     return;
+        // }
+
+        // ChartView.markUpdateMethod(payload, 'updateVisual');
+
+        // clearColorPalette(ecModel);
+
+        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
+        // this._scheduler.performVisualTasks(ecModel, payload, {visualType: 'visual', setDirty: true});
+
+        // render(this, this._model, this._api, payload);
+
+        // performPostUpdateFuncs(ecModel, this._api);
+    },
+
+    /**
+     * @param {Object} payload
+     * @private
+     */
+    updateLayout: function (payload) {
+        updateMethods.update.call(this, payload);
+
+        // var ecModel = this._model;
+
+        // // update before setOption
+        // if (!ecModel) {
+        //     return;
+        // }
+
+        // ChartView.markUpdateMethod(payload, 'updateLayout');
+
+        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.
+        // // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);
+        // this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});
+
+        // render(this, this._model, this._api, payload);
+
+        // performPostUpdateFuncs(ecModel, this._api);
+    }
+};
+
+function prepare(ecIns) {
+    var ecModel = ecIns._model;
+    var scheduler = ecIns._scheduler;
+
+    scheduler.restorePipelines(ecModel);
+
+    scheduler.prepareStageTasks();
+
+    prepareView(ecIns, 'component', ecModel, scheduler);
+
+    prepareView(ecIns, 'chart', ecModel, scheduler);
+
+    scheduler.plan();
+}
+
+/**
+ * @private
+ */
+function updateDirectly(ecIns, method, payload, mainType, subType) {
+    var ecModel = ecIns._model;
+
+    // broadcast
+    if (!mainType) {
+        // FIXME
+        // Chart will not be update directly here, except set dirty.
+        // But there is no such scenario now.
+        each(ecIns._componentsViews.concat(ecIns._chartsViews), callView);
+        return;
+    }
+
+    var query = {};
+    query[mainType + 'Id'] = payload[mainType + 'Id'];
+    query[mainType + 'Index'] = payload[mainType + 'Index'];
+    query[mainType + 'Name'] = payload[mainType + 'Name'];
+
+    var condition = {mainType: mainType, query: query};
+    subType && (condition.subType = subType); // subType may be '' by parseClassType;
+
+    var excludeSeriesId = payload.excludeSeriesId;
+    if (excludeSeriesId != null) {
+        excludeSeriesId = createHashMap(normalizeToArray(excludeSeriesId));
+    }
+
+    // If dispatchAction before setOption, do nothing.
+    ecModel && ecModel.eachComponent(condition, function (model) {
+        if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) {
+            callView(ecIns[
+                mainType === 'series' ? '_chartsMap' : '_componentsMap'
+            ][model.__viewId]);
+        }
+    }, ecIns);
+
+    function callView(view) {
+        view && view.__alive && view[method] && view[method](
+            view.__model, ecModel, ecIns._api, payload
+        );
+    }
+}
+
+/**
+ * Resize the chart
+ * @param {Object} opts
+ * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)
+ * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)
+ * @param {boolean} [opts.silent=false]
+ */
+echartsProto.resize = function (opts) {
+    if (__DEV__) {
+        assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.');
+    }
+
+    this._zr.resize(opts);
+
+    var ecModel = this._model;
+
+    // Resize loading effect
+    this._loadingFX && this._loadingFX.resize();
+
+    if (!ecModel) {
+        return;
+    }
+
+    var optionChanged = ecModel.resetOption('media');
+
+    var silent = opts && opts.silent;
+
+    this[IN_MAIN_PROCESS] = true;
+
+    optionChanged && prepare(this);
+    updateMethods.update.call(this);
+
+    this[IN_MAIN_PROCESS] = false;
+
+    flushPendingActions.call(this, silent);
+
+    triggerUpdatedEvent.call(this, silent);
+};
+
+function updateStreamModes(ecIns, ecModel) {
+    var chartsMap = ecIns._chartsMap;
+    var scheduler = ecIns._scheduler;
+    ecModel.eachSeries(function (seriesModel) {
+        scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);
+    });
+}
+
+/**
+ * Show loading effect
+ * @param  {string} [name='default']
+ * @param  {Object} [cfg]
+ */
+echartsProto.showLoading = function (name, cfg) {
+    if (isObject(name)) {
+        cfg = name;
+        name = '';
+    }
+    name = name || 'default';
+
+    this.hideLoading();
+    if (!loadingEffects[name]) {
+        if (__DEV__) {
+            console.warn('Loading effects ' + name + ' not exists.');
+        }
+        return;
+    }
+    var el = loadingEffects[name](this._api, cfg);
+    var zr = this._zr;
+    this._loadingFX = el;
+
+    zr.add(el);
+};
+
+/**
+ * Hide loading effect
+ */
+echartsProto.hideLoading = function () {
+    this._loadingFX && this._zr.remove(this._loadingFX);
+    this._loadingFX = null;
+};
+
+/**
+ * @param {Object} eventObj
+ * @return {Object}
+ */
+echartsProto.makeActionFromEvent = function (eventObj) {
+    var payload = extend({}, eventObj);
+    payload.type = eventActionMap[eventObj.type];
+    return payload;
+};
+
+/**
+ * @pubilc
+ * @param {Object} payload
+ * @param {string} [payload.type] Action type
+ * @param {Object|boolean} [opt] If pass boolean, means opt.silent
+ * @param {boolean} [opt.silent=false] Whether trigger events.
+ * @param {boolean} [opt.flush=undefined]
+ *                  true: Flush immediately, and then pixel in canvas can be fetched
+ *                      immediately. Caution: it might affect performance.
+ *                  false: Not not flush.
+ *                  undefined: Auto decide whether perform flush.
+ */
+echartsProto.dispatchAction = function (payload, opt) {
+    if (!isObject(opt)) {
+        opt = {silent: !!opt};
+    }
+
+    if (!actions[payload.type]) {
+        return;
+    }
+
+    // Avoid dispatch action before setOption. Especially in `connect`.
+    if (!this._model) {
+        return;
+    }
+
+    // May dispatchAction in rendering procedure
+    if (this[IN_MAIN_PROCESS]) {
+        this._pendingActions.push(payload);
+        return;
+    }
+
+    doDispatchAction.call(this, payload, opt.silent);
+
+    if (opt.flush) {
+        this._zr.flush(true);
+    }
+    else if (opt.flush !== false && env$1.browser.weChat) {
+        // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`
+        // hang when sliding page (on touch event), which cause that zr does not
+        // refresh util user interaction finished, which is not expected.
+        // But `dispatchAction` may be called too frequently when pan on touch
+        // screen, which impacts performance if do not throttle them.
+        this._throttledZrFlush();
+    }
+
+    flushPendingActions.call(this, opt.silent);
+
+    triggerUpdatedEvent.call(this, opt.silent);
+};
+
+function doDispatchAction(payload, silent) {
+    var payloadType = payload.type;
+    var escapeConnect = payload.escapeConnect;
+    var actionWrap = actions[payloadType];
+    var actionInfo = actionWrap.actionInfo;
+
+    var cptType = (actionInfo.update || 'update').split(':');
+    var updateMethod = cptType.pop();
+    cptType = cptType[0] != null && parseClassType(cptType[0]);
+
+    this[IN_MAIN_PROCESS] = true;
+
+    var payloads = [payload];
+    var batched = false;
+    // Batch action
+    if (payload.batch) {
+        batched = true;
+        payloads = map(payload.batch, function (item) {
+            item = defaults(extend({}, item), payload);
+            item.batch = null;
+            return item;
+        });
+    }
+
+    var eventObjBatch = [];
+    var eventObj;
+    var isHighDown = payloadType === 'highlight' || payloadType === 'downplay';
+
+    each(payloads, function (batchItem) {
+        // Action can specify the event by return it.
+        eventObj = actionWrap.action(batchItem, this._model, this._api);
+        // Emit event outside
+        eventObj = eventObj || extend({}, batchItem);
+        // Convert type to eventType
+        eventObj.type = actionInfo.event || eventObj.type;
+        eventObjBatch.push(eventObj);
+
+        // light update does not perform data process, layout and visual.
+        if (isHighDown) {
+            // method, payload, mainType, subType
+            updateDirectly(this, updateMethod, batchItem, 'series');
+        }
+        else if (cptType) {
+            updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub);
+        }
+    }, this);
+
+    if (updateMethod !== 'none' && !isHighDown && !cptType) {
+        // Still dirty
+        if (this[OPTION_UPDATED]) {
+            // FIXME Pass payload ?
+            prepare(this);
+            updateMethods.update.call(this, payload);
+            this[OPTION_UPDATED] = false;
+        }
+        else {
+            updateMethods[updateMethod].call(this, payload);
+        }
+    }
+
+    // Follow the rule of action batch
+    if (batched) {
+        eventObj = {
+            type: actionInfo.event || payloadType,
+            escapeConnect: escapeConnect,
+            batch: eventObjBatch
+        };
+    }
+    else {
+        eventObj = eventObjBatch[0];
+    }
+
+    this[IN_MAIN_PROCESS] = false;
+
+    !silent && this._messageCenter.trigger(eventObj.type, eventObj);
+}
+
+function flushPendingActions(silent) {
+    var pendingActions = this._pendingActions;
+    while (pendingActions.length) {
+        var payload = pendingActions.shift();
+        doDispatchAction.call(this, payload, silent);
+    }
+}
+
+function triggerUpdatedEvent(silent) {
+    !silent && this.trigger('updated');
+}
+
+/**
+ * Event `rendered` is triggered when zr
+ * rendered. It is useful for realtime
+ * snapshot (reflect animation).
+ *
+ * Event `finished` is triggered when:
+ * (1) zrender rendering finished.
+ * (2) initial animation finished.
+ * (3) progressive rendering finished.
+ * (4) no pending action.
+ * (5) no delayed setOption needs to be processed.
+ */
+function bindRenderedEvent(zr, ecIns) {
+    zr.on('rendered', function () {
+
+        ecIns.trigger('rendered');
+
+        // The `finished` event should not be triggered repeatly,
+        // so it should only be triggered when rendering indeed happend
+        // in zrender. (Consider the case that dipatchAction is keep
+        // triggering when mouse move).
+        if (
+            // Although zr is dirty if initial animation is not finished
+            // and this checking is called on frame, we also check
+            // animation finished for robustness.
+            zr.animation.isFinished()
+            && !ecIns[OPTION_UPDATED]
+            && !ecIns._scheduler.unfinished
+            && !ecIns._pendingActions.length
+        ) {
+            ecIns.trigger('finished');
+        }
+    });
+}
+
+/**
+ * @param {Object} params
+ * @param {number} params.seriesIndex
+ * @param {Array|TypedArray} params.data
+ */
+echartsProto.appendData = function (params) {
+    var seriesIndex = params.seriesIndex;
+    var ecModel = this.getModel();
+    var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
+
+    if (__DEV__) {
+        assert(params.data && seriesModel);
+    }
+
+    seriesModel.appendData(params);
+
+    // Note: `appendData` does not support that update extent of coordinate
+    // system, util some scenario require that. In the expected usage of
+    // `appendData`, the initial extent of coordinate system should better
+    // be fixed by axis `min`/`max` setting or initial data, otherwise if
+    // the extent changed while `appendData`, the location of the painted
+    // graphic elements have to be changed, which make the usage of
+    // `appendData` meaningless.
+
+    this._scheduler.unfinished = true;
+};
+
+/**
+ * Register event
+ * @method
+ */
+echartsProto.on = createRegisterEventWithLowercaseName('on');
+echartsProto.off = createRegisterEventWithLowercaseName('off');
+echartsProto.one = createRegisterEventWithLowercaseName('one');
+
+/**
+ * Prepare view instances of charts and components
+ * @param  {module:echarts/model/Global} ecModel
+ * @private
+ */
+function prepareView(ecIns, type, ecModel, scheduler) {
+    var isComponent = type === 'component';
+    var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;
+    var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;
+    var zr = ecIns._zr;
+    var api = ecIns._api;
+
+    for (var i = 0; i < viewList.length; i++) {
+        viewList[i].__alive = false;
+    }
+
+    isComponent
+        ? ecModel.eachComponent(function (componentType, model) {
+            componentType !== 'series' && doPrepare(model);
+        })
+        : ecModel.eachSeries(doPrepare);
+
+    function doPrepare(model) {
+        // Consider: id same and type changed.
+        var viewId = '_ec_' + model.id + '_' + model.type;
+        var view = viewMap[viewId];
+        if (!view) {
+            var classType = parseClassType(model.type);
+            var Clazz = isComponent
+                ? Component.getClass(classType.main, classType.sub)
+                : Chart.getClass(classType.sub);
+
+            if (__DEV__) {
+                assert(Clazz, classType.sub + ' does not exist.');
+            }
+
+            view = new Clazz();
+            view.init(ecModel, api);
+            viewMap[viewId] = view;
+            viewList.push(view);
+            zr.add(view.group);
+        }
+
+        model.__viewId = view.__id = viewId;
+        view.__alive = true;
+        view.__model = model;
+        view.group.__ecComponentInfo = {
+            mainType: model.mainType,
+            index: model.componentIndex
+        };
+        !isComponent && scheduler.prepareView(view, model, ecModel, api);
+    }
+
+    for (var i = 0; i < viewList.length;) {
+        var view = viewList[i];
+        if (!view.__alive) {
+            !isComponent && view.renderTask.dispose();
+            zr.remove(view.group);
+            view.dispose(ecModel, api);
+            viewList.splice(i, 1);
+            delete viewMap[view.__id];
+            view.__id = view.group.__ecComponentInfo = null;
+        }
+        else {
+            i++;
+        }
+    }
+}
+
+// /**
+//  * Encode visual infomation from data after data processing
+//  *
+//  * @param {module:echarts/model/Global} ecModel
+//  * @param {object} layout
+//  * @param {boolean} [layoutFilter] `true`: only layout,
+//  *                                 `false`: only not layout,
+//  *                                 `null`/`undefined`: all.
+//  * @param {string} taskBaseTag
+//  * @private
+//  */
+// function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) {
+//     each(visualFuncs, function (visual, index) {
+//         var isLayout = visual.isLayout;
+//         if (layoutFilter == null
+//             || (layoutFilter === false && !isLayout)
+//             || (layoutFilter === true && isLayout)
+//         ) {
+//             visual.func(ecModel, api, payload);
+//         }
+//     });
+// }
+
+function clearColorPalette(ecModel) {
+    ecModel.clearColorPalette();
+    ecModel.eachSeries(function (seriesModel) {
+        seriesModel.clearColorPalette();
+    });
+}
+
+function render(ecIns, ecModel, api, payload) {
+
+    renderComponents(ecIns, ecModel, api, payload);
+
+    each(ecIns._chartsViews, function (chart) {
+        chart.__alive = false;
+    });
+
+    renderSeries(ecIns, ecModel, api, payload);
+
+    // Remove groups of unrendered charts
+    each(ecIns._chartsViews, function (chart) {
+        if (!chart.__alive) {
+            chart.remove(ecModel, api);
+        }
+    });
+}
+
+function renderComponents(ecIns, ecModel, api, payload, dirtyList) {
+    each(dirtyList || ecIns._componentsViews, function (componentView) {
+        var componentModel = componentView.__model;
+        componentView.render(componentModel, ecModel, api, payload);
+
+        updateZ(componentModel, componentView);
+    });
+}
+
+/**
+ * Render each chart and component
+ * @private
+ */
+function renderSeries(ecIns, ecModel, api, payload, dirtyMap) {
+    // Render all charts
+    var scheduler = ecIns._scheduler;
+    var unfinished;
+    ecModel.eachSeries(function (seriesModel) {
+        var chartView = ecIns._chartsMap[seriesModel.__viewId];
+        chartView.__alive = true;
+
+        var renderTask = chartView.renderTask;
+        scheduler.updatePayload(renderTask, payload);
+
+        if (dirtyMap && dirtyMap.get(seriesModel.uid)) {
+            renderTask.dirty();
+        }
+
+        unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask));
+
+        chartView.group.silent = !!seriesModel.get('silent');
+
+        updateZ(seriesModel, chartView);
+
+        updateBlend(seriesModel, chartView);
+    });
+    scheduler.unfinished |= unfinished;
+
+    // If use hover layer
+    updateHoverLayerStatus(ecIns._zr, ecModel);
+
+    // Add aria
+    aria(ecIns._zr.dom, ecModel);
+}
+
+function performPostUpdateFuncs(ecModel, api) {
+    each(postUpdateFuncs, function (func) {
+        func(ecModel, api);
+    });
+}
+
+
+var MOUSE_EVENT_NAMES = [
+    'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove',
+    'mousedown', 'mouseup', 'globalout', 'contextmenu'
+];
+
+/**
+ * @private
+ */
+echartsProto._initEvents = function () {
+    each(MOUSE_EVENT_NAMES, function (eveName) {
+        this._zr.on(eveName, function (e) {
+            var ecModel = this.getModel();
+            var el = e.target;
+            var params;
+
+            // no e.target when 'globalout'.
+            if (eveName === 'globalout') {
+                params = {};
+            }
+            else if (el && el.dataIndex != null) {
+                var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);
+                params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType) || {};
+            }
+            // If element has custom eventData of components
+            else if (el && el.eventData) {
+                params = extend({}, el.eventData);
+            }
+
+            if (params) {
+                params.event = e;
+                params.type = eveName;
+                this.trigger(eveName, params);
+            }
+
+        }, this);
+    }, this);
+
+    each(eventActionMap, function (actionType, eventType) {
+        this._messageCenter.on(eventType, function (event) {
+            this.trigger(eventType, event);
+        }, this);
+    }, this);
+};
+
+/**
+ * @return {boolean}
+ */
+echartsProto.isDisposed = function () {
+    return this._disposed;
+};
+
+/**
+ * Clear
+ */
+echartsProto.clear = function () {
+    this.setOption({ series: [] }, true);
+};
+
+/**
+ * Dispose instance
+ */
+echartsProto.dispose = function () {
+    if (this._disposed) {
+        if (__DEV__) {
+            console.warn('Instance ' + this.id + ' has been disposed');
+        }
+        return;
+    }
+    this._disposed = true;
+
+    setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');
+
+    var api = this._api;
+    var ecModel = this._model;
+
+    each(this._componentsViews, function (component) {
+        component.dispose(ecModel, api);
+    });
+    each(this._chartsViews, function (chart) {
+        chart.dispose(ecModel, api);
+    });
+
+    // Dispose after all views disposed
+    this._zr.dispose();
+
+    delete instances[this.id];
+};
+
+mixin(ECharts, Eventful);
+
+function updateHoverLayerStatus(zr, ecModel) {
+    var storage = zr.storage;
+    var elCount = 0;
+    storage.traverse(function (el) {
+        if (!el.isGroup) {
+            elCount++;
+        }
+    });
+    if (elCount > ecModel.get('hoverLayerThreshold') && !env$1.node) {
+        storage.traverse(function (el) {
+            if (!el.isGroup) {
+                // Don't switch back.
+                el.useHoverLayer = true;
+            }
+        });
+    }
+}
+
+/**
+ * Update chart progressive and blend.
+ * @param {module:echarts/model/Series|module:echarts/model/Component} model
+ * @param {module:echarts/view/Component|module:echarts/view/Chart} view
+ */
+function updateBlend(seriesModel, chartView) {
+    var blendMode = seriesModel.get('blendMode') || null;
+    if (__DEV__) {
+        if (!env$1.canvasSupported && blendMode && blendMode !== 'source-over') {
+            console.warn('Only canvas support blendMode');
+        }
+    }
+    chartView.group.traverse(function (el) {
+        // FIXME marker and other components
+        if (!el.isGroup) {
+            // Only set if blendMode is changed. In case element is incremental and don't wan't to rerender.
+            if (el.style.blend !== blendMode) {
+                el.setStyle('blend', blendMode);
+            }
+        }
+        if (el.eachPendingDisplayable) {
+            el.eachPendingDisplayable(function (displayable) {
+                displayable.setStyle('blend', blendMode);
+            });
+        }
+    });
+}
+
+/**
+ * @param {module:echarts/model/Series|module:echarts/model/Component} model
+ * @param {module:echarts/view/Component|module:echarts/view/Chart} view
+ */
+function updateZ(model, view) {
+    var z = model.get('z');
+    var zlevel = model.get('zlevel');
+    // Set z and zlevel
+    view.group.traverse(function (el) {
+        if (el.type !== 'group') {
+            z != null && (el.z = z);
+            zlevel != null && (el.zlevel = zlevel);
+        }
+    });
+}
+
+function createExtensionAPI(ecInstance) {
+    var coordSysMgr = ecInstance._coordSysMgr;
+    return extend(new ExtensionAPI(ecInstance), {
+        // Inject methods
+        getCoordinateSystems: bind(
+            coordSysMgr.getCoordinateSystems, coordSysMgr
+        ),
+        getComponentByElement: function (el) {
+            while (el) {
+                var modelInfo = el.__ecComponentInfo;
+                if (modelInfo != null) {
+                    return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);
+                }
+                el = el.parent;
+            }
+        }
+    });
+}
+
+/**
+ * @type {Object} key: actionType.
+ * @inner
+ */
+var actions = {};
+
+/**
+ * Map eventType to actionType
+ * @type {Object}
+ */
+var eventActionMap = {};
+
+/**
+ * Data processor functions of each stage
+ * @type {Array.<Object.<string, Function>>}
+ * @inner
+ */
+var dataProcessorFuncs = [];
+
+/**
+ * @type {Array.<Function>}
+ * @inner
+ */
+var optionPreprocessorFuncs = [];
+
+/**
+ * @type {Array.<Function>}
+ * @inner
+ */
+var postUpdateFuncs = [];
+
+/**
+ * Visual encoding functions of each stage
+ * @type {Array.<Object.<string, Function>>}
+ */
+var visualFuncs = [];
+
+/**
+ * Theme storage
+ * @type {Object.<key, Object>}
+ */
+var themeStorage = {};
+/**
+ * Loading effects
+ */
+var loadingEffects = {};
+
+var instances = {};
+var connectedGroups = {};
+
+var idBase = new Date() - 0;
+var groupIdBase = new Date() - 0;
+var DOM_ATTRIBUTE_KEY = '_echarts_instance_';
+
+var mapDataStores = {};
+
+function enableConnect(chart) {
+    var STATUS_PENDING = 0;
+    var STATUS_UPDATING = 1;
+    var STATUS_UPDATED = 2;
+    var STATUS_KEY = '__connectUpdateStatus';
+
+    function updateConnectedChartsStatus(charts, status) {
+        for (var i = 0; i < charts.length; i++) {
+            var otherChart = charts[i];
+            otherChart[STATUS_KEY] = status;
+        }
+    }
+
+    each(eventActionMap, function (actionType, eventType) {
+        chart._messageCenter.on(eventType, function (event) {
+            if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {
+                if (event && event.escapeConnect) {
+                    return;
+                }
+
+                var action = chart.makeActionFromEvent(event);
+                var otherCharts = [];
+
+                each(instances, function (otherChart) {
+                    if (otherChart !== chart && otherChart.group === chart.group) {
+                        otherCharts.push(otherChart);
+                    }
+                });
+
+                updateConnectedChartsStatus(otherCharts, STATUS_PENDING);
+                each(otherCharts, function (otherChart) {
+                    if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {
+                        otherChart.dispatchAction(action);
+                    }
+                });
+                updateConnectedChartsStatus(otherCharts, STATUS_UPDATED);
+            }
+        });
+    });
+}
+
+/**
+ * @param {HTMLElement} dom
+ * @param {Object} [theme]
+ * @param {Object} opts
+ * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default
+ * @param {string} [opts.renderer] Currently only 'canvas' is supported.
+ * @param {number} [opts.width] Use clientWidth of the input `dom` by default.
+ *                              Can be 'auto' (the same as null/undefined)
+ * @param {number} [opts.height] Use clientHeight of the input `dom` by default.
+ *                               Can be 'auto' (the same as null/undefined)
+ */
+function init(dom, theme$$1, opts) {
+    if (__DEV__) {
+        // Check version
+        if ((version$1.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) {
+            throw new Error(
+                'zrender/src ' + version$1
+                + ' is too old for ECharts ' + version
+                + '. Current version need ZRender '
+                + dependencies.zrender + '+'
+            );
+        }
+
+        if (!dom) {
+            throw new Error('Initialize failed: invalid dom.');
+        }
+    }
+
+    var existInstance = getInstanceByDom(dom);
+    if (existInstance) {
+        if (__DEV__) {
+            console.warn('There is a chart instance already initialized on the dom.');
+        }
+        return existInstance;
+    }
+
+    if (__DEV__) {
+        if (isDom(dom)
+            && dom.nodeName.toUpperCase() !== 'CANVAS'
+            && (
+                (!dom.clientWidth && (!opts || opts.width == null))
+                || (!dom.clientHeight && (!opts || opts.height == null))
+            )
+        ) {
+            console.warn('Can\'t get dom width or height');
+        }
+    }
+
+    var chart = new ECharts(dom, theme$$1, opts);
+    chart.id = 'ec_' + idBase++;
+    instances[chart.id] = chart;
+
+    setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);
+
+    enableConnect(chart);
+
+    return chart;
+}
+
+/**
+ * @return {string|Array.<module:echarts~ECharts>} groupId
+ */
+function connect(groupId) {
+    // Is array of charts
+    if (isArray(groupId)) {
+        var charts = groupId;
+        groupId = null;
+        // If any chart has group
+        each(charts, function (chart) {
+            if (chart.group != null) {
+                groupId = chart.group;
+            }
+        });
+        groupId = groupId || ('g_' + groupIdBase++);
+        each(charts, function (chart) {
+            chart.group = groupId;
+        });
+    }
+    connectedGroups[groupId] = true;
+    return groupId;
+}
+
+/**
+ * @DEPRECATED
+ * @return {string} groupId
+ */
+function disConnect(groupId) {
+    connectedGroups[groupId] = false;
+}
+
+/**
+ * @return {string} groupId
+ */
+var disconnect = disConnect;
+
+/**
+ * Dispose a chart instance
+ * @param  {module:echarts~ECharts|HTMLDomElement|string} chart
+ */
+function dispose(chart) {
+    if (typeof chart === 'string') {
+        chart = instances[chart];
+    }
+    else if (!(chart instanceof ECharts)){
+        // Try to treat as dom
+        chart = getInstanceByDom(chart);
+    }
+    if ((chart instanceof ECharts) && !chart.isDisposed()) {
+        chart.dispose();
+    }
+}
+
+/**
+ * @param  {HTMLElement} dom
+ * @return {echarts~ECharts}
+ */
+function getInstanceByDom(dom) {
+    return instances[getAttribute(dom, DOM_ATTRIBUTE_KEY)];
+}
+
+/**
+ * @param {string} key
+ * @return {echarts~ECharts}
+ */
+function getInstanceById(key) {
+    return instances[key];
+}
+
+/**
+ * Register theme
+ */
+function registerTheme(name, theme$$1) {
+    themeStorage[name] = theme$$1;
+}
+
+/**
+ * Register option preprocessor
+ * @param {Function} preprocessorFunc
+ */
+function registerPreprocessor(preprocessorFunc) {
+    optionPreprocessorFuncs.push(preprocessorFunc);
+}
+
+/**
+ * @param {number} [priority=1000]
+ * @param {Object|Function} processor
+ */
+function registerProcessor(priority, processor) {
+    normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);
+}
+
+/**
+ * Register postUpdater
+ * @param {Function} postUpdateFunc
+ */
+function registerPostUpdate(postUpdateFunc) {
+    postUpdateFuncs.push(postUpdateFunc);
+}
+
+/**
+ * Usage:
+ * registerAction('someAction', 'someEvent', function () { ... });
+ * registerAction('someAction', function () { ... });
+ * registerAction(
+ *     {type: 'someAction', event: 'someEvent', update: 'updateView'},
+ *     function () { ... }
+ * );
+ *
+ * @param {(string|Object)} actionInfo
+ * @param {string} actionInfo.type
+ * @param {string} [actionInfo.event]
+ * @param {string} [actionInfo.update]
+ * @param {string} [eventName]
+ * @param {Function} action
+ */
+function registerAction(actionInfo, eventName, action) {
+    if (typeof eventName === 'function') {
+        action = eventName;
+        eventName = '';
+    }
+    var actionType = isObject(actionInfo)
+        ? actionInfo.type
+        : ([actionInfo, actionInfo = {
+            event: eventName
+        }][0]);
+
+    // Event name is all lowercase
+    actionInfo.event = (actionInfo.event || actionType).toLowerCase();
+    eventName = actionInfo.event;
+
+    // Validate action type and event name.
+    assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));
+
+    if (!actions[actionType]) {
+        actions[actionType] = {action: action, actionInfo: actionInfo};
+    }
+    eventActionMap[eventName] = actionType;
+}
+
+/**
+ * @param {string} type
+ * @param {*} CoordinateSystem
+ */
+function registerCoordinateSystem(type, CoordinateSystem$$1) {
+    CoordinateSystemManager.register(type, CoordinateSystem$$1);
+}
+
+/**
+ * Get dimensions of specified coordinate system.
+ * @param {string} type
+ * @return {Array.<string|Object>}
+ */
+function getCoordinateSystemDimensions(type) {
+    var coordSysCreator = CoordinateSystemManager.get(type);
+    if (coordSysCreator) {
+        return coordSysCreator.getDimensionsInfo
+                ? coordSysCreator.getDimensionsInfo()
+                : coordSysCreator.dimensions.slice();
+    }
+}
+
+/**
+ * Layout is a special stage of visual encoding
+ * Most visual encoding like color are common for different chart
+ * But each chart has it's own layout algorithm
+ *
+ * @param {number} [priority=1000]
+ * @param {Function} layoutTask
+ */
+function registerLayout(priority, layoutTask) {
+    normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');
+}
+
+/**
+ * @param {number} [priority=3000]
+ * @param {module:echarts/stream/Task} visualTask
+ */
+function registerVisual(priority, visualTask) {
+    normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');
+}
+
+/**
+ * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset}
+ */
+function normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {
+    if (isFunction(priority) || isObject(priority)) {
+        fn = priority;
+        priority = defaultPriority;
+    }
+
+    if (__DEV__) {
+        if (isNaN(priority) || priority == null) {
+            throw new Error('Illegal priority');
+        }
+        // Check duplicate
+        each(targetList, function (wrap) {
+            assert(wrap.__raw !== fn);
+        });
+    }
+
+    var stageHandler = Scheduler.wrapStageHandler(fn, visualType);
+
+    stageHandler.__prio = priority;
+    stageHandler.__raw = fn;
+    targetList.push(stageHandler);
+
+    return stageHandler;
+}
+
+/**
+ * @param {string} name
+ */
+function registerLoading(name, loadingFx) {
+    loadingEffects[name] = loadingFx;
+}
+
+/**
+ * @param {Object} opts
+ * @param {string} [superClass]
+ */
+function extendComponentModel(opts/*, superClass*/) {
+    // var Clazz = ComponentModel;
+    // if (superClass) {
+    //     var classType = parseClassType(superClass);
+    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);
+    // }
+    return ComponentModel.extend(opts);
+}
+
+/**
+ * @param {Object} opts
+ * @param {string} [superClass]
+ */
+function extendComponentView(opts/*, superClass*/) {
+    // var Clazz = ComponentView;
+    // if (superClass) {
+    //     var classType = parseClassType(superClass);
+    //     Clazz = ComponentView.getClass(classType.main, classType.sub, true);
+    // }
+    return Component.extend(opts);
+}
+
+/**
+ * @param {Object} opts
+ * @param {string} [superClass]
+ */
+function extendSeriesModel(opts/*, superClass*/) {
+    // var Clazz = SeriesModel;
+    // if (superClass) {
+    //     superClass = 'series.' + superClass.replace('series.', '');
+    //     var classType = parseClassType(superClass);
+    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);
+    // }
+    return SeriesModel.extend(opts);
+}
+
+/**
+ * @param {Object} opts
+ * @param {string} [superClass]
+ */
+function extendChartView(opts/*, superClass*/) {
+    // var Clazz = ChartView;
+    // if (superClass) {
+    //     superClass = superClass.replace('series.', '');
+    //     var classType = parseClassType(superClass);
+    //     Clazz = ChartView.getClass(classType.main, true);
+    // }
+    return Chart.extend(opts);
+}
+
+/**
+ * ZRender need a canvas context to do measureText.
+ * But in node environment canvas may be created by node-canvas.
+ * So we need to specify how to create a canvas instead of using document.createElement('canvas')
+ *
+ * Be careful of using it in the browser.
+ *
+ * @param {Function} creator
+ * @example
+ *     var Canvas = require('canvas');
+ *     var echarts = require('echarts');
+ *     echarts.setCanvasCreator(function () {
+ *         // Small size is enough.
+ *         return new Canvas(32, 32);
+ *     });
+ */
+function setCanvasCreator(creator) {
+    $override('createCanvas', creator);
+}
+
+/**
+ * @param {string} mapName
+ * @param {Object|string} geoJson
+ * @param {Object} [specialAreas]
+ *
+ * @example
+ *     $.get('USA.json', function (geoJson) {
+ *         echarts.registerMap('USA', geoJson);
+ *         // Or
+ *         echarts.registerMap('USA', {
+ *             geoJson: geoJson,
+ *             specialAreas: {}
+ *         })
+ *     });
+ */
+function registerMap(mapName, geoJson, specialAreas) {
+    if (geoJson.geoJson && !geoJson.features) {
+        specialAreas = geoJson.specialAreas;
+        geoJson = geoJson.geoJson;
+    }
+    if (typeof geoJson === 'string') {
+        geoJson = (typeof JSON !== 'undefined' && JSON.parse)
+            ? JSON.parse(geoJson) : (new Function('return (' + geoJson + ');'))();
+    }
+    mapDataStores[mapName] = {
+        geoJson: geoJson,
+        specialAreas: specialAreas
+    };
+}
+
+/**
+ * @param {string} mapName
+ * @return {Object}
+ */
+function getMap(mapName) {
+    return mapDataStores[mapName];
+}
+
+registerVisual(PRIORITY_VISUAL_GLOBAL, seriesColor);
+registerPreprocessor(backwardCompat);
+registerProcessor(PRIORITY_PROCESSOR_STATISTIC, dataStack);
+registerLoading('default', loadingDefault);
+
+// Default actions
+
+registerAction({
+    type: 'highlight',
+    event: 'highlight',
+    update: 'highlight'
+}, noop);
+
+registerAction({
+    type: 'downplay',
+    event: 'downplay',
+    update: 'downplay'
+}, noop);
+
+// Default theme
+registerTheme('light', lightTheme);
+registerTheme('dark', theme);
+
+// For backward compatibility, where the namespace `dataTool` will
+// be mounted on `echarts` is the extension `dataTool` is imported.
+var dataTool = {};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+function defaultKeyGetter(item) {
+    return item;
+}
+
+/**
+ * @param {Array} oldArr
+ * @param {Array} newArr
+ * @param {Function} oldKeyGetter
+ * @param {Function} newKeyGetter
+ * @param {Object} [context] Can be visited by this.context in callback.
+ */
+function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) {
+    this._old = oldArr;
+    this._new = newArr;
+
+    this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;
+    this._newKeyGetter = newKeyGetter || defaultKeyGetter;
+
+    this.context = context;
+}
+
+DataDiffer.prototype = {
+
+    constructor: DataDiffer,
+
+    /**
+     * Callback function when add a data
+     */
+    add: function (func) {
+        this._add = func;
+        return this;
+    },
+
+    /**
+     * Callback function when update a data
+     */
+    update: function (func) {
+        this._update = func;
+        return this;
+    },
+
+    /**
+     * Callback function when remove a data
+     */
+    remove: function (func) {
+        this._remove = func;
+        return this;
+    },
+
+    execute: function () {
+        var oldArr = this._old;
+        var newArr = this._new;
+
+        var oldDataIndexMap = {};
+        var newDataIndexMap = {};
+        var oldDataKeyArr = [];
+        var newDataKeyArr = [];
+        var i;
+
+        initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this);
+        initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this);
+
+        // Travel by inverted order to make sure order consistency
+        // when duplicate keys exists (consider newDataIndex.pop() below).
+        // For performance consideration, these code below do not look neat.
+        for (i = 0; i < oldArr.length; i++) {
+            var key = oldDataKeyArr[i];
+            var idx = newDataIndexMap[key];
+
+            // idx can never be empty array here. see 'set null' logic below.
+            if (idx != null) {
+                // Consider there is duplicate key (for example, use dataItem.name as key).
+                // We should make sure every item in newArr and oldArr can be visited.
+                var len = idx.length;
+                if (len) {
+                    len === 1 && (newDataIndexMap[key] = null);
+                    idx = idx.unshift();
+                }
+                else {
+                    newDataIndexMap[key] = null;
+                }
+                this._update && this._update(idx, i);
+            }
+            else {
+                this._remove && this._remove(i);
+            }
+        }
+
+        for (var i = 0; i < newDataKeyArr.length; i++) {
+            var key = newDataKeyArr[i];
+            if (newDataIndexMap.hasOwnProperty(key)) {
+                var idx = newDataIndexMap[key];
+                if (idx == null) {
+                    continue;
+                }
+                // idx can never be empty array here. see 'set null' logic above.
+                if (!idx.length) {
+                    this._add && this._add(idx);
+                }
+                else {
+                    for (var j = 0, len = idx.length; j < len; j++) {
+                        this._add && this._add(idx[j]);
+                    }
+                }
+            }
+        }
+    }
+};
+
+function initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) {
+    for (var i = 0; i < arr.length; i++) {
+        // Add prefix to avoid conflict with Object.prototype.
+        var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i);
+        var existence = map[key];
+        if (existence == null) {
+            keyArr.push(key);
+            map[key] = i;
+        }
+        else {
+            if (!existence.length) {
+                map[key] = existence = [existence];
+            }
+            existence.push(i);
+        }
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var OTHER_DIMENSIONS = createHashMap([
+    'tooltip', 'label', 'itemName', 'itemId', 'seriesName'
+]);
+
+function summarizeDimensions(data) {
+    var summary = {};
+    var encode = summary.encode = {};
+    var notExtraCoordDimMap = createHashMap();
+    var defaultedLabel = [];
+    var defaultedTooltip = [];
+
+    each$1(data.dimensions, function (dimName) {
+        var dimItem = data.getDimensionInfo(dimName);
+
+        var coordDim = dimItem.coordDim;
+        if (coordDim) {
+            if (__DEV__) {
+                assert$1(OTHER_DIMENSIONS.get(coordDim) == null);
+            }
+            var coordDimArr = encode[coordDim];
+            if (!encode.hasOwnProperty(coordDim)) {
+                coordDimArr = encode[coordDim] = [];
+            }
+            coordDimArr[dimItem.coordDimIndex] = dimName;
+
+            if (!dimItem.isExtraCoord) {
+                notExtraCoordDimMap.set(coordDim, 1);
+
+                // Use the last coord dim (and label friendly) as default label,
+                // because when dataset is used, it is hard to guess which dimension
+                // can be value dimension. If both show x, y on label is not look good,
+                // and conventionally y axis is focused more.
+                if (mayLabelDimType(dimItem.type)) {
+                    defaultedLabel[0] = dimName;
+                }
+            }
+            if (dimItem.defaultTooltip) {
+                defaultedTooltip.push(dimName);
+            }
+        }
+
+        OTHER_DIMENSIONS.each(function (v, otherDim) {
+            var otherDimArr = encode[otherDim];
+            if (!encode.hasOwnProperty(otherDim)) {
+                otherDimArr = encode[otherDim] = [];
+            }
+
+            var dimIndex = dimItem.otherDims[otherDim];
+            if (dimIndex != null && dimIndex !== false) {
+                otherDimArr[dimIndex] = dimItem.name;
+            }
+        });
+    });
+
+    var dataDimsOnCoord = [];
+    var encodeFirstDimNotExtra = {};
+
+    notExtraCoordDimMap.each(function (v, coordDim) {
+        var dimArr = encode[coordDim];
+        // ??? FIXME extra coord should not be set in dataDimsOnCoord.
+        // But should fix the case that radar axes: simplify the logic
+        // of `completeDimension`, remove `extraPrefix`.
+        encodeFirstDimNotExtra[coordDim] = dimArr[0];
+        // Not necessary to remove duplicate, because a data
+        // dim canot on more than one coordDim.
+        dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);
+    });
+
+    summary.dataDimsOnCoord = dataDimsOnCoord;
+    summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;
+
+    var encodeLabel = encode.label;
+    // FIXME `encode.label` is not recommanded, because formatter can not be set
+    // in this way. Use label.formatter instead. May be remove this approach someday.
+    if (encodeLabel && encodeLabel.length) {
+        defaultedLabel = encodeLabel.slice();
+    }
+
+    var encodeTooltip = encode.tooltip;
+    if (encodeTooltip && encodeTooltip.length) {
+        defaultedTooltip = encodeTooltip.slice();
+    }
+    else if (!defaultedTooltip.length) {
+        defaultedTooltip = defaultedLabel.slice();
+    }
+
+    encode.defaultedLabel = defaultedLabel;
+    encode.defaultedTooltip = defaultedTooltip;
+
+    return summary;
+}
+
+function getDimensionTypeByAxis(axisType) {
+    return axisType === 'category'
+        ? 'ordinal'
+        : axisType === 'time'
+        ? 'time'
+        : 'float';
+}
+
+function mayLabelDimType(dimType) {
+    // In most cases, ordinal and time do not suitable for label.
+    // Ordinal info can be displayed on axis. Time is too long.
+    return !(dimType === 'ordinal' || dimType === 'time');
+}
+
+// function findTheLastDimMayLabel(data) {
+//     // Get last value dim
+//     var dimensions = data.dimensions.slice();
+//     var valueType;
+//     var valueDim;
+//     while (dimensions.length && (
+//         valueDim = dimensions.pop(),
+//         valueType = data.getDimensionInfo(valueDim).type,
+//         valueType === 'ordinal' || valueType === 'time'
+//     )) {} // jshint ignore:line
+//     return valueDim;
+// }
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * List for data storage
+ * @module echarts/data/List
+ */
+
+var isObject$4 = isObject$1;
+
+var UNDEFINED = 'undefined';
+
+// Use prefix to avoid index to be the same as otherIdList[idx],
+// which will cause weird udpate animation.
+var ID_PREFIX = 'e\0\0';
+
+var dataCtors = {
+    'float': typeof Float64Array === UNDEFINED
+        ? Array : Float64Array,
+    'int': typeof Int32Array === UNDEFINED
+        ? Array : Int32Array,
+    // Ordinal data type can be string or int
+    'ordinal': Array,
+    'number': Array,
+    'time': Array
+};
+
+// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is
+// different from the Ctor of typed array.
+var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;
+var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;
+
+function getIndicesCtor(list) {
+    // The possible max value in this._indicies is always this._rawCount despite of filtering.
+    return list._rawCount > 65535 ? CtorUint32Array : CtorUint16Array;
+}
+
+function cloneChunk(originalChunk) {
+    var Ctor = originalChunk.constructor;
+    // Only shallow clone is enough when Array.
+    return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);
+}
+
+var TRANSFERABLE_PROPERTIES = [
+    'hasItemOption', '_nameList', '_idList', '_invertedIndicesMap',
+    '_rawData', '_chunkSize', '_chunkCount', '_dimValueGetter',
+    '_count', '_rawCount', '_nameDimIdx', '_idDimIdx'
+];
+var CLONE_PROPERTIES = [
+    '_extent', '_approximateExtent', '_rawExtent'
+];
+
+function transferProperties(target, source) {
+    each$1(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) {
+        if (source.hasOwnProperty(propName)) {
+            target[propName] = source[propName];
+        }
+    });
+
+    target.__wrappedMethods = source.__wrappedMethods;
+
+    each$1(CLONE_PROPERTIES, function (propName) {
+        target[propName] = clone(source[propName]);
+    });
+
+    target._calculationInfo = extend(source._calculationInfo);
+}
+
+
+
+
+
+/**
+ * @constructor
+ * @alias module:echarts/data/List
+ *
+ * @param {Array.<string|Object>} dimensions
+ *      For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].
+ *      Dimensions should be concrete names like x, y, z, lng, lat, angle, radius
+ *      Spetial fields: {
+ *          ordinalMeta: <module:echarts/data/OrdinalMeta>
+ *          createInvertedIndices: <boolean>
+ *      }
+ * @param {module:echarts/model/Model} hostModel
+ */
+var List = function (dimensions, hostModel) {
+
+    dimensions = dimensions || ['x', 'y'];
+
+    var dimensionInfos = {};
+    var dimensionNames = [];
+    var invertedIndicesMap = {};
+
+    for (var i = 0; i < dimensions.length; i++) {
+        // Use the original dimensions[i], where other flag props may exists.
+        var dimensionInfo = dimensions[i];
+
+        if (isString(dimensionInfo)) {
+            dimensionInfo = {name: dimensionInfo};
+        }
+
+        var dimensionName = dimensionInfo.name;
+        dimensionInfo.type = dimensionInfo.type || 'float';
+        if (!dimensionInfo.coordDim) {
+            dimensionInfo.coordDim = dimensionName;
+            dimensionInfo.coordDimIndex = 0;
+        }
+
+        dimensionInfo.otherDims = dimensionInfo.otherDims || {};
+        dimensionNames.push(dimensionName);
+        dimensionInfos[dimensionName] = dimensionInfo;
+
+        dimensionInfo.index = i;
+
+        if (dimensionInfo.createInvertedIndices) {
+            invertedIndicesMap[dimensionName] = [];
+        }
+    }
+
+    /**
+     * @readOnly
+     * @type {Array.<string>}
+     */
+    this.dimensions = dimensionNames;
+
+    /**
+     * Infomation of each data dimension, like data type.
+     * @type {Object}
+     */
+    this._dimensionInfos = dimensionInfos;
+
+    /**
+     * @type {module:echarts/model/Model}
+     */
+    this.hostModel = hostModel;
+
+    /**
+     * @type {module:echarts/model/Model}
+     */
+    this.dataType;
+
+    /**
+     * Indices stores the indices of data subset after filtered.
+     * This data subset will be used in chart.
+     * @type {Array.<number>}
+     * @readOnly
+     */
+    this._indices = null;
+
+    this._count = 0;
+    this._rawCount = 0;
+
+    /**
+     * Data storage
+     * @type {Object.<key, Array.<TypedArray|Array>>}
+     * @private
+     */
+    this._storage = {};
+
+    /**
+     * @type {Array.<string>}
+     */
+    this._nameList = [];
+    /**
+     * @type {Array.<string>}
+     */
+    this._idList = [];
+
+    /**
+     * Models of data option is stored sparse for optimizing memory cost
+     * @type {Array.<module:echarts/model/Model>}
+     * @private
+     */
+    this._optionModels = [];
+
+    /**
+     * Global visual properties after visual coding
+     * @type {Object}
+     * @private
+     */
+    this._visual = {};
+
+    /**
+     * Globel layout properties.
+     * @type {Object}
+     * @private
+     */
+    this._layout = {};
+
+    /**
+     * Item visual properties after visual coding
+     * @type {Array.<Object>}
+     * @private
+     */
+    this._itemVisuals = [];
+
+    /**
+     * Key: visual type, Value: boolean
+     * @type {Object}
+     * @readOnly
+     */
+    this.hasItemVisual = {};
+
+    /**
+     * Item layout properties after layout
+     * @type {Array.<Object>}
+     * @private
+     */
+    this._itemLayouts = [];
+
+    /**
+     * Graphic elemnents
+     * @type {Array.<module:zrender/Element>}
+     * @private
+     */
+    this._graphicEls = [];
+
+    /**
+     * Max size of each chunk.
+     * @type {number}
+     * @private
+     */
+    this._chunkSize = 1e5;
+
+    /**
+     * @type {number}
+     * @private
+     */
+    this._chunkCount = 0;
+
+    /**
+     * @type {Array.<Array|Object>}
+     * @private
+     */
+    this._rawData;
+
+    /**
+     * Raw extent will not be cloned, but only transfered.
+     * It will not be calculated util needed.
+     * key: dim,
+     * value: {end: number, extent: Array.<number>}
+     * @type {Object}
+     * @private
+     */
+    this._rawExtent = {};
+
+    /**
+     * @type {Object}
+     * @private
+     */
+    this._extent = {};
+
+    /**
+     * key: dim
+     * value: extent
+     * @type {Object}
+     * @private
+     */
+    this._approximateExtent = {};
+
+    /**
+     * Cache summary info for fast visit. See "dimensionHelper".
+     * @type {Object}
+     * @private
+     */
+    this._dimensionsSummary = summarizeDimensions(this);
+
+    /**
+     * @type {Object.<Array|TypedArray>}
+     * @private
+     */
+    this._invertedIndicesMap = invertedIndicesMap;
+
+    /**
+     * @type {Object}
+     * @private
+     */
+    this._calculationInfo = {};
+};
+
+var listProto = List.prototype;
+
+listProto.type = 'list';
+
+/**
+ * If each data item has it's own option
+ * @type {boolean}
+ */
+listProto.hasItemOption = true;
+
+/**
+ * Get dimension name
+ * @param {string|number} dim
+ *        Dimension can be concrete names like x, y, z, lng, lat, angle, radius
+ *        Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'
+ * @return {string} Concrete dim name.
+ */
+listProto.getDimension = function (dim) {
+    if (!isNaN(dim)) {
+        dim = this.dimensions[dim] || dim;
+    }
+    return dim;
+};
+
+/**
+ * Get type and calculation info of particular dimension
+ * @param {string|number} dim
+ *        Dimension can be concrete names like x, y, z, lng, lat, angle, radius
+ *        Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'
+ */
+listProto.getDimensionInfo = function (dim) {
+    // Do not clone, because there may be categories in dimInfo.
+    return this._dimensionInfos[this.getDimension(dim)];
+};
+
+/**
+ * @return {Array.<string>} concrete dimension name list on coord.
+ */
+listProto.getDimensionsOnCoord = function () {
+    return this._dimensionsSummary.dataDimsOnCoord.slice();
+};
+
+/**
+ * @param {string} coordDim
+ * @param {number} [idx] A coordDim may map to more than one data dim.
+ *        If idx is `true`, return a array of all mapped dims.
+ *        If idx is not specified, return the first dim not extra.
+ * @return {string|Array.<string>} concrete data dim.
+ *        If idx is number, and not found, return null/undefined.
+ *        If idx is `true`, and not found, return empty array (always return array).
+ */
+listProto.mapDimension = function (coordDim, idx) {
+    var dimensionsSummary = this._dimensionsSummary;
+
+    if (idx == null) {
+        return dimensionsSummary.encodeFirstDimNotExtra[coordDim];
+    }
+
+    var dims = dimensionsSummary.encode[coordDim];
+    return idx === true
+        // always return array if idx is `true`
+        ? (dims || []).slice()
+        : (dims && dims[idx]);
+};
+
+/**
+ * Initialize from data
+ * @param {Array.<Object|number|Array>} data source or data or data provider.
+ * @param {Array.<string>} [nameLIst] The name of a datum is used on data diff and
+ *        defualt label/tooltip.
+ *        A name can be specified in encode.itemName,
+ *        or dataItem.name (only for series option data),
+ *        or provided in nameList from outside.
+ * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number
+ */
+listProto.initData = function (data, nameList, dimValueGetter) {
+
+    var notProvider = Source.isInstance(data) || isArrayLike(data);
+    if (notProvider) {
+        data = new DefaultDataProvider(data, this.dimensions.length);
+    }
+
+    if (__DEV__) {
+        if (!notProvider && (typeof data.getItem != 'function' || typeof data.count != 'function')) {
+            throw new Error('Inavlid data provider.');
+        }
+    }
+
+    this._rawData = data;
+
+    // Clear
+    this._storage = {};
+    this._indices = null;
+
+    this._nameList = nameList || [];
+
+    this._idList = [];
+
+    this._nameRepeatCount = {};
+
+    if (!dimValueGetter) {
+        this.hasItemOption = false;
+    }
+
+    /**
+     * @readOnly
+     */
+    this.defaultDimValueGetter = defaultDimValueGetters[
+        this._rawData.getSource().sourceFormat
+    ];
+
+    // Default dim value getter
+    this._dimValueGetter = dimValueGetter = dimValueGetter
+        || this.defaultDimValueGetter;
+
+    // Reset raw extent.
+    this._rawExtent = {};
+
+    this._initDataFromProvider(0, data.count());
+
+    // If data has no item option.
+    if (data.pure) {
+        this.hasItemOption = false;
+    }
+};
+
+listProto.getProvider = function () {
+    return this._rawData;
+};
+
+listProto.appendData = function (data) {
+    if (__DEV__) {
+        assert$1(!this._indices, 'appendData can only be called on raw data.');
+    }
+
+    var rawData = this._rawData;
+    var start = this.count();
+    rawData.appendData(data);
+    var end = rawData.count();
+    if (!rawData.persistent) {
+        end += start;
+    }
+    this._initDataFromProvider(start, end);
+};
+
+listProto._initDataFromProvider = function (start, end) {
+    // Optimize.
+    if (start >= end) {
+        return;
+    }
+
+    var chunkSize = this._chunkSize;
+    var rawData = this._rawData;
+    var storage = this._storage;
+    var dimensions = this.dimensions;
+    var dimLen = dimensions.length;
+    var dimensionInfoMap = this._dimensionInfos;
+    var nameList = this._nameList;
+    var idList = this._idList;
+    var rawExtent = this._rawExtent;
+    var nameRepeatCount = this._nameRepeatCount = {};
+    var nameDimIdx;
+
+    var chunkCount = this._chunkCount;
+    var lastChunkIndex = chunkCount - 1;
+    for (var i = 0; i < dimLen; i++) {
+        var dim = dimensions[i];
+        if (!rawExtent[dim]) {
+            rawExtent[dim] = getInitialExtent();
+        }
+
+        var dimInfo = dimensionInfoMap[dim];
+        if (dimInfo.otherDims.itemName === 0) {
+            nameDimIdx = this._nameDimIdx = i;
+        }
+        if (dimInfo.otherDims.itemId === 0) {
+            this._idDimIdx = i;
+        }
+        var DataCtor = dataCtors[dimInfo.type];
+
+        if (!storage[dim]) {
+            storage[dim] = [];
+        }
+        var resizeChunkArray = storage[dim][lastChunkIndex];
+        if (resizeChunkArray && resizeChunkArray.length < chunkSize) {
+            var newStore = new DataCtor(Math.min(end - lastChunkIndex * chunkSize, chunkSize));
+            // The cost of the copy is probably inconsiderable
+            // within the initial chunkSize.
+            for (var j = 0; j < resizeChunkArray.length; j++) {
+                newStore[j] = resizeChunkArray[j];
+            }
+            storage[dim][lastChunkIndex] = newStore;
+        }
+
+        // Create new chunks.
+        for (var k = chunkCount * chunkSize; k < end; k += chunkSize) {
+            storage[dim].push(new DataCtor(Math.min(end - k, chunkSize)));
+        }
+        this._chunkCount = storage[dim].length;
+    }
+
+    var dataItem = new Array(dimLen);
+    for (var idx = start; idx < end; idx++) {
+        // NOTICE: Try not to write things into dataItem
+        dataItem = rawData.getItem(idx, dataItem);
+        // Each data item is value
+        // [1, 2]
+        // 2
+        // Bar chart, line chart which uses category axis
+        // only gives the 'y' value. 'x' value is the indices of category
+        // Use a tempValue to normalize the value to be a (x, y) value
+        var chunkIndex = Math.floor(idx / chunkSize);
+        var chunkOffset = idx % chunkSize;
+
+        // Store the data by dimensions
+        for (var k = 0; k < dimLen; k++) {
+            var dim = dimensions[k];
+            var dimStorage = storage[dim][chunkIndex];
+            // PENDING NULL is empty or zero
+            var val = this._dimValueGetter(dataItem, dim, idx, k);
+            dimStorage[chunkOffset] = val;
+
+            var dimRawExtent = rawExtent[dim];
+            if (val < dimRawExtent[0]) {
+                dimRawExtent[0] = val;
+            }
+            if (val > dimRawExtent[1]) {
+                dimRawExtent[1] = val;
+            }
+        }
+
+        // ??? FIXME not check by pure but sourceFormat?
+        // TODO refactor these logic.
+        if (!rawData.pure) {
+            var name = nameList[idx];
+
+            if (dataItem && name == null) {
+                // If dataItem is {name: ...}, it has highest priority.
+                // That is appropriate for many common cases.
+                if (dataItem.name != null) {
+                    // There is no other place to persistent dataItem.name,
+                    // so save it to nameList.
+                    nameList[idx] = name = dataItem.name;
+                }
+                else if (nameDimIdx != null) {
+                    var nameDim = dimensions[nameDimIdx];
+                    var nameDimChunk = storage[nameDim][chunkIndex];
+                    if (nameDimChunk) {
+                        name = nameDimChunk[chunkOffset];
+                        var ordinalMeta = dimensionInfoMap[nameDim].ordinalMeta;
+                        if (ordinalMeta && ordinalMeta.categories.length) {
+                            name = ordinalMeta.categories[name];
+                        }
+                    }
+                }
+            }
+
+            // Try using the id in option
+            // id or name is used on dynamical data, mapping old and new items.
+            var id = dataItem == null ? null : dataItem.id;
+
+            if (id == null && name != null) {
+                // Use name as id and add counter to avoid same name
+                nameRepeatCount[name] = nameRepeatCount[name] || 0;
+                id = name;
+                if (nameRepeatCount[name] > 0) {
+                    id += '__ec__' + nameRepeatCount[name];
+                }
+                nameRepeatCount[name]++;
+            }
+            id != null && (idList[idx] = id);
+        }
+    }
+
+    if (!rawData.persistent && rawData.clean) {
+        // Clean unused data if data source is typed array.
+        rawData.clean();
+    }
+
+    this._rawCount = this._count = end;
+
+    // Reset data extent
+    this._extent = {};
+
+    prepareInvertedIndex(this);
+};
+
+function prepareInvertedIndex(list) {
+    var invertedIndicesMap = list._invertedIndicesMap;
+    each$1(invertedIndicesMap, function (invertedIndices, dim) {
+        var dimInfo = list._dimensionInfos[dim];
+
+        // Currently, only dimensions that has ordinalMeta can create inverted indices.
+        var ordinalMeta = dimInfo.ordinalMeta;
+        if (ordinalMeta) {
+            invertedIndices = invertedIndicesMap[dim] = new CtorUint32Array(
+                ordinalMeta.categories.length
+            );
+            // The default value of TypedArray is 0. To avoid miss
+            // mapping to 0, we should set it as NaN.
+            for (var i = 0; i < invertedIndices.length; i++) {
+                invertedIndices[i] = NaN;
+            }
+            for (var i = 0; i < list._count; i++) {
+                // Only support the case that all values are distinct.
+                invertedIndices[list.get(dim, i)] = i;
+            }
+        }
+    });
+}
+
+function getRawValueFromStore(list, dimIndex, rawIndex) {
+    var val;
+    if (dimIndex != null) {
+        var chunkSize = list._chunkSize;
+        var chunkIndex = Math.floor(rawIndex / chunkSize);
+        var chunkOffset = rawIndex % chunkSize;
+        var dim = list.dimensions[dimIndex];
+        var chunk = list._storage[dim][chunkIndex];
+        if (chunk) {
+            val = chunk[chunkOffset];
+            var ordinalMeta = list._dimensionInfos[dim].ordinalMeta;
+            if (ordinalMeta && ordinalMeta.categories.length) {
+                val = ordinalMeta.categories[val];
+            }
+        }
+    }
+    return val;
+}
+
+/**
+ * @return {number}
+ */
+listProto.count = function () {
+    return this._count;
+};
+
+listProto.getIndices = function () {
+    var newIndices;
+
+    var indices = this._indices;
+    if (indices) {
+        var Ctor = indices.constructor;
+        var thisCount = this._count;
+        // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`.
+        if (Ctor === Array) {
+            newIndices = new Ctor(thisCount);
+            for (var i = 0; i < thisCount; i++) {
+                newIndices[i] = indices[i];
+            }
+        }
+        else {
+            newIndices = new Ctor(indices.buffer, 0, thisCount);
+        }
+    }
+    else {
+        var Ctor = getIndicesCtor(this);
+        var newIndices = new Ctor(this.count());
+        for (var i = 0; i < newIndices.length; i++) {
+            newIndices[i] = i;
+        }
+    }
+
+    return newIndices;
+};
+
+/**
+ * Get value. Return NaN if idx is out of range.
+ * @param {string} dim Dim must be concrete name.
+ * @param {number} idx
+ * @param {boolean} stack
+ * @return {number}
+ */
+listProto.get = function (dim, idx /*, stack */) {
+    if (!(idx >= 0 && idx < this._count)) {
+        return NaN;
+    }
+    var storage = this._storage;
+    if (!storage[dim]) {
+        // TODO Warn ?
+        return NaN;
+    }
+
+    idx = this.getRawIndex(idx);
+
+    var chunkIndex = Math.floor(idx / this._chunkSize);
+    var chunkOffset = idx % this._chunkSize;
+
+    var chunkStore = storage[dim][chunkIndex];
+    var value = chunkStore[chunkOffset];
+    // FIXME ordinal data type is not stackable
+    // if (stack) {
+    //     var dimensionInfo = this._dimensionInfos[dim];
+    //     if (dimensionInfo && dimensionInfo.stackable) {
+    //         var stackedOn = this.stackedOn;
+    //         while (stackedOn) {
+    //             // Get no stacked data of stacked on
+    //             var stackedValue = stackedOn.get(dim, idx);
+    //             // Considering positive stack, negative stack and empty data
+    //             if ((value >= 0 && stackedValue > 0)  // Positive stack
+    //                 || (value <= 0 && stackedValue < 0) // Negative stack
+    //             ) {
+    //                 value += stackedValue;
+    //             }
+    //             stackedOn = stackedOn.stackedOn;
+    //         }
+    //     }
+    // }
+
+    return value;
+};
+
+/**
+ * @param {string} dim concrete dim
+ * @param {number} rawIndex
+ * @return {number|string}
+ */
+listProto.getByRawIndex = function (dim, rawIdx) {
+    if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {
+        return NaN;
+    }
+    var dimStore = this._storage[dim];
+    if (!dimStore) {
+        // TODO Warn ?
+        return NaN;
+    }
+
+    var chunkIndex = Math.floor(rawIdx / this._chunkSize);
+    var chunkOffset = rawIdx % this._chunkSize;
+    var chunkStore = dimStore[chunkIndex];
+    return chunkStore[chunkOffset];
+};
+
+/**
+ * FIXME Use `get` on chrome maybe slow(in filterSelf and selectRange).
+ * Hack a much simpler _getFast
+ * @private
+ */
+listProto._getFast = function (dim, rawIdx) {
+    var chunkIndex = Math.floor(rawIdx / this._chunkSize);
+    var chunkOffset = rawIdx % this._chunkSize;
+    var chunkStore = this._storage[dim][chunkIndex];
+    return chunkStore[chunkOffset];
+};
+
+/**
+ * Get value for multi dimensions.
+ * @param {Array.<string>} [dimensions] If ignored, using all dimensions.
+ * @param {number} idx
+ * @return {number}
+ */
+listProto.getValues = function (dimensions, idx /*, stack */) {
+    var values = [];
+
+    if (!isArray(dimensions)) {
+        // stack = idx;
+        idx = dimensions;
+        dimensions = this.dimensions;
+    }
+
+    for (var i = 0, len = dimensions.length; i < len; i++) {
+        values.push(this.get(dimensions[i], idx /*, stack */));
+    }
+
+    return values;
+};
+
+/**
+ * If value is NaN. Inlcuding '-'
+ * Only check the coord dimensions.
+ * @param {string} dim
+ * @param {number} idx
+ * @return {number}
+ */
+listProto.hasValue = function (idx) {
+    var dataDimsOnCoord = this._dimensionsSummary.dataDimsOnCoord;
+    var dimensionInfos = this._dimensionInfos;
+    for (var i = 0, len = dataDimsOnCoord.length; i < len; i++) {
+        if (
+            // Ordinal type can be string or number
+            dimensionInfos[dataDimsOnCoord[i]].type !== 'ordinal'
+            // FIXME check ordinal when using index?
+            && isNaN(this.get(dataDimsOnCoord[i], idx))
+        ) {
+            return false;
+        }
+    }
+    return true;
+};
+
+/**
+ * Get extent of data in one dimension
+ * @param {string} dim
+ * @param {boolean} stack
+ */
+listProto.getDataExtent = function (dim /*, stack */) {
+    // Make sure use concrete dim as cache name.
+    dim = this.getDimension(dim);
+    var dimData = this._storage[dim];
+    var initialExtent = getInitialExtent();
+
+    // stack = !!((stack || false) && this.getCalculationInfo(dim));
+
+    if (!dimData) {
+        return initialExtent;
+    }
+
+    // Make more strict checkings to ensure hitting cache.
+    var currEnd = this.count();
+    // var cacheName = [dim, !!stack].join('_');
+    // var cacheName = dim;
+
+    // Consider the most cases when using data zoom, `getDataExtent`
+    // happened before filtering. We cache raw extent, which is not
+    // necessary to be cleared and recalculated when restore data.
+    var useRaw = !this._indices; // && !stack;
+    var dimExtent;
+
+    if (useRaw) {
+        return this._rawExtent[dim].slice();
+    }
+    dimExtent = this._extent[dim];
+    if (dimExtent) {
+        return dimExtent.slice();
+    }
+    dimExtent = initialExtent;
+
+    var min = dimExtent[0];
+    var max = dimExtent[1];
+
+    for (var i = 0; i < currEnd; i++) {
+        // var value = stack ? this.get(dim, i, true) : this._getFast(dim, this.getRawIndex(i));
+        var value = this._getFast(dim, this.getRawIndex(i));
+        value < min && (min = value);
+        value > max && (max = value);
+    }
+
+    dimExtent = [min, max];
+
+    this._extent[dim] = dimExtent;
+
+    return dimExtent;
+};
+
+/**
+ * Optimize for the scenario that data is filtered by a given extent.
+ * Consider that if data amount is more than hundreds of thousand,
+ * extent calculation will cost more than 10ms and the cache will
+ * be erased because of the filtering.
+ */
+listProto.getApproximateExtent = function (dim /*, stack */) {
+    dim = this.getDimension(dim);
+    return this._approximateExtent[dim] || this.getDataExtent(dim /*, stack */);
+};
+
+listProto.setApproximateExtent = function (extent, dim /*, stack */) {
+    dim = this.getDimension(dim);
+    this._approximateExtent[dim] = extent.slice();
+};
+
+/**
+ * @param {string} key
+ * @return {*}
+ */
+listProto.getCalculationInfo = function (key) {
+    return this._calculationInfo[key];
+};
+
+/**
+ * @param {string|Object} key or k-v object
+ * @param {*} [value]
+ */
+listProto.setCalculationInfo = function (key, value) {
+    isObject$4(key)
+        ? extend(this._calculationInfo, key)
+        : (this._calculationInfo[key] = value);
+};
+
+/**
+ * Get sum of data in one dimension
+ * @param {string} dim
+ */
+listProto.getSum = function (dim /*, stack */) {
+    var dimData = this._storage[dim];
+    var sum = 0;
+    if (dimData) {
+        for (var i = 0, len = this.count(); i < len; i++) {
+            var value = this.get(dim, i /*, stack */);
+            if (!isNaN(value)) {
+                sum += value;
+            }
+        }
+    }
+    return sum;
+};
+
+/**
+ * Get median of data in one dimension
+ * @param {string} dim
+ */
+listProto.getMedian = function (dim /*, stack */) {
+    var dimDataArray = [];
+    // map all data of one dimension
+    this.each(dim, function (val, idx) {
+        if (!isNaN(val)) {
+            dimDataArray.push(val);
+        }
+    });
+
+    // TODO
+    // Use quick select?
+
+    // immutability & sort
+    var sortedDimDataArray = [].concat(dimDataArray).sort(function(a, b) {
+        return a - b;
+    });
+    var len = this.count();
+    // calculate median
+    return len === 0 ? 0 :
+        len % 2 === 1 ? sortedDimDataArray[(len - 1) / 2] :
+            (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2;
+};
+
+// /**
+//  * Retreive the index with given value
+//  * @param {string} dim Concrete dimension.
+//  * @param {number} value
+//  * @return {number}
+//  */
+// Currently incorrect: should return dataIndex but not rawIndex.
+// Do not fix it until this method is to be used somewhere.
+// FIXME Precision of float value
+// listProto.indexOf = function (dim, value) {
+//     var storage = this._storage;
+//     var dimData = storage[dim];
+//     var chunkSize = this._chunkSize;
+//     if (dimData) {
+//         for (var i = 0, len = this.count(); i < len; i++) {
+//             var chunkIndex = Math.floor(i / chunkSize);
+//             var chunkOffset = i % chunkSize;
+//             if (dimData[chunkIndex][chunkOffset] === value) {
+//                 return i;
+//             }
+//         }
+//     }
+//     return -1;
+// };
+
+/**
+ * Only support the dimension which inverted index created.
+ * Do not support other cases until required.
+ * @param {string} concrete dim
+ * @param {number|string} value
+ * @return {number} rawIndex
+ */
+listProto.rawIndexOf = function (dim, value) {
+    var invertedIndices = dim && this._invertedIndicesMap[dim];
+    if (__DEV__) {
+        if (!invertedIndices) {
+            throw new Error('Do not supported yet');
+        }
+    }
+    var rawIndex = invertedIndices[value];
+    if (rawIndex == null || isNaN(rawIndex)) {
+        return -1;
+    }
+    return rawIndex;
+};
+
+/**
+ * Retreive the index with given name
+ * @param {number} idx
+ * @param {number} name
+ * @return {number}
+ */
+listProto.indexOfName = function (name) {
+    for (var i = 0, len = this.count(); i < len; i++) {
+        if (this.getName(i) === name) {
+            return i;
+        }
+    }
+
+    return -1;
+};
+
+/**
+ * Retreive the index with given raw data index
+ * @param {number} idx
+ * @param {number} name
+ * @return {number}
+ */
+listProto.indexOfRawIndex = function (rawIndex) {
+    if (!this._indices) {
+        return rawIndex;
+    }
+
+    if (rawIndex >= this._rawCount || rawIndex < 0) {
+        return -1;
+    }
+
+    // Indices are ascending
+    var indices = this._indices;
+
+    // If rawIndex === dataIndex
+    var rawDataIndex = indices[rawIndex];
+    if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {
+        return rawIndex;
+    }
+
+    var left = 0;
+    var right = this._count - 1;
+    while (left <= right) {
+        var mid = (left + right) / 2 | 0;
+        if (indices[mid] < rawIndex) {
+            left = mid + 1;
+        }
+        else if (indices[mid] > rawIndex) {
+            right = mid - 1;
+        }
+        else {
+            return mid;
+        }
+    }
+    return -1;
+};
+
+/**
+ * Retreive the index of nearest value
+ * @param {string} dim
+ * @param {number} value
+ * @param {number} [maxDistance=Infinity]
+ * @return {Array.<number>} Considere multiple points has the same value.
+ */
+listProto.indicesOfNearest = function (dim, value, maxDistance) {
+    var storage = this._storage;
+    var dimData = storage[dim];
+    var nearestIndices = [];
+
+    if (!dimData) {
+        return nearestIndices;
+    }
+
+    if (maxDistance == null) {
+        maxDistance = Infinity;
+    }
+
+    var minDist = Number.MAX_VALUE;
+    var minDiff = -1;
+    for (var i = 0, len = this.count(); i < len; i++) {
+        var diff = value - this.get(dim, i /*, stack */);
+        var dist = Math.abs(diff);
+        if (diff <= maxDistance && dist <= minDist) {
+            // For the case of two data are same on xAxis, which has sequence data.
+            // Show the nearest index
+            // https://github.com/ecomfe/echarts/issues/2869
+            if (dist < minDist || (diff >= 0 && minDiff < 0)) {
+                minDist = dist;
+                minDiff = diff;
+                nearestIndices.length = 0;
+            }
+            nearestIndices.push(i);
+        }
+    }
+    return nearestIndices;
+};
+
+/**
+ * Get raw data index
+ * @param {number} idx
+ * @return {number}
+ */
+listProto.getRawIndex = getRawIndexWithoutIndices;
+
+function getRawIndexWithoutIndices(idx) {
+    return idx;
+}
+
+function getRawIndexWithIndices(idx) {
+    if (idx < this._count && idx >= 0) {
+        return this._indices[idx];
+    }
+    return -1;
+}
+
+/**
+ * Get raw data item
+ * @param {number} idx
+ * @return {number}
+ */
+listProto.getRawDataItem = function (idx) {
+    if (!this._rawData.persistent) {
+        var val = [];
+        for (var i = 0; i < this.dimensions.length; i++) {
+            var dim = this.dimensions[i];
+            val.push(this.get(dim, idx));
+        }
+        return val;
+    }
+    else {
+        return this._rawData.getItem(this.getRawIndex(idx));
+    }
+};
+
+/**
+ * @param {number} idx
+ * @param {boolean} [notDefaultIdx=false]
+ * @return {string}
+ */
+listProto.getName = function (idx) {
+    var rawIndex = this.getRawIndex(idx);
+    return this._nameList[rawIndex]
+        || getRawValueFromStore(this, this._nameDimIdx, rawIndex)
+        || '';
+};
+
+/**
+ * @param {number} idx
+ * @param {boolean} [notDefaultIdx=false]
+ * @return {string}
+ */
+listProto.getId = function (idx) {
+    return getId(this, this.getRawIndex(idx));
+};
+
+function getId(list, rawIndex) {
+    var id = list._idList[rawIndex];
+    if (id == null) {
+        id = getRawValueFromStore(list, list._idDimIdx, rawIndex);
+    }
+    if (id == null) {
+        // FIXME Check the usage in graph, should not use prefix.
+        id = ID_PREFIX + rawIndex;
+    }
+    return id;
+}
+
+function normalizeDimensions(dimensions) {
+    if (!isArray(dimensions)) {
+        dimensions = [dimensions];
+    }
+    return dimensions;
+}
+
+function validateDimensions(list, dims) {
+    for (var i = 0; i < dims.length; i++) {
+        // stroage may be empty when no data, so use
+        // dimensionInfos to check.
+        if (!list._dimensionInfos[dims[i]]) {
+            console.error('Unkown dimension ' + dims[i]);
+        }
+    }
+}
+
+/**
+ * Data iteration
+ * @param {string|Array.<string>}
+ * @param {Function} cb
+ * @param {*} [context=this]
+ *
+ * @example
+ *  list.each('x', function (x, idx) {});
+ *  list.each(['x', 'y'], function (x, y, idx) {});
+ *  list.each(function (idx) {})
+ */
+listProto.each = function (dims, cb, context, contextCompat) {
+    'use strict';
+
+    if (!this._count) {
+        return;
+    }
+
+    if (typeof dims === 'function') {
+        contextCompat = context;
+        context = cb;
+        cb = dims;
+        dims = [];
+    }
+
+    // contextCompat just for compat echarts3
+    context = context || contextCompat || this;
+
+    dims = map(normalizeDimensions(dims), this.getDimension, this);
+
+    if (__DEV__) {
+        validateDimensions(this, dims);
+    }
+
+    var dimSize = dims.length;
+
+    for (var i = 0; i < this.count(); i++) {
+        // Simple optimization
+        switch (dimSize) {
+            case 0:
+                cb.call(context, i);
+                break;
+            case 1:
+                cb.call(context, this.get(dims[0], i), i);
+                break;
+            case 2:
+                cb.call(context, this.get(dims[0], i), this.get(dims[1], i), i);
+                break;
+            default:
+                var k = 0;
+                var value = [];
+                for (; k < dimSize; k++) {
+                    value[k] = this.get(dims[k], i);
+                }
+                // Index
+                value[k] = i;
+                cb.apply(context, value);
+        }
+    }
+};
+
+/**
+ * Data filter
+ * @param {string|Array.<string>}
+ * @param {Function} cb
+ * @param {*} [context=this]
+ */
+listProto.filterSelf = function (dimensions, cb, context, contextCompat) {
+    'use strict';
+
+    if (!this._count) {
+        return;
+    }
+
+    if (typeof dimensions === 'function') {
+        contextCompat = context;
+        context = cb;
+        cb = dimensions;
+        dimensions = [];
+    }
+
+    // contextCompat just for compat echarts3
+    context = context || contextCompat || this;
+
+    dimensions = map(
+        normalizeDimensions(dimensions), this.getDimension, this
+    );
+
+    if (__DEV__) {
+        validateDimensions(this, dimensions);
+    }
+
+
+    var count = this.count();
+    var Ctor = getIndicesCtor(this);
+    var newIndices = new Ctor(count);
+    var value = [];
+    var dimSize = dimensions.length;
+
+    var offset = 0;
+    var dim0 = dimensions[0];
+
+    for (var i = 0; i < count; i++) {
+        var keep;
+        var rawIdx = this.getRawIndex(i);
+        // Simple optimization
+        if (dimSize === 0) {
+            keep = cb.call(context, i);
+        }
+        else if (dimSize === 1) {
+            var val = this._getFast(dim0, rawIdx);
+            keep = cb.call(context, val, i);
+        }
+        else {
+            for (var k = 0; k < dimSize; k++) {
+                value[k] = this._getFast(dim0, rawIdx);
+            }
+            value[k] = i;
+            keep = cb.apply(context, value);
+        }
+        if (keep) {
+            newIndices[offset++] = rawIdx;
+        }
+    }
+
+    // Set indices after filtered.
+    if (offset < count) {
+        this._indices = newIndices;
+    }
+    this._count = offset;
+    // Reset data extent
+    this._extent = {};
+
+    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
+
+    return this;
+};
+
+/**
+ * Select data in range. (For optimization of filter)
+ * (Manually inline code, support 5 million data filtering in data zoom.)
+ */
+listProto.selectRange = function (range) {
+    'use strict';
+
+    if (!this._count) {
+        return;
+    }
+
+    var dimensions = [];
+    for (var dim in range) {
+        if (range.hasOwnProperty(dim)) {
+            dimensions.push(dim);
+        }
+    }
+
+    if (__DEV__) {
+        validateDimensions(this, dimensions);
+    }
+
+    var dimSize = dimensions.length;
+    if (!dimSize) {
+        return;
+    }
+
+    var originalCount = this.count();
+    var Ctor = getIndicesCtor(this);
+    var newIndices = new Ctor(originalCount);
+
+    var offset = 0;
+    var dim0 = dimensions[0];
+
+    var min = range[dim0][0];
+    var max = range[dim0][1];
+
+    var quickFinished = false;
+    if (!this._indices) {
+        // Extreme optimization for common case. About 2x faster in chrome.
+        var idx = 0;
+        if (dimSize === 1) {
+            var dimStorage = this._storage[dimensions[0]];
+            for (var k = 0; k < this._chunkCount; k++) {
+                var chunkStorage = dimStorage[k];
+                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);
+                for (var i = 0; i < len; i++) {
+                    var val = chunkStorage[i];
+                    // NaN will not be filtered. Consider the case, in line chart, empty
+                    // value indicates the line should be broken. But for the case like
+                    // scatter plot, a data item with empty value will not be rendered,
+                    // but the axis extent may be effected if some other dim of the data
+                    // item has value. Fortunately it is not a significant negative effect.
+                    if (
+                        (val >= min && val <= max) || isNaN(val)
+                    ) {
+                        newIndices[offset++] = idx;
+                    }
+                    idx++;
+                }
+            }
+            quickFinished = true;
+        }
+        else if (dimSize === 2) {
+            var dimStorage = this._storage[dim0];
+            var dimStorage2 = this._storage[dimensions[1]];
+            var min2 = range[dimensions[1]][0];
+            var max2 = range[dimensions[1]][1];
+            for (var k = 0; k < this._chunkCount; k++) {
+                var chunkStorage = dimStorage[k];
+                var chunkStorage2= dimStorage2[k];
+                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);
+                for (var i = 0; i < len; i++) {
+                    var val = chunkStorage[i];
+                    var val2 = chunkStorage2[i];
+                    // Do not filter NaN, see comment above.
+                    if ((
+                            (val >= min && val <= max) || isNaN(val)
+                        )
+                        && (
+                            (val2 >= min2 && val2 <= max2) || isNaN(val2)
+                        )
+                    ) {
+                        newIndices[offset++] = idx;
+                    }
+                    idx++;
+                }
+            }
+            quickFinished = true;
+        }
+    }
+    if (!quickFinished) {
+        if (dimSize === 1) {
+            for (var i = 0; i < originalCount; i++) {
+                var rawIndex = this.getRawIndex(i);
+                var val = this._getFast(dim0, rawIndex);
+                // Do not filter NaN, see comment above.
+                if (
+                    (val >= min && val <= max) || isNaN(val)
+                ) {
+                    newIndices[offset++] = rawIndex;
+                }
+            }
+        }
+        else {
+            for (var i = 0; i < originalCount; i++) {
+                var keep = true;
+                var rawIndex = this.getRawIndex(i);
+                for (var k = 0; k < dimSize; k++) {
+                    var dimk = dimensions[k];
+                    var val = this._getFast(dim, rawIndex);
+                    // Do not filter NaN, see comment above.
+                    if (val < range[dimk][0] || val > range[dimk][1]) {
+                        keep = false;
+                    }
+                }
+                if (keep) {
+                    newIndices[offset++] = this.getRawIndex(i);
+                }
+            }
+        }
+    }
+
+    // Set indices after filtered.
+    if (offset < originalCount) {
+        this._indices = newIndices;
+    }
+    this._count = offset;
+    // Reset data extent
+    this._extent = {};
+
+    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
+
+    return this;
+};
+
+/**
+ * Data mapping to a plain array
+ * @param {string|Array.<string>} [dimensions]
+ * @param {Function} cb
+ * @param {*} [context=this]
+ * @return {Array}
+ */
+listProto.mapArray = function (dimensions, cb, context, contextCompat) {
+    'use strict';
+
+    if (typeof dimensions === 'function') {
+        contextCompat = context;
+        context = cb;
+        cb = dimensions;
+        dimensions = [];
+    }
+
+    // contextCompat just for compat echarts3
+    context = context || contextCompat || this;
+
+    var result = [];
+    this.each(dimensions, function () {
+        result.push(cb && cb.apply(this, arguments));
+    }, context);
+    return result;
+};
+
+// Data in excludeDimensions is copied, otherwise transfered.
+function cloneListForMapAndSample(original, excludeDimensions) {
+    var allDimensions = original.dimensions;
+    var list = new List(
+        map(allDimensions, original.getDimensionInfo, original),
+        original.hostModel
+    );
+    // FIXME If needs stackedOn, value may already been stacked
+    transferProperties(list, original);
+
+    var storage = list._storage = {};
+    var originalStorage = original._storage;
+
+    // Init storage
+    for (var i = 0; i < allDimensions.length; i++) {
+        var dim = allDimensions[i];
+        if (originalStorage[dim]) {
+            // Notice that we do not reset invertedIndicesMap here, becuase
+            // there is no scenario of mapping or sampling ordinal dimension.
+            if (indexOf(excludeDimensions, dim) >= 0) {
+                storage[dim] = cloneDimStore(originalStorage[dim]);
+                list._rawExtent[dim] = getInitialExtent();
+                list._extent[dim] = null;
+            }
+            else {
+                // Direct reference for other dimensions
+                storage[dim] = originalStorage[dim];
+            }
+        }
+    }
+    return list;
+}
+
+function cloneDimStore(originalDimStore) {
+    var newDimStore = new Array(originalDimStore.length);
+    for (var j = 0; j < originalDimStore.length; j++) {
+        newDimStore[j] = cloneChunk(originalDimStore[j]);
+    }
+    return newDimStore;
+}
+
+function getInitialExtent() {
+    return [Infinity, -Infinity];
+}
+
+/**
+ * Data mapping to a new List with given dimensions
+ * @param {string|Array.<string>} dimensions
+ * @param {Function} cb
+ * @param {*} [context=this]
+ * @return {Array}
+ */
+listProto.map = function (dimensions, cb, context, contextCompat) {
+    'use strict';
+
+    // contextCompat just for compat echarts3
+    context = context || contextCompat || this;
+
+    dimensions = map(
+        normalizeDimensions(dimensions), this.getDimension, this
+    );
+
+    if (__DEV__) {
+        validateDimensions(this, dimensions);
+    }
+
+    var list = cloneListForMapAndSample(this, dimensions);
+
+    // Following properties are all immutable.
+    // So we can reference to the same value
+    list._indices = this._indices;
+    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
+
+    var storage = list._storage;
+
+    var tmpRetValue = [];
+    var chunkSize = this._chunkSize;
+    var dimSize = dimensions.length;
+    var dataCount = this.count();
+    var values = [];
+    var rawExtent = list._rawExtent;
+
+    for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {
+        for (var dimIndex = 0; dimIndex < dimSize; dimIndex++) {
+            values[dimIndex] = this.get(dimensions[dimIndex], dataIndex /*, stack */);
+        }
+        values[dimSize] = dataIndex;
+
+        var retValue = cb && cb.apply(context, values);
+        if (retValue != null) {
+            // a number or string (in oridinal dimension)?
+            if (typeof retValue !== 'object') {
+                tmpRetValue[0] = retValue;
+                retValue = tmpRetValue;
+            }
+
+            var rawIndex = this.getRawIndex(dataIndex);
+            var chunkIndex = Math.floor(rawIndex / chunkSize);
+            var chunkOffset = rawIndex % chunkSize;
+
+            for (var i = 0; i < retValue.length; i++) {
+                var dim = dimensions[i];
+                var val = retValue[i];
+                var rawExtentOnDim = rawExtent[dim];
+
+                var dimStore = storage[dim];
+                if (dimStore) {
+                    dimStore[chunkIndex][chunkOffset] = val;
+                }
+
+                if (val < rawExtentOnDim[0]) {
+                    rawExtentOnDim[0] = val;
+                }
+                if (val > rawExtentOnDim[1]) {
+                    rawExtentOnDim[1] = val;
+                }
+            }
+        }
+    }
+
+    return list;
+};
+
+/**
+ * Large data down sampling on given dimension
+ * @param {string} dimension
+ * @param {number} rate
+ * @param {Function} sampleValue
+ * @param {Function} sampleIndex Sample index for name and id
+ */
+listProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {
+    var list = cloneListForMapAndSample(this, [dimension]);
+    var targetStorage = list._storage;
+
+    var frameValues = [];
+    var frameSize = Math.floor(1 / rate);
+
+    var dimStore = targetStorage[dimension];
+    var len = this.count();
+    var chunkSize = this._chunkSize;
+    var rawExtentOnDim = list._rawExtent[dimension];
+
+    var newIndices = new (getIndicesCtor(this))(len);
+
+    var offset = 0;
+    for (var i = 0; i < len; i += frameSize) {
+        // Last frame
+        if (frameSize > len - i) {
+            frameSize = len - i;
+            frameValues.length = frameSize;
+        }
+        for (var k = 0; k < frameSize; k++) {
+            var dataIdx = this.getRawIndex(i + k);
+            var originalChunkIndex = Math.floor(dataIdx / chunkSize);
+            var originalChunkOffset = dataIdx % chunkSize;
+            frameValues[k] = dimStore[originalChunkIndex][originalChunkOffset];
+        }
+        var value = sampleValue(frameValues);
+        var sampleFrameIdx = this.getRawIndex(
+            Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)
+        );
+        var sampleChunkIndex = Math.floor(sampleFrameIdx / chunkSize);
+        var sampleChunkOffset = sampleFrameIdx % chunkSize;
+        // Only write value on the filtered data
+        dimStore[sampleChunkIndex][sampleChunkOffset] = value;
+
+        if (value < rawExtentOnDim[0]) {
+            rawExtentOnDim[0] = value;
+        }
+        if (value > rawExtentOnDim[1]) {
+            rawExtentOnDim[1] = value;
+        }
+
+        newIndices[offset++] = sampleFrameIdx;
+    }
+
+    list._count = offset;
+    list._indices = newIndices;
+
+    list.getRawIndex = getRawIndexWithIndices;
+
+    return list;
+};
+
+/**
+ * Get model of one data item.
+ *
+ * @param {number} idx
+ */
+// FIXME Model proxy ?
+listProto.getItemModel = function (idx) {
+    var hostModel = this.hostModel;
+    return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel);
+};
+
+/**
+ * Create a data differ
+ * @param {module:echarts/data/List} otherList
+ * @return {module:echarts/data/DataDiffer}
+ */
+listProto.diff = function (otherList) {
+    var thisList = this;
+
+    return new DataDiffer(
+        otherList ? otherList.getIndices() : [],
+        this.getIndices(),
+        function (idx) {
+            return getId(otherList, idx);
+        },
+        function (idx) {
+            return getId(thisList, idx);
+        }
+    );
+};
+/**
+ * Get visual property.
+ * @param {string} key
+ */
+listProto.getVisual = function (key) {
+    var visual = this._visual;
+    return visual && visual[key];
+};
+
+/**
+ * Set visual property
+ * @param {string|Object} key
+ * @param {*} [value]
+ *
+ * @example
+ *  setVisual('color', color);
+ *  setVisual({
+ *      'color': color
+ *  });
+ */
+listProto.setVisual = function (key, val) {
+    if (isObject$4(key)) {
+        for (var name in key) {
+            if (key.hasOwnProperty(name)) {
+                this.setVisual(name, key[name]);
+            }
+        }
+        return;
+    }
+    this._visual = this._visual || {};
+    this._visual[key] = val;
+};
+
+/**
+ * Set layout property.
+ * @param {string|Object} key
+ * @param {*} [val]
+ */
+listProto.setLayout = function (key, val) {
+    if (isObject$4(key)) {
+        for (var name in key) {
+            if (key.hasOwnProperty(name)) {
+                this.setLayout(name, key[name]);
+            }
+        }
+        return;
+    }
+    this._layout[key] = val;
+};
+
+/**
+ * Get layout property.
+ * @param  {string} key.
+ * @return {*}
+ */
+listProto.getLayout = function (key) {
+    return this._layout[key];
+};
+
+/**
+ * Get layout of single data item
+ * @param {number} idx
+ */
+listProto.getItemLayout = function (idx) {
+    return this._itemLayouts[idx];
+};
+
+/**
+ * Set layout of single data item
+ * @param {number} idx
+ * @param {Object} layout
+ * @param {boolean=} [merge=false]
+ */
+listProto.setItemLayout = function (idx, layout, merge$$1) {
+    this._itemLayouts[idx] = merge$$1
+        ? extend(this._itemLayouts[idx] || {}, layout)
+        : layout;
+};
+
+/**
+ * Clear all layout of single data item
+ */
+listProto.clearItemLayouts = function () {
+    this._itemLayouts.length = 0;
+};
+
+/**
+ * Get visual property of single data item
+ * @param {number} idx
+ * @param {string} key
+ * @param {boolean} [ignoreParent=false]
+ */
+listProto.getItemVisual = function (idx, key, ignoreParent) {
+    var itemVisual = this._itemVisuals[idx];
+    var val = itemVisual && itemVisual[key];
+    if (val == null && !ignoreParent) {
+        // Use global visual property
+        return this.getVisual(key);
+    }
+    return val;
+};
+
+/**
+ * Set visual property of single data item
+ *
+ * @param {number} idx
+ * @param {string|Object} key
+ * @param {*} [value]
+ *
+ * @example
+ *  setItemVisual(0, 'color', color);
+ *  setItemVisual(0, {
+ *      'color': color
+ *  });
+ */
+listProto.setItemVisual = function (idx, key, value) {
+    var itemVisual = this._itemVisuals[idx] || {};
+    var hasItemVisual = this.hasItemVisual;
+    this._itemVisuals[idx] = itemVisual;
+
+    if (isObject$4(key)) {
+        for (var name in key) {
+            if (key.hasOwnProperty(name)) {
+                itemVisual[name] = key[name];
+                hasItemVisual[name] = true;
+            }
+        }
+        return;
+    }
+    itemVisual[key] = value;
+    hasItemVisual[key] = true;
+};
+
+/**
+ * Clear itemVisuals and list visual.
+ */
+listProto.clearAllVisual = function () {
+    this._visual = {};
+    this._itemVisuals = [];
+    this.hasItemVisual = {};
+};
+
+var setItemDataAndSeriesIndex = function (child) {
+    child.seriesIndex = this.seriesIndex;
+    child.dataIndex = this.dataIndex;
+    child.dataType = this.dataType;
+};
+/**
+ * Set graphic element relative to data. It can be set as null
+ * @param {number} idx
+ * @param {module:zrender/Element} [el]
+ */
+listProto.setItemGraphicEl = function (idx, el) {
+    var hostModel = this.hostModel;
+
+    if (el) {
+        // Add data index and series index for indexing the data by element
+        // Useful in tooltip
+        el.dataIndex = idx;
+        el.dataType = this.dataType;
+        el.seriesIndex = hostModel && hostModel.seriesIndex;
+        if (el.type === 'group') {
+            el.traverse(setItemDataAndSeriesIndex, el);
+        }
+    }
+
+    this._graphicEls[idx] = el;
+};
+
+/**
+ * @param {number} idx
+ * @return {module:zrender/Element}
+ */
+listProto.getItemGraphicEl = function (idx) {
+    return this._graphicEls[idx];
+};
+
+/**
+ * @param {Function} cb
+ * @param {*} context
+ */
+listProto.eachItemGraphicEl = function (cb, context) {
+    each$1(this._graphicEls, function (el, idx) {
+        if (el) {
+            cb && cb.call(context, el, idx);
+        }
+    });
+};
+
+/**
+ * Shallow clone a new list except visual and layout properties, and graph elements.
+ * New list only change the indices.
+ */
+listProto.cloneShallow = function (list) {
+    if (!list) {
+        var dimensionInfoList = map(this.dimensions, this.getDimensionInfo, this);
+        list = new List(dimensionInfoList, this.hostModel);
+    }
+
+    // FIXME
+    list._storage = this._storage;
+
+    transferProperties(list, this);
+
+    // Clone will not change the data extent and indices
+    if (this._indices) {
+        var Ctor = this._indices.constructor;
+        list._indices = new Ctor(this._indices);
+    }
+    else {
+        list._indices = null;
+    }
+    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;
+
+    return list;
+};
+
+/**
+ * Wrap some method to add more feature
+ * @param {string} methodName
+ * @param {Function} injectFunction
+ */
+listProto.wrapMethod = function (methodName, injectFunction) {
+    var originalMethod = this[methodName];
+    if (typeof originalMethod !== 'function') {
+        return;
+    }
+    this.__wrappedMethods = this.__wrappedMethods || [];
+    this.__wrappedMethods.push(methodName);
+    this[methodName] = function () {
+        var res = originalMethod.apply(this, arguments);
+        return injectFunction.apply(this, [res].concat(slice(arguments)));
+    };
+};
+
+// Methods that create a new list based on this list should be listed here.
+// Notice that those method should `RETURN` the new list.
+listProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map'];
+// Methods that change indices of this list should be listed here.
+listProto.CHANGABLE_METHODS = ['filterSelf', 'selectRange'];
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @deprecated
+ * Use `echarts/data/helper/createDimensions` instead.
+ */
+
+/**
+ * @see {module:echarts/test/ut/spec/data/completeDimensions}
+ *
+ * Complete the dimensions array, by user defined `dimension` and `encode`,
+ * and guessing from the data structure.
+ * If no 'value' dimension specified, the first no-named dimension will be
+ * named as 'value'.
+ *
+ * @param {Array.<string>} sysDims Necessary dimensions, like ['x', 'y'], which
+ *      provides not only dim template, but also default order.
+ *      properties: 'name', 'type', 'displayName'.
+ *      `name` of each item provides default coord name.
+ *      [{dimsDef: [string|Object, ...]}, ...] dimsDef of sysDim item provides default dim name, and
+ *                                    provide dims count that the sysDim required.
+ *      [{ordinalMeta}] can be specified.
+ * @param {module:echarts/data/Source|Array|Object} source or data (for compatibal with pervious)
+ * @param {Object} [opt]
+ * @param {Array.<Object|string>} [opt.dimsDef] option.series.dimensions User defined dimensions
+ *      For example: ['asdf', {name, type}, ...].
+ * @param {Object|HashMap} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3}
+ * @param {string} [opt.generateCoord] Generate coord dim with the given name.
+ *                 If not specified, extra dim names will be:
+ *                 'value', 'value0', 'value1', ...
+ * @param {number} [opt.generateCoordCount] By default, the generated dim name is `generateCoord`.
+ *                 If `generateCoordCount` specified, the generated dim names will be:
+ *                 `generateCoord` + 0, `generateCoord` + 1, ...
+ *                 can be Infinity, indicate that use all of the remain columns.
+ * @param {number} [opt.dimCount] If not specified, guess by the first data item.
+ * @param {number} [opt.encodeDefaulter] If not specified, auto find the next available data dim.
+ * @return {Array.<Object>} [{
+ *      name: string mandatory,
+ *      displayName: string, the origin name in dimsDef, see source helper.
+ *                 If displayName given, the tooltip will displayed vertically.
+ *      coordDim: string mandatory,
+ *      coordDimIndex: number mandatory,
+ *      type: string optional,
+ *      otherDims: { never null/undefined
+ *          tooltip: number optional,
+ *          label: number optional,
+ *          itemName: number optional,
+ *          seriesName: number optional,
+ *      },
+ *      isExtraCoord: boolean true if coord is generated
+ *          (not specified in encode and not series specified)
+ *      other props ...
+ * }]
+ */
+function completeDimensions(sysDims, source, opt) {
+    if (!Source.isInstance(source)) {
+        source = Source.seriesDataToSource(source);
+    }
+
+    opt = opt || {};
+    sysDims = (sysDims || []).slice();
+    var dimsDef = (opt.dimsDef || []).slice();
+    var encodeDef = createHashMap(opt.encodeDef);
+    var dataDimNameMap = createHashMap();
+    var coordDimNameMap = createHashMap();
+    // var valueCandidate;
+    var result = [];
+
+    var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount);
+
+    // Apply user defined dims (`name` and `type`) and init result.
+    for (var i = 0; i < dimCount; i++) {
+        var dimDefItem = dimsDef[i] = extend(
+            {}, isObject$1(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]}
+        );
+        var userDimName = dimDefItem.name;
+        var resultItem = result[i] = {otherDims: {}};
+        // Name will be applied later for avoiding duplication.
+        if (userDimName != null && dataDimNameMap.get(userDimName) == null) {
+            // Only if `series.dimensions` is defined in option
+            // displayName, will be set, and dimension will be diplayed vertically in
+            // tooltip by default.
+            resultItem.name = resultItem.displayName = userDimName;
+            dataDimNameMap.set(userDimName, i);
+        }
+        dimDefItem.type != null && (resultItem.type = dimDefItem.type);
+        dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName);
+    }
+
+    // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`.
+    encodeDef.each(function (dataDims, coordDim) {
+        dataDims = normalizeToArray(dataDims).slice();
+        var validDataDims = encodeDef.set(coordDim, []);
+        each$1(dataDims, function (resultDimIdx, idx) {
+            // The input resultDimIdx can be dim name or index.
+            isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx));
+            if (resultDimIdx != null && resultDimIdx < dimCount) {
+                validDataDims[idx] = resultDimIdx;
+                applyDim(result[resultDimIdx], coordDim, idx);
+            }
+        });
+    });
+
+    // Apply templetes and default order from `sysDims`.
+    var availDimIdx = 0;
+    each$1(sysDims, function (sysDimItem, sysDimIndex) {
+        var coordDim;
+        var sysDimItem;
+        var sysDimItemDimsDef;
+        var sysDimItemOtherDims;
+        if (isString(sysDimItem)) {
+            coordDim = sysDimItem;
+            sysDimItem = {};
+        }
+        else {
+            coordDim = sysDimItem.name;
+            var ordinalMeta = sysDimItem.ordinalMeta;
+            sysDimItem.ordinalMeta = null;
+            sysDimItem = clone(sysDimItem);
+            sysDimItem.ordinalMeta = ordinalMeta;
+            // `coordDimIndex` should not be set directly.
+            sysDimItemDimsDef = sysDimItem.dimsDef;
+            sysDimItemOtherDims = sysDimItem.otherDims;
+            sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex
+                = sysDimItem.dimsDef = sysDimItem.otherDims = null;
+        }
+
+        var dataDims = normalizeToArray(encodeDef.get(coordDim));
+        // dimensions provides default dim sequences.
+        if (!dataDims.length) {
+            for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {
+                while (availDimIdx < result.length && result[availDimIdx].coordDim != null) {
+                    availDimIdx++;
+                }
+                availDimIdx < result.length && dataDims.push(availDimIdx++);
+            }
+        }
+
+        // Apply templates.
+        each$1(dataDims, function (resultDimIdx, coordDimIndex) {
+            var resultItem = result[resultDimIdx];
+            applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);
+            if (resultItem.name == null && sysDimItemDimsDef) {
+                var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];
+                !isObject$1(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {name: sysDimItemDimsDefItem});
+                resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name;
+                resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;
+            }
+            // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}
+            sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);
+        });
+    });
+
+    function applyDim(resultItem, coordDim, coordDimIndex) {
+        if (OTHER_DIMENSIONS.get(coordDim) != null) {
+            resultItem.otherDims[coordDim] = coordDimIndex;
+        }
+        else {
+            resultItem.coordDim = coordDim;
+            resultItem.coordDimIndex = coordDimIndex;
+            coordDimNameMap.set(coordDim, true);
+        }
+    }
+
+    // Make sure the first extra dim is 'value'.
+    var generateCoord = opt.generateCoord;
+    var generateCoordCount = opt.generateCoordCount;
+    var fromZero = generateCoordCount != null;
+    generateCoordCount = generateCoord ? (generateCoordCount || 1) : 0;
+    var extra = generateCoord || 'value';
+
+    // Set dim `name` and other `coordDim` and other props.
+    for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {
+        var resultItem = result[resultDimIdx] = result[resultDimIdx] || {};
+        var coordDim = resultItem.coordDim;
+
+        if (coordDim == null) {
+            resultItem.coordDim = genName(
+                extra, coordDimNameMap, fromZero
+            );
+            resultItem.coordDimIndex = 0;
+            if (!generateCoord || generateCoordCount <= 0) {
+                resultItem.isExtraCoord = true;
+            }
+            generateCoordCount--;
+        }
+
+        resultItem.name == null && (resultItem.name = genName(
+            resultItem.coordDim,
+            dataDimNameMap
+        ));
+
+        if (resultItem.type == null && guessOrdinal(source, resultDimIdx, resultItem.name)) {
+            resultItem.type = 'ordinal';
+        }
+    }
+
+    return result;
+}
+
+// ??? TODO
+// Originally detect dimCount by data[0]. Should we
+// optimize it to only by sysDims and dimensions and encode.
+// So only necessary dims will be initialized.
+// But
+// (1) custom series should be considered. where other dims
+// may be visited.
+// (2) sometimes user need to calcualte bubble size or use visualMap
+// on other dimensions besides coordSys needed.
+// So, dims that is not used by system, should be shared in storage?
+function getDimCount(source, sysDims, dimsDef, optDimCount) {
+    // Note that the result dimCount should not small than columns count
+    // of data, otherwise `dataDimNameMap` checking will be incorrect.
+    var dimCount = Math.max(
+        source.dimensionsDetectCount || 1,
+        sysDims.length,
+        dimsDef.length,
+        optDimCount || 0
+    );
+    each$1(sysDims, function (sysDimItem) {
+        var sysDimItemDimsDef = sysDimItem.dimsDef;
+        sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length));
+    });
+    return dimCount;
+}
+
+function genName(name, map$$1, fromZero) {
+    if (fromZero || map$$1.get(name) != null) {
+        var i = 0;
+        while (map$$1.get(name + i) != null) {
+            i++;
+        }
+        name += i;
+    }
+    map$$1.set(name, true);
+    return name;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Substitute `completeDimensions`.
+ * `completeDimensions` is to be deprecated.
+ */
+/**
+ * @param {module:echarts/data/Source|module:echarts/data/List} source or data.
+ * @param {Object|Array} [opt]
+ * @param {Array.<string|Object>} [opt.coordDimensions=[]]
+ * @param {number} [opt.dimensionsCount]
+ * @param {string} [opt.generateCoord]
+ * @param {string} [opt.generateCoordCount]
+ * @param {Array.<string|Object>} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define.
+ * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define.
+ * @return {Array.<Object>} dimensionsInfo
+ */
+var createDimensions = function (source, opt) {
+    opt = opt || {};
+    return completeDimensions(opt.coordDimensions || [], source, {
+        dimsDef: opt.dimensionsDefine || source.dimensionsDefine,
+        encodeDef: opt.encodeDefine || source.encodeDefine,
+        dimCount: opt.dimensionsCount,
+        generateCoord: opt.generateCoord,
+        generateCoordCount: opt.generateCoordCount
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Note that it is too complicated to support 3d stack by value
+ * (have to create two-dimension inverted index), so in 3d case
+ * we just support that stacked by index.
+ *
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {Array.<string|Object>} dimensionInfoList The same as the input of <module:echarts/data/List>.
+ *        The input dimensionInfoList will be modified.
+ * @param {Object} [opt]
+ * @param {boolean} [opt.stackedCoordDimension=''] Specify a coord dimension if needed.
+ * @param {boolean} [opt.byIndex=false]
+ * @return {Object} calculationInfo
+ * {
+ *     stackedDimension: string
+ *     stackedByDimension: string
+ *     isStackedByIndex: boolean
+ *     stackedOverDimension: string
+ *     stackResultDimension: string
+ * }
+ */
+function enableDataStack(seriesModel, dimensionInfoList, opt) {
+    opt = opt || {};
+    var byIndex = opt.byIndex;
+    var stackedCoordDimension = opt.stackedCoordDimension;
+
+    // Compatibal: when `stack` is set as '', do not stack.
+    var mayStack = !!(seriesModel && seriesModel.get('stack'));
+    var stackedByDimInfo;
+    var stackedDimInfo;
+    var stackResultDimension;
+    var stackedOverDimension;
+
+    each$1(dimensionInfoList, function (dimensionInfo, index) {
+        if (isString(dimensionInfo)) {
+            dimensionInfoList[index] = dimensionInfo = {name: dimensionInfo};
+        }
+
+        if (mayStack && !dimensionInfo.isExtraCoord) {
+            // Find the first ordinal dimension as the stackedByDimInfo.
+            if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {
+                stackedByDimInfo = dimensionInfo;
+            }
+            // Find the first stackable dimension as the stackedDimInfo.
+            if (!stackedDimInfo
+                && dimensionInfo.type !== 'ordinal'
+                && dimensionInfo.type !== 'time'
+                && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)
+            ) {
+                stackedDimInfo = dimensionInfo;
+            }
+        }
+    });
+
+    if (stackedDimInfo && !byIndex && !stackedByDimInfo) {
+        // Compatible with previous design, value axis (time axis) only stack by index.
+        // It may make sense if the user provides elaborately constructed data.
+        byIndex = true;
+    }
+
+    // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`.
+    // That put stack logic in List is for using conveniently in echarts extensions, but it
+    // might not be a good way.
+    if (stackedDimInfo) {
+        // Use a weird name that not duplicated with other names.
+        stackResultDimension = '__\0ecstackresult';
+        stackedOverDimension = '__\0ecstackedover';
+
+        // Create inverted index to fast query index by value.
+        if (stackedByDimInfo) {
+            stackedByDimInfo.createInvertedIndices = true;
+        }
+
+        var stackedDimCoordDim = stackedDimInfo.coordDim;
+        var stackedDimType = stackedDimInfo.type;
+        var stackedDimCoordIndex = 0;
+
+        each$1(dimensionInfoList, function (dimensionInfo) {
+            if (dimensionInfo.coordDim === stackedDimCoordDim) {
+                stackedDimCoordIndex++;
+            }
+        });
+
+        dimensionInfoList.push({
+            name: stackResultDimension,
+            coordDim: stackedDimCoordDim,
+            coordDimIndex: stackedDimCoordIndex,
+            type: stackedDimType,
+            isExtraCoord: true,
+            isCalculationCoord: true
+        });
+
+        stackedDimCoordIndex++;
+
+        dimensionInfoList.push({
+            name: stackedOverDimension,
+            // This dimension contains stack base (generally, 0), so do not set it as
+            // `stackedDimCoordDim` to avoid extent calculation, consider log scale.
+            coordDim: stackedOverDimension,
+            coordDimIndex: stackedDimCoordIndex,
+            type: stackedDimType,
+            isExtraCoord: true,
+            isCalculationCoord: true
+        });
+    }
+
+    return {
+        stackedDimension: stackedDimInfo && stackedDimInfo.name,
+        stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,
+        isStackedByIndex: byIndex,
+        stackedOverDimension: stackedOverDimension,
+        stackResultDimension: stackResultDimension
+    };
+}
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {string} stackedDim
+ */
+function isDimensionStacked(data, stackedDim /*, stackedByDim*/) {
+    // Each single series only maps to one pair of axis. So we do not need to
+    // check stackByDim, whatever stacked by a dimension or stacked by index.
+    return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension');
+        // && (
+        //     stackedByDim != null
+        //         ? stackedByDim === data.getCalculationInfo('stackedByDimension')
+        //         : data.getCalculationInfo('isStackedByIndex')
+        // );
+}
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {string} targetDim
+ * @param {string} [stackedByDim] If not input this parameter, check whether
+ *                                stacked by index.
+ * @return {string} dimension
+ */
+function getStackedDimension(data, targetDim) {
+    return isDimensionStacked(data, targetDim)
+        ? data.getCalculationInfo('stackResultDimension')
+        : targetDim;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/data/Source|Array} source Or raw data.
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {Object} [opt]
+ * @param {string} [opt.generateCoord]
+ */
+function createListFromArray(source, seriesModel, opt) {
+    opt = opt || {};
+
+    if (!Source.isInstance(source)) {
+        source = Source.seriesDataToSource(source);
+    }
+
+    var coordSysName = seriesModel.get('coordinateSystem');
+    var registeredCoordSys = CoordinateSystemManager.get(coordSysName);
+
+    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);
+
+    var coordSysDimDefs;
+
+    if (coordSysDefine) {
+        coordSysDimDefs = map(coordSysDefine.coordSysDims, function (dim) {
+            var dimInfo = {name: dim};
+            var axisModel = coordSysDefine.axisMap.get(dim);
+            if (axisModel) {
+                var axisType = axisModel.get('type');
+                dimInfo.type = getDimensionTypeByAxis(axisType);
+                // dimInfo.stackable = isStackable(axisType);
+            }
+            return dimInfo;
+        });
+    }
+
+    if (!coordSysDimDefs) {
+        // Get dimensions from registered coordinate system
+        coordSysDimDefs = (registeredCoordSys && (
+            registeredCoordSys.getDimensionsInfo
+                ? registeredCoordSys.getDimensionsInfo()
+                : registeredCoordSys.dimensions.slice()
+        )) || ['x', 'y'];
+    }
+
+    var dimInfoList = createDimensions(source, {
+        coordDimensions: coordSysDimDefs,
+        generateCoord: opt.generateCoord
+    });
+
+    var firstCategoryDimIndex;
+    var hasNameEncode;
+    coordSysDefine && each$1(dimInfoList, function (dimInfo, dimIndex) {
+        var coordDim = dimInfo.coordDim;
+        var categoryAxisModel = coordSysDefine.categoryAxisMap.get(coordDim);
+        if (categoryAxisModel) {
+            if (firstCategoryDimIndex == null) {
+                firstCategoryDimIndex = dimIndex;
+            }
+            dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();
+        }
+        if (dimInfo.otherDims.itemName != null) {
+            hasNameEncode = true;
+        }
+    });
+    if (!hasNameEncode && firstCategoryDimIndex != null) {
+        dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;
+    }
+
+    var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);
+
+    var list = new List(dimInfoList, seriesModel);
+
+    list.setCalculationInfo(stackCalculationInfo);
+
+    var dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source))
+        ? function (itemOpt, dimName, dataIndex, dimIndex) {
+            // Use dataIndex as ordinal value in categoryAxis
+            return dimIndex === firstCategoryDimIndex
+                ? dataIndex
+                : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);
+        }
+        : null;
+
+    list.hasItemOption = false;
+    list.initData(source, null, dimValueGetter);
+
+    return list;
+}
+
+function isNeedCompleteOrdinalData(source) {
+    if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {
+        var sampleItem = firstDataNotNull(source.data || []);
+        return sampleItem != null
+            && !isArray(getDataItemValue(sampleItem));
+    }
+}
+
+function firstDataNotNull(data) {
+    var i = 0;
+    while (i < data.length && data[i] == null) {
+        i++;
+    }
+    return data[i];
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * // Scale class management
+ * @module echarts/scale/Scale
+ */
+
+/**
+ * @param {Object} [setting]
+ */
+function Scale(setting) {
+    this._setting = setting || {};
+
+    /**
+     * Extent
+     * @type {Array.<number>}
+     * @protected
+     */
+    this._extent = [Infinity, -Infinity];
+
+    /**
+     * Step is calculated in adjustExtent
+     * @type {Array.<number>}
+     * @protected
+     */
+    this._interval = 0;
+
+    this.init && this.init.apply(this, arguments);
+}
+
+/**
+ * Parse input val to valid inner number.
+ * @param {*} val
+ * @return {number}
+ */
+Scale.prototype.parse = function (val) {
+    // Notice: This would be a trap here, If the implementation
+    // of this method depends on extent, and this method is used
+    // before extent set (like in dataZoom), it would be wrong.
+    // Nevertheless, parse does not depend on extent generally.
+    return val;
+};
+
+Scale.prototype.getSetting = function (name) {
+    return this._setting[name];
+};
+
+Scale.prototype.contain = function (val) {
+    var extent = this._extent;
+    return val >= extent[0] && val <= extent[1];
+};
+
+/**
+ * Normalize value to linear [0, 1], return 0.5 if extent span is 0
+ * @param {number} val
+ * @return {number}
+ */
+Scale.prototype.normalize = function (val) {
+    var extent = this._extent;
+    if (extent[1] === extent[0]) {
+        return 0.5;
+    }
+    return (val - extent[0]) / (extent[1] - extent[0]);
+};
+
+/**
+ * Scale normalized value
+ * @param {number} val
+ * @return {number}
+ */
+Scale.prototype.scale = function (val) {
+    var extent = this._extent;
+    return val * (extent[1] - extent[0]) + extent[0];
+};
+
+/**
+ * Set extent from data
+ * @param {Array.<number>} other
+ */
+Scale.prototype.unionExtent = function (other) {
+    var extent = this._extent;
+    other[0] < extent[0] && (extent[0] = other[0]);
+    other[1] > extent[1] && (extent[1] = other[1]);
+    // not setExtent because in log axis it may transformed to power
+    // this.setExtent(extent[0], extent[1]);
+};
+
+/**
+ * Set extent from data
+ * @param {module:echarts/data/List} data
+ * @param {string} dim
+ */
+Scale.prototype.unionExtentFromData = function (data, dim) {
+    this.unionExtent(data.getApproximateExtent(dim));
+};
+
+/**
+ * Get extent
+ * @return {Array.<number>}
+ */
+Scale.prototype.getExtent = function () {
+    return this._extent.slice();
+};
+
+/**
+ * Set extent
+ * @param {number} start
+ * @param {number} end
+ */
+Scale.prototype.setExtent = function (start, end) {
+    var thisExtent = this._extent;
+    if (!isNaN(start)) {
+        thisExtent[0] = start;
+    }
+    if (!isNaN(end)) {
+        thisExtent[1] = end;
+    }
+};
+
+/**
+ * When axis extent depends on data and no data exists,
+ * axis ticks should not be drawn, which is named 'blank'.
+ */
+Scale.prototype.isBlank = function () {
+    return this._isBlank;
+},
+
+/**
+ * When axis extent depends on data and no data exists,
+ * axis ticks should not be drawn, which is named 'blank'.
+ */
+Scale.prototype.setBlank = function (isBlank) {
+    this._isBlank = isBlank;
+};
+
+/**
+ * @abstract
+ * @param {*} tick
+ * @return {string} label of the tick.
+ */
+Scale.prototype.getLabel = null;
+
+
+enableClassExtend(Scale);
+enableClassManagement(Scale, {
+    registerWhenExtend: true
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @constructor
+ * @param {Object} [opt]
+ * @param {Object} [opt.categories=[]]
+ * @param {Object} [opt.needCollect=false]
+ * @param {Object} [opt.deduplication=false]
+ */
+function OrdinalMeta(opt) {
+
+    /**
+     * @readOnly
+     * @type {Array.<string>}
+     */
+    this.categories = opt.categories || [];
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._needCollect = opt.needCollect;
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._deduplication = opt.deduplication;
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._map;
+}
+
+/**
+ * @param {module:echarts/model/Model} axisModel
+ * @return {module:echarts/data/OrdinalMeta}
+ */
+OrdinalMeta.createByAxisModel = function (axisModel) {
+    var option = axisModel.option;
+    var data = option.data;
+    var categories = data && map(data, getName);
+
+    return new OrdinalMeta({
+        categories: categories,
+        needCollect: !categories,
+        // deduplication is default in axis.
+        deduplication: option.dedplication !== false
+    });
+};
+
+var proto$1 = OrdinalMeta.prototype;
+
+/**
+ * @param {string} category
+ * @return {number} ordinal
+ */
+proto$1.getOrdinal = function (category) {
+    return getOrCreateMap(this).get(category);
+};
+
+/**
+ * @param {*} category
+ * @return {number} The ordinal. If not found, return NaN.
+ */
+proto$1.parseAndCollect = function (category) {
+    var index;
+    var needCollect = this._needCollect;
+
+    // The value of category dim can be the index of the given category set.
+    // This feature is only supported when !needCollect, because we should
+    // consider a common case: a value is 2017, which is a number but is
+    // expected to be tread as a category. This case usually happen in dataset,
+    // where it happent to be no need of the index feature.
+    if (typeof category !== 'string' && !needCollect) {
+        return category;
+    }
+
+    // Optimize for the scenario:
+    // category is ['2012-01-01', '2012-01-02', ...], where the input
+    // data has been ensured not duplicate and is large data.
+    // Notice, if a dataset dimension provide categroies, usually echarts
+    // should remove duplication except user tell echarts dont do that
+    // (set axis.deduplication = false), because echarts do not know whether
+    // the values in the category dimension has duplication (consider the
+    // parallel-aqi example)
+    if (needCollect && !this._deduplication) {
+        index = this.categories.length;
+        this.categories[index] = category;
+        return index;
+    }
+
+    var map$$1 = getOrCreateMap(this);
+    index = map$$1.get(category);
+
+    if (index == null) {
+        if (needCollect) {
+            index = this.categories.length;
+            this.categories[index] = category;
+            map$$1.set(category, index);
+        }
+        else {
+            index = NaN;
+        }
+    }
+
+    return index;
+};
+
+// Consider big data, do not create map until needed.
+function getOrCreateMap(ordinalMeta) {
+    return ordinalMeta._map || (
+        ordinalMeta._map = createHashMap(ordinalMeta.categories)
+    );
+}
+
+function getName(obj) {
+    if (isObject$1(obj) && obj.value != null) {
+        return obj.value;
+    }
+    else {
+        return obj + '';
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Linear continuous scale
+ * @module echarts/coord/scale/Ordinal
+ *
+ * http://en.wikipedia.org/wiki/Level_of_measurement
+ */
+
+// FIXME only one data
+
+var scaleProto = Scale.prototype;
+
+var OrdinalScale = Scale.extend({
+
+    type: 'ordinal',
+
+    /**
+     * @param {module:echarts/data/OrdianlMeta|Array.<string>} ordinalMeta
+     */
+    init: function (ordinalMeta, extent) {
+        // Caution: Should not use instanceof, consider ec-extensions using
+        // import approach to get OrdinalMeta class.
+        if (!ordinalMeta || isArray(ordinalMeta)) {
+            ordinalMeta = new OrdinalMeta({categories: ordinalMeta});
+        }
+        this._ordinalMeta = ordinalMeta;
+        this._extent = extent || [0, ordinalMeta.categories.length - 1];
+    },
+
+    parse: function (val) {
+        return typeof val === 'string'
+            ? this._ordinalMeta.getOrdinal(val)
+            // val might be float.
+            : Math.round(val);
+    },
+
+    contain: function (rank) {
+        rank = this.parse(rank);
+        return scaleProto.contain.call(this, rank)
+            && this._ordinalMeta.categories[rank] != null;
+    },
+
+    /**
+     * Normalize given rank or name to linear [0, 1]
+     * @param {number|string} [val]
+     * @return {number}
+     */
+    normalize: function (val) {
+        return scaleProto.normalize.call(this, this.parse(val));
+    },
+
+    scale: function (val) {
+        return Math.round(scaleProto.scale.call(this, val));
+    },
+
+    /**
+     * @return {Array}
+     */
+    getTicks: function () {
+        var ticks = [];
+        var extent = this._extent;
+        var rank = extent[0];
+
+        while (rank <= extent[1]) {
+            ticks.push(rank);
+            rank++;
+        }
+
+        return ticks;
+    },
+
+    /**
+     * Get item on rank n
+     * @param {number} n
+     * @return {string}
+     */
+    getLabel: function (n) {
+        if (!this.isBlank()) {
+            // Note that if no data, ordinalMeta.categories is an empty array.
+            return this._ordinalMeta.categories[n];
+        }
+    },
+
+    /**
+     * @return {number}
+     */
+    count: function () {
+        return this._extent[1] - this._extent[0] + 1;
+    },
+
+    /**
+     * @override
+     */
+    unionExtentFromData: function (data, dim) {
+        this.unionExtent(data.getApproximateExtent(dim));
+    },
+
+    getOrdinalMeta: function () {
+        return this._ordinalMeta;
+    },
+
+    niceTicks: noop,
+    niceExtent: noop
+});
+
+/**
+ * @return {module:echarts/scale/Time}
+ */
+OrdinalScale.create = function () {
+    return new OrdinalScale();
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * For testable.
+ */
+
+var roundNumber$1 = round$1;
+
+/**
+ * @param {Array.<number>} extent Both extent[0] and extent[1] should be valid number.
+ *                                Should be extent[0] < extent[1].
+ * @param {number} splitNumber splitNumber should be >= 1.
+ * @param {number} [minInterval]
+ * @param {number} [maxInterval]
+ * @return {Object} {interval, intervalPrecision, niceTickExtent}
+ */
+function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {
+    var result = {};
+    var span = extent[1] - extent[0];
+
+    var interval = result.interval = nice(span / splitNumber, true);
+    if (minInterval != null && interval < minInterval) {
+        interval = result.interval = minInterval;
+    }
+    if (maxInterval != null && interval > maxInterval) {
+        interval = result.interval = maxInterval;
+    }
+    // Tow more digital for tick.
+    var precision = result.intervalPrecision = getIntervalPrecision(interval);
+    // Niced extent inside original extent
+    var niceTickExtent = result.niceTickExtent = [
+        roundNumber$1(Math.ceil(extent[0] / interval) * interval, precision),
+        roundNumber$1(Math.floor(extent[1] / interval) * interval, precision)
+    ];
+
+    fixExtent(niceTickExtent, extent);
+
+    return result;
+}
+
+/**
+ * @param {number} interval
+ * @return {number} interval precision
+ */
+function getIntervalPrecision(interval) {
+    // Tow more digital for tick.
+    return getPrecisionSafe(interval) + 2;
+}
+
+function clamp(niceTickExtent, idx, extent) {
+    niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);
+}
+
+// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.
+function fixExtent(niceTickExtent, extent) {
+    !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);
+    !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);
+    clamp(niceTickExtent, 0, extent);
+    clamp(niceTickExtent, 1, extent);
+    if (niceTickExtent[0] > niceTickExtent[1]) {
+        niceTickExtent[0] = niceTickExtent[1];
+    }
+}
+
+function intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) {
+    var ticks = [];
+
+    // If interval is 0, return [];
+    if (!interval) {
+        return ticks;
+    }
+
+    // Consider this case: using dataZoom toolbox, zoom and zoom.
+    var safeLimit = 10000;
+
+    if (extent[0] < niceTickExtent[0]) {
+        ticks.push(extent[0]);
+    }
+    var tick = niceTickExtent[0];
+
+    while (tick <= niceTickExtent[1]) {
+        ticks.push(tick);
+        // Avoid rounding error
+        tick = roundNumber$1(tick + interval, intervalPrecision);
+        if (tick === ticks[ticks.length - 1]) {
+            // Consider out of safe float point, e.g.,
+            // -3711126.9907707 + 2e-10 === -3711126.9907707
+            break;
+        }
+        if (ticks.length > safeLimit) {
+            return [];
+        }
+    }
+    // Consider this case: the last item of ticks is smaller
+    // than niceTickExtent[1] and niceTickExtent[1] === extent[1].
+    if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {
+        ticks.push(extent[1]);
+    }
+
+    return ticks;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Interval scale
+ * @module echarts/scale/Interval
+ */
+
+
+var roundNumber = round$1;
+
+/**
+ * @alias module:echarts/coord/scale/Interval
+ * @constructor
+ */
+var IntervalScale = Scale.extend({
+
+    type: 'interval',
+
+    _interval: 0,
+
+    _intervalPrecision: 2,
+
+    setExtent: function (start, end) {
+        var thisExtent = this._extent;
+        //start,end may be a Number like '25',so...
+        if (!isNaN(start)) {
+            thisExtent[0] = parseFloat(start);
+        }
+        if (!isNaN(end)) {
+            thisExtent[1] = parseFloat(end);
+        }
+    },
+
+    unionExtent: function (other) {
+        var extent = this._extent;
+        other[0] < extent[0] && (extent[0] = other[0]);
+        other[1] > extent[1] && (extent[1] = other[1]);
+
+        // unionExtent may called by it's sub classes
+        IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]);
+    },
+    /**
+     * Get interval
+     */
+    getInterval: function () {
+        return this._interval;
+    },
+
+    /**
+     * Set interval
+     */
+    setInterval: function (interval) {
+        this._interval = interval;
+        // Dropped auto calculated niceExtent and use user setted extent
+        // We assume user wan't to set both interval, min, max to get a better result
+        this._niceExtent = this._extent.slice();
+
+        this._intervalPrecision = getIntervalPrecision(interval);
+    },
+
+    /**
+     * @return {Array.<number>}
+     */
+    getTicks: function () {
+        return intervalScaleGetTicks(
+            this._interval, this._extent, this._niceExtent, this._intervalPrecision
+        );
+    },
+
+    /**
+     * @param {number} data
+     * @param {Object} [opt]
+     * @param {number|string} [opt.precision] If 'auto', use nice presision.
+     * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2.
+     * @return {string}
+     */
+    getLabel: function (data, opt) {
+        if (data == null) {
+            return '';
+        }
+
+        var precision = opt && opt.precision;
+
+        if (precision == null) {
+            precision = getPrecisionSafe(data) || 0;
+        }
+        else if (precision === 'auto') {
+            // Should be more precise then tick.
+            precision = this._intervalPrecision;
+        }
+
+        // (1) If `precision` is set, 12.005 should be display as '12.00500'.
+        // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.
+        data = roundNumber(data, precision, true);
+
+        return addCommas(data);
+    },
+
+    /**
+     * Update interval and extent of intervals for nice ticks
+     *
+     * @param {number} [splitNumber = 5] Desired number of ticks
+     * @param {number} [minInterval]
+     * @param {number} [maxInterval]
+     */
+    niceTicks: function (splitNumber, minInterval, maxInterval) {
+        splitNumber = splitNumber || 5;
+        var extent = this._extent;
+        var span = extent[1] - extent[0];
+        if (!isFinite(span)) {
+            return;
+        }
+        // User may set axis min 0 and data are all negative
+        // FIXME If it needs to reverse ?
+        if (span < 0) {
+            span = -span;
+            extent.reverse();
+        }
+
+        var result = intervalScaleNiceTicks(
+            extent, splitNumber, minInterval, maxInterval
+        );
+
+        this._intervalPrecision = result.intervalPrecision;
+        this._interval = result.interval;
+        this._niceExtent = result.niceTickExtent;
+    },
+
+    /**
+     * Nice extent.
+     * @param {Object} opt
+     * @param {number} [opt.splitNumber = 5] Given approx tick number
+     * @param {boolean} [opt.fixMin=false]
+     * @param {boolean} [opt.fixMax=false]
+     * @param {boolean} [opt.minInterval]
+     * @param {boolean} [opt.maxInterval]
+     */
+    niceExtent: function (opt) {
+        var extent = this._extent;
+        // If extent start and end are same, expand them
+        if (extent[0] === extent[1]) {
+            if (extent[0] !== 0) {
+                // Expand extent
+                var expandSize = extent[0];
+                // In the fowllowing case
+                //      Axis has been fixed max 100
+                //      Plus data are all 100 and axis extent are [100, 100].
+                // Extend to the both side will cause expanded max is larger than fixed max.
+                // So only expand to the smaller side.
+                if (!opt.fixMax) {
+                    extent[1] += expandSize / 2;
+                    extent[0] -= expandSize / 2;
+                }
+                else {
+                    extent[0] -= expandSize / 2;
+                }
+            }
+            else {
+                extent[1] = 1;
+            }
+        }
+        var span = extent[1] - extent[0];
+        // If there are no data and extent are [Infinity, -Infinity]
+        if (!isFinite(span)) {
+            extent[0] = 0;
+            extent[1] = 1;
+        }
+
+        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);
+
+        // var extent = this._extent;
+        var interval = this._interval;
+
+        if (!opt.fixMin) {
+            extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);
+        }
+        if (!opt.fixMax) {
+            extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);
+        }
+    }
+});
+
+/**
+ * @return {module:echarts/scale/Time}
+ */
+IntervalScale.create = function () {
+    return new IntervalScale();
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var STACK_PREFIX = '__ec_stack_';
+var LARGE_BAR_MIN_WIDTH = 0.5;
+
+var LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;
+
+function getSeriesStackId(seriesModel) {
+    return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;
+}
+
+function getAxisKey(axis) {
+    return axis.dim + axis.index;
+}
+
+/**
+ * @param {Object} opt
+ * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.
+ * @param {number} opt.count Positive interger.
+ * @param {number} [opt.barWidth]
+ * @param {number} [opt.barMaxWidth]
+ * @param {number} [opt.barGap]
+ * @param {number} [opt.barCategoryGap]
+ * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.
+ */
+function getLayoutOnAxis(opt) {
+    var params = [];
+    var baseAxis = opt.axis;
+    var axisKey = 'axis0';
+
+    if (baseAxis.type !== 'category') {
+        return;
+    }
+    var bandWidth = baseAxis.getBandWidth();
+
+    for (var i = 0; i < opt.count || 0; i++) {
+        params.push(defaults({
+            bandWidth: bandWidth,
+            axisKey: axisKey,
+            stackId: STACK_PREFIX + i
+        }, opt));
+    }
+    var widthAndOffsets = doCalBarWidthAndOffset(params);
+
+    var result = [];
+    for (var i = 0; i < opt.count; i++) {
+        var item = widthAndOffsets[axisKey][STACK_PREFIX + i];
+        item.offsetCenter = item.offset + item.width / 2;
+        result.push(item);
+    }
+
+    return result;
+}
+
+function prepareLayoutBarSeries(seriesType, ecModel) {
+    var seriesModels = [];
+    ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+        // Check series coordinate, do layout for cartesian2d only
+        if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {
+            seriesModels.push(seriesModel);
+        }
+    });
+    return seriesModels;
+}
+
+function makeColumnLayout(barSeries) {
+    var seriesInfoList = [];
+    each$1(barSeries, function (seriesModel) {
+        var data = seriesModel.getData();
+        var cartesian = seriesModel.coordinateSystem;
+        var baseAxis = cartesian.getBaseAxis();
+        var axisExtent = baseAxis.getExtent();
+        var bandWidth = baseAxis.type === 'category'
+            ? baseAxis.getBandWidth()
+            : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
+
+        var barWidth = parsePercent$1(
+            seriesModel.get('barWidth'), bandWidth
+        );
+        var barMaxWidth = parsePercent$1(
+            seriesModel.get('barMaxWidth'), bandWidth
+        );
+        var barGap = seriesModel.get('barGap');
+        var barCategoryGap = seriesModel.get('barCategoryGap');
+
+        seriesInfoList.push({
+            bandWidth: bandWidth,
+            barWidth: barWidth,
+            barMaxWidth: barMaxWidth,
+            barGap: barGap,
+            barCategoryGap: barCategoryGap,
+            axisKey: getAxisKey(baseAxis),
+            stackId: getSeriesStackId(seriesModel)
+        });
+    });
+
+    return doCalBarWidthAndOffset(seriesInfoList);
+}
+
+function doCalBarWidthAndOffset(seriesInfoList) {
+    // Columns info on each category axis. Key is cartesian name
+    var columnsMap = {};
+
+    each$1(seriesInfoList, function (seriesInfo, idx) {
+        var axisKey = seriesInfo.axisKey;
+        var bandWidth = seriesInfo.bandWidth;
+        var columnsOnAxis = columnsMap[axisKey] || {
+            bandWidth: bandWidth,
+            remainedWidth: bandWidth,
+            autoWidthCount: 0,
+            categoryGap: '20%',
+            gap: '30%',
+            stacks: {}
+        };
+        var stacks = columnsOnAxis.stacks;
+        columnsMap[axisKey] = columnsOnAxis;
+
+        var stackId = seriesInfo.stackId;
+
+        if (!stacks[stackId]) {
+            columnsOnAxis.autoWidthCount++;
+        }
+        stacks[stackId] = stacks[stackId] || {
+            width: 0,
+            maxWidth: 0
+        };
+
+        // Caution: In a single coordinate system, these barGrid attributes
+        // will be shared by series. Consider that they have default values,
+        // only the attributes set on the last series will work.
+        // Do not change this fact unless there will be a break change.
+
+        // TODO
+        var barWidth = seriesInfo.barWidth;
+        if (barWidth && !stacks[stackId].width) {
+            // See #6312, do not restrict width.
+            stacks[stackId].width = barWidth;
+            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
+            columnsOnAxis.remainedWidth -= barWidth;
+        }
+
+        var barMaxWidth = seriesInfo.barMaxWidth;
+        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
+        var barGap = seriesInfo.barGap;
+        (barGap != null) && (columnsOnAxis.gap = barGap);
+        var barCategoryGap = seriesInfo.barCategoryGap;
+        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
+    });
+
+    var result = {};
+
+    each$1(columnsMap, function (columnsOnAxis, coordSysName) {
+
+        result[coordSysName] = {};
+
+        var stacks = columnsOnAxis.stacks;
+        var bandWidth = columnsOnAxis.bandWidth;
+        var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth);
+        var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1);
+
+        var remainedWidth = columnsOnAxis.remainedWidth;
+        var autoWidthCount = columnsOnAxis.autoWidthCount;
+        var autoWidth = (remainedWidth - categoryGap)
+            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
+        autoWidth = Math.max(autoWidth, 0);
+
+        // Find if any auto calculated bar exceeded maxBarWidth
+        each$1(stacks, function (column, stack) {
+            var maxWidth = column.maxWidth;
+            if (maxWidth && maxWidth < autoWidth) {
+                maxWidth = Math.min(maxWidth, remainedWidth);
+                if (column.width) {
+                    maxWidth = Math.min(maxWidth, column.width);
+                }
+                remainedWidth -= maxWidth;
+                column.width = maxWidth;
+                autoWidthCount--;
+            }
+        });
+
+        // Recalculate width again
+        autoWidth = (remainedWidth - categoryGap)
+            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
+        autoWidth = Math.max(autoWidth, 0);
+
+        var widthSum = 0;
+        var lastColumn;
+        each$1(stacks, function (column, idx) {
+            if (!column.width) {
+                column.width = autoWidth;
+            }
+            lastColumn = column;
+            widthSum += column.width * (1 + barGapPercent);
+        });
+        if (lastColumn) {
+            widthSum -= lastColumn.width * barGapPercent;
+        }
+
+        var offset = -widthSum / 2;
+        each$1(stacks, function (column, stackId) {
+            result[coordSysName][stackId] = result[coordSysName][stackId] || {
+                offset: offset,
+                width: column.width
+            };
+
+            offset += column.width * (1 + barGapPercent);
+        });
+    });
+
+    return result;
+}
+
+/**
+ * @param {Object} barWidthAndOffset The result of makeColumnLayout
+ * @param {module:echarts/coord/Axis} axis
+ * @param {module:echarts/model/Series} [seriesModel] If not provided, return all.
+ * @return {Object} {stackId: {offset, width}} or {offset, width} if seriesModel provided.
+ */
+function retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {
+    if (barWidthAndOffset && axis) {
+        var result = barWidthAndOffset[getAxisKey(axis)];
+        if (result != null && seriesModel != null) {
+            result = result[getSeriesStackId(seriesModel)];
+        }
+        return result;
+    }
+}
+
+/**
+ * @param {string} seriesType
+ * @param {module:echarts/model/Global} ecModel
+ */
+function layout(seriesType, ecModel) {
+
+    var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);
+    var barWidthAndOffset = makeColumnLayout(seriesModels);
+
+    var lastStackCoords = {};
+    each$1(seriesModels, function (seriesModel) {
+
+        var data = seriesModel.getData();
+        var cartesian = seriesModel.coordinateSystem;
+        var baseAxis = cartesian.getBaseAxis();
+
+        var stackId = getSeriesStackId(seriesModel);
+        var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];
+        var columnOffset = columnLayoutInfo.offset;
+        var columnWidth = columnLayoutInfo.width;
+        var valueAxis = cartesian.getOtherAxis(baseAxis);
+
+        var barMinHeight = seriesModel.get('barMinHeight') || 0;
+
+        lastStackCoords[stackId] = lastStackCoords[stackId] || [];
+        data.setLayout({
+            offset: columnOffset,
+            size: columnWidth
+        });
+
+        var valueDim = data.mapDimension(valueAxis.dim);
+        var baseDim = data.mapDimension(baseAxis.dim);
+        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);
+        var isValueAxisH = valueAxis.isHorizontal();
+
+        var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked);
+
+        for (var idx = 0, len = data.count(); idx < len; idx++) {
+            var value = data.get(valueDim, idx);
+            var baseValue = data.get(baseDim, idx);
+
+            if (isNaN(value)) {
+                continue;
+            }
+
+            var sign = value >= 0 ? 'p' : 'n';
+            var baseCoord = valueAxisStart;
+
+            // Because of the barMinHeight, we can not use the value in
+            // stackResultDimension directly.
+            if (stacked) {
+                // Only ordinal axis can be stacked.
+                if (!lastStackCoords[stackId][baseValue]) {
+                    lastStackCoords[stackId][baseValue] = {
+                        p: valueAxisStart, // Positive stack
+                        n: valueAxisStart  // Negative stack
+                    };
+                }
+                // Should also consider #4243
+                baseCoord = lastStackCoords[stackId][baseValue][sign];
+            }
+
+            var x;
+            var y;
+            var width;
+            var height;
+
+            if (isValueAxisH) {
+                var coord = cartesian.dataToPoint([value, baseValue]);
+                x = baseCoord;
+                y = coord[1] + columnOffset;
+                width = coord[0] - valueAxisStart;
+                height = columnWidth;
+
+                if (Math.abs(width) < barMinHeight) {
+                    width = (width < 0 ? -1 : 1) * barMinHeight;
+                }
+                stacked && (lastStackCoords[stackId][baseValue][sign] += width);
+            }
+            else {
+                var coord = cartesian.dataToPoint([baseValue, value]);
+                x = coord[0] + columnOffset;
+                y = baseCoord;
+                width = columnWidth;
+                height = coord[1] - valueAxisStart;
+
+                if (Math.abs(height) < barMinHeight) {
+                    // Include zero to has a positive bar
+                    height = (height <= 0 ? -1 : 1) * barMinHeight;
+                }
+                stacked && (lastStackCoords[stackId][baseValue][sign] += height);
+            }
+
+            data.setItemLayout(idx, {
+                x: x,
+                y: y,
+                width: width,
+                height: height
+            });
+        }
+
+    }, this);
+}
+
+// TODO: Do not support stack in large mode yet.
+var largeLayout = {
+
+    seriesType: 'bar',
+
+    plan: createRenderPlanner(),
+
+    reset: function (seriesModel) {
+        if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) {
+            return;
+        }
+
+        var data = seriesModel.getData();
+        var cartesian = seriesModel.coordinateSystem;
+        var baseAxis = cartesian.getBaseAxis();
+        var valueAxis = cartesian.getOtherAxis(baseAxis);
+        var valueDim = data.mapDimension(valueAxis.dim);
+        var baseDim = data.mapDimension(baseAxis.dim);
+        var valueAxisHorizontal = valueAxis.isHorizontal();
+        var valueDimIdx = valueAxisHorizontal ? 0 : 1;
+
+        var barWidth = retrieveColumnLayout(
+            makeColumnLayout([seriesModel]), baseAxis, seriesModel
+        ).width;
+        if (!(barWidth > LARGE_BAR_MIN_WIDTH)) { // jshint ignore:line
+            barWidth = LARGE_BAR_MIN_WIDTH;
+        }
+
+        return {progress: progress};
+
+        function progress(params, data) {
+            var largePoints = new LargeArr(params.count * 2);
+            var dataIndex;
+            var coord = [];
+            var valuePair = [];
+            var offset = 0;
+
+            while ((dataIndex = params.next()) != null) {
+                valuePair[valueDimIdx] = data.get(valueDim, dataIndex);
+                valuePair[1 - valueDimIdx] = data.get(baseDim, dataIndex);
+
+                coord = cartesian.dataToPoint(valuePair, null, coord);
+                largePoints[offset++] = coord[0];
+                largePoints[offset++] = coord[1];
+            }
+
+            data.setLayout({
+                largePoints: largePoints,
+                barWidth: barWidth,
+                valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),
+                valueAxisHorizontal: valueAxisHorizontal
+            });
+        }
+    }
+};
+
+function isOnCartesian(seriesModel) {
+    return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';
+}
+
+function isInLargeMode(seriesModel) {
+    return seriesModel.pipelineContext && seriesModel.pipelineContext.large;
+}
+
+function getValueAxisStart(baseAxis, valueAxis, stacked) {
+    return (
+        indexOf(baseAxis.getAxesOnZeroOf(), valueAxis) >= 0
+        || stacked
+    )
+    ? valueAxis.toGlobalCoord(valueAxis.dataToCoord(0))
+    : valueAxis.getGlobalExtent()[0];
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* The `scaleLevels` references to d3.js. The use of the source
+* code of this file is also subject to the terms and consitions
+* of its license (BSD-3Clause, see <echarts/src/licenses/LICENSE-d3>).
+*/
+
+// [About UTC and local time zone]:
+// In most cases, `number.parseDate` will treat input data string as local time
+// (except time zone is specified in time string). And `format.formateTime` returns
+// local time by default. option.useUTC is false by default. This design have
+// concidered these common case:
+// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed
+// in local time by default.
+// (2) By default, the input data string (e.g., '2011-01-02') should be displayed
+// as its original time, without any time difference.
+
+var intervalScaleProto = IntervalScale.prototype;
+
+var mathCeil = Math.ceil;
+var mathFloor = Math.floor;
+var ONE_SECOND = 1000;
+var ONE_MINUTE = ONE_SECOND * 60;
+var ONE_HOUR = ONE_MINUTE * 60;
+var ONE_DAY = ONE_HOUR * 24;
+
+// FIXME 公用?
+var bisect = function (a, x, lo, hi) {
+    while (lo < hi) {
+        var mid = lo + hi >>> 1;
+        if (a[mid][1] < x) {
+            lo = mid + 1;
+        }
+        else {
+            hi  = mid;
+        }
+    }
+    return lo;
+};
+
+/**
+ * @alias module:echarts/coord/scale/Time
+ * @constructor
+ */
+var TimeScale = IntervalScale.extend({
+    type: 'time',
+
+    /**
+     * @override
+     */
+    getLabel: function (val) {
+        var stepLvl = this._stepLvl;
+
+        var date = new Date(val);
+
+        return formatTime(stepLvl[0], date, this.getSetting('useUTC'));
+    },
+
+    /**
+     * @override
+     */
+    niceExtent: function (opt) {
+        var extent = this._extent;
+        // If extent start and end are same, expand them
+        if (extent[0] === extent[1]) {
+            // Expand extent
+            extent[0] -= ONE_DAY;
+            extent[1] += ONE_DAY;
+        }
+        // If there are no data and extent are [Infinity, -Infinity]
+        if (extent[1] === -Infinity && extent[0] === Infinity) {
+            var d = new Date();
+            extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());
+            extent[0] = extent[1] - ONE_DAY;
+        }
+
+        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);
+
+        // var extent = this._extent;
+        var interval = this._interval;
+
+        if (!opt.fixMin) {
+            extent[0] = round$1(mathFloor(extent[0] / interval) * interval);
+        }
+        if (!opt.fixMax) {
+            extent[1] = round$1(mathCeil(extent[1] / interval) * interval);
+        }
+    },
+
+    /**
+     * @override
+     */
+    niceTicks: function (approxTickNum, minInterval, maxInterval) {
+        approxTickNum = approxTickNum || 10;
+
+        var extent = this._extent;
+        var span = extent[1] - extent[0];
+        var approxInterval = span / approxTickNum;
+
+        if (minInterval != null && approxInterval < minInterval) {
+            approxInterval = minInterval;
+        }
+        if (maxInterval != null && approxInterval > maxInterval) {
+            approxInterval = maxInterval;
+        }
+
+        var scaleLevelsLen = scaleLevels.length;
+        var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen);
+
+        var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];
+        var interval = level[1];
+        // Same with interval scale if span is much larger than 1 year
+        if (level[0] === 'year') {
+            var yearSpan = span / interval;
+
+            // From "Nice Numbers for Graph Labels" of Graphic Gems
+            // var niceYearSpan = numberUtil.nice(yearSpan, false);
+            var yearStep = nice(yearSpan / approxTickNum, true);
+
+            interval *= yearStep;
+        }
+
+        var timezoneOffset = this.getSetting('useUTC')
+            ? 0 : (new Date(+extent[0] || +extent[1])).getTimezoneOffset() * 60 * 1000;
+        var niceExtent = [
+            Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset),
+            Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)
+        ];
+
+        fixExtent(niceExtent, extent);
+
+        this._stepLvl = level;
+        // Interval will be used in getTicks
+        this._interval = interval;
+        this._niceExtent = niceExtent;
+    },
+
+    parse: function (val) {
+        // val might be float.
+        return +parseDate(val);
+    }
+});
+
+each$1(['contain', 'normalize'], function (methodName) {
+    TimeScale.prototype[methodName] = function (val) {
+        return intervalScaleProto[methodName].call(this, this.parse(val));
+    };
+});
+
+// Steps from d3, see the license statement at the top of this file.
+var scaleLevels = [
+    // Format              interval
+    ['hh:mm:ss', ONE_SECOND],          // 1s
+    ['hh:mm:ss', ONE_SECOND * 5],      // 5s
+    ['hh:mm:ss', ONE_SECOND * 10],     // 10s
+    ['hh:mm:ss', ONE_SECOND * 15],     // 15s
+    ['hh:mm:ss', ONE_SECOND * 30],     // 30s
+    ['hh:mm\nMM-dd', ONE_MINUTE],      // 1m
+    ['hh:mm\nMM-dd', ONE_MINUTE * 5],  // 5m
+    ['hh:mm\nMM-dd', ONE_MINUTE * 10], // 10m
+    ['hh:mm\nMM-dd', ONE_MINUTE * 15], // 15m
+    ['hh:mm\nMM-dd', ONE_MINUTE * 30], // 30m
+    ['hh:mm\nMM-dd', ONE_HOUR],        // 1h
+    ['hh:mm\nMM-dd', ONE_HOUR * 2],    // 2h
+    ['hh:mm\nMM-dd', ONE_HOUR * 6],    // 6h
+    ['hh:mm\nMM-dd', ONE_HOUR * 12],   // 12h
+    ['MM-dd\nyyyy', ONE_DAY],          // 1d
+    ['MM-dd\nyyyy', ONE_DAY * 2],      // 2d
+    ['MM-dd\nyyyy', ONE_DAY * 3],      // 3d
+    ['MM-dd\nyyyy', ONE_DAY * 4],      // 4d
+    ['MM-dd\nyyyy', ONE_DAY * 5],      // 5d
+    ['MM-dd\nyyyy', ONE_DAY * 6],      // 6d
+    ['week', ONE_DAY * 7],             // 7d
+    ['MM-dd\nyyyy', ONE_DAY * 10],     // 10d
+    ['week', ONE_DAY * 14],            // 2w
+    ['week', ONE_DAY * 21],            // 3w
+    ['month', ONE_DAY * 31],           // 1M
+    ['week', ONE_DAY * 42],            // 6w
+    ['month', ONE_DAY * 62],           // 2M
+    ['week', ONE_DAY * 42],            // 10w
+    ['quarter', ONE_DAY * 380 / 4],    // 3M
+    ['month', ONE_DAY * 31 * 4],       // 4M
+    ['month', ONE_DAY * 31 * 5],       // 5M
+    ['half-year', ONE_DAY * 380 / 2],  // 6M
+    ['month', ONE_DAY * 31 * 8],       // 8M
+    ['month', ONE_DAY * 31 * 10],      // 10M
+    ['year', ONE_DAY * 380]            // 1Y
+];
+
+/**
+ * @param {module:echarts/model/Model}
+ * @return {module:echarts/scale/Time}
+ */
+TimeScale.create = function (model) {
+    return new TimeScale({useUTC: model.ecModel.get('useUTC')});
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Log scale
+ * @module echarts/scale/Log
+ */
+
+// Use some method of IntervalScale
+var scaleProto$1 = Scale.prototype;
+var intervalScaleProto$1 = IntervalScale.prototype;
+
+var getPrecisionSafe$1 = getPrecisionSafe;
+var roundingErrorFix = round$1;
+
+var mathFloor$1 = Math.floor;
+var mathCeil$1 = Math.ceil;
+var mathPow$1 = Math.pow;
+
+var mathLog = Math.log;
+
+var LogScale = Scale.extend({
+
+    type: 'log',
+
+    base: 10,
+
+    $constructor: function () {
+        Scale.apply(this, arguments);
+        this._originalScale = new IntervalScale();
+    },
+
+    /**
+     * @return {Array.<number>}
+     */
+    getTicks: function () {
+        var originalScale = this._originalScale;
+        var extent = this._extent;
+        var originalExtent = originalScale.getExtent();
+
+        return map(intervalScaleProto$1.getTicks.call(this), function (val) {
+            var powVal = round$1(mathPow$1(this.base, val));
+
+            // Fix #4158
+            powVal = (val === extent[0] && originalScale.__fixMin)
+                ? fixRoundingError(powVal, originalExtent[0])
+                : powVal;
+            powVal = (val === extent[1] && originalScale.__fixMax)
+                ? fixRoundingError(powVal, originalExtent[1])
+                : powVal;
+
+            return powVal;
+        }, this);
+    },
+
+    /**
+     * @param {number} val
+     * @return {string}
+     */
+    getLabel: intervalScaleProto$1.getLabel,
+
+    /**
+     * @param  {number} val
+     * @return {number}
+     */
+    scale: function (val) {
+        val = scaleProto$1.scale.call(this, val);
+        return mathPow$1(this.base, val);
+    },
+
+    /**
+     * @param {number} start
+     * @param {number} end
+     */
+    setExtent: function (start, end) {
+        var base = this.base;
+        start = mathLog(start) / mathLog(base);
+        end = mathLog(end) / mathLog(base);
+        intervalScaleProto$1.setExtent.call(this, start, end);
+    },
+
+    /**
+     * @return {number} end
+     */
+    getExtent: function () {
+        var base = this.base;
+        var extent = scaleProto$1.getExtent.call(this);
+        extent[0] = mathPow$1(base, extent[0]);
+        extent[1] = mathPow$1(base, extent[1]);
+
+        // Fix #4158
+        var originalScale = this._originalScale;
+        var originalExtent = originalScale.getExtent();
+        originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));
+        originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));
+
+        return extent;
+    },
+
+    /**
+     * @param  {Array.<number>} extent
+     */
+    unionExtent: function (extent) {
+        this._originalScale.unionExtent(extent);
+
+        var base = this.base;
+        extent[0] = mathLog(extent[0]) / mathLog(base);
+        extent[1] = mathLog(extent[1]) / mathLog(base);
+        scaleProto$1.unionExtent.call(this, extent);
+    },
+
+    /**
+     * @override
+     */
+    unionExtentFromData: function (data, dim) {
+        // TODO
+        // filter value that <= 0
+        this.unionExtent(data.getApproximateExtent(dim));
+    },
+
+    /**
+     * Update interval and extent of intervals for nice ticks
+     * @param  {number} [approxTickNum = 10] Given approx tick number
+     */
+    niceTicks: function (approxTickNum) {
+        approxTickNum = approxTickNum || 10;
+        var extent = this._extent;
+        var span = extent[1] - extent[0];
+        if (span === Infinity || span <= 0) {
+            return;
+        }
+
+        var interval = quantity(span);
+        var err = approxTickNum / span * interval;
+
+        // Filter ticks to get closer to the desired count.
+        if (err <= 0.5) {
+            interval *= 10;
+        }
+
+        // Interval should be integer
+        while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {
+            interval *= 10;
+        }
+
+        var niceExtent = [
+            round$1(mathCeil$1(extent[0] / interval) * interval),
+            round$1(mathFloor$1(extent[1] / interval) * interval)
+        ];
+
+        this._interval = interval;
+        this._niceExtent = niceExtent;
+    },
+
+    /**
+     * Nice extent.
+     * @override
+     */
+    niceExtent: function (opt) {
+        intervalScaleProto$1.niceExtent.call(this, opt);
+
+        var originalScale = this._originalScale;
+        originalScale.__fixMin = opt.fixMin;
+        originalScale.__fixMax = opt.fixMax;
+    }
+
+});
+
+each$1(['contain', 'normalize'], function (methodName) {
+    LogScale.prototype[methodName] = function (val) {
+        val = mathLog(val) / mathLog(this.base);
+        return scaleProto$1[methodName].call(this, val);
+    };
+});
+
+LogScale.create = function () {
+    return new LogScale();
+};
+
+function fixRoundingError(val, originalVal) {
+    return roundingErrorFix(val, getPrecisionSafe$1(originalVal));
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Get axis scale extent before niced.
+ * Item of returned array can only be number (including Infinity and NaN).
+ */
+function getScaleExtent(scale, model) {
+    var scaleType = scale.type;
+
+    var min = model.getMin();
+    var max = model.getMax();
+    var fixMin = min != null;
+    var fixMax = max != null;
+    var originalExtent = scale.getExtent();
+
+    var axisDataLen;
+    var boundaryGap;
+    var span;
+    if (scaleType === 'ordinal') {
+        axisDataLen = model.getCategories().length;
+    }
+    else {
+        boundaryGap = model.get('boundaryGap');
+        if (!isArray(boundaryGap)) {
+            boundaryGap = [boundaryGap || 0, boundaryGap || 0];
+        }
+        if (typeof boundaryGap[0] === 'boolean') {
+            if (__DEV__) {
+                console.warn('Boolean type for boundaryGap is only '
+                    + 'allowed for ordinal axis. Please use string in '
+                    + 'percentage instead, e.g., "20%". Currently, '
+                    + 'boundaryGap is set to be 0.');
+            }
+            boundaryGap = [0, 0];
+        }
+        boundaryGap[0] = parsePercent$1(boundaryGap[0], 1);
+        boundaryGap[1] = parsePercent$1(boundaryGap[1], 1);
+        span = (originalExtent[1] - originalExtent[0])
+            || Math.abs(originalExtent[0]);
+    }
+
+    // Notice: When min/max is not set (that is, when there are null/undefined,
+    // which is the most common case), these cases should be ensured:
+    // (1) For 'ordinal', show all axis.data.
+    // (2) For others:
+    //      + `boundaryGap` is applied (if min/max set, boundaryGap is
+    //      disabled).
+    //      + If `needCrossZero`, min/max should be zero, otherwise, min/max should
+    //      be the result that originalExtent enlarged by boundaryGap.
+    // (3) If no data, it should be ensured that `scale.setBlank` is set.
+
+    // FIXME
+    // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used?
+    // (2) When `needCrossZero` and all data is positive/negative, should it be ensured
+    // that the results processed by boundaryGap are positive/negative?
+
+    if (min == null) {
+        min = scaleType === 'ordinal'
+            ? (axisDataLen ? 0 : NaN)
+            : originalExtent[0] - boundaryGap[0] * span;
+    }
+    if (max == null) {
+        max = scaleType === 'ordinal'
+            ? (axisDataLen ? axisDataLen - 1 : NaN)
+            : originalExtent[1] + boundaryGap[1] * span;
+    }
+
+    if (min === 'dataMin') {
+        min = originalExtent[0];
+    }
+    else if (typeof min === 'function') {
+        min = min({
+            min: originalExtent[0],
+            max: originalExtent[1]
+        });
+    }
+
+    if (max === 'dataMax') {
+        max = originalExtent[1];
+    }
+    else if (typeof max === 'function') {
+        max = max({
+            min: originalExtent[0],
+            max: originalExtent[1]
+        });
+    }
+
+    (min == null || !isFinite(min)) && (min = NaN);
+    (max == null || !isFinite(max)) && (max = NaN);
+
+    scale.setBlank(
+        eqNaN(min)
+        || eqNaN(max)
+        || (scaleType === 'ordinal' && !scale.getOrdinalMeta().categories.length)
+    );
+
+    // Evaluate if axis needs cross zero
+    if (model.getNeedCrossZero()) {
+        // Axis is over zero and min is not set
+        if (min > 0 && max > 0 && !fixMin) {
+            min = 0;
+        }
+        // Axis is under zero and max is not set
+        if (min < 0 && max < 0 && !fixMax) {
+            max = 0;
+        }
+    }
+
+    // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis
+    // is base axis
+    // FIXME
+    // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly.
+    // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent?
+    //     Should not depend on series type `bar`?
+    // (3) Fix that might overlap when using dataZoom.
+    // (4) Consider other chart types using `barGrid`?
+    // See #6728, #4862, `test/bar-overflow-time-plot.html`
+    var ecModel = model.ecModel;
+    if (ecModel && (scaleType === 'time' /*|| scaleType === 'interval' */)) {
+        var barSeriesModels = prepareLayoutBarSeries('bar', ecModel);
+        var isBaseAxisAndHasBarSeries;
+
+        each$1(barSeriesModels, function (seriesModel) {
+            isBaseAxisAndHasBarSeries |= seriesModel.getBaseAxis() === model.axis;
+        });
+
+        if (isBaseAxisAndHasBarSeries) {
+            // Calculate placement of bars on axis
+            var barWidthAndOffset = makeColumnLayout(barSeriesModels);
+
+            // Adjust axis min and max to account for overflow
+            var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset);
+            min = adjustedScale.min;
+            max = adjustedScale.max;
+        }
+    }
+
+    return [min, max];
+}
+
+function adjustScaleForOverflow(min, max, model, barWidthAndOffset) {
+
+    // Get Axis Length
+    var axisExtent = model.axis.getExtent();
+    var axisLength = axisExtent[1] - axisExtent[0];
+
+    // Get bars on current base axis and calculate min and max overflow
+    var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);
+    if (barsOnCurrentAxis === undefined) {
+        return {min: min, max: max};
+    }
+
+    var minOverflow = Infinity;
+    each$1(barsOnCurrentAxis, function (item) {
+        minOverflow = Math.min(item.offset, minOverflow);
+    });
+    var maxOverflow = -Infinity;
+    each$1(barsOnCurrentAxis, function (item) {
+        maxOverflow = Math.max(item.offset + item.width, maxOverflow);
+    });
+    minOverflow = Math.abs(minOverflow);
+    maxOverflow = Math.abs(maxOverflow);
+    var totalOverFlow = minOverflow + maxOverflow;
+
+    // Calulate required buffer based on old range and overflow
+    var oldRange = max - min;
+    var oldRangePercentOfNew = (1 - (minOverflow + maxOverflow) / axisLength);
+    var overflowBuffer = ((oldRange / oldRangePercentOfNew) - oldRange);
+
+    max += overflowBuffer * (maxOverflow / totalOverFlow);
+    min -= overflowBuffer * (minOverflow / totalOverFlow);
+
+    return {min: min, max: max};
+}
+
+function niceScaleExtent(scale, model) {
+    var extent = getScaleExtent(scale, model);
+    var fixMin = model.getMin() != null;
+    var fixMax = model.getMax() != null;
+    var splitNumber = model.get('splitNumber');
+
+    if (scale.type === 'log') {
+        scale.base = model.get('logBase');
+    }
+
+    var scaleType = scale.type;
+    scale.setExtent(extent[0], extent[1]);
+    scale.niceExtent({
+        splitNumber: splitNumber,
+        fixMin: fixMin,
+        fixMax: fixMax,
+        minInterval: (scaleType === 'interval' || scaleType === 'time')
+            ? model.get('minInterval') : null,
+        maxInterval: (scaleType === 'interval' || scaleType === 'time')
+            ? model.get('maxInterval') : null
+    });
+
+    // If some one specified the min, max. And the default calculated interval
+    // is not good enough. He can specify the interval. It is often appeared
+    // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard
+    // to be 60.
+    // FIXME
+    var interval = model.get('interval');
+    if (interval != null) {
+        scale.setInterval && scale.setInterval(interval);
+    }
+}
+
+/**
+ * @param {module:echarts/model/Model} model
+ * @param {string} [axisType] Default retrieve from model.type
+ * @return {module:echarts/scale/*}
+ */
+function createScaleByModel(model, axisType) {
+    axisType = axisType || model.get('type');
+    if (axisType) {
+        switch (axisType) {
+            // Buildin scale
+            case 'category':
+                return new OrdinalScale(
+                    model.getOrdinalMeta
+                        ? model.getOrdinalMeta()
+                        : model.getCategories(),
+                    [Infinity, -Infinity]
+                );
+            case 'value':
+                return new IntervalScale();
+            // Extended scale, like time and log
+            default:
+                return (Scale.getClass(axisType) || IntervalScale).create(model);
+        }
+    }
+}
+
+/**
+ * Check if the axis corss 0
+ */
+function ifAxisCrossZero(axis) {
+    var dataExtent = axis.scale.getExtent();
+    var min = dataExtent[0];
+    var max = dataExtent[1];
+    return !((min > 0 && max > 0) || (min < 0 && max < 0));
+}
+
+/**
+ * @param {module:echarts/coord/Axis} axis
+ * @return {Function} Label formatter function.
+ *         param: {number} tickValue,
+ *         param: {number} idx, the index in all ticks.
+ *                         If category axis, this param is not requied.
+ *         return: {string} label string.
+ */
+function makeLabelFormatter(axis) {
+    var labelFormatter = axis.getLabelModel().get('formatter');
+    var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null;
+
+    if (typeof labelFormatter === 'string') {
+        labelFormatter = (function (tpl) {
+            return function (val) {
+                return tpl.replace('{value}', val != null ? val : '');
+            };
+        })(labelFormatter);
+        // Consider empty array
+        return labelFormatter;
+    }
+    else if (typeof labelFormatter === 'function') {
+        return function (tickValue, idx) {
+            // The original intention of `idx` is "the index of the tick in all ticks".
+            // But the previous implementation of category axis do not consider the
+            // `axisLabel.interval`, which cause that, for example, the `interval` is
+            // `1`, then the ticks "name5", "name7", "name9" are displayed, where the
+            // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep
+            // the definition here for back compatibility.
+            if (categoryTickStart != null) {
+                idx = tickValue - categoryTickStart;
+            }
+            return labelFormatter(getAxisRawValue(axis, tickValue), idx);
+        };
+    }
+    else {
+        return function (tick) {
+            return axis.scale.getLabel(tick);
+        };
+    }
+}
+
+function getAxisRawValue(axis, value) {
+    // In category axis with data zoom, tick is not the original
+    // index of axis.data. So tick should not be exposed to user
+    // in category axis.
+    return axis.type === 'category' ? axis.scale.getLabel(value) : value;
+}
+
+/**
+ * @param {module:echarts/coord/Axis} axis
+ * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels.
+ */
+function estimateLabelUnionRect(axis) {
+    var axisModel = axis.model;
+    var scale = axis.scale;
+
+    if (!axisModel.get('axisLabel.show') || scale.isBlank()) {
+        return;
+    }
+
+    var isCategory = axis.type === 'category';
+
+    var realNumberScaleTicks;
+    var tickCount;
+    var categoryScaleExtent = scale.getExtent();
+
+    // Optimize for large category data, avoid call `getTicks()`.
+    if (isCategory) {
+        tickCount = scale.count();
+    }
+    else {
+        realNumberScaleTicks = scale.getTicks();
+        tickCount = realNumberScaleTicks.length;
+    }
+
+    var axisLabelModel = axis.getLabelModel();
+    var labelFormatter = makeLabelFormatter(axis);
+
+    var rect;
+    var step = 1;
+    // Simple optimization for large amount of labels
+    if (tickCount > 40) {
+        step = Math.ceil(tickCount / 40);
+    }
+    for (var i = 0; i < tickCount; i += step) {
+        var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i;
+        var label = labelFormatter(tickValue);
+        var unrotatedSingleRect = axisLabelModel.getTextRect(label);
+        var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);
+
+        rect ? rect.union(singleRect) : (rect = singleRect);
+    }
+
+    return rect;
+}
+
+function rotateTextRect(textRect, rotate) {
+    var rotateRadians = rotate * Math.PI / 180;
+    var boundingBox = textRect.plain();
+    var beforeWidth = boundingBox.width;
+    var beforeHeight = boundingBox.height;
+    var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians);
+    var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians);
+    var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight);
+
+    return rotatedRect;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var axisModelCommonMixin = {
+
+    /**
+     * @param {boolean} origin
+     * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN
+     */
+    getMin: function (origin) {
+        var option = this.option;
+        var min = (!origin && option.rangeStart != null)
+            ? option.rangeStart : option.min;
+
+        if (this.axis
+            && min != null
+            && min !== 'dataMin'
+            && typeof min !== 'function'
+            && !eqNaN(min)
+        ) {
+            min = this.axis.scale.parse(min);
+        }
+        return min;
+    },
+
+    /**
+     * @param {boolean} origin
+     * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN
+     */
+    getMax: function (origin) {
+        var option = this.option;
+        var max = (!origin && option.rangeEnd != null)
+            ? option.rangeEnd : option.max;
+
+        if (this.axis
+            && max != null
+            && max !== 'dataMax'
+            && typeof max !== 'function'
+            && !eqNaN(max)
+        ) {
+            max = this.axis.scale.parse(max);
+        }
+        return max;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    getNeedCrossZero: function () {
+        var option = this.option;
+        return (option.rangeStart != null || option.rangeEnd != null)
+            ? false : !option.scale;
+    },
+
+    /**
+     * Should be implemented by each axis model if necessary.
+     * @return {module:echarts/model/Component} coordinate system model
+     */
+    getCoordSysModel: noop,
+
+    /**
+     * @param {number} rangeStart Can only be finite number or null/undefined or NaN.
+     * @param {number} rangeEnd Can only be finite number or null/undefined or NaN.
+     */
+    setRange: function (rangeStart, rangeEnd) {
+        this.option.rangeStart = rangeStart;
+        this.option.rangeEnd = rangeEnd;
+    },
+
+    /**
+     * Reset range
+     */
+    resetRange: function () {
+        // rangeStart and rangeEnd is readonly.
+        this.option.rangeStart = this.option.rangeEnd = null;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Symbol factory
+
+/**
+ * Triangle shape
+ * @inner
+ */
+var Triangle = extendShape({
+    type: 'triangle',
+    shape: {
+        cx: 0,
+        cy: 0,
+        width: 0,
+        height: 0
+    },
+    buildPath: function (path, shape) {
+        var cx = shape.cx;
+        var cy = shape.cy;
+        var width = shape.width / 2;
+        var height = shape.height / 2;
+        path.moveTo(cx, cy - height);
+        path.lineTo(cx + width, cy + height);
+        path.lineTo(cx - width, cy + height);
+        path.closePath();
+    }
+});
+
+/**
+ * Diamond shape
+ * @inner
+ */
+var Diamond = extendShape({
+    type: 'diamond',
+    shape: {
+        cx: 0,
+        cy: 0,
+        width: 0,
+        height: 0
+    },
+    buildPath: function (path, shape) {
+        var cx = shape.cx;
+        var cy = shape.cy;
+        var width = shape.width / 2;
+        var height = shape.height / 2;
+        path.moveTo(cx, cy - height);
+        path.lineTo(cx + width, cy);
+        path.lineTo(cx, cy + height);
+        path.lineTo(cx - width, cy);
+        path.closePath();
+    }
+});
+
+/**
+ * Pin shape
+ * @inner
+ */
+var Pin = extendShape({
+    type: 'pin',
+    shape: {
+        // x, y on the cusp
+        x: 0,
+        y: 0,
+        width: 0,
+        height: 0
+    },
+
+    buildPath: function (path, shape) {
+        var x = shape.x;
+        var y = shape.y;
+        var w = shape.width / 5 * 3;
+        // Height must be larger than width
+        var h = Math.max(w, shape.height);
+        var r = w / 2;
+
+        // Dist on y with tangent point and circle center
+        var dy = r * r / (h - r);
+        var cy = y - h + r + dy;
+        var angle = Math.asin(dy / r);
+        // Dist on x with tangent point and circle center
+        var dx = Math.cos(angle) * r;
+
+        var tanX = Math.sin(angle);
+        var tanY = Math.cos(angle);
+
+        var cpLen = r * 0.6;
+        var cpLen2 = r * 0.7;
+
+        path.moveTo(x - dx, cy + dy);
+
+        path.arc(
+            x, cy, r,
+            Math.PI - angle,
+            Math.PI * 2 + angle
+        );
+        path.bezierCurveTo(
+            x + dx - tanX * cpLen, cy + dy + tanY * cpLen,
+            x, y - cpLen2,
+            x, y
+        );
+        path.bezierCurveTo(
+            x, y - cpLen2,
+            x - dx + tanX * cpLen, cy + dy + tanY * cpLen,
+            x - dx, cy + dy
+        );
+        path.closePath();
+    }
+});
+
+/**
+ * Arrow shape
+ * @inner
+ */
+var Arrow = extendShape({
+
+    type: 'arrow',
+
+    shape: {
+        x: 0,
+        y: 0,
+        width: 0,
+        height: 0
+    },
+
+    buildPath: function (ctx, shape) {
+        var height = shape.height;
+        var width = shape.width;
+        var x = shape.x;
+        var y = shape.y;
+        var dx = width / 3 * 2;
+        ctx.moveTo(x, y);
+        ctx.lineTo(x + dx, y + height);
+        ctx.lineTo(x, y + height / 4 * 3);
+        ctx.lineTo(x - dx, y + height);
+        ctx.lineTo(x, y);
+        ctx.closePath();
+    }
+});
+
+/**
+ * Map of path contructors
+ * @type {Object.<string, module:zrender/graphic/Path>}
+ */
+var symbolCtors = {
+
+    line: Line,
+
+    rect: Rect,
+
+    roundRect: Rect,
+
+    square: Rect,
+
+    circle: Circle,
+
+    diamond: Diamond,
+
+    pin: Pin,
+
+    arrow: Arrow,
+
+    triangle: Triangle
+};
+
+var symbolShapeMakers = {
+
+    line: function (x, y, w, h, shape) {
+        // FIXME
+        shape.x1 = x;
+        shape.y1 = y + h / 2;
+        shape.x2 = x + w;
+        shape.y2 = y + h / 2;
+    },
+
+    rect: function (x, y, w, h, shape) {
+        shape.x = x;
+        shape.y = y;
+        shape.width = w;
+        shape.height = h;
+    },
+
+    roundRect: function (x, y, w, h, shape) {
+        shape.x = x;
+        shape.y = y;
+        shape.width = w;
+        shape.height = h;
+        shape.r = Math.min(w, h) / 4;
+    },
+
+    square: function (x, y, w, h, shape) {
+        var size = Math.min(w, h);
+        shape.x = x;
+        shape.y = y;
+        shape.width = size;
+        shape.height = size;
+    },
+
+    circle: function (x, y, w, h, shape) {
+        // Put circle in the center of square
+        shape.cx = x + w / 2;
+        shape.cy = y + h / 2;
+        shape.r = Math.min(w, h) / 2;
+    },
+
+    diamond: function (x, y, w, h, shape) {
+        shape.cx = x + w / 2;
+        shape.cy = y + h / 2;
+        shape.width = w;
+        shape.height = h;
+    },
+
+    pin: function (x, y, w, h, shape) {
+        shape.x = x + w / 2;
+        shape.y = y + h / 2;
+        shape.width = w;
+        shape.height = h;
+    },
+
+    arrow: function (x, y, w, h, shape) {
+        shape.x = x + w / 2;
+        shape.y = y + h / 2;
+        shape.width = w;
+        shape.height = h;
+    },
+
+    triangle: function (x, y, w, h, shape) {
+        shape.cx = x + w / 2;
+        shape.cy = y + h / 2;
+        shape.width = w;
+        shape.height = h;
+    }
+};
+
+var symbolBuildProxies = {};
+each$1(symbolCtors, function (Ctor, name) {
+    symbolBuildProxies[name] = new Ctor();
+});
+
+var SymbolClz = extendShape({
+
+    type: 'symbol',
+
+    shape: {
+        symbolType: '',
+        x: 0,
+        y: 0,
+        width: 0,
+        height: 0
+    },
+
+    beforeBrush: function () {
+        var style = this.style;
+        var shape = this.shape;
+        // FIXME
+        if (shape.symbolType === 'pin' && style.textPosition === 'inside') {
+            style.textPosition = ['50%', '40%'];
+            style.textAlign = 'center';
+            style.textVerticalAlign = 'middle';
+        }
+    },
+
+    buildPath: function (ctx, shape, inBundle) {
+        var symbolType = shape.symbolType;
+        var proxySymbol = symbolBuildProxies[symbolType];
+        if (shape.symbolType !== 'none') {
+            if (!proxySymbol) {
+                // Default rect
+                symbolType = 'rect';
+                proxySymbol = symbolBuildProxies[symbolType];
+            }
+            symbolShapeMakers[symbolType](
+                shape.x, shape.y, shape.width, shape.height, proxySymbol.shape
+            );
+            proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);
+        }
+    }
+});
+
+// Provide setColor helper method to avoid determine if set the fill or stroke outside
+function symbolPathSetColor(color, innerColor) {
+    if (this.type !== 'image') {
+        var symbolStyle = this.style;
+        var symbolShape = this.shape;
+        if (symbolShape && symbolShape.symbolType === 'line') {
+            symbolStyle.stroke = color;
+        }
+        else if (this.__isEmptyBrush) {
+            symbolStyle.stroke = color;
+            symbolStyle.fill = innerColor || '#fff';
+        }
+        else {
+            // FIXME 判断图形默认是填充还是描边,使用 onlyStroke ?
+            symbolStyle.fill && (symbolStyle.fill = color);
+            symbolStyle.stroke && (symbolStyle.stroke = color);
+        }
+        this.dirty(false);
+    }
+}
+
+/**
+ * Create a symbol element with given symbol configuration: shape, x, y, width, height, color
+ * @param {string} symbolType
+ * @param {number} x
+ * @param {number} y
+ * @param {number} w
+ * @param {number} h
+ * @param {string} color
+ * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h,
+ *                            for path and image only.
+ */
+function createSymbol(symbolType, x, y, w, h, color, keepAspect) {
+    // TODO Support image object, DynamicImage.
+
+    var isEmpty = symbolType.indexOf('empty') === 0;
+    if (isEmpty) {
+        symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);
+    }
+    var symbolPath;
+
+    if (symbolType.indexOf('image://') === 0) {
+        symbolPath = makeImage(
+            symbolType.slice(8),
+            new BoundingRect(x, y, w, h),
+            keepAspect ? 'center' : 'cover'
+        );
+    }
+    else if (symbolType.indexOf('path://') === 0) {
+        symbolPath = makePath(
+            symbolType.slice(7),
+            {},
+            new BoundingRect(x, y, w, h),
+            keepAspect ? 'center' : 'cover'
+        );
+    }
+    else {
+        symbolPath = new SymbolClz({
+            shape: {
+                symbolType: symbolType,
+                x: x,
+                y: y,
+                width: w,
+                height: h
+            }
+        });
+    }
+
+    symbolPath.__isEmptyBrush = isEmpty;
+
+    symbolPath.setColor = symbolPathSetColor;
+
+    symbolPath.setColor(color);
+
+    return symbolPath;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge';
+/**
+ * Create a muti dimension List structure from seriesModel.
+ * @param  {module:echarts/model/Model} seriesModel
+ * @return {module:echarts/data/List} list
+ */
+function createList(seriesModel) {
+    return createListFromArray(seriesModel.getSource(), seriesModel);
+}
+
+var dataStack$1 = {
+    isDimensionStacked: isDimensionStacked,
+    enableDataStack: enableDataStack,
+    getStackedDimension: getStackedDimension
+};
+
+/**
+ * Create scale
+ * @param {Array.<number>} dataExtent
+ * @param {Object|module:echarts/Model} option
+ */
+function createScale(dataExtent, option) {
+    var axisModel = option;
+    if (!Model.isInstance(option)) {
+        axisModel = new Model(option);
+        mixin(axisModel, axisModelCommonMixin);
+    }
+
+    var scale = createScaleByModel(axisModel);
+    scale.setExtent(dataExtent[0], dataExtent[1]);
+
+    niceScaleExtent(scale, axisModel);
+    return scale;
+}
+
+/**
+ * Mixin common methods to axis model,
+ *
+ * Inlcude methods
+ * `getFormattedLabels() => Array.<string>`
+ * `getCategories() => Array.<string>`
+ * `getMin(origin: boolean) => number`
+ * `getMax(origin: boolean) => number`
+ * `getNeedCrossZero() => boolean`
+ * `setRange(start: number, end: number)`
+ * `resetRange()`
+ */
+function mixinAxisModelCommonMethods(Model$$1) {
+    mixin(Model$$1, axisModelCommonMixin);
+}
+
+var helper = (Object.freeze || Object)({
+	createList: createList,
+	getLayoutRect: getLayoutRect,
+	dataStack: dataStack$1,
+	createScale: createScale,
+	mixinAxisModelCommonMethods: mixinAxisModelCommonMethods,
+	completeDimensions: completeDimensions,
+	createDimensions: createDimensions,
+	createSymbol: createSymbol
+});
+
+var EPSILON$3 = 1e-8;
+
+function isAroundEqual$1(a, b) {
+    return Math.abs(a - b) < EPSILON$3;
+}
+
+function contain$1(points, x, y) {
+    var w = 0;
+    var p = points[0];
+
+    if (!p) {
+        return false;
+    }
+
+    for (var i = 1; i < points.length; i++) {
+        var p2 = points[i];
+        w += windingLine(p[0], p[1], p2[0], p2[1], x, y);
+        p = p2;
+    }
+
+    // Close polygon
+    var p0 = points[0];
+    if (!isAroundEqual$1(p[0], p0[0]) || !isAroundEqual$1(p[1], p0[1])) {
+        w += windingLine(p[0], p[1], p0[0], p0[1], x, y);
+    }
+
+    return w !== 0;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/coord/geo/Region
+ */
+
+/**
+ * @param {string} name
+ * @param {Array} geometries
+ * @param {Array.<number>} cp
+ */
+function Region(name, geometries, cp) {
+
+    /**
+     * @type {string}
+     * @readOnly
+     */
+    this.name = name;
+
+    /**
+     * @type {Array.<Array>}
+     * @readOnly
+     */
+    this.geometries = geometries;
+
+    if (!cp) {
+        var rect = this.getBoundingRect();
+        cp = [
+            rect.x + rect.width / 2,
+            rect.y + rect.height / 2
+        ];
+    }
+    else {
+        cp = [cp[0], cp[1]];
+    }
+    /**
+     * @type {Array.<number>}
+     */
+    this.center = cp;
+}
+
+Region.prototype = {
+
+    constructor: Region,
+
+    properties: null,
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getBoundingRect: function () {
+        var rect = this._rect;
+        if (rect) {
+            return rect;
+        }
+
+        var MAX_NUMBER = Number.MAX_VALUE;
+        var min$$1 = [MAX_NUMBER, MAX_NUMBER];
+        var max$$1 = [-MAX_NUMBER, -MAX_NUMBER];
+        var min2 = [];
+        var max2 = [];
+        var geometries = this.geometries;
+        for (var i = 0; i < geometries.length; i++) {
+            // Only support polygon
+            if (geometries[i].type !== 'polygon') {
+                continue;
+            }
+            // Doesn't consider hole
+            var exterior = geometries[i].exterior;
+            fromPoints(exterior, min2, max2);
+            min(min$$1, min$$1, min2);
+            max(max$$1, max$$1, max2);
+        }
+        // No data
+        if (i === 0) {
+            min$$1[0] = min$$1[1] = max$$1[0] = max$$1[1] = 0;
+        }
+
+        return (this._rect = new BoundingRect(
+            min$$1[0], min$$1[1], max$$1[0] - min$$1[0], max$$1[1] - min$$1[1]
+        ));
+    },
+
+    /**
+     * @param {<Array.<number>} coord
+     * @return {boolean}
+     */
+    contain: function (coord) {
+        var rect = this.getBoundingRect();
+        var geometries = this.geometries;
+        if (!rect.contain(coord[0], coord[1])) {
+            return false;
+        }
+        loopGeo: for (var i = 0, len$$1 = geometries.length; i < len$$1; i++) {
+            // Only support polygon.
+            if (geometries[i].type !== 'polygon') {
+                continue;
+            }
+            var exterior = geometries[i].exterior;
+            var interiors = geometries[i].interiors;
+            if (contain$1(exterior, coord[0], coord[1])) {
+                // Not in the region if point is in the hole.
+                for (var k = 0; k < (interiors ? interiors.length : 0); k++) {
+                    if (contain$1(interiors[k])) {
+                        continue loopGeo;
+                    }
+                }
+                return true;
+            }
+        }
+        return false;
+    },
+
+    transformTo: function (x, y, width, height) {
+        var rect = this.getBoundingRect();
+        var aspect = rect.width / rect.height;
+        if (!width) {
+            width = aspect * height;
+        }
+        else if (!height) {
+            height = width / aspect ;
+        }
+        var target = new BoundingRect(x, y, width, height);
+        var transform = rect.calculateTransform(target);
+        var geometries = this.geometries;
+        for (var i = 0; i < geometries.length; i++) {
+            // Only support polygon.
+            if (geometries[i].type !== 'polygon') {
+                continue;
+            }
+            var exterior = geometries[i].exterior;
+            var interiors = geometries[i].interiors;
+            for (var p = 0; p < exterior.length; p++) {
+                applyTransform(exterior[p], exterior[p], transform);
+            }
+            for (var h = 0; h < (interiors ? interiors.length : 0); h++) {
+                for (var p = 0; p < interiors[h].length; p++) {
+                    applyTransform(interiors[h][p], interiors[h][p], transform);
+                }
+            }
+        }
+        rect = this._rect;
+        rect.copy(target);
+        // Update center
+        this.center = [
+            rect.x + rect.width / 2,
+            rect.y + rect.height / 2
+        ];
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Parse and decode geo json
+ * @module echarts/coord/geo/parseGeoJson
+ */
+
+function decode(json) {
+    if (!json.UTF8Encoding) {
+        return json;
+    }
+    var encodeScale = json.UTF8Scale;
+    if (encodeScale == null) {
+        encodeScale = 1024;
+    }
+
+    var features = json.features;
+
+    for (var f = 0; f < features.length; f++) {
+        var feature = features[f];
+        var geometry = feature.geometry;
+        var coordinates = geometry.coordinates;
+        var encodeOffsets = geometry.encodeOffsets;
+
+        for (var c = 0; c < coordinates.length; c++) {
+            var coordinate = coordinates[c];
+
+            if (geometry.type === 'Polygon') {
+                coordinates[c] = decodePolygon(
+                    coordinate,
+                    encodeOffsets[c],
+                    encodeScale
+                );
+            }
+            else if (geometry.type === 'MultiPolygon') {
+                for (var c2 = 0; c2 < coordinate.length; c2++) {
+                    var polygon = coordinate[c2];
+                    coordinate[c2] = decodePolygon(
+                        polygon,
+                        encodeOffsets[c][c2],
+                        encodeScale
+                    );
+                }
+            }
+        }
+    }
+    // Has been decoded
+    json.UTF8Encoding = false;
+    return json;
+}
+
+function decodePolygon(coordinate, encodeOffsets, encodeScale) {
+    var result = [];
+    var prevX = encodeOffsets[0];
+    var prevY = encodeOffsets[1];
+
+    for (var i = 0; i < coordinate.length; i += 2) {
+        var x = coordinate.charCodeAt(i) - 64;
+        var y = coordinate.charCodeAt(i + 1) - 64;
+        // ZigZag decoding
+        x = (x >> 1) ^ (-(x & 1));
+        y = (y >> 1) ^ (-(y & 1));
+        // Delta deocding
+        x += prevX;
+        y += prevY;
+
+        prevX = x;
+        prevY = y;
+        // Dequantize
+        result.push([x / encodeScale, y / encodeScale]);
+    }
+
+    return result;
+}
+
+/**
+ * @alias module:echarts/coord/geo/parseGeoJson
+ * @param {Object} geoJson
+ * @return {module:zrender/container/Group}
+ */
+var parseGeoJson$1 = function (geoJson) {
+
+    decode(geoJson);
+
+    return map(filter(geoJson.features, function (featureObj) {
+        // Output of mapshaper may have geometry null
+        return featureObj.geometry
+            && featureObj.properties
+            && featureObj.geometry.coordinates.length > 0;
+    }), function (featureObj) {
+        var properties = featureObj.properties;
+        var geo = featureObj.geometry;
+
+        var coordinates = geo.coordinates;
+
+        var geometries = [];
+        if (geo.type === 'Polygon') {
+            geometries.push({
+                type: 'polygon',
+                // According to the GeoJSON specification.
+                // First must be exterior, and the rest are all interior(holes).
+                exterior: coordinates[0],
+                interiors: coordinates.slice(1)
+            });
+        }
+        if (geo.type === 'MultiPolygon') {
+            each$1(coordinates, function (item) {
+                if (item[0]) {
+                    geometries.push({
+                        type: 'polygon',
+                        exterior: item[0],
+                        interiors: item.slice(1)
+                    });
+                }
+            });
+        }
+
+        var region = new Region(
+            properties.name,
+            geometries,
+            properties.cp
+        );
+        region.properties = properties;
+        return region;
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$6 = makeInner();
+
+/**
+ * @param {module:echats/coord/Axis} axis
+ * @return {Object} {
+ *     labels: [{
+ *         formattedLabel: string,
+ *         rawLabel: string,
+ *         tickValue: number
+ *     }, ...],
+ *     labelCategoryInterval: number
+ * }
+ */
+function createAxisLabels(axis) {
+    // Only ordinal scale support tick interval
+    return axis.type === 'category'
+        ? makeCategoryLabels(axis)
+        : makeRealNumberLabels(axis);
+}
+
+/**
+ * @param {module:echats/coord/Axis} axis
+ * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea.
+ * @return {Object} {
+ *     ticks: Array.<number>
+ *     tickCategoryInterval: number
+ * }
+ */
+function createAxisTicks(axis, tickModel) {
+    // Only ordinal scale support tick interval
+    return axis.type === 'category'
+        ? makeCategoryTicks(axis, tickModel)
+        : {ticks: axis.scale.getTicks()};
+}
+
+function makeCategoryLabels(axis) {
+    var labelModel = axis.getLabelModel();
+    var result = makeCategoryLabelsActually(axis, labelModel);
+
+    return (!labelModel.get('show') || axis.scale.isBlank())
+        ? {labels: [], labelCategoryInterval: result.labelCategoryInterval}
+        : result;
+}
+
+function makeCategoryLabelsActually(axis, labelModel) {
+    var labelsCache = getListCache(axis, 'labels');
+    var optionLabelInterval = getOptionCategoryInterval(labelModel);
+    var result = listCacheGet(labelsCache, optionLabelInterval);
+
+    if (result) {
+        return result;
+    }
+
+    var labels;
+    var numericLabelInterval;
+
+    if (isFunction$1(optionLabelInterval)) {
+        labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);
+    }
+    else {
+        numericLabelInterval = optionLabelInterval === 'auto'
+            ? makeAutoCategoryInterval(axis) : optionLabelInterval;
+        labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);
+    }
+
+    // Cache to avoid calling interval function repeatly.
+    return listCacheSet(labelsCache, optionLabelInterval, {
+        labels: labels, labelCategoryInterval: numericLabelInterval
+    });
+}
+
+function makeCategoryTicks(axis, tickModel) {
+    var ticksCache = getListCache(axis, 'ticks');
+    var optionTickInterval = getOptionCategoryInterval(tickModel);
+    var result = listCacheGet(ticksCache, optionTickInterval);
+
+    if (result) {
+        return result;
+    }
+
+    var ticks;
+    var tickCategoryInterval;
+
+    // Optimize for the case that large category data and no label displayed,
+    // we should not return all ticks.
+    if (!tickModel.get('show') || axis.scale.isBlank()) {
+        ticks = [];
+    }
+
+    if (isFunction$1(optionTickInterval)) {
+        ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);
+    }
+    // Always use label interval by default despite label show. Consider this
+    // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows
+    // labels. `splitLine` and `axisTick` should be consistent in this case.
+    else if (optionTickInterval === 'auto') {
+        var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());
+        tickCategoryInterval = labelsResult.labelCategoryInterval;
+        ticks = map(labelsResult.labels, function (labelItem) {
+            return labelItem.tickValue;
+        });
+    }
+    else {
+        tickCategoryInterval = optionTickInterval;
+        ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);
+    }
+
+    // Cache to avoid calling interval function repeatly.
+    return listCacheSet(ticksCache, optionTickInterval, {
+        ticks: ticks, tickCategoryInterval: tickCategoryInterval
+    });
+}
+
+function makeRealNumberLabels(axis) {
+    var ticks = axis.scale.getTicks();
+    var labelFormatter = makeLabelFormatter(axis);
+    return {
+        labels: map(ticks, function (tickValue, idx) {
+            return {
+                formattedLabel: labelFormatter(tickValue, idx),
+                rawLabel: axis.scale.getLabel(tickValue),
+                tickValue: tickValue
+            };
+        })
+    };
+}
+
+// Large category data calculation is performence sensitive, and ticks and label
+// probably be fetched by multiple times. So we cache the result.
+// axis is created each time during a ec process, so we do not need to clear cache.
+function getListCache(axis, prop) {
+    // Because key can be funciton, and cache size always be small, we use array cache.
+    return inner$6(axis)[prop] || (inner$6(axis)[prop] = []);
+}
+
+function listCacheGet(cache, key) {
+    for (var i = 0; i < cache.length; i++) {
+        if (cache[i].key === key) {
+            return cache[i].value;
+        }
+    }
+}
+
+function listCacheSet(cache, key, value) {
+    cache.push({key: key, value: value});
+    return value;
+}
+
+function makeAutoCategoryInterval(axis) {
+    var result = inner$6(axis).autoInterval;
+    return result != null
+        ? result
+        : (inner$6(axis).autoInterval = axis.calculateCategoryInterval());
+}
+
+/**
+ * Calculate interval for category axis ticks and labels.
+ * To get precise result, at least one of `getRotate` and `isHorizontal`
+ * should be implemented in axis.
+ */
+function calculateCategoryInterval(axis) {
+    var params = fetchAutoCategoryIntervalCalculationParams(axis);
+    var labelFormatter = makeLabelFormatter(axis);
+    var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;
+
+    var ordinalScale = axis.scale;
+    var ordinalExtent = ordinalScale.getExtent();
+    // Providing this method is for optimization:
+    // avoid generating a long array by `getTicks`
+    // in large category data case.
+    var tickCount = ordinalScale.count();
+
+    if (ordinalExtent[1] - ordinalExtent[0] < 1) {
+        return 0;
+    }
+
+    var step = 1;
+    // Simple optimization. Empirical value: tick count should less than 40.
+    if (tickCount > 40) {
+        step = Math.max(1, Math.floor(tickCount / 40));
+    }
+    var tickValue = ordinalExtent[0];
+    var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);
+    var unitW = Math.abs(unitSpan * Math.cos(rotation));
+    var unitH = Math.abs(unitSpan * Math.sin(rotation));
+
+    var maxW = 0;
+    var maxH = 0;
+
+    // Caution: Performance sensitive for large category data.
+    // Consider dataZoom, we should make appropriate step to avoid O(n) loop.
+    for (; tickValue <= ordinalExtent[1]; tickValue += step) {
+        var width = 0;
+        var height = 0;
+
+        // Polar is also calculated in assumptive linear layout here.
+        // Not precise, do not consider align and vertical align
+        // and each distance from axis line yet.
+        var rect = getBoundingRect(
+            labelFormatter(tickValue), params.font, 'center', 'top'
+        );
+        // Magic number
+        width = rect.width * 1.3;
+        height = rect.height * 1.3;
+
+        // Min size, void long loop.
+        maxW = Math.max(maxW, width, 7);
+        maxH = Math.max(maxH, height, 7);
+    }
+
+    var dw = maxW / unitW;
+    var dh = maxH / unitH;
+    // 0/0 is NaN, 1/0 is Infinity.
+    isNaN(dw) && (dw = Infinity);
+    isNaN(dh) && (dh = Infinity);
+    var interval = Math.max(0, Math.floor(Math.min(dw, dh)));
+
+    var cache = inner$6(axis.model);
+    var lastAutoInterval = cache.lastAutoInterval;
+    var lastTickCount = cache.lastTickCount;
+
+    // Use cache to keep interval stable while moving zoom window,
+    // otherwise the calculated interval might jitter when the zoom
+    // window size is close to the interval-changing size.
+    if (lastAutoInterval != null
+        && lastTickCount != null
+        && Math.abs(lastAutoInterval - interval) <= 1
+        && Math.abs(lastTickCount - tickCount) <= 1
+        // Always choose the bigger one, otherwise the critical
+        // point is not the same when zooming in or zooming out.
+        && lastAutoInterval > interval
+    ) {
+        interval = lastAutoInterval;
+    }
+    // Only update cache if cache not used, otherwise the
+    // changing of interval is too insensitive.
+    else {
+        cache.lastTickCount = tickCount;
+        cache.lastAutoInterval = interval;
+    }
+
+    return interval;
+}
+
+function fetchAutoCategoryIntervalCalculationParams(axis) {
+    var labelModel = axis.getLabelModel();
+    return {
+        axisRotate: axis.getRotate
+            ? axis.getRotate()
+            : (axis.isHorizontal && !axis.isHorizontal())
+            ? 90
+            : 0,
+        labelRotate: labelModel.get('rotate') || 0,
+        font: labelModel.getFont()
+    };
+}
+
+function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {
+    var labelFormatter = makeLabelFormatter(axis);
+    var ordinalScale = axis.scale;
+    var ordinalExtent = ordinalScale.getExtent();
+    var labelModel = axis.getLabelModel();
+    var result = [];
+
+    // TODO: axisType: ordinalTime, pick the tick from each month/day/year/...
+
+    var step = Math.max((categoryInterval || 0) + 1, 1);
+    var startTick = ordinalExtent[0];
+    var tickCount = ordinalScale.count();
+
+    // Calculate start tick based on zero if possible to keep label consistent
+    // while zooming and moving while interval > 0. Otherwise the selection
+    // of displayable ticks and symbols probably keep changing.
+    // 3 is empirical value.
+    if (startTick !== 0 && step > 1 && tickCount / step > 2) {
+        startTick = Math.round(Math.ceil(startTick / step) * step);
+    }
+
+    // (1) Only add min max label here but leave overlap checking
+    // to render stage, which also ensure the returned list
+    // suitable for splitLine and splitArea rendering.
+    // (2) Scales except category always contain min max label so
+    // do not need to perform this process.
+    var showMinMax = {
+        min: labelModel.get('showMinLabel'),
+        max: labelModel.get('showMaxLabel')
+    };
+
+    if (showMinMax.min && startTick !== ordinalExtent[0]) {
+        addItem(ordinalExtent[0]);
+    }
+
+    // Optimize: avoid generating large array by `ordinalScale.getTicks()`.
+    var tickValue = startTick;
+    for (; tickValue <= ordinalExtent[1]; tickValue += step) {
+        addItem(tickValue);
+    }
+
+    if (showMinMax.max && tickValue !== ordinalExtent[1]) {
+        addItem(ordinalExtent[1]);
+    }
+
+    function addItem(tVal) {
+        result.push(onlyTick
+            ? tVal
+            : {
+                formattedLabel: labelFormatter(tVal),
+                rawLabel: ordinalScale.getLabel(tVal),
+                tickValue: tVal
+            }
+        );
+    }
+
+    return result;
+}
+
+// When interval is function, the result `false` means ignore the tick.
+// It is time consuming for large category data.
+function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {
+    var ordinalScale = axis.scale;
+    var labelFormatter = makeLabelFormatter(axis);
+    var result = [];
+
+    each$1(ordinalScale.getTicks(), function (tickValue) {
+        var rawLabel = ordinalScale.getLabel(tickValue);
+        if (categoryInterval(tickValue, rawLabel)) {
+            result.push(onlyTick
+                ? tickValue
+                : {
+                    formattedLabel: labelFormatter(tickValue),
+                    rawLabel: rawLabel,
+                    tickValue: tickValue
+                }
+            );
+        }
+    });
+
+    return result;
+}
+
+// Can be null|'auto'|number|function
+function getOptionCategoryInterval(model) {
+    var interval = model.get('interval');
+    return interval == null ? 'auto' : interval;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var NORMALIZED_EXTENT = [0, 1];
+
+/**
+ * Base class of Axis.
+ * @constructor
+ */
+var Axis = function (dim, scale, extent) {
+
+    /**
+     * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'.
+     * @type {string}
+     */
+    this.dim = dim;
+
+    /**
+     * Axis scale
+     * @type {module:echarts/coord/scale/*}
+     */
+    this.scale = scale;
+
+    /**
+     * @type {Array.<number>}
+     * @private
+     */
+    this._extent = extent || [0, 0];
+
+    /**
+     * @type {boolean}
+     */
+    this.inverse = false;
+
+    /**
+     * Usually true when axis has a ordinal scale
+     * @type {boolean}
+     */
+    this.onBand = false;
+};
+
+Axis.prototype = {
+
+    constructor: Axis,
+
+    /**
+     * If axis extent contain given coord
+     * @param {number} coord
+     * @return {boolean}
+     */
+    contain: function (coord) {
+        var extent = this._extent;
+        var min = Math.min(extent[0], extent[1]);
+        var max = Math.max(extent[0], extent[1]);
+        return coord >= min && coord <= max;
+    },
+
+    /**
+     * If axis extent contain given data
+     * @param {number} data
+     * @return {boolean}
+     */
+    containData: function (data) {
+        return this.contain(this.dataToCoord(data));
+    },
+
+    /**
+     * Get coord extent.
+     * @return {Array.<number>}
+     */
+    getExtent: function () {
+        return this._extent.slice();
+    },
+
+    /**
+     * Get precision used for formatting
+     * @param {Array.<number>} [dataExtent]
+     * @return {number}
+     */
+    getPixelPrecision: function (dataExtent) {
+        return getPixelPrecision(
+            dataExtent || this.scale.getExtent(),
+            this._extent
+        );
+    },
+
+    /**
+     * Set coord extent
+     * @param {number} start
+     * @param {number} end
+     */
+    setExtent: function (start, end) {
+        var extent = this._extent;
+        extent[0] = start;
+        extent[1] = end;
+    },
+
+    /**
+     * Convert data to coord. Data is the rank if it has an ordinal scale
+     * @param {number} data
+     * @param  {boolean} clamp
+     * @return {number}
+     */
+    dataToCoord: function (data, clamp) {
+        var extent = this._extent;
+        var scale = this.scale;
+        data = scale.normalize(data);
+
+        if (this.onBand && scale.type === 'ordinal') {
+            extent = extent.slice();
+            fixExtentWithBands(extent, scale.count());
+        }
+
+        return linearMap(data, NORMALIZED_EXTENT, extent, clamp);
+    },
+
+    /**
+     * Convert coord to data. Data is the rank if it has an ordinal scale
+     * @param {number} coord
+     * @param  {boolean} clamp
+     * @return {number}
+     */
+    coordToData: function (coord, clamp) {
+        var extent = this._extent;
+        var scale = this.scale;
+
+        if (this.onBand && scale.type === 'ordinal') {
+            extent = extent.slice();
+            fixExtentWithBands(extent, scale.count());
+        }
+
+        var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);
+
+        return this.scale.scale(t);
+    },
+
+    /**
+     * Convert pixel point to data in axis
+     * @param {Array.<number>} point
+     * @param  {boolean} clamp
+     * @return {number} data
+     */
+    pointToData: function (point, clamp) {
+        // Should be implemented in derived class if necessary.
+    },
+
+    /**
+     * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`,
+     * `axis.getTicksCoords` considers `onBand`, which is used by
+     * `boundaryGap:true` of category axis and splitLine and splitArea.
+     * @param {Object} [opt]
+     * @param {number} [opt.tickModel=axis.model.getModel('axisTick')]
+     * @param {boolean} [opt.clamp] If `true`, the first and the last
+     *        tick must be at the axis end points. Otherwise, clip ticks
+     *        that outside the axis extent.
+     * @return {Array.<Object>} [{
+     *     coord: ...,
+     *     tickValue: ...
+     * }, ...]
+     */
+    getTicksCoords: function (opt) {
+        opt = opt || {};
+
+        var tickModel = opt.tickModel || this.getTickModel();
+
+        var result = createAxisTicks(this, tickModel);
+        var ticks = result.ticks;
+
+        var ticksCoords = map(ticks, function (tickValue) {
+            return {
+                coord: this.dataToCoord(tickValue),
+                tickValue: tickValue
+            };
+        }, this);
+
+        var alignWithLabel = tickModel.get('alignWithLabel');
+        fixOnBandTicksCoords(
+            this, ticksCoords, result.tickCategoryInterval, alignWithLabel, opt.clamp
+        );
+
+        return ticksCoords;
+    },
+
+    /**
+     * @return {Array.<Object>} [{
+     *     formattedLabel: string,
+     *     rawLabel: axis.scale.getLabel(tickValue)
+     *     tickValue: number
+     * }, ...]
+     */
+    getViewLabels: function () {
+        return createAxisLabels(this).labels;
+    },
+
+    /**
+     * @return {module:echarts/coord/model/Model}
+     */
+    getLabelModel: function () {
+        return this.model.getModel('axisLabel');
+    },
+
+    /**
+     * Notice here we only get the default tick model. For splitLine
+     * or splitArea, we should pass the splitLineModel or splitAreaModel
+     * manually when calling `getTicksCoords`.
+     * In GL, this method may be overrided to:
+     * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));`
+     * @return {module:echarts/coord/model/Model}
+     */
+    getTickModel: function () {
+        return this.model.getModel('axisTick');
+    },
+
+    /**
+     * Get width of band
+     * @return {number}
+     */
+    getBandWidth: function () {
+        var axisExtent = this._extent;
+        var dataExtent = this.scale.getExtent();
+
+        var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);
+        // Fix #2728, avoid NaN when only one data.
+        len === 0 && (len = 1);
+
+        var size = Math.abs(axisExtent[1] - axisExtent[0]);
+
+        return Math.abs(size) / len;
+    },
+
+    /**
+     * @abstract
+     * @return {boolean} Is horizontal
+     */
+    isHorizontal: null,
+
+    /**
+     * @abstract
+     * @return {number} Get axis rotate, by degree.
+     */
+    getRotate: null,
+
+    /**
+     * Only be called in category axis.
+     * Can be overrided, consider other axes like in 3D.
+     * @return {number} Auto interval for cateogry axis tick and label
+     */
+    calculateCategoryInterval: function () {
+        return calculateCategoryInterval(this);
+    }
+
+};
+
+function fixExtentWithBands(extent, nTick) {
+    var size = extent[1] - extent[0];
+    var len = nTick;
+    var margin = size / len / 2;
+    extent[0] += margin;
+    extent[1] -= margin;
+}
+
+// If axis has labels [1, 2, 3, 4]. Bands on the axis are
+// |---1---|---2---|---3---|---4---|.
+// So the displayed ticks and splitLine/splitArea should between
+// each data item, otherwise cause misleading (e.g., split tow bars
+// of a single data item when there are two bar series).
+// Also consider if tickCategoryInterval > 0 and onBand, ticks and
+// splitLine/spliteArea should layout appropriately corresponding
+// to displayed labels. (So we should not use `getBandWidth` in this
+// case).
+function fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWithLabel, clamp) {
+    var ticksLen = ticksCoords.length;
+
+    if (!axis.onBand || alignWithLabel || !ticksLen) {
+        return;
+    }
+
+    var axisExtent = axis.getExtent();
+    var last;
+    if (ticksLen === 1) {
+        ticksCoords[0].coord = axisExtent[0];
+        last = ticksCoords[1] = {coord: axisExtent[0]};
+    }
+    else {
+        var shift = (ticksCoords[1].coord - ticksCoords[0].coord);
+        each$1(ticksCoords, function (ticksItem) {
+            ticksItem.coord -= shift / 2;
+            var tickCategoryInterval = tickCategoryInterval || 0;
+            // Avoid split a single data item when odd interval.
+            if (tickCategoryInterval % 2 > 0) {
+                ticksItem.coord -= shift / ((tickCategoryInterval + 1) * 2);
+            }
+        });
+        last = {coord: ticksCoords[ticksLen - 1].coord + shift};
+        ticksCoords.push(last);
+    }
+
+    var inverse = axisExtent[0] > axisExtent[1];
+
+    if (littleThan(ticksCoords[0].coord, axisExtent[0])) {
+        clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();
+    }
+    if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {
+        ticksCoords.unshift({coord: axisExtent[0]});
+    }
+    if (littleThan(axisExtent[1], last.coord)) {
+        clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop();
+    }
+    if (clamp && littleThan(last.coord, axisExtent[1])) {
+        ticksCoords.push({coord: axisExtent[1]});
+    }
+
+    function littleThan(a, b) {
+        return inverse ? a > b : a < b;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Do not mount those modules on 'src/echarts' for better tree shaking.
+ */
+
+var parseGeoJson = parseGeoJson$1;
+
+var ecUtil = {};
+each$1([
+        'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter',
+        'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction',
+        'extend', 'defaults', 'clone', 'merge'
+    ],
+    function (name) {
+        ecUtil[name] = zrUtil[name];
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.line',
+
+    dependencies: ['grid', 'polar'],
+
+    getInitialData: function (option, ecModel) {
+        if (__DEV__) {
+            var coordSys = option.coordinateSystem;
+            if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {
+                throw new Error('Line not support coordinateSystem besides cartesian and polar');
+            }
+        }
+        return createListFromArray(this.getSource(), this);
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        coordinateSystem: 'cartesian2d',
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+        // stack: null
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // polarIndex: 0,
+
+        // If clip the overflow value
+        clipOverflow: true,
+        // cursor: null,
+
+        label: {
+            position: 'top'
+        },
+        // itemStyle: {
+        // },
+
+        lineStyle: {
+            width: 2,
+            type: 'solid'
+        },
+        // areaStyle: {
+            // origin of areaStyle. Valid values:
+            // `'auto'/null/undefined`: from axisLine to data
+            // `'start'`: from min to data
+            // `'end'`: from data to max
+            // origin: 'auto'
+        // },
+        // false, 'start', 'end', 'middle'
+        step: false,
+
+        // Disabled if step is true
+        smooth: false,
+        smoothMonotone: null,
+        symbol: 'emptyCircle',
+        symbolSize: 4,
+        symbolRotate: null,
+
+        showSymbol: true,
+        // `false`: follow the label interval strategy.
+        // `true`: show all symbols.
+        // `'auto'`: If possible, show all symbols, otherwise
+        //           follow the label interval strategy.
+        showAllSymbol: 'auto',
+
+        // Whether to connect break point.
+        connectNulls: false,
+
+        // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'.
+        sampling: 'none',
+
+        animationEasing: 'linear',
+
+        // Disable progressive
+        progressive: 0,
+        hoverLayerThreshold: Infinity
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {number} dataIndex
+ * @return {string} label string. Not null/undefined
+ */
+function getDefaultLabel(data, dataIndex) {
+    var labelDims = data.mapDimension('defaultedLabel', true);
+    var len = labelDims.length;
+
+    // Simple optimization (in lots of cases, label dims length is 1)
+    if (len === 1) {
+        return retrieveRawValue(data, dataIndex, labelDims[0]);
+    }
+    else if (len) {
+        var vals = [];
+        for (var i = 0; i < labelDims.length; i++) {
+            var val = retrieveRawValue(data, dataIndex, labelDims[i]);
+            vals.push(val);
+        }
+        return vals.join(' ');
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/chart/helper/Symbol
+ */
+
+/**
+ * @constructor
+ * @alias {module:echarts/chart/helper/Symbol}
+ * @param {module:echarts/data/List} data
+ * @param {number} idx
+ * @extends {module:zrender/graphic/Group}
+ */
+function SymbolClz$1(data, idx, seriesScope) {
+    Group.call(this);
+    this.updateData(data, idx, seriesScope);
+}
+
+var symbolProto = SymbolClz$1.prototype;
+
+/**
+ * @public
+ * @static
+ * @param {module:echarts/data/List} data
+ * @param {number} dataIndex
+ * @return {Array.<number>} [width, height]
+ */
+var getSymbolSize = SymbolClz$1.getSymbolSize = function (data, idx) {
+    var symbolSize = data.getItemVisual(idx, 'symbolSize');
+    return symbolSize instanceof Array
+        ? symbolSize.slice()
+        : [+symbolSize, +symbolSize];
+};
+
+function getScale(symbolSize) {
+    return [symbolSize[0] / 2, symbolSize[1] / 2];
+}
+
+function driftSymbol(dx, dy) {
+    this.parent.drift(dx, dy);
+}
+
+symbolProto._createSymbol = function (
+    symbolType,
+    data,
+    idx,
+    symbolSize,
+    keepAspect
+) {
+    // Remove paths created before
+    this.removeAll();
+
+    var color = data.getItemVisual(idx, 'color');
+
+    // var symbolPath = createSymbol(
+    //     symbolType, -0.5, -0.5, 1, 1, color
+    // );
+    // If width/height are set too small (e.g., set to 1) on ios10
+    // and macOS Sierra, a circle stroke become a rect, no matter what
+    // the scale is set. So we set width/height as 2. See #4150.
+    var symbolPath = createSymbol(
+        symbolType, -1, -1, 2, 2, color, keepAspect
+    );
+
+    symbolPath.attr({
+        z2: 100,
+        culling: true,
+        scale: getScale(symbolSize)
+    });
+    // Rewrite drift method
+    symbolPath.drift = driftSymbol;
+
+    this._symbolType = symbolType;
+
+    this.add(symbolPath);
+};
+
+/**
+ * Stop animation
+ * @param {boolean} toLastFrame
+ */
+symbolProto.stopSymbolAnimation = function (toLastFrame) {
+    this.childAt(0).stopAnimation(toLastFrame);
+};
+
+/**
+ * FIXME:
+ * Caution: This method breaks the encapsulation of this module,
+ * but it indeed brings convenience. So do not use the method
+ * unless you detailedly know all the implements of `Symbol`,
+ * especially animation.
+ *
+ * Get symbol path element.
+ */
+symbolProto.getSymbolPath = function () {
+    return this.childAt(0);
+};
+
+/**
+ * Get scale(aka, current symbol size).
+ * Including the change caused by animation
+ */
+symbolProto.getScale = function () {
+    return this.childAt(0).scale;
+};
+
+/**
+ * Highlight symbol
+ */
+symbolProto.highlight = function () {
+    this.childAt(0).trigger('emphasis');
+};
+
+/**
+ * Downplay symbol
+ */
+symbolProto.downplay = function () {
+    this.childAt(0).trigger('normal');
+};
+
+/**
+ * @param {number} zlevel
+ * @param {number} z
+ */
+symbolProto.setZ = function (zlevel, z) {
+    var symbolPath = this.childAt(0);
+    symbolPath.zlevel = zlevel;
+    symbolPath.z = z;
+};
+
+symbolProto.setDraggable = function (draggable) {
+    var symbolPath = this.childAt(0);
+    symbolPath.draggable = draggable;
+    symbolPath.cursor = draggable ? 'move' : 'pointer';
+};
+
+/**
+ * Update symbol properties
+ * @param {module:echarts/data/List} data
+ * @param {number} idx
+ * @param {Object} [seriesScope]
+ * @param {Object} [seriesScope.itemStyle]
+ * @param {Object} [seriesScope.hoverItemStyle]
+ * @param {Object} [seriesScope.symbolRotate]
+ * @param {Object} [seriesScope.symbolOffset]
+ * @param {module:echarts/model/Model} [seriesScope.labelModel]
+ * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel]
+ * @param {boolean} [seriesScope.hoverAnimation]
+ * @param {Object} [seriesScope.cursorStyle]
+ * @param {module:echarts/model/Model} [seriesScope.itemModel]
+ * @param {string} [seriesScope.symbolInnerColor]
+ * @param {Object} [seriesScope.fadeIn=false]
+ */
+symbolProto.updateData = function (data, idx, seriesScope) {
+    this.silent = false;
+
+    var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';
+    var seriesModel = data.hostModel;
+    var symbolSize = getSymbolSize(data, idx);
+    var isInit = symbolType !== this._symbolType;
+
+    if (isInit) {
+        var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');
+        this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);
+    }
+    else {
+        var symbolPath = this.childAt(0);
+        symbolPath.silent = false;
+        updateProps(symbolPath, {
+            scale: getScale(symbolSize)
+        }, seriesModel, idx);
+    }
+
+    this._updateCommon(data, idx, symbolSize, seriesScope);
+
+    if (isInit) {
+        var symbolPath = this.childAt(0);
+        var fadeIn = seriesScope && seriesScope.fadeIn;
+
+        var target = {scale: symbolPath.scale.slice()};
+        fadeIn && (target.style = {opacity: symbolPath.style.opacity});
+
+        symbolPath.scale = [0, 0];
+        fadeIn && (symbolPath.style.opacity = 0);
+
+        initProps(symbolPath, target, seriesModel, idx);
+    }
+
+    this._seriesModel = seriesModel;
+};
+
+// Update common properties
+var normalStyleAccessPath = ['itemStyle'];
+var emphasisStyleAccessPath = ['emphasis', 'itemStyle'];
+var normalLabelAccessPath = ['label'];
+var emphasisLabelAccessPath = ['emphasis', 'label'];
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {number} idx
+ * @param {Array.<number>} symbolSize
+ * @param {Object} [seriesScope]
+ */
+symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
+    var symbolPath = this.childAt(0);
+    var seriesModel = data.hostModel;
+    var color = data.getItemVisual(idx, 'color');
+
+    // Reset style
+    if (symbolPath.type !== 'image') {
+        symbolPath.useStyle({
+            strokeNoScale: true
+        });
+    }
+
+    var itemStyle = seriesScope && seriesScope.itemStyle;
+    var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;
+    var symbolRotate = seriesScope && seriesScope.symbolRotate;
+    var symbolOffset = seriesScope && seriesScope.symbolOffset;
+    var labelModel = seriesScope && seriesScope.labelModel;
+    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
+    var hoverAnimation = seriesScope && seriesScope.hoverAnimation;
+    var cursorStyle = seriesScope && seriesScope.cursorStyle;
+
+    if (!seriesScope || data.hasItemOption) {
+        var itemModel = (seriesScope && seriesScope.itemModel)
+            ? seriesScope.itemModel : data.getItemModel(idx);
+
+        // Color must be excluded.
+        // Because symbol provide setColor individually to set fill and stroke
+        itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);
+        hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();
+
+        symbolRotate = itemModel.getShallow('symbolRotate');
+        symbolOffset = itemModel.getShallow('symbolOffset');
+
+        labelModel = itemModel.getModel(normalLabelAccessPath);
+        hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);
+        hoverAnimation = itemModel.getShallow('hoverAnimation');
+        cursorStyle = itemModel.getShallow('cursor');
+    }
+    else {
+        hoverItemStyle = extend({}, hoverItemStyle);
+    }
+
+    var elStyle = symbolPath.style;
+
+    symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);
+
+    if (symbolOffset) {
+        symbolPath.attr('position', [
+            parsePercent$1(symbolOffset[0], symbolSize[0]),
+            parsePercent$1(symbolOffset[1], symbolSize[1])
+        ]);
+    }
+
+    cursorStyle && symbolPath.attr('cursor', cursorStyle);
+
+    // PENDING setColor before setStyle!!!
+    symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor);
+
+    symbolPath.setStyle(itemStyle);
+
+    var opacity = data.getItemVisual(idx, 'opacity');
+    if (opacity != null) {
+        elStyle.opacity = opacity;
+    }
+
+    var liftZ = data.getItemVisual(idx, 'liftZ');
+    var z2Origin = symbolPath.__z2Origin;
+    if (liftZ != null) {
+        if (z2Origin == null) {
+            symbolPath.__z2Origin = symbolPath.z2;
+            symbolPath.z2 += liftZ;
+        }
+    }
+    else if (z2Origin != null) {
+        symbolPath.z2 = z2Origin;
+        symbolPath.__z2Origin = null;
+    }
+
+    var useNameLabel = seriesScope && seriesScope.useNameLabel;
+
+    setLabelStyle(
+        elStyle, hoverItemStyle, labelModel, hoverLabelModel,
+        {
+            labelFetcher: seriesModel,
+            labelDataIndex: idx,
+            defaultText: getLabelDefaultText,
+            isRectText: true,
+            autoColor: color
+        }
+    );
+
+    // Do not execute util needed.
+    function getLabelDefaultText(idx, opt) {
+        return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);
+    }
+
+    symbolPath.off('mouseover')
+        .off('mouseout')
+        .off('emphasis')
+        .off('normal');
+
+    symbolPath.hoverStyle = hoverItemStyle;
+
+    // FIXME
+    // Do not use symbol.trigger('emphasis'), but use symbol.highlight() instead.
+    setHoverStyle(symbolPath);
+
+    var scale = getScale(symbolSize);
+
+    if (hoverAnimation && seriesModel.isAnimationEnabled()) {
+        var onEmphasis = function() {
+            // Do not support this hover animation util some scenario required.
+            // Animation can only be supported in hover layer when using `el.incremetal`.
+            if (this.incremental) {
+                return;
+            }
+            var ratio = scale[1] / scale[0];
+            this.animateTo({
+                scale: [
+                    Math.max(scale[0] * 1.1, scale[0] + 3),
+                    Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)
+                ]
+            }, 400, 'elasticOut');
+        };
+        var onNormal = function() {
+            if (this.incremental) {
+                return;
+            }
+            this.animateTo({
+                scale: scale
+            }, 400, 'elasticOut');
+        };
+        symbolPath.on('mouseover', onEmphasis)
+            .on('mouseout', onNormal)
+            .on('emphasis', onEmphasis)
+            .on('normal', onNormal);
+    }
+};
+
+/**
+ * @param {Function} cb
+ * @param {Object} [opt]
+ * @param {Object} [opt.keepLabel=true]
+ */
+symbolProto.fadeOut = function (cb, opt) {
+    var symbolPath = this.childAt(0);
+    // Avoid mistaken hover when fading out
+    this.silent = symbolPath.silent = true;
+    // Not show text when animating
+    !(opt && opt.keepLabel) && (symbolPath.style.text = null);
+
+    updateProps(
+        symbolPath,
+        {
+            style: {opacity: 0},
+            scale: [0, 0]
+        },
+        this._seriesModel,
+        this.dataIndex,
+        cb
+    );
+};
+
+inherits(SymbolClz$1, Group);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/chart/helper/SymbolDraw
+ */
+
+/**
+ * @constructor
+ * @alias module:echarts/chart/helper/SymbolDraw
+ * @param {module:zrender/graphic/Group} [symbolCtor]
+ */
+function SymbolDraw(symbolCtor) {
+    this.group = new Group();
+
+    this._symbolCtor = symbolCtor || SymbolClz$1;
+}
+
+var symbolDrawProto = SymbolDraw.prototype;
+
+function symbolNeedsDraw(data, point, idx, opt) {
+    return point && !isNaN(point[0]) && !isNaN(point[1])
+        && !(opt.isIgnore && opt.isIgnore(idx))
+        // We do not set clipShape on group, because it will cut part of
+        // the symbol element shape. We use the same clip shape here as
+        // the line clip.
+        && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1]))
+        && data.getItemVisual(idx, 'symbol') !== 'none';
+}
+
+/**
+ * Update symbols draw by new data
+ * @param {module:echarts/data/List} data
+ * @param {Object} [opt] Or isIgnore
+ * @param {Function} [opt.isIgnore]
+ * @param {Object} [opt.clipShape]
+ */
+symbolDrawProto.updateData = function (data, opt) {
+    opt = normalizeUpdateOpt(opt);
+
+    var group = this.group;
+    var seriesModel = data.hostModel;
+    var oldData = this._data;
+    var SymbolCtor = this._symbolCtor;
+
+    var seriesScope = makeSeriesScope(data);
+
+    // There is no oldLineData only when first rendering or switching from
+    // stream mode to normal mode, where previous elements should be removed.
+    if (!oldData) {
+        group.removeAll();
+    }
+
+    data.diff(oldData)
+        .add(function (newIdx) {
+            var point = data.getItemLayout(newIdx);
+            if (symbolNeedsDraw(data, point, newIdx, opt)) {
+                var symbolEl = new SymbolCtor(data, newIdx, seriesScope);
+                symbolEl.attr('position', point);
+                data.setItemGraphicEl(newIdx, symbolEl);
+                group.add(symbolEl);
+            }
+        })
+        .update(function (newIdx, oldIdx) {
+            var symbolEl = oldData.getItemGraphicEl(oldIdx);
+            var point = data.getItemLayout(newIdx);
+            if (!symbolNeedsDraw(data, point, newIdx, opt)) {
+                group.remove(symbolEl);
+                return;
+            }
+            if (!symbolEl) {
+                symbolEl = new SymbolCtor(data, newIdx);
+                symbolEl.attr('position', point);
+            }
+            else {
+                symbolEl.updateData(data, newIdx, seriesScope);
+                updateProps(symbolEl, {
+                    position: point
+                }, seriesModel);
+            }
+
+            // Add back
+            group.add(symbolEl);
+
+            data.setItemGraphicEl(newIdx, symbolEl);
+        })
+        .remove(function (oldIdx) {
+            var el = oldData.getItemGraphicEl(oldIdx);
+            el && el.fadeOut(function () {
+                group.remove(el);
+            });
+        })
+        .execute();
+
+    this._data = data;
+};
+
+symbolDrawProto.isPersistent = function () {
+    return true;
+};
+
+symbolDrawProto.updateLayout = function () {
+    var data = this._data;
+    if (data) {
+        // Not use animation
+        data.eachItemGraphicEl(function (el, idx) {
+            var point = data.getItemLayout(idx);
+            el.attr('position', point);
+        });
+    }
+};
+
+symbolDrawProto.incrementalPrepareUpdate = function (data) {
+    this._seriesScope = makeSeriesScope(data);
+    this._data = null;
+    this.group.removeAll();
+};
+
+/**
+ * Update symbols draw by new data
+ * @param {module:echarts/data/List} data
+ * @param {Object} [opt] Or isIgnore
+ * @param {Function} [opt.isIgnore]
+ * @param {Object} [opt.clipShape]
+ */
+symbolDrawProto.incrementalUpdate = function (taskParams, data, opt) {
+    opt = normalizeUpdateOpt(opt);
+
+    function updateIncrementalAndHover(el) {
+        if (!el.isGroup) {
+            el.incremental = el.useHoverLayer = true;
+        }
+    }
+    for (var idx = taskParams.start; idx < taskParams.end; idx++) {
+        var point = data.getItemLayout(idx);
+        if (symbolNeedsDraw(data, point, idx, opt)) {
+            var el = new this._symbolCtor(data, idx, this._seriesScope);
+            el.traverse(updateIncrementalAndHover);
+            el.attr('position', point);
+            this.group.add(el);
+            data.setItemGraphicEl(idx, el);
+        }
+    }
+};
+
+function normalizeUpdateOpt(opt) {
+    if (opt != null && !isObject$1(opt)) {
+        opt = {isIgnore: opt};
+    }
+    return opt || {};
+}
+
+symbolDrawProto.remove = function (enableAnimation) {
+    var group = this.group;
+    var data = this._data;
+    // Incremental model do not have this._data.
+    if (data && enableAnimation) {
+        data.eachItemGraphicEl(function (el) {
+            el.fadeOut(function () {
+                group.remove(el);
+            });
+        });
+    }
+    else {
+        group.removeAll();
+    }
+};
+
+function makeSeriesScope(data) {
+    var seriesModel = data.hostModel;
+    return {
+        itemStyle: seriesModel.getModel('itemStyle').getItemStyle(['color']),
+        hoverItemStyle: seriesModel.getModel('emphasis.itemStyle').getItemStyle(),
+        symbolRotate: seriesModel.get('symbolRotate'),
+        symbolOffset: seriesModel.get('symbolOffset'),
+        hoverAnimation: seriesModel.get('hoverAnimation'),
+        labelModel: seriesModel.getModel('label'),
+        hoverLabelModel: seriesModel.getModel('emphasis.label'),
+        cursorStyle: seriesModel.get('cursor')
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {Object} coordSys
+ * @param {module:echarts/data/List} data
+ * @param {string} valueOrigin lineSeries.option.areaStyle.origin
+ */
+function prepareDataCoordInfo(coordSys, data, valueOrigin) {
+    var baseAxis = coordSys.getBaseAxis();
+    var valueAxis = coordSys.getOtherAxis(baseAxis);
+    var valueStart = getValueStart(valueAxis, valueOrigin);
+
+    var baseAxisDim = baseAxis.dim;
+    var valueAxisDim = valueAxis.dim;
+    var valueDim = data.mapDimension(valueAxisDim);
+    var baseDim = data.mapDimension(baseAxisDim);
+    var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;
+
+    var dims = map(coordSys.dimensions, function (coordDim) {
+        return data.mapDimension(coordDim);
+    });
+
+    var stacked;
+    var stackResultDim = data.getCalculationInfo('stackResultDimension');
+    if (stacked |= isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line
+        dims[0] = stackResultDim;
+    }
+    if (stacked |= isDimensionStacked(data, dims[1] /*, dims[0]*/)) { // jshint ignore:line
+        dims[1] = stackResultDim;
+    }
+
+    return {
+        dataDimsForPoint: dims,
+        valueStart: valueStart,
+        valueAxisDim: valueAxisDim,
+        baseAxisDim: baseAxisDim,
+        stacked: !!stacked,
+        valueDim: valueDim,
+        baseDim: baseDim,
+        baseDataOffset: baseDataOffset,
+        stackedOverDimension: data.getCalculationInfo('stackedOverDimension')
+    };
+}
+
+function getValueStart(valueAxis, valueOrigin) {
+    var valueStart = 0;
+    var extent = valueAxis.scale.getExtent();
+
+    if (valueOrigin === 'start') {
+        valueStart = extent[0];
+    }
+    else if (valueOrigin === 'end') {
+        valueStart = extent[1];
+    }
+    // auto
+    else {
+        // Both positive
+        if (extent[0] > 0) {
+            valueStart = extent[0];
+        }
+        // Both negative
+        else if (extent[1] < 0) {
+            valueStart = extent[1];
+        }
+        // If is one positive, and one negative, onZero shall be true
+    }
+
+    return valueStart;
+}
+
+function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {
+    var value = NaN;
+    if (dataCoordInfo.stacked) {
+        value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);
+    }
+    if (isNaN(value)) {
+        value = dataCoordInfo.valueStart;
+    }
+
+    var baseDataOffset = dataCoordInfo.baseDataOffset;
+    var stackedData = [];
+    stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);
+    stackedData[1 - baseDataOffset] = value;
+
+    return coordSys.dataToPoint(stackedData);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// var arrayDiff = require('zrender/src/core/arrayDiff');
+// 'zrender/src/core/arrayDiff' has been used before, but it did
+// not do well in performance when roam with fixed dataZoom window.
+
+// function convertToIntId(newIdList, oldIdList) {
+//     // Generate int id instead of string id.
+//     // Compare string maybe slow in score function of arrDiff
+
+//     // Assume id in idList are all unique
+//     var idIndicesMap = {};
+//     var idx = 0;
+//     for (var i = 0; i < newIdList.length; i++) {
+//         idIndicesMap[newIdList[i]] = idx;
+//         newIdList[i] = idx++;
+//     }
+//     for (var i = 0; i < oldIdList.length; i++) {
+//         var oldId = oldIdList[i];
+//         // Same with newIdList
+//         if (idIndicesMap[oldId]) {
+//             oldIdList[i] = idIndicesMap[oldId];
+//         }
+//         else {
+//             oldIdList[i] = idx++;
+//         }
+//     }
+// }
+
+function diffData(oldData, newData) {
+    var diffResult = [];
+
+    newData.diff(oldData)
+        .add(function (idx) {
+            diffResult.push({cmd: '+', idx: idx});
+        })
+        .update(function (newIdx, oldIdx) {
+            diffResult.push({cmd: '=', idx: oldIdx, idx1: newIdx});
+        })
+        .remove(function (idx) {
+            diffResult.push({cmd: '-', idx: idx});
+        })
+        .execute();
+
+    return diffResult;
+}
+
+var lineAnimationDiff = function (
+    oldData, newData,
+    oldStackedOnPoints, newStackedOnPoints,
+    oldCoordSys, newCoordSys,
+    oldValueOrigin, newValueOrigin
+) {
+    var diff = diffData(oldData, newData);
+
+    // var newIdList = newData.mapArray(newData.getId);
+    // var oldIdList = oldData.mapArray(oldData.getId);
+
+    // convertToIntId(newIdList, oldIdList);
+
+    // // FIXME One data ?
+    // diff = arrayDiff(oldIdList, newIdList);
+
+    var currPoints = [];
+    var nextPoints = [];
+    // Points for stacking base line
+    var currStackedPoints = [];
+    var nextStackedPoints = [];
+
+    var status = [];
+    var sortedIndices = [];
+    var rawIndices = [];
+
+    var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);
+    var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);
+
+    for (var i = 0; i < diff.length; i++) {
+        var diffItem = diff[i];
+        var pointAdded = true;
+
+        // FIXME, animation is not so perfect when dataZoom window moves fast
+        // Which is in case remvoing or add more than one data in the tail or head
+        switch (diffItem.cmd) {
+            case '=':
+                var currentPt = oldData.getItemLayout(diffItem.idx);
+                var nextPt = newData.getItemLayout(diffItem.idx1);
+                // If previous data is NaN, use next point directly
+                if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {
+                    currentPt = nextPt.slice();
+                }
+                currPoints.push(currentPt);
+                nextPoints.push(nextPt);
+
+                currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);
+                nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);
+
+                rawIndices.push(newData.getRawIndex(diffItem.idx1));
+                break;
+            case '+':
+                var idx = diffItem.idx;
+                currPoints.push(
+                    oldCoordSys.dataToPoint([
+                        newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx),
+                        newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)
+                    ])
+                );
+
+                nextPoints.push(newData.getItemLayout(idx).slice());
+
+                currStackedPoints.push(
+                    getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx)
+                );
+                nextStackedPoints.push(newStackedOnPoints[idx]);
+
+                rawIndices.push(newData.getRawIndex(idx));
+                break;
+            case '-':
+                var idx = diffItem.idx;
+                var rawIndex = oldData.getRawIndex(idx);
+                // Data is replaced. In the case of dynamic data queue
+                // FIXME FIXME FIXME
+                if (rawIndex !== idx) {
+                    currPoints.push(oldData.getItemLayout(idx));
+                    nextPoints.push(newCoordSys.dataToPoint([
+                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx),
+                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)
+                    ]));
+
+                    currStackedPoints.push(oldStackedOnPoints[idx]);
+                    nextStackedPoints.push(
+                        getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx)
+                    );
+
+                    rawIndices.push(rawIndex);
+                }
+                else {
+                    pointAdded = false;
+                }
+        }
+
+        // Original indices
+        if (pointAdded) {
+            status.push(diffItem);
+            sortedIndices.push(sortedIndices.length);
+        }
+    }
+
+    // Diff result may be crossed if all items are changed
+    // Sort by data index
+    sortedIndices.sort(function (a, b) {
+        return rawIndices[a] - rawIndices[b];
+    });
+
+    var sortedCurrPoints = [];
+    var sortedNextPoints = [];
+
+    var sortedCurrStackedPoints = [];
+    var sortedNextStackedPoints = [];
+
+    var sortedStatus = [];
+    for (var i = 0; i < sortedIndices.length; i++) {
+        var idx = sortedIndices[i];
+        sortedCurrPoints[i] = currPoints[idx];
+        sortedNextPoints[i] = nextPoints[idx];
+
+        sortedCurrStackedPoints[i] = currStackedPoints[idx];
+        sortedNextStackedPoints[i] = nextStackedPoints[idx];
+
+        sortedStatus[i] = status[idx];
+    }
+
+    return {
+        current: sortedCurrPoints,
+        next: sortedNextPoints,
+
+        stackedOnCurrent: sortedCurrStackedPoints,
+        stackedOnNext: sortedNextStackedPoints,
+
+        status: sortedStatus
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Poly path support NaN point
+
+var vec2Min = min;
+var vec2Max = max;
+
+var scaleAndAdd$1 = scaleAndAdd;
+var v2Copy = copy;
+
+// Temporary variable
+var v = [];
+var cp0 = [];
+var cp1 = [];
+
+function isPointNull(p) {
+    return isNaN(p[0]) || isNaN(p[1]);
+}
+
+function drawSegment(
+    ctx, points, start, segLen, allLen,
+    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls
+) {
+    // if (smoothMonotone == null) {
+    //     if (isMono(points, 'x')) {
+    //         return drawMono(ctx, points, start, segLen, allLen,
+    //             dir, smoothMin, smoothMax, smooth, 'x', connectNulls);
+    //     }
+    //     else if (isMono(points, 'y')) {
+    //         return drawMono(ctx, points, start, segLen, allLen,
+    //             dir, smoothMin, smoothMax, smooth, 'y', connectNulls);
+    //     }
+    //     else {
+    //         return drawNonMono.apply(this, arguments);
+    //     }
+    // }
+    // else if (smoothMonotone !== 'none' && isMono(points, smoothMonotone)) {
+    //     return drawMono.apply(this, arguments);
+    // }
+    // else {
+    //     return drawNonMono.apply(this, arguments);
+    // }
+    if (smoothMonotone === 'none' || !smoothMonotone) {
+        return drawNonMono.apply(this, arguments);
+    }
+    else {
+        return drawMono.apply(this, arguments);
+    }
+}
+
+/**
+ * Check if points is in monotone.
+ *
+ * @param {number[][]} points         Array of points which is in [x, y] form
+ * @param {string}     smoothMonotone 'x', 'y', or 'none', stating for which
+ *                                    dimension that is checking.
+ *                                    If is 'none', `drawNonMono` should be
+ *                                    called.
+ *                                    If is undefined, either being monotone
+ *                                    in 'x' or 'y' will call `drawMono`.
+ */
+// function isMono(points, smoothMonotone) {
+//     if (points.length <= 1) {
+//         return true;
+//     }
+
+//     var dim = smoothMonotone === 'x' ? 0 : 1;
+//     var last = points[0][dim];
+//     var lastDiff = 0;
+//     for (var i = 1; i < points.length; ++i) {
+//         var diff = points[i][dim] - last;
+//         if (!isNaN(diff) && !isNaN(lastDiff)
+//             && diff !== 0 && lastDiff !== 0
+//             && ((diff >= 0) !== (lastDiff >= 0))
+//         ) {
+//             return false;
+//         }
+//         if (!isNaN(diff) && diff !== 0) {
+//             lastDiff = diff;
+//             last = points[i][dim];
+//         }
+//     }
+//     return true;
+// }
+
+/**
+ * Draw smoothed line in monotone, in which only vertical or horizontal bezier
+ * control points will be used. This should be used when points are monotone
+ * either in x or y dimension.
+ */
+function drawMono(
+    ctx, points, start, segLen, allLen,
+    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls
+) {
+    var prevIdx = 0;
+    var idx = start;
+    for (var k = 0; k < segLen; k++) {
+        var p = points[idx];
+        if (idx >= allLen || idx < 0) {
+            break;
+        }
+        if (isPointNull(p)) {
+            if (connectNulls) {
+                idx += dir;
+                continue;
+            }
+            break;
+        }
+
+        if (idx === start) {
+            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);
+        }
+        else {
+            if (smooth > 0) {
+                var prevP = points[prevIdx];
+                var dim = smoothMonotone === 'y' ? 1 : 0;
+
+                // Length of control point to p, either in x or y, but not both
+                var ctrlLen = (p[dim] - prevP[dim]) * smooth;
+
+                v2Copy(cp0, prevP);
+                cp0[dim] = prevP[dim] + ctrlLen;
+
+                v2Copy(cp1, p);
+                cp1[dim] = p[dim] - ctrlLen;
+
+                ctx.bezierCurveTo(
+                    cp0[0], cp0[1],
+                    cp1[0], cp1[1],
+                    p[0], p[1]
+                );
+            }
+            else {
+                ctx.lineTo(p[0], p[1]);
+            }
+        }
+
+        prevIdx = idx;
+        idx += dir;
+    }
+
+    return k;
+}
+
+/**
+ * Draw smoothed line in non-monotone, in may cause undesired curve in extreme
+ * situations. This should be used when points are non-monotone neither in x or
+ * y dimension.
+ */
+function drawNonMono(
+    ctx, points, start, segLen, allLen,
+    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls
+) {
+    var prevIdx = 0;
+    var idx = start;
+    for (var k = 0; k < segLen; k++) {
+        var p = points[idx];
+        if (idx >= allLen || idx < 0) {
+            break;
+        }
+        if (isPointNull(p)) {
+            if (connectNulls) {
+                idx += dir;
+                continue;
+            }
+            break;
+        }
+
+        if (idx === start) {
+            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);
+            v2Copy(cp0, p);
+        }
+        else {
+            if (smooth > 0) {
+                var nextIdx = idx + dir;
+                var nextP = points[nextIdx];
+                if (connectNulls) {
+                    // Find next point not null
+                    while (nextP && isPointNull(points[nextIdx])) {
+                        nextIdx += dir;
+                        nextP = points[nextIdx];
+                    }
+                }
+
+                var ratioNextSeg = 0.5;
+                var prevP = points[prevIdx];
+                var nextP = points[nextIdx];
+                // Last point
+                if (!nextP || isPointNull(nextP)) {
+                    v2Copy(cp1, p);
+                }
+                else {
+                    // If next data is null in not connect case
+                    if (isPointNull(nextP) && !connectNulls) {
+                        nextP = p;
+                    }
+
+                    sub(v, nextP, prevP);
+
+                    var lenPrevSeg;
+                    var lenNextSeg;
+                    if (smoothMonotone === 'x' || smoothMonotone === 'y') {
+                        var dim = smoothMonotone === 'x' ? 0 : 1;
+                        lenPrevSeg = Math.abs(p[dim] - prevP[dim]);
+                        lenNextSeg = Math.abs(p[dim] - nextP[dim]);
+                    }
+                    else {
+                        lenPrevSeg = dist(p, prevP);
+                        lenNextSeg = dist(p, nextP);
+                    }
+
+                    // Use ratio of seg length
+                    ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);
+
+                    scaleAndAdd$1(cp1, p, v, -smooth * (1 - ratioNextSeg));
+                }
+                // Smooth constraint
+                vec2Min(cp0, cp0, smoothMax);
+                vec2Max(cp0, cp0, smoothMin);
+                vec2Min(cp1, cp1, smoothMax);
+                vec2Max(cp1, cp1, smoothMin);
+
+                ctx.bezierCurveTo(
+                    cp0[0], cp0[1],
+                    cp1[0], cp1[1],
+                    p[0], p[1]
+                );
+                // cp0 of next segment
+                scaleAndAdd$1(cp0, p, v, smooth * ratioNextSeg);
+            }
+            else {
+                ctx.lineTo(p[0], p[1]);
+            }
+        }
+
+        prevIdx = idx;
+        idx += dir;
+    }
+
+    return k;
+}
+
+function getBoundingBox(points, smoothConstraint) {
+    var ptMin = [Infinity, Infinity];
+    var ptMax = [-Infinity, -Infinity];
+    if (smoothConstraint) {
+        for (var i = 0; i < points.length; i++) {
+            var pt = points[i];
+            if (pt[0] < ptMin[0]) { ptMin[0] = pt[0]; }
+            if (pt[1] < ptMin[1]) { ptMin[1] = pt[1]; }
+            if (pt[0] > ptMax[0]) { ptMax[0] = pt[0]; }
+            if (pt[1] > ptMax[1]) { ptMax[1] = pt[1]; }
+        }
+    }
+    return {
+        min: smoothConstraint ? ptMin : ptMax,
+        max: smoothConstraint ? ptMax : ptMin
+    };
+}
+
+var Polyline$1 = Path.extend({
+
+    type: 'ec-polyline',
+
+    shape: {
+        points: [],
+
+        smooth: 0,
+
+        smoothConstraint: true,
+
+        smoothMonotone: null,
+
+        connectNulls: false
+    },
+
+    style: {
+        fill: null,
+
+        stroke: '#000'
+    },
+
+    brush: fixClipWithShadow(Path.prototype.brush),
+
+    buildPath: function (ctx, shape) {
+        var points = shape.points;
+
+        var i = 0;
+        var len$$1 = points.length;
+
+        var result = getBoundingBox(points, shape.smoothConstraint);
+
+        if (shape.connectNulls) {
+            // Must remove first and last null values avoid draw error in polygon
+            for (; len$$1 > 0; len$$1--) {
+                if (!isPointNull(points[len$$1 - 1])) {
+                    break;
+                }
+            }
+            for (; i < len$$1; i++) {
+                if (!isPointNull(points[i])) {
+                    break;
+                }
+            }
+        }
+        while (i < len$$1) {
+            i += drawSegment(
+                ctx, points, i, len$$1, len$$1,
+                1, result.min, result.max, shape.smooth,
+                shape.smoothMonotone, shape.connectNulls
+            ) + 1;
+        }
+    }
+});
+
+var Polygon$1 = Path.extend({
+
+    type: 'ec-polygon',
+
+    shape: {
+        points: [],
+
+        // Offset between stacked base points and points
+        stackedOnPoints: [],
+
+        smooth: 0,
+
+        stackedOnSmooth: 0,
+
+        smoothConstraint: true,
+
+        smoothMonotone: null,
+
+        connectNulls: false
+    },
+
+    brush: fixClipWithShadow(Path.prototype.brush),
+
+    buildPath: function (ctx, shape) {
+        var points = shape.points;
+        var stackedOnPoints = shape.stackedOnPoints;
+
+        var i = 0;
+        var len$$1 = points.length;
+        var smoothMonotone = shape.smoothMonotone;
+        var bbox = getBoundingBox(points, shape.smoothConstraint);
+        var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);
+
+        if (shape.connectNulls) {
+            // Must remove first and last null values avoid draw error in polygon
+            for (; len$$1 > 0; len$$1--) {
+                if (!isPointNull(points[len$$1 - 1])) {
+                    break;
+                }
+            }
+            for (; i < len$$1; i++) {
+                if (!isPointNull(points[i])) {
+                    break;
+                }
+            }
+        }
+        while (i < len$$1) {
+            var k = drawSegment(
+                ctx, points, i, len$$1, len$$1,
+                1, bbox.min, bbox.max, shape.smooth,
+                smoothMonotone, shape.connectNulls
+            );
+            drawSegment(
+                ctx, stackedOnPoints, i + k - 1, k, len$$1,
+                -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth,
+                smoothMonotone, shape.connectNulls
+            );
+            i += k + 1;
+
+            ctx.closePath();
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME step not support polar
+
+function isPointsSame(points1, points2) {
+    if (points1.length !== points2.length) {
+        return;
+    }
+    for (var i = 0; i < points1.length; i++) {
+        var p1 = points1[i];
+        var p2 = points2[i];
+        if (p1[0] !== p2[0] || p1[1] !== p2[1]) {
+            return;
+        }
+    }
+    return true;
+}
+
+function getSmooth(smooth) {
+    return typeof (smooth) === 'number' ? smooth : (smooth ? 0.5 : 0);
+}
+
+function getAxisExtentWithGap(axis) {
+    var extent = axis.getGlobalExtent();
+    if (axis.onBand) {
+        // Remove extra 1px to avoid line miter in clipped edge
+        var halfBandWidth = axis.getBandWidth() / 2 - 1;
+        var dir = extent[1] > extent[0] ? 1 : -1;
+        extent[0] += dir * halfBandWidth;
+        extent[1] -= dir * halfBandWidth;
+    }
+    return extent;
+}
+
+/**
+ * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys
+ * @param {module:echarts/data/List} data
+ * @param {Object} dataCoordInfo
+ * @param {Array.<Array.<number>>} points
+ */
+function getStackedOnPoints(coordSys, data, dataCoordInfo) {
+    if (!dataCoordInfo.valueDim) {
+        return [];
+    }
+
+    var points = [];
+    for (var idx = 0, len = data.count(); idx < len; idx++) {
+        points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx));
+    }
+
+    return points;
+}
+
+function createGridClipShape(cartesian, hasAnimation, forSymbol, seriesModel) {
+    var xExtent = getAxisExtentWithGap(cartesian.getAxis('x'));
+    var yExtent = getAxisExtentWithGap(cartesian.getAxis('y'));
+    var isHorizontal = cartesian.getBaseAxis().isHorizontal();
+
+    var x = Math.min(xExtent[0], xExtent[1]);
+    var y = Math.min(yExtent[0], yExtent[1]);
+    var width = Math.max(xExtent[0], xExtent[1]) - x;
+    var height = Math.max(yExtent[0], yExtent[1]) - y;
+
+    // Avoid float number rounding error for symbol on the edge of axis extent.
+    // See #7913 and `test/dataZoom-clip.html`.
+    if (forSymbol) {
+        x -= 0.5;
+        width += 0.5;
+        y -= 0.5;
+        height += 0.5;
+    }
+    else {
+        var lineWidth = seriesModel.get('lineStyle.width') || 2;
+        // Expand clip shape to avoid clipping when line value exceeds axis
+        var expandSize = seriesModel.get('clipOverflow') ? lineWidth / 2 : Math.max(width, height);
+        if (isHorizontal) {
+            y -= expandSize;
+            height += expandSize * 2;
+        }
+        else {
+            x -= expandSize;
+            width += expandSize * 2;
+        }
+    }
+
+    var clipPath = new Rect({
+        shape: {
+            x: x,
+            y: y,
+            width: width,
+            height: height
+        }
+    });
+
+    if (hasAnimation) {
+        clipPath.shape[isHorizontal ? 'width' : 'height'] = 0;
+        initProps(clipPath, {
+            shape: {
+                width: width,
+                height: height
+            }
+        }, seriesModel);
+    }
+
+    return clipPath;
+}
+
+function createPolarClipShape(polar, hasAnimation, forSymbol, seriesModel) {
+    var angleAxis = polar.getAngleAxis();
+    var radiusAxis = polar.getRadiusAxis();
+
+    var radiusExtent = radiusAxis.getExtent().slice();
+    radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();
+    var angleExtent = angleAxis.getExtent();
+
+    var RADIAN = Math.PI / 180;
+
+    // Avoid float number rounding error for symbol on the edge of axis extent.
+    if (forSymbol) {
+        radiusExtent[0] -= 0.5;
+        radiusExtent[1] += 0.5;
+    }
+
+    var clipPath = new Sector({
+        shape: {
+            cx: round$1(polar.cx, 1),
+            cy: round$1(polar.cy, 1),
+            r0: round$1(radiusExtent[0], 1),
+            r: round$1(radiusExtent[1], 1),
+            startAngle: -angleExtent[0] * RADIAN,
+            endAngle: -angleExtent[1] * RADIAN,
+            clockwise: angleAxis.inverse
+        }
+    });
+
+    if (hasAnimation) {
+        clipPath.shape.endAngle = -angleExtent[0] * RADIAN;
+        initProps(clipPath, {
+            shape: {
+                endAngle: -angleExtent[1] * RADIAN
+            }
+        }, seriesModel);
+    }
+
+    return clipPath;
+}
+
+function createClipShape(coordSys, hasAnimation, forSymbol, seriesModel) {
+    return coordSys.type === 'polar'
+        ? createPolarClipShape(coordSys, hasAnimation, forSymbol, seriesModel)
+        : createGridClipShape(coordSys, hasAnimation, forSymbol, seriesModel);
+}
+
+function turnPointsIntoStep(points, coordSys, stepTurnAt) {
+    var baseAxis = coordSys.getBaseAxis();
+    var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;
+
+    var stepPoints = [];
+    for (var i = 0; i < points.length - 1; i++) {
+        var nextPt = points[i + 1];
+        var pt = points[i];
+        stepPoints.push(pt);
+
+        var stepPt = [];
+        switch (stepTurnAt) {
+            case 'end':
+                stepPt[baseIndex] = nextPt[baseIndex];
+                stepPt[1 - baseIndex] = pt[1 - baseIndex];
+                // default is start
+                stepPoints.push(stepPt);
+                break;
+            case 'middle':
+                // default is start
+                var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;
+                var stepPt2 = [];
+                stepPt[baseIndex] = stepPt2[baseIndex] = middle;
+                stepPt[1 - baseIndex] = pt[1 - baseIndex];
+                stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];
+                stepPoints.push(stepPt);
+                stepPoints.push(stepPt2);
+                break;
+            default:
+                stepPt[baseIndex] = pt[baseIndex];
+                stepPt[1 - baseIndex] = nextPt[1 - baseIndex];
+                // default is start
+                stepPoints.push(stepPt);
+        }
+    }
+    // Last points
+    points[i] && stepPoints.push(points[i]);
+    return stepPoints;
+}
+
+function getVisualGradient(data, coordSys) {
+    var visualMetaList = data.getVisual('visualMeta');
+    if (!visualMetaList || !visualMetaList.length || !data.count()) {
+        // When data.count() is 0, gradient range can not be calculated.
+        return;
+    }
+
+    if (coordSys.type !== 'cartesian2d') {
+        if (__DEV__) {
+            console.warn('Visual map on line style is only supported on cartesian2d.');
+        }
+        return;
+    }
+
+    var coordDim;
+    var visualMeta;
+
+    for (var i = visualMetaList.length - 1; i >= 0; i--) {
+        var dimIndex = visualMetaList[i].dimension;
+        var dimName = data.dimensions[dimIndex];
+        var dimInfo = data.getDimensionInfo(dimName);
+        coordDim = dimInfo && dimInfo.coordDim;
+        // Can only be x or y
+        if (coordDim === 'x' || coordDim === 'y') {
+            visualMeta = visualMetaList[i];
+            break;
+        }
+    }
+
+    if (!visualMeta) {
+        if (__DEV__) {
+            console.warn('Visual map on line style only support x or y dimension.');
+        }
+        return;
+    }
+
+    // If the area to be rendered is bigger than area defined by LinearGradient,
+    // the canvas spec prescribes that the color of the first stop and the last
+    // stop should be used. But if two stops are added at offset 0, in effect
+    // browsers use the color of the second stop to render area outside
+    // LinearGradient. So we can only infinitesimally extend area defined in
+    // LinearGradient to render `outerColors`.
+
+    var axis = coordSys.getAxis(coordDim);
+
+    // dataToCoor mapping may not be linear, but must be monotonic.
+    var colorStops = map(visualMeta.stops, function (stop) {
+        return {
+            coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),
+            color: stop.color
+        };
+    });
+    var stopLen = colorStops.length;
+    var outerColors = visualMeta.outerColors.slice();
+
+    if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {
+        colorStops.reverse();
+        outerColors.reverse();
+    }
+
+    var tinyExtent = 10; // Arbitrary value: 10px
+    var minCoord = colorStops[0].coord - tinyExtent;
+    var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;
+    var coordSpan = maxCoord - minCoord;
+
+    if (coordSpan < 1e-3) {
+        return 'transparent';
+    }
+
+    each$1(colorStops, function (stop) {
+        stop.offset = (stop.coord - minCoord) / coordSpan;
+    });
+    colorStops.push({
+        offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,
+        color: outerColors[1] || 'transparent'
+    });
+    colorStops.unshift({ // notice colorStops.length have been changed.
+        offset: stopLen ? colorStops[0].offset : 0.5,
+        color: outerColors[0] || 'transparent'
+    });
+
+    // zrUtil.each(colorStops, function (colorStop) {
+    //     // Make sure each offset has rounded px to avoid not sharp edge
+    //     colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);
+    // });
+
+    var gradient = new LinearGradient(0, 0, 0, 0, colorStops, true);
+    gradient[coordDim] = minCoord;
+    gradient[coordDim + '2'] = maxCoord;
+
+    return gradient;
+}
+
+function getIsIgnoreFunc(seriesModel, data, coordSys) {
+    var showAllSymbol = seriesModel.get('showAllSymbol');
+    var isAuto = showAllSymbol === 'auto';
+
+    if (showAllSymbol && !isAuto) {
+        return;
+    }
+
+    var categoryAxis = coordSys.getAxesByScale('ordinal')[0];
+    if (!categoryAxis) {
+        return;
+    }
+
+    // Note that category label interval strategy might bring some weird effect
+    // in some scenario: users may wonder why some of the symbols are not
+    // displayed. So we show all symbols as possible as we can.
+    if (isAuto
+        // Simplify the logic, do not determine label overlap here.
+        && canShowAllSymbolForCategory(categoryAxis, data)
+    ) {
+        return;
+    }
+
+    // Otherwise follow the label interval strategy on category axis.
+    var categoryDataDim = data.mapDimension(categoryAxis.dim);
+    var labelMap = {};
+
+    each$1(categoryAxis.getViewLabels(), function (labelItem) {
+        labelMap[labelItem.tickValue] = 1;
+    });
+
+    return function (dataIndex) {
+        return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));
+    };
+}
+
+function canShowAllSymbolForCategory(categoryAxis, data) {
+    // In mose cases, line is monotonous on category axis, and the label size
+    // is close with each other. So we check the symbol size and some of the
+    // label size alone with the category axis to estimate whether all symbol
+    // can be shown without overlap.
+    var axisExtent = categoryAxis.getExtent();
+    var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();
+    isNaN(availSize) && (availSize = 0); // 0/0 is NaN.
+
+    // Sampling some points, max 5.
+    var dataLen = data.count();
+    var step = Math.max(1, Math.round(dataLen / 5));
+    for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {
+        if (SymbolClz$1.getSymbolSize(
+                data, dataIndex
+            // Only for cartesian, where `isHorizontal` exists.
+            )[categoryAxis.isHorizontal() ? 1 : 0]
+            // Empirical number
+            * 1.5 > availSize
+        ) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+Chart.extend({
+
+    type: 'line',
+
+    init: function () {
+        var lineGroup = new Group();
+
+        var symbolDraw = new SymbolDraw();
+        this.group.add(symbolDraw.group);
+
+        this._symbolDraw = symbolDraw;
+        this._lineGroup = lineGroup;
+    },
+
+    render: function (seriesModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+        var group = this.group;
+        var data = seriesModel.getData();
+        var lineStyleModel = seriesModel.getModel('lineStyle');
+        var areaStyleModel = seriesModel.getModel('areaStyle');
+
+        var points = data.mapArray(data.getItemLayout);
+
+        var isCoordSysPolar = coordSys.type === 'polar';
+        var prevCoordSys = this._coordSys;
+
+        var symbolDraw = this._symbolDraw;
+        var polyline = this._polyline;
+        var polygon = this._polygon;
+
+        var lineGroup = this._lineGroup;
+
+        var hasAnimation = seriesModel.get('animation');
+
+        var isAreaChart = !areaStyleModel.isEmpty();
+
+        var valueOrigin = areaStyleModel.get('origin');
+        var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);
+
+        var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);
+
+        var showSymbol = seriesModel.get('showSymbol');
+
+        var isIgnoreFunc = showSymbol && !isCoordSysPolar
+            && getIsIgnoreFunc(seriesModel, data, coordSys);
+
+        // Remove temporary symbols
+        var oldData = this._data;
+        oldData && oldData.eachItemGraphicEl(function (el, idx) {
+            if (el.__temp) {
+                group.remove(el);
+                oldData.setItemGraphicEl(idx, null);
+            }
+        });
+
+        // Remove previous created symbols if showSymbol changed to false
+        if (!showSymbol) {
+            symbolDraw.remove();
+        }
+
+        group.add(lineGroup);
+
+        // FIXME step not support polar
+        var step = !isCoordSysPolar && seriesModel.get('step');
+        // Initialization animation or coordinate system changed
+        if (
+            !(polyline && prevCoordSys.type === coordSys.type && step === this._step)
+        ) {
+            showSymbol && symbolDraw.updateData(data, {
+                isIgnore: isIgnoreFunc,
+                clipShape: createClipShape(coordSys, false, true, seriesModel)
+            });
+
+            if (step) {
+                // TODO If stacked series is not step
+                points = turnPointsIntoStep(points, coordSys, step);
+                stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);
+            }
+
+            polyline = this._newPolyline(points, coordSys, hasAnimation);
+            if (isAreaChart) {
+                polygon = this._newPolygon(
+                    points, stackedOnPoints,
+                    coordSys, hasAnimation
+                );
+            }
+            lineGroup.setClipPath(createClipShape(coordSys, true, false, seriesModel));
+        }
+        else {
+            if (isAreaChart && !polygon) {
+                // If areaStyle is added
+                polygon = this._newPolygon(
+                    points, stackedOnPoints,
+                    coordSys, hasAnimation
+                );
+            }
+            else if (polygon && !isAreaChart) {
+                // If areaStyle is removed
+                lineGroup.remove(polygon);
+                polygon = this._polygon = null;
+            }
+
+            // Update clipPath
+            lineGroup.setClipPath(createClipShape(coordSys, false, false, seriesModel));
+
+            // Always update, or it is wrong in the case turning on legend
+            // because points are not changed
+            showSymbol && symbolDraw.updateData(data, {
+                isIgnore: isIgnoreFunc,
+                clipShape: createClipShape(coordSys, false, true, seriesModel)
+            });
+
+            // Stop symbol animation and sync with line points
+            // FIXME performance?
+            data.eachItemGraphicEl(function (el) {
+                el.stopAnimation(true);
+            });
+
+            // In the case data zoom triggerred refreshing frequently
+            // Data may not change if line has a category axis. So it should animate nothing
+            if (!isPointsSame(this._stackedOnPoints, stackedOnPoints)
+                || !isPointsSame(this._points, points)
+            ) {
+                if (hasAnimation) {
+                    this._updateAnimation(
+                        data, stackedOnPoints, coordSys, api, step, valueOrigin
+                    );
+                }
+                else {
+                    // Not do it in update with animation
+                    if (step) {
+                        // TODO If stacked series is not step
+                        points = turnPointsIntoStep(points, coordSys, step);
+                        stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);
+                    }
+
+                    polyline.setShape({
+                        points: points
+                    });
+                    polygon && polygon.setShape({
+                        points: points,
+                        stackedOnPoints: stackedOnPoints
+                    });
+                }
+            }
+        }
+
+        var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');
+
+        polyline.useStyle(defaults(
+            // Use color in lineStyle first
+            lineStyleModel.getLineStyle(),
+            {
+                fill: 'none',
+                stroke: visualColor,
+                lineJoin: 'bevel'
+            }
+        ));
+
+        var smooth = seriesModel.get('smooth');
+        smooth = getSmooth(seriesModel.get('smooth'));
+        polyline.setShape({
+            smooth: smooth,
+            smoothMonotone: seriesModel.get('smoothMonotone'),
+            connectNulls: seriesModel.get('connectNulls')
+        });
+
+        if (polygon) {
+            var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');
+            var stackedOnSmooth = 0;
+
+            polygon.useStyle(defaults(
+                areaStyleModel.getAreaStyle(),
+                {
+                    fill: visualColor,
+                    opacity: 0.7,
+                    lineJoin: 'bevel'
+                }
+            ));
+
+            if (stackedOnSeries) {
+                stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));
+            }
+
+            polygon.setShape({
+                smooth: smooth,
+                stackedOnSmooth: stackedOnSmooth,
+                smoothMonotone: seriesModel.get('smoothMonotone'),
+                connectNulls: seriesModel.get('connectNulls')
+            });
+        }
+
+        this._data = data;
+        // Save the coordinate system for transition animation when data changed
+        this._coordSys = coordSys;
+        this._stackedOnPoints = stackedOnPoints;
+        this._points = points;
+        this._step = step;
+        this._valueOrigin = valueOrigin;
+    },
+
+    dispose: function () {},
+
+    highlight: function (seriesModel, ecModel, api, payload) {
+        var data = seriesModel.getData();
+        var dataIndex = queryDataIndex(data, payload);
+
+        if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {
+            var symbol = data.getItemGraphicEl(dataIndex);
+            if (!symbol) {
+                // Create a temporary symbol if it is not exists
+                var pt = data.getItemLayout(dataIndex);
+                if (!pt) {
+                    // Null data
+                    return;
+                }
+                symbol = new SymbolClz$1(data, dataIndex);
+                symbol.position = pt;
+                symbol.setZ(
+                    seriesModel.get('zlevel'),
+                    seriesModel.get('z')
+                );
+                symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);
+                symbol.__temp = true;
+                data.setItemGraphicEl(dataIndex, symbol);
+
+                // Stop scale animation
+                symbol.stopSymbolAnimation(true);
+
+                this.group.add(symbol);
+            }
+            symbol.highlight();
+        }
+        else {
+            // Highlight whole series
+            Chart.prototype.highlight.call(
+                this, seriesModel, ecModel, api, payload
+            );
+        }
+    },
+
+    downplay: function (seriesModel, ecModel, api, payload) {
+        var data = seriesModel.getData();
+        var dataIndex = queryDataIndex(data, payload);
+        if (dataIndex != null && dataIndex >= 0) {
+            var symbol = data.getItemGraphicEl(dataIndex);
+            if (symbol) {
+                if (symbol.__temp) {
+                    data.setItemGraphicEl(dataIndex, null);
+                    this.group.remove(symbol);
+                }
+                else {
+                    symbol.downplay();
+                }
+            }
+        }
+        else {
+            // FIXME
+            // can not downplay completely.
+            // Downplay whole series
+            Chart.prototype.downplay.call(
+                this, seriesModel, ecModel, api, payload
+            );
+        }
+    },
+
+    /**
+     * @param {module:zrender/container/Group} group
+     * @param {Array.<Array.<number>>} points
+     * @private
+     */
+    _newPolyline: function (points) {
+        var polyline = this._polyline;
+        // Remove previous created polyline
+        if (polyline) {
+            this._lineGroup.remove(polyline);
+        }
+
+        polyline = new Polyline$1({
+            shape: {
+                points: points
+            },
+            silent: true,
+            z2: 10
+        });
+
+        this._lineGroup.add(polyline);
+
+        this._polyline = polyline;
+
+        return polyline;
+    },
+
+    /**
+     * @param {module:zrender/container/Group} group
+     * @param {Array.<Array.<number>>} stackedOnPoints
+     * @param {Array.<Array.<number>>} points
+     * @private
+     */
+    _newPolygon: function (points, stackedOnPoints) {
+        var polygon = this._polygon;
+        // Remove previous created polygon
+        if (polygon) {
+            this._lineGroup.remove(polygon);
+        }
+
+        polygon = new Polygon$1({
+            shape: {
+                points: points,
+                stackedOnPoints: stackedOnPoints
+            },
+            silent: true
+        });
+
+        this._lineGroup.add(polygon);
+
+        this._polygon = polygon;
+        return polygon;
+    },
+
+    /**
+     * @private
+     */
+    // FIXME Two value axis
+    _updateAnimation: function (data, stackedOnPoints, coordSys, api, step, valueOrigin) {
+        var polyline = this._polyline;
+        var polygon = this._polygon;
+        var seriesModel = data.hostModel;
+
+        var diff = lineAnimationDiff(
+            this._data, data,
+            this._stackedOnPoints, stackedOnPoints,
+            this._coordSys, coordSys,
+            this._valueOrigin, valueOrigin
+        );
+
+        var current = diff.current;
+        var stackedOnCurrent = diff.stackedOnCurrent;
+        var next = diff.next;
+        var stackedOnNext = diff.stackedOnNext;
+        if (step) {
+            // TODO If stacked series is not step
+            current = turnPointsIntoStep(diff.current, coordSys, step);
+            stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);
+            next = turnPointsIntoStep(diff.next, coordSys, step);
+            stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);
+        }
+        // `diff.current` is subset of `current` (which should be ensured by
+        // turnPointsIntoStep), so points in `__points` can be updated when
+        // points in `current` are update during animation.
+        polyline.shape.__points = diff.current;
+        polyline.shape.points = current;
+
+        updateProps(polyline, {
+            shape: {
+                points: next
+            }
+        }, seriesModel);
+
+        if (polygon) {
+            polygon.setShape({
+                points: current,
+                stackedOnPoints: stackedOnCurrent
+            });
+            updateProps(polygon, {
+                shape: {
+                    points: next,
+                    stackedOnPoints: stackedOnNext
+                }
+            }, seriesModel);
+        }
+
+        var updatedDataInfo = [];
+        var diffStatus = diff.status;
+
+        for (var i = 0; i < diffStatus.length; i++) {
+            var cmd = diffStatus[i].cmd;
+            if (cmd === '=') {
+                var el = data.getItemGraphicEl(diffStatus[i].idx1);
+                if (el) {
+                    updatedDataInfo.push({
+                        el: el,
+                        ptIdx: i    // Index of points
+                    });
+                }
+            }
+        }
+
+        if (polyline.animators && polyline.animators.length) {
+            polyline.animators[0].during(function () {
+                for (var i = 0; i < updatedDataInfo.length; i++) {
+                    var el = updatedDataInfo[i].el;
+                    el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]);
+                }
+            });
+        }
+    },
+
+    remove: function (ecModel) {
+        var group = this.group;
+        var oldData = this._data;
+        this._lineGroup.removeAll();
+        this._symbolDraw.remove(true);
+        // Remove temporary created elements when highlighting
+        oldData && oldData.eachItemGraphicEl(function (el, idx) {
+            if (el.__temp) {
+                group.remove(el);
+                oldData.setItemGraphicEl(idx, null);
+            }
+        });
+
+        this._polyline =
+        this._polygon =
+        this._coordSys =
+        this._points =
+        this._stackedOnPoints =
+        this._data = null;
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var visualSymbol = function (seriesType, defaultSymbolType, legendSymbol) {
+    // Encoding visual for all series include which is filtered for legend drawing
+    return {
+        seriesType: seriesType,
+
+        // For legend.
+        performRawSeries: true,
+
+        reset: function (seriesModel, ecModel, api) {
+            var data = seriesModel.getData();
+
+            var symbolType = seriesModel.get('symbol') || defaultSymbolType;
+            var symbolSize = seriesModel.get('symbolSize');
+            var keepAspect = seriesModel.get('symbolKeepAspect');
+
+            data.setVisual({
+                legendSymbol: legendSymbol || symbolType,
+                symbol: symbolType,
+                symbolSize: symbolSize,
+                symbolKeepAspect: keepAspect
+            });
+
+            // Only visible series has each data be visual encoded
+            if (ecModel.isSeriesFiltered(seriesModel)) {
+                return;
+            }
+
+            var hasCallback = typeof symbolSize === 'function';
+
+            function dataEach(data, idx) {
+                if (typeof symbolSize === 'function') {
+                    var rawValue = seriesModel.getRawValue(idx);
+                    // FIXME
+                    var params = seriesModel.getDataParams(idx);
+                    data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params));
+                }
+
+                if (data.hasItemOption) {
+                    var itemModel = data.getItemModel(idx);
+                    var itemSymbolType = itemModel.getShallow('symbol', true);
+                    var itemSymbolSize = itemModel.getShallow('symbolSize',
+                        true);
+                    var itemSymbolKeepAspect =
+                        itemModel.getShallow('symbolKeepAspect',true);
+
+                    // If has item symbol
+                    if (itemSymbolType != null) {
+                        data.setItemVisual(idx, 'symbol', itemSymbolType);
+                    }
+                    if (itemSymbolSize != null) {
+                        // PENDING Transform symbolSize ?
+                        data.setItemVisual(idx, 'symbolSize', itemSymbolSize);
+                    }
+                    if (itemSymbolKeepAspect != null) {
+                        data.setItemVisual(idx, 'symbolKeepAspect',
+                            itemSymbolKeepAspect);
+                    }
+                }
+            }
+
+            return { dataEach: (data.hasItemOption || hasCallback) ? dataEach : null };
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var pointsLayout = function (seriesType) {
+    return {
+        seriesType: seriesType,
+
+        plan: createRenderPlanner(),
+
+        reset: function (seriesModel) {
+            var data = seriesModel.getData();
+            var coordSys = seriesModel.coordinateSystem;
+            var pipelineContext = seriesModel.pipelineContext;
+            var isLargeRender = pipelineContext.large;
+
+            if (!coordSys) {
+                return;
+            }
+
+            var dims = map(coordSys.dimensions, function (dim) {
+                return data.mapDimension(dim);
+            }).slice(0, 2);
+            var dimLen = dims.length;
+
+            var stackResultDim = data.getCalculationInfo('stackResultDimension');
+            if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) {
+                dims[0] = stackResultDim;
+            }
+            if (isDimensionStacked(data, dims[1] /*, dims[0]*/)) {
+                dims[1] = stackResultDim;
+            }
+
+            function progress(params, data) {
+                var segCount = params.end - params.start;
+                var points = isLargeRender && new Float32Array(segCount * dimLen);
+
+                for (var i = params.start, offset = 0, tmpIn = [], tmpOut = []; i < params.end; i++) {
+                    var point;
+
+                    if (dimLen === 1) {
+                        var x = data.get(dims[0], i);
+                        point = !isNaN(x) && coordSys.dataToPoint(x, null, tmpOut);
+                    }
+                    else {
+                        var x = tmpIn[0] = data.get(dims[0], i);
+                        var y = tmpIn[1] = data.get(dims[1], i);
+                        // Also {Array.<number>}, not undefined to avoid if...else... statement
+                        point = !isNaN(x) && !isNaN(y) && coordSys.dataToPoint(tmpIn, null, tmpOut);
+                    }
+
+                    if (isLargeRender) {
+                        points[offset++] = point ? point[0] : NaN;
+                        points[offset++] = point ? point[1] : NaN;
+                    }
+                    else {
+                        data.setItemLayout(i, (point && point.slice()) || [NaN, NaN]);
+                    }
+                }
+
+                isLargeRender && data.setLayout('symbolPoints', points);
+            }
+
+            return dimLen && {progress: progress};
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var samplers = {
+    average: function (frame) {
+        var sum = 0;
+        var count = 0;
+        for (var i = 0; i < frame.length; i++) {
+            if (!isNaN(frame[i])) {
+                sum += frame[i];
+                count++;
+            }
+        }
+        // Return NaN if count is 0
+        return count === 0 ? NaN : sum / count;
+    },
+    sum: function (frame) {
+        var sum = 0;
+        for (var i = 0; i < frame.length; i++) {
+            // Ignore NaN
+            sum += frame[i] || 0;
+        }
+        return sum;
+    },
+    max: function (frame) {
+        var max = -Infinity;
+        for (var i = 0; i < frame.length; i++) {
+            frame[i] > max && (max = frame[i]);
+        }
+        // NaN will cause illegal axis extent.
+        return isFinite(max) ? max : NaN;
+    },
+    min: function (frame) {
+        var min = Infinity;
+        for (var i = 0; i < frame.length; i++) {
+            frame[i] < min && (min = frame[i]);
+        }
+        // NaN will cause illegal axis extent.
+        return isFinite(min) ? min : NaN;
+    },
+    // TODO
+    // Median
+    nearest: function (frame) {
+        return frame[0];
+    }
+};
+
+var indexSampler = function (frame, value) {
+    return Math.round(frame.length / 2);
+};
+
+var dataSample = function (seriesType) {
+    return {
+
+        seriesType: seriesType,
+
+        modifyOutputEnd: true,
+
+        reset: function (seriesModel, ecModel, api) {
+            var data = seriesModel.getData();
+            var sampling = seriesModel.get('sampling');
+            var coordSys = seriesModel.coordinateSystem;
+            // Only cartesian2d support down sampling
+            if (coordSys.type === 'cartesian2d' && sampling) {
+                var baseAxis = coordSys.getBaseAxis();
+                var valueAxis = coordSys.getOtherAxis(baseAxis);
+                var extent = baseAxis.getExtent();
+                // Coordinste system has been resized
+                var size = extent[1] - extent[0];
+                var rate = Math.round(data.count() / size);
+                if (rate > 1) {
+                    var sampler;
+                    if (typeof sampling === 'string') {
+                        sampler = samplers[sampling];
+                    }
+                    else if (typeof sampling === 'function') {
+                        sampler = sampling;
+                    }
+                    if (sampler) {
+                        // Only support sample the first dim mapped from value axis.
+                        seriesModel.setData(data.downSample(
+                            data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler
+                        ));
+                    }
+                }
+            }
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Cartesian coordinate system
+ * @module  echarts/coord/Cartesian
+ *
+ */
+
+function dimAxisMapper(dim) {
+    return this._axes[dim];
+}
+
+/**
+ * @alias module:echarts/coord/Cartesian
+ * @constructor
+ */
+var Cartesian = function (name) {
+    this._axes = {};
+
+    this._dimList = [];
+
+    /**
+     * @type {string}
+     */
+    this.name = name || '';
+};
+
+Cartesian.prototype = {
+
+    constructor: Cartesian,
+
+    type: 'cartesian',
+
+    /**
+     * Get axis
+     * @param  {number|string} dim
+     * @return {module:echarts/coord/Cartesian~Axis}
+     */
+    getAxis: function (dim) {
+        return this._axes[dim];
+    },
+
+    /**
+     * Get axes list
+     * @return {Array.<module:echarts/coord/Cartesian~Axis>}
+     */
+    getAxes: function () {
+        return map(this._dimList, dimAxisMapper, this);
+    },
+
+    /**
+     * Get axes list by given scale type
+     */
+    getAxesByScale: function (scaleType) {
+        scaleType = scaleType.toLowerCase();
+        return filter(
+            this.getAxes(),
+            function (axis) {
+                return axis.scale.type === scaleType;
+            }
+        );
+    },
+
+    /**
+     * Add axis
+     * @param {module:echarts/coord/Cartesian.Axis}
+     */
+    addAxis: function (axis) {
+        var dim = axis.dim;
+
+        this._axes[dim] = axis;
+
+        this._dimList.push(dim);
+    },
+
+    /**
+     * Convert data to coord in nd space
+     * @param {Array.<number>|Object.<string, number>} val
+     * @return {Array.<number>|Object.<string, number>}
+     */
+    dataToCoord: function (val) {
+        return this._dataCoordConvert(val, 'dataToCoord');
+    },
+
+    /**
+     * Convert coord in nd space to data
+     * @param  {Array.<number>|Object.<string, number>} val
+     * @return {Array.<number>|Object.<string, number>}
+     */
+    coordToData: function (val) {
+        return this._dataCoordConvert(val, 'coordToData');
+    },
+
+    _dataCoordConvert: function (input, method) {
+        var dimList = this._dimList;
+
+        var output = input instanceof Array ? [] : {};
+
+        for (var i = 0; i < dimList.length; i++) {
+            var dim = dimList[i];
+            var axis = this._axes[dim];
+
+            output[dim] = axis[method](input[dim]);
+        }
+
+        return output;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+function Cartesian2D(name) {
+
+    Cartesian.call(this, name);
+}
+
+Cartesian2D.prototype = {
+
+    constructor: Cartesian2D,
+
+    type: 'cartesian2d',
+
+    /**
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    dimensions: ['x', 'y'],
+
+    /**
+     * Base axis will be used on stacking.
+     *
+     * @return {module:echarts/coord/cartesian/Axis2D}
+     */
+    getBaseAxis: function () {
+        return this.getAxesByScale('ordinal')[0]
+            || this.getAxesByScale('time')[0]
+            || this.getAxis('x');
+    },
+
+    /**
+     * If contain point
+     * @param {Array.<number>} point
+     * @return {boolean}
+     */
+    containPoint: function (point) {
+        var axisX = this.getAxis('x');
+        var axisY = this.getAxis('y');
+        return axisX.contain(axisX.toLocalCoord(point[0]))
+            && axisY.contain(axisY.toLocalCoord(point[1]));
+    },
+
+    /**
+     * If contain data
+     * @param {Array.<number>} data
+     * @return {boolean}
+     */
+    containData: function (data) {
+        return this.getAxis('x').containData(data[0])
+            && this.getAxis('y').containData(data[1]);
+    },
+
+    /**
+     * @param {Array.<number>} data
+     * @param {Array.<number>} out
+     * @return {Array.<number>}
+     */
+    dataToPoint: function (data, reserved, out) {
+        var xAxis = this.getAxis('x');
+        var yAxis = this.getAxis('y');
+        out = out || [];
+        out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(data[0]));
+        out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(data[1]));
+        return out;
+    },
+
+    /**
+     * @param {Array.<number>} data
+     * @param {Array.<number>} out
+     * @return {Array.<number>}
+     */
+    clampData: function (data, out) {
+        var xScale = this.getAxis('x').scale;
+        var yScale = this.getAxis('y').scale;
+        var xAxisExtent = xScale.getExtent();
+        var yAxisExtent = yScale.getExtent();
+        var x = xScale.parse(data[0]);
+        var y = yScale.parse(data[1]);
+        out = out || [];
+        out[0] = Math.min(
+            Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x),
+            Math.max(xAxisExtent[0], xAxisExtent[1])
+        );
+        out[1] = Math.min(
+            Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y),
+            Math.max(yAxisExtent[0], yAxisExtent[1])
+        );
+
+        return out;
+    },
+
+    /**
+     * @param {Array.<number>} point
+     * @param {Array.<number>} out
+     * @return {Array.<number>}
+     */
+    pointToData: function (point, out) {
+        var xAxis = this.getAxis('x');
+        var yAxis = this.getAxis('y');
+        out = out || [];
+        out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]));
+        out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]));
+        return out;
+    },
+
+    /**
+     * Get other axis
+     * @param {module:echarts/coord/cartesian/Axis2D} axis
+     */
+    getOtherAxis: function (axis) {
+        return this.getAxis(axis.dim === 'x' ? 'y' : 'x');
+    }
+
+};
+
+inherits(Cartesian2D, Cartesian);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Extend axis 2d
+ * @constructor module:echarts/coord/cartesian/Axis2D
+ * @extends {module:echarts/coord/cartesian/Axis}
+ * @param {string} dim
+ * @param {*} scale
+ * @param {Array.<number>} coordExtent
+ * @param {string} axisType
+ * @param {string} position
+ */
+var Axis2D = function (dim, scale, coordExtent, axisType, position) {
+    Axis.call(this, dim, scale, coordExtent);
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = axisType || 'value';
+
+    /**
+     * Axis position
+     *  - 'top'
+     *  - 'bottom'
+     *  - 'left'
+     *  - 'right'
+     */
+    this.position = position || 'bottom';
+};
+
+Axis2D.prototype = {
+
+    constructor: Axis2D,
+
+    /**
+     * Index of axis, can be used as key
+     */
+    index: 0,
+
+    /**
+     * Implemented in <module:echarts/coord/cartesian/Grid>.
+     * @return {Array.<module:echarts/coord/cartesian/Axis2D>}
+     *         If not on zero of other axis, return null/undefined.
+     *         If no axes, return an empty array.
+     */
+    getAxesOnZeroOf: null,
+
+    /**
+     * Axis model
+     * @param {module:echarts/coord/cartesian/AxisModel}
+     */
+    model: null,
+
+    isHorizontal: function () {
+        var position = this.position;
+        return position === 'top' || position === 'bottom';
+    },
+
+    /**
+     * Each item cooresponds to this.getExtent(), which
+     * means globalExtent[0] may greater than globalExtent[1],
+     * unless `asc` is input.
+     *
+     * @param {boolean} [asc]
+     * @return {Array.<number>}
+     */
+    getGlobalExtent: function (asc) {
+        var ret = this.getExtent();
+        ret[0] = this.toGlobalCoord(ret[0]);
+        ret[1] = this.toGlobalCoord(ret[1]);
+        asc && ret[0] > ret[1] && ret.reverse();
+        return ret;
+    },
+
+    getOtherAxis: function () {
+        this.grid.getOtherAxis();
+    },
+
+    /**
+     * @override
+     */
+    pointToData: function (point, clamp) {
+        return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);
+    },
+
+    /**
+     * Transform global coord to local coord,
+     * i.e. var localCoord = axis.toLocalCoord(80);
+     * designate by module:echarts/coord/cartesian/Grid.
+     * @type {Function}
+     */
+    toLocalCoord: null,
+
+    /**
+     * Transform global coord to local coord,
+     * i.e. var globalCoord = axis.toLocalCoord(40);
+     * designate by module:echarts/coord/cartesian/Grid.
+     * @type {Function}
+     */
+    toGlobalCoord: null
+
+};
+
+inherits(Axis2D, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var defaultOption = {
+    show: true,
+    zlevel: 0,
+    z: 0,
+    // Inverse the axis.
+    inverse: false,
+
+    // Axis name displayed.
+    name: '',
+    // 'start' | 'middle' | 'end'
+    nameLocation: 'end',
+    // By degree. By defualt auto rotate by nameLocation.
+    nameRotate: null,
+    nameTruncate: {
+        maxWidth: null,
+        ellipsis: '...',
+        placeholder: '.'
+    },
+    // Use global text style by default.
+    nameTextStyle: {},
+    // The gap between axisName and axisLine.
+    nameGap: 15,
+
+    // Default `false` to support tooltip.
+    silent: false,
+    // Default `false` to avoid legacy user event listener fail.
+    triggerEvent: false,
+
+    tooltip: {
+        show: false
+    },
+
+    axisPointer: {},
+
+    axisLine: {
+        show: true,
+        onZero: true,
+        onZeroAxisIndex: null,
+        lineStyle: {
+            color: '#333',
+            width: 1,
+            type: 'solid'
+        },
+        // The arrow at both ends the the axis.
+        symbol: ['none', 'none'],
+        symbolSize: [10, 15]
+    },
+    axisTick: {
+        show: true,
+        // Whether axisTick is inside the grid or outside the grid.
+        inside: false,
+        // The length of axisTick.
+        length: 5,
+        lineStyle: {
+            width: 1
+        }
+    },
+    axisLabel: {
+        show: true,
+        // Whether axisLabel is inside the grid or outside the grid.
+        inside: false,
+        rotate: 0,
+        // true | false | null/undefined (auto)
+        showMinLabel: null,
+        // true | false | null/undefined (auto)
+        showMaxLabel: null,
+        margin: 8,
+        // formatter: null,
+        fontSize: 12
+    },
+    splitLine: {
+        show: true,
+        lineStyle: {
+            color: ['#ccc'],
+            width: 1,
+            type: 'solid'
+        }
+    },
+    splitArea: {
+        show: false,
+        areaStyle: {
+            color: ['rgba(250,250,250,0.3)','rgba(200,200,200,0.3)']
+        }
+    }
+};
+
+var axisDefault = {};
+
+axisDefault.categoryAxis = merge({
+    // The gap at both ends of the axis. For categoryAxis, boolean.
+    boundaryGap: true,
+    // Set false to faster category collection.
+    // Only usefull in the case like: category is
+    // ['2012-01-01', '2012-01-02', ...], where the input
+    // data has been ensured not duplicate and is large data.
+    // null means "auto":
+    // if axis.data provided, do not deduplication,
+    // else do deduplication.
+    deduplication: null,
+    // splitArea: {
+        // show: false
+    // },
+    splitLine: {
+        show: false
+    },
+    axisTick: {
+        // If tick is align with label when boundaryGap is true
+        alignWithLabel: false,
+        interval: 'auto'
+    },
+    axisLabel: {
+        interval: 'auto'
+    }
+}, defaultOption);
+
+axisDefault.valueAxis = merge({
+    // The gap at both ends of the axis. For value axis, [GAP, GAP], where
+    // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`)
+    boundaryGap: [0, 0],
+
+    // TODO
+    // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]
+
+    // Min value of the axis. can be:
+    // + a number
+    // + 'dataMin': use the min value in data.
+    // + null/undefined: auto decide min value (consider pretty look and boundaryGap).
+    // min: null,
+
+    // Max value of the axis. can be:
+    // + a number
+    // + 'dataMax': use the max value in data.
+    // + null/undefined: auto decide max value (consider pretty look and boundaryGap).
+    // max: null,
+
+    // Readonly prop, specifies start value of the range when using data zoom.
+    // rangeStart: null
+
+    // Readonly prop, specifies end value of the range when using data zoom.
+    // rangeEnd: null
+
+    // Optional value can be:
+    // + `false`: always include value 0.
+    // + `true`: the extent do not consider value 0.
+    // scale: false,
+
+    // AxisTick and axisLabel and splitLine are caculated based on splitNumber.
+    splitNumber: 5
+
+    // Interval specifies the span of the ticks is mandatorily.
+    // interval: null
+
+    // Specify min interval when auto calculate tick interval.
+    // minInterval: null
+
+    // Specify max interval when auto calculate tick interval.
+    // maxInterval: null
+
+}, defaultOption);
+
+axisDefault.timeAxis = defaults({
+    scale: true,
+    min: 'dataMin',
+    max: 'dataMax'
+}, axisDefault.valueAxis);
+
+axisDefault.logAxis = defaults({
+    scale: true,
+    logBase: 10
+}, axisDefault.valueAxis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME axisType is fixed ?
+var AXIS_TYPES = ['value', 'category', 'time', 'log'];
+
+/**
+ * Generate sub axis model class
+ * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel'
+ * @param {module:echarts/model/Component} BaseAxisModelClass
+ * @param {Function} axisTypeDefaulter
+ * @param {Object} [extraDefaultOption]
+ */
+var axisModelCreator = function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {
+
+    each$1(AXIS_TYPES, function (axisType) {
+
+        BaseAxisModelClass.extend({
+
+            /**
+             * @readOnly
+             */
+            type: axisName + 'Axis.' + axisType,
+
+            mergeDefaultAndTheme: function (option, ecModel) {
+                var layoutMode = this.layoutMode;
+                var inputPositionParams = layoutMode
+                    ? getLayoutParams(option) : {};
+
+                var themeModel = ecModel.getTheme();
+                merge(option, themeModel.get(axisType + 'Axis'));
+                merge(option, this.getDefaultOption());
+
+                option.type = axisTypeDefaulter(axisName, option);
+
+                if (layoutMode) {
+                    mergeLayoutParam(option, inputPositionParams, layoutMode);
+                }
+            },
+
+            /**
+             * @override
+             */
+            optionUpdated: function () {
+                var thisOption = this.option;
+                if (thisOption.type === 'category') {
+                    this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);
+                }
+            },
+
+            /**
+             * Should not be called before all of 'getInitailData' finished.
+             * Because categories are collected during initializing data.
+             */
+            getCategories: function (rawData) {
+                var option = this.option;
+                // FIXME
+                // warning if called before all of 'getInitailData' finished.
+                if (option.type === 'category') {
+                    if (rawData) {
+                        return option.data;
+                    }
+                    return this.__ordinalMeta.categories;
+                }
+            },
+
+            getOrdinalMeta: function () {
+                return this.__ordinalMeta;
+            },
+
+            defaultOption: mergeAll(
+                [
+                    {},
+                    axisDefault[axisType + 'Axis'],
+                    extraDefaultOption
+                ],
+                true
+            )
+        });
+    });
+
+    ComponentModel.registerSubTypeDefaulter(
+        axisName + 'Axis',
+        curry(axisTypeDefaulter, axisName)
+    );
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AxisModel = ComponentModel.extend({
+
+    type: 'cartesian2dAxis',
+
+    /**
+     * @type {module:echarts/coord/cartesian/Axis2D}
+     */
+    axis: null,
+
+    /**
+     * @override
+     */
+    init: function () {
+        AxisModel.superApply(this, 'init', arguments);
+        this.resetRange();
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function () {
+        AxisModel.superApply(this, 'mergeOption', arguments);
+        this.resetRange();
+    },
+
+    /**
+     * @override
+     */
+    restoreData: function () {
+        AxisModel.superApply(this, 'restoreData', arguments);
+        this.resetRange();
+    },
+
+    /**
+     * @override
+     * @return {module:echarts/model/Component}
+     */
+    getCoordSysModel: function () {
+        return this.ecModel.queryComponents({
+            mainType: 'grid',
+            index: this.option.gridIndex,
+            id: this.option.gridId
+        })[0];
+    }
+
+});
+
+function getAxisType(axisDim, option) {
+    // Default axis with data is category axis
+    return option.type || (option.data ? 'category' : 'value');
+}
+
+merge(AxisModel.prototype, axisModelCommonMixin);
+
+var extraOption = {
+    // gridIndex: 0,
+    // gridId: '',
+
+    // Offset is for multiple axis on the same position
+    offset: 0
+};
+
+axisModelCreator('x', AxisModel, getAxisType, extraOption);
+axisModelCreator('y', AxisModel, getAxisType, extraOption);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Grid 是在有直角坐标系的时候必须要存在的
+// 所以这里也要被 Cartesian2D 依赖
+
+ComponentModel.extend({
+
+    type: 'grid',
+
+    dependencies: ['xAxis', 'yAxis'],
+
+    layoutMode: 'box',
+
+    /**
+     * @type {module:echarts/coord/cartesian/Grid}
+     */
+    coordinateSystem: null,
+
+    defaultOption: {
+        show: false,
+        zlevel: 0,
+        z: 0,
+        left: '10%',
+        top: 60,
+        right: '10%',
+        bottom: 60,
+        // If grid size contain label
+        containLabel: false,
+        // width: {totalWidth} - left - right,
+        // height: {totalHeight} - top - bottom,
+        backgroundColor: 'rgba(0,0,0,0)',
+        borderWidth: 1,
+        borderColor: '#ccc'
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Grid is a region which contains at most 4 cartesian systems
+ *
+ * TODO Default cartesian
+ */
+
+// Depends on GridModel, AxisModel, which performs preprocess.
+/**
+ * Check if the axis is used in the specified grid
+ * @inner
+ */
+function isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {
+    return axisModel.getCoordSysModel() === gridModel;
+}
+
+function Grid(gridModel, ecModel, api) {
+    /**
+     * @type {Object.<string, module:echarts/coord/cartesian/Cartesian2D>}
+     * @private
+     */
+    this._coordsMap = {};
+
+    /**
+     * @type {Array.<module:echarts/coord/cartesian/Cartesian>}
+     * @private
+     */
+    this._coordsList = [];
+
+    /**
+     * @type {Object.<string, module:echarts/coord/cartesian/Axis2D>}
+     * @private
+     */
+    this._axesMap = {};
+
+    /**
+     * @type {Array.<module:echarts/coord/cartesian/Axis2D>}
+     * @private
+     */
+    this._axesList = [];
+
+    this._initCartesian(gridModel, ecModel, api);
+
+    this.model = gridModel;
+}
+
+var gridProto = Grid.prototype;
+
+gridProto.type = 'grid';
+
+gridProto.axisPointerEnabled = true;
+
+gridProto.getRect = function () {
+    return this._rect;
+};
+
+gridProto.update = function (ecModel, api) {
+
+    var axesMap = this._axesMap;
+
+    this._updateScale(ecModel, this.model);
+
+    each$1(axesMap.x, function (xAxis) {
+        niceScaleExtent(xAxis.scale, xAxis.model);
+    });
+    each$1(axesMap.y, function (yAxis) {
+        niceScaleExtent(yAxis.scale, yAxis.model);
+    });
+    each$1(axesMap.x, function (xAxis) {
+        fixAxisOnZero(axesMap, 'y', xAxis);
+    });
+    each$1(axesMap.y, function (yAxis) {
+        fixAxisOnZero(axesMap, 'x', yAxis);
+    });
+
+    // Resize again if containLabel is enabled
+    // FIXME It may cause getting wrong grid size in data processing stage
+    this.resize(this.model, api);
+};
+
+function fixAxisOnZero(axesMap, otherAxisDim, axis) {
+
+    axis.getAxesOnZeroOf = function () {
+        // TODO: onZero of multiple axes.
+        return otherAxis ? [otherAxis] : [];
+    };
+
+    // onZero can not be enabled in these two situations:
+    // 1. When any other axis is a category axis.
+    // 2. When no axis is cross 0 point.
+    var otherAxes = axesMap[otherAxisDim];
+
+    var otherAxis;
+    var axisModel = axis.model;
+    var onZero = axisModel.get('axisLine.onZero');
+    var onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex');
+
+    if (!onZero) {
+        return;
+    }
+
+    // If target axis is specified.
+    if (onZeroAxisIndex != null) {
+        if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {
+            otherAxis = otherAxes[onZeroAxisIndex];
+        }
+        return;
+    }
+
+    // Find the first available other axis.
+    for (var idx in otherAxes) {
+        if (otherAxes.hasOwnProperty(idx) && canOnZeroToAxis(otherAxes[idx])) {
+            otherAxis = otherAxes[idx];
+            break;
+        }
+    }
+}
+
+function canOnZeroToAxis(axis) {
+    return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis);
+}
+
+/**
+ * Resize the grid
+ * @param {module:echarts/coord/cartesian/GridModel} gridModel
+ * @param {module:echarts/ExtensionAPI} api
+ */
+gridProto.resize = function (gridModel, api, ignoreContainLabel) {
+
+    var gridRect = getLayoutRect(
+        gridModel.getBoxLayoutParams(), {
+            width: api.getWidth(),
+            height: api.getHeight()
+        });
+
+    this._rect = gridRect;
+
+    var axesList = this._axesList;
+
+    adjustAxes();
+
+    // Minus label size
+    if (!ignoreContainLabel && gridModel.get('containLabel')) {
+        each$1(axesList, function (axis) {
+            if (!axis.model.get('axisLabel.inside')) {
+                var labelUnionRect = estimateLabelUnionRect(axis);
+                if (labelUnionRect) {
+                    var dim = axis.isHorizontal() ? 'height' : 'width';
+                    var margin = axis.model.get('axisLabel.margin');
+                    gridRect[dim] -= labelUnionRect[dim] + margin;
+                    if (axis.position === 'top') {
+                        gridRect.y += labelUnionRect.height + margin;
+                    }
+                    else if (axis.position === 'left')  {
+                        gridRect.x += labelUnionRect.width + margin;
+                    }
+                }
+            }
+        });
+
+        adjustAxes();
+    }
+
+    function adjustAxes() {
+        each$1(axesList, function (axis) {
+            var isHorizontal = axis.isHorizontal();
+            var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];
+            var idx = axis.inverse ? 1 : 0;
+            axis.setExtent(extent[idx], extent[1 - idx]);
+            updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);
+        });
+    }
+};
+
+/**
+ * @param {string} axisType
+ * @param {number} [axisIndex]
+ */
+gridProto.getAxis = function (axisType, axisIndex) {
+    var axesMapOnDim = this._axesMap[axisType];
+    if (axesMapOnDim != null) {
+        if (axisIndex == null) {
+            // Find first axis
+            for (var name in axesMapOnDim) {
+                if (axesMapOnDim.hasOwnProperty(name)) {
+                    return axesMapOnDim[name];
+                }
+            }
+        }
+        return axesMapOnDim[axisIndex];
+    }
+};
+
+/**
+ * @return {Array.<module:echarts/coord/Axis>}
+ */
+gridProto.getAxes = function () {
+    return this._axesList.slice();
+};
+
+/**
+ * Usage:
+ *      grid.getCartesian(xAxisIndex, yAxisIndex);
+ *      grid.getCartesian(xAxisIndex);
+ *      grid.getCartesian(null, yAxisIndex);
+ *      grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...});
+ *
+ * @param {number|Object} [xAxisIndex]
+ * @param {number} [yAxisIndex]
+ */
+gridProto.getCartesian = function (xAxisIndex, yAxisIndex) {
+    if (xAxisIndex != null && yAxisIndex != null) {
+        var key = 'x' + xAxisIndex + 'y' + yAxisIndex;
+        return this._coordsMap[key];
+    }
+
+    if (isObject$1(xAxisIndex)) {
+        yAxisIndex = xAxisIndex.yAxisIndex;
+        xAxisIndex = xAxisIndex.xAxisIndex;
+    }
+    // When only xAxisIndex or yAxisIndex given, find its first cartesian.
+    for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {
+        if (coordList[i].getAxis('x').index === xAxisIndex
+            || coordList[i].getAxis('y').index === yAxisIndex
+        ) {
+            return coordList[i];
+        }
+    }
+};
+
+gridProto.getCartesians = function () {
+    return this._coordsList.slice();
+};
+
+/**
+ * @implements
+ * see {module:echarts/CoodinateSystem}
+ */
+gridProto.convertToPixel = function (ecModel, finder, value) {
+    var target = this._findConvertTarget(ecModel, finder);
+
+    return target.cartesian
+        ? target.cartesian.dataToPoint(value)
+        : target.axis
+        ? target.axis.toGlobalCoord(target.axis.dataToCoord(value))
+        : null;
+};
+
+/**
+ * @implements
+ * see {module:echarts/CoodinateSystem}
+ */
+gridProto.convertFromPixel = function (ecModel, finder, value) {
+    var target = this._findConvertTarget(ecModel, finder);
+
+    return target.cartesian
+        ? target.cartesian.pointToData(value)
+        : target.axis
+        ? target.axis.coordToData(target.axis.toLocalCoord(value))
+        : null;
+};
+
+/**
+ * @inner
+ */
+gridProto._findConvertTarget = function (ecModel, finder) {
+    var seriesModel = finder.seriesModel;
+    var xAxisModel = finder.xAxisModel
+        || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]);
+    var yAxisModel = finder.yAxisModel
+        || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]);
+    var gridModel = finder.gridModel;
+    var coordsList = this._coordsList;
+    var cartesian;
+    var axis;
+
+    if (seriesModel) {
+        cartesian = seriesModel.coordinateSystem;
+        indexOf(coordsList, cartesian) < 0 && (cartesian = null);
+    }
+    else if (xAxisModel && yAxisModel) {
+        cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);
+    }
+    else if (xAxisModel) {
+        axis = this.getAxis('x', xAxisModel.componentIndex);
+    }
+    else if (yAxisModel) {
+        axis = this.getAxis('y', yAxisModel.componentIndex);
+    }
+    // Lowest priority.
+    else if (gridModel) {
+        var grid = gridModel.coordinateSystem;
+        if (grid === this) {
+            cartesian = this._coordsList[0];
+        }
+    }
+
+    return {cartesian: cartesian, axis: axis};
+};
+
+/**
+ * @implements
+ * see {module:echarts/CoodinateSystem}
+ */
+gridProto.containPoint = function (point) {
+    var coord = this._coordsList[0];
+    if (coord) {
+        return coord.containPoint(point);
+    }
+};
+
+/**
+ * Initialize cartesian coordinate systems
+ * @private
+ */
+gridProto._initCartesian = function (gridModel, ecModel, api) {
+    var axisPositionUsed = {
+        left: false,
+        right: false,
+        top: false,
+        bottom: false
+    };
+
+    var axesMap = {
+        x: {},
+        y: {}
+    };
+    var axesCount = {
+        x: 0,
+        y: 0
+    };
+
+    /// Create axis
+    ecModel.eachComponent('xAxis', createAxisCreator('x'), this);
+    ecModel.eachComponent('yAxis', createAxisCreator('y'), this);
+
+    if (!axesCount.x || !axesCount.y) {
+        // Roll back when there no either x or y axis
+        this._axesMap = {};
+        this._axesList = [];
+        return;
+    }
+
+    this._axesMap = axesMap;
+
+    /// Create cartesian2d
+    each$1(axesMap.x, function (xAxis, xAxisIndex) {
+        each$1(axesMap.y, function (yAxis, yAxisIndex) {
+            var key = 'x' + xAxisIndex + 'y' + yAxisIndex;
+            var cartesian = new Cartesian2D(key);
+
+            cartesian.grid = this;
+            cartesian.model = gridModel;
+
+            this._coordsMap[key] = cartesian;
+            this._coordsList.push(cartesian);
+
+            cartesian.addAxis(xAxis);
+            cartesian.addAxis(yAxis);
+        }, this);
+    }, this);
+
+    function createAxisCreator(axisType) {
+        return function (axisModel, idx) {
+            if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) {
+                return;
+            }
+
+            var axisPosition = axisModel.get('position');
+            if (axisType === 'x') {
+                // Fix position
+                if (axisPosition !== 'top' && axisPosition !== 'bottom') {
+                    // Default bottom of X
+                    axisPosition = 'bottom';
+                    if (axisPositionUsed[axisPosition]) {
+                        axisPosition = axisPosition === 'top' ? 'bottom' : 'top';
+                    }
+                }
+            }
+            else {
+                // Fix position
+                if (axisPosition !== 'left' && axisPosition !== 'right') {
+                    // Default left of Y
+                    axisPosition = 'left';
+                    if (axisPositionUsed[axisPosition]) {
+                        axisPosition = axisPosition === 'left' ? 'right' : 'left';
+                    }
+                }
+            }
+            axisPositionUsed[axisPosition] = true;
+
+            var axis = new Axis2D(
+                axisType, createScaleByModel(axisModel),
+                [0, 0],
+                axisModel.get('type'),
+                axisPosition
+            );
+
+            var isCategory = axis.type === 'category';
+            axis.onBand = isCategory && axisModel.get('boundaryGap');
+            axis.inverse = axisModel.get('inverse');
+
+            // Inject axis into axisModel
+            axisModel.axis = axis;
+
+            // Inject axisModel into axis
+            axis.model = axisModel;
+
+            // Inject grid info axis
+            axis.grid = this;
+
+            // Index of axis, can be used as key
+            axis.index = idx;
+
+            this._axesList.push(axis);
+
+            axesMap[axisType][idx] = axis;
+            axesCount[axisType]++;
+        };
+    }
+};
+
+/**
+ * Update cartesian properties from series
+ * @param  {module:echarts/model/Option} option
+ * @private
+ */
+gridProto._updateScale = function (ecModel, gridModel) {
+    // Reset scale
+    each$1(this._axesList, function (axis) {
+        axis.scale.setExtent(Infinity, -Infinity);
+    });
+    ecModel.eachSeries(function (seriesModel) {
+        if (isCartesian2D(seriesModel)) {
+            var axesModels = findAxesModels(seriesModel, ecModel);
+            var xAxisModel = axesModels[0];
+            var yAxisModel = axesModels[1];
+
+            if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel)
+                || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)
+            ) {
+                return;
+            }
+
+            var cartesian = this.getCartesian(
+                xAxisModel.componentIndex, yAxisModel.componentIndex
+            );
+            var data = seriesModel.getData();
+            var xAxis = cartesian.getAxis('x');
+            var yAxis = cartesian.getAxis('y');
+
+            if (data.type === 'list') {
+                unionExtent(data, xAxis, seriesModel);
+                unionExtent(data, yAxis, seriesModel);
+            }
+        }
+    }, this);
+
+    function unionExtent(data, axis, seriesModel) {
+        each$1(data.mapDimension(axis.dim, true), function (dim) {
+            axis.scale.unionExtentFromData(
+                // For example, the extent of the orginal dimension
+                // is [0.1, 0.5], the extent of the `stackResultDimension`
+                // is [7, 9], the final extent should not include [0.1, 0.5].
+                data, getStackedDimension(data, dim)
+            );
+        });
+    }
+};
+
+/**
+ * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined
+ * @return {Object} {baseAxes: [], otherAxes: []}
+ */
+gridProto.getTooltipAxes = function (dim) {
+    var baseAxes = [];
+    var otherAxes = [];
+
+    each$1(this.getCartesians(), function (cartesian) {
+        var baseAxis = (dim != null && dim !== 'auto')
+            ? cartesian.getAxis(dim) : cartesian.getBaseAxis();
+        var otherAxis = cartesian.getOtherAxis(baseAxis);
+        indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);
+        indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);
+    });
+
+    return {baseAxes: baseAxes, otherAxes: otherAxes};
+};
+
+/**
+ * @inner
+ */
+function updateAxisTransform(axis, coordBase) {
+    var axisExtent = axis.getExtent();
+    var axisExtentSum = axisExtent[0] + axisExtent[1];
+
+    // Fast transform
+    axis.toGlobalCoord = axis.dim === 'x'
+        ? function (coord) {
+            return coord + coordBase;
+        }
+        : function (coord) {
+            return axisExtentSum - coord + coordBase;
+        };
+    axis.toLocalCoord = axis.dim === 'x'
+        ? function (coord) {
+            return coord - coordBase;
+        }
+        : function (coord) {
+            return axisExtentSum - coord + coordBase;
+        };
+}
+
+var axesTypes = ['xAxis', 'yAxis'];
+/**
+ * @inner
+ */
+function findAxesModels(seriesModel, ecModel) {
+    return map(axesTypes, function (axisType) {
+        var axisModel = seriesModel.getReferringComponents(axisType)[0];
+
+        if (__DEV__) {
+            if (!axisModel) {
+                throw new Error(axisType + ' "' + retrieve(
+                    seriesModel.get(axisType + 'Index'),
+                    seriesModel.get(axisType + 'Id'),
+                    0
+                ) + '" not found');
+            }
+        }
+        return axisModel;
+    });
+}
+
+/**
+ * @inner
+ */
+function isCartesian2D(seriesModel) {
+    return seriesModel.get('coordinateSystem') === 'cartesian2d';
+}
+
+Grid.create = function (ecModel, api) {
+    var grids = [];
+    ecModel.eachComponent('grid', function (gridModel, idx) {
+        var grid = new Grid(gridModel, ecModel, api);
+        grid.name = 'grid_' + idx;
+        // dataSampling requires axis extent, so resize
+        // should be performed in create stage.
+        grid.resize(gridModel, api, true);
+
+        gridModel.coordinateSystem = grid;
+
+        grids.push(grid);
+    });
+
+    // Inject the coordinateSystems into seriesModel
+    ecModel.eachSeries(function (seriesModel) {
+        if (!isCartesian2D(seriesModel)) {
+            return;
+        }
+
+        var axesModels = findAxesModels(seriesModel, ecModel);
+        var xAxisModel = axesModels[0];
+        var yAxisModel = axesModels[1];
+
+        var gridModel = xAxisModel.getCoordSysModel();
+
+        if (__DEV__) {
+            if (!gridModel) {
+                throw new Error(
+                    'Grid "' + retrieve(
+                        xAxisModel.get('gridIndex'),
+                        xAxisModel.get('gridId'),
+                        0
+                    ) + '" not found'
+                );
+            }
+            if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) {
+                throw new Error('xAxis and yAxis must use the same grid');
+            }
+        }
+
+        var grid = gridModel.coordinateSystem;
+
+        seriesModel.coordinateSystem = grid.getCartesian(
+            xAxisModel.componentIndex, yAxisModel.componentIndex
+        );
+    });
+
+    return grids;
+};
+
+// For deciding which dimensions to use when creating list data
+Grid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions;
+
+CoordinateSystemManager.register('cartesian2d', Grid);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PI$2 = Math.PI;
+
+function makeAxisEventDataBase(axisModel) {
+    var eventData = {
+        componentType: axisModel.mainType
+    };
+    eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex;
+    return eventData;
+}
+
+/**
+ * A final axis is translated and rotated from a "standard axis".
+ * So opt.position and opt.rotation is required.
+ *
+ * A standard axis is and axis from [0, 0] to [0, axisExtent[1]],
+ * for example: (0, 0) ------------> (0, 50)
+ *
+ * nameDirection or tickDirection or labelDirection is 1 means tick
+ * or label is below the standard axis, whereas is -1 means above
+ * the standard axis. labelOffset means offset between label and axis,
+ * which is useful when 'onZero', where axisLabel is in the grid and
+ * label in outside grid.
+ *
+ * Tips: like always,
+ * positive rotation represents anticlockwise, and negative rotation
+ * represents clockwise.
+ * The direction of position coordinate is the same as the direction
+ * of screen coordinate.
+ *
+ * Do not need to consider axis 'inverse', which is auto processed by
+ * axis extent.
+ *
+ * @param {module:zrender/container/Group} group
+ * @param {Object} axisModel
+ * @param {Object} opt Standard axis parameters.
+ * @param {Array.<number>} opt.position [x, y]
+ * @param {number} opt.rotation by radian
+ * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'.
+ * @param {number} [opt.tickDirection=1] 1 or -1
+ * @param {number} [opt.labelDirection=1] 1 or -1
+ * @param {number} [opt.labelOffset=0] Usefull when onZero.
+ * @param {string} [opt.axisLabelShow] default get from axisModel.
+ * @param {string} [opt.axisName] default get from axisModel.
+ * @param {number} [opt.axisNameAvailableWidth]
+ * @param {number} [opt.labelRotate] by degree, default get from axisModel.
+ * @param {number} [opt.strokeContainThreshold] Default label interval when label
+ * @param {number} [opt.nameTruncateMaxWidth]
+ */
+var AxisBuilder = function (axisModel, opt) {
+
+    /**
+     * @readOnly
+     */
+    this.opt = opt;
+
+    /**
+     * @readOnly
+     */
+    this.axisModel = axisModel;
+
+    // Default value
+    defaults(
+        opt,
+        {
+            labelOffset: 0,
+            nameDirection: 1,
+            tickDirection: 1,
+            labelDirection: 1,
+            silent: true
+        }
+    );
+
+    /**
+     * @readOnly
+     */
+    this.group = new Group();
+
+    // FIXME Not use a seperate text group?
+    var dumbGroup = new Group({
+        position: opt.position.slice(),
+        rotation: opt.rotation
+    });
+
+    // this.group.add(dumbGroup);
+    // this._dumbGroup = dumbGroup;
+
+    dumbGroup.updateTransform();
+    this._transform = dumbGroup.transform;
+
+    this._dumbGroup = dumbGroup;
+};
+
+AxisBuilder.prototype = {
+
+    constructor: AxisBuilder,
+
+    hasBuilder: function (name) {
+        return !!builders[name];
+    },
+
+    add: function (name) {
+        builders[name].call(this);
+    },
+
+    getGroup: function () {
+        return this.group;
+    }
+
+};
+
+var builders = {
+
+    /**
+     * @private
+     */
+    axisLine: function () {
+        var opt = this.opt;
+        var axisModel = this.axisModel;
+
+        if (!axisModel.get('axisLine.show')) {
+            return;
+        }
+
+        var extent = this.axisModel.axis.getExtent();
+
+        var matrix = this._transform;
+        var pt1 = [extent[0], 0];
+        var pt2 = [extent[1], 0];
+        if (matrix) {
+            applyTransform(pt1, pt1, matrix);
+            applyTransform(pt2, pt2, matrix);
+        }
+
+        var lineStyle = extend(
+            {
+                lineCap: 'round'
+            },
+            axisModel.getModel('axisLine.lineStyle').getLineStyle()
+        );
+
+        this.group.add(new Line(subPixelOptimizeLine({
+            // Id for animation
+            anid: 'line',
+
+            shape: {
+                x1: pt1[0],
+                y1: pt1[1],
+                x2: pt2[0],
+                y2: pt2[1]
+            },
+            style: lineStyle,
+            strokeContainThreshold: opt.strokeContainThreshold || 5,
+            silent: true,
+            z2: 1
+        })));
+
+        var arrows = axisModel.get('axisLine.symbol');
+        var arrowSize = axisModel.get('axisLine.symbolSize');
+
+        var arrowOffset = axisModel.get('axisLine.symbolOffset') || 0;
+        if (typeof arrowOffset === 'number') {
+            arrowOffset = [arrowOffset, arrowOffset];
+        }
+
+        if (arrows != null) {
+            if (typeof arrows === 'string') {
+                // Use the same arrow for start and end point
+                arrows = [arrows, arrows];
+            }
+            if (typeof arrowSize === 'string'
+                || typeof arrowSize === 'number'
+            ) {
+                // Use the same size for width and height
+                arrowSize = [arrowSize, arrowSize];
+            }
+
+            var symbolWidth = arrowSize[0];
+            var symbolHeight = arrowSize[1];
+
+            each$1([{
+                rotate: opt.rotation + Math.PI / 2,
+                offset: arrowOffset[0],
+                r: 0
+            }, {
+                rotate: opt.rotation - Math.PI / 2,
+                offset: arrowOffset[1],
+                r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0])
+                    + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1]))
+            }], function (point, index) {
+                if (arrows[index] !== 'none' && arrows[index] != null) {
+                    var symbol = createSymbol(
+                        arrows[index],
+                        -symbolWidth / 2,
+                        -symbolHeight / 2,
+                        symbolWidth,
+                        symbolHeight,
+                        lineStyle.stroke,
+                        true
+                    );
+
+                    // Calculate arrow position with offset
+                    var r = point.r + point.offset;
+                    var pos = [
+                        pt1[0] + r * Math.cos(opt.rotation),
+                        pt1[1] - r * Math.sin(opt.rotation)
+                    ];
+
+                    symbol.attr({
+                        rotation: point.rotate,
+                        position: pos,
+                        silent: true
+                    });
+                    this.group.add(symbol);
+                }
+            }, this);
+        }
+    },
+
+    /**
+     * @private
+     */
+    axisTickLabel: function () {
+        var axisModel = this.axisModel;
+        var opt = this.opt;
+
+        var tickEls = buildAxisTick(this, axisModel, opt);
+        var labelEls = buildAxisLabel(this, axisModel, opt);
+
+        fixMinMaxLabelShow(axisModel, labelEls, tickEls);
+    },
+
+    /**
+     * @private
+     */
+    axisName: function () {
+        var opt = this.opt;
+        var axisModel = this.axisModel;
+        var name = retrieve(opt.axisName, axisModel.get('name'));
+
+        if (!name) {
+            return;
+        }
+
+        var nameLocation = axisModel.get('nameLocation');
+        var nameDirection = opt.nameDirection;
+        var textStyleModel = axisModel.getModel('nameTextStyle');
+        var gap = axisModel.get('nameGap') || 0;
+
+        var extent = this.axisModel.axis.getExtent();
+        var gapSignal = extent[0] > extent[1] ? -1 : 1;
+        var pos = [
+            nameLocation === 'start'
+                ? extent[0] - gapSignal * gap
+                : nameLocation === 'end'
+                ? extent[1] + gapSignal * gap
+                : (extent[0] + extent[1]) / 2, // 'middle'
+            // Reuse labelOffset.
+            isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0
+        ];
+
+        var labelLayout;
+
+        var nameRotation = axisModel.get('nameRotate');
+        if (nameRotation != null) {
+            nameRotation = nameRotation * PI$2 / 180; // To radian.
+        }
+
+        var axisNameAvailableWidth;
+
+        if (isNameLocationCenter(nameLocation)) {
+            labelLayout = innerTextLayout(
+                opt.rotation,
+                nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis.
+                nameDirection
+            );
+        }
+        else {
+            labelLayout = endTextLayout(
+                opt, nameLocation, nameRotation || 0, extent
+            );
+
+            axisNameAvailableWidth = opt.axisNameAvailableWidth;
+            if (axisNameAvailableWidth != null) {
+                axisNameAvailableWidth = Math.abs(
+                    axisNameAvailableWidth / Math.sin(labelLayout.rotation)
+                );
+                !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);
+            }
+        }
+
+        var textFont = textStyleModel.getFont();
+
+        var truncateOpt = axisModel.get('nameTruncate', true) || {};
+        var ellipsis = truncateOpt.ellipsis;
+        var maxWidth = retrieve(
+            opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth
+        );
+        // FIXME
+        // truncate rich text? (consider performance)
+        var truncatedText = (ellipsis != null && maxWidth != null)
+            ? truncateText$1(
+                name, maxWidth, textFont, ellipsis,
+                {minChar: 2, placeholder: truncateOpt.placeholder}
+            )
+            : name;
+
+        var tooltipOpt = axisModel.get('tooltip', true);
+
+        var mainType = axisModel.mainType;
+        var formatterParams = {
+            componentType: mainType,
+            name: name,
+            $vars: ['name']
+        };
+        formatterParams[mainType + 'Index'] = axisModel.componentIndex;
+
+        var textEl = new Text({
+            // Id for animation
+            anid: 'name',
+
+            __fullText: name,
+            __truncatedText: truncatedText,
+
+            position: pos,
+            rotation: labelLayout.rotation,
+            silent: isSilent(axisModel),
+            z2: 1,
+            tooltip: (tooltipOpt && tooltipOpt.show)
+                ? extend({
+                    content: name,
+                    formatter: function () {
+                        return name;
+                    },
+                    formatterParams: formatterParams
+                }, tooltipOpt)
+                : null
+        });
+
+        setTextStyle(textEl.style, textStyleModel, {
+            text: truncatedText,
+            textFont: textFont,
+            textFill: textStyleModel.getTextColor()
+                || axisModel.get('axisLine.lineStyle.color'),
+            textAlign: labelLayout.textAlign,
+            textVerticalAlign: labelLayout.textVerticalAlign
+        });
+
+        if (axisModel.get('triggerEvent')) {
+            textEl.eventData = makeAxisEventDataBase(axisModel);
+            textEl.eventData.targetType = 'axisName';
+            textEl.eventData.name = name;
+        }
+
+        // FIXME
+        this._dumbGroup.add(textEl);
+        textEl.updateTransform();
+
+        this.group.add(textEl);
+
+        textEl.decomposeTransform();
+    }
+
+};
+
+/**
+ * @public
+ * @static
+ * @param {Object} opt
+ * @param {number} axisRotation in radian
+ * @param {number} textRotation in radian
+ * @param {number} direction
+ * @return {Object} {
+ *  rotation, // according to axis
+ *  textAlign,
+ *  textVerticalAlign
+ * }
+ */
+var innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) {
+    var rotationDiff = remRadian(textRotation - axisRotation);
+    var textAlign;
+    var textVerticalAlign;
+
+    if (isRadianAroundZero(rotationDiff)) { // Label is parallel with axis line.
+        textVerticalAlign = direction > 0 ? 'top' : 'bottom';
+        textAlign = 'center';
+    }
+    else if (isRadianAroundZero(rotationDiff - PI$2)) { // Label is inverse parallel with axis line.
+        textVerticalAlign = direction > 0 ? 'bottom' : 'top';
+        textAlign = 'center';
+    }
+    else {
+        textVerticalAlign = 'middle';
+
+        if (rotationDiff > 0 && rotationDiff < PI$2) {
+            textAlign = direction > 0 ? 'right' : 'left';
+        }
+        else {
+            textAlign = direction > 0 ? 'left' : 'right';
+        }
+    }
+
+    return {
+        rotation: rotationDiff,
+        textAlign: textAlign,
+        textVerticalAlign: textVerticalAlign
+    };
+};
+
+function endTextLayout(opt, textPosition, textRotate, extent) {
+    var rotationDiff = remRadian(textRotate - opt.rotation);
+    var textAlign;
+    var textVerticalAlign;
+    var inverse = extent[0] > extent[1];
+    var onLeft = (textPosition === 'start' && !inverse)
+        || (textPosition !== 'start' && inverse);
+
+    if (isRadianAroundZero(rotationDiff - PI$2 / 2)) {
+        textVerticalAlign = onLeft ? 'bottom' : 'top';
+        textAlign = 'center';
+    }
+    else if (isRadianAroundZero(rotationDiff - PI$2 * 1.5)) {
+        textVerticalAlign = onLeft ? 'top' : 'bottom';
+        textAlign = 'center';
+    }
+    else {
+        textVerticalAlign = 'middle';
+        if (rotationDiff < PI$2 * 1.5 && rotationDiff > PI$2 / 2) {
+            textAlign = onLeft ? 'left' : 'right';
+        }
+        else {
+            textAlign = onLeft ? 'right' : 'left';
+        }
+    }
+
+    return {
+        rotation: rotationDiff,
+        textAlign: textAlign,
+        textVerticalAlign: textVerticalAlign
+    };
+}
+
+function isSilent(axisModel) {
+    var tooltipOpt = axisModel.get('tooltip');
+    return axisModel.get('silent')
+        // Consider mouse cursor, add these restrictions.
+        || !(
+            axisModel.get('triggerEvent') || (tooltipOpt && tooltipOpt.show)
+        );
+}
+
+function fixMinMaxLabelShow(axisModel, labelEls, tickEls) {
+    // If min or max are user set, we need to check
+    // If the tick on min(max) are overlap on their neighbour tick
+    // If they are overlapped, we need to hide the min(max) tick label
+    var showMinLabel = axisModel.get('axisLabel.showMinLabel');
+    var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');
+
+    // FIXME
+    // Have not consider onBand yet, where tick els is more than label els.
+
+    labelEls = labelEls || [];
+    tickEls = tickEls || [];
+
+    var firstLabel = labelEls[0];
+    var nextLabel = labelEls[1];
+    var lastLabel = labelEls[labelEls.length - 1];
+    var prevLabel = labelEls[labelEls.length - 2];
+
+    var firstTick = tickEls[0];
+    var nextTick = tickEls[1];
+    var lastTick = tickEls[tickEls.length - 1];
+    var prevTick = tickEls[tickEls.length - 2];
+
+    if (showMinLabel === false) {
+        ignoreEl(firstLabel);
+        ignoreEl(firstTick);
+    }
+    else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {
+        if (showMinLabel) {
+            ignoreEl(nextLabel);
+            ignoreEl(nextTick);
+        }
+        else {
+            ignoreEl(firstLabel);
+            ignoreEl(firstTick);
+        }
+    }
+
+    if (showMaxLabel === false) {
+        ignoreEl(lastLabel);
+        ignoreEl(lastTick);
+    }
+    else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {
+        if (showMaxLabel) {
+            ignoreEl(prevLabel);
+            ignoreEl(prevTick);
+        }
+        else {
+            ignoreEl(lastLabel);
+            ignoreEl(lastTick);
+        }
+    }
+}
+
+function ignoreEl(el) {
+    el && (el.ignore = true);
+}
+
+function isTwoLabelOverlapped(current, next, labelLayout) {
+    // current and next has the same rotation.
+    var firstRect = current && current.getBoundingRect().clone();
+    var nextRect = next && next.getBoundingRect().clone();
+
+    if (!firstRect || !nextRect) {
+        return;
+    }
+
+    // When checking intersect of two rotated labels, we use mRotationBack
+    // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.
+    var mRotationBack = identity([]);
+    rotate(mRotationBack, mRotationBack, -current.rotation);
+
+    firstRect.applyTransform(mul$1([], mRotationBack, current.getLocalTransform()));
+    nextRect.applyTransform(mul$1([], mRotationBack, next.getLocalTransform()));
+
+    return firstRect.intersect(nextRect);
+}
+
+function isNameLocationCenter(nameLocation) {
+    return nameLocation === 'middle' || nameLocation === 'center';
+}
+
+function buildAxisTick(axisBuilder, axisModel, opt) {
+    var axis = axisModel.axis;
+
+    if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) {
+        return;
+    }
+
+    var tickModel = axisModel.getModel('axisTick');
+
+    var lineStyleModel = tickModel.getModel('lineStyle');
+    var tickLen = tickModel.get('length');
+
+    var ticksCoords = axis.getTicksCoords();
+
+    var pt1 = [];
+    var pt2 = [];
+    var matrix = axisBuilder._transform;
+
+    var tickEls = [];
+
+    for (var i = 0; i < ticksCoords.length; i++) {
+        var tickCoord = ticksCoords[i].coord;
+
+        pt1[0] = tickCoord;
+        pt1[1] = 0;
+        pt2[0] = tickCoord;
+        pt2[1] = opt.tickDirection * tickLen;
+
+        if (matrix) {
+            applyTransform(pt1, pt1, matrix);
+            applyTransform(pt2, pt2, matrix);
+        }
+        // Tick line, Not use group transform to have better line draw
+        var tickEl = new Line(subPixelOptimizeLine({
+            // Id for animation
+            anid: 'tick_' + ticksCoords[i].tickValue,
+
+            shape: {
+                x1: pt1[0],
+                y1: pt1[1],
+                x2: pt2[0],
+                y2: pt2[1]
+            },
+            style: defaults(
+                lineStyleModel.getLineStyle(),
+                {
+                    stroke: axisModel.get('axisLine.lineStyle.color')
+                }
+            ),
+            z2: 2,
+            silent: true
+        }));
+        axisBuilder.group.add(tickEl);
+        tickEls.push(tickEl);
+    }
+
+    return tickEls;
+}
+
+function buildAxisLabel(axisBuilder, axisModel, opt) {
+    var axis = axisModel.axis;
+    var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show'));
+
+    if (!show || axis.scale.isBlank()) {
+        return;
+    }
+
+    var labelModel = axisModel.getModel('axisLabel');
+    var labelMargin = labelModel.get('margin');
+    var labels = axis.getViewLabels();
+
+    // Special label rotate.
+    var labelRotation = (
+        retrieve(opt.labelRotate, labelModel.get('rotate')) || 0
+    ) * PI$2 / 180;
+
+    var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);
+    var rawCategoryData = axisModel.getCategories(true);
+
+    var labelEls = [];
+    var silent = isSilent(axisModel);
+    var triggerEvent = axisModel.get('triggerEvent');
+
+    each$1(labels, function (labelItem, index) {
+        var tickValue = labelItem.tickValue;
+        var formattedLabel = labelItem.formattedLabel;
+        var rawLabel = labelItem.rawLabel;
+
+        var itemLabelModel = labelModel;
+        if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {
+            itemLabelModel = new Model(
+                rawCategoryData[tickValue].textStyle, labelModel, axisModel.ecModel
+            );
+        }
+
+        var textColor = itemLabelModel.getTextColor()
+            || axisModel.get('axisLine.lineStyle.color');
+
+        var tickCoord = axis.dataToCoord(tickValue);
+        var pos = [
+            tickCoord,
+            opt.labelOffset + opt.labelDirection * labelMargin
+        ];
+
+        var textEl = new Text({
+            // Id for animation
+            anid: 'label_' + tickValue,
+            position: pos,
+            rotation: labelLayout.rotation,
+            silent: silent,
+            z2: 10
+        });
+
+        setTextStyle(textEl.style, itemLabelModel, {
+            text: formattedLabel,
+            textAlign: itemLabelModel.getShallow('align', true)
+                || labelLayout.textAlign,
+            textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true)
+                || itemLabelModel.getShallow('baseline', true)
+                || labelLayout.textVerticalAlign,
+            textFill: typeof textColor === 'function'
+                ? textColor(
+                    // (1) In category axis with data zoom, tick is not the original
+                    // index of axis.data. So tick should not be exposed to user
+                    // in category axis.
+                    // (2) Compatible with previous version, which always use formatted label as
+                    // input. But in interval scale the formatted label is like '223,445', which
+                    // maked user repalce ','. So we modify it to return original val but remain
+                    // it as 'string' to avoid error in replacing.
+                    axis.type === 'category'
+                        ? rawLabel
+                        : axis.type === 'value'
+                        ? tickValue + ''
+                        : tickValue,
+                    index
+                )
+                : textColor
+        });
+
+        // Pack data for mouse event
+        if (triggerEvent) {
+            textEl.eventData = makeAxisEventDataBase(axisModel);
+            textEl.eventData.targetType = 'axisLabel';
+            textEl.eventData.value = rawLabel;
+        }
+
+        // FIXME
+        axisBuilder._dumbGroup.add(textEl);
+        textEl.updateTransform();
+
+        labelEls.push(textEl);
+        axisBuilder.group.add(textEl);
+
+        textEl.decomposeTransform();
+
+    });
+
+    return labelEls;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$6 = each$1;
+var curry$1 = curry;
+
+// Build axisPointerModel, mergin tooltip.axisPointer model for each axis.
+// allAxesInfo should be updated when setOption performed.
+function collect(ecModel, api) {
+    var result = {
+        /**
+         * key: makeKey(axis.model)
+         * value: {
+         *      axis,
+         *      coordSys,
+         *      axisPointerModel,
+         *      triggerTooltip,
+         *      involveSeries,
+         *      snap,
+         *      seriesModels,
+         *      seriesDataCount
+         * }
+         */
+        axesInfo: {},
+        seriesInvolved: false,
+        /**
+         * key: makeKey(coordSys.model)
+         * value: Object: key makeKey(axis.model), value: axisInfo
+         */
+        coordSysAxesInfo: {},
+        coordSysMap: {}
+    };
+
+    collectAxesInfo(result, ecModel, api);
+
+    // Check seriesInvolved for performance, in case too many series in some chart.
+    result.seriesInvolved && collectSeriesInfo(result, ecModel);
+
+    return result;
+}
+
+function collectAxesInfo(result, ecModel, api) {
+    var globalTooltipModel = ecModel.getComponent('tooltip');
+    var globalAxisPointerModel = ecModel.getComponent('axisPointer');
+    // links can only be set on global.
+    var linksOption = globalAxisPointerModel.get('link', true) || [];
+    var linkGroups = [];
+
+    // Collect axes info.
+    each$6(api.getCoordinateSystems(), function (coordSys) {
+        // Some coordinate system do not support axes, like geo.
+        if (!coordSys.axisPointerEnabled) {
+            return;
+        }
+
+        var coordSysKey = makeKey(coordSys.model);
+        var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};
+        result.coordSysMap[coordSysKey] = coordSys;
+
+        // Set tooltip (like 'cross') is a convienent way to show axisPointer
+        // for user. So we enable seting tooltip on coordSys model.
+        var coordSysModel = coordSys.model;
+        var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);
+
+        each$6(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null));
+
+        // If axis tooltip used, choose tooltip axis for each coordSys.
+        // Notice this case: coordSys is `grid` but not `cartesian2D` here.
+        if (coordSys.getTooltipAxes
+            && globalTooltipModel
+            // If tooltip.showContent is set as false, tooltip will not
+            // show but axisPointer will show as normal.
+            && baseTooltipModel.get('show')
+        ) {
+            // Compatible with previous logic. But series.tooltip.trigger: 'axis'
+            // or series.data[n].tooltip.trigger: 'axis' are not support any more.
+            var triggerAxis = baseTooltipModel.get('trigger') === 'axis';
+            var cross = baseTooltipModel.get('axisPointer.type') === 'cross';
+            var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis'));
+            if (triggerAxis || cross) {
+                each$6(tooltipAxes.baseAxes, curry$1(
+                    saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis
+                ));
+            }
+            if (cross) {
+                each$6(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, 'cross', false));
+            }
+        }
+
+        // fromTooltip: true | false | 'cross'
+        // triggerTooltip: true | false | null
+        function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {
+            var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);
+
+            var axisPointerShow = axisPointerModel.get('show');
+            if (!axisPointerShow || (
+                axisPointerShow === 'auto'
+                && !fromTooltip
+                && !isHandleTrigger(axisPointerModel)
+            )) {
+                return;
+            }
+
+            if (triggerTooltip == null) {
+                triggerTooltip = axisPointerModel.get('triggerTooltip');
+            }
+
+            axisPointerModel = fromTooltip
+                ? makeAxisPointerModel(
+                    axis, baseTooltipModel, globalAxisPointerModel, ecModel,
+                    fromTooltip, triggerTooltip
+                )
+                : axisPointerModel;
+
+            var snap = axisPointerModel.get('snap');
+            var key = makeKey(axis.model);
+            var involveSeries = triggerTooltip || snap || axis.type === 'category';
+
+            // If result.axesInfo[key] exist, override it (tooltip has higher priority).
+            var axisInfo = result.axesInfo[key] = {
+                key: key,
+                axis: axis,
+                coordSys: coordSys,
+                axisPointerModel: axisPointerModel,
+                triggerTooltip: triggerTooltip,
+                involveSeries: involveSeries,
+                snap: snap,
+                useHandle: isHandleTrigger(axisPointerModel),
+                seriesModels: []
+            };
+            axesInfoInCoordSys[key] = axisInfo;
+            result.seriesInvolved |= involveSeries;
+
+            var groupIndex = getLinkGroupIndex(linksOption, axis);
+            if (groupIndex != null) {
+                var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {axesInfo: {}});
+                linkGroup.axesInfo[key] = axisInfo;
+                linkGroup.mapper = linksOption[groupIndex].mapper;
+                axisInfo.linkGroup = linkGroup;
+            }
+        }
+    });
+}
+
+function makeAxisPointerModel(
+    axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip
+) {
+    var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');
+    var volatileOption = {};
+
+    each$6(
+        [
+            'type', 'snap', 'lineStyle', 'shadowStyle', 'label',
+            'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'
+        ],
+        function (field) {
+            volatileOption[field] = clone(tooltipAxisPointerModel.get(field));
+        }
+    );
+
+    // category axis do not auto snap, otherwise some tick that do not
+    // has value can not be hovered. value/time/log axis default snap if
+    // triggered from tooltip and trigger tooltip.
+    volatileOption.snap = axis.type !== 'category' && !!triggerTooltip;
+
+    // Compatibel with previous behavior, tooltip axis do not show label by default.
+    // Only these properties can be overrided from tooltip to axisPointer.
+    if (tooltipAxisPointerModel.get('type') === 'cross') {
+        volatileOption.type = 'line';
+    }
+    var labelOption = volatileOption.label || (volatileOption.label = {});
+    // Follow the convention, do not show label when triggered by tooltip by default.
+    labelOption.show == null && (labelOption.show = false);
+
+    if (fromTooltip === 'cross') {
+        // When 'cross', both axes show labels.
+        var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get('label.show');
+        labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true;
+        // If triggerTooltip, this is a base axis, which should better not use cross style
+        // (cross style is dashed by default)
+        if (!triggerTooltip) {
+            var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle');
+            crossStyle && defaults(labelOption, crossStyle.textStyle);
+        }
+    }
+
+    return axis.model.getModel(
+        'axisPointer',
+        new Model(volatileOption, globalAxisPointerModel, ecModel)
+    );
+}
+
+function collectSeriesInfo(result, ecModel) {
+    // Prepare data for axis trigger
+    ecModel.eachSeries(function (seriesModel) {
+
+        // Notice this case: this coordSys is `cartesian2D` but not `grid`.
+        var coordSys = seriesModel.coordinateSystem;
+        var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true);
+        var seriesTooltipShow = seriesModel.get('tooltip.show', true);
+        if (!coordSys
+            || seriesTooltipTrigger === 'none'
+            || seriesTooltipTrigger === false
+            || seriesTooltipTrigger === 'item'
+            || seriesTooltipShow === false
+            || seriesModel.get('axisPointer.show', true) === false
+        ) {
+            return;
+        }
+
+        each$6(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {
+            var axis = axisInfo.axis;
+            if (coordSys.getAxis(axis.dim) === axis) {
+                axisInfo.seriesModels.push(seriesModel);
+                axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);
+                axisInfo.seriesDataCount += seriesModel.getData().count();
+            }
+        });
+
+    }, this);
+}
+
+/**
+ * For example:
+ * {
+ *     axisPointer: {
+ *         links: [{
+ *             xAxisIndex: [2, 4],
+ *             yAxisIndex: 'all'
+ *         }, {
+ *             xAxisId: ['a5', 'a7'],
+ *             xAxisName: 'xxx'
+ *         }]
+ *     }
+ * }
+ */
+function getLinkGroupIndex(linksOption, axis) {
+    var axisModel = axis.model;
+    var dim = axis.dim;
+    for (var i = 0; i < linksOption.length; i++) {
+        var linkOption = linksOption[i] || {};
+        if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id)
+            || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex)
+            || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)
+        ) {
+            return i;
+        }
+    }
+}
+
+function checkPropInLink(linkPropValue, axisPropValue) {
+    return linkPropValue === 'all'
+        || (isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0)
+        || linkPropValue === axisPropValue;
+}
+
+function fixValue(axisModel) {
+    var axisInfo = getAxisInfo(axisModel);
+    if (!axisInfo) {
+        return;
+    }
+
+    var axisPointerModel = axisInfo.axisPointerModel;
+    var scale = axisInfo.axis.scale;
+    var option = axisPointerModel.option;
+    var status = axisPointerModel.get('status');
+    var value = axisPointerModel.get('value');
+
+    // Parse init value for category and time axis.
+    if (value != null) {
+        value = scale.parse(value);
+    }
+
+    var useHandle = isHandleTrigger(axisPointerModel);
+    // If `handle` used, `axisPointer` will always be displayed, so value
+    // and status should be initialized.
+    if (status == null) {
+        option.status = useHandle ? 'show' : 'hide';
+    }
+
+    var extent = scale.getExtent().slice();
+    extent[0] > extent[1] && extent.reverse();
+
+    if (// Pick a value on axis when initializing.
+        value == null
+        // If both `handle` and `dataZoom` are used, value may be out of axis extent,
+        // where we should re-pick a value to keep `handle` displaying normally.
+        || value > extent[1]
+    ) {
+        // Make handle displayed on the end of the axis when init, which looks better.
+        value = extent[1];
+    }
+    if (value < extent[0]) {
+        value = extent[0];
+    }
+
+    option.value = value;
+
+    if (useHandle) {
+        option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show';
+    }
+}
+
+function getAxisInfo(axisModel) {
+    var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;
+    return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];
+}
+
+function getAxisPointerModel(axisModel) {
+    var axisInfo = getAxisInfo(axisModel);
+    return axisInfo && axisInfo.axisPointerModel;
+}
+
+function isHandleTrigger(axisPointerModel) {
+    return !!axisPointerModel.get('handle.show');
+}
+
+/**
+ * @param {module:echarts/model/Model} model
+ * @return {string} unique key
+ */
+function makeKey(model) {
+    return model.type + '||' + model.id;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Base class of AxisView.
+ */
+var AxisView = extendComponentView({
+
+    type: 'axis',
+
+    /**
+     * @private
+     */
+    _axisPointer: null,
+
+    /**
+     * @protected
+     * @type {string}
+     */
+    axisPointerClass: null,
+
+    /**
+     * @override
+     */
+    render: function (axisModel, ecModel, api, payload) {
+        // FIXME
+        // This process should proformed after coordinate systems updated
+        // (axis scale updated), and should be performed each time update.
+        // So put it here temporarily, although it is not appropriate to
+        // put a model-writing procedure in `view`.
+        this.axisPointerClass && fixValue(axisModel);
+
+        AxisView.superApply(this, 'render', arguments);
+
+        updateAxisPointer(this, axisModel, ecModel, api, payload, true);
+    },
+
+    /**
+     * Action handler.
+     * @public
+     * @param {module:echarts/coord/cartesian/AxisModel} axisModel
+     * @param {module:echarts/model/Global} ecModel
+     * @param {module:echarts/ExtensionAPI} api
+     * @param {Object} payload
+     */
+    updateAxisPointer: function (axisModel, ecModel, api, payload, force) {
+        updateAxisPointer(this, axisModel, ecModel, api, payload, false);
+    },
+
+    /**
+     * @override
+     */
+    remove: function (ecModel, api) {
+        var axisPointer = this._axisPointer;
+        axisPointer && axisPointer.remove(api);
+        AxisView.superApply(this, 'remove', arguments);
+    },
+
+    /**
+     * @override
+     */
+    dispose: function (ecModel, api) {
+        disposeAxisPointer(this, api);
+        AxisView.superApply(this, 'dispose', arguments);
+    }
+
+});
+
+function updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) {
+    var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass);
+    if (!Clazz) {
+        return;
+    }
+    var axisPointerModel = getAxisPointerModel(axisModel);
+    axisPointerModel
+        ? (axisView._axisPointer || (axisView._axisPointer = new Clazz()))
+            .render(axisModel, axisPointerModel, api, forceRender)
+        : disposeAxisPointer(axisView, api);
+}
+
+function disposeAxisPointer(axisView, ecModel, api) {
+    var axisPointer = axisView._axisPointer;
+    axisPointer && axisPointer.dispose(ecModel, api);
+    axisView._axisPointer = null;
+}
+
+var axisPointerClazz = [];
+
+AxisView.registerAxisPointerClass = function (type, clazz) {
+    if (__DEV__) {
+        if (axisPointerClazz[type]) {
+            throw new Error('axisPointer ' + type + ' exists');
+        }
+    }
+    axisPointerClazz[type] = clazz;
+};
+
+AxisView.getAxisPointerClass = function (type) {
+    return type && axisPointerClazz[type];
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Can only be called after coordinate system creation stage.
+ * (Can be called before coordinate system update stage).
+ *
+ * @param {Object} opt {labelInside}
+ * @return {Object} {
+ *  position, rotation, labelDirection, labelOffset,
+ *  tickDirection, labelRotate, z2
+ * }
+ */
+function layout$1(gridModel, axisModel, opt) {
+    opt = opt || {};
+    var grid = gridModel.coordinateSystem;
+    var axis = axisModel.axis;
+    var layout = {};
+    var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];
+
+    var rawAxisPosition = axis.position;
+    var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;
+    var axisDim = axis.dim;
+
+    var rect = grid.getRect();
+    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
+    var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2};
+    var axisOffset = axisModel.get('offset') || 0;
+
+    var posBound = axisDim === 'x'
+        ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset]
+        : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];
+
+    if (otherAxisOnZeroOf) {
+        var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));
+        posBound[idx['onZero']] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);
+    }
+
+    // Axis position
+    layout.position = [
+        axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0],
+        axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]
+    ];
+
+    // Axis rotation
+    layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1);
+
+    // Tick and label direction, x y is axisDim
+    var dirMap = {top: -1, bottom: 1, left: -1, right: 1};
+
+    layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];
+    layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx['onZero']] : 0;
+
+    if (axisModel.get('axisTick.inside')) {
+        layout.tickDirection = -layout.tickDirection;
+    }
+    if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {
+        layout.labelDirection = -layout.labelDirection;
+    }
+
+    // Special label rotation
+    var labelRotate = axisModel.get('axisLabel.rotate');
+    layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate;
+
+    // Over splitLine and splitArea
+    layout.z2 = 1;
+
+    return layout;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var axisBuilderAttrs = [
+    'axisLine', 'axisTickLabel', 'axisName'
+];
+var selfBuilderAttrs = [
+    'splitArea', 'splitLine'
+];
+
+// function getAlignWithLabel(model, axisModel) {
+//     var alignWithLabel = model.get('alignWithLabel');
+//     if (alignWithLabel === 'auto') {
+//         alignWithLabel = axisModel.get('axisTick.alignWithLabel');
+//     }
+//     return alignWithLabel;
+// }
+
+var CartesianAxisView = AxisView.extend({
+
+    type: 'cartesianAxis',
+
+    axisPointerClass: 'CartesianAxisPointer',
+
+    /**
+     * @override
+     */
+    render: function (axisModel, ecModel, api, payload) {
+
+        this.group.removeAll();
+
+        var oldAxisGroup = this._axisGroup;
+        this._axisGroup = new Group();
+
+        this.group.add(this._axisGroup);
+
+        if (!axisModel.get('show')) {
+            return;
+        }
+
+        var gridModel = axisModel.getCoordSysModel();
+
+        var layout = layout$1(gridModel, axisModel);
+
+        var axisBuilder = new AxisBuilder(axisModel, layout);
+
+        each$1(axisBuilderAttrs, axisBuilder.add, axisBuilder);
+
+        this._axisGroup.add(axisBuilder.getGroup());
+
+        each$1(selfBuilderAttrs, function (name) {
+            if (axisModel.get(name + '.show')) {
+                this['_' + name](axisModel, gridModel);
+            }
+        }, this);
+
+        groupTransition(oldAxisGroup, this._axisGroup, axisModel);
+
+        CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);
+    },
+
+    remove: function () {
+        this._splitAreaColors = null;
+    },
+
+    /**
+     * @param {module:echarts/coord/cartesian/AxisModel} axisModel
+     * @param {module:echarts/coord/cartesian/GridModel} gridModel
+     * @private
+     */
+    _splitLine: function (axisModel, gridModel) {
+        var axis = axisModel.axis;
+
+        if (axis.scale.isBlank()) {
+            return;
+        }
+
+        var splitLineModel = axisModel.getModel('splitLine');
+        var lineStyleModel = splitLineModel.getModel('lineStyle');
+        var lineColors = lineStyleModel.get('color');
+
+        lineColors = isArray(lineColors) ? lineColors : [lineColors];
+
+        var gridRect = gridModel.coordinateSystem.getRect();
+        var isHorizontal = axis.isHorizontal();
+
+        var lineCount = 0;
+
+        var ticksCoords = axis.getTicksCoords({
+            tickModel: splitLineModel
+        });
+
+        var p1 = [];
+        var p2 = [];
+
+        // Simple optimization
+        // Batching the lines if color are the same
+        var lineStyle = lineStyleModel.getLineStyle();
+        for (var i = 0; i < ticksCoords.length; i++) {
+            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
+
+            if (isHorizontal) {
+                p1[0] = tickCoord;
+                p1[1] = gridRect.y;
+                p2[0] = tickCoord;
+                p2[1] = gridRect.y + gridRect.height;
+            }
+            else {
+                p1[0] = gridRect.x;
+                p1[1] = tickCoord;
+                p2[0] = gridRect.x + gridRect.width;
+                p2[1] = tickCoord;
+            }
+
+            var colorIndex = (lineCount++) % lineColors.length;
+            var tickValue = ticksCoords[i].tickValue;
+            this._axisGroup.add(new Line(subPixelOptimizeLine({
+                anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null,
+                shape: {
+                    x1: p1[0],
+                    y1: p1[1],
+                    x2: p2[0],
+                    y2: p2[1]
+                },
+                style: defaults({
+                    stroke: lineColors[colorIndex]
+                }, lineStyle),
+                silent: true
+            })));
+        }
+    },
+
+    /**
+     * @param {module:echarts/coord/cartesian/AxisModel} axisModel
+     * @param {module:echarts/coord/cartesian/GridModel} gridModel
+     * @private
+     */
+    _splitArea: function (axisModel, gridModel) {
+        var axis = axisModel.axis;
+
+        if (axis.scale.isBlank()) {
+            return;
+        }
+
+        var splitAreaModel = axisModel.getModel('splitArea');
+        var areaStyleModel = splitAreaModel.getModel('areaStyle');
+        var areaColors = areaStyleModel.get('color');
+
+        var gridRect = gridModel.coordinateSystem.getRect();
+
+        var ticksCoords = axis.getTicksCoords({
+            tickModel: splitAreaModel,
+            clamp: true
+        });
+
+        if (!ticksCoords.length) {
+            return;
+        }
+
+        // For Making appropriate splitArea animation, the color and anid
+        // should be corresponding to previous one if possible.
+        var areaColorsLen = areaColors.length;
+        var lastSplitAreaColors = this._splitAreaColors;
+        var newSplitAreaColors = createHashMap();
+        var colorIndex = 0;
+        if (lastSplitAreaColors) {
+            for (var i = 0; i < ticksCoords.length; i++) {
+                var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);
+                if (cIndex != null) {
+                    colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;
+                    break;
+                }
+            }
+        }
+
+        var prev = axis.toGlobalCoord(ticksCoords[0].coord);
+
+        var areaStyle = areaStyleModel.getAreaStyle();
+        areaColors = isArray(areaColors) ? areaColors : [areaColors];
+
+        for (var i = 1; i < ticksCoords.length; i++) {
+            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
+
+            var x;
+            var y;
+            var width;
+            var height;
+            if (axis.isHorizontal()) {
+                x = prev;
+                y = gridRect.y;
+                width = tickCoord - x;
+                height = gridRect.height;
+                prev = x + width;
+            }
+            else {
+                x = gridRect.x;
+                y = prev;
+                width = gridRect.width;
+                height = tickCoord - y;
+                prev = y + height;
+            }
+
+            var tickValue = ticksCoords[i - 1].tickValue;
+            tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);
+
+            this._axisGroup.add(new Rect({
+                anid: tickValue != null ? 'area_' + tickValue : null,
+                shape: {
+                    x: x,
+                    y: y,
+                    width: width,
+                    height: height
+                },
+                style: defaults({
+                    fill: areaColors[colorIndex]
+                }, areaStyle),
+                silent: true
+            }));
+
+            colorIndex = (colorIndex + 1) % areaColorsLen;
+        }
+
+        this._splitAreaColors = newSplitAreaColors;
+    }
+});
+
+CartesianAxisView.extend({
+    type: 'xAxis'
+});
+CartesianAxisView.extend({
+    type: 'yAxis'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Grid view
+extendComponentView({
+
+    type: 'grid',
+
+    render: function (gridModel, ecModel) {
+        this.group.removeAll();
+        if (gridModel.get('show')) {
+            this.group.add(new Rect({
+                shape: gridModel.coordinateSystem.getRect(),
+                style: defaults({
+                    fill: gridModel.get('backgroundColor')
+                }, gridModel.getItemStyle()),
+                silent: true,
+                z2: -1
+            }));
+        }
+    }
+
+});
+
+registerPreprocessor(function (option) {
+    // Only create grid when need
+    if (option.xAxis && option.yAxis && !option.grid) {
+        option.grid = {};
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// In case developer forget to include grid component
+registerVisual(visualSymbol('line', 'circle', 'line'));
+registerLayout(pointsLayout('line'));
+
+// Down sample after filter
+registerProcessor(
+    PRIORITY.PROCESSOR.STATISTIC,
+    dataSample('line')
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var BaseBarSeries = SeriesModel.extend({
+
+    type: 'series.__base_bar__',
+
+    getInitialData: function (option, ecModel) {
+        return createListFromArray(this.getSource(), this);
+    },
+
+    getMarkerPosition: function (value) {
+        var coordSys = this.coordinateSystem;
+        if (coordSys) {
+            // PENDING if clamp ?
+            var pt = coordSys.dataToPoint(coordSys.clampData(value));
+            var data = this.getData();
+            var offset = data.getLayout('offset');
+            var size = data.getLayout('size');
+            var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;
+            pt[offsetIndex] += offset + size / 2;
+            return pt;
+        }
+        return [NaN, NaN];
+    },
+
+    defaultOption: {
+        zlevel: 0,                  // 一级层叠
+        z: 2,                       // 二级层叠
+        coordinateSystem: 'cartesian2d',
+        legendHoverLink: true,
+        // stack: null
+
+        // Cartesian coordinate system
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // 最小高度改为0
+        barMinHeight: 0,
+        // 最小角度为0,仅对极坐标系下的柱状图有效
+        barMinAngle: 0,
+        // cursor: null,
+
+        large: false,
+        largeThreshold: 400,
+        progressive: 3e3,
+        progressiveChunkMode: 'mod',
+
+        // barMaxWidth: null,
+        // 默认自适应
+        // barWidth: null,
+        // 柱间距离,默认为柱形宽度的30%,可设固定值
+        // barGap: '30%',
+        // 类目间柱形距离,默认为类目间距的20%,可设固定值
+        // barCategoryGap: '20%',
+        // label: {
+        //      show: false
+        // },
+        itemStyle: {},
+        emphasis: {}
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+BaseBarSeries.extend({
+
+    type: 'series.bar',
+
+    dependencies: ['grid', 'polar'],
+
+    brushSelector: 'rect',
+
+    /**
+     * @override
+     */
+    getProgressive: function () {
+        // Do not support progressive in normal mode.
+        return this.get('large')
+            ? this.get('progressive')
+            : false;
+    },
+
+    /**
+     * @override
+     */
+    getProgressiveThreshold: function () {
+        // Do not support progressive in normal mode.
+        var progressiveThreshold = this.get('progressiveThreshold');
+        var largeThreshold = this.get('largeThreshold');
+        if (largeThreshold > progressiveThreshold) {
+            progressiveThreshold = largeThreshold;
+        }
+        return progressiveThreshold;
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function setLabel(
+    normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside
+) {
+    var labelModel = itemModel.getModel('label');
+    var hoverLabelModel = itemModel.getModel('emphasis.label');
+
+    setLabelStyle(
+        normalStyle, hoverStyle, labelModel, hoverLabelModel,
+        {
+            labelFetcher: seriesModel,
+            labelDataIndex: dataIndex,
+            defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),
+            isRectText: true,
+            autoColor: color
+        }
+    );
+
+    fixPosition(normalStyle);
+    fixPosition(hoverStyle);
+}
+
+function fixPosition(style, labelPositionOutside) {
+    if (style.textPosition === 'outside') {
+        style.textPosition = labelPositionOutside;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var getBarItemStyle = makeStyleMapper(
+    [
+        ['fill', 'color'],
+        ['stroke', 'borderColor'],
+        ['lineWidth', 'borderWidth'],
+        // Compatitable with 2
+        ['stroke', 'barBorderColor'],
+        ['lineWidth', 'barBorderWidth'],
+        ['opacity'],
+        ['shadowBlur'],
+        ['shadowOffsetX'],
+        ['shadowOffsetY'],
+        ['shadowColor']
+    ]
+);
+
+var barItemStyle = {
+    getBarItemStyle: function (excludes) {
+        var style = getBarItemStyle(this, excludes);
+        if (this.getBorderLineDash) {
+            var lineDash = this.getBorderLineDash();
+            lineDash && (style.lineDash = lineDash);
+        }
+        return style;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'barBorderWidth'];
+
+// FIXME
+// Just for compatible with ec2.
+extend(Model.prototype, barItemStyle);
+
+extendChartView({
+
+    type: 'bar',
+
+    render: function (seriesModel, ecModel, api) {
+        this._updateDrawMode(seriesModel);
+
+        var coordinateSystemType = seriesModel.get('coordinateSystem');
+
+        if (coordinateSystemType === 'cartesian2d'
+            || coordinateSystemType === 'polar'
+        ) {
+            this._isLargeDraw
+                ? this._renderLarge(seriesModel, ecModel, api)
+                : this._renderNormal(seriesModel, ecModel, api);
+        }
+        else if (__DEV__) {
+            console.warn('Only cartesian2d and polar supported for bar.');
+        }
+
+        return this.group;
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        this._clear();
+        this._updateDrawMode(seriesModel);
+    },
+
+    incrementalRender: function (params, seriesModel, ecModel, api) {
+        // Do not support progressive in normal mode.
+        this._incrementalRenderLarge(params, seriesModel);
+    },
+
+    _updateDrawMode: function (seriesModel) {
+        var isLargeDraw = seriesModel.pipelineContext.large;
+        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {
+            this._isLargeDraw = isLargeDraw;
+            this._clear();
+        }
+    },
+
+    _renderNormal: function (seriesModel, ecModel, api) {
+        var group = this.group;
+        var data = seriesModel.getData();
+        var oldData = this._data;
+
+        var coord = seriesModel.coordinateSystem;
+        var baseAxis = coord.getBaseAxis();
+        var isHorizontalOrRadial;
+
+        if (coord.type === 'cartesian2d') {
+            isHorizontalOrRadial = baseAxis.isHorizontal();
+        }
+        else if (coord.type === 'polar') {
+            isHorizontalOrRadial = baseAxis.dim === 'angle';
+        }
+
+        var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;
+
+        data.diff(oldData)
+            .add(function (dataIndex) {
+                if (!data.hasValue(dataIndex)) {
+                    return;
+                }
+
+                var itemModel = data.getItemModel(dataIndex);
+                var layout = getLayout[coord.type](data, dataIndex, itemModel);
+                var el = elementCreator[coord.type](
+                    data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel
+                );
+                data.setItemGraphicEl(dataIndex, el);
+                group.add(el);
+
+                updateStyle(
+                    el, data, dataIndex, itemModel, layout,
+                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'
+                );
+            })
+            .update(function (newIndex, oldIndex) {
+                var el = oldData.getItemGraphicEl(oldIndex);
+
+                if (!data.hasValue(newIndex)) {
+                    group.remove(el);
+                    return;
+                }
+
+                var itemModel = data.getItemModel(newIndex);
+                var layout = getLayout[coord.type](data, newIndex, itemModel);
+
+                if (el) {
+                    updateProps(el, {shape: layout}, animationModel, newIndex);
+                }
+                else {
+                    el = elementCreator[coord.type](
+                        data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true
+                    );
+                }
+
+                data.setItemGraphicEl(newIndex, el);
+                // Add back
+                group.add(el);
+
+                updateStyle(
+                    el, data, newIndex, itemModel, layout,
+                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'
+                );
+            })
+            .remove(function (dataIndex) {
+                var el = oldData.getItemGraphicEl(dataIndex);
+                if (coord.type === 'cartesian2d') {
+                    el && removeRect(dataIndex, animationModel, el);
+                }
+                else {
+                    el && removeSector(dataIndex, animationModel, el);
+                }
+            })
+            .execute();
+
+        this._data = data;
+    },
+
+    _renderLarge: function (seriesModel, ecModel, api) {
+        this._clear();
+        createLarge(seriesModel, this.group);
+    },
+
+    _incrementalRenderLarge: function (params, seriesModel) {
+        createLarge(seriesModel, this.group, true);
+    },
+
+    dispose: noop,
+
+    remove: function (ecModel) {
+        this._clear(ecModel);
+    },
+
+    _clear: function (ecModel) {
+        var group = this.group;
+        var data = this._data;
+        if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) {
+            data.eachItemGraphicEl(function (el) {
+                if (el.type === 'sector') {
+                    removeSector(el.dataIndex, ecModel, el);
+                }
+                else {
+                    removeRect(el.dataIndex, ecModel, el);
+                }
+            });
+        }
+        else {
+            group.removeAll();
+        }
+        this._data = null;
+    }
+
+});
+
+var elementCreator = {
+
+    cartesian2d: function (
+        data, dataIndex, itemModel, layout, isHorizontal,
+        animationModel, isUpdate
+    ) {
+        var rect = new Rect({shape: extend({}, layout)});
+
+        // Animation
+        if (animationModel) {
+            var rectShape = rect.shape;
+            var animateProperty = isHorizontal ? 'height' : 'width';
+            var animateTarget = {};
+            rectShape[animateProperty] = 0;
+            animateTarget[animateProperty] = layout[animateProperty];
+            graphic[isUpdate ? 'updateProps' : 'initProps'](rect, {
+                shape: animateTarget
+            }, animationModel, dataIndex);
+        }
+
+        return rect;
+    },
+
+    polar: function (
+        data, dataIndex, itemModel, layout, isRadial,
+        animationModel, isUpdate
+    ) {
+        // Keep the same logic with bar in catesion: use end value to control
+        // direction. Notice that if clockwise is true (by default), the sector
+        // will always draw clockwisely, no matter whether endAngle is greater
+        // or less than startAngle.
+        var clockwise = layout.startAngle < layout.endAngle;
+        var sector = new Sector({
+            shape: defaults({clockwise: clockwise}, layout)
+        });
+
+        // Animation
+        if (animationModel) {
+            var sectorShape = sector.shape;
+            var animateProperty = isRadial ? 'r' : 'endAngle';
+            var animateTarget = {};
+            sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;
+            animateTarget[animateProperty] = layout[animateProperty];
+            graphic[isUpdate ? 'updateProps' : 'initProps'](sector, {
+                shape: animateTarget
+            }, animationModel, dataIndex);
+        }
+
+        return sector;
+    }
+};
+
+function removeRect(dataIndex, animationModel, el) {
+    // Not show text when animating
+    el.style.text = null;
+    updateProps(el, {
+        shape: {
+            width: 0
+        }
+    }, animationModel, dataIndex, function () {
+        el.parent && el.parent.remove(el);
+    });
+}
+
+function removeSector(dataIndex, animationModel, el) {
+    // Not show text when animating
+    el.style.text = null;
+    updateProps(el, {
+        shape: {
+            r: el.shape.r0
+        }
+    }, animationModel, dataIndex, function () {
+        el.parent && el.parent.remove(el);
+    });
+}
+
+var getLayout = {
+    cartesian2d: function (data, dataIndex, itemModel) {
+        var layout = data.getItemLayout(dataIndex);
+        var fixedLineWidth = getLineWidth(itemModel, layout);
+
+        // fix layout with lineWidth
+        var signX = layout.width > 0 ? 1 : -1;
+        var signY = layout.height > 0 ? 1 : -1;
+        return {
+            x: layout.x + signX * fixedLineWidth / 2,
+            y: layout.y + signY * fixedLineWidth / 2,
+            width: layout.width - signX * fixedLineWidth,
+            height: layout.height - signY * fixedLineWidth
+        };
+    },
+
+    polar: function (data, dataIndex, itemModel) {
+        var layout = data.getItemLayout(dataIndex);
+        return {
+            cx: layout.cx,
+            cy: layout.cy,
+            r0: layout.r0,
+            r: layout.r,
+            startAngle: layout.startAngle,
+            endAngle: layout.endAngle
+        };
+    }
+};
+
+function updateStyle(
+    el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar
+) {
+    var color = data.getItemVisual(dataIndex, 'color');
+    var opacity = data.getItemVisual(dataIndex, 'opacity');
+    var itemStyleModel = itemModel.getModel('itemStyle');
+    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle();
+
+    if (!isPolar) {
+        el.setShape('r', itemStyleModel.get('barBorderRadius') || 0);
+    }
+
+    el.useStyle(defaults(
+        {
+            fill: color,
+            opacity: opacity
+        },
+        itemStyleModel.getBarItemStyle()
+    ));
+
+    var cursorStyle = itemModel.getShallow('cursor');
+    cursorStyle && el.attr('cursor', cursorStyle);
+
+    var labelPositionOutside = isHorizontal
+        ? (layout.height > 0 ? 'bottom' : 'top')
+        : (layout.width > 0 ? 'left' : 'right');
+
+    if (!isPolar) {
+        setLabel(
+            el.style, hoverStyle, itemModel, color,
+            seriesModel, dataIndex, labelPositionOutside
+        );
+    }
+
+    setHoverStyle(el, hoverStyle);
+}
+
+// In case width or height are too small.
+function getLineWidth(itemModel, rawLayout) {
+    var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;
+    return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height));
+}
+
+
+var LargePath = Path.extend({
+
+    type: 'largeBar',
+
+    shape: {points: []},
+
+    buildPath: function (ctx, shape) {
+        // Drawing lines is more efficient than drawing
+        // a whole line or drawing rects.
+        var points = shape.points;
+        var startPoint = this.__startPoint;
+        var valueIdx = this.__valueIdx;
+
+        for (var i = 0; i < points.length; i += 2) {
+            startPoint[this.__valueIdx] = points[i + valueIdx];
+            ctx.moveTo(startPoint[0], startPoint[1]);
+            ctx.lineTo(points[i], points[i + 1]);
+        }
+    }
+});
+
+function createLarge(seriesModel, group, incremental) {
+    // TODO support polar
+    var data = seriesModel.getData();
+    var startPoint = [];
+    var valueIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;
+    startPoint[1 - valueIdx] = data.getLayout('valueAxisStart');
+
+    var el = new LargePath({
+        shape: {points: data.getLayout('largePoints')},
+        incremental: !!incremental,
+        __startPoint: startPoint,
+        __valueIdx: valueIdx
+    });
+    group.add(el);
+    setLargeStyle(el, seriesModel, data);
+}
+
+function setLargeStyle(el, seriesModel, data) {
+    var borderColor = data.getVisual('borderColor') || data.getVisual('color');
+    var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']);
+
+    el.useStyle(itemStyle);
+    el.style.fill = null;
+    el.style.stroke = borderColor;
+    el.style.lineWidth = data.getLayout('barWidth');
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// In case developer forget to include grid component
+registerLayout(curry(layout, 'bar'));
+// Should after normal bar layout, otherwise it is blocked by normal bar layout.
+registerLayout(largeLayout);
+
+registerVisual({
+    seriesType: 'bar',
+    reset: function (seriesModel) {
+        // Visual coding for legend
+        seriesModel.getData().setVisual('legendSymbol', 'roundRect');
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * [Usage]:
+ * (1)
+ * createListSimply(seriesModel, ['value']);
+ * (2)
+ * createListSimply(seriesModel, {
+ *     coordDimensions: ['value'],
+ *     dimensionsCount: 5
+ * });
+ *
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {Object|Array.<string|Object>} opt opt or coordDimensions
+ *        The options in opt, see `echarts/data/helper/createDimensions`
+ * @param {Array.<string>} [nameList]
+ * @return {module:echarts/data/List}
+ */
+var createListSimply = function (seriesModel, opt, nameList) {
+    opt = isArray(opt) && {coordDimensions: opt} || extend({}, opt);
+
+    var source = seriesModel.getSource();
+
+    var dimensionsInfo = createDimensions(source, opt);
+
+    var list = new List(dimensionsInfo, seriesModel);
+    list.initData(source, nameList);
+
+    return list;
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Data selectable mixin for chart series.
+ * To eanble data select, option of series must have `selectedMode`.
+ * And each data item will use `selected` to toggle itself selected status
+ */
+
+var selectableMixin = {
+
+    /**
+     * @param {Array.<Object>} targetList [{name, value, selected}, ...]
+     *        If targetList is an array, it should like [{name: ..., value: ...}, ...].
+     *        If targetList is a "List", it must have coordDim: 'value' dimension and name.
+     */
+    updateSelectedMap: function (targetList) {
+        this._targetList = isArray(targetList) ? targetList.slice() : [];
+
+        this._selectTargetMap = reduce(targetList || [], function (targetMap, target) {
+            targetMap.set(target.name, target);
+            return targetMap;
+        }, createHashMap());
+    },
+
+    /**
+     * Either name or id should be passed as input here.
+     * If both of them are defined, id is used.
+     *
+     * @param {string|undefined} name name of data
+     * @param {number|undefined} id dataIndex of data
+     */
+    // PENGING If selectedMode is null ?
+    select: function (name, id) {
+        var target = id != null
+            ? this._targetList[id]
+            : this._selectTargetMap.get(name);
+        var selectedMode = this.get('selectedMode');
+        if (selectedMode === 'single') {
+            this._selectTargetMap.each(function (target) {
+                target.selected = false;
+            });
+        }
+        target && (target.selected = true);
+    },
+
+    /**
+     * Either name or id should be passed as input here.
+     * If both of them are defined, id is used.
+     *
+     * @param {string|undefined} name name of data
+     * @param {number|undefined} id dataIndex of data
+     */
+    unSelect: function (name, id) {
+        var target = id != null
+            ? this._targetList[id]
+            : this._selectTargetMap.get(name);
+        // var selectedMode = this.get('selectedMode');
+        // selectedMode !== 'single' && target && (target.selected = false);
+        target && (target.selected = false);
+    },
+
+    /**
+     * Either name or id should be passed as input here.
+     * If both of them are defined, id is used.
+     *
+     * @param {string|undefined} name name of data
+     * @param {number|undefined} id dataIndex of data
+     */
+    toggleSelected: function (name, id) {
+        var target = id != null
+            ? this._targetList[id]
+            : this._selectTargetMap.get(name);
+        if (target != null) {
+            this[target.selected ? 'unSelect' : 'select'](name, id);
+            return target.selected;
+        }
+    },
+
+    /**
+     * Either name or id should be passed as input here.
+     * If both of them are defined, id is used.
+     *
+     * @param {string|undefined} name name of data
+     * @param {number|undefined} id dataIndex of data
+     */
+    isSelected: function (name, id) {
+        var target = id != null
+            ? this._targetList[id]
+            : this._selectTargetMap.get(name);
+        return target && target.selected;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PieSeries = extendSeriesModel({
+
+    type: 'series.pie',
+
+    // Overwrite
+    init: function (option) {
+        PieSeries.superApply(this, 'init', arguments);
+
+        // Enable legend selection for each data item
+        // Use a function instead of direct access because data reference may changed
+        this.legendDataProvider = function () {
+            return this.getRawData();
+        };
+
+        this.updateSelectedMap(this._createSelectableList());
+
+        this._defaultLabelLine(option);
+    },
+
+    // Overwrite
+    mergeOption: function (newOption) {
+        PieSeries.superCall(this, 'mergeOption', newOption);
+
+        this.updateSelectedMap(this._createSelectableList());
+    },
+
+    getInitialData: function (option, ecModel) {
+        return createListSimply(this, ['value']);
+    },
+
+    _createSelectableList: function () {
+        var data = this.getRawData();
+        var valueDim = data.mapDimension('value');
+        var targetList = [];
+        for (var i = 0, len = data.count(); i < len; i++) {
+            targetList.push({
+                name: data.getName(i),
+                value: data.get(valueDim, i),
+                selected: retrieveRawAttr(data, i, 'selected')
+            });
+        }
+        return targetList;
+    },
+
+    // Overwrite
+    getDataParams: function (dataIndex) {
+        var data = this.getData();
+        var params = PieSeries.superCall(this, 'getDataParams', dataIndex);
+        // FIXME toFixed?
+
+        var valueList = [];
+        data.each(data.mapDimension('value'), function (value) {
+            valueList.push(value);
+        });
+
+        params.percent = getPercentWithPrecision(
+            valueList,
+            dataIndex,
+            data.hostModel.get('percentPrecision')
+        );
+
+        params.$vars.push('percent');
+        return params;
+    },
+
+    _defaultLabelLine: function (option) {
+        // Extend labelLine emphasis
+        defaultEmphasis(option, 'labelLine', ['show']);
+
+        var labelLineNormalOpt = option.labelLine;
+        var labelLineEmphasisOpt = option.emphasis.labelLine;
+        // Not show label line if `label.normal.show = false`
+        labelLineNormalOpt.show = labelLineNormalOpt.show
+            && option.label.show;
+        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show
+            && option.emphasis.label.show;
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+        // 默认全局居中
+        center: ['50%', '50%'],
+        radius: [0, '75%'],
+        // 默认顺时针
+        clockwise: true,
+        startAngle: 90,
+        // 最小角度改为0
+        minAngle: 0,
+        // 选中时扇区偏移量
+        selectedOffset: 10,
+        // 高亮扇区偏移量
+        hoverOffset: 10,
+
+        // If use strategy to avoid label overlapping
+        avoidLabelOverlap: true,
+        // 选择模式,默认关闭,可选single,multiple
+        // selectedMode: false,
+        // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)
+        // roseType: null,
+
+        percentPrecision: 2,
+
+        // If still show when all data zero.
+        stillShowZeroSum: true,
+
+        // cursor: null,
+
+        label: {
+            // If rotate around circle
+            rotate: false,
+            show: true,
+            // 'outer', 'inside', 'center'
+            position: 'outer'
+            // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+            // 默认使用全局文本样式,详见TEXTSTYLE
+            // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数
+        },
+        // Enabled when label.normal.position is 'outer'
+        labelLine: {
+            show: true,
+            // 引导线两段中的第一段长度
+            length: 15,
+            // 引导线两段中的第二段长度
+            length2: 15,
+            smooth: false,
+            lineStyle: {
+                // color: 各异,
+                width: 1,
+                type: 'solid'
+            }
+        },
+        itemStyle: {
+            borderWidth: 1
+        },
+
+        // Animation type canbe expansion, scale
+        animationType: 'expansion',
+
+        animationEasing: 'cubicOut'
+    }
+});
+
+mixin(PieSeries, selectableMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {boolean} hasAnimation
+ * @inner
+ */
+function updateDataSelected(uid, seriesModel, hasAnimation, api) {
+    var data = seriesModel.getData();
+    var dataIndex = this.dataIndex;
+    var name = data.getName(dataIndex);
+    var selectedOffset = seriesModel.get('selectedOffset');
+
+    api.dispatchAction({
+        type: 'pieToggleSelect',
+        from: uid,
+        name: name,
+        seriesId: seriesModel.id
+    });
+
+    data.each(function (idx) {
+        toggleItemSelected(
+            data.getItemGraphicEl(idx),
+            data.getItemLayout(idx),
+            seriesModel.isSelected(data.getName(idx)),
+            selectedOffset,
+            hasAnimation
+        );
+    });
+}
+
+/**
+ * @param {module:zrender/graphic/Sector} el
+ * @param {Object} layout
+ * @param {boolean} isSelected
+ * @param {number} selectedOffset
+ * @param {boolean} hasAnimation
+ * @inner
+ */
+function toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {
+    var midAngle = (layout.startAngle + layout.endAngle) / 2;
+
+    var dx = Math.cos(midAngle);
+    var dy = Math.sin(midAngle);
+
+    var offset = isSelected ? selectedOffset : 0;
+    var position = [dx * offset, dy * offset];
+
+    hasAnimation
+        // animateTo will stop revious animation like update transition
+        ? el.animate()
+            .when(200, {
+                position: position
+            })
+            .start('bounceOut')
+        : el.attr('position', position);
+}
+
+/**
+ * Piece of pie including Sector, Label, LabelLine
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ */
+function PiePiece(data, idx) {
+
+    Group.call(this);
+
+    var sector = new Sector({
+        z2: 2
+    });
+    var polyline = new Polyline();
+    var text = new Text();
+    this.add(sector);
+    this.add(polyline);
+    this.add(text);
+
+    this.updateData(data, idx, true);
+
+    // Hover to change label and labelLine
+    function onEmphasis() {
+        polyline.ignore = polyline.hoverIgnore;
+        text.ignore = text.hoverIgnore;
+    }
+    function onNormal() {
+        polyline.ignore = polyline.normalIgnore;
+        text.ignore = text.normalIgnore;
+    }
+    this.on('emphasis', onEmphasis)
+        .on('normal', onNormal)
+        .on('mouseover', onEmphasis)
+        .on('mouseout', onNormal);
+}
+
+var piePieceProto = PiePiece.prototype;
+
+piePieceProto.updateData = function (data, idx, firstCreate) {
+
+    var sector = this.childAt(0);
+
+    var seriesModel = data.hostModel;
+    var itemModel = data.getItemModel(idx);
+    var layout = data.getItemLayout(idx);
+    var sectorShape = extend({}, layout);
+    sectorShape.label = null;
+
+    if (firstCreate) {
+        sector.setShape(sectorShape);
+
+        var animationType = seriesModel.getShallow('animationType');
+        if (animationType === 'scale') {
+            sector.shape.r = layout.r0;
+            initProps(sector, {
+                shape: {
+                    r: layout.r
+                }
+            }, seriesModel, idx);
+        }
+        // Expansion
+        else {
+            sector.shape.endAngle = layout.startAngle;
+            updateProps(sector, {
+                shape: {
+                    endAngle: layout.endAngle
+                }
+            }, seriesModel, idx);
+        }
+
+    }
+    else {
+        updateProps(sector, {
+            shape: sectorShape
+        }, seriesModel, idx);
+    }
+
+    // Update common style
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    sector.useStyle(
+        defaults(
+            {
+                lineJoin: 'bevel',
+                fill: visualColor
+            },
+            itemModel.getModel('itemStyle').getItemStyle()
+        )
+    );
+    sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();
+
+    var cursorStyle = itemModel.getShallow('cursor');
+    cursorStyle && sector.attr('cursor', cursorStyle);
+
+    // Toggle selected
+    toggleItemSelected(
+        this,
+        data.getItemLayout(idx),
+        seriesModel.isSelected(null, idx),
+        seriesModel.get('selectedOffset'),
+        seriesModel.get('animation')
+    );
+
+    function onEmphasis() {
+        // Sector may has animation of updating data. Force to move to the last frame
+        // Or it may stopped on the wrong shape
+        sector.stopAnimation(true);
+        sector.animateTo({
+            shape: {
+                r: layout.r + seriesModel.get('hoverOffset')
+            }
+        }, 300, 'elasticOut');
+    }
+    function onNormal() {
+        sector.stopAnimation(true);
+        sector.animateTo({
+            shape: {
+                r: layout.r
+            }
+        }, 300, 'elasticOut');
+    }
+    sector.off('mouseover').off('mouseout').off('emphasis').off('normal');
+    if (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled()) {
+        sector
+            .on('mouseover', onEmphasis)
+            .on('mouseout', onNormal)
+            .on('emphasis', onEmphasis)
+            .on('normal', onNormal);
+    }
+
+    this._updateLabel(data, idx);
+
+    setHoverStyle(this);
+};
+
+piePieceProto._updateLabel = function (data, idx) {
+
+    var labelLine = this.childAt(1);
+    var labelText = this.childAt(2);
+
+    var seriesModel = data.hostModel;
+    var itemModel = data.getItemModel(idx);
+    var layout = data.getItemLayout(idx);
+    var labelLayout = layout.label;
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    updateProps(labelLine, {
+        shape: {
+            points: labelLayout.linePoints || [
+                [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]
+            ]
+        }
+    }, seriesModel, idx);
+
+    updateProps(labelText, {
+        style: {
+            x: labelLayout.x,
+            y: labelLayout.y
+        }
+    }, seriesModel, idx);
+    labelText.attr({
+        rotation: labelLayout.rotation,
+        origin: [labelLayout.x, labelLayout.y],
+        z2: 10
+    });
+
+    var labelModel = itemModel.getModel('label');
+    var labelHoverModel = itemModel.getModel('emphasis.label');
+    var labelLineModel = itemModel.getModel('labelLine');
+    var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    setLabelStyle(
+        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,
+        {
+            labelFetcher: data.hostModel,
+            labelDataIndex: idx,
+            defaultText: data.getName(idx),
+            autoColor: visualColor,
+            useInsideStyle: !!labelLayout.inside
+        },
+        {
+            textAlign: labelLayout.textAlign,
+            textVerticalAlign: labelLayout.verticalAlign,
+            opacity: data.getItemVisual(idx, 'opacity')
+        }
+    );
+
+    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');
+    labelText.hoverIgnore = !labelHoverModel.get('show');
+
+    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');
+    labelLine.hoverIgnore = !labelLineHoverModel.get('show');
+
+    // Default use item visual color
+    labelLine.setStyle({
+        stroke: visualColor,
+        opacity: data.getItemVisual(idx, 'opacity')
+    });
+    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());
+
+    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();
+
+    var smooth = labelLineModel.get('smooth');
+    if (smooth && smooth === true) {
+        smooth = 0.4;
+    }
+    labelLine.setShape({
+        smooth: smooth
+    });
+};
+
+inherits(PiePiece, Group);
+
+
+// Pie view
+var PieView = Chart.extend({
+
+    type: 'pie',
+
+    init: function () {
+        var sectorGroup = new Group();
+        this._sectorGroup = sectorGroup;
+    },
+
+    render: function (seriesModel, ecModel, api, payload) {
+        if (payload && (payload.from === this.uid)) {
+            return;
+        }
+
+        var data = seriesModel.getData();
+        var oldData = this._data;
+        var group = this.group;
+
+        var hasAnimation = ecModel.get('animation');
+        var isFirstRender = !oldData;
+        var animationType = seriesModel.get('animationType');
+
+        var onSectorClick = curry(
+            updateDataSelected, this.uid, seriesModel, hasAnimation, api
+        );
+
+        var selectedMode = seriesModel.get('selectedMode');
+
+        data.diff(oldData)
+            .add(function (idx) {
+                var piePiece = new PiePiece(data, idx);
+                // Default expansion animation
+                if (isFirstRender && animationType !== 'scale') {
+                    piePiece.eachChild(function (child) {
+                        child.stopAnimation(true);
+                    });
+                }
+
+                selectedMode && piePiece.on('click', onSectorClick);
+
+                data.setItemGraphicEl(idx, piePiece);
+
+                group.add(piePiece);
+            })
+            .update(function (newIdx, oldIdx) {
+                var piePiece = oldData.getItemGraphicEl(oldIdx);
+
+                piePiece.updateData(data, newIdx);
+
+                piePiece.off('click');
+                selectedMode && piePiece.on('click', onSectorClick);
+                group.add(piePiece);
+                data.setItemGraphicEl(newIdx, piePiece);
+            })
+            .remove(function (idx) {
+                var piePiece = oldData.getItemGraphicEl(idx);
+                group.remove(piePiece);
+            })
+            .execute();
+
+        if (
+            hasAnimation && isFirstRender && data.count() > 0
+            // Default expansion animation
+            && animationType !== 'scale'
+        ) {
+            var shape = data.getItemLayout(0);
+            var r = Math.max(api.getWidth(), api.getHeight()) / 2;
+
+            var removeClipPath = bind(group.removeClipPath, group);
+            group.setClipPath(this._createClipPath(
+                shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel
+            ));
+        }
+
+        this._data = data;
+    },
+
+    dispose: function () {},
+
+    _createClipPath: function (
+        cx, cy, r, startAngle, clockwise, cb, seriesModel
+    ) {
+        var clipPath = new Sector({
+            shape: {
+                cx: cx,
+                cy: cy,
+                r0: 0,
+                r: r,
+                startAngle: startAngle,
+                endAngle: startAngle,
+                clockwise: clockwise
+            }
+        });
+
+        initProps(clipPath, {
+            shape: {
+                endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2
+            }
+        }, seriesModel, cb);
+
+        return clipPath;
+    },
+
+    /**
+     * @implement
+     */
+    containPoint: function (point, seriesModel) {
+        var data = seriesModel.getData();
+        var itemLayout = data.getItemLayout(0);
+        if (itemLayout) {
+            var dx = point[0] - itemLayout.cx;
+            var dy = point[1] - itemLayout.cy;
+            var radius = Math.sqrt(dx * dx + dy * dy);
+            return radius <= itemLayout.r && radius >= itemLayout.r0;
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var createDataSelectAction = function (seriesType, actionInfos) {
+    each$1(actionInfos, function (actionInfo) {
+        actionInfo.update = 'updateView';
+        /**
+         * @payload
+         * @property {string} seriesName
+         * @property {string} name
+         */
+        registerAction(actionInfo, function (payload, ecModel) {
+            var selected = {};
+            ecModel.eachComponent(
+                {mainType: 'series', subType: seriesType, query: payload},
+                function (seriesModel) {
+                    if (seriesModel[actionInfo.method]) {
+                        seriesModel[actionInfo.method](
+                            payload.name,
+                            payload.dataIndex
+                        );
+                    }
+                    var data = seriesModel.getData();
+                    // Create selected map
+                    data.each(function (idx) {
+                        var name = data.getName(idx);
+                        selected[name] = seriesModel.isSelected(name)
+                            || false;
+                    });
+                }
+            );
+            return {
+                name: payload.name,
+                selected: selected
+            };
+        });
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Pick color from palette for each data item.
+// Applicable for charts that require applying color palette
+// in data level (like pie, funnel, chord).
+var dataColor = function (seriesType) {
+    return {
+        getTargetSeries: function (ecModel) {
+            // Pie and funnel may use diferrent scope
+            var paletteScope = {};
+            var seiresModelMap = createHashMap();
+
+            ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+                seriesModel.__paletteScope = paletteScope;
+                seiresModelMap.set(seriesModel.uid, seriesModel);
+            });
+
+            return seiresModelMap;
+        },
+        reset: function (seriesModel, ecModel) {
+            var dataAll = seriesModel.getRawData();
+            var idxMap = {};
+            var data = seriesModel.getData();
+
+            data.each(function (idx) {
+                var rawIdx = data.getRawIndex(idx);
+                idxMap[rawIdx] = idx;
+            });
+
+            dataAll.each(function (rawIdx) {
+                var filteredIdx = idxMap[rawIdx];
+
+                // If series.itemStyle.normal.color is a function. itemVisual may be encoded
+                var singleDataColor = filteredIdx != null
+                    && data.getItemVisual(filteredIdx, 'color', true);
+
+                if (!singleDataColor) {
+                    // FIXME Performance
+                    var itemModel = dataAll.getItemModel(rawIdx);
+
+                    var color = itemModel.get('itemStyle.color')
+                        || seriesModel.getColorFromPalette(
+                            dataAll.getName(rawIdx) || (rawIdx + ''), seriesModel.__paletteScope,
+                            dataAll.count()
+                        );
+                    // Legend may use the visual info in data before processed
+                    dataAll.setItemVisual(rawIdx, 'color', color);
+
+                    // Data is not filtered
+                    if (filteredIdx != null) {
+                        data.setItemVisual(filteredIdx, 'color', color);
+                    }
+                }
+                else {
+                    // Set data all color for legend
+                    dataAll.setItemVisual(rawIdx, 'color', singleDataColor);
+                }
+            });
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME emphasis label position is not same with normal label position
+
+function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {
+    list.sort(function (a, b) {
+        return a.y - b.y;
+    });
+
+    // 压
+    function shiftDown(start, end, delta, dir) {
+        for (var j = start; j < end; j++) {
+            list[j].y += delta;
+            if (j > start
+                && j + 1 < end
+                && list[j + 1].y > list[j].y + list[j].height
+            ) {
+                shiftUp(j, delta / 2);
+                return;
+            }
+        }
+
+        shiftUp(end - 1, delta / 2);
+    }
+
+    // 弹
+    function shiftUp(end, delta) {
+        for (var j = end; j >= 0; j--) {
+            list[j].y -= delta;
+            if (j > 0
+                && list[j].y > list[j - 1].y + list[j - 1].height
+            ) {
+                break;
+            }
+        }
+    }
+
+    function changeX(list, isDownList, cx, cy, r, dir) {
+        var lastDeltaX = dir > 0
+            ? isDownList                // 右侧
+                ? Number.MAX_VALUE      // 下
+                : 0                     // 上
+            : isDownList                // 左侧
+                ? Number.MAX_VALUE      // 下
+                : 0;                    // 上
+
+        for (var i = 0, l = list.length; i < l; i++) {
+            // Not change x for center label
+            if (list[i].position === 'center') {
+                continue;
+            }
+            var deltaY = Math.abs(list[i].y - cy);
+            var length = list[i].len;
+            var length2 = list[i].len2;
+            var deltaX = (deltaY < r + length)
+                ? Math.sqrt(
+                        (r + length + length2) * (r + length + length2)
+                        - deltaY * deltaY
+                    )
+                : Math.abs(list[i].x - cx);
+            if (isDownList && deltaX >= lastDeltaX) {
+                // 右下,左下
+                deltaX = lastDeltaX - 10;
+            }
+            if (!isDownList && deltaX <= lastDeltaX) {
+                // 右上,左上
+                deltaX = lastDeltaX + 10;
+            }
+
+            list[i].x = cx + deltaX * dir;
+            lastDeltaX = deltaX;
+        }
+    }
+
+    var lastY = 0;
+    var delta;
+    var len = list.length;
+    var upList = [];
+    var downList = [];
+    for (var i = 0; i < len; i++) {
+        delta = list[i].y - lastY;
+        if (delta < 0) {
+            shiftDown(i, len, -delta, dir);
+        }
+        lastY = list[i].y + list[i].height;
+    }
+    if (viewHeight - lastY < 0) {
+        shiftUp(len - 1, lastY - viewHeight);
+    }
+    for (var i = 0; i < len; i++) {
+        if (list[i].y >= cy) {
+            downList.push(list[i]);
+        }
+        else {
+            upList.push(list[i]);
+        }
+    }
+    changeX(upList, false, cx, cy, r, dir);
+    changeX(downList, true, cx, cy, r, dir);
+}
+
+function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {
+    var leftList = [];
+    var rightList = [];
+    for (var i = 0; i < labelLayoutList.length; i++) {
+        if (labelLayoutList[i].x < cx) {
+            leftList.push(labelLayoutList[i]);
+        }
+        else {
+            rightList.push(labelLayoutList[i]);
+        }
+    }
+
+    adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight);
+    adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight);
+
+    for (var i = 0; i < labelLayoutList.length; i++) {
+        var linePoints = labelLayoutList[i].linePoints;
+        if (linePoints) {
+            var dist = linePoints[1][0] - linePoints[2][0];
+            if (labelLayoutList[i].x < cx) {
+                linePoints[2][0] = labelLayoutList[i].x + 3;
+            }
+            else {
+                linePoints[2][0] = labelLayoutList[i].x - 3;
+            }
+            linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y;
+            linePoints[1][0] = linePoints[2][0] + dist;
+        }
+    }
+}
+
+var labelLayout = function (seriesModel, r, viewWidth, viewHeight) {
+    var data = seriesModel.getData();
+    var labelLayoutList = [];
+    var cx;
+    var cy;
+    var hasLabelRotate = false;
+
+    data.each(function (idx) {
+        var layout = data.getItemLayout(idx);
+
+        var itemModel = data.getItemModel(idx);
+        var labelModel = itemModel.getModel('label');
+        // Use position in normal or emphasis
+        var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position');
+
+        var labelLineModel = itemModel.getModel('labelLine');
+        var labelLineLen = labelLineModel.get('length');
+        var labelLineLen2 = labelLineModel.get('length2');
+
+        var midAngle = (layout.startAngle + layout.endAngle) / 2;
+        var dx = Math.cos(midAngle);
+        var dy = Math.sin(midAngle);
+
+        var textX;
+        var textY;
+        var linePoints;
+        var textAlign;
+
+        cx = layout.cx;
+        cy = layout.cy;
+
+        var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';
+        if (labelPosition === 'center') {
+            textX = layout.cx;
+            textY = layout.cy;
+            textAlign = 'center';
+        }
+        else {
+            var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;
+            var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;
+
+            textX = x1 + dx * 3;
+            textY = y1 + dy * 3;
+
+            if (!isLabelInside) {
+                // For roseType
+                var x2 = x1 + dx * (labelLineLen + r - layout.r);
+                var y2 = y1 + dy * (labelLineLen + r - layout.r);
+                var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);
+                var y3 = y2;
+
+                textX = x3 + (dx < 0 ? -5 : 5);
+                textY = y3;
+                linePoints = [[x1, y1], [x2, y2], [x3, y3]];
+            }
+
+            textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right');
+        }
+        var font = labelModel.getFont();
+
+        var labelRotate = labelModel.get('rotate')
+            ? (dx < 0 ? -midAngle + Math.PI : -midAngle) : 0;
+        var text = seriesModel.getFormattedLabel(idx, 'normal')
+                    || data.getName(idx);
+        var textRect = getBoundingRect(
+            text, font, textAlign, 'top'
+        );
+        hasLabelRotate = !!labelRotate;
+        layout.label = {
+            x: textX,
+            y: textY,
+            position: labelPosition,
+            height: textRect.height,
+            len: labelLineLen,
+            len2: labelLineLen2,
+            linePoints: linePoints,
+            textAlign: textAlign,
+            verticalAlign: 'middle',
+            rotation: labelRotate,
+            inside: isLabelInside
+        };
+
+        // Not layout the inside label
+        if (!isLabelInside) {
+            labelLayoutList.push(layout.label);
+        }
+    });
+    if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {
+        avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight);
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var PI2$4 = Math.PI * 2;
+var RADIAN = Math.PI / 180;
+
+var pieLayout = function (seriesType, ecModel, api, payload) {
+    ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+        var data = seriesModel.getData();
+        var valueDim = data.mapDimension('value');
+
+        var center = seriesModel.get('center');
+        var radius = seriesModel.get('radius');
+
+        if (!isArray(radius)) {
+            radius = [0, radius];
+        }
+        if (!isArray(center)) {
+            center = [center, center];
+        }
+
+        var width = api.getWidth();
+        var height = api.getHeight();
+        var size = Math.min(width, height);
+        var cx = parsePercent$1(center[0], width);
+        var cy = parsePercent$1(center[1], height);
+        var r0 = parsePercent$1(radius[0], size / 2);
+        var r = parsePercent$1(radius[1], size / 2);
+
+        var startAngle = -seriesModel.get('startAngle') * RADIAN;
+
+        var minAngle = seriesModel.get('minAngle') * RADIAN;
+
+        var validDataCount = 0;
+        data.each(valueDim, function (value) {
+            !isNaN(value) && validDataCount++;
+        });
+
+        var sum = data.getSum(valueDim);
+        // Sum may be 0
+        var unitRadian = Math.PI / (sum || validDataCount) * 2;
+
+        var clockwise = seriesModel.get('clockwise');
+
+        var roseType = seriesModel.get('roseType');
+        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');
+
+        // [0...max]
+        var extent = data.getDataExtent(valueDim);
+        extent[0] = 0;
+
+        // In the case some sector angle is smaller than minAngle
+        var restAngle = PI2$4;
+        var valueSumLargerThanMinAngle = 0;
+
+        var currentAngle = startAngle;
+        var dir = clockwise ? 1 : -1;
+
+        data.each(valueDim, function (value, idx) {
+            var angle;
+            if (isNaN(value)) {
+                data.setItemLayout(idx, {
+                    angle: NaN,
+                    startAngle: NaN,
+                    endAngle: NaN,
+                    clockwise: clockwise,
+                    cx: cx,
+                    cy: cy,
+                    r0: r0,
+                    r: roseType
+                        ? NaN
+                        : r
+                });
+                return;
+            }
+
+            // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?
+            if (roseType !== 'area') {
+                angle = (sum === 0 && stillShowZeroSum)
+                    ? unitRadian : (value * unitRadian);
+            }
+            else {
+                angle = PI2$4 / validDataCount;
+            }
+
+            if (angle < minAngle) {
+                angle = minAngle;
+                restAngle -= minAngle;
+            }
+            else {
+                valueSumLargerThanMinAngle += value;
+            }
+
+            var endAngle = currentAngle + dir * angle;
+            data.setItemLayout(idx, {
+                angle: angle,
+                startAngle: currentAngle,
+                endAngle: endAngle,
+                clockwise: clockwise,
+                cx: cx,
+                cy: cy,
+                r0: r0,
+                r: roseType
+                    ? linearMap(value, extent, [r0, r])
+                    : r
+            });
+
+            currentAngle = endAngle;
+        });
+
+        // Some sector is constrained by minAngle
+        // Rest sectors needs recalculate angle
+        if (restAngle < PI2$4 && validDataCount) {
+            // Average the angle if rest angle is not enough after all angles is
+            // Constrained by minAngle
+            if (restAngle <= 1e-3) {
+                var angle = PI2$4 / validDataCount;
+                data.each(valueDim, function (value, idx) {
+                    if (!isNaN(value)) {
+                        var layout = data.getItemLayout(idx);
+                        layout.angle = angle;
+                        layout.startAngle = startAngle + dir * idx * angle;
+                        layout.endAngle = startAngle + dir * (idx + 1) * angle;
+                    }
+                });
+            }
+            else {
+                unitRadian = restAngle / valueSumLargerThanMinAngle;
+                currentAngle = startAngle;
+                data.each(valueDim, function (value, idx) {
+                    if (!isNaN(value)) {
+                        var layout = data.getItemLayout(idx);
+                        var angle = layout.angle === minAngle
+                            ? minAngle : value * unitRadian;
+                        layout.startAngle = currentAngle;
+                        layout.endAngle = currentAngle + dir * angle;
+                        currentAngle += dir * angle;
+                    }
+                });
+            }
+        }
+
+        labelLayout(seriesModel, r, width, height);
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var dataFilter = function (seriesType) {
+    return {
+        seriesType: seriesType,
+        reset: function (seriesModel, ecModel) {
+            var legendModels = ecModel.findComponents({
+                mainType: 'legend'
+            });
+            if (!legendModels || !legendModels.length) {
+                return;
+            }
+            var data = seriesModel.getData();
+            data.filterSelf(function (idx) {
+                var name = data.getName(idx);
+                // If in any legend component the status is not selected.
+                for (var i = 0; i < legendModels.length; i++) {
+                    if (!legendModels[i].isSelected(name)) {
+                        return false;
+                    }
+                }
+                return true;
+            });
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+createDataSelectAction('pie', [{
+    type: 'pieToggleSelect',
+    event: 'pieselectchanged',
+    method: 'toggleSelected'
+}, {
+    type: 'pieSelect',
+    event: 'pieselected',
+    method: 'select'
+}, {
+    type: 'pieUnSelect',
+    event: 'pieunselected',
+    method: 'unSelect'
+}]);
+
+registerVisual(dataColor('pie'));
+registerLayout(curry(pieLayout, 'pie'));
+registerProcessor(dataFilter('pie'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.scatter',
+
+    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],
+
+    getInitialData: function (option, ecModel) {
+        return createListFromArray(this.getSource(), this);
+    },
+
+    brushSelector: 'point',
+
+    getProgressive: function () {
+        var progressive = this.option.progressive;
+        if (progressive == null) {
+            // PENDING
+            return this.option.large ? 5e3 : this.get('progressive');
+        }
+        return progressive;
+    },
+
+    getProgressiveThreshold: function () {
+        var progressiveThreshold = this.option.progressiveThreshold;
+        if (progressiveThreshold == null) {
+            // PENDING
+            return this.option.large ? 1e4 : this.get('progressiveThreshold');
+        }
+        return progressiveThreshold;
+    },
+
+    defaultOption: {
+        coordinateSystem: 'cartesian2d',
+        zlevel: 0,
+        z: 2,
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+        // Cartesian coordinate system
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // Polar coordinate system
+        // polarIndex: 0,
+
+        // Geo coordinate system
+        // geoIndex: 0,
+
+        // symbol: null,        // 图形类型
+        symbolSize: 10,          // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2
+        // symbolRotate: null,  // 图形旋转控制
+
+        large: false,
+        // Available when large is true
+        largeThreshold: 2000,
+        // cursor: null,
+
+        // label: {
+            // show: false
+            // distance: 5,
+            // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+            // position: 默认自适应,水平布局为'top',垂直布局为'right',可选为
+            //           'inside'|'left'|'right'|'top'|'bottom'
+            // 默认使用全局文本样式,详见TEXTSTYLE
+        // },
+        itemStyle: {
+            opacity: 0.8
+            // color: 各异
+        }
+
+        // progressive: null
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO Batch by color
+
+var BOOST_SIZE_THRESHOLD = 4;
+
+var LargeSymbolPath = extendShape({
+
+    shape: {
+        points: null
+    },
+
+    symbolProxy: null,
+
+    buildPath: function (path, shape) {
+        var points = shape.points;
+        var size = shape.size;
+
+        var symbolProxy = this.symbolProxy;
+        var symbolProxyShape = symbolProxy.shape;
+        var ctx = path.getContext ? path.getContext() : path;
+        var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;
+
+        // Do draw in afterBrush.
+        if (canBoost) {
+            return;
+        }
+
+        for (var i = 0; i < points.length;) {
+            var x = points[i++];
+            var y = points[i++];
+
+            if (isNaN(x) || isNaN(y)) {
+                continue;
+            }
+
+            symbolProxyShape.x = x - size[0] / 2;
+            symbolProxyShape.y = y - size[1] / 2;
+            symbolProxyShape.width = size[0];
+            symbolProxyShape.height = size[1];
+
+            symbolProxy.buildPath(path, symbolProxyShape, true);
+        }
+    },
+
+    afterBrush: function (ctx) {
+        var shape = this.shape;
+        var points = shape.points;
+        var size = shape.size;
+        var canBoost = size[0] < BOOST_SIZE_THRESHOLD;
+
+        if (!canBoost) {
+            return;
+        }
+
+        this.setTransform(ctx);
+        // PENDING If style or other canvas status changed?
+        for (var i = 0; i < points.length;) {
+            var x = points[i++];
+            var y = points[i++];
+            if (isNaN(x) || isNaN(y)) {
+                continue;
+            }
+            // fillRect is faster than building a rect path and draw.
+            // And it support light globalCompositeOperation.
+            ctx.fillRect(
+                x - size[0] / 2, y - size[1] / 2,
+                size[0], size[1]
+            );
+        }
+
+        this.restoreTransform(ctx);
+    },
+
+    findDataIndex: function (x, y) {
+        // TODO ???
+        // Consider transform
+
+        var shape = this.shape;
+        var points = shape.points;
+        var size = shape.size;
+
+        var w = Math.max(size[0], 4);
+        var h = Math.max(size[1], 4);
+
+        // Not consider transform
+        // Treat each element as a rect
+        // top down traverse
+        for (var idx = points.length / 2 - 1; idx >= 0; idx--) {
+            var i = idx * 2;
+            var x0 = points[i] - w / 2;
+            var y0 = points[i + 1] - h / 2;
+            if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {
+                return idx;
+            }
+        }
+
+        return -1;
+    }
+});
+
+function LargeSymbolDraw() {
+    this.group = new Group();
+}
+
+var largeSymbolProto = LargeSymbolDraw.prototype;
+
+largeSymbolProto.isPersistent = function () {
+    return !this._incremental;
+};
+
+/**
+ * Update symbols draw by new data
+ * @param {module:echarts/data/List} data
+ */
+largeSymbolProto.updateData = function (data) {
+    this.group.removeAll();
+    var symbolEl = new LargeSymbolPath({
+        rectHover: true,
+        cursor: 'default'
+    });
+
+    symbolEl.setShape({
+        points: data.getLayout('symbolPoints')
+    });
+    this._setCommon(symbolEl, data);
+    this.group.add(symbolEl);
+
+    this._incremental = null;
+};
+
+largeSymbolProto.updateLayout = function (data) {
+    if (this._incremental) {
+        return;
+    }
+
+    var points = data.getLayout('symbolPoints');
+    this.group.eachChild(function (child) {
+        if (child.startIndex != null) {
+            var len = (child.endIndex - child.startIndex) * 2;
+            var byteOffset = child.startIndex * 4 * 2;
+            points = new Float32Array(points.buffer, byteOffset, len);
+        }
+        child.setShape('points', points);
+    });
+};
+
+largeSymbolProto.incrementalPrepareUpdate = function (data) {
+    this.group.removeAll();
+
+    this._clearIncremental();
+    // Only use incremental displayables when data amount is larger than 2 million.
+    // PENDING Incremental data?
+    if (data.count() > 2e6) {
+        if (!this._incremental) {
+            this._incremental = new IncrementalDisplayble({
+                silent: true
+            });
+        }
+        this.group.add(this._incremental);
+    }
+    else {
+        this._incremental = null;
+    }
+};
+
+largeSymbolProto.incrementalUpdate = function (taskParams, data) {
+    var symbolEl;
+    if (this._incremental) {
+        symbolEl = new LargeSymbolPath();
+        this._incremental.addDisplayable(symbolEl, true);
+    }
+    else {
+        symbolEl = new LargeSymbolPath({
+            rectHover: true,
+            cursor: 'default',
+            startIndex: taskParams.start,
+            endIndex: taskParams.end
+        });
+        symbolEl.incremental = true;
+        this.group.add(symbolEl);
+    }
+
+    symbolEl.setShape({
+        points: data.getLayout('symbolPoints')
+    });
+    this._setCommon(symbolEl, data, !!this._incremental);
+};
+
+largeSymbolProto._setCommon = function (symbolEl, data, isIncremental) {
+    var hostModel = data.hostModel;
+
+    // TODO
+    // if (data.hasItemVisual.symbolSize) {
+    //     // TODO typed array?
+    //     symbolEl.setShape('sizes', data.mapArray(
+    //         function (idx) {
+    //             var size = data.getItemVisual(idx, 'symbolSize');
+    //             return (size instanceof Array) ? size : [size, size];
+    //         }
+    //     ));
+    // }
+    // else {
+    var size = data.getVisual('symbolSize');
+    symbolEl.setShape('size', (size instanceof Array) ? size : [size, size]);
+    // }
+
+    // Create symbolProxy to build path for each data
+    symbolEl.symbolProxy = createSymbol(
+        data.getVisual('symbol'), 0, 0, 0, 0
+    );
+    // Use symbolProxy setColor method
+    symbolEl.setColor = symbolEl.symbolProxy.setColor;
+
+    var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;
+    symbolEl.useStyle(
+        // Draw shadow when doing fillRect is extremely slow.
+        hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color'])
+    );
+
+    var visualColor = data.getVisual('color');
+    if (visualColor) {
+        symbolEl.setColor(visualColor);
+    }
+
+    if (!isIncremental) {
+        // Enable tooltip
+        // PENDING May have performance issue when path is extremely large
+        symbolEl.seriesIndex = hostModel.seriesIndex;
+        symbolEl.on('mousemove', function (e) {
+            symbolEl.dataIndex = null;
+            var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);
+            if (dataIndex >= 0) {
+                // Provide dataIndex for tooltip
+                symbolEl.dataIndex = dataIndex + (symbolEl.startIndex || 0);
+            }
+        });
+    }
+};
+
+largeSymbolProto.remove = function () {
+    this._clearIncremental();
+    this._incremental = null;
+    this.group.removeAll();
+};
+
+largeSymbolProto._clearIncremental = function () {
+    var incremental = this._incremental;
+    if (incremental) {
+        incremental.clearDisplaybles();
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendChartView({
+
+    type: 'scatter',
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+
+        var symbolDraw = this._updateSymbolDraw(data, seriesModel);
+        symbolDraw.updateData(data);
+
+        this._finished = true;
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        var symbolDraw = this._updateSymbolDraw(data, seriesModel);
+
+        symbolDraw.incrementalPrepareUpdate(data);
+
+        this._finished = false;
+    },
+
+    incrementalRender: function (taskParams, seriesModel, ecModel) {
+        this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData());
+
+        this._finished = taskParams.end === seriesModel.getData().count();
+    },
+
+    updateTransform: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        // Must mark group dirty and make sure the incremental layer will be cleared
+        // PENDING
+        this.group.dirty();
+
+        if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) {
+            return {
+                update: true
+            };
+        }
+        else {
+            var res = pointsLayout().reset(seriesModel);
+            if (res.progress) {
+                res.progress({ start: 0, end: data.count() }, data);
+            }
+
+            this._symbolDraw.updateLayout(data);
+        }
+    },
+
+    _updateSymbolDraw: function (data, seriesModel) {
+        var symbolDraw = this._symbolDraw;
+        var pipelineContext = seriesModel.pipelineContext;
+        var isLargeDraw = pipelineContext.large;
+
+        if (!symbolDraw || isLargeDraw !== this._isLargeDraw) {
+            symbolDraw && symbolDraw.remove();
+            symbolDraw = this._symbolDraw = isLargeDraw
+                ? new LargeSymbolDraw()
+                : new SymbolDraw();
+            this._isLargeDraw = isLargeDraw;
+            this.group.removeAll();
+        }
+
+        this.group.add(symbolDraw.group);
+
+        return symbolDraw;
+    },
+
+    remove: function (ecModel, api) {
+        this._symbolDraw && this._symbolDraw.remove(true);
+        this._symbolDraw = null;
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// import * as zrUtil from 'zrender/src/core/util';
+
+// In case developer forget to include grid component
+registerVisual(visualSymbol('scatter', 'circle'));
+registerLayout(pointsLayout('scatter'));
+
+// echarts.registerProcessor(function (ecModel, api) {
+//     ecModel.eachSeriesByType('scatter', function (seriesModel) {
+//         var data = seriesModel.getData();
+//         var coordSys = seriesModel.coordinateSystem;
+//         if (coordSys.type !== 'geo') {
+//             return;
+//         }
+//         var startPt = coordSys.pointToData([0, 0]);
+//         var endPt = coordSys.pointToData([api.getWidth(), api.getHeight()]);
+
+//         var dims = zrUtil.map(coordSys.dimensions, function (dim) {
+//             return data.mapDimension(dim);
+//         });
+//         var range = {};
+//         range[dims[0]] = [Math.min(startPt[0], endPt[0]), Math.max(startPt[0], endPt[0])];
+//         range[dims[1]] = [Math.min(startPt[1], endPt[1]), Math.max(startPt[1], endPt[1])];
+
+//         data.selectRange(range);
+//     });
+// });
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function IndicatorAxis(dim, scale, radiusExtent) {
+    Axis.call(this, dim, scale, radiusExtent);
+
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = 'value';
+
+    this.angle = 0;
+
+    /**
+     * Indicator name
+     * @type {string}
+     */
+    this.name = '';
+    /**
+     * @type {module:echarts/model/Model}
+     */
+    this.model;
+}
+
+inherits(IndicatorAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO clockwise
+
+function Radar(radarModel, ecModel, api) {
+
+    this._model = radarModel;
+    /**
+     * Radar dimensions
+     * @type {Array.<string>}
+     */
+    this.dimensions = [];
+
+    this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {
+        var dim = 'indicator_' + idx;
+        var indicatorAxis = new IndicatorAxis(dim, new IntervalScale());
+        indicatorAxis.name = indicatorModel.get('name');
+        // Inject model and axis
+        indicatorAxis.model = indicatorModel;
+        indicatorModel.axis = indicatorAxis;
+        this.dimensions.push(dim);
+        return indicatorAxis;
+    }, this);
+
+    this.resize(radarModel, api);
+
+    /**
+     * @type {number}
+     * @readOnly
+     */
+    this.cx;
+    /**
+     * @type {number}
+     * @readOnly
+     */
+    this.cy;
+    /**
+     * @type {number}
+     * @readOnly
+     */
+    this.r;
+    /**
+     * @type {number}
+     * @readOnly
+     */
+    this.startAngle;
+}
+
+Radar.prototype.getIndicatorAxes = function () {
+    return this._indicatorAxes;
+};
+
+Radar.prototype.dataToPoint = function (value, indicatorIndex) {
+    var indicatorAxis = this._indicatorAxes[indicatorIndex];
+
+    return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);
+};
+
+Radar.prototype.coordToPoint = function (coord, indicatorIndex) {
+    var indicatorAxis = this._indicatorAxes[indicatorIndex];
+    var angle = indicatorAxis.angle;
+    var x = this.cx + coord * Math.cos(angle);
+    var y = this.cy - coord * Math.sin(angle);
+    return [x, y];
+};
+
+Radar.prototype.pointToData = function (pt) {
+    var dx = pt[0] - this.cx;
+    var dy = pt[1] - this.cy;
+    var radius = Math.sqrt(dx * dx + dy * dy);
+    dx /= radius;
+    dy /= radius;
+
+    var radian = Math.atan2(-dy, dx);
+
+    // Find the closest angle
+    // FIXME index can calculated directly
+    var minRadianDiff = Infinity;
+    var closestAxis;
+    var closestAxisIdx = -1;
+    for (var i = 0; i < this._indicatorAxes.length; i++) {
+        var indicatorAxis = this._indicatorAxes[i];
+        var diff = Math.abs(radian - indicatorAxis.angle);
+        if (diff < minRadianDiff) {
+            closestAxis = indicatorAxis;
+            closestAxisIdx = i;
+            minRadianDiff = diff;
+        }
+    }
+
+    return [closestAxisIdx, +(closestAxis && closestAxis.coodToData(radius))];
+};
+
+Radar.prototype.resize = function (radarModel, api) {
+    var center = radarModel.get('center');
+    var viewWidth = api.getWidth();
+    var viewHeight = api.getHeight();
+    var viewSize = Math.min(viewWidth, viewHeight) / 2;
+    this.cx = parsePercent$1(center[0], viewWidth);
+    this.cy = parsePercent$1(center[1], viewHeight);
+
+    this.startAngle = radarModel.get('startAngle') * Math.PI / 180;
+
+    this.r = parsePercent$1(radarModel.get('radius'), viewSize);
+
+    each$1(this._indicatorAxes, function (indicatorAxis, idx) {
+        indicatorAxis.setExtent(0, this.r);
+        var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length);
+        // Normalize to [-PI, PI]
+        angle = Math.atan2(Math.sin(angle), Math.cos(angle));
+        indicatorAxis.angle = angle;
+    }, this);
+};
+
+Radar.prototype.update = function (ecModel, api) {
+    var indicatorAxes = this._indicatorAxes;
+    var radarModel = this._model;
+    each$1(indicatorAxes, function (indicatorAxis) {
+        indicatorAxis.scale.setExtent(Infinity, -Infinity);
+    });
+    ecModel.eachSeriesByType('radar', function (radarSeries, idx) {
+        if (radarSeries.get('coordinateSystem') !== 'radar'
+            || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel
+        ) {
+            return;
+        }
+        var data = radarSeries.getData();
+        each$1(indicatorAxes, function (indicatorAxis) {
+            indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));
+        });
+    }, this);
+
+    var splitNumber = radarModel.get('splitNumber');
+
+    function increaseInterval(interval) {
+        var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10));
+        // Increase interval
+        var f = interval / exp10;
+        if (f === 2) {
+            f = 5;
+        }
+        else { // f is 2 or 5
+            f *= 2;
+        }
+        return f * exp10;
+    }
+    // Force all the axis fixing the maxSplitNumber.
+    each$1(indicatorAxes, function (indicatorAxis, idx) {
+        var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model);
+        niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);
+
+        var axisModel = indicatorAxis.model;
+        var scale = indicatorAxis.scale;
+        var fixedMin = axisModel.getMin();
+        var fixedMax = axisModel.getMax();
+        var interval = scale.getInterval();
+
+        if (fixedMin != null && fixedMax != null) {
+            // User set min, max, divide to get new interval
+            scale.setExtent(+fixedMin, +fixedMax);
+            scale.setInterval(
+                (fixedMax - fixedMin) / splitNumber
+            );
+        }
+        else if (fixedMin != null) {
+            var max;
+            // User set min, expand extent on the other side
+            do {
+                max = fixedMin + interval * splitNumber;
+                scale.setExtent(+fixedMin, max);
+                // Interval must been set after extent
+                // FIXME
+                scale.setInterval(interval);
+
+                interval = increaseInterval(interval);
+            } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));
+        }
+        else if (fixedMax != null) {
+            var min;
+            // User set min, expand extent on the other side
+            do {
+                min = fixedMax - interval * splitNumber;
+                scale.setExtent(min, +fixedMax);
+                scale.setInterval(interval);
+                interval = increaseInterval(interval);
+            } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0]));
+        }
+        else {
+            var nicedSplitNumber = scale.getTicks().length - 1;
+            if (nicedSplitNumber > splitNumber) {
+                interval = increaseInterval(interval);
+            }
+            // PENDING
+            var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval;
+            var halfSplitNumber = Math.round(splitNumber / 2);
+            scale.setExtent(
+                round$1(center - halfSplitNumber * interval),
+                round$1(center + (splitNumber - halfSplitNumber) * interval)
+            );
+            scale.setInterval(interval);
+        }
+    });
+};
+
+/**
+ * Radar dimensions is based on the data
+ * @type {Array}
+ */
+Radar.dimensions = [];
+
+Radar.create = function (ecModel, api) {
+    var radarList = [];
+    ecModel.eachComponent('radar', function (radarModel) {
+        var radar = new Radar(radarModel, ecModel, api);
+        radarList.push(radar);
+        radarModel.coordinateSystem = radar;
+    });
+    ecModel.eachSeriesByType('radar', function (radarSeries) {
+        if (radarSeries.get('coordinateSystem') === 'radar') {
+            // Inject coordinate system
+            radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];
+        }
+    });
+    return radarList;
+};
+
+CoordinateSystemManager.register('radar', Radar);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var valueAxisDefault = axisDefault.valueAxis;
+
+function defaultsShow(opt, show) {
+    return defaults({
+        show: show
+    }, opt);
+}
+
+var RadarModel = extendComponentModel({
+
+    type: 'radar',
+
+    optionUpdated: function () {
+        var boundaryGap = this.get('boundaryGap');
+        var splitNumber = this.get('splitNumber');
+        var scale = this.get('scale');
+        var axisLine = this.get('axisLine');
+        var axisTick = this.get('axisTick');
+        var axisLabel = this.get('axisLabel');
+        var nameTextStyle = this.get('name');
+        var showName = this.get('name.show');
+        var nameFormatter = this.get('name.formatter');
+        var nameGap = this.get('nameGap');
+        var triggerEvent = this.get('triggerEvent');
+
+        var indicatorModels = map(this.get('indicator') || [], function (indicatorOpt) {
+            // PENDING
+            if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {
+                indicatorOpt.min = 0;
+            }
+            else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {
+                indicatorOpt.max = 0;
+            }
+            var iNameTextStyle = nameTextStyle;
+            if(indicatorOpt.color != null) {
+                iNameTextStyle = defaults({color: indicatorOpt.color}, nameTextStyle);
+            }
+            // Use same configuration
+            indicatorOpt = merge(clone(indicatorOpt), {
+                boundaryGap: boundaryGap,
+                splitNumber: splitNumber,
+                scale: scale,
+                axisLine: axisLine,
+                axisTick: axisTick,
+                axisLabel: axisLabel,
+                // Competitable with 2 and use text
+                name: indicatorOpt.text,
+                nameLocation: 'end',
+                nameGap: nameGap,
+                // min: 0,
+                nameTextStyle: iNameTextStyle,
+                triggerEvent: triggerEvent
+            }, false);
+            if (!showName) {
+                indicatorOpt.name = '';
+            }
+            if (typeof nameFormatter === 'string') {
+                var indName = indicatorOpt.name;
+                indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');
+            }
+            else if (typeof nameFormatter === 'function') {
+                indicatorOpt.name = nameFormatter(
+                    indicatorOpt.name, indicatorOpt
+                );
+            }
+            var model = extend(
+                new Model(indicatorOpt, null, this.ecModel),
+                axisModelCommonMixin
+            );
+
+            // For triggerEvent.
+            model.mainType = 'radar';
+            model.componentIndex = this.componentIndex;
+
+            return model;
+        }, this);
+
+        this.getIndicatorModels = function () {
+            return indicatorModels;
+        };
+    },
+
+    defaultOption: {
+
+        zlevel: 0,
+
+        z: 0,
+
+        center: ['50%', '50%'],
+
+        radius: '75%',
+
+        startAngle: 90,
+
+        name: {
+            show: true
+            // formatter: null
+            // textStyle: {}
+        },
+
+        boundaryGap: [0, 0],
+
+        splitNumber: 5,
+
+        nameGap: 15,
+
+        scale: false,
+
+        // Polygon or circle
+        shape: 'polygon',
+
+        axisLine: merge(
+            {
+                lineStyle: {
+                    color: '#bbb'
+                }
+            },
+            valueAxisDefault.axisLine
+        ),
+        axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),
+        axisTick: defaultsShow(valueAxisDefault.axisTick, false),
+        splitLine: defaultsShow(valueAxisDefault.splitLine, true),
+        splitArea: defaultsShow(valueAxisDefault.splitArea, true),
+
+        // {text, min, max}
+        indicator: []
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var axisBuilderAttrs$1 = [
+    'axisLine', 'axisTickLabel', 'axisName'
+];
+
+extendComponentView({
+
+    type: 'radar',
+
+    render: function (radarModel, ecModel, api) {
+        var group = this.group;
+        group.removeAll();
+
+        this._buildAxes(radarModel);
+        this._buildSplitLineAndArea(radarModel);
+    },
+
+    _buildAxes: function (radarModel) {
+        var radar = radarModel.coordinateSystem;
+        var indicatorAxes = radar.getIndicatorAxes();
+        var axisBuilders = map(indicatorAxes, function (indicatorAxis) {
+            var axisBuilder = new AxisBuilder(indicatorAxis.model, {
+                position: [radar.cx, radar.cy],
+                rotation: indicatorAxis.angle,
+                labelDirection: -1,
+                tickDirection: -1,
+                nameDirection: 1
+            });
+            return axisBuilder;
+        });
+
+        each$1(axisBuilders, function (axisBuilder) {
+            each$1(axisBuilderAttrs$1, axisBuilder.add, axisBuilder);
+            this.group.add(axisBuilder.getGroup());
+        }, this);
+    },
+
+    _buildSplitLineAndArea: function (radarModel) {
+        var radar = radarModel.coordinateSystem;
+        var indicatorAxes = radar.getIndicatorAxes();
+        if (!indicatorAxes.length) {
+            return;
+        }
+        var shape = radarModel.get('shape');
+        var splitLineModel = radarModel.getModel('splitLine');
+        var splitAreaModel = radarModel.getModel('splitArea');
+        var lineStyleModel = splitLineModel.getModel('lineStyle');
+        var areaStyleModel = splitAreaModel.getModel('areaStyle');
+
+        var showSplitLine = splitLineModel.get('show');
+        var showSplitArea = splitAreaModel.get('show');
+        var splitLineColors = lineStyleModel.get('color');
+        var splitAreaColors = areaStyleModel.get('color');
+
+        splitLineColors = isArray(splitLineColors) ? splitLineColors : [splitLineColors];
+        splitAreaColors = isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors];
+
+        var splitLines = [];
+        var splitAreas = [];
+
+        function getColorIndex(areaOrLine, areaOrLineColorList, idx) {
+            var colorIndex = idx % areaOrLineColorList.length;
+            areaOrLine[colorIndex] = areaOrLine[colorIndex] || [];
+            return colorIndex;
+        }
+
+        if (shape === 'circle') {
+            var ticksRadius = indicatorAxes[0].getTicksCoords();
+            var cx = radar.cx;
+            var cy = radar.cy;
+            for (var i = 0; i < ticksRadius.length; i++) {
+                if (showSplitLine) {
+                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);
+                    splitLines[colorIndex].push(new Circle({
+                        shape: {
+                            cx: cx,
+                            cy: cy,
+                            r: ticksRadius[i].coord
+                        }
+                    }));
+                }
+                if (showSplitArea && i < ticksRadius.length - 1) {
+                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i);
+                    splitAreas[colorIndex].push(new Ring({
+                        shape: {
+                            cx: cx,
+                            cy: cy,
+                            r0: ticksRadius[i].coord,
+                            r: ticksRadius[i + 1].coord
+                        }
+                    }));
+                }
+            }
+        }
+        // Polyyon
+        else {
+            var realSplitNumber;
+            var axesTicksPoints = map(indicatorAxes, function (indicatorAxis, idx) {
+                var ticksCoords = indicatorAxis.getTicksCoords();
+                realSplitNumber = realSplitNumber == null
+                    ? ticksCoords.length - 1
+                    : Math.min(ticksCoords.length - 1, realSplitNumber);
+                return map(ticksCoords, function (tickCoord) {
+                    return radar.coordToPoint(tickCoord.coord, idx);
+                });
+            });
+
+            var prevPoints = [];
+            for (var i = 0; i <= realSplitNumber; i++) {
+                var points = [];
+                for (var j = 0; j < indicatorAxes.length; j++) {
+                    points.push(axesTicksPoints[j][i]);
+                }
+                // Close
+                if (points[0]) {
+                    points.push(points[0].slice());
+                }
+                else {
+                    if (__DEV__) {
+                        console.error('Can\'t draw value axis ' + i);
+                    }
+                }
+
+                if (showSplitLine) {
+                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);
+                    splitLines[colorIndex].push(new Polyline({
+                        shape: {
+                            points: points
+                        }
+                    }));
+                }
+                if (showSplitArea && prevPoints) {
+                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1);
+                    splitAreas[colorIndex].push(new Polygon({
+                        shape: {
+                            points: points.concat(prevPoints)
+                        }
+                    }));
+                }
+                prevPoints = points.slice().reverse();
+            }
+        }
+
+        var lineStyle = lineStyleModel.getLineStyle();
+        var areaStyle = areaStyleModel.getAreaStyle();
+        // Add splitArea before splitLine
+        each$1(splitAreas, function (splitAreas, idx) {
+            this.group.add(mergePath(
+                splitAreas, {
+                    style: defaults({
+                        stroke: 'none',
+                        fill: splitAreaColors[idx % splitAreaColors.length]
+                    }, areaStyle),
+                    silent: true
+                }
+            ));
+        }, this);
+
+        each$1(splitLines, function (splitLines, idx) {
+            this.group.add(mergePath(
+                splitLines, {
+                    style: defaults({
+                        fill: 'none',
+                        stroke: splitLineColors[idx % splitLineColors.length]
+                    }, lineStyle),
+                    silent: true
+                }
+            ));
+        }, this);
+
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var RadarSeries = SeriesModel.extend({
+
+    type: 'series.radar',
+
+    dependencies: ['radar'],
+
+
+    // Overwrite
+    init: function (option) {
+        RadarSeries.superApply(this, 'init', arguments);
+
+        // Enable legend selection for each data item
+        // Use a function instead of direct access because data reference may changed
+        this.legendDataProvider = function () {
+            return this.getRawData();
+        };
+    },
+
+    getInitialData: function (option, ecModel) {
+        return createListSimply(this, {
+            generateCoord: 'indicator_',
+            generateCoordCount: Infinity
+        });
+    },
+
+    formatTooltip: function (dataIndex) {
+        var data = this.getData();
+        var coordSys = this.coordinateSystem;
+        var indicatorAxes = coordSys.getIndicatorAxes();
+        var name = this.getData().getName(dataIndex);
+        return encodeHTML(name === '' ? this.name : name) + '<br/>'
+            + map(indicatorAxes, function (axis, idx) {
+                var val = data.get(data.mapDimension(axis.dim), dataIndex);
+                return encodeHTML(axis.name + ' : ' + val);
+            }).join('<br />');
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        coordinateSystem: 'radar',
+        legendHoverLink: true,
+        radarIndex: 0,
+        lineStyle: {
+            width: 2,
+            type: 'solid'
+        },
+        label: {
+            position: 'top'
+        },
+        // areaStyle: {
+        // },
+        // itemStyle: {}
+        symbol: 'emptyCircle',
+        symbolSize: 4
+        // symbolRotate: null
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function normalizeSymbolSize(symbolSize) {
+    if (!isArray(symbolSize)) {
+        symbolSize = [+symbolSize, +symbolSize];
+    }
+    return symbolSize;
+}
+
+extendChartView({
+
+    type: 'radar',
+
+    render: function (seriesModel, ecModel, api) {
+        var polar = seriesModel.coordinateSystem;
+        var group = this.group;
+
+        var data = seriesModel.getData();
+        var oldData = this._data;
+
+        function createSymbol$$1(data, idx) {
+            var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';
+            var color = data.getItemVisual(idx, 'color');
+            if (symbolType === 'none') {
+                return;
+            }
+            var symbolSize = normalizeSymbolSize(
+                data.getItemVisual(idx, 'symbolSize')
+            );
+            var symbolPath = createSymbol(
+                symbolType, -1, -1, 2, 2, color
+            );
+            symbolPath.attr({
+                style: {
+                    strokeNoScale: true
+                },
+                z2: 100,
+                scale: [symbolSize[0] / 2, symbolSize[1] / 2]
+            });
+            return symbolPath;
+        }
+
+        function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) {
+            // Simply rerender all
+            symbolGroup.removeAll();
+            for (var i = 0; i < newPoints.length - 1; i++) {
+                var symbolPath = createSymbol$$1(data, idx);
+                if (symbolPath) {
+                    symbolPath.__dimIdx = i;
+                    if (oldPoints[i]) {
+                        symbolPath.attr('position', oldPoints[i]);
+                        graphic[isInit ? 'initProps' : 'updateProps'](
+                            symbolPath, {
+                                position: newPoints[i]
+                            }, seriesModel, idx
+                        );
+                    }
+                    else {
+                        symbolPath.attr('position', newPoints[i]);
+                    }
+                    symbolGroup.add(symbolPath);
+                }
+            }
+        }
+
+        function getInitialPoints(points) {
+            return map(points, function (pt) {
+                return [polar.cx, polar.cy];
+            });
+        }
+        data.diff(oldData)
+            .add(function (idx) {
+                var points = data.getItemLayout(idx);
+                if (!points) {
+                    return;
+                }
+                var polygon = new Polygon();
+                var polyline = new Polyline();
+                var target = {
+                    shape: {
+                        points: points
+                    }
+                };
+                polygon.shape.points = getInitialPoints(points);
+                polyline.shape.points = getInitialPoints(points);
+                initProps(polygon, target, seriesModel, idx);
+                initProps(polyline, target, seriesModel, idx);
+
+                var itemGroup = new Group();
+                var symbolGroup = new Group();
+                itemGroup.add(polyline);
+                itemGroup.add(polygon);
+                itemGroup.add(symbolGroup);
+
+                updateSymbols(
+                    polyline.shape.points, points, symbolGroup, data, idx, true
+                );
+
+                data.setItemGraphicEl(idx, itemGroup);
+            })
+            .update(function (newIdx, oldIdx) {
+                var itemGroup = oldData.getItemGraphicEl(oldIdx);
+                var polyline = itemGroup.childAt(0);
+                var polygon = itemGroup.childAt(1);
+                var symbolGroup = itemGroup.childAt(2);
+                var target = {
+                    shape: {
+                        points: data.getItemLayout(newIdx)
+                    }
+                };
+                if (!target.shape.points) {
+                    return;
+                }
+                updateSymbols(
+                    polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false
+                );
+
+                updateProps(polyline, target, seriesModel);
+                updateProps(polygon, target, seriesModel);
+
+                data.setItemGraphicEl(newIdx, itemGroup);
+            })
+            .remove(function (idx) {
+                group.remove(oldData.getItemGraphicEl(idx));
+            })
+            .execute();
+
+        data.eachItemGraphicEl(function (itemGroup, idx) {
+            var itemModel = data.getItemModel(idx);
+            var polyline = itemGroup.childAt(0);
+            var polygon = itemGroup.childAt(1);
+            var symbolGroup = itemGroup.childAt(2);
+            var color = data.getItemVisual(idx, 'color');
+
+            group.add(itemGroup);
+
+            polyline.useStyle(
+                defaults(
+                    itemModel.getModel('lineStyle').getLineStyle(),
+                    {
+                        fill: 'none',
+                        stroke: color
+                    }
+                )
+            );
+            polyline.hoverStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();
+
+            var areaStyleModel = itemModel.getModel('areaStyle');
+            var hoverAreaStyleModel = itemModel.getModel('emphasis.areaStyle');
+            var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();
+            var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty();
+
+            hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore;
+            polygon.ignore = polygonIgnore;
+
+            polygon.useStyle(
+                defaults(
+                    areaStyleModel.getAreaStyle(),
+                    {
+                        fill: color,
+                        opacity: 0.7
+                    }
+                )
+            );
+            polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle();
+
+            var itemStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);
+            var itemHoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();
+            var labelModel = itemModel.getModel('label');
+            var labelHoverModel = itemModel.getModel('emphasis.label');
+            symbolGroup.eachChild(function (symbolPath) {
+                symbolPath.setStyle(itemStyle);
+                symbolPath.hoverStyle = clone(itemHoverStyle);
+
+                setLabelStyle(
+                    symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel,
+                    {
+                        labelFetcher: data.hostModel,
+                        labelDataIndex: idx,
+                        labelDimIndex: symbolPath.__dimIdx,
+                        defaultText: data.get(data.dimensions[symbolPath.__dimIdx], idx),
+                        autoColor: color,
+                        isRectText: true
+                    }
+                );
+            });
+
+            function onEmphasis() {
+                polygon.attr('ignore', hoverPolygonIgnore);
+            }
+
+            function onNormal() {
+                polygon.attr('ignore', polygonIgnore);
+            }
+
+            itemGroup.off('mouseover').off('mouseout').off('normal').off('emphasis');
+            itemGroup.on('emphasis', onEmphasis)
+                .on('mouseover', onEmphasis)
+                .on('normal', onNormal)
+                .on('mouseout', onNormal);
+
+            setHoverStyle(itemGroup);
+        });
+
+        this._data = data;
+    },
+
+    remove: function () {
+        this.group.removeAll();
+        this._data = null;
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var radarLayout = function (ecModel) {
+    ecModel.eachSeriesByType('radar', function (seriesModel) {
+        var data = seriesModel.getData();
+        var points = [];
+        var coordSys = seriesModel.coordinateSystem;
+        if (!coordSys) {
+            return;
+        }
+
+        function pointsConverter(val, idx) {
+            points[idx] = points[idx] || [];
+            points[idx][i] = coordSys.dataToPoint(val, i);
+        }
+        var axes = coordSys.getIndicatorAxes();
+        for (var i = 0; i < axes.length; i++) {
+            data.each(data.mapDimension(axes[i].dim), pointsConverter);
+        }
+
+        data.each(function (idx) {
+            // Close polygon
+            points[idx][0] && points[idx].push(points[idx][0].slice());
+            data.setItemLayout(idx, points[idx]);
+        });
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Backward compat for radar chart in 2
+var backwardCompat$1 = function (option) {
+    var polarOptArr = option.polar;
+    if (polarOptArr) {
+        if (!isArray(polarOptArr)) {
+            polarOptArr = [polarOptArr];
+        }
+        var polarNotRadar = [];
+        each$1(polarOptArr, function (polarOpt, idx) {
+            if (polarOpt.indicator) {
+                if (polarOpt.type && !polarOpt.shape) {
+                    polarOpt.shape = polarOpt.type;
+                }
+                option.radar = option.radar || [];
+                if (!isArray(option.radar)) {
+                    option.radar = [option.radar];
+                }
+                option.radar.push(polarOpt);
+            }
+            else {
+                polarNotRadar.push(polarOpt);
+            }
+        });
+        option.polar = polarNotRadar;
+    }
+    each$1(option.series, function (seriesOpt) {
+        if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) {
+            seriesOpt.radarIndex = seriesOpt.polarIndex;
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+// Must use radar component
+registerVisual(dataColor('radar'));
+registerVisual(visualSymbol('radar', 'circle'));
+registerLayout(radarLayout);
+registerProcessor(dataFilter('radar'));
+registerPreprocessor(backwardCompat$1);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Simple view coordinate system
+ * Mapping given x, y to transformd view x, y
+ */
+
+var v2ApplyTransform$1 = applyTransform;
+
+// Dummy transform node
+function TransformDummy() {
+    Transformable.call(this);
+}
+mixin(TransformDummy, Transformable);
+
+function View(name) {
+    /**
+     * @type {string}
+     */
+    this.name = name;
+
+    /**
+     * @type {Object}
+     */
+    this.zoomLimit;
+
+    Transformable.call(this);
+
+    this._roamTransformable = new TransformDummy();
+
+    this._rawTransformable = new TransformDummy();
+
+    this._center;
+    this._zoom;
+}
+
+View.prototype = {
+
+    constructor: View,
+
+    type: 'view',
+
+    /**
+     * @param {Array.<string>}
+     * @readOnly
+     */
+    dimensions: ['x', 'y'],
+
+    /**
+     * Set bounding rect
+     * @param {number} x
+     * @param {number} y
+     * @param {number} width
+     * @param {number} height
+     */
+
+    // PENDING to getRect
+    setBoundingRect: function (x, y, width, height) {
+        this._rect = new BoundingRect(x, y, width, height);
+        return this._rect;
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    // PENDING to getRect
+    getBoundingRect: function () {
+        return this._rect;
+    },
+
+    /**
+     * @param {number} x
+     * @param {number} y
+     * @param {number} width
+     * @param {number} height
+     */
+    setViewRect: function (x, y, width, height) {
+        this.transformTo(x, y, width, height);
+        this._viewRect = new BoundingRect(x, y, width, height);
+    },
+
+    /**
+     * Transformed to particular position and size
+     * @param {number} x
+     * @param {number} y
+     * @param {number} width
+     * @param {number} height
+     */
+    transformTo: function (x, y, width, height) {
+        var rect = this.getBoundingRect();
+        var rawTransform = this._rawTransformable;
+
+        rawTransform.transform = rect.calculateTransform(
+            new BoundingRect(x, y, width, height)
+        );
+
+        rawTransform.decomposeTransform();
+
+        this._updateTransform();
+    },
+
+    /**
+     * Set center of view
+     * @param {Array.<number>} [centerCoord]
+     */
+    setCenter: function (centerCoord) {
+        if (!centerCoord) {
+            return;
+        }
+        this._center = centerCoord;
+
+        this._updateCenterAndZoom();
+    },
+
+    /**
+     * @param {number} zoom
+     */
+    setZoom: function (zoom) {
+        zoom = zoom || 1;
+
+        var zoomLimit = this.zoomLimit;
+        if (zoomLimit) {
+            if (zoomLimit.max != null) {
+                zoom = Math.min(zoomLimit.max, zoom);
+            }
+            if (zoomLimit.min != null) {
+                zoom = Math.max(zoomLimit.min, zoom);
+            }
+        }
+        this._zoom = zoom;
+
+        this._updateCenterAndZoom();
+    },
+
+    /**
+     * Get default center without roam
+     */
+    getDefaultCenter: function () {
+        // Rect before any transform
+        var rawRect = this.getBoundingRect();
+        var cx = rawRect.x + rawRect.width / 2;
+        var cy = rawRect.y + rawRect.height / 2;
+
+        return [cx, cy];
+    },
+
+    getCenter: function () {
+        return this._center || this.getDefaultCenter();
+    },
+
+    getZoom: function () {
+        return this._zoom || 1;
+    },
+
+    /**
+     * @return {Array.<number}
+     */
+    getRoamTransform: function () {
+        return this._roamTransformable.getLocalTransform();
+    },
+
+    /**
+     * Remove roam
+     */
+
+    _updateCenterAndZoom: function () {
+        // Must update after view transform updated
+        var rawTransformMatrix = this._rawTransformable.getLocalTransform();
+        var roamTransform = this._roamTransformable;
+        var defaultCenter = this.getDefaultCenter();
+        var center = this.getCenter();
+        var zoom = this.getZoom();
+
+        center = applyTransform([], center, rawTransformMatrix);
+        defaultCenter = applyTransform([], defaultCenter, rawTransformMatrix);
+
+        roamTransform.origin = center;
+        roamTransform.position = [
+            defaultCenter[0] - center[0],
+            defaultCenter[1] - center[1]
+        ];
+        roamTransform.scale = [zoom, zoom];
+
+        this._updateTransform();
+    },
+
+    /**
+     * Update transform from roam and mapLocation
+     * @private
+     */
+    _updateTransform: function () {
+        var roamTransformable = this._roamTransformable;
+        var rawTransformable = this._rawTransformable;
+
+        rawTransformable.parent = roamTransformable;
+        roamTransformable.updateTransform();
+        rawTransformable.updateTransform();
+
+        copy$1(this.transform || (this.transform = []), rawTransformable.transform || create$1());
+
+        this._rawTransform = rawTransformable.getLocalTransform();
+
+        this.invTransform = this.invTransform || [];
+        invert(this.invTransform, this.transform);
+
+        this.decomposeTransform();
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getViewRect: function () {
+        return this._viewRect;
+    },
+
+    /**
+     * Get view rect after roam transform
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getViewRectAfterRoam: function () {
+        var rect = this.getBoundingRect().clone();
+        rect.applyTransform(this.transform);
+        return rect;
+    },
+
+    /**
+     * Convert a single (lon, lat) data item to (x, y) point.
+     * @param {Array.<number>} data
+     * @param {boolean} noRoam
+     * @param {Array.<number>} [out]
+     * @return {Array.<number>}
+     */
+    dataToPoint: function (data, noRoam, out) {
+        var transform = noRoam ? this._rawTransform : this.transform;
+        out = out || [];
+        return transform
+            ? v2ApplyTransform$1(out, data, transform)
+            : copy(out, data);
+    },
+
+    /**
+     * Convert a (x, y) point to (lon, lat) data
+     * @param {Array.<number>} point
+     * @return {Array.<number>}
+     */
+    pointToData: function (point) {
+        var invTransform = this.invTransform;
+        return invTransform
+            ? v2ApplyTransform$1([], point, invTransform)
+            : [point[0], point[1]];
+    },
+
+    /**
+     * @implements
+     * see {module:echarts/CoodinateSystem}
+     */
+    convertToPixel: curry(doConvert$1, 'dataToPoint'),
+
+    /**
+     * @implements
+     * see {module:echarts/CoodinateSystem}
+     */
+    convertFromPixel: curry(doConvert$1, 'pointToData'),
+
+    /**
+     * @implements
+     * see {module:echarts/CoodinateSystem}
+     */
+    containPoint: function (point) {
+        return this.getViewRectAfterRoam().contain(point[0], point[1]);
+    }
+
+    /**
+     * @return {number}
+     */
+    // getScalarScale: function () {
+    //     // Use determinant square root of transform to mutiply scalar
+    //     var m = this.transform;
+    //     var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1]));
+    //     return det;
+    // }
+};
+
+mixin(View, Transformable);
+
+function doConvert$1(methodName, ecModel, finder, value) {
+    var seriesModel = finder.seriesModel;
+    var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.
+    return coordSys === this ? coordSys[methodName](value) : null;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Fix for 南海诸岛
+
+var geoCoord = [126, 25];
+
+var points$1 = [
+    [[0,3.5],[7,11.2],[15,11.9],[30,7],[42,0.7],[52,0.7],
+        [56,7.7],[59,0.7],[64,0.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]]
+];
+
+for (var i$1 = 0; i$1 < points$1.length; i$1++) {
+    for (var k = 0; k < points$1[i$1].length; k++) {
+        points$1[i$1][k][0] /= 10.5;
+        points$1[i$1][k][1] /= -10.5 / 0.75;
+
+        points$1[i$1][k][0] += geoCoord[0];
+        points$1[i$1][k][1] += geoCoord[1];
+    }
+}
+
+var fixNanhai = function (geo) {
+    if (geo.map === 'china') {
+        geo.regions.push(new Region(
+            '南海诸岛',
+            map(points$1, function (exterior) {
+                return {
+                    type: 'polygon',
+                    exterior: exterior
+                };
+            }), geoCoord
+        ));
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var coordsOffsetMap = {
+    '南海诸岛' : [32, 80],
+    // 全国
+    '广东': [0, -10],
+    '香港': [10, 5],
+    '澳门': [-10, 10],
+    //'北京': [-10, 0],
+    '天津': [5, 5]
+};
+
+var fixTextCoord = function (geo) {
+    each$1(geo.regions, function (region) {
+        var coordFix = coordsOffsetMap[region.name];
+        if (coordFix) {
+            var cp = region.center;
+            cp[0] += coordFix[0] / 10.5;
+            cp[1] += -coordFix[1] / (10.5 / 0.75);
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var geoCoordMap = {
+    'Russia': [100, 60],
+    'United States': [-99, 38],
+    'United States of America': [-99, 38]
+};
+
+var fixGeoCoord = function (geo) {
+    each$1(geo.regions, function (region) {
+        var geoCoord = geoCoordMap[region.name];
+        if (geoCoord) {
+            var cp = region.center;
+            cp[0] = geoCoord[0];
+            cp[1] = geoCoord[1];
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Fix for 钓鱼岛
+
+// var Region = require('../Region');
+// var zrUtil = require('zrender/src/core/util');
+
+// var geoCoord = [126, 25];
+
+var points$2 = [
+    [
+        [123.45165252685547, 25.73527164402261],
+        [123.49731445312499, 25.73527164402261],
+        [123.49731445312499, 25.750734064600884],
+        [123.45165252685547, 25.750734064600884],
+        [123.45165252685547, 25.73527164402261]
+    ]
+];
+
+var fixDiaoyuIsland = function (geo) {
+    if (geo.map === 'china') {
+        for (var i = 0, len = geo.regions.length; i < len; ++i) {
+            if (geo.regions[i].name === '台湾') {
+                geo.regions[i].geometries.push({
+                    type: 'polygon',
+                    exterior: points$2[0]
+                });
+            }
+        }
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Geo fix functions
+var geoFixFuncs = [
+    fixNanhai,
+    fixTextCoord,
+    fixGeoCoord,
+    fixDiaoyuIsland
+];
+
+/**
+ * [Geo description]
+ * @param {string} name Geo name
+ * @param {string} map Map type
+ * @param {Object} geoJson
+ * @param {Object} [specialAreas]
+ *        Specify the positioned areas by left, top, width, height
+ * @param {Object.<string, string>} [nameMap]
+ *        Specify name alias
+ */
+function Geo(name, map$$1, geoJson, specialAreas, nameMap) {
+
+    View.call(this, name);
+
+    /**
+     * Map type
+     * @type {string}
+     */
+    this.map = map$$1;
+
+    this._nameCoordMap = createHashMap();
+
+    this.loadGeoJson(geoJson, specialAreas, nameMap);
+}
+
+Geo.prototype = {
+
+    constructor: Geo,
+
+    type: 'geo',
+
+    /**
+     * @param {Array.<string>}
+     * @readOnly
+     */
+    dimensions: ['lng', 'lat'],
+
+    /**
+     * If contain given lng,lat coord
+     * @param {Array.<number>}
+     * @readOnly
+     */
+    containCoord: function (coord) {
+        var regions = this.regions;
+        for (var i = 0; i < regions.length; i++) {
+            if (regions[i].contain(coord)) {
+                return true;
+            }
+        }
+        return false;
+    },
+    /**
+     * @param {Object} geoJson
+     * @param {Object} [specialAreas]
+     *        Specify the positioned areas by left, top, width, height
+     * @param {Object.<string, string>} [nameMap]
+     *        Specify name alias
+     */
+    loadGeoJson: function (geoJson, specialAreas, nameMap) {
+        // https://jsperf.com/try-catch-performance-overhead
+        try {
+            this.regions = geoJson ? parseGeoJson$1(geoJson) : [];
+        }
+        catch (e) {
+            throw 'Invalid geoJson format\n' + e.message;
+        }
+        specialAreas = specialAreas || {};
+        nameMap = nameMap || {};
+        var regions = this.regions;
+        var regionsMap = createHashMap();
+        for (var i = 0; i < regions.length; i++) {
+            var regionName = regions[i].name;
+            // Try use the alias in nameMap
+            regionName = nameMap.hasOwnProperty(regionName) ? nameMap[regionName] : regionName;
+            regions[i].name = regionName;
+
+            regionsMap.set(regionName, regions[i]);
+            // Add geoJson
+            this.addGeoCoord(regionName, regions[i].center);
+
+            // Some area like Alaska in USA map needs to be tansformed
+            // to look better
+            var specialArea = specialAreas[regionName];
+            if (specialArea) {
+                regions[i].transformTo(
+                    specialArea.left, specialArea.top, specialArea.width, specialArea.height
+                );
+            }
+        }
+
+        this._regionsMap = regionsMap;
+
+        this._rect = null;
+
+        each$1(geoFixFuncs, function (fixFunc) {
+            fixFunc(this);
+        }, this);
+    },
+
+    // Overwrite
+    transformTo: function (x, y, width, height) {
+        var rect = this.getBoundingRect();
+
+        rect = rect.clone();
+        // Longitute is inverted
+        rect.y = -rect.y - rect.height;
+
+        var rawTransformable = this._rawTransformable;
+
+        rawTransformable.transform = rect.calculateTransform(
+            new BoundingRect(x, y, width, height)
+        );
+
+        rawTransformable.decomposeTransform();
+
+        var scale = rawTransformable.scale;
+        scale[1] = -scale[1];
+
+        rawTransformable.updateTransform();
+
+        this._updateTransform();
+    },
+
+    /**
+     * @param {string} name
+     * @return {module:echarts/coord/geo/Region}
+     */
+    getRegion: function (name) {
+        return this._regionsMap.get(name);
+    },
+
+    getRegionByCoord: function (coord) {
+        var regions = this.regions;
+        for (var i = 0; i < regions.length; i++) {
+            if (regions[i].contain(coord)) {
+                return regions[i];
+            }
+        }
+    },
+
+    /**
+     * Add geoCoord for indexing by name
+     * @param {string} name
+     * @param {Array.<number>} geoCoord
+     */
+    addGeoCoord: function (name, geoCoord) {
+        this._nameCoordMap.set(name, geoCoord);
+    },
+
+    /**
+     * Get geoCoord by name
+     * @param {string} name
+     * @return {Array.<number>}
+     */
+    getGeoCoord: function (name) {
+        return this._nameCoordMap.get(name);
+    },
+
+    // Overwrite
+    getBoundingRect: function () {
+        if (this._rect) {
+            return this._rect;
+        }
+        var rect;
+
+        var regions = this.regions;
+        for (var i = 0; i < regions.length; i++) {
+            var regionRect = regions[i].getBoundingRect();
+            rect = rect || regionRect.clone();
+            rect.union(regionRect);
+        }
+        // FIXME Always return new ?
+        return (this._rect = rect || new BoundingRect(0, 0, 0, 0));
+    },
+
+    /**
+     * @param {string|Array.<number>} data
+     * @param {boolean} noRoam
+     * @param {Array.<number>} [out]
+     * @return {Array.<number>}
+     */
+    dataToPoint: function (data, noRoam, out) {
+        if (typeof data === 'string') {
+            // Map area name to geoCoord
+            data = this.getGeoCoord(data);
+        }
+        if (data) {
+            return View.prototype.dataToPoint.call(this, data, noRoam, out);
+        }
+    },
+
+    /**
+     * @inheritDoc
+     */
+    convertToPixel: curry(doConvert, 'dataToPoint'),
+
+    /**
+     * @inheritDoc
+     */
+    convertFromPixel: curry(doConvert, 'pointToData')
+
+};
+
+mixin(Geo, View);
+
+function doConvert(methodName, ecModel, finder, value) {
+    var geoModel = finder.geoModel;
+    var seriesModel = finder.seriesModel;
+
+    var coordSys = geoModel
+        ? geoModel.coordinateSystem
+        : seriesModel
+        ? (
+            seriesModel.coordinateSystem // For map.
+            || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem
+        )
+        : null;
+
+    return coordSys === this ? coordSys[methodName](value) : null;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Resize method bound to the geo
+ * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function resizeGeo(geoModel, api) {
+
+    var boundingCoords = geoModel.get('boundingCoords');
+    if (boundingCoords != null) {
+        var leftTop = boundingCoords[0];
+        var rightBottom = boundingCoords[1];
+        if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {
+            if (__DEV__) {
+                console.error('Invalid boundingCoords');
+            }
+        }
+        else {
+            this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]);
+        }
+    }
+
+    var rect = this.getBoundingRect();
+
+    var boxLayoutOption;
+
+    var center = geoModel.get('layoutCenter');
+    var size = geoModel.get('layoutSize');
+
+    var viewWidth = api.getWidth();
+    var viewHeight = api.getHeight();
+
+    var aspectScale = geoModel.get('aspectScale') || 0.75;
+    var aspect = rect.width / rect.height * aspectScale;
+
+    var useCenterAndSize = false;
+
+    if (center && size) {
+        center = [
+            parsePercent$1(center[0], viewWidth),
+            parsePercent$1(center[1], viewHeight)
+        ];
+        size = parsePercent$1(size, Math.min(viewWidth, viewHeight));
+
+        if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {
+            useCenterAndSize = true;
+        }
+        else {
+            if (__DEV__) {
+                console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.');
+            }
+        }
+    }
+
+    var viewRect;
+    if (useCenterAndSize) {
+        var viewRect = {};
+        if (aspect > 1) {
+            // Width is same with size
+            viewRect.width = size;
+            viewRect.height = size / aspect;
+        }
+        else {
+            viewRect.height = size;
+            viewRect.width = size * aspect;
+        }
+        viewRect.y = center[1] - viewRect.height / 2;
+        viewRect.x = center[0] - viewRect.width / 2;
+    }
+    else {
+        // Use left/top/width/height
+        boxLayoutOption = geoModel.getBoxLayoutParams();
+
+        // 0.75 rate
+        boxLayoutOption.aspect = aspect;
+
+        viewRect = getLayoutRect(boxLayoutOption, {
+            width: viewWidth,
+            height: viewHeight
+        });
+    }
+
+    this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);
+
+    this.setCenter(geoModel.get('center'));
+    this.setZoom(geoModel.get('zoom'));
+}
+
+/**
+ * @param {module:echarts/coord/Geo} geo
+ * @param {module:echarts/model/Model} model
+ * @inner
+ */
+function setGeoCoords(geo, model) {
+    each$1(model.get('geoCoord'), function (geoCoord, name) {
+        geo.addGeoCoord(name, geoCoord);
+    });
+}
+
+if (__DEV__) {
+    var mapNotExistsError = function (name) {
+        console.error('Map ' + name + ' not exists. You can download map file on http://echarts.baidu.com/download-map.html');
+    };
+}
+
+var geoCreator = {
+
+    // For deciding which dimensions to use when creating list data
+    dimensions: Geo.prototype.dimensions,
+
+    create: function (ecModel, api) {
+        var geoList = [];
+
+        // FIXME Create each time may be slow
+        ecModel.eachComponent('geo', function (geoModel, idx) {
+            var name = geoModel.get('map');
+            var mapData = getMap(name);
+            if (__DEV__) {
+                if (!mapData) {
+                    mapNotExistsError(name);
+                }
+            }
+            var geo = new Geo(
+                name + idx, name,
+                mapData && mapData.geoJson, mapData && mapData.specialAreas,
+                geoModel.get('nameMap')
+            );
+            geo.zoomLimit = geoModel.get('scaleLimit');
+            geoList.push(geo);
+
+            setGeoCoords(geo, geoModel);
+
+            geoModel.coordinateSystem = geo;
+            geo.model = geoModel;
+
+            // Inject resize method
+            geo.resize = resizeGeo;
+
+            geo.resize(geoModel, api);
+        });
+
+        ecModel.eachSeries(function (seriesModel) {
+            var coordSys = seriesModel.get('coordinateSystem');
+            if (coordSys === 'geo') {
+                var geoIndex = seriesModel.get('geoIndex') || 0;
+                seriesModel.coordinateSystem = geoList[geoIndex];
+            }
+        });
+
+        // If has map series
+        var mapModelGroupBySeries = {};
+
+        ecModel.eachSeriesByType('map', function (seriesModel) {
+            if (!seriesModel.getHostGeoModel()) {
+                var mapType = seriesModel.getMapType();
+                mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];
+                mapModelGroupBySeries[mapType].push(seriesModel);
+            }
+        });
+
+        each$1(mapModelGroupBySeries, function (mapSeries, mapType) {
+            var mapData = getMap(mapType);
+            if (__DEV__) {
+                if (!mapData) {
+                    mapNotExistsError(mapSeries[0].get('map'));
+                }
+            }
+
+            var nameMapList = map(mapSeries, function (singleMapSeries) {
+                return singleMapSeries.get('nameMap');
+            });
+            var geo = new Geo(
+                mapType, mapType,
+                mapData && mapData.geoJson, mapData && mapData.specialAreas,
+                mergeAll(nameMapList)
+            );
+            geo.zoomLimit = retrieve.apply(null, map(mapSeries, function (singleMapSeries) {
+                return singleMapSeries.get('scaleLimit');
+            }));
+            geoList.push(geo);
+
+            // Inject resize method
+            geo.resize = resizeGeo;
+
+            geo.resize(mapSeries[0], api);
+
+            each$1(mapSeries, function (singleMapSeries) {
+                singleMapSeries.coordinateSystem = geo;
+
+                setGeoCoords(geo, singleMapSeries);
+            });
+        });
+
+        return geoList;
+    },
+
+    /**
+     * Fill given regions array
+     * @param  {Array.<Object>} originRegionArr
+     * @param  {string} mapName
+     * @param  {Object} [nameMap]
+     * @return {Array}
+     */
+    getFilledRegions: function (originRegionArr, mapName, nameMap) {
+        // Not use the original
+        var regionsArr = (originRegionArr || []).slice();
+        nameMap = nameMap || {};
+
+        var map$$1 = getMap(mapName);
+        var geoJson = map$$1 && map$$1.geoJson;
+        if (!geoJson) {
+            if (__DEV__) {
+                mapNotExistsError(mapName);
+            }
+            return originRegionArr;
+        }
+
+        var dataNameMap = createHashMap();
+        var features = geoJson.features;
+        for (var i = 0; i < regionsArr.length; i++) {
+            dataNameMap.set(regionsArr[i].name, regionsArr[i]);
+        }
+
+        for (var i = 0; i < features.length; i++) {
+            var name = features[i].properties.name;
+            if (!dataNameMap.get(name)) {
+                if (nameMap.hasOwnProperty(name)) {
+                    name = nameMap[name];
+                }
+                regionsArr.push({
+                    name: name
+                });
+            }
+        }
+        return regionsArr;
+    }
+};
+
+registerCoordinateSystem('geo', geoCreator);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var MapSeries = SeriesModel.extend({
+
+    type: 'series.map',
+
+    dependencies: ['geo'],
+
+    layoutMode: 'box',
+
+    /**
+     * Only first map series of same mapType will drawMap
+     * @type {boolean}
+     */
+    needsDrawMap: false,
+
+    /**
+     * Group of all map series with same mapType
+     * @type {boolean}
+     */
+    seriesGroup: [],
+
+    init: function (option) {
+
+        // this._fillOption(option, this.getMapType());
+        // this.option = option;
+
+        MapSeries.superApply(this, 'init', arguments);
+
+        this.updateSelectedMap(this._createSelectableList());
+    },
+
+    getInitialData: function (option) {
+        return createListSimply(this, ['value']);
+    },
+
+    mergeOption: function (newOption) {
+        // this._fillOption(newOption, this.getMapType());
+
+        MapSeries.superApply(this, 'mergeOption', arguments);
+
+        this.updateSelectedMap(this._createSelectableList());
+    },
+
+    _createSelectableList: function () {
+        var data = this.getRawData();
+        var valueDim = data.mapDimension('value');
+        var targetList = [];
+        for (var i = 0, len = data.count(); i < len; i++) {
+            targetList.push({
+                name: data.getName(i),
+                value: data.get(valueDim, i),
+                selected: retrieveRawAttr(data, i, 'selected')
+            });
+        }
+
+        targetList = geoCreator.getFilledRegions(targetList, this.getMapType(), this.option.nameMap);
+
+        return targetList;
+    },
+
+    /**
+     * If no host geo model, return null, which means using a
+     * inner exclusive geo model.
+     */
+    getHostGeoModel: function () {
+        var geoIndex = this.option.geoIndex;
+        return geoIndex != null
+            ? this.dependentModels.geo[geoIndex]
+            : null;
+    },
+
+    getMapType: function () {
+        return (this.getHostGeoModel() || this).option.map;
+    },
+
+    _fillOption: function (option, mapName) {
+        // Shallow clone
+        // option = zrUtil.extend({}, option);
+
+        // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);
+
+        // return option;
+    },
+
+    getRawValue: function (dataIndex) {
+        // Use value stored in data instead because it is calculated from multiple series
+        // FIXME Provide all value of multiple series ?
+        var data = this.getData();
+        return data.get(data.mapDimension('value'), dataIndex);
+    },
+
+    /**
+     * Get model of region
+     * @param  {string} name
+     * @return {module:echarts/model/Model}
+     */
+    getRegionModel: function (regionName) {
+        var data = this.getData();
+        return data.getItemModel(data.indexOfName(regionName));
+    },
+
+    /**
+     * Map tooltip formatter
+     *
+     * @param {number} dataIndex
+     */
+    formatTooltip: function (dataIndex) {
+        // FIXME orignalData and data is a bit confusing
+        var data = this.getData();
+        var formattedValue = addCommas(this.getRawValue(dataIndex));
+        var name = data.getName(dataIndex);
+
+        var seriesGroup = this.seriesGroup;
+        var seriesNames = [];
+        for (var i = 0; i < seriesGroup.length; i++) {
+            var otherIndex = seriesGroup[i].originalData.indexOfName(name);
+            var valueDim = data.mapDimension('value');
+            if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {
+                seriesNames.push(
+                    encodeHTML(seriesGroup[i].name)
+                );
+            }
+        }
+
+        return seriesNames.join(', ') + '<br />'
+            + encodeHTML(name + ' : ' + formattedValue);
+    },
+
+    /**
+     * @implement
+     */
+    getTooltipPosition: function (dataIndex) {
+        if (dataIndex != null) {
+            var name = this.getData().getName(dataIndex);
+            var geo = this.coordinateSystem;
+            var region = geo.getRegion(name);
+
+            return region && geo.dataToPoint(region.center);
+        }
+    },
+
+    setZoom: function (zoom) {
+        this.option.zoom = zoom;
+    },
+
+    setCenter: function (center) {
+        this.option.center = center;
+    },
+
+    defaultOption: {
+        // 一级层叠
+        zlevel: 0,
+        // 二级层叠
+        z: 2,
+
+        coordinateSystem: 'geo',
+
+        // map should be explicitly specified since ec3.
+        map: '',
+
+        // If `geoIndex` is not specified, a exclusive geo will be
+        // created. Otherwise use the specified geo component, and
+        // `map` and `mapType` are ignored.
+        // geoIndex: 0,
+
+        // 'center' | 'left' | 'right' | 'x%' | {number}
+        left: 'center',
+        // 'center' | 'top' | 'bottom' | 'x%' | {number}
+        top: 'center',
+        // right
+        // bottom
+        // width:
+        // height
+
+        // Aspect is width / height. Inited to be geoJson bbox aspect
+        // This parameter is used for scale this aspect
+        aspectScale: 0.75,
+
+        ///// Layout with center and size
+        // If you wan't to put map in a fixed size box with right aspect ratio
+        // This two properties may more conveninet
+        // layoutCenter: [50%, 50%]
+        // layoutSize: 100
+
+
+        // 数值合并方式,默认加和,可选为:
+        // 'sum' | 'average' | 'max' | 'min'
+        // mapValueCalculation: 'sum',
+        // 地图数值计算结果小数精度
+        // mapValuePrecision: 0,
+
+
+        // 显示图例颜色标识(系列标识的小圆点),图例开启时有效
+        showLegendSymbol: true,
+        // 选择模式,默认关闭,可选single,multiple
+        // selectedMode: false,
+        dataRangeHoverLink: true,
+        // 是否开启缩放及漫游模式
+        // roam: false,
+
+        // Define left-top, right-bottom coords to control view
+        // For example, [ [180, 90], [-180, -90] ],
+        // higher priority than center and zoom
+        boundingCoords: null,
+
+        // Default on center of map
+        center: null,
+
+        zoom: 1,
+
+        scaleLimit: null,
+
+        label: {
+            show: false,
+            color: '#000'
+        },
+        // scaleLimit: null,
+        itemStyle: {
+            borderWidth: 0.5,
+            borderColor: '#444',
+            areaColor: '#eee'
+        },
+
+        emphasis: {
+            label: {
+                show: true,
+                color: 'rgb(100,0,0)'
+            },
+            itemStyle: {
+                areaColor: 'rgba(255,215,0,0.8)'
+            }
+        }
+    }
+
+});
+
+mixin(MapSeries, selectableMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var ATTR = '\0_ec_interaction_mutex';
+
+function take(zr, resourceKey, userKey) {
+    var store = getStore(zr);
+    store[resourceKey] = userKey;
+}
+
+function release(zr, resourceKey, userKey) {
+    var store = getStore(zr);
+    var uKey = store[resourceKey];
+
+    if (uKey === userKey) {
+        store[resourceKey] = null;
+    }
+}
+
+function isTaken(zr, resourceKey) {
+    return !!getStore(zr)[resourceKey];
+}
+
+function getStore(zr) {
+    return zr[ATTR] || (zr[ATTR] = {});
+}
+
+/**
+ * payload: {
+ *     type: 'takeGlobalCursor',
+ *     key: 'dataZoomSelect', or 'brush', or ...,
+ *         If no userKey, release global cursor.
+ * }
+ */
+registerAction(
+    {type: 'takeGlobalCursor', event: 'globalCursorTaken', update: 'update'},
+    function () {}
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @alias module:echarts/component/helper/RoamController
+ * @constructor
+ * @mixin {module:zrender/mixin/Eventful}
+ *
+ * @param {module:zrender/zrender~ZRender} zr
+ */
+function RoamController(zr) {
+
+    /**
+     * @type {Function}
+     */
+    this.pointerChecker;
+
+    /**
+     * @type {module:zrender}
+     */
+    this._zr = zr;
+
+    /**
+     * @type {Object}
+     */
+    this._opt = {};
+
+    // Avoid two roamController bind the same handler
+    var bind$$1 = bind;
+    var mousedownHandler = bind$$1(mousedown, this);
+    var mousemoveHandler = bind$$1(mousemove, this);
+    var mouseupHandler = bind$$1(mouseup, this);
+    var mousewheelHandler = bind$$1(mousewheel, this);
+    var pinchHandler = bind$$1(pinch, this);
+
+    Eventful.call(this);
+
+    /**
+     * @param {Function} pointerChecker
+     *                   input: x, y
+     *                   output: boolean
+     */
+    this.setPointerChecker = function (pointerChecker) {
+        this.pointerChecker = pointerChecker;
+    };
+
+    /**
+     * Notice: only enable needed types. For example, if 'zoom'
+     * is not needed, 'zoom' should not be enabled, otherwise
+     * default mousewheel behaviour (scroll page) will be disabled.
+     *
+     * @param  {boolean|string} [controlType=true] Specify the control type,
+     *                          which can be null/undefined or true/false
+     *                          or 'pan/move' or 'zoom'/'scale'
+     * @param {Object} [opt]
+     * @param {Object} [opt.zoomOnMouseWheel=true]
+     * @param {Object} [opt.moveOnMouseMove=true]
+     * @param {Object} [opt.preventDefaultMouseMove=true] When pan.
+     */
+    this.enable = function (controlType, opt) {
+
+        // Disable previous first
+        this.disable();
+
+        this._opt = defaults(clone(opt) || {}, {
+            zoomOnMouseWheel: true,
+            moveOnMouseMove: true,
+            preventDefaultMouseMove: true
+        });
+
+        if (controlType == null) {
+            controlType = true;
+        }
+
+        if (controlType === true || (controlType === 'move' || controlType === 'pan')) {
+            zr.on('mousedown', mousedownHandler);
+            zr.on('mousemove', mousemoveHandler);
+            zr.on('mouseup', mouseupHandler);
+        }
+        if (controlType === true || (controlType === 'scale' || controlType === 'zoom')) {
+            zr.on('mousewheel', mousewheelHandler);
+            zr.on('pinch', pinchHandler);
+        }
+    };
+
+    this.disable = function () {
+        zr.off('mousedown', mousedownHandler);
+        zr.off('mousemove', mousemoveHandler);
+        zr.off('mouseup', mouseupHandler);
+        zr.off('mousewheel', mousewheelHandler);
+        zr.off('pinch', pinchHandler);
+    };
+
+    this.dispose = this.disable;
+
+    this.isDragging = function () {
+        return this._dragging;
+    };
+
+    this.isPinching = function () {
+        return this._pinching;
+    };
+}
+
+mixin(RoamController, Eventful);
+
+
+function mousedown(e) {
+    if (notLeftMouse(e)
+        || (e.target && e.target.draggable)
+    ) {
+        return;
+    }
+
+    var x = e.offsetX;
+    var y = e.offsetY;
+
+    // Only check on mosedown, but not mousemove.
+    // Mouse can be out of target when mouse moving.
+    if (this.pointerChecker && this.pointerChecker(e, x, y)) {
+        this._x = x;
+        this._y = y;
+        this._dragging = true;
+    }
+}
+
+function mousemove(e) {
+    if (notLeftMouse(e)
+        || !checkKeyBinding(this, 'moveOnMouseMove', e)
+        || !this._dragging
+        || e.gestureEvent === 'pinch'
+        || isTaken(this._zr, 'globalPan')
+    ) {
+        return;
+    }
+
+    var x = e.offsetX;
+    var y = e.offsetY;
+
+    var oldX = this._x;
+    var oldY = this._y;
+
+    var dx = x - oldX;
+    var dy = y - oldY;
+
+    this._x = x;
+    this._y = y;
+
+    this._opt.preventDefaultMouseMove && stop(e.event);
+
+    this.trigger('pan', dx, dy, oldX, oldY, x, y);
+}
+
+function mouseup(e) {
+    if (!notLeftMouse(e)) {
+        this._dragging = false;
+    }
+}
+
+function mousewheel(e) {
+    // wheelDelta maybe -0 in chrome mac.
+    if (!checkKeyBinding(this, 'zoomOnMouseWheel', e) || e.wheelDelta === 0) {
+        return;
+    }
+
+    // Convenience:
+    // Mac and VM Windows on Mac: scroll up: zoom out.
+    // Windows: scroll up: zoom in.
+    var zoomDelta = e.wheelDelta > 0 ? 1.1 : 1 / 1.1;
+    zoom.call(this, e, zoomDelta, e.offsetX, e.offsetY);
+}
+
+function pinch(e) {
+    if (isTaken(this._zr, 'globalPan')) {
+        return;
+    }
+    var zoomDelta = e.pinchScale > 1 ? 1.1 : 1 / 1.1;
+    zoom.call(this, e, zoomDelta, e.pinchX, e.pinchY);
+}
+
+function zoom(e, zoomDelta, zoomX, zoomY) {
+    if (this.pointerChecker && this.pointerChecker(e, zoomX, zoomY)) {
+        // When mouse is out of roamController rect,
+        // default befavoius should not be be disabled, otherwise
+        // page sliding is disabled, contrary to expectation.
+        stop(e.event);
+
+        this.trigger('zoom', zoomDelta, zoomX, zoomY);
+    }
+}
+
+function checkKeyBinding(roamController, prop, e) {
+    var setting = roamController._opt[prop];
+    return setting
+        && (!isString(setting) || e.event[setting + 'Key']);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * For geo and graph.
+ *
+ * @param {Object} controllerHost
+ * @param {module:zrender/Element} controllerHost.target
+ */
+function updateViewOnPan(controllerHost, dx, dy) {
+    var target = controllerHost.target;
+    var pos = target.position;
+    pos[0] += dx;
+    pos[1] += dy;
+    target.dirty();
+}
+
+/**
+ * For geo and graph.
+ *
+ * @param {Object} controllerHost
+ * @param {module:zrender/Element} controllerHost.target
+ * @param {number} controllerHost.zoom
+ * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2}
+ */
+function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {
+    var target = controllerHost.target;
+    var zoomLimit = controllerHost.zoomLimit;
+    var pos = target.position;
+    var scale = target.scale;
+
+    var newZoom = controllerHost.zoom = controllerHost.zoom || 1;
+    newZoom *= zoomDelta;
+    if (zoomLimit) {
+        var zoomMin = zoomLimit.min || 0;
+        var zoomMax = zoomLimit.max || Infinity;
+        newZoom = Math.max(
+            Math.min(zoomMax, newZoom),
+            zoomMin
+        );
+    }
+    var zoomScale = newZoom / controllerHost.zoom;
+    controllerHost.zoom = newZoom;
+    // Keep the mouse center when scaling
+    pos[0] -= (zoomX - pos[0]) * (zoomScale - 1);
+    pos[1] -= (zoomY - pos[1]) * (zoomScale - 1);
+    scale[0] *= zoomScale;
+    scale[1] *= zoomScale;
+
+    target.dirty();
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var IRRELEVANT_EXCLUDES = {'axisPointer': 1, 'tooltip': 1, 'brush': 1};
+
+/**
+ * Avoid that: mouse click on a elements that is over geo or graph,
+ * but roam is triggered.
+ */
+function onIrrelevantElement(e, api, targetCoordSysModel) {
+    var model = api.getComponentByElement(e.topTarget);
+    // If model is axisModel, it works only if it is injected with coordinateSystem.
+    var coordSys = model && model.coordinateSystem;
+    return model
+        && model !== targetCoordSysModel
+        && !IRRELEVANT_EXCLUDES[model.mainType]
+        && (coordSys && coordSys.model !== targetCoordSysModel);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function getFixedItemStyle(model, scale) {
+    var itemStyle = model.getItemStyle();
+    var areaColor = model.get('areaColor');
+
+    // If user want the color not to be changed when hover,
+    // they should both set areaColor and color to be null.
+    if (areaColor != null) {
+        itemStyle.fill = areaColor;
+    }
+
+    return itemStyle;
+}
+
+function updateMapSelectHandler(mapDraw, mapOrGeoModel, group, api, fromView) {
+    group.off('click');
+    group.off('mousedown');
+
+    if (mapOrGeoModel.get('selectedMode')) {
+
+        group.on('mousedown', function () {
+            mapDraw._mouseDownFlag = true;
+        });
+
+        group.on('click', function (e) {
+            if (!mapDraw._mouseDownFlag) {
+                return;
+            }
+            mapDraw._mouseDownFlag = false;
+
+            var el = e.target;
+            while (!el.__regions) {
+                el = el.parent;
+            }
+            if (!el) {
+                return;
+            }
+
+            var action = {
+                type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect',
+                batch: map(el.__regions, function (region) {
+                    return {
+                        name: region.name,
+                        from: fromView.uid
+                    };
+                })
+            };
+            action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id;
+
+            api.dispatchAction(action);
+
+            updateMapSelected(mapOrGeoModel, group);
+        });
+    }
+}
+
+function updateMapSelected(mapOrGeoModel, group) {
+    // FIXME
+    group.eachChild(function (otherRegionEl) {
+        each$1(otherRegionEl.__regions, function (region) {
+            otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal');
+        });
+    });
+}
+
+/**
+ * @alias module:echarts/component/helper/MapDraw
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {boolean} updateGroup
+ */
+function MapDraw(api, updateGroup) {
+
+    var group = new Group();
+
+    /**
+     * @type {module:echarts/component/helper/RoamController}
+     * @private
+     */
+    this._controller = new RoamController(api.getZr());
+
+    /**
+     * @type {Object} {target, zoom, zoomLimit}
+     * @private
+     */
+    this._controllerHost = {target: updateGroup ? group : null};
+
+    /**
+     * @type {module:zrender/container/Group}
+     * @readOnly
+     */
+    this.group = group;
+
+    /**
+     * @type {boolean}
+     * @private
+     */
+    this._updateGroup = updateGroup;
+
+    /**
+     * This flag is used to make sure that only one among
+     * `pan`, `zoom`, `click` can occurs, otherwise 'selected'
+     * action may be triggered when `pan`, which is unexpected.
+     * @type {booelan}
+     */
+    this._mouseDownFlag;
+}
+
+MapDraw.prototype = {
+
+    constructor: MapDraw,
+
+    draw: function (mapOrGeoModel, ecModel, api, fromView, payload) {
+
+        var isGeo = mapOrGeoModel.mainType === 'geo';
+
+        // Map series has data. GEO model that controlled by map series
+        // will be assigned with map data. Other GEO model has no data.
+        var data = mapOrGeoModel.getData && mapOrGeoModel.getData();
+        isGeo && ecModel.eachComponent({mainType: 'series', subType: 'map'}, function (mapSeries) {
+            if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {
+                data = mapSeries.getData();
+            }
+        });
+
+        var geo = mapOrGeoModel.coordinateSystem;
+
+        var group = this.group;
+
+        var scale = geo.scale;
+        var groupNewProp = {
+            position: geo.position,
+            scale: scale
+        };
+
+        // No animation when first draw or in action
+        if (!group.childAt(0) || payload) {
+            group.attr(groupNewProp);
+        }
+        else {
+            updateProps(group, groupNewProp, mapOrGeoModel);
+        }
+
+        group.removeAll();
+
+        var itemStyleAccessPath = ['itemStyle'];
+        var hoverItemStyleAccessPath = ['emphasis', 'itemStyle'];
+        var labelAccessPath = ['label'];
+        var hoverLabelAccessPath = ['emphasis', 'label'];
+        var nameMap = createHashMap();
+
+        each$1(geo.regions, function (region) {
+
+            // Consider in GeoJson properties.name may be duplicated, for example,
+            // there is multiple region named "United Kindom" or "France" (so many
+            // colonies). And it is not appropriate to merge them in geo, which
+            // will make them share the same label and bring trouble in label
+            // location calculation.
+            var regionGroup = nameMap.get(region.name)
+                || nameMap.set(region.name, new Group());
+
+            var compoundPath = new CompoundPath({
+                shape: {
+                    paths: []
+                }
+            });
+            regionGroup.add(compoundPath);
+
+            var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel;
+
+            var itemStyleModel = regionModel.getModel(itemStyleAccessPath);
+            var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath);
+            var itemStyle = getFixedItemStyle(itemStyleModel, scale);
+            var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale);
+
+            var labelModel = regionModel.getModel(labelAccessPath);
+            var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath);
+
+            var dataIdx;
+            // Use the itemStyle in data if has data
+            if (data) {
+                dataIdx = data.indexOfName(region.name);
+                // Only visual color of each item will be used. It can be encoded by dataRange
+                // But visual color of series is used in symbol drawing
+                //
+                // Visual color for each series is for the symbol draw
+                var visualColor = data.getItemVisual(dataIdx, 'color', true);
+                if (visualColor) {
+                    itemStyle.fill = visualColor;
+                }
+            }
+
+            each$1(region.geometries, function (geometry) {
+                if (geometry.type !== 'polygon') {
+                    return;
+                }
+                compoundPath.shape.paths.push(new Polygon({
+                    shape: {
+                        points: geometry.exterior
+                    }
+                }));
+
+                for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); i++) {
+                    compoundPath.shape.paths.push(new Polygon({
+                        shape: {
+                            points: geometry.interiors[i]
+                        }
+                    }));
+                }
+            });
+
+            compoundPath.setStyle(itemStyle);
+            compoundPath.style.strokeNoScale = true;
+            compoundPath.culling = true;
+            // Label
+            var showLabel = labelModel.get('show');
+            var hoverShowLabel = hoverLabelModel.get('show');
+
+            var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));
+            var itemLayout = data && data.getItemLayout(dataIdx);
+            // In the following cases label will be drawn
+            // 1. In map series and data value is NaN
+            // 2. In geo component
+            // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout
+            if (
+                (isGeo || isDataNaN && (showLabel || hoverShowLabel))
+                || (itemLayout && itemLayout.showLabel)
+                ) {
+                var query = !isGeo ? dataIdx : region.name;
+                var labelFetcher;
+
+                // Consider dataIdx not found.
+                if (!data || dataIdx >= 0) {
+                    labelFetcher = mapOrGeoModel;
+                }
+
+                var textEl = new Text({
+                    position: region.center.slice(),
+                    scale: [1 / scale[0], 1 / scale[1]],
+                    z2: 10,
+                    silent: true
+                });
+
+                setLabelStyle(
+                    textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel,
+                    {
+                        labelFetcher: labelFetcher,
+                        labelDataIndex: query,
+                        defaultText: region.name,
+                        useInsideStyle: false
+                    },
+                    {
+                        textAlign: 'center',
+                        textVerticalAlign: 'middle'
+                    }
+                );
+
+                regionGroup.add(textEl);
+            }
+
+            // setItemGraphicEl, setHoverStyle after all polygons and labels
+            // are added to the rigionGroup
+            if (data) {
+                data.setItemGraphicEl(dataIdx, regionGroup);
+            }
+            else {
+                var regionModel = mapOrGeoModel.getRegionModel(region.name);
+                // Package custom mouse event for geo component
+                compoundPath.eventData = {
+                    componentType: 'geo',
+                    geoIndex: mapOrGeoModel.componentIndex,
+                    name: region.name,
+                    region: (regionModel && regionModel.option) || {}
+                };
+            }
+
+            var groupRegions = regionGroup.__regions || (regionGroup.__regions = []);
+            groupRegions.push(region);
+
+            setHoverStyle(
+                regionGroup,
+                hoverItemStyle,
+                {hoverSilentOnTouch: !!mapOrGeoModel.get('selectedMode')}
+            );
+
+            group.add(regionGroup);
+        });
+
+        this._updateController(mapOrGeoModel, ecModel, api);
+
+        updateMapSelectHandler(this, mapOrGeoModel, group, api, fromView);
+
+        updateMapSelected(mapOrGeoModel, group);
+    },
+
+    remove: function () {
+        this.group.removeAll();
+        this._controller.dispose();
+        this._controllerHost = {};
+    },
+
+    _updateController: function (mapOrGeoModel, ecModel, api) {
+        var geo = mapOrGeoModel.coordinateSystem;
+        var controller = this._controller;
+        var controllerHost = this._controllerHost;
+
+        controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');
+        controllerHost.zoom = geo.getZoom();
+
+        // roamType is will be set default true if it is null
+        controller.enable(mapOrGeoModel.get('roam') || false);
+        var mainType = mapOrGeoModel.mainType;
+
+        function makeActionBase() {
+            var action = {
+                type: 'geoRoam',
+                componentType: mainType
+            };
+            action[mainType + 'Id'] = mapOrGeoModel.id;
+            return action;
+        }
+
+        controller.off('pan').on('pan', function (dx, dy) {
+            this._mouseDownFlag = false;
+
+            updateViewOnPan(controllerHost, dx, dy);
+
+            api.dispatchAction(extend(makeActionBase(), {
+                dx: dx,
+                dy: dy
+            }));
+        }, this);
+
+        controller.off('zoom').on('zoom', function (zoom, mouseX, mouseY) {
+            this._mouseDownFlag = false;
+
+            updateViewOnZoom(controllerHost, zoom, mouseX, mouseY);
+
+            api.dispatchAction(extend(makeActionBase(), {
+                zoom: zoom,
+                originX: mouseX,
+                originY: mouseY
+            }));
+
+            if (this._updateGroup) {
+                var group = this.group;
+                var scale = group.scale;
+                group.traverse(function (el) {
+                    if (el.type === 'text') {
+                        el.attr('scale', [1 / scale[0], 1 / scale[1]]);
+                    }
+                });
+            }
+        }, this);
+
+        controller.setPointerChecker(function (e, x, y) {
+            return geo.getViewRectAfterRoam().contain(x, y)
+                && !onIrrelevantElement(e, api, mapOrGeoModel);
+        });
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendChartView({
+
+    type: 'map',
+
+    render: function (mapModel, ecModel, api, payload) {
+        // Not render if it is an toggleSelect action from self
+        if (payload && payload.type === 'mapToggleSelect'
+            && payload.from === this.uid
+        ) {
+            return;
+        }
+
+        var group = this.group;
+        group.removeAll();
+
+        if (mapModel.getHostGeoModel()) {
+            return;
+        }
+
+        // Not update map if it is an roam action from self
+        if (!(payload && payload.type === 'geoRoam'
+                && payload.componentType === 'series'
+                && payload.seriesId === mapModel.id
+            )
+        ) {
+            if (mapModel.needsDrawMap) {
+                var mapDraw = this._mapDraw || new MapDraw(api, true);
+                group.add(mapDraw.group);
+
+                mapDraw.draw(mapModel, ecModel, api, this, payload);
+
+                this._mapDraw = mapDraw;
+            }
+            else {
+                // Remove drawed map
+                this._mapDraw && this._mapDraw.remove();
+                this._mapDraw = null;
+            }
+        }
+        else {
+            var mapDraw = this._mapDraw;
+            mapDraw && group.add(mapDraw.group);
+        }
+
+        mapModel.get('showLegendSymbol') && ecModel.getComponent('legend')
+            && this._renderSymbols(mapModel, ecModel, api);
+    },
+
+    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 (mapModel, ecModel, api) {
+        var originalData = mapModel.originalData;
+        var group = this.group;
+
+        originalData.each(originalData.mapDimension('value'), function (value, idx) {
+            if (isNaN(value)) {
+                return;
+            }
+
+            var layout = originalData.getItemLayout(idx);
+
+            if (!layout || !layout.point) {
+                // Not exists in map
+                return;
+            }
+
+            var point = layout.point;
+            var offset = layout.offset;
+
+            var circle = new Circle({
+                style: {
+                    // Because the special of map draw.
+                    // Which needs statistic of multiple series and draw on one map.
+                    // And each series also need a symbol with legend color
+                    //
+                    // Layout and visual are put one the different data
+                    fill: mapModel.getData().getVisual('color')
+                },
+                shape: {
+                    cx: point[0] + offset * 9,
+                    cy: point[1],
+                    r: 3
+                },
+                silent: true,
+                // Do not overlap the first series, on which labels are displayed.
+                z2: !offset ? 10 : 8
+            });
+
+            // First data on the same region
+            if (!offset) {
+                var fullData = mapModel.mainSeries.getData();
+                var name = originalData.getName(idx);
+
+                var fullIndex = fullData.indexOfName(name);
+
+                var itemModel = originalData.getItemModel(idx);
+                var labelModel = itemModel.getModel('label');
+                var hoverLabelModel = itemModel.getModel('emphasis.label');
+
+                var polygonGroups = fullData.getItemGraphicEl(fullIndex);
+
+                var normalText = retrieve2(
+                    mapModel.getFormattedLabel(idx, 'normal'),
+                    name
+                );
+                var emphasisText = retrieve2(
+                    mapModel.getFormattedLabel(idx, 'emphasis'),
+                    normalText
+                );
+
+                var onEmphasis = function () {
+                    var hoverStyle = setTextStyle({}, hoverLabelModel, {
+                        text: hoverLabelModel.get('show') ? emphasisText : null
+                    }, {isRectText: true, useInsideStyle: false}, true);
+                    circle.style.extendFrom(hoverStyle);
+                    // Make label upper than others if overlaps.
+                    circle.__mapOriginalZ2 = circle.z2;
+                    circle.z2 += 1;
+                };
+
+                var onNormal = function () {
+                    setTextStyle(circle.style, labelModel, {
+                        text: labelModel.get('show') ? normalText : null,
+                        textPosition: labelModel.getShallow('position') || 'bottom'
+                    }, {isRectText: true, useInsideStyle: false});
+
+                    if (circle.__mapOriginalZ2 != null) {
+                        circle.z2 = circle.__mapOriginalZ2;
+                        circle.__mapOriginalZ2 = null;
+                    }
+                };
+
+                polygonGroups.on('mouseover', onEmphasis)
+                    .on('mouseout', onNormal)
+                    .on('emphasis', onEmphasis)
+                    .on('normal', onNormal);
+
+                onNormal();
+            }
+
+            group.add(circle);
+        });
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/coord/View} view
+ * @param {Object} payload
+ * @param {Object} [zoomLimit]
+ */
+function updateCenterAndZoom(
+    view, payload, zoomLimit
+) {
+    var previousZoom = view.getZoom();
+    var center = view.getCenter();
+    var zoom = payload.zoom;
+
+    var point = view.dataToPoint(center);
+
+    if (payload.dx != null && payload.dy != null) {
+        point[0] -= payload.dx;
+        point[1] -= payload.dy;
+
+        var center = view.pointToData(point);
+        view.setCenter(center);
+    }
+    if (zoom != null) {
+        if (zoomLimit) {
+            var zoomMin = zoomLimit.min || 0;
+            var zoomMax = zoomLimit.max || Infinity;
+            zoom = Math.max(
+                Math.min(previousZoom * zoom, zoomMax),
+                zoomMin
+            ) / previousZoom;
+        }
+
+        // Zoom on given point(originX, originY)
+        view.scale[0] *= zoom;
+        view.scale[1] *= zoom;
+        var position = view.position;
+        var fixX = (payload.originX - position[0]) * (zoom - 1);
+        var fixY = (payload.originY - position[1]) * (zoom - 1);
+
+        position[0] -= fixX;
+        position[1] -= fixY;
+
+        view.updateTransform();
+        // Get the new center
+        var center = view.pointToData(point);
+        view.setCenter(center);
+        view.setZoom(zoom * previousZoom);
+    }
+
+    return {
+        center: view.getCenter(),
+        zoom: view.getZoom()
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @payload
+ * @property {string} [componentType=series]
+ * @property {number} [dx]
+ * @property {number} [dy]
+ * @property {number} [zoom]
+ * @property {number} [originX]
+ * @property {number} [originY]
+ */
+registerAction({
+    type: 'geoRoam',
+    event: 'geoRoam',
+    update: 'updateTransform'
+}, function (payload, ecModel) {
+    var componentType = payload.componentType || 'series';
+
+    ecModel.eachComponent(
+        { mainType: componentType, query: payload },
+        function (componentModel) {
+            var geo = componentModel.coordinateSystem;
+            if (geo.type !== 'geo') {
+                return;
+            }
+
+            var res = updateCenterAndZoom(
+                geo, payload, componentModel.get('scaleLimit')
+            );
+
+            componentModel.setCenter
+                && componentModel.setCenter(res.center);
+
+            componentModel.setZoom
+                && componentModel.setZoom(res.zoom);
+
+            // All map series with same `map` use the same geo coordinate system
+            // So the center and zoom must be in sync. Include the series not selected by legend
+            if (componentType === 'series') {
+                each$1(componentModel.seriesGroup, function (seriesModel) {
+                    seriesModel.setCenter(res.center);
+                    seriesModel.setZoom(res.zoom);
+                });
+            }
+        }
+    );
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var mapSymbolLayout = function (ecModel) {
+
+    var processedMapType = {};
+
+    ecModel.eachSeriesByType('map', function (mapSeries) {
+        var mapType = mapSeries.getMapType();
+        if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {
+            return;
+        }
+
+        var mapSymbolOffsets = {};
+
+        each$1(mapSeries.seriesGroup, function (subMapSeries) {
+            var geo = subMapSeries.coordinateSystem;
+            var data = subMapSeries.originalData;
+            if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {
+                data.each(data.mapDimension('value'), function (value, idx) {
+                    var name = data.getName(idx);
+                    var region = geo.getRegion(name);
+
+                    // If input series.data is [11, 22, '-'/null/undefined, 44],
+                    // it will be filled with NaN: [11, 22, NaN, 44] and NaN will
+                    // not be drawn. So here must validate if value is NaN.
+                    if (!region || isNaN(value)) {
+                        return;
+                    }
+
+                    var offset = mapSymbolOffsets[name] || 0;
+
+                    var point = geo.dataToPoint(region.center);
+
+                    mapSymbolOffsets[name] = offset + 1;
+
+                    data.setItemLayout(idx, {
+                        point: point,
+                        offset: offset
+                    });
+                });
+            }
+        });
+
+        // Show label of those region not has legendSymbol(which is offset 0)
+        var data = mapSeries.getData();
+        data.each(function (idx) {
+            var name = data.getName(idx);
+            var layout = data.getItemLayout(idx) || {};
+            layout.showLabel = !mapSymbolOffsets[name];
+            data.setItemLayout(idx, layout);
+        });
+
+        processedMapType[mapType] = true;
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var mapVisual = function (ecModel) {
+    ecModel.eachSeriesByType('map', function (seriesModel) {
+        var colorList = seriesModel.get('color');
+        var itemStyleModel = seriesModel.getModel('itemStyle');
+
+        var areaColor = itemStyleModel.get('areaColor');
+        var color = itemStyleModel.get('color')
+            || colorList[seriesModel.seriesIndex % colorList.length];
+
+        seriesModel.getData().setVisual({
+            'areaColor': areaColor,
+            'color': color
+        });
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME 公用?
+/**
+ * @param {Array.<module:echarts/data/List>} datas
+ * @param {string} statisticType 'average' 'sum'
+ * @inner
+ */
+function dataStatistics(datas, statisticType) {
+    var dataNameMap = {};
+
+    each$1(datas, function (data) {
+        data.each(data.mapDimension('value'), function (value, idx) {
+            // Add prefix to avoid conflict with Object.prototype.
+            var mapKey = 'ec-' + data.getName(idx);
+            dataNameMap[mapKey] = dataNameMap[mapKey] || [];
+            if (!isNaN(value)) {
+                dataNameMap[mapKey].push(value);
+            }
+        });
+    });
+
+    return datas[0].map(datas[0].mapDimension('value'), function (value, idx) {
+        var mapKey = 'ec-' + datas[0].getName(idx);
+        var sum = 0;
+        var min = Infinity;
+        var max = -Infinity;
+        var len = dataNameMap[mapKey].length;
+        for (var i = 0; i < len; i++) {
+            min = Math.min(min, dataNameMap[mapKey][i]);
+            max = Math.max(max, dataNameMap[mapKey][i]);
+            sum += dataNameMap[mapKey][i];
+        }
+        var result;
+        if (statisticType === 'min') {
+            result = min;
+        }
+        else if (statisticType === 'max') {
+            result = max;
+        }
+        else if (statisticType === 'average') {
+            result = sum / len;
+        }
+        else {
+            result = sum;
+        }
+        return len === 0 ? NaN : result;
+    });
+}
+
+var mapDataStatistic = function (ecModel) {
+    var seriesGroups = {};
+    ecModel.eachSeriesByType('map', function (seriesModel) {
+        var hostGeoModel = seriesModel.getHostGeoModel();
+        var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();
+        (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);
+    });
+
+    each$1(seriesGroups, function (seriesList, key) {
+        var data = dataStatistics(
+            map(seriesList, function (seriesModel) {
+                return seriesModel.getData();
+            }),
+            seriesList[0].get('mapValueCalculation')
+        );
+
+        for (var i = 0; i < seriesList.length; i++) {
+            seriesList[i].originalData = seriesList[i].getData();
+        }
+
+        // FIXME Put where?
+        for (var i = 0; i < seriesList.length; i++) {
+            seriesList[i].seriesGroup = seriesList;
+            seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();
+
+            seriesList[i].setData(data.cloneShallow());
+            seriesList[i].mainSeries = seriesList[0];
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var backwardCompat$2 = function (option) {
+    // Save geoCoord
+    var mapSeries = [];
+    each$1(option.series, function (seriesOpt) {
+        if (seriesOpt && seriesOpt.type === 'map') {
+            mapSeries.push(seriesOpt);
+            seriesOpt.map = seriesOpt.map || seriesOpt.mapType;
+            // Put x, y, width, height, x2, y2 in the top level
+            defaults(seriesOpt, seriesOpt.mapLocation);
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerLayout(mapSymbolLayout);
+registerVisual(mapVisual);
+registerProcessor(PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);
+registerPreprocessor(backwardCompat$2);
+
+createDataSelectAction('map', [{
+    type: 'mapToggleSelect',
+    event: 'mapselectchanged',
+    method: 'toggleSelected'
+}, {
+    type: 'mapSelect',
+    event: 'mapselected',
+    method: 'select'
+}, {
+    type: 'mapUnSelect',
+    event: 'mapunselected',
+    method: 'unSelect'
+}]);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Link lists and struct (graph or tree)
+ */
+
+var each$7 = each$1;
+
+var DATAS = '\0__link_datas';
+var MAIN_DATA = '\0__link_mainData';
+
+// Caution:
+// In most case, either list or its shallow clones (see list.cloneShallow)
+// is active in echarts process. So considering heap memory consumption,
+// we do not clone tree or graph, but share them among list and its shallow clones.
+// But in some rare case, we have to keep old list (like do animation in chart). So
+// please take care that both the old list and the new list share the same tree/graph.
+
+/**
+ * @param {Object} opt
+ * @param {module:echarts/data/List} opt.mainData
+ * @param {Object} [opt.struct] For example, instance of Graph or Tree.
+ * @param {string} [opt.structAttr] designation: list[structAttr] = struct;
+ * @param {Object} [opt.datas] {dataType: data},
+ *                 like: {node: nodeList, edge: edgeList}.
+ *                 Should contain mainData.
+ * @param {Object} [opt.datasAttr] {dataType: attr},
+ *                 designation: struct[datasAttr[dataType]] = list;
+ */
+function linkList(opt) {
+    var mainData = opt.mainData;
+    var datas = opt.datas;
+
+    if (!datas) {
+        datas = {main: mainData};
+        opt.datasAttr = {main: 'data'};
+    }
+    opt.datas = opt.mainData = null;
+
+    linkAll(mainData, datas, opt);
+
+    // Porxy data original methods.
+    each$7(datas, function (data) {
+        each$7(mainData.TRANSFERABLE_METHODS, function (methodName) {
+            data.wrapMethod(methodName, curry(transferInjection, opt));
+        });
+
+    });
+
+    // Beyond transfer, additional features should be added to `cloneShallow`.
+    mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt));
+
+    // Only mainData trigger change, because struct.update may trigger
+    // another changable methods, which may bring about dead lock.
+    each$7(mainData.CHANGABLE_METHODS, function (methodName) {
+        mainData.wrapMethod(methodName, curry(changeInjection, opt));
+    });
+
+    // Make sure datas contains mainData.
+    assert$1(datas[mainData.dataType] === mainData);
+}
+
+function transferInjection(opt, res) {
+    if (isMainData(this)) {
+        // Transfer datas to new main data.
+        var datas = extend({}, this[DATAS]);
+        datas[this.dataType] = res;
+        linkAll(res, datas, opt);
+    }
+    else {
+        // Modify the reference in main data to point newData.
+        linkSingle(res, this.dataType, this[MAIN_DATA], opt);
+    }
+    return res;
+}
+
+function changeInjection(opt, res) {
+    opt.struct && opt.struct.update(this);
+    return res;
+}
+
+function cloneShallowInjection(opt, res) {
+    // cloneShallow, which brings about some fragilities, may be inappropriate
+    // to be exposed as an API. So for implementation simplicity we can make
+    // the restriction that cloneShallow of not-mainData should not be invoked
+    // outside, but only be invoked here.
+    each$7(res[DATAS], function (data, dataType) {
+        data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);
+    });
+    return res;
+}
+
+/**
+ * Supplement method to List.
+ *
+ * @public
+ * @param {string} [dataType] If not specified, return mainData.
+ * @return {module:echarts/data/List}
+ */
+function getLinkedData(dataType) {
+    var mainData = this[MAIN_DATA];
+    return (dataType == null || mainData == null)
+        ? mainData
+        : mainData[DATAS][dataType];
+}
+
+function isMainData(data) {
+    return data[MAIN_DATA] === data;
+}
+
+function linkAll(mainData, datas, opt) {
+    mainData[DATAS] = {};
+    each$7(datas, function (data, dataType) {
+        linkSingle(data, dataType, mainData, opt);
+    });
+}
+
+function linkSingle(data, dataType, mainData, opt) {
+    mainData[DATAS][dataType] = data;
+    data[MAIN_DATA] = mainData;
+    data.dataType = dataType;
+
+    if (opt.struct) {
+        data[opt.structAttr] = opt.struct;
+        opt.struct[opt.datasAttr[dataType]] = data;
+    }
+
+    // Supplement method.
+    data.getLinkedData = getLinkedData;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Tree data structure
+ *
+ * @module echarts/data/Tree
+ */
+
+/**
+ * @constructor module:echarts/data/Tree~TreeNode
+ * @param {string} name
+ * @param {module:echarts/data/Tree} hostTree
+ */
+var TreeNode = function (name, hostTree) {
+    /**
+     * @type {string}
+     */
+    this.name = name || '';
+
+    /**
+     * Depth of node
+     *
+     * @type {number}
+     * @readOnly
+     */
+    this.depth = 0;
+
+    /**
+     * Height of the subtree rooted at this node.
+     * @type {number}
+     * @readOnly
+     */
+    this.height = 0;
+
+    /**
+     * @type {module:echarts/data/Tree~TreeNode}
+     * @readOnly
+     */
+    this.parentNode = null;
+
+    /**
+     * Reference to list item.
+     * Do not persistent dataIndex outside,
+     * besause it may be changed by list.
+     * If dataIndex -1,
+     * this node is logical deleted (filtered) in list.
+     *
+     * @type {Object}
+     * @readOnly
+     */
+    this.dataIndex = -1;
+
+    /**
+     * @type {Array.<module:echarts/data/Tree~TreeNode>}
+     * @readOnly
+     */
+    this.children = [];
+
+    /**
+     * @type {Array.<module:echarts/data/Tree~TreeNode>}
+     * @pubilc
+     */
+    this.viewChildren = [];
+
+    /**
+     * @type {moduel:echarts/data/Tree}
+     * @readOnly
+     */
+    this.hostTree = hostTree;
+};
+
+TreeNode.prototype = {
+
+    constructor: TreeNode,
+
+    /**
+     * The node is removed.
+     * @return {boolean} is removed.
+     */
+    isRemoved: function () {
+        return this.dataIndex < 0;
+    },
+
+    /**
+     * Travel this subtree (include this node).
+     * Usage:
+     *    node.eachNode(function () { ... }); // preorder
+     *    node.eachNode('preorder', function () { ... }); // preorder
+     *    node.eachNode('postorder', function () { ... }); // postorder
+     *    node.eachNode(
+     *        {order: 'postorder', attr: 'viewChildren'},
+     *        function () { ... }
+     *    ); // postorder
+     *
+     * @param {(Object|string)} options If string, means order.
+     * @param {string=} options.order 'preorder' or 'postorder'
+     * @param {string=} options.attr 'children' or 'viewChildren'
+     * @param {Function} cb If in preorder and return false,
+     *                      its subtree will not be visited.
+     * @param {Object} [context]
+     */
+    eachNode: function (options, cb, context) {
+        if (typeof options === 'function') {
+            context = cb;
+            cb = options;
+            options = null;
+        }
+
+        options = options || {};
+        if (isString(options)) {
+            options = {order: options};
+        }
+
+        var order = options.order || 'preorder';
+        var children = this[options.attr || 'children'];
+
+        var suppressVisitSub;
+        order === 'preorder' && (suppressVisitSub = cb.call(context, this));
+
+        for (var i = 0; !suppressVisitSub && i < children.length; i++) {
+            children[i].eachNode(options, cb, context);
+        }
+
+        order === 'postorder' && cb.call(context, this);
+    },
+
+    /**
+     * Update depth and height of this subtree.
+     *
+     * @param  {number} depth
+     */
+    updateDepthAndHeight: function (depth) {
+        var height = 0;
+        this.depth = depth;
+        for (var i = 0; i < this.children.length; i++) {
+            var child = this.children[i];
+            child.updateDepthAndHeight(depth + 1);
+            if (child.height > height) {
+                height = child.height;
+            }
+        }
+        this.height = height + 1;
+    },
+
+    /**
+     * @param  {string} id
+     * @return {module:echarts/data/Tree~TreeNode}
+     */
+    getNodeById: function (id) {
+        if (this.getId() === id) {
+            return this;
+        }
+        for (var i = 0, children = this.children, len = children.length; i < len; i++) {
+            var res = children[i].getNodeById(id);
+            if (res) {
+                return res;
+            }
+        }
+    },
+
+    /**
+     * @param {module:echarts/data/Tree~TreeNode} node
+     * @return {boolean}
+     */
+    contains: function (node) {
+        if (node === this) {
+            return true;
+        }
+        for (var i = 0, children = this.children, len = children.length; i < len; i++) {
+            var res = children[i].contains(node);
+            if (res) {
+                return res;
+            }
+        }
+    },
+
+    /**
+     * @param {boolean} includeSelf Default false.
+     * @return {Array.<module:echarts/data/Tree~TreeNode>} order: [root, child, grandchild, ...]
+     */
+    getAncestors: function (includeSelf) {
+        var ancestors = [];
+        var node = includeSelf ? this : this.parentNode;
+        while (node) {
+            ancestors.push(node);
+            node = node.parentNode;
+        }
+        ancestors.reverse();
+        return ancestors;
+    },
+
+    /**
+     * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3
+     * @return {number} Value.
+     */
+    getValue: function (dimension) {
+        var data = this.hostTree.data;
+        return data.get(data.getDimension(dimension || 'value'), this.dataIndex);
+    },
+
+    /**
+     * @param {Object} layout
+     * @param {boolean=} [merge=false]
+     */
+    setLayout: function (layout, merge$$1) {
+        this.dataIndex >= 0
+            && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge$$1);
+    },
+
+    /**
+     * @return {Object} layout
+     */
+    getLayout: function () {
+        return this.hostTree.data.getItemLayout(this.dataIndex);
+    },
+
+    /**
+     * @param {string} [path]
+     * @return {module:echarts/model/Model}
+     */
+    getModel: function (path) {
+        if (this.dataIndex < 0) {
+            return;
+        }
+        var hostTree = this.hostTree;
+        var itemModel = hostTree.data.getItemModel(this.dataIndex);
+        var levelModel = this.getLevelModel();
+        var leavesModel;
+        if (!levelModel && (this.children.length === 0 || (this.children.length !== 0 && this.isExpand === false))) {
+            leavesModel = this.getLeavesModel();
+        }
+        return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path));
+    },
+
+    /**
+     * @return {module:echarts/model/Model}
+     */
+    getLevelModel: function () {
+        return (this.hostTree.levelModels || [])[this.depth];
+    },
+
+    /**
+     * @return {module:echarts/model/Model}
+     */
+    getLeavesModel: function () {
+        return this.hostTree.leavesModel;
+    },
+
+    /**
+     * @example
+     *  setItemVisual('color', color);
+     *  setItemVisual({
+     *      'color': color
+     *  });
+     */
+    setVisual: function (key, value) {
+        this.dataIndex >= 0
+            && this.hostTree.data.setItemVisual(this.dataIndex, key, value);
+    },
+
+    /**
+     * Get item visual
+     */
+    getVisual: function (key, ignoreParent) {
+        return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent);
+    },
+
+    /**
+     * @public
+     * @return {number}
+     */
+    getRawIndex: function () {
+        return this.hostTree.data.getRawIndex(this.dataIndex);
+    },
+
+    /**
+     * @public
+     * @return {string}
+     */
+    getId: function () {
+        return this.hostTree.data.getId(this.dataIndex);
+    },
+
+    /**
+     * if this is an ancestor of another node
+     *
+     * @public
+     * @param {TreeNode} node another node
+     * @return {boolean} if is ancestor
+     */
+    isAncestorOf: function (node) {
+        var parent = node.parentNode;
+        while (parent) {
+            if (parent === this) {
+                return true;
+            }
+            parent = parent.parentNode;
+        }
+        return false;
+    },
+
+    /**
+     * if this is an descendant of another node
+     *
+     * @public
+     * @param {TreeNode} node another node
+     * @return {boolean} if is descendant
+     */
+    isDescendantOf: function (node) {
+        return node !== this && node.isAncestorOf(this);
+    }
+};
+
+/**
+ * @constructor
+ * @alias module:echarts/data/Tree
+ * @param {module:echarts/model/Model} hostModel
+ * @param {Array.<Object>} levelOptions
+ * @param {Object} leavesOption
+ */
+function Tree(hostModel, levelOptions, leavesOption) {
+    /**
+     * @type {module:echarts/data/Tree~TreeNode}
+     * @readOnly
+     */
+    this.root;
+
+    /**
+     * @type {module:echarts/data/List}
+     * @readOnly
+     */
+    this.data;
+
+    /**
+     * Index of each item is the same as the raw index of coresponding list item.
+     * @private
+     * @type {Array.<module:echarts/data/Tree~TreeNode}
+     */
+    this._nodes = [];
+
+    /**
+     * @private
+     * @readOnly
+     * @type {module:echarts/model/Model}
+     */
+    this.hostModel = hostModel;
+
+    /**
+     * @private
+     * @readOnly
+     * @type {Array.<module:echarts/model/Model}
+     */
+    this.levelModels = map(levelOptions || [], function (levelDefine) {
+        return new Model(levelDefine, hostModel, hostModel.ecModel);
+    });
+
+    this.leavesModel = new Model(leavesOption || {}, hostModel, hostModel.ecModel);
+}
+
+Tree.prototype = {
+
+    constructor: Tree,
+
+    type: 'tree',
+
+    /**
+     * Travel this subtree (include this node).
+     * Usage:
+     *    node.eachNode(function () { ... }); // preorder
+     *    node.eachNode('preorder', function () { ... }); // preorder
+     *    node.eachNode('postorder', function () { ... }); // postorder
+     *    node.eachNode(
+     *        {order: 'postorder', attr: 'viewChildren'},
+     *        function () { ... }
+     *    ); // postorder
+     *
+     * @param {(Object|string)} options If string, means order.
+     * @param {string=} options.order 'preorder' or 'postorder'
+     * @param {string=} options.attr 'children' or 'viewChildren'
+     * @param {Function} cb
+     * @param {Object}   [context]
+     */
+    eachNode: function(options, cb, context) {
+        this.root.eachNode(options, cb, context);
+    },
+
+    /**
+     * @param {number} dataIndex
+     * @return {module:echarts/data/Tree~TreeNode}
+     */
+    getNodeByDataIndex: function (dataIndex) {
+        var rawIndex = this.data.getRawIndex(dataIndex);
+        return this._nodes[rawIndex];
+    },
+
+    /**
+     * @param {string} name
+     * @return {module:echarts/data/Tree~TreeNode}
+     */
+    getNodeByName: function (name) {
+        return this.root.getNodeByName(name);
+    },
+
+    /**
+     * Update item available by list,
+     * when list has been performed options like 'filterSelf' or 'map'.
+     */
+    update: function () {
+        var data = this.data;
+        var nodes = this._nodes;
+
+        for (var i = 0, len = nodes.length; i < len; i++) {
+            nodes[i].dataIndex = -1;
+        }
+
+        for (var i = 0, len = data.count(); i < len; i++) {
+            nodes[data.getRawIndex(i)].dataIndex = i;
+        }
+    },
+
+    /**
+     * Clear all layouts
+     */
+    clearLayouts: function () {
+        this.data.clearItemLayouts();
+    }
+};
+
+/**
+ * data node format:
+ * {
+ *     name: ...
+ *     value: ...
+ *     children: [
+ *         {
+ *             name: ...
+ *             value: ...
+ *             children: ...
+ *         },
+ *         ...
+ *     ]
+ * }
+ *
+ * @static
+ * @param {Object} dataRoot Root node.
+ * @param {module:echarts/model/Model} hostModel
+ * @param {Object} treeOptions
+ * @param {Array.<Object>} treeOptions.levels
+ * @param {Array.<Object>} treeOptions.leaves
+ * @return module:echarts/data/Tree
+ */
+Tree.createTree = function (dataRoot, hostModel, treeOptions) {
+
+    var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves);
+    var listData = [];
+    var dimMax = 1;
+
+    buildHierarchy(dataRoot);
+
+    function buildHierarchy(dataNode, parentNode) {
+        var value = dataNode.value;
+        dimMax = Math.max(dimMax, isArray(value) ? value.length : 1);
+
+        listData.push(dataNode);
+
+        var node = new TreeNode(dataNode.name, tree);
+        parentNode
+            ? addChild(node, parentNode)
+            : (tree.root = node);
+
+        tree._nodes.push(node);
+
+        var children = dataNode.children;
+        if (children) {
+            for (var i = 0; i < children.length; i++) {
+                buildHierarchy(children[i], node);
+            }
+        }
+    }
+
+    tree.root.updateDepthAndHeight(0);
+
+    var dimensionsInfo = createDimensions(listData, {
+        coordDimensions: ['value'],
+        dimensionsCount: dimMax
+    });
+
+    var list = new List(dimensionsInfo, hostModel);
+    list.initData(listData);
+
+    linkList({
+        mainData: list,
+        struct: tree,
+        structAttr: 'tree'
+    });
+
+    tree.update();
+
+    return tree;
+};
+
+/**
+ * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote,
+ * so this function is not ready and not necessary to be public.
+ *
+ * @param {(module:echarts/data/Tree~TreeNode|Object)} child
+ */
+function addChild(child, node) {
+    var children = node.children;
+    if (child.parentNode === node) {
+        return;
+    }
+
+    children.push(child);
+    child.parentNode = node;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Create data struct and define tree view's series model
+ */
+
+SeriesModel.extend({
+
+    type: 'series.tree',
+
+    layoutInfo: null,
+
+    // can support the position parameters 'left', 'top','right','bottom', 'width',
+    // 'height' in the setOption() with 'merge' mode normal.
+    layoutMode: 'box',
+
+    /**
+     * Init a tree data structure from data in option series
+     * @param  {Object} option  the object used to config echarts view
+     * @return {module:echarts/data/List} storage initial data
+     */
+    getInitialData: function (option) {
+
+        //create an virtual root
+        var root = {name: option.name, children: option.data};
+
+        var leaves = option.leaves || {};
+
+        var treeOption = {};
+
+        treeOption.leaves = leaves;
+
+        var tree = Tree.createTree(root, this, treeOption);
+
+        var treeDepth = 0;
+
+        tree.eachNode('preorder', function (node) {
+            if (node.depth > treeDepth) {
+                treeDepth = node.depth;
+            }
+        });
+
+        var expandAndCollapse = option.expandAndCollapse;
+        var expandTreeDepth = (expandAndCollapse && option.initialTreeDepth >= 0)
+            ? option.initialTreeDepth : treeDepth;
+
+        tree.root.eachNode('preorder', function (node) {
+            var item = node.hostTree.data.getRawDataItem(node.dataIndex);
+            // add item.collapsed != null, because users can collapse node original in the series.data.
+            node.isExpand = (item && item.collapsed != null)
+                ? !item.collapsed
+                : node.depth <= expandTreeDepth;
+        });
+
+        return tree.data;
+    },
+    
+    /**
+     * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'.
+     * @returns {string} orient
+     */
+    getOrient: function () {
+        var orient = this.get('orient');
+        if (orient === 'horizontal') {
+            orient = 'LR';
+        }
+        else if (orient === 'vertical') {
+            orient = 'TB';
+        }
+        return orient;
+    },
+
+    /**
+     * @override
+     * @param {number} dataIndex
+     */
+    formatTooltip: function (dataIndex) {
+        var tree = this.getData().tree;
+        var realRoot = tree.root.children[0];
+        var node = tree.getNodeByDataIndex(dataIndex);
+        var value = node.getValue();
+        var name = node.name;
+        while (node && (node !== realRoot)) {
+            name = node.parentNode.name + '.' + name;
+            node = node.parentNode;
+        }
+        return encodeHTML(name + (
+            (isNaN(value) || value == null) ? '' : ' : ' + value
+        ));
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+
+        // the position of the whole view
+        left: '12%',
+        top: '12%',
+        right: '12%',
+        bottom: '12%',
+
+        // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'
+        layout: 'orthogonal',
+
+        // The orient of orthoginal layout, can be setted to 'LR', 'TB', 'RL', 'BT'.
+        // and the backward compatibility configuration 'horizontal = LR', 'vertical = TB'.
+        orient: 'LR',
+
+        symbol: 'emptyCircle',
+
+        symbolSize: 7,
+
+        expandAndCollapse: true,
+
+        initialTreeDepth: 2,
+
+        lineStyle: {
+            color: '#ccc',
+            width: 1.5,
+            curveness: 0.5
+        },
+
+        itemStyle: {
+            color: 'lightsteelblue',
+            borderColor: '#c23531',
+            borderWidth: 1.5
+        },
+
+        label: {
+            show: true,
+            color: '#555'
+        },
+
+        leaves: {
+            label: {
+                show: true
+            }
+        },
+
+        animationEasing: 'linear',
+
+        animationDuration: 700,
+
+        animationDurationUpdate: 1000
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* The tree layout implementation references to d3.js
+* (https://github.com/d3/d3-hierarchy). The use of the source
+* code of this file is also subject to the terms and consitions
+* of its license (BSD-3Clause, see <echarts/src/licenses/LICENSE-d3>).
+*/
+
+/**
+ * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing
+ *       the tree.
+ * @see https://github.com/d3/d3-hierarchy
+ */
+
+/**
+ * Initialize all computational message for following algorithm
+ * @param  {module:echarts/data/Tree~TreeNode} root   The virtual root of the tree
+ */
+function init$2(root) {
+    root.hierNode = {
+        defaultAncestor: null,
+        ancestor: root,
+        prelim: 0,
+        modifier: 0,
+        change: 0,
+        shift: 0,
+        i: 0,
+        thread: null
+    };
+
+    var nodes = [root];
+    var node;
+    var children;
+
+    while (node = nodes.pop()) { // jshint ignore:line
+        children = node.children;
+        if (node.isExpand && children.length) {
+            var n = children.length;
+            for (var i = n - 1; i >= 0; i--) {
+                var child = children[i];
+                child.hierNode = {
+                    defaultAncestor: null,
+                    ancestor: child,
+                    prelim: 0,
+                    modifier: 0,
+                    change: 0,
+                    shift: 0,
+                    i: i,
+                    thread: null
+                };
+                nodes.push(child);
+            }
+        }
+    }
+}
+
+/**
+ * Computes a preliminary x coordinate for node. Before that, this function is
+ * applied recursively to the children of node, as well as the function
+ * apportion(). After spacing out the children by calling executeShifts(), the
+ * node is placed to the midpoint of its outermost children.
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ * @param {Function} separation
+ */
+function firstWalk(node, separation) {
+    var children = node.isExpand ? node.children : [];
+    var siblings = node.parentNode.children;
+    var subtreeW = node.hierNode.i ? siblings[node.hierNode.i -1] : null;
+    if (children.length) {
+        executeShifts(node);
+        var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;
+        if (subtreeW) {
+            node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);
+            node.hierNode.modifier = node.hierNode.prelim - midPoint;
+        }
+        else {
+            node.hierNode.prelim = midPoint;
+        }
+    }
+    else if (subtreeW) {
+        node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);
+    }
+    node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation);
+}
+
+
+/**
+ * Computes all real x-coordinates by summing up the modifiers recursively.
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ */
+function secondWalk(node) {
+    var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;
+    node.setLayout({x: nodeX}, true);
+    node.hierNode.modifier += node.parentNode.hierNode.modifier;
+}
+
+
+function separation(cb) {
+    return arguments.length ? cb : defaultSeparation;
+}
+
+/**
+ * Transform the common coordinate to radial coordinate
+ * @param  {number} x
+ * @param  {number} y
+ * @return {Object}
+ */
+function radialCoordinate(x, y) {
+    var radialCoor = {};
+    x -= Math.PI / 2;
+    radialCoor.x = y * Math.cos(x);
+    radialCoor.y = y * Math.sin(x);
+    return radialCoor;
+}
+
+/**
+ * Get the layout position of the whole view
+ * @param {module:echarts/model/Series} seriesModel  the model object of sankey series
+ * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call
+ * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view
+ */
+function getViewRect(seriesModel, api) {
+    return getLayoutRect(
+        seriesModel.getBoxLayoutParams(), {
+            width: api.getWidth(),
+            height: api.getHeight()
+        }
+    );
+}
+
+/**
+ * All other shifts, applied to the smaller subtrees between w- and w+, are
+ * performed by this function.
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ */
+function executeShifts(node) {
+    var children = node.children;
+    var n = children.length;
+    var shift = 0;
+    var change = 0;
+    while (--n >= 0) {
+        var child = children[n];
+        child.hierNode.prelim += shift;
+        child.hierNode.modifier += shift;
+        change += child.hierNode.change;
+        shift += child.hierNode.shift + change;
+    }
+}
+
+/**
+ * The core of the algorithm. Here, a new subtree is combined with the
+ * previous subtrees. Threads are used to traverse the inside and outside
+ * contours of the left and right subtree up to the highest common level.
+ * Whenever two nodes of the inside contours conflict, we compute the left
+ * one of the greatest uncommon ancestors using the function nextAncestor()
+ * and call moveSubtree() to shift the subtree and prepare the shifts of
+ * smaller subtrees. Finally, we add a new thread (if necessary).
+ * @param  {module:echarts/data/Tree~TreeNode} subtreeV
+ * @param  {module:echarts/data/Tree~TreeNode} subtreeW
+ * @param  {module:echarts/data/Tree~TreeNode} ancestor
+ * @param  {Function} separation
+ * @return {module:echarts/data/Tree~TreeNode}
+ */
+function apportion(subtreeV, subtreeW, ancestor, separation) {
+
+    if (subtreeW) {
+        var nodeOutRight = subtreeV;
+        var nodeInRight = subtreeV;
+        var nodeOutLeft = nodeInRight.parentNode.children[0];
+        var nodeInLeft = subtreeW;
+
+        var sumOutRight = nodeOutRight.hierNode.modifier;
+        var sumInRight = nodeInRight.hierNode.modifier;
+        var sumOutLeft = nodeOutLeft.hierNode.modifier;
+        var sumInLeft = nodeInLeft.hierNode.modifier;
+
+        while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) {
+            nodeOutRight = nextRight(nodeOutRight);
+            nodeOutLeft = nextLeft(nodeOutLeft);
+            nodeOutRight.hierNode.ancestor = subtreeV;
+            var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim
+                    - sumInRight + separation(nodeInLeft, nodeInRight);
+            if (shift > 0) {
+                moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);
+                sumInRight += shift;
+                sumOutRight += shift;
+            }
+            sumInLeft += nodeInLeft.hierNode.modifier;
+            sumInRight += nodeInRight.hierNode.modifier;
+            sumOutRight += nodeOutRight.hierNode.modifier;
+            sumOutLeft += nodeOutLeft.hierNode.modifier;
+        }
+        if (nodeInLeft && !nextRight(nodeOutRight)) {
+            nodeOutRight.hierNode.thread = nodeInLeft;
+            nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight;
+
+        }
+        if (nodeInRight && !nextLeft(nodeOutLeft)) {
+            nodeOutLeft.hierNode.thread = nodeInRight;
+            nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft;
+            ancestor = subtreeV;
+        }
+    }
+    return ancestor;
+}
+
+/**
+ * This function is used to traverse the right contour of a subtree.
+ * It returns the rightmost child of node or the thread of node. The function
+ * returns null if and only if node is on the highest depth of its subtree.
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ * @return {module:echarts/data/Tree~TreeNode}
+ */
+function nextRight(node) {
+    var children = node.children;
+    return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread;
+}
+
+/**
+ * This function is used to traverse the left contour of a subtree (or a subforest).
+ * It returns the leftmost child of node or the thread of node. The function
+ * returns null if and only if node is on the highest depth of its subtree.
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ * @return {module:echarts/data/Tree~TreeNode}
+ */
+function nextLeft(node) {
+    var children = node.children;
+    return children.length && node.isExpand ? children[0] : node.hierNode.thread;
+}
+
+/**
+ * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor.
+ * Otherwise, returns the specified ancestor.
+ * @param  {module:echarts/data/Tree~TreeNode} nodeInLeft
+ * @param  {module:echarts/data/Tree~TreeNode} node
+ * @param  {module:echarts/data/Tree~TreeNode} ancestor
+ * @return {module:echarts/data/Tree~TreeNode}
+ */
+function nextAncestor(nodeInLeft, node, ancestor) {
+    return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode
+        ? nodeInLeft.hierNode.ancestor : ancestor;
+}
+
+/**
+ * Shifts the current subtree rooted at wr. This is done by increasing prelim(w+) and modifier(w+) by shift.
+ * @param  {module:echarts/data/Tree~TreeNode} wl
+ * @param  {module:echarts/data/Tree~TreeNode} wr
+ * @param  {number} shift [description]
+ */
+function moveSubtree(wl, wr,shift) {
+    var change = shift / (wr.hierNode.i - wl.hierNode.i);
+    wr.hierNode.change -= change;
+    wr.hierNode.shift += shift;
+    wr.hierNode.modifier += shift;
+    wr.hierNode.prelim += shift;
+    wl.hierNode.change += change;
+}
+
+function defaultSeparation(node1, node2) {
+    return node1.parentNode === node2.parentNode ? 1 : 2;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file  This file used to draw tree view
+ */
+
+extendChartView({
+
+    type: 'tree',
+
+    /**
+     * Init the chart
+     * @override
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    init: function (ecModel, api) {
+
+        /**
+         * @private
+         * @type {module:echarts/data/Tree}
+         */
+        this._oldTree;
+
+        /**
+         * @private
+         * @type {module:zrender/container/Group}
+         */
+        this._mainGroup = new Group();
+
+        this.group.add(this._mainGroup);
+    },
+
+    render: function (seriesModel, ecModel, api, payload) {
+
+        var data = seriesModel.getData();
+
+        var layoutInfo = seriesModel.layoutInfo;
+
+        var group = this._mainGroup;
+
+        var layout = seriesModel.get('layout');
+
+        if (layout === 'radial') {
+            group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]);
+        }
+        else {
+            group.attr('position', [layoutInfo.x, layoutInfo.y]);
+        }
+
+        var oldData = this._data;
+
+        var seriesScope = {
+            expandAndCollapse: seriesModel.get('expandAndCollapse'),
+            layout: layout,
+            orient: seriesModel.getOrient(),
+            curvature: seriesModel.get('lineStyle.curveness'),
+            symbolRotate: seriesModel.get('symbolRotate'),
+            symbolOffset: seriesModel.get('symbolOffset'),
+            hoverAnimation: seriesModel.get('hoverAnimation'),
+            useNameLabel: true,
+            fadeIn: true
+        };
+
+        data.diff(oldData)
+            .add(function (newIdx) {
+                if (symbolNeedsDraw$1(data, newIdx)) {
+                    // create node and edge
+                    updateNode(data, newIdx, null, group, seriesModel, seriesScope);
+                }
+            })
+            .update(function (newIdx, oldIdx) {
+                var symbolEl = oldData.getItemGraphicEl(oldIdx);
+                if (!symbolNeedsDraw$1(data, newIdx)) {
+                    symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);
+                    return;
+                }
+                // update  node and edge
+                updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope);
+            })
+            .remove(function (oldIdx) {
+                var symbolEl = oldData.getItemGraphicEl(oldIdx);
+                // When remove a collapsed node of subtree, since the collapsed
+                // node haven't been initialized with a symbol element,
+                // you can't found it's symbol element through index.
+                // so if we want to remove the symbol element we should insure
+                // that the symbol element is not null.
+                if (symbolEl) {
+                    removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);
+                }
+            })
+            .execute();
+
+        if (seriesScope.expandAndCollapse === true) {
+            data.eachItemGraphicEl(function (el, dataIndex) {
+                el.off('click').on('click', function () {
+                    api.dispatchAction({
+                        type: 'treeExpandAndCollapse',
+                        seriesId: seriesModel.id,
+                        dataIndex: dataIndex
+                    });
+                });
+            });
+        }
+
+        this._data = data;
+    },
+
+    dispose: function () {},
+
+    remove: function () {
+        this._mainGroup.removeAll();
+        this._data = null;
+    }
+
+});
+
+function symbolNeedsDraw$1(data, dataIndex) {
+    var layout = data.getItemLayout(dataIndex);
+
+    return layout
+        && !isNaN(layout.x) && !isNaN(layout.y)
+        && data.getItemVisual(dataIndex, 'symbol') !== 'none';
+}
+
+function getTreeNodeStyle(node, itemModel, seriesScope) {
+    seriesScope.itemModel = itemModel;
+    seriesScope.itemStyle = itemModel.getModel('itemStyle').getItemStyle();
+    seriesScope.hoverItemStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();
+    seriesScope.lineStyle = itemModel.getModel('lineStyle').getLineStyle();
+    seriesScope.labelModel = itemModel.getModel('label');
+    seriesScope.hoverLabelModel = itemModel.getModel('emphasis.label');
+
+    if (node.isExpand === false && node.children.length !== 0) {
+        seriesScope.symbolInnerColor = seriesScope.itemStyle.fill;
+    }
+    else {
+        seriesScope.symbolInnerColor = '#fff';
+    }
+
+    return seriesScope;
+}
+
+function updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {
+    var isInit = !symbolEl;
+    var node = data.tree.getNodeByDataIndex(dataIndex);
+    var itemModel = node.getModel();
+    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);
+    var virtualRoot = data.tree.root;
+
+    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
+    var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);
+    var sourceLayout = source.getLayout();
+    var sourceOldLayout = sourceSymbolEl
+        ? {
+            x: sourceSymbolEl.position[0],
+            y: sourceSymbolEl.position[1],
+            rawX: sourceSymbolEl.__radialOldRawX,
+            rawY: sourceSymbolEl.__radialOldRawY
+        }
+        : sourceLayout;
+    var targetLayout = node.getLayout();
+
+    if (isInit) {
+        symbolEl = new SymbolClz$1(data, dataIndex, seriesScope);
+        symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]);
+    }
+    else {
+        symbolEl.updateData(data, dataIndex, seriesScope);
+    }
+
+    symbolEl.__radialOldRawX = symbolEl.__radialRawX;
+    symbolEl.__radialOldRawY = symbolEl.__radialRawY;
+    symbolEl.__radialRawX = targetLayout.rawX;
+    symbolEl.__radialRawY = targetLayout.rawY;
+
+    group.add(symbolEl);
+    data.setItemGraphicEl(dataIndex, symbolEl);
+    updateProps(symbolEl, {
+        position: [targetLayout.x, targetLayout.y]
+    }, seriesModel);
+
+    var symbolPath = symbolEl.getSymbolPath();
+
+    if (seriesScope.layout === 'radial') {
+        var realRoot = virtualRoot.children[0];
+        var rootLayout = realRoot.getLayout();
+        var length = realRoot.children.length;
+        var rad;
+        var isLeft;
+
+        if (targetLayout.x === rootLayout.x && node.isExpand === true) {
+            var center = {};
+            center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2;
+            center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2;
+            rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);
+            if (rad < 0) {
+                rad = Math.PI * 2 + rad;
+            }
+            isLeft = center.x < rootLayout.x;
+            if (isLeft) {
+                rad = rad - Math.PI;
+            }
+        }
+        else {
+            rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);
+            if (rad < 0) {
+                rad = Math.PI * 2 + rad;
+            }
+            if (node.children.length === 0 || (node.children.length !== 0 && node.isExpand === false)) {
+                isLeft = targetLayout.x < rootLayout.x;
+                if (isLeft) {
+                    rad = rad - Math.PI;
+                }
+            }
+            else {
+                isLeft = targetLayout.x > rootLayout.x;
+                if (!isLeft) {
+                    rad = rad - Math.PI;
+                }
+            }
+        }
+
+        var textPosition = isLeft ? 'left' : 'right';
+        symbolPath.setStyle({
+            textPosition: textPosition,
+            textRotation: -rad,
+            textOrigin: 'center',
+            verticalAlign: 'middle'
+        });
+    }
+
+    if (node.parentNode && node.parentNode !== virtualRoot) {
+        var edge = symbolEl.__edge;
+        if (!edge) {
+            edge = symbolEl.__edge = new BezierCurve({
+                shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout),
+                style: defaults({opacity: 0}, seriesScope.lineStyle)
+            });
+        }
+
+        updateProps(edge, {
+            shape: getEdgeShape(seriesScope, sourceLayout, targetLayout),
+            style: {opacity: 1}
+        }, seriesModel);
+
+        group.add(edge);
+    }
+}
+
+function removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {
+    var node = data.tree.getNodeByDataIndex(dataIndex);
+    var virtualRoot = data.tree.root;
+    var itemModel = node.getModel();
+    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);
+
+    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;
+    var sourceLayout;
+    while (sourceLayout = source.getLayout(), sourceLayout == null) {
+        source = source.parentNode === virtualRoot ? source : source.parentNode || source;
+    }
+
+    updateProps(symbolEl, {
+        position: [sourceLayout.x + 1, sourceLayout.y + 1]
+    }, seriesModel, function () {
+        group.remove(symbolEl);
+        data.setItemGraphicEl(dataIndex, null);
+    });
+
+    symbolEl.fadeOut(null, {keepLabel: true});
+
+    var edge = symbolEl.__edge;
+    if (edge) {
+        updateProps(edge, {
+            shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout),
+            style: {
+                opacity: 0
+            }
+        }, seriesModel, function () {
+            group.remove(edge);
+        });
+    }
+}
+
+function getEdgeShape(seriesScope, sourceLayout, targetLayout) {
+    var cpx1;
+    var cpy1;
+    var cpx2;
+    var cpy2;
+    var orient = seriesScope.orient;
+
+    if (seriesScope.layout === 'radial') {
+        var x1 = sourceLayout.rawX;
+        var y1 = sourceLayout.rawY;
+        var x2 = targetLayout.rawX;
+        var y2 = targetLayout.rawY;
+
+        var radialCoor1 = radialCoordinate(x1, y1);
+        var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature);
+        var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature);
+        var radialCoor4 = radialCoordinate(x2, y2);
+
+        return {
+            x1: radialCoor1.x,
+            y1: radialCoor1.y,
+            x2: radialCoor4.x,
+            y2: radialCoor4.y,
+            cpx1: radialCoor2.x,
+            cpy1: radialCoor2.y,
+            cpx2: radialCoor3.x,
+            cpy2: radialCoor3.y
+        };
+    }
+    else {
+        var x1 = sourceLayout.x;
+        var y1 = sourceLayout.y;
+        var x2 = targetLayout.x;
+        var y2 = targetLayout.y;
+
+        if (orient === 'LR' || orient === 'RL') {
+            cpx1 = x1 + (x2 - x1) * seriesScope.curvature;
+            cpy1 = y1;
+            cpx2 = x2 + (x1 - x2) * seriesScope.curvature;
+            cpy2 = y2;
+        }
+        if (orient === 'TB' || orient === 'BT') {
+            cpx1 = x1;
+            cpy1 = y1 + (y2 - y1) * seriesScope.curvature;
+            cpx2 = x2;
+            cpy2 = y2 + (y1 - y2) * seriesScope.curvature;
+        }
+        return {
+            x1: x1,
+            y1: y1,
+            x2: x2,
+            y2: y2,
+            cpx1: cpx1,
+            cpy1: cpy1,
+            cpx2: cpx2,
+            cpy2: cpy2
+        };
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerAction({
+    type: 'treeExpandAndCollapse',
+    event: 'treeExpandAndCollapse',
+    update: 'update'
+}, function (payload, ecModel) {
+    ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) {
+        var dataIndex = payload.dataIndex;
+        var tree = seriesModel.getData().tree;
+        var node = tree.getNodeByDataIndex(dataIndex);
+        node.isExpand = !node.isExpand;
+
+    });
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * Traverse the tree from bottom to top and do something
+ * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree
+ * @param  {Function} callback
+ */
+function eachAfter (root, callback, separation) {
+    var nodes = [root];
+    var next = [];
+    var node;
+
+    while (node = nodes.pop()) { // jshint ignore:line
+        next.push(node);
+        if (node.isExpand) {
+            var children = node.children;
+            if (children.length) {
+                for (var i = 0; i < children.length; i++) {
+                    nodes.push(children[i]);
+                }
+            }
+        }
+    }
+
+    while (node = next.pop()) { // jshint ignore:line
+        callback(node, separation);
+    }
+}
+
+/**
+ * Traverse the tree from top to bottom and do something
+ * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree
+ * @param  {Function} callback
+ */
+function eachBefore (root, callback) {
+    var nodes = [root];
+    var node;
+    while (node = nodes.pop()) { // jshint ignore:line
+        callback(node);
+        if (node.isExpand) {
+            var children = node.children;
+            if (children.length) {
+                for (var i = children.length - 1; i >= 0; i--) {
+                    nodes.push(children[i]);
+                }
+            }
+        }
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var treeLayout = function (ecModel, api) {
+    ecModel.eachSeriesByType('tree', function (seriesModel) {
+        commonLayout(seriesModel, api);
+    });
+};
+
+function commonLayout(seriesModel, api) {
+    var layoutInfo = getViewRect(seriesModel, api);
+    seriesModel.layoutInfo = layoutInfo;
+    var layout = seriesModel.get('layout');
+    var width = 0;
+    var height = 0;
+    var separation$$1 = null;
+    
+    if (layout === 'radial') {
+        width = 2 * Math.PI;
+        height = Math.min(layoutInfo.height, layoutInfo.width) / 2;
+        separation$$1 = separation(function (node1, node2) {
+            return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth;
+        });
+    }
+    else {
+        width = layoutInfo.width;
+        height = layoutInfo.height;
+        separation$$1 = separation();
+    }
+
+    var virtualRoot = seriesModel.getData().tree.root;
+    var realRoot = virtualRoot.children[0];
+
+    if (realRoot) {
+        init$2(virtualRoot);
+        eachAfter(realRoot, firstWalk, separation$$1);
+        virtualRoot.hierNode.modifier = - realRoot.hierNode.prelim;
+        eachBefore(realRoot, secondWalk);
+
+        var left = realRoot;
+        var right = realRoot;
+        var bottom = realRoot;
+        eachBefore(realRoot, function (node) {
+            var x = node.getLayout().x;
+            if (x < left.getLayout().x) {
+                left = node;
+            }
+            if (x > right.getLayout().x) {
+                right = node;
+            }
+            if (node.depth > bottom.depth) {
+                bottom = node;
+            }
+        });
+
+        var delta = left === right ? 1 : separation$$1(left, right) / 2;
+        var tx = delta - left.getLayout().x;
+        var kx = 0;
+        var ky = 0;
+        var coorX = 0;
+        var coorY = 0;
+        if (layout === 'radial') {
+            kx = width / (right.getLayout().x + delta + tx);
+            // here we use (node.depth - 1), bucause the real root's depth is 1
+            ky = height / ((bottom.depth - 1) || 1);
+            eachBefore(realRoot, function (node) {
+                coorX = (node.getLayout().x + tx) * kx;
+                coorY = (node.depth - 1) * ky;
+                var finalCoor = radialCoordinate(coorX, coorY);
+                node.setLayout({x: finalCoor.x, y: finalCoor.y, rawX: coorX, rawY: coorY}, true);
+            });
+        }
+        else {
+            var orient = seriesModel.getOrient(); 
+            if (orient === 'RL' || orient === 'LR') {
+                ky = height / (right.getLayout().x + delta + tx);
+                kx = width / ((bottom.depth - 1) || 1);
+                eachBefore(realRoot, function (node) {
+                    coorY = (node.getLayout().x + tx) * ky;
+                    coorX = orient === 'LR'
+                        ? (node.depth - 1) * kx
+                        : width - (node.depth - 1) * kx;
+                    node.setLayout({x: coorX, y: coorY}, true);
+                });
+            }
+            else if (orient === 'TB' || orient === 'BT') {
+                kx = width / (right.getLayout().x + delta + tx);
+                ky = height / ((bottom.depth - 1) || 1);
+                eachBefore(realRoot, function (node) {
+                    coorX = (node.getLayout().x + tx) * kx;
+                    coorY = orient === 'TB'
+                        ? (node.depth - 1) * ky
+                        : height - (node.depth - 1) * ky;
+                    node.setLayout({x: coorX, y: coorY}, true);
+                });
+            }
+        }
+    } 
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(visualSymbol('tree', 'circle'));
+registerLayout(treeLayout);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {
+    if (payload && indexOf(validPayloadTypes, payload.type) >= 0) {
+        var root = seriesModel.getData().tree.root;
+        var targetNode = payload.targetNode;
+        if (targetNode && root.contains(targetNode)) {
+            return {node: targetNode};
+        }
+
+        var targetNodeId = payload.targetNodeId;
+        if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {
+            return {node: targetNode};
+        }
+    }
+}
+
+// Not includes the given node at the last item.
+function getPathToRoot(node) {
+    var path = [];
+    while (node) {
+        node = node.parentNode;
+        node && path.push(node);
+    }
+    return path.reverse();
+}
+
+function aboveViewRoot(viewRoot, node) {
+    var viewPath = getPathToRoot(viewRoot);
+    return indexOf(viewPath, node) >= 0;
+}
+
+// From root to the input node (the input node will be included).
+function wrapTreePathInfo(node, seriesModel) {
+    var treePathInfo = [];
+
+    while (node) {
+        var nodeDataIndex = node.dataIndex;
+        treePathInfo.push({
+            name: node.name,
+            dataIndex: nodeDataIndex,
+            value: seriesModel.getRawValue(nodeDataIndex)
+        });
+        node = node.parentNode;
+    }
+
+    treePathInfo.reverse();
+
+    return treePathInfo;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.treemap',
+
+    layoutMode: 'box',
+
+    dependencies: ['grid', 'polar'],
+
+    /**
+     * @type {module:echarts/data/Tree~Node}
+     */
+    _viewRoot: null,
+
+    defaultOption: {
+        // Disable progressive rendering
+        progressive: 0,
+        hoverLayerThreshold: Infinity,
+        // center: ['50%', '50%'],          // not supported in ec3.
+        // size: ['80%', '80%'],            // deprecated, compatible with ec2.
+        left: 'center',
+        top: 'middle',
+        right: null,
+        bottom: null,
+        width: '80%',
+        height: '80%',
+        sort: true,                         // Can be null or false or true
+                                            // (order by desc default, asc not supported yet (strange effect))
+        clipWindow: 'origin',               // Size of clipped window when zooming. 'origin' or 'fullscreen'
+        squareRatio: 0.5 * (1 + Math.sqrt(5)), // golden ratio
+        leafDepth: null,                    // Nodes on depth from root are regarded as leaves.
+                                            // Count from zero (zero represents only view root).
+        drillDownIcon: '▶',                 // Use html character temporarily because it is complicated
+                                            // to align specialized icon. ▷▶❒❐▼✚
+
+        zoomToNodeRatio: 0.32 * 0.32,       // Be effective when using zoomToNode. Specify the proportion of the
+                                            // target node area in the view area.
+        roam: true,                         // true, false, 'scale' or 'zoom', 'move'.
+        nodeClick: 'zoomToNode',            // Leaf node click behaviour: 'zoomToNode', 'link', false.
+                                            // If leafDepth is set and clicking a node which has children but
+                                            // be on left depth, the behaviour would be changing root. Otherwise
+                                            // use behavious defined above.
+        animation: true,
+        animationDurationUpdate: 900,
+        animationEasing: 'quinticInOut',
+        breadcrumb: {
+            show: true,
+            height: 22,
+            left: 'center',
+            top: 'bottom',
+            // right
+            // bottom
+            emptyItemWidth: 25,             // Width of empty node.
+            itemStyle: {
+                color: 'rgba(0,0,0,0.7)', //'#5793f3',
+                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: {
+            show: true,
+            // Do not use textDistance, for ellipsis rect just the same as treemap node rect.
+            distance: 0,
+            padding: 5,
+            position: 'inside', // Can be [5, '5%'] or position stirng like 'insideTopLeft', ...
+            // formatter: null,
+            color: '#fff',
+            ellipsis: true
+            // align
+            // verticalAlign
+        },
+        upperLabel: {                   // Label when node is parent.
+            show: false,
+            position: [0, '50%'],
+            height: 20,
+            // formatter: null,
+            color: '#fff',
+            ellipsis: true,
+            // align: null,
+            verticalAlign: 'middle'
+        },
+        itemStyle: {
+            color: null,            // Can be 'none' if not necessary.
+            colorAlpha: null,       // Can be 'none' if not necessary.
+            colorSaturation: null,  // Can be 'none' if not necessary.
+            borderWidth: 0,
+            gapWidth: 0,
+            borderColor: '#fff',
+            borderColorSaturation: null // If specified, borderColor will be ineffective, and the
+                                        // border color is evaluated by color of current node and
+                                        // borderColorSaturation.
+        },
+        emphasis: {
+            upperLabel: {
+                show: true,
+                position: [0, '50%'],
+                color: '#fff',
+                ellipsis: true,
+                verticalAlign: 'middle'
+            }
+        },
+
+        visualDimension: 0,                 // Can be 0, 1, 2, 3.
+        visualMin: null,
+        visualMax: null,
+
+        color: [],                  // + treemapSeries.color should not be modified. Please only modified
+                                    // level[n].color (if necessary).
+                                    // + Specify color list of each level. level[0].color would be global
+                                    // color list if not specified. (see method `setDefault`).
+                                    // + But set as a empty array to forbid fetch color from global palette
+                                    // when using nodeModel.get('color'), otherwise nodes on deep level
+                                    // will always has color palette set and are not able to inherit color
+                                    // from parent node.
+                                    // + TreemapSeries.color can not be set as 'none', otherwise effect
+                                    // legend color fetching (see seriesColor.js).
+        colorAlpha: null,           // Array. Specify color alpha range of each level, like [0.2, 0.8]
+        colorSaturation: null,      // Array. Specify color saturation of each level, like [0.2, 0.5]
+        colorMappingBy: 'index',    // 'value' or 'index' or 'id'.
+        visibleMin: 10,             // If area less than this threshold (unit: pixel^2), node will not
+                                    // be rendered. Only works when sort is 'asc' or 'desc'.
+        childrenVisibleMin: null,   // If area of a node less than this threshold (unit: pixel^2),
+                                    // grandchildren will not show.
+                                    // Why grandchildren? If not grandchildren but children,
+                                    // some siblings show children and some not,
+                                    // the appearance may be mess and not consistent,
+        levels: []                  // Each item: {
+                                    //     visibleMin, itemStyle, visualDimension, label
+                                    // }
+        // data: {
+        //      value: [],
+        //      children: [],
+        //      link: 'http://xxx.xxx.xxx',
+        //      target: 'blank' or 'self'
+        // }
+    },
+
+    /**
+     * @override
+     */
+    getInitialData: function (option, ecModel) {
+        // Create a virtual root.
+        var root = {name: option.name, children: option.data};
+
+        completeTreeValue(root);
+
+        var levels = option.levels || [];
+
+        levels = option.levels = setDefault(levels, ecModel);
+
+        var treeOption = {};
+
+        treeOption.levels = levels;
+
+        // Make sure always a new tree is created when setOption,
+        // in TreemapView, we check whether oldTree === newTree
+        // to choose mappings approach among old shapes and new shapes.
+        return Tree.createTree(root, this, treeOption).data;
+    },
+
+    optionUpdated: function () {
+        this.resetViewRoot();
+    },
+
+    /**
+     * @override
+     * @param {number} dataIndex
+     * @param {boolean} [mutipleSeries=false]
+     */
+    formatTooltip: function (dataIndex) {
+        var data = this.getData();
+        var value = this.getRawValue(dataIndex);
+        var formattedValue = isArray(value)
+            ? addCommas(value[0]) : addCommas(value);
+        var name = data.getName(dataIndex);
+
+        return encodeHTML(name + ': ' + formattedValue);
+    },
+
+    /**
+     * Add tree path to tooltip param
+     *
+     * @override
+     * @param {number} dataIndex
+     * @return {Object}
+     */
+    getDataParams: function (dataIndex) {
+        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);
+
+        var node = this.getData().tree.getNodeByDataIndex(dataIndex);
+        params.treePathInfo = wrapTreePathInfo(node, this);
+
+        return params;
+    },
+
+    /**
+     * @public
+     * @param {Object} layoutInfo {
+     *                                x: containerGroup x
+     *                                y: containerGroup y
+     *                                width: containerGroup width
+     *                                height: containerGroup height
+     *                            }
+     */
+    setLayoutInfo: function (layoutInfo) {
+        /**
+         * @readOnly
+         * @type {Object}
+         */
+        this.layoutInfo = this.layoutInfo || {};
+        extend(this.layoutInfo, layoutInfo);
+    },
+
+    /**
+     * @param  {string} id
+     * @return {number} index
+     */
+    mapIdToIndex: function (id) {
+        // A feature is implemented:
+        // index is monotone increasing with the sequence of
+        // input id at the first time.
+        // This feature can make sure that each data item and its
+        // mapped color have the same index between data list and
+        // color list at the beginning, which is useful for user
+        // to adjust data-color mapping.
+
+        /**
+         * @private
+         * @type {Object}
+         */
+        var idIndexMap = this._idIndexMap;
+
+        if (!idIndexMap) {
+            idIndexMap = this._idIndexMap = createHashMap();
+            /**
+             * @private
+             * @type {number}
+             */
+            this._idIndexMapCount = 0;
+        }
+
+        var index = idIndexMap.get(id);
+        if (index == null) {
+            idIndexMap.set(id, index = this._idIndexMapCount++);
+        }
+
+        return index;
+    },
+
+    getViewRoot: function () {
+        return this._viewRoot;
+    },
+
+    /**
+     * @param {module:echarts/data/Tree~Node} [viewRoot]
+     */
+    resetViewRoot: function (viewRoot) {
+        viewRoot
+            ? (this._viewRoot = viewRoot)
+            : (viewRoot = this._viewRoot);
+
+        var root = this.getRawData().tree.root;
+
+        if (!viewRoot
+            || (viewRoot !== root && !root.contains(viewRoot))
+        ) {
+            this._viewRoot = root;
+        }
+    }
+});
+
+/**
+ * @param {Object} dataNode
+ */
+function completeTreeValue(dataNode) {
+    // Postorder travel tree.
+    // If value of none-leaf node is not set,
+    // calculate it by suming up the value of all children.
+    var sum = 0;
+
+    each$1(dataNode.children, function (child) {
+
+        completeTreeValue(child);
+
+        var childValue = child.value;
+        isArray(childValue) && (childValue = childValue[0]);
+
+        sum += childValue;
+    });
+
+    var thisValue = dataNode.value;
+    if (isArray(thisValue)) {
+        thisValue = thisValue[0];
+    }
+
+    if (thisValue == null || isNaN(thisValue)) {
+        thisValue = sum;
+    }
+    // Value should not less than 0.
+    if (thisValue < 0) {
+        thisValue = 0;
+    }
+
+    isArray(dataNode.value)
+        ? (dataNode.value[0] = thisValue)
+        : (dataNode.value = thisValue);
+}
+
+/**
+ * set default to level configuration
+ */
+function setDefault(levels, ecModel) {
+    var globalColorList = ecModel.get('color');
+
+    if (!globalColorList) {
+        return;
+    }
+
+    levels = levels || [];
+    var hasColorDefine;
+    each$1(levels, function (levelDefine) {
+        var model = new Model(levelDefine);
+        var modelColor = model.get('color');
+
+        if (model.get('itemStyle.color')
+            || (modelColor && modelColor !== 'none')
+        ) {
+            hasColorDefine = true;
+        }
+    });
+
+    if (!hasColorDefine) {
+        var level0 = levels[0] || (levels[0] = {});
+        level0.color = globalColorList.slice();
+    }
+
+    return levels;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var TEXT_PADDING = 8;
+var ITEM_GAP = 8;
+var ARRAY_LENGTH = 5;
+
+function Breadcrumb(containerGroup) {
+    /**
+     * @private
+     * @type {module:zrender/container/Group}
+     */
+    this.group = new Group();
+
+    containerGroup.add(this.group);
+}
+
+Breadcrumb.prototype = {
+
+    constructor: Breadcrumb,
+
+    render: function (seriesModel, api, targetNode, onSelect) {
+        var model = seriesModel.getModel('breadcrumb');
+        var thisGroup = this.group;
+
+        thisGroup.removeAll();
+
+        if (!model.get('show') || !targetNode) {
+            return;
+        }
+
+        var normalStyleModel = model.getModel('itemStyle');
+        // var emphasisStyleModel = model.getModel('emphasis.itemStyle');
+        var textStyleModel = normalStyleModel.getModel('textStyle');
+
+        var layoutParam = {
+            pos: {
+                left: model.get('left'),
+                right: model.get('right'),
+                top: model.get('top'),
+                bottom: model.get('bottom')
+            },
+            box: {
+                width: api.getWidth(),
+                height: api.getHeight()
+            },
+            emptyItemWidth: model.get('emptyItemWidth'),
+            totalWidth: 0,
+            renderList: []
+        };
+
+        this._prepare(targetNode, layoutParam, textStyleModel);
+        this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);
+
+        positionElement(thisGroup, layoutParam.pos, layoutParam.box);
+    },
+
+    /**
+     * Prepare render list and total width
+     * @private
+     */
+    _prepare: function (targetNode, layoutParam, textStyleModel) {
+        for (var node = targetNode; node; node = node.parentNode) {
+            var text = node.getModel().get('name');
+            var textRect = textStyleModel.getTextRect(text);
+            var itemWidth = Math.max(
+                textRect.width + TEXT_PADDING * 2,
+                layoutParam.emptyItemWidth
+            );
+            layoutParam.totalWidth += itemWidth + ITEM_GAP;
+            layoutParam.renderList.push({node: node, text: text, width: itemWidth});
+        }
+    },
+
+    /**
+     * @private
+     */
+    _renderContent: function (
+        seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect
+    ) {
+        // Start rendering.
+        var lastX = 0;
+        var emptyItemWidth = layoutParam.emptyItemWidth;
+        var height = seriesModel.get('breadcrumb.height');
+        var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box);
+        var totalWidth = layoutParam.totalWidth;
+        var renderList = layoutParam.renderList;
+
+        for (var i = renderList.length - 1; i >= 0; i--) {
+            var item = renderList[i];
+            var itemNode = item.node;
+            var itemWidth = item.width;
+            var text = item.text;
+
+            // Hdie text and shorten width if necessary.
+            if (totalWidth > availableSize.width) {
+                totalWidth -= itemWidth - emptyItemWidth;
+                itemWidth = emptyItemWidth;
+                text = null;
+            }
+
+            var el = new Polygon({
+                shape: {
+                    points: makeItemPoints(
+                        lastX, 0, itemWidth, height,
+                        i === renderList.length - 1, i === 0
+                    )
+                },
+                style: defaults(
+                    normalStyleModel.getItemStyle(),
+                    {
+                        lineJoin: 'bevel',
+                        text: text,
+                        textFill: textStyleModel.getTextColor(),
+                        textFont: textStyleModel.getFont()
+                    }
+                ),
+                z: 10,
+                onclick: curry(onSelect, itemNode)
+            });
+            this.group.add(el);
+
+            packEventData(el, seriesModel, itemNode);
+
+            lastX += itemWidth + ITEM_GAP;
+        }
+    },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        this.group.removeAll();
+    }
+};
+
+function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {
+    var points = [
+        [head ? x : x - ARRAY_LENGTH, y],
+        [x + itemWidth, y],
+        [x + itemWidth, y + itemHeight],
+        [head ? x : x - ARRAY_LENGTH, y + itemHeight]
+    ];
+    !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);
+    !head && points.push([x, y + itemHeight / 2]);
+    return points;
+}
+
+// Package custom mouse event.
+function packEventData(el, seriesModel, itemNode) {
+    el.eventData = {
+        componentType: 'series',
+        componentSubType: 'treemap',
+        seriesIndex: seriesModel.componentIndex,
+        seriesName: seriesModel.name,
+        seriesType: 'treemap',
+        selfType: 'breadcrumb', // Distinguish with click event on treemap node.
+        nodeData: {
+            dataIndex: itemNode && itemNode.dataIndex,
+            name: itemNode && itemNode.name
+        },
+        treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {number} [time=500] Time in ms
+ * @param {string} [easing='linear']
+ * @param {number} [delay=0]
+ * @param {Function} [callback]
+ *
+ * @example
+ *  // Animate position
+ *  animation
+ *      .createWrap()
+ *      .add(el1, {position: [10, 10]})
+ *      .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)
+ *      .done(function () { // done })
+ *      .start('cubicOut');
+ */
+function createWrap() {
+
+    var storage = [];
+    var elExistsMap = {};
+    var doneCallback;
+
+    return {
+
+        /**
+         * Caution: a el can only be added once, otherwise 'done'
+         * might not be called. This method checks this (by el.id),
+         * suppresses adding and returns false when existing el found.
+         *
+         * @param {modele:zrender/Element} el
+         * @param {Object} target
+         * @param {number} [time=500]
+         * @param {number} [delay=0]
+         * @param {string} [easing='linear']
+         * @return {boolean} Whether adding succeeded.
+         *
+         * @example
+         *     add(el, target, time, delay, easing);
+         *     add(el, target, time, easing);
+         *     add(el, target, time);
+         *     add(el, target);
+         */
+        add: function (el, target, time, delay, easing) {
+            if (isString(delay)) {
+                easing = delay;
+                delay = 0;
+            }
+
+            if (elExistsMap[el.id]) {
+                return false;
+            }
+            elExistsMap[el.id] = 1;
+
+            storage.push(
+                {el: el, target: target, time: time, delay: delay, easing: easing}
+            );
+
+            return true;
+        },
+
+        /**
+         * Only execute when animation finished. Will not execute when any
+         * of 'stop' or 'stopAnimation' called.
+         *
+         * @param {Function} callback
+         */
+        done: function (callback) {
+            doneCallback = callback;
+            return this;
+        },
+
+        /**
+         * Will stop exist animation firstly.
+         */
+        start: function () {
+            var count = storage.length;
+
+            for (var i = 0, len = storage.length; i < len; i++) {
+                var item = storage[i];
+                item.el.animateTo(item.target, item.time, item.delay, item.easing, done);
+            }
+
+            return this;
+
+            function done() {
+                count--;
+                if (!count) {
+                    storage.length = 0;
+                    elExistsMap = {};
+                    doneCallback && doneCallback();
+                }
+            }
+        }
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var bind$1 = bind;
+var Group$2 = Group;
+var Rect$1 = Rect;
+var each$8 = each$1;
+
+var DRAG_THRESHOLD = 3;
+var PATH_LABEL_NOAMAL = ['label'];
+var PATH_LABEL_EMPHASIS = ['emphasis', 'label'];
+var PATH_UPPERLABEL_NORMAL = ['upperLabel'];
+var PATH_UPPERLABEL_EMPHASIS = ['emphasis', 'upperLabel'];
+var Z_BASE = 10; // Should bigger than every z.
+var Z_BG = 1;
+var Z_CONTENT = 2;
+
+var getItemStyleEmphasis = makeStyleMapper([
+    ['fill', 'color'],
+    // `borderColor` and `borderWidth` has been occupied,
+    // so use `stroke` to indicate the stroke of the rect.
+    ['stroke', 'strokeColor'],
+    ['lineWidth', 'strokeWidth'],
+    ['shadowBlur'],
+    ['shadowOffsetX'],
+    ['shadowOffsetY'],
+    ['shadowColor']
+]);
+var getItemStyleNormal = function (model) {
+    // Normal style props should include emphasis style props.
+    var itemStyle = getItemStyleEmphasis(model);
+    // Clear styles set by emphasis.
+    itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;
+    return itemStyle;
+};
+
+extendChartView({
+
+    type: 'treemap',
+
+    /**
+     * @override
+     */
+    init: function (o, api) {
+
+        /**
+         * @private
+         * @type {module:zrender/container/Group}
+         */
+        this._containerGroup;
+
+        /**
+         * @private
+         * @type {Object.<string, Array.<module:zrender/container/Group>>}
+         */
+        this._storage = createStorage();
+
+        /**
+         * @private
+         * @type {module:echarts/data/Tree}
+         */
+        this._oldTree;
+
+        /**
+         * @private
+         * @type {module:echarts/chart/treemap/Breadcrumb}
+         */
+        this._breadcrumb;
+
+        /**
+         * @private
+         * @type {module:echarts/component/helper/RoamController}
+         */
+        this._controller;
+
+        /**
+         * 'ready', 'animating'
+         * @private
+         */
+        this._state = 'ready';
+    },
+
+    /**
+     * @override
+     */
+    render: function (seriesModel, ecModel, api, payload) {
+
+        var models = ecModel.findComponents({
+            mainType: 'series', subType: 'treemap', query: payload
+        });
+        if (indexOf(models, seriesModel) < 0) {
+            return;
+        }
+
+        this.seriesModel = seriesModel;
+        this.api = api;
+        this.ecModel = ecModel;
+
+        var types = ['treemapZoomToNode', 'treemapRootToNode'];
+        var targetInfo = retrieveTargetInfo(payload, types, seriesModel);
+        var payloadType = payload && payload.type;
+        var layoutInfo = seriesModel.layoutInfo;
+        var isInit = !this._oldTree;
+        var thisStorage = this._storage;
+
+        // Mark new root when action is treemapRootToNode.
+        var reRoot = (payloadType === 'treemapRootToNode' && targetInfo && thisStorage)
+            ? {
+                rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],
+                direction: payload.direction
+            }
+            : null;
+
+        var containerGroup = this._giveContainerGroup(layoutInfo);
+
+        var renderResult = this._doRender(containerGroup, seriesModel, reRoot);
+        (
+            !isInit && (
+                !payloadType
+                || payloadType === 'treemapZoomToNode'
+                || payloadType === 'treemapRootToNode'
+            )
+        )
+            ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot)
+            : renderResult.renderFinally();
+
+        this._resetController(api);
+
+        this._renderBreadcrumb(seriesModel, api, targetInfo);
+    },
+
+    /**
+     * @private
+     */
+    _giveContainerGroup: function (layoutInfo) {
+        var containerGroup = this._containerGroup;
+        if (!containerGroup) {
+            // FIXME
+            // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。
+            containerGroup = this._containerGroup = new Group$2();
+            this._initEvents(containerGroup);
+            this.group.add(containerGroup);
+        }
+        containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]);
+
+        return containerGroup;
+    },
+
+    /**
+     * @private
+     */
+    _doRender: function (containerGroup, seriesModel, reRoot) {
+        var thisTree = seriesModel.getData().tree;
+        var oldTree = this._oldTree;
+
+        // Clear last shape records.
+        var lastsForAnimation = createStorage();
+        var thisStorage = createStorage();
+        var oldStorage = this._storage;
+        var willInvisibleEls = [];
+        var doRenderNode = curry(
+            renderNode, seriesModel,
+            thisStorage, oldStorage, reRoot,
+            lastsForAnimation, willInvisibleEls
+        );
+
+        // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow),
+        // the oldTree is actually losted, so we can not find all of the old graphic
+        // elements from tree. So we use this stragegy: make element storage, move
+        // from old storage to new storage, clear old storage.
+
+        dualTravel(
+            thisTree.root ? [thisTree.root] : [],
+            (oldTree && oldTree.root) ? [oldTree.root] : [],
+            containerGroup,
+            thisTree === oldTree || !oldTree,
+            0
+        );
+
+        // Process all removing.
+        var willDeleteEls = clearStorage(oldStorage);
+
+        this._oldTree = thisTree;
+        this._storage = thisStorage;
+
+        return {
+            lastsForAnimation: lastsForAnimation,
+            willDeleteEls: willDeleteEls,
+            renderFinally: renderFinally
+        };
+
+        function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {
+            // When 'render' is triggered by action,
+            // 'this' and 'old' may be the same tree,
+            // we use rawIndex in that case.
+            if (sameTree) {
+                oldViewChildren = thisViewChildren;
+                each$8(thisViewChildren, function (child, index) {
+                    !child.isRemoved() && processNode(index, index);
+                });
+            }
+            // Diff hierarchically (diff only in each subtree, but not whole).
+            // because, consistency of view is important.
+            else {
+                (new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey))
+                    .add(processNode)
+                    .update(processNode)
+                    .remove(curry(processNode, null))
+                    .execute();
+            }
+
+            function getKey(node) {
+                // Identify by name or raw index.
+                return node.getId();
+            }
+
+            function processNode(newIndex, oldIndex) {
+                var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;
+                var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;
+
+                var group = doRenderNode(thisNode, oldNode, parentGroup, depth);
+
+                group && dualTravel(
+                    thisNode && thisNode.viewChildren || [],
+                    oldNode && oldNode.viewChildren || [],
+                    group,
+                    sameTree,
+                    depth + 1
+                );
+            }
+        }
+
+        function clearStorage(storage) {
+            var willDeleteEls = createStorage();
+            storage && each$8(storage, function (store, storageName) {
+                var delEls = willDeleteEls[storageName];
+                each$8(store, function (el) {
+                    el && (delEls.push(el), el.__tmWillDelete = 1);
+                });
+            });
+            return willDeleteEls;
+        }
+
+        function renderFinally() {
+            each$8(willDeleteEls, function (els) {
+                each$8(els, function (el) {
+                    el.parent && el.parent.remove(el);
+                });
+            });
+            each$8(willInvisibleEls, function (el) {
+                el.invisible = true;
+                // Setting invisible is for optimizing, so no need to set dirty,
+                // just mark as invisible.
+                el.dirty();
+            });
+        }
+    },
+
+    /**
+     * @private
+     */
+    _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) {
+        if (!seriesModel.get('animation')) {
+            return;
+        }
+
+        var duration = seriesModel.get('animationDurationUpdate');
+        var easing = seriesModel.get('animationEasing');
+        var animationWrap = createWrap();
+
+        // Make delete animations.
+        each$8(renderResult.willDeleteEls, function (store, storageName) {
+            each$8(store, function (el, rawIndex) {
+                if (el.invisible) {
+                    return;
+                }
+
+                var parent = el.parent; // Always has parent, and parent is nodeGroup.
+                var target;
+
+                if (reRoot && reRoot.direction === 'drillDown') {
+                    target = parent === reRoot.rootNodeGroup
+                        // This is the content element of view root.
+                        // Only `content` will enter this branch, because
+                        // `background` and `nodeGroup` will not be deleted.
+                        ? {
+                            shape: {
+                                x: 0,
+                                y: 0,
+                                width: parent.__tmNodeWidth,
+                                height: parent.__tmNodeHeight
+                            },
+                            style: {
+                                opacity: 0
+                            }
+                        }
+                        // Others.
+                        : {style: {opacity: 0}};
+                }
+                else {
+                    var targetX = 0;
+                    var targetY = 0;
+
+                    if (!parent.__tmWillDelete) {
+                        // Let node animate to right-bottom corner, cooperating with fadeout,
+                        // which is appropriate for user understanding.
+                        // Divided by 2 for reRoot rolling up effect.
+                        targetX = parent.__tmNodeWidth / 2;
+                        targetY = parent.__tmNodeHeight / 2;
+                    }
+
+                    target = storageName === 'nodeGroup'
+                        ? {position: [targetX, targetY], style: {opacity: 0}}
+                        : {
+                            shape: {x: targetX, y: targetY, width: 0, height: 0},
+                            style: {opacity: 0}
+                        };
+                }
+
+                target && animationWrap.add(el, target, duration, easing);
+            });
+        });
+
+        // Make other animations
+        each$8(this._storage, function (store, storageName) {
+            each$8(store, function (el, rawIndex) {
+                var last = renderResult.lastsForAnimation[storageName][rawIndex];
+                var target = {};
+
+                if (!last) {
+                    return;
+                }
+
+                if (storageName === 'nodeGroup') {
+                    if (last.old) {
+                        target.position = el.position.slice();
+                        el.attr('position', last.old);
+                    }
+                }
+                else {
+                    if (last.old) {
+                        target.shape = extend({}, el.shape);
+                        el.setShape(last.old);
+                    }
+
+                    if (last.fadein) {
+                        el.setStyle('opacity', 0);
+                        target.style = {opacity: 1};
+                    }
+                    // When animation is stopped for succedent animation starting,
+                    // el.style.opacity might not be 1
+                    else if (el.style.opacity !== 1) {
+                        target.style = {opacity: 1};
+                    }
+                }
+
+                animationWrap.add(el, target, duration, easing);
+            });
+        }, this);
+
+        this._state = 'animating';
+
+        animationWrap
+            .done(bind$1(function () {
+                this._state = 'ready';
+                renderResult.renderFinally();
+            }, this))
+            .start();
+    },
+
+    /**
+     * @private
+     */
+    _resetController: function (api) {
+        var controller = this._controller;
+
+        // Init controller.
+        if (!controller) {
+            controller = this._controller = new RoamController(api.getZr());
+            controller.enable(this.seriesModel.get('roam'));
+            controller.on('pan', bind$1(this._onPan, this));
+            controller.on('zoom', bind$1(this._onZoom, this));
+        }
+
+        var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());
+        controller.setPointerChecker(function (e, x, y) {
+            return rect.contain(x, y);
+        });
+    },
+
+    /**
+     * @private
+     */
+    _clearController: function () {
+        var controller = this._controller;
+        if (controller) {
+            controller.dispose();
+            controller = null;
+        }
+    },
+
+    /**
+     * @private
+     */
+    _onPan: function (dx, dy) {
+        if (this._state !== 'animating'
+            && (Math.abs(dx) > DRAG_THRESHOLD || Math.abs(dy) > DRAG_THRESHOLD)
+        ) {
+            // These param must not be cached.
+            var root = this.seriesModel.getData().tree.root;
+
+            if (!root) {
+                return;
+            }
+
+            var rootLayout = root.getLayout();
+
+            if (!rootLayout) {
+                return;
+            }
+
+            this.api.dispatchAction({
+                type: 'treemapMove',
+                from: this.uid,
+                seriesId: this.seriesModel.id,
+                rootRect: {
+                    x: rootLayout.x + dx, y: rootLayout.y + dy,
+                    width: rootLayout.width, height: rootLayout.height
+                }
+            });
+        }
+    },
+
+    /**
+     * @private
+     */
+    _onZoom: function (scale, mouseX, mouseY) {
+        if (this._state !== 'animating') {
+            // These param must not be cached.
+            var root = this.seriesModel.getData().tree.root;
+
+            if (!root) {
+                return;
+            }
+
+            var rootLayout = root.getLayout();
+
+            if (!rootLayout) {
+                return;
+            }
+
+            var rect = new BoundingRect(
+                rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height
+            );
+            var layoutInfo = this.seriesModel.layoutInfo;
+
+            // Transform mouse coord from global to containerGroup.
+            mouseX -= layoutInfo.x;
+            mouseY -= layoutInfo.y;
+
+            // Scale root bounding rect.
+            var m = create$1();
+            translate(m, m, [-mouseX, -mouseY]);
+            scale$1(m, m, [scale, scale]);
+            translate(m, m, [mouseX, mouseY]);
+
+            rect.applyTransform(m);
+
+            this.api.dispatchAction({
+                type: 'treemapRender',
+                from: this.uid,
+                seriesId: this.seriesModel.id,
+                rootRect: {
+                    x: rect.x, y: rect.y,
+                    width: rect.width, height: rect.height
+                }
+            });
+        }
+    },
+
+    /**
+     * @private
+     */
+    _initEvents: function (containerGroup) {
+        containerGroup.on('click', function (e) {
+            if (this._state !== 'ready') {
+                return;
+            }
+
+            var nodeClick = this.seriesModel.get('nodeClick', true);
+
+            if (!nodeClick) {
+                return;
+            }
+
+            var targetInfo = this.findTarget(e.offsetX, e.offsetY);
+
+            if (!targetInfo) {
+                return;
+            }
+
+            var node = targetInfo.node;
+            if (node.getLayout().isLeafRoot) {
+                this._rootToNode(targetInfo);
+            }
+            else {
+                if (nodeClick === 'zoomToNode') {
+                    this._zoomToNode(targetInfo);
+                }
+                else if (nodeClick === 'link') {
+                    var itemModel = node.hostTree.data.getItemModel(node.dataIndex);
+                    var link = itemModel.get('link', true);
+                    var linkTarget = itemModel.get('target', true) || 'blank';
+                    link && window.open(link, linkTarget);
+                }
+            }
+
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _renderBreadcrumb: function (seriesModel, api, targetInfo) {
+        if (!targetInfo) {
+            targetInfo = seriesModel.get('leafDepth', true) != null
+                ? {node: seriesModel.getViewRoot()}
+                // FIXME
+                // better way?
+                // Find breadcrumb tail on center of containerGroup.
+                : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);
+
+            if (!targetInfo) {
+                targetInfo = {node: seriesModel.getData().tree.root};
+            }
+        }
+
+        (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group)))
+            .render(seriesModel, api, targetInfo.node, bind$1(onSelect, this));
+
+        function onSelect(node) {
+            if (this._state !== 'animating') {
+                aboveViewRoot(seriesModel.getViewRoot(), node)
+                    ? this._rootToNode({node: node})
+                    : this._zoomToNode({node: node});
+            }
+        }
+    },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        this._clearController();
+        this._containerGroup && this._containerGroup.removeAll();
+        this._storage = createStorage();
+        this._state = 'ready';
+        this._breadcrumb && this._breadcrumb.remove();
+    },
+
+    dispose: function () {
+        this._clearController();
+    },
+
+    /**
+     * @private
+     */
+    _zoomToNode: function (targetInfo) {
+        this.api.dispatchAction({
+            type: 'treemapZoomToNode',
+            from: this.uid,
+            seriesId: this.seriesModel.id,
+            targetNode: targetInfo.node
+        });
+    },
+
+    /**
+     * @private
+     */
+    _rootToNode: function (targetInfo) {
+        this.api.dispatchAction({
+            type: 'treemapRootToNode',
+            from: this.uid,
+            seriesId: this.seriesModel.id,
+            targetNode: targetInfo.node
+        });
+    },
+
+    /**
+     * @public
+     * @param {number} x Global coord x.
+     * @param {number} y Global coord y.
+     * @return {Object} info If not found, return undefined;
+     * @return {number} info.node Target node.
+     * @return {number} info.offsetX x refer to target node.
+     * @return {number} info.offsetY y refer to target node.
+     */
+    findTarget: function (x, y) {
+        var targetInfo;
+        var viewRoot = this.seriesModel.getViewRoot();
+
+        viewRoot.eachNode({attr: 'viewChildren', order: 'preorder'}, function (node) {
+            var bgEl = this._storage.background[node.getRawIndex()];
+            // If invisible, there might be no element.
+            if (bgEl) {
+                var point = bgEl.transformCoordToLocal(x, y);
+                var shape = bgEl.shape;
+
+                // For performance consideration, dont use 'getBoundingRect'.
+                if (shape.x <= point[0]
+                    && point[0] <= shape.x + shape.width
+                    && shape.y <= point[1]
+                    && point[1] <= shape.y + shape.height
+                ) {
+                    targetInfo = {node: node, offsetX: point[0], offsetY: point[1]};
+                }
+                else {
+                    return false; // Suppress visit subtree.
+                }
+            }
+        }, this);
+
+        return targetInfo;
+    }
+
+});
+
+/**
+ * @inner
+ */
+function createStorage() {
+    return {nodeGroup: [], background: [], content: []};
+}
+
+/**
+ * @inner
+ * @return Return undefined means do not travel further.
+ */
+function renderNode(
+    seriesModel, thisStorage, oldStorage, reRoot,
+    lastsForAnimation, willInvisibleEls,
+    thisNode, oldNode, parentGroup, depth
+) {
+    // Whether under viewRoot.
+    if (!thisNode) {
+        // Deleting nodes will be performed finally. This method just find
+        // element from old storage, or create new element, set them to new
+        // storage, and set styles.
+        return;
+    }
+
+    // -------------------------------------------------------------------
+    // Start of closure variables available in "Procedures in renderNode".
+
+    var thisLayout = thisNode.getLayout();
+
+    if (!thisLayout || !thisLayout.isInView) {
+        return;
+    }
+
+    var thisWidth = thisLayout.width;
+    var thisHeight = thisLayout.height;
+    var borderWidth = thisLayout.borderWidth;
+    var thisInvisible = thisLayout.invisible;
+
+    var thisRawIndex = thisNode.getRawIndex();
+    var oldRawIndex = oldNode && oldNode.getRawIndex();
+
+    var thisViewChildren = thisNode.viewChildren;
+    var upperHeight = thisLayout.upperHeight;
+    var isParent = thisViewChildren && thisViewChildren.length;
+    var itemStyleNormalModel = thisNode.getModel('itemStyle');
+    var itemStyleEmphasisModel = thisNode.getModel('emphasis.itemStyle');
+
+    // End of closure ariables available in "Procedures in renderNode".
+    // -----------------------------------------------------------------
+
+    // Node group
+    var group = giveGraphic('nodeGroup', Group$2);
+
+    if (!group) {
+        return;
+    }
+
+    parentGroup.add(group);
+    // x,y are not set when el is above view root.
+    group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]);
+    group.__tmNodeWidth = thisWidth;
+    group.__tmNodeHeight = thisHeight;
+
+    if (thisLayout.isAboveViewRoot) {
+        return group;
+    }
+
+    // Background
+    var bg = giveGraphic('background', Rect$1, depth, Z_BG);
+    bg && renderBackground(group, bg, isParent && thisLayout.upperHeight);
+
+    // No children, render content.
+    if (!isParent) {
+        var content = giveGraphic('content', Rect$1, depth, Z_CONTENT);
+        content && renderContent(group, content);
+    }
+
+    return group;
+
+    // ----------------------------
+    // | Procedures in renderNode |
+    // ----------------------------
+
+    function renderBackground(group, bg, useUpperLabel) {
+        // For tooltip.
+        bg.dataIndex = thisNode.dataIndex;
+        bg.seriesIndex = seriesModel.seriesIndex;
+
+        bg.setShape({x: 0, y: 0, width: thisWidth, height: thisHeight});
+        var visualBorderColor = thisNode.getVisual('borderColor', true);
+        var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor');
+
+        updateStyle(bg, function () {
+            var normalStyle = getItemStyleNormal(itemStyleNormalModel);
+            normalStyle.fill = visualBorderColor;
+            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);
+            emphasisStyle.fill = emphasisBorderColor;
+
+            if (useUpperLabel) {
+                var upperLabelWidth = thisWidth - 2 * borderWidth;
+
+                prepareText(
+                    normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight,
+                    {x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight}
+                );
+            }
+            // For old bg.
+            else {
+                normalStyle.text = emphasisStyle.text = null;
+            }
+
+            bg.setStyle(normalStyle);
+            setHoverStyle(bg, emphasisStyle);
+        });
+
+        group.add(bg);
+    }
+
+    function renderContent(group, content) {
+        // For tooltip.
+        content.dataIndex = thisNode.dataIndex;
+        content.seriesIndex = seriesModel.seriesIndex;
+
+        var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);
+        var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);
+
+        content.culling = true;
+        content.setShape({
+            x: borderWidth,
+            y: borderWidth,
+            width: contentWidth,
+            height: contentHeight
+        });
+
+        var visualColor = thisNode.getVisual('color', true);
+        updateStyle(content, function () {
+            var normalStyle = getItemStyleNormal(itemStyleNormalModel);
+            normalStyle.fill = visualColor;
+            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);
+
+            prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight);
+
+            content.setStyle(normalStyle);
+            setHoverStyle(content, emphasisStyle);
+        });
+
+        group.add(content);
+    }
+
+    function updateStyle(element, cb) {
+        if (!thisInvisible) {
+            // If invisible, do not set visual, otherwise the element will
+            // change immediately before animation. We think it is OK to
+            // remain its origin color when moving out of the view window.
+            cb();
+
+            if (!element.__tmWillVisible) {
+                element.invisible = false;
+            }
+        }
+        else {
+            // Delay invisible setting utill animation finished,
+            // avoid element vanish suddenly before animation.
+            !element.invisible && willInvisibleEls.push(element);
+        }
+    }
+
+    function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) {
+        var nodeModel = thisNode.getModel();
+        var text = retrieve(
+            seriesModel.getFormattedLabel(
+                thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label'
+            ),
+            nodeModel.get('name')
+        );
+        if (!upperLabelRect && thisLayout.isLeafRoot) {
+            var iconChar = seriesModel.get('drillDownIcon', true);
+            text = iconChar ? iconChar + ' ' + text : text;
+        }
+
+        var normalLabelModel = nodeModel.getModel(
+            upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL
+        );
+        var emphasisLabelModel = nodeModel.getModel(
+            upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS
+        );
+
+        var isShow = normalLabelModel.getShallow('show');
+
+        setLabelStyle(
+            normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel,
+            {
+                defaultText: isShow ? text : null,
+                autoColor: visualColor,
+                isRectText: true
+            }
+        );
+
+        upperLabelRect && (normalStyle.textRect = clone(upperLabelRect));
+
+        normalStyle.truncate = (isShow && normalLabelModel.get('ellipsis'))
+            ? {
+                outerWidth: width,
+                outerHeight: height,
+                minChar: 2
+            }
+            : null;
+    }
+
+    function giveGraphic(storageName, Ctor, depth, z) {
+        var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];
+        var lasts = lastsForAnimation[storageName];
+
+        if (element) {
+            // Remove from oldStorage
+            oldStorage[storageName][oldRawIndex] = null;
+            prepareAnimationWhenHasOld(lasts, element, storageName);
+        }
+        // If invisible and no old element, do not create new element (for optimizing).
+        else if (!thisInvisible) {
+            element = new Ctor({z: calculateZ(depth, z)});
+            element.__tmDepth = depth;
+            element.__tmStorageName = storageName;
+            prepareAnimationWhenNoOld(lasts, element, storageName);
+        }
+
+        // Set to thisStorage
+        return (thisStorage[storageName][thisRawIndex] = element);
+    }
+
+    function prepareAnimationWhenHasOld(lasts, element, storageName) {
+        var lastCfg = lasts[thisRawIndex] = {};
+        lastCfg.old = storageName === 'nodeGroup'
+            ? element.position.slice()
+            : extend({}, element.shape);
+    }
+
+    // If a element is new, we need to find the animation start point carefully,
+    // otherwise it will looks strange when 'zoomToNode'.
+    function prepareAnimationWhenNoOld(lasts, element, storageName) {
+        var lastCfg = lasts[thisRawIndex] = {};
+        var parentNode = thisNode.parentNode;
+
+        if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {
+            var parentOldX = 0;
+            var parentOldY = 0;
+
+            // New nodes appear from right-bottom corner in 'zoomToNode' animation.
+            // For convenience, get old bounding rect from background.
+            var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];
+            if (!reRoot && parentOldBg && parentOldBg.old) {
+                parentOldX = parentOldBg.old.width;
+                parentOldY = parentOldBg.old.height;
+            }
+
+            // When no parent old shape found, its parent is new too,
+            // so we can just use {x:0, y:0}.
+            lastCfg.old = storageName === 'nodeGroup'
+                ? [0, parentOldY]
+                : {x: parentOldX, y: parentOldY, width: 0, height: 0};
+        }
+
+        // Fade in, user can be aware that these nodes are new.
+        lastCfg.fadein = storageName !== 'nodeGroup';
+    }
+}
+
+// We can not set all backgroud with the same z, Because the behaviour of
+// drill down and roll up differ background creation sequence from tree
+// hierarchy sequence, which cause that lowser background element overlap
+// upper ones. So we calculate z based on depth.
+// Moreover, we try to shrink down z interval to [0, 1] to avoid that
+// treemap with large z overlaps other components.
+function calculateZ(depth, zInLevel) {
+    var zb = depth * Z_BASE + zInLevel;
+    return (zb - 1) / zb;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Treemap action
+ */
+
+var noop$1 = function () {};
+
+var actionTypes = [
+    'treemapZoomToNode',
+    'treemapRender',
+    'treemapMove'
+];
+
+for (var i$2 = 0; i$2 < actionTypes.length; i$2++) {
+    registerAction({type: actionTypes[i$2], update: 'updateView'}, noop$1);
+}
+
+registerAction(
+    {type: 'treemapRootToNode', update: 'updateView'},
+    function (payload, ecModel) {
+
+        ecModel.eachComponent(
+            {mainType: 'series', subType: 'treemap', query: payload},
+            handleRootToNode
+        );
+
+        function handleRootToNode(model, index) {
+            var types = ['treemapZoomToNode', 'treemapRootToNode'];
+            var targetInfo = retrieveTargetInfo(payload, types, model);
+
+            if (targetInfo) {
+                var originViewRoot = model.getViewRoot();
+                if (originViewRoot) {
+                    payload.direction = aboveViewRoot(originViewRoot, targetInfo.node)
+                        ? 'rollUp' : 'drillDown';
+                }
+                model.resetViewRoot(targetInfo.node);
+            }
+        }
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$9 = each$1;
+var isObject$5 = isObject$1;
+
+var CATEGORY_DEFAULT_VISUAL_INDEX = -1;
+
+/**
+ * @param {Object} option
+ * @param {string} [option.type] See visualHandlers.
+ * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed'
+ * @param {Array.<number>=} [option.dataExtent] [minExtent, maxExtent],
+ *                                              required when mappingMethod is 'linear'
+ * @param {Array.<Object>=} [option.pieceList] [
+ *                                             {value: someValue},
+ *                                             {interval: [min1, max1], visual: {...}},
+ *                                             {interval: [min2, max2]}
+ *                                             ],
+ *                                            required when mappingMethod is 'piecewise'.
+ *                                            Visual for only each piece can be specified.
+ * @param {Array.<string|Object>=} [option.categories] ['cate1', 'cate2']
+ *                                            required when mappingMethod is 'category'.
+ *                                            If no option.categories, categories is set
+ *                                            as [0, 1, 2, ...].
+ * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'.
+ * @param {(Array|Object|*)} [option.visual]  Visual data.
+ *                                            when mappingMethod is 'category',
+ *                                            visual data can be array or object
+ *                                            (like: {cate1: '#222', none: '#fff'})
+ *                                            or primary types (which represents
+ *                                            defualt category visual), otherwise visual
+ *                                            can be array or primary (which will be
+ *                                            normalized to array).
+ *
+ */
+var VisualMapping = function (option) {
+    var mappingMethod = option.mappingMethod;
+    var visualType = option.type;
+
+    /**
+     * @readOnly
+     * @type {Object}
+     */
+    var thisOption = this.option = clone(option);
+
+    /**
+     * @readOnly
+     * @type {string}
+     */
+    this.type = visualType;
+
+    /**
+     * @readOnly
+     * @type {string}
+     */
+    this.mappingMethod = mappingMethod;
+
+    /**
+     * @private
+     * @type {Function}
+     */
+    this._normalizeData = normalizers[mappingMethod];
+
+    var visualHandler = visualHandlers[visualType];
+
+    /**
+     * @public
+     * @type {Function}
+     */
+    this.applyVisual = visualHandler.applyVisual;
+
+    /**
+     * @public
+     * @type {Function}
+     */
+    this.getColorMapper = visualHandler.getColorMapper;
+
+    /**
+     * @private
+     * @type {Function}
+     */
+    this._doMap = visualHandler._doMap[mappingMethod];
+
+    if (mappingMethod === 'piecewise') {
+        normalizeVisualRange(thisOption);
+        preprocessForPiecewise(thisOption);
+    }
+    else if (mappingMethod === 'category') {
+        thisOption.categories
+            ? preprocessForSpecifiedCategory(thisOption)
+            // categories is ordinal when thisOption.categories not specified,
+            // which need no more preprocess except normalize visual.
+            : normalizeVisualRange(thisOption, true);
+    }
+    else { // mappingMethod === 'linear' or 'fixed'
+        assert$1(mappingMethod !== 'linear' || thisOption.dataExtent);
+        normalizeVisualRange(thisOption);
+    }
+};
+
+VisualMapping.prototype = {
+
+    constructor: VisualMapping,
+
+    mapValueToVisual: function (value) {
+        var normalized = this._normalizeData(value);
+        return this._doMap(normalized, value);
+    },
+
+    getNormalizer: function () {
+        return bind(this._normalizeData, this);
+    }
+};
+
+var visualHandlers = VisualMapping.visualHandlers = {
+
+    color: {
+
+        applyVisual: makeApplyVisual('color'),
+
+        /**
+         * Create a mapper function
+         * @return {Function}
+         */
+        getColorMapper: function () {
+            var thisOption = this.option;
+
+            return bind(
+                thisOption.mappingMethod === 'category'
+                    ? function (value, isNormalized) {
+                        !isNormalized && (value = this._normalizeData(value));
+                        return doMapCategory.call(this, value);
+                    }
+                    : function (value, isNormalized, out) {
+                        // If output rgb array
+                        // which will be much faster and useful in pixel manipulation
+                        var returnRGBArray = !!out;
+                        !isNormalized && (value = this._normalizeData(value));
+                        out = fastLerp(value, thisOption.parsedVisual, out);
+                        return returnRGBArray ? out : stringify(out, 'rgba');
+                    },
+                this
+            );
+        },
+
+        _doMap: {
+            linear: function (normalized) {
+                return stringify(
+                    fastLerp(normalized, this.option.parsedVisual),
+                    'rgba'
+                );
+            },
+            category: doMapCategory,
+            piecewise: function (normalized, value) {
+                var result = getSpecifiedVisual.call(this, value);
+                if (result == null) {
+                    result = stringify(
+                        fastLerp(normalized, this.option.parsedVisual),
+                        'rgba'
+                    );
+                }
+                return result;
+            },
+            fixed: doMapFixed
+        }
+    },
+
+    colorHue: makePartialColorVisualHandler(function (color, value) {
+        return modifyHSL(color, value);
+    }),
+
+    colorSaturation: makePartialColorVisualHandler(function (color, value) {
+        return modifyHSL(color, null, value);
+    }),
+
+    colorLightness: makePartialColorVisualHandler(function (color, value) {
+        return modifyHSL(color, null, null, value);
+    }),
+
+    colorAlpha: makePartialColorVisualHandler(function (color, value) {
+        return modifyAlpha(color, value);
+    }),
+
+    opacity: {
+        applyVisual: makeApplyVisual('opacity'),
+        _doMap: makeDoMap([0, 1])
+    },
+
+    liftZ: {
+        applyVisual: makeApplyVisual('liftZ'),
+        _doMap: {
+            linear: doMapFixed,
+            category: doMapFixed,
+            piecewise: doMapFixed,
+            fixed: doMapFixed
+        }
+    },
+
+    symbol: {
+        applyVisual: function (value, getter, setter) {
+            var symbolCfg = this.mapValueToVisual(value);
+            if (isString(symbolCfg)) {
+                setter('symbol', symbolCfg);
+            }
+            else if (isObject$5(symbolCfg)) {
+                for (var name in symbolCfg) {
+                    if (symbolCfg.hasOwnProperty(name)) {
+                        setter(name, symbolCfg[name]);
+                    }
+                }
+            }
+        },
+        _doMap: {
+            linear: doMapToArray,
+            category: doMapCategory,
+            piecewise: function (normalized, value) {
+                var result = getSpecifiedVisual.call(this, value);
+                if (result == null) {
+                    result = doMapToArray.call(this, normalized);
+                }
+                return result;
+            },
+            fixed: doMapFixed
+        }
+    },
+
+    symbolSize: {
+        applyVisual: makeApplyVisual('symbolSize'),
+        _doMap: makeDoMap([0, 1])
+    }
+};
+
+
+function preprocessForPiecewise(thisOption) {
+    var pieceList = thisOption.pieceList;
+    thisOption.hasSpecialVisual = false;
+
+    each$1(pieceList, function (piece, index) {
+        piece.originIndex = index;
+        // piece.visual is "result visual value" but not
+        // a visual range, so it does not need to be normalized.
+        if (piece.visual != null) {
+            thisOption.hasSpecialVisual = true;
+        }
+    });
+}
+
+function preprocessForSpecifiedCategory(thisOption) {
+    // Hash categories.
+    var categories = thisOption.categories;
+    var visual = thisOption.visual;
+
+    var categoryMap = thisOption.categoryMap = {};
+    each$9(categories, function (cate, index) {
+        categoryMap[cate] = index;
+    });
+
+    // Process visual map input.
+    if (!isArray(visual)) {
+        var visualArr = [];
+
+        if (isObject$1(visual)) {
+            each$9(visual, function (v, cate) {
+                var index = categoryMap[cate];
+                visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;
+            });
+        }
+        else { // Is primary type, represents default visual.
+            visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;
+        }
+
+        visual = setVisualToOption(thisOption, visualArr);
+    }
+
+    // Remove categories that has no visual,
+    // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.
+    for (var i = categories.length - 1; i >= 0; i--) {
+        if (visual[i] == null) {
+            delete categoryMap[categories[i]];
+            categories.pop();
+        }
+    }
+}
+
+function normalizeVisualRange(thisOption, isCategory) {
+    var visual = thisOption.visual;
+    var visualArr = [];
+
+    if (isObject$1(visual)) {
+        each$9(visual, function (v) {
+            visualArr.push(v);
+        });
+    }
+    else if (visual != null) {
+        visualArr.push(visual);
+    }
+
+    var doNotNeedPair = {color: 1, symbol: 1};
+
+    if (!isCategory
+        && visualArr.length === 1
+        && !doNotNeedPair.hasOwnProperty(thisOption.type)
+    ) {
+        // Do not care visualArr.length === 0, which is illegal.
+        visualArr[1] = visualArr[0];
+    }
+
+    setVisualToOption(thisOption, visualArr);
+}
+
+function makePartialColorVisualHandler(applyValue) {
+    return {
+        applyVisual: function (value, getter, setter) {
+            value = this.mapValueToVisual(value);
+            // Must not be array value
+            setter('color', applyValue(getter('color'), value));
+        },
+        _doMap: makeDoMap([0, 1])
+    };
+}
+
+function doMapToArray(normalized) {
+    var visual = this.option.visual;
+    return visual[
+        Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))
+    ] || {};
+}
+
+function makeApplyVisual(visualType) {
+    return function (value, getter, setter) {
+        setter(visualType, this.mapValueToVisual(value));
+    };
+}
+
+function doMapCategory(normalized) {
+    var visual = this.option.visual;
+    return visual[
+        (this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX)
+            ? normalized % visual.length
+            : normalized
+    ];
+}
+
+function doMapFixed() {
+    return this.option.visual[0];
+}
+
+function makeDoMap(sourceExtent) {
+    return {
+        linear: function (normalized) {
+            return linearMap(normalized, sourceExtent, this.option.visual, true);
+        },
+        category: doMapCategory,
+        piecewise: function (normalized, value) {
+            var result = getSpecifiedVisual.call(this, value);
+            if (result == null) {
+                result = linearMap(normalized, sourceExtent, this.option.visual, true);
+            }
+            return result;
+        },
+        fixed: doMapFixed
+    };
+}
+
+function getSpecifiedVisual(value) {
+    var thisOption = this.option;
+    var pieceList = thisOption.pieceList;
+    if (thisOption.hasSpecialVisual) {
+        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);
+        var piece = pieceList[pieceIndex];
+        if (piece && piece.visual) {
+            return piece.visual[this.type];
+        }
+    }
+}
+
+function setVisualToOption(thisOption, visualArr) {
+    thisOption.visual = visualArr;
+    if (thisOption.type === 'color') {
+        thisOption.parsedVisual = map(visualArr, function (item) {
+            return parse(item);
+        });
+    }
+    return visualArr;
+}
+
+
+/**
+ * Normalizers by mapping methods.
+ */
+var normalizers = {
+
+    linear: function (value) {
+        return linearMap(value, this.option.dataExtent, [0, 1], true);
+    },
+
+    piecewise: function (value) {
+        var pieceList = this.option.pieceList;
+        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);
+        if (pieceIndex != null) {
+            return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);
+        }
+    },
+
+    category: function (value) {
+        var index = this.option.categories
+            ? this.option.categoryMap[value]
+            : value; // ordinal
+        return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;
+    },
+
+    fixed: noop
+};
+
+
+
+/**
+ * List available visual types.
+ *
+ * @public
+ * @return {Array.<string>}
+ */
+VisualMapping.listVisualTypes = function () {
+    var visualTypes = [];
+    each$1(visualHandlers, function (handler, key) {
+        visualTypes.push(key);
+    });
+    return visualTypes;
+};
+
+/**
+ * @public
+ */
+VisualMapping.addVisualHandler = function (name, handler) {
+    visualHandlers[name] = handler;
+};
+
+/**
+ * @public
+ */
+VisualMapping.isValidType = function (visualType) {
+    return visualHandlers.hasOwnProperty(visualType);
+};
+
+/**
+ * Convinent method.
+ * Visual can be Object or Array or primary type.
+ *
+ * @public
+ */
+VisualMapping.eachVisual = function (visual, callback, context) {
+    if (isObject$1(visual)) {
+        each$1(visual, callback, context);
+    }
+    else {
+        callback.call(context, visual);
+    }
+};
+
+VisualMapping.mapVisual = function (visual, callback, context) {
+    var isPrimary;
+    var newVisual = isArray(visual)
+        ? []
+        : isObject$1(visual)
+        ? {}
+        : (isPrimary = true, null);
+
+    VisualMapping.eachVisual(visual, function (v, key) {
+        var newVal = callback.call(context, v, key);
+        isPrimary ? (newVisual = newVal) : (newVisual[key] = newVal);
+    });
+    return newVisual;
+};
+
+/**
+ * @public
+ * @param {Object} obj
+ * @return {Object} new object containers visual values.
+ *                 If no visuals, return null.
+ */
+VisualMapping.retrieveVisuals = function (obj) {
+    var ret = {};
+    var hasVisual;
+
+    obj && each$9(visualHandlers, function (h, visualType) {
+        if (obj.hasOwnProperty(visualType)) {
+            ret[visualType] = obj[visualType];
+            hasVisual = true;
+        }
+    });
+
+    return hasVisual ? ret : null;
+};
+
+/**
+ * Give order to visual types, considering colorSaturation, colorAlpha depends on color.
+ *
+ * @public
+ * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}
+ *                                     IF Array, like: ['color', 'symbol', 'colorSaturation']
+ * @return {Array.<string>} Sorted visual types.
+ */
+VisualMapping.prepareVisualTypes = function (visualTypes) {
+    if (isObject$5(visualTypes)) {
+        var types = [];
+        each$9(visualTypes, function (item, type) {
+            types.push(type);
+        });
+        visualTypes = types;
+    }
+    else if (isArray(visualTypes)) {
+        visualTypes = visualTypes.slice();
+    }
+    else {
+        return [];
+    }
+
+    visualTypes.sort(function (type1, type2) {
+        // color should be front of colorSaturation, colorAlpha, ...
+        // symbol and symbolSize do not matter.
+        return (type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0)
+            ? 1 : -1;
+    });
+
+    return visualTypes;
+};
+
+/**
+ * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.
+ * Other visuals are only depends on themself.
+ *
+ * @public
+ * @param {string} visualType1
+ * @param {string} visualType2
+ * @return {boolean}
+ */
+VisualMapping.dependsOn = function (visualType1, visualType2) {
+    return visualType2 === 'color'
+        ? !!(visualType1 && visualType1.indexOf(visualType2) === 0)
+        : visualType1 === visualType2;
+};
+
+/**
+ * @param {number} value
+ * @param {Array.<Object>} pieceList [{value: ..., interval: [min, max]}, ...]
+ *                         Always from small to big.
+ * @param {boolean} [findClosestWhenOutside=false]
+ * @return {number} index
+ */
+VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {
+    var possibleI;
+    var abs = Infinity;
+
+    // value has the higher priority.
+    for (var i = 0, len = pieceList.length; i < len; i++) {
+        var pieceValue = pieceList[i].value;
+        if (pieceValue != null) {
+            if (pieceValue === value
+                // FIXME
+                // It is supposed to compare value according to value type of dimension,
+                // but currently value type can exactly be string or number.
+                // Compromise for numeric-like string (like '12'), especially
+                // in the case that visualMap.categories is ['22', '33'].
+                || (typeof pieceValue === 'string' && pieceValue === value + '')
+            ) {
+                return i;
+            }
+            findClosestWhenOutside && updatePossible(pieceValue, i);
+        }
+    }
+
+    for (var i = 0, len = pieceList.length; i < len; i++) {
+        var piece = pieceList[i];
+        var interval = piece.interval;
+        var close = piece.close;
+
+        if (interval) {
+            if (interval[0] === -Infinity) {
+                if (littleThan(close[1], value, interval[1])) {
+                    return i;
+                }
+            }
+            else if (interval[1] === Infinity) {
+                if (littleThan(close[0], interval[0], value)) {
+                    return i;
+                }
+            }
+            else if (
+                littleThan(close[0], interval[0], value)
+                && littleThan(close[1], value, interval[1])
+            ) {
+                return i;
+            }
+            findClosestWhenOutside && updatePossible(interval[0], i);
+            findClosestWhenOutside && updatePossible(interval[1], i);
+        }
+    }
+
+    if (findClosestWhenOutside) {
+        return value === Infinity
+            ? pieceList.length - 1
+            : value === -Infinity
+            ? 0
+            : possibleI;
+    }
+
+    function updatePossible(val, index) {
+        var newAbs = Math.abs(val - value);
+        if (newAbs < abs) {
+            abs = newAbs;
+            possibleI = index;
+        }
+    }
+
+};
+
+function littleThan(close, a, b) {
+    return close ? a <= b : a < b;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var isArray$2 = isArray;
+
+var ITEM_STYLE_NORMAL = 'itemStyle';
+
+var treemapVisual = {
+    seriesType: 'treemap',
+    reset: function (seriesModel, ecModel, api, payload) {
+        var tree = seriesModel.getData().tree;
+        var root = tree.root;
+        var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL);
+
+        if (root.isRemoved()) {
+            return;
+        }
+
+        var levelItemStyles = map(tree.levelModels, function (levelModel) {
+            return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null;
+        });
+
+        travelTree(
+            root, // Visual should calculate from tree root but not view root.
+            {},
+            levelItemStyles,
+            seriesItemStyleModel,
+            seriesModel.getViewRoot().getAncestors(),
+            seriesModel
+        );
+    }
+};
+
+function travelTree(
+    node, designatedVisual, levelItemStyles, seriesItemStyleModel,
+    viewRootAncestors, seriesModel
+) {
+    var nodeModel = node.getModel();
+    var nodeLayout = node.getLayout();
+
+    // Optimize
+    if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {
+        return;
+    }
+
+    var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL);
+    var levelItemStyle = levelItemStyles[node.depth];
+    var visuals = buildVisuals(
+        nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel
+    );
+
+    // calculate border color
+    var borderColor = nodeItemStyleModel.get('borderColor');
+    var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');
+    var thisNodeColor;
+    if (borderColorSaturation != null) {
+        // For performance, do not always execute 'calculateColor'.
+        thisNodeColor = calculateColor(visuals, node);
+        borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);
+    }
+    node.setVisual('borderColor', borderColor);
+
+    var viewChildren = node.viewChildren;
+    if (!viewChildren || !viewChildren.length) {
+        thisNodeColor = calculateColor(visuals, node);
+        // Apply visual to this node.
+        node.setVisual('color', thisNodeColor);
+    }
+    else {
+        var mapping = buildVisualMapping(
+            node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren
+        );
+
+        // Designate visual to children.
+        each$1(viewChildren, function (child, index) {
+            // If higher than viewRoot, only ancestors of viewRoot is needed to visit.
+            if (child.depth >= viewRootAncestors.length
+                || child === viewRootAncestors[child.depth]
+            ) {
+                var childVisual = mapVisual$1(
+                    nodeModel, visuals, child, index, mapping, seriesModel
+                );
+                travelTree(
+                    child, childVisual, levelItemStyles, seriesItemStyleModel,
+                    viewRootAncestors, seriesModel
+                );
+            }
+        });
+    }
+}
+
+function buildVisuals(
+    nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel
+) {
+    var visuals = extend({}, designatedVisual);
+
+    each$1(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {
+        // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel
+        var val = nodeItemStyleModel.get(visualName, true); // Ignore parent
+        val == null && levelItemStyle && (val = levelItemStyle[visualName]);
+        val == null && (val = designatedVisual[visualName]);
+        val == null && (val = seriesItemStyleModel.get(visualName));
+
+        val != null && (visuals[visualName] = val);
+    });
+
+    return visuals;
+}
+
+function calculateColor(visuals) {
+    var color = getValueVisualDefine(visuals, 'color');
+
+    if (color) {
+        var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha');
+        var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation');
+        if (colorSaturation) {
+            color = modifyHSL(color, null, null, colorSaturation);
+        }
+        if (colorAlpha) {
+            color = modifyAlpha(color, colorAlpha);
+        }
+
+        return color;
+    }
+}
+
+function calculateBorderColor(borderColorSaturation, thisNodeColor) {
+    return thisNodeColor != null
+            ? modifyHSL(thisNodeColor, null, null, borderColorSaturation)
+            : null;
+}
+
+function getValueVisualDefine(visuals, name) {
+    var value = visuals[name];
+    if (value != null && value !== 'none') {
+        return value;
+    }
+}
+
+function buildVisualMapping(
+    node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren
+) {
+    if (!viewChildren || !viewChildren.length) {
+        return;
+    }
+
+    var rangeVisual = getRangeVisual(nodeModel, 'color')
+        || (
+            visuals.color != null
+            && visuals.color !== 'none'
+            && (
+                getRangeVisual(nodeModel, 'colorAlpha')
+                || getRangeVisual(nodeModel, 'colorSaturation')
+            )
+        );
+
+    if (!rangeVisual) {
+        return;
+    }
+
+    var visualMin = nodeModel.get('visualMin');
+    var visualMax = nodeModel.get('visualMax');
+    var dataExtent = nodeLayout.dataExtent.slice();
+    visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin);
+    visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax);
+
+    var colorMappingBy = nodeModel.get('colorMappingBy');
+    var opt = {
+        type: rangeVisual.name,
+        dataExtent: dataExtent,
+        visual: rangeVisual.range
+    };
+    if (opt.type === 'color'
+        && (colorMappingBy === 'index' || colorMappingBy === 'id')
+    ) {
+        opt.mappingMethod = 'category';
+        opt.loop = true;
+        // categories is ordinal, so do not set opt.categories.
+    }
+    else {
+        opt.mappingMethod = 'linear';
+    }
+
+    var mapping = new VisualMapping(opt);
+    mapping.__drColorMappingBy = colorMappingBy;
+
+    return mapping;
+}
+
+// Notice: If we dont have the attribute 'colorRange', but only use
+// attribute 'color' to represent both concepts of 'colorRange' and 'color',
+// (It means 'colorRange' when 'color' is Array, means 'color' when not array),
+// this problem will be encountered:
+// If a level-1 node dont have children, and its siblings has children,
+// and colorRange is set on level-1, then the node can not be colored.
+// So we separate 'colorRange' and 'color' to different attributes.
+function getRangeVisual(nodeModel, name) {
+    // 'colorRange', 'colorARange', 'colorSRange'.
+    // If not exsits on this node, fetch from levels and series.
+    var range = nodeModel.get(name);
+    return (isArray$2(range) && range.length) ? {name: name, range: range} : null;
+}
+
+function mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) {
+    var childVisuals = extend({}, visuals);
+
+    if (mapping) {
+        var mappingType = mapping.type;
+        var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy;
+        var value =
+            colorMappingBy === 'index'
+            ? index
+            : colorMappingBy === 'id'
+            ? seriesModel.mapIdToIndex(child.getId())
+            : child.getValue(nodeModel.get('visualDimension'));
+
+        childVisuals[mappingType] = mapping.mapValueToVisual(value);
+    }
+
+    return childVisuals;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* The treemap layout implementation references to the treemap
+* layout of d3.js (d3/src/layout/treemap.js in v3). The use of
+* the source code of this file is also subject to the terms
+* and consitions of its license (BSD-3Clause, see
+* <echarts/src/licenses/LICENSE-d3>).
+*/
+
+var mathMax$4 = Math.max;
+var mathMin$4 = Math.min;
+var retrieveValue = retrieve;
+var each$10 = each$1;
+
+var PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth'];
+var PATH_GAP_WIDTH = ['itemStyle', 'gapWidth'];
+var PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show'];
+var PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height'];
+
+/**
+ * @public
+ */
+var treemapLayout = {
+    seriesType: 'treemap',
+    reset: function (seriesModel, ecModel, api, payload) {
+        // Layout result in each node:
+        // {x, y, width, height, area, borderWidth}
+        var ecWidth = api.getWidth();
+        var ecHeight = api.getHeight();
+        var seriesOption = seriesModel.option;
+
+        var layoutInfo = getLayoutRect(
+            seriesModel.getBoxLayoutParams(),
+            {
+                width: api.getWidth(),
+                height: api.getHeight()
+            }
+        );
+
+        var size = seriesOption.size || []; // Compatible with ec2.
+        var containerWidth = parsePercent$1(
+            retrieveValue(layoutInfo.width, size[0]),
+            ecWidth
+        );
+        var containerHeight = parsePercent$1(
+            retrieveValue(layoutInfo.height, size[1]),
+            ecHeight
+        );
+
+        // Fetch payload info.
+        var payloadType = payload && payload.type;
+        var types = ['treemapZoomToNode', 'treemapRootToNode'];
+        var targetInfo = retrieveTargetInfo(payload, types, seriesModel);
+        var rootRect = (payloadType === 'treemapRender' || payloadType === 'treemapMove')
+            ? payload.rootRect : null;
+        var viewRoot = seriesModel.getViewRoot();
+        var viewAbovePath = getPathToRoot(viewRoot);
+
+        if (payloadType !== 'treemapMove') {
+            var rootSize = payloadType === 'treemapZoomToNode'
+                ? estimateRootSize(
+                    seriesModel, targetInfo, viewRoot, containerWidth, containerHeight
+                )
+                : rootRect
+                ? [rootRect.width, rootRect.height]
+                : [containerWidth, containerHeight];
+
+            var sort = seriesOption.sort;
+            if (sort && sort !== 'asc' && sort !== 'desc') {
+                sort = 'desc';
+            }
+            var options = {
+                squareRatio: seriesOption.squareRatio,
+                sort: sort,
+                leafDepth: seriesOption.leafDepth
+            };
+
+            // layout should be cleared because using updateView but not update.
+            viewRoot.hostTree.clearLayouts();
+
+            // TODO
+            // optimize: if out of view clip, do not layout.
+            // But take care that if do not render node out of view clip,
+            // how to calculate start po
+
+            var viewRootLayout = {
+                x: 0, y: 0,
+                width: rootSize[0], height: rootSize[1],
+                area: rootSize[0] * rootSize[1]
+            };
+            viewRoot.setLayout(viewRootLayout);
+
+            squarify(viewRoot, options, false, 0);
+            // Supplement layout.
+            var viewRootLayout = viewRoot.getLayout();
+            each$10(viewAbovePath, function (node, index) {
+                var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();
+                node.setLayout(extend(
+                    {dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0},
+                    viewRootLayout
+                ));
+            });
+        }
+
+        var treeRoot = seriesModel.getData().tree.root;
+
+        treeRoot.setLayout(
+            calculateRootPosition(layoutInfo, rootRect, targetInfo),
+            true
+        );
+
+        seriesModel.setLayoutInfo(layoutInfo);
+
+        // FIXME
+        // 现在没有clip功能,暂时取ec高宽。
+        prunning(
+            treeRoot,
+            // Transform to base element coordinate system.
+            new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight),
+            viewAbovePath,
+            viewRoot,
+            0
+        );
+    }
+};
+
+/**
+ * Layout treemap with squarify algorithm.
+ * @see https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf
+ * The implementation references to the treemap layout of d3.js.
+ * See the license statement at the head of this file.
+ *
+ * @protected
+ * @param {module:echarts/data/Tree~TreeNode} node
+ * @param {Object} options
+ * @param {string} options.sort 'asc' or 'desc'
+ * @param {number} options.squareRatio
+ * @param {boolean} hideChildren
+ * @param {number} depth
+ */
+function squarify(node, options, hideChildren, depth) {
+    var width;
+    var height;
+
+    if (node.isRemoved()) {
+        return;
+    }
+
+    var thisLayout = node.getLayout();
+    width = thisLayout.width;
+    height = thisLayout.height;
+
+    // Considering border and gap
+    var nodeModel = node.getModel();
+    var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);
+    var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;
+    var upperLabelHeight = getUpperLabelHeight(nodeModel);
+    var upperHeight = Math.max(borderWidth, upperLabelHeight);
+    var layoutOffset = borderWidth - halfGapWidth;
+    var layoutOffsetUpper = upperHeight - halfGapWidth;
+    var nodeModel = node.getModel();
+
+    node.setLayout({
+        borderWidth: borderWidth,
+        upperHeight: upperHeight,
+        upperLabelHeight: upperLabelHeight
+    }, true);
+
+    width = mathMax$4(width - 2 * layoutOffset, 0);
+    height = mathMax$4(height - layoutOffset - layoutOffsetUpper, 0);
+
+    var totalArea = width * height;
+    var viewChildren = initChildren(
+        node, nodeModel, totalArea, options, hideChildren, depth
+    );
+
+    if (!viewChildren.length) {
+        return;
+    }
+
+    var rect = {x: layoutOffset, y: layoutOffsetUpper, width: width, height: height};
+    var rowFixedLength = mathMin$4(width, height);
+    var best = Infinity; // the best row score so far
+    var row = [];
+    row.area = 0;
+
+    for (var i = 0, len = viewChildren.length; i < len;) {
+        var child = viewChildren[i];
+
+        row.push(child);
+        row.area += child.getLayout().area;
+        var score = worst(row, rowFixedLength, options.squareRatio);
+
+        // continue with this orientation
+        if (score <= best) {
+            i++;
+            best = score;
+        }
+        // abort, and try a different orientation
+        else {
+            row.area -= row.pop().getLayout().area;
+            position(row, rowFixedLength, rect, halfGapWidth, false);
+            rowFixedLength = mathMin$4(rect.width, rect.height);
+            row.length = row.area = 0;
+            best = Infinity;
+        }
+    }
+
+    if (row.length) {
+        position(row, rowFixedLength, rect, halfGapWidth, true);
+    }
+
+    if (!hideChildren) {
+        var childrenVisibleMin = nodeModel.get('childrenVisibleMin');
+        if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {
+            hideChildren = true;
+        }
+    }
+
+    for (var i = 0, len = viewChildren.length; i < len; i++) {
+        squarify(viewChildren[i], options, hideChildren, depth + 1);
+    }
+}
+
+/**
+ * Set area to each child, and calculate data extent for visual coding.
+ */
+function initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {
+    var viewChildren = node.children || [];
+    var orderBy = options.sort;
+    orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);
+
+    var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth;
+
+    // leafDepth has higher priority.
+    if (hideChildren && !overLeafDepth) {
+        return (node.viewChildren = []);
+    }
+
+    // Sort children, order by desc.
+    viewChildren = filter(viewChildren, function (child) {
+        return !child.isRemoved();
+    });
+
+    sort$1(viewChildren, orderBy);
+
+    var info = statistic(nodeModel, viewChildren, orderBy);
+
+    if (info.sum === 0) {
+        return (node.viewChildren = []);
+    }
+
+    info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);
+
+    if (info.sum === 0) {
+        return (node.viewChildren = []);
+    }
+
+    // Set area to each child.
+    for (var i = 0, len = viewChildren.length; i < len; i++) {
+        var area = viewChildren[i].getValue() / info.sum * totalArea;
+        // Do not use setLayout({...}, true), because it is needed to clear last layout.
+        viewChildren[i].setLayout({area: area});
+    }
+
+    if (overLeafDepth) {
+        viewChildren.length && node.setLayout({isLeafRoot: true}, true);
+        viewChildren.length = 0;
+    }
+
+    node.viewChildren = viewChildren;
+    node.setLayout({dataExtent: info.dataExtent}, true);
+
+    return viewChildren;
+}
+
+/**
+ * Consider 'visibleMin'. Modify viewChildren and get new sum.
+ */
+function filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {
+
+    // visibleMin is not supported yet when no option.sort.
+    if (!orderBy) {
+        return sum;
+    }
+
+    var visibleMin = nodeModel.get('visibleMin');
+    var len = orderedChildren.length;
+    var deletePoint = len;
+
+    // Always travel from little value to big value.
+    for (var i = len - 1; i >= 0; i--) {
+        var value = orderedChildren[
+            orderBy === 'asc' ? len - i - 1 : i
+        ].getValue();
+
+        if (value / sum * totalArea < visibleMin) {
+            deletePoint = i;
+            sum -= value;
+        }
+    }
+
+    orderBy === 'asc'
+        ? orderedChildren.splice(0, len - deletePoint)
+        : orderedChildren.splice(deletePoint, len - deletePoint);
+
+    return sum;
+}
+
+/**
+ * Sort
+ */
+function sort$1(viewChildren, orderBy) {
+    if (orderBy) {
+        viewChildren.sort(function (a, b) {
+            var diff = orderBy === 'asc'
+                ?  a.getValue() - b.getValue() : b.getValue() - a.getValue();
+            return diff === 0
+                ? (orderBy === 'asc'
+                    ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex
+                )
+                : diff;
+        });
+    }
+    return viewChildren;
+}
+
+/**
+ * Statistic
+ */
+function statistic(nodeModel, children, orderBy) {
+    // Calculate sum.
+    var sum = 0;
+    for (var i = 0, len = children.length; i < len; i++) {
+        sum += children[i].getValue();
+    }
+
+    // Statistic data extent for latter visual coding.
+    // Notice: data extent should be calculate based on raw children
+    // but not filtered view children, otherwise visual mapping will not
+    // be stable when zoom (where children is filtered by visibleMin).
+
+    var dimension = nodeModel.get('visualDimension');
+    var dataExtent;
+
+    // The same as area dimension.
+    if (!children || !children.length) {
+        dataExtent = [NaN, NaN];
+    }
+    else if (dimension === 'value' && orderBy) {
+        dataExtent = [
+            children[children.length - 1].getValue(),
+            children[0].getValue()
+        ];
+        orderBy === 'asc' && dataExtent.reverse();
+    }
+    // Other dimension.
+    else {
+        var dataExtent = [Infinity, -Infinity];
+        each$10(children, function (child) {
+            var value = child.getValue(dimension);
+            value < dataExtent[0] && (dataExtent[0] = value);
+            value > dataExtent[1] && (dataExtent[1] = value);
+        });
+    }
+
+    return {sum: sum, dataExtent: dataExtent};
+}
+
+/**
+ * Computes the score for the specified row,
+ * as the worst aspect ratio.
+ */
+function worst(row, rowFixedLength, ratio) {
+    var areaMax = 0;
+    var areaMin = Infinity;
+
+    for (var i = 0, area, len = row.length; i < len; i++) {
+        area = row[i].getLayout().area;
+        if (area) {
+            area < areaMin && (areaMin = area);
+            area > areaMax && (areaMax = area);
+        }
+    }
+
+    var squareArea = row.area * row.area;
+    var f = rowFixedLength * rowFixedLength * ratio;
+
+    return squareArea
+        ? mathMax$4(
+            (f * areaMax) / squareArea,
+            squareArea / (f * areaMin)
+        )
+        : Infinity;
+}
+
+/**
+ * Positions the specified row of nodes. Modifies `rect`.
+ */
+function position(row, rowFixedLength, rect, halfGapWidth, flush) {
+    // When rowFixedLength === rect.width,
+    // it is horizontal subdivision,
+    // rowFixedLength is the width of the subdivision,
+    // rowOtherLength is the height of the subdivision,
+    // and nodes will be positioned from left to right.
+
+    // wh[idx0WhenH] means: when horizontal,
+    //      wh[idx0WhenH] => wh[0] => 'width'.
+    //      xy[idx1WhenH] => xy[1] => 'y'.
+    var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;
+    var idx1WhenH = 1 - idx0WhenH;
+    var xy = ['x', 'y'];
+    var wh = ['width', 'height'];
+
+    var last = rect[xy[idx0WhenH]];
+    var rowOtherLength = rowFixedLength
+        ? row.area / rowFixedLength : 0;
+
+    if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {
+        rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow
+    }
+    for (var i = 0, rowLen = row.length; i < rowLen; i++) {
+        var node = row[i];
+        var nodeLayout = {};
+        var step = rowOtherLength
+            ? node.getLayout().area / rowOtherLength : 0;
+
+        var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$4(rowOtherLength - 2 * halfGapWidth, 0);
+
+        // We use Math.max/min to avoid negative width/height when considering gap width.
+        var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;
+        var modWH = (i === rowLen - 1 || remain < step) ? remain : step;
+        var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$4(modWH - 2 * halfGapWidth, 0);
+
+        nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$4(halfGapWidth, wh1 / 2);
+        nodeLayout[xy[idx0WhenH]] = last + mathMin$4(halfGapWidth, wh0 / 2);
+
+        last += modWH;
+        node.setLayout(nodeLayout, true);
+    }
+
+    rect[xy[idx1WhenH]] += rowOtherLength;
+    rect[wh[idx1WhenH]] -= rowOtherLength;
+}
+
+// Return [containerWidth, containerHeight] as defualt.
+function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {
+    // If targetInfo.node exists, we zoom to the node,
+    // so estimate whold width and heigth by target node.
+    var currNode = (targetInfo || {}).node;
+    var defaultSize = [containerWidth, containerHeight];
+
+    if (!currNode || currNode === viewRoot) {
+        return defaultSize;
+    }
+
+    var parent;
+    var viewArea = containerWidth * containerHeight;
+    var area = viewArea * seriesModel.option.zoomToNodeRatio;
+
+    while (parent = currNode.parentNode) { // jshint ignore:line
+        var sum = 0;
+        var siblings = parent.children;
+
+        for (var i = 0, len = siblings.length; i < len; i++) {
+            sum += siblings[i].getValue();
+        }
+        var currNodeValue = currNode.getValue();
+        if (currNodeValue === 0) {
+            return defaultSize;
+        }
+        area *= sum / currNodeValue;
+
+        // Considering border, suppose aspect ratio is 1.
+        var parentModel = parent.getModel();
+        var borderWidth = parentModel.get(PATH_BORDER_WIDTH);
+        var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth));
+        area += 4 * borderWidth * borderWidth
+            + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);
+
+        area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);
+
+        currNode = parent;
+    }
+
+    area < viewArea && (area = viewArea);
+    var scale = Math.pow(area / viewArea, 0.5);
+
+    return [containerWidth * scale, containerHeight * scale];
+}
+
+// Root postion base on coord of containerGroup
+function calculateRootPosition(layoutInfo, rootRect, targetInfo) {
+    if (rootRect) {
+        return {x: rootRect.x, y: rootRect.y};
+    }
+
+    var defaultPosition = {x: 0, y: 0};
+    if (!targetInfo) {
+        return defaultPosition;
+    }
+
+    // If targetInfo is fetched by 'retrieveTargetInfo',
+    // old tree and new tree are the same tree,
+    // so the node still exists and we can visit it.
+
+    var targetNode = targetInfo.node;
+    var layout = targetNode.getLayout();
+
+    if (!layout) {
+        return defaultPosition;
+    }
+
+    // Transform coord from local to container.
+    var targetCenter = [layout.width / 2, layout.height / 2];
+    var node = targetNode;
+    while (node) {
+        var nodeLayout = node.getLayout();
+        targetCenter[0] += nodeLayout.x;
+        targetCenter[1] += nodeLayout.y;
+        node = node.parentNode;
+    }
+
+    return {
+        x: layoutInfo.width / 2 - targetCenter[0],
+        y: layoutInfo.height / 2 - targetCenter[1]
+    };
+}
+
+// Mark nodes visible for prunning when visual coding and rendering.
+// Prunning depends on layout and root position, so we have to do it after layout.
+function prunning(node, clipRect, viewAbovePath, viewRoot, depth) {
+    var nodeLayout = node.getLayout();
+    var nodeInViewAbovePath = viewAbovePath[depth];
+    var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;
+
+    if (
+        (nodeInViewAbovePath && !isAboveViewRoot)
+        || (depth === viewAbovePath.length && node !== viewRoot)
+    ) {
+        return;
+    }
+
+    node.setLayout({
+        // isInView means: viewRoot sub tree + viewAbovePath
+        isInView: true,
+        // invisible only means: outside view clip so that the node can not
+        // see but still layout for animation preparation but not render.
+        invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),
+        isAboveViewRoot: isAboveViewRoot
+    }, true);
+
+    // Transform to child coordinate.
+    var childClipRect = new BoundingRect(
+        clipRect.x - nodeLayout.x,
+        clipRect.y - nodeLayout.y,
+        clipRect.width,
+        clipRect.height
+    );
+
+    each$10(node.viewChildren || [], function (child) {
+        prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);
+    });
+}
+
+function getUpperLabelHeight(model) {
+    return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(treemapVisual);
+registerLayout(treemapLayout);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Graph data structure
+ *
+ * @module echarts/data/Graph
+ * @author Yi Shen(https://www.github.com/pissang)
+ */
+
+// id may be function name of Object, add a prefix to avoid this problem.
+function generateNodeKey (id) {
+    return '_EC_' + id;
+}
+/**
+ * @alias module:echarts/data/Graph
+ * @constructor
+ * @param {boolean} directed
+ */
+var Graph = function(directed) {
+    /**
+     * 是否是有向图
+     * @type {boolean}
+     * @private
+     */
+    this._directed = directed || false;
+
+    /**
+     * @type {Array.<module:echarts/data/Graph.Node>}
+     * @readOnly
+     */
+    this.nodes = [];
+
+    /**
+     * @type {Array.<module:echarts/data/Graph.Edge>}
+     * @readOnly
+     */
+    this.edges = [];
+
+    /**
+     * @type {Object.<string, module:echarts/data/Graph.Node>}
+     * @private
+     */
+    this._nodesMap = {};
+    /**
+     * @type {Object.<string, module:echarts/data/Graph.Edge>}
+     * @private
+     */
+    this._edgesMap = {};
+
+    /**
+     * @type {module:echarts/data/List}
+     * @readOnly
+     */
+    this.data;
+
+    /**
+     * @type {module:echarts/data/List}
+     * @readOnly
+     */
+    this.edgeData;
+};
+
+var graphProto = Graph.prototype;
+/**
+ * @type {string}
+ */
+graphProto.type = 'graph';
+
+/**
+ * If is directed graph
+ * @return {boolean}
+ */
+graphProto.isDirected = function () {
+    return this._directed;
+};
+
+/**
+ * Add a new node
+ * @param {string} id
+ * @param {number} [dataIndex]
+ */
+graphProto.addNode = function (id, dataIndex) {
+    id = id || ('' + dataIndex);
+
+    var nodesMap = this._nodesMap;
+
+    if (nodesMap[generateNodeKey(id)]) {
+        if (__DEV__) {
+            console.error('Graph nodes have duplicate name or id');
+        }
+        return;
+    }
+
+    var node = new Node(id, dataIndex);
+    node.hostGraph = this;
+
+    this.nodes.push(node);
+
+    nodesMap[generateNodeKey(id)] = node;
+    return node;
+};
+
+/**
+ * Get node by data index
+ * @param  {number} dataIndex
+ * @return {module:echarts/data/Graph~Node}
+ */
+graphProto.getNodeByIndex = function (dataIndex) {
+    var rawIdx = this.data.getRawIndex(dataIndex);
+    return this.nodes[rawIdx];
+};
+/**
+ * Get node by id
+ * @param  {string} id
+ * @return {module:echarts/data/Graph.Node}
+ */
+graphProto.getNodeById = function (id) {
+    return this._nodesMap[generateNodeKey(id)];
+};
+
+/**
+ * Add a new edge
+ * @param {number|string|module:echarts/data/Graph.Node} n1
+ * @param {number|string|module:echarts/data/Graph.Node} n2
+ * @param {number} [dataIndex=-1]
+ * @return {module:echarts/data/Graph.Edge}
+ */
+graphProto.addEdge = function (n1, n2, dataIndex) {
+    var nodesMap = this._nodesMap;
+    var edgesMap = this._edgesMap;
+
+    // PNEDING
+    if (typeof n1 === 'number') {
+        n1 = this.nodes[n1];
+    }
+    if (typeof n2 === 'number') {
+        n2 = this.nodes[n2];
+    }
+
+    if (!Node.isInstance(n1)) {
+        n1 = nodesMap[generateNodeKey(n1)];
+    }
+    if (!Node.isInstance(n2)) {
+        n2 = nodesMap[generateNodeKey(n2)];
+    }
+    if (!n1 || !n2) {
+        return;
+    }
+
+    var key = n1.id + '-' + n2.id;
+    // PENDING
+    if (edgesMap[key]) {
+        return;
+    }
+
+    var edge = new Edge(n1, n2, dataIndex);
+    edge.hostGraph = this;
+
+    if (this._directed) {
+        n1.outEdges.push(edge);
+        n2.inEdges.push(edge);
+    }
+    n1.edges.push(edge);
+    if (n1 !== n2) {
+        n2.edges.push(edge);
+    }
+
+    this.edges.push(edge);
+    edgesMap[key] = edge;
+
+    return edge;
+};
+
+/**
+ * Get edge by data index
+ * @param  {number} dataIndex
+ * @return {module:echarts/data/Graph~Node}
+ */
+graphProto.getEdgeByIndex = function (dataIndex) {
+    var rawIdx = this.edgeData.getRawIndex(dataIndex);
+    return this.edges[rawIdx];
+};
+/**
+ * Get edge by two linked nodes
+ * @param  {module:echarts/data/Graph.Node|string} n1
+ * @param  {module:echarts/data/Graph.Node|string} n2
+ * @return {module:echarts/data/Graph.Edge}
+ */
+graphProto.getEdge = function (n1, n2) {
+    if (Node.isInstance(n1)) {
+        n1 = n1.id;
+    }
+    if (Node.isInstance(n2)) {
+        n2 = n2.id;
+    }
+
+    var edgesMap = this._edgesMap;
+
+    if (this._directed) {
+        return edgesMap[n1 + '-' + n2];
+    } else {
+        return edgesMap[n1 + '-' + n2]
+            || edgesMap[n2 + '-' + n1];
+    }
+};
+
+/**
+ * Iterate all nodes
+ * @param  {Function} cb
+ * @param  {*} [context]
+ */
+graphProto.eachNode = function (cb, context) {
+    var nodes = this.nodes;
+    var len = nodes.length;
+    for (var i = 0; i < len; i++) {
+        if (nodes[i].dataIndex >= 0) {
+            cb.call(context, nodes[i], i);
+        }
+    }
+};
+
+/**
+ * Iterate all edges
+ * @param  {Function} cb
+ * @param  {*} [context]
+ */
+graphProto.eachEdge = function (cb, context) {
+    var edges = this.edges;
+    var len = edges.length;
+    for (var i = 0; i < len; i++) {
+        if (edges[i].dataIndex >= 0
+            && edges[i].node1.dataIndex >= 0
+            && edges[i].node2.dataIndex >= 0
+        ) {
+            cb.call(context, edges[i], i);
+        }
+    }
+};
+
+/**
+ * Breadth first traverse
+ * @param {Function} cb
+ * @param {module:echarts/data/Graph.Node} startNode
+ * @param {string} [direction='none'] 'none'|'in'|'out'
+ * @param {*} [context]
+ */
+graphProto.breadthFirstTraverse = function (
+    cb, startNode, direction, context
+) {
+    if (!Node.isInstance(startNode)) {
+        startNode = this._nodesMap[generateNodeKey(startNode)];
+    }
+    if (!startNode) {
+        return;
+    }
+
+    var edgeType = direction === 'out'
+        ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges');
+
+    for (var i = 0; i < this.nodes.length; i++) {
+        this.nodes[i].__visited = false;
+    }
+
+    if (cb.call(context, startNode, null)) {
+        return;
+    }
+
+    var queue = [startNode];
+    while (queue.length) {
+        var currentNode = queue.shift();
+        var edges = currentNode[edgeType];
+
+        for (var i = 0; i < edges.length; i++) {
+            var e = edges[i];
+            var otherNode = e.node1 === currentNode
+                ? e.node2 : e.node1;
+            if (!otherNode.__visited) {
+                if (cb.call(context, otherNode, currentNode)) {
+                    // Stop traversing
+                    return;
+                }
+                queue.push(otherNode);
+                otherNode.__visited = true;
+            }
+        }
+    }
+};
+
+// TODO
+// graphProto.depthFirstTraverse = function (
+//     cb, startNode, direction, context
+// ) {
+
+// };
+
+// Filter update
+graphProto.update = function () {
+    var data = this.data;
+    var edgeData = this.edgeData;
+    var nodes = this.nodes;
+    var edges = this.edges;
+
+    for (var i = 0, len = nodes.length; i < len; i++) {
+        nodes[i].dataIndex = -1;
+    }
+    for (var i = 0, len = data.count(); i < len; i++) {
+        nodes[data.getRawIndex(i)].dataIndex = i;
+    }
+
+    edgeData.filterSelf(function (idx) {
+        var edge = edges[edgeData.getRawIndex(idx)];
+        return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;
+    });
+
+    // Update edge
+    for (var i = 0, len = edges.length; i < len; i++) {
+        edges[i].dataIndex = -1;
+    }
+    for (var i = 0, len = edgeData.count(); i < len; i++) {
+        edges[edgeData.getRawIndex(i)].dataIndex = i;
+    }
+};
+
+/**
+ * @return {module:echarts/data/Graph}
+ */
+graphProto.clone = function () {
+    var graph = new Graph(this._directed);
+    var nodes = this.nodes;
+    var edges = this.edges;
+    for (var i = 0; i < nodes.length; i++) {
+        graph.addNode(nodes[i].id, nodes[i].dataIndex);
+    }
+    for (var i = 0; i < edges.length; i++) {
+        var e = edges[i];
+        graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);
+    }
+    return graph;
+};
+
+
+/**
+ * @alias module:echarts/data/Graph.Node
+ */
+function Node(id, dataIndex) {
+    /**
+    * @type {string}
+    */
+    this.id = id == null ? '' : id;
+
+    /**
+    * @type {Array.<module:echarts/data/Graph.Edge>}
+    */
+    this.inEdges = [];
+    /**
+    * @type {Array.<module:echarts/data/Graph.Edge>}
+    */
+    this.outEdges = [];
+    /**
+    * @type {Array.<module:echarts/data/Graph.Edge>}
+    */
+    this.edges = [];
+    /**
+     * @type {module:echarts/data/Graph}
+     */
+    this.hostGraph;
+
+    /**
+     * @type {number}
+     */
+    this.dataIndex = dataIndex == null ? -1 : dataIndex;
+}
+
+Node.prototype = {
+
+    constructor: Node,
+
+    /**
+     * @return {number}
+     */
+    degree: function () {
+        return this.edges.length;
+    },
+
+    /**
+     * @return {number}
+     */
+    inDegree: function () {
+        return this.inEdges.length;
+    },
+
+    /**
+    * @return {number}
+    */
+    outDegree: function () {
+        return this.outEdges.length;
+    },
+
+    /**
+     * @param {string} [path]
+     * @return {module:echarts/model/Model}
+     */
+    getModel: function (path) {
+        if (this.dataIndex < 0) {
+            return;
+        }
+        var graph = this.hostGraph;
+        var itemModel = graph.data.getItemModel(this.dataIndex);
+
+        return itemModel.getModel(path);
+    }
+};
+
+/**
+ * 图边
+ * @alias module:echarts/data/Graph.Edge
+ * @param {module:echarts/data/Graph.Node} n1
+ * @param {module:echarts/data/Graph.Node} n2
+ * @param {number} [dataIndex=-1]
+ */
+function Edge(n1, n2, dataIndex) {
+
+    /**
+     * 节点1,如果是有向图则为源节点
+     * @type {module:echarts/data/Graph.Node}
+     */
+    this.node1 = n1;
+
+    /**
+     * 节点2,如果是有向图则为目标节点
+     * @type {module:echarts/data/Graph.Node}
+     */
+    this.node2 = n2;
+
+    this.dataIndex = dataIndex == null ? -1 : dataIndex;
+}
+
+/**
+ * @param {string} [path]
+ * @return {module:echarts/model/Model}
+ */
+Edge.prototype.getModel = function (path) {
+    if (this.dataIndex < 0) {
+        return;
+    }
+    var graph = this.hostGraph;
+    var itemModel = graph.edgeData.getItemModel(this.dataIndex);
+
+    return itemModel.getModel(path);
+};
+
+var createGraphDataProxyMixin = function (hostName, dataName) {
+    return {
+        /**
+         * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.
+         * @return {number}
+         */
+        getValue: function (dimension) {
+            var data = this[hostName][dataName];
+            return data.get(data.getDimension(dimension || 'value'), this.dataIndex);
+        },
+
+        /**
+         * @param {Object|string} key
+         * @param {*} [value]
+         */
+        setVisual: function (key, value) {
+            this.dataIndex >= 0
+                && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);
+        },
+
+        /**
+         * @param {string} key
+         * @return {boolean}
+         */
+        getVisual: function (key, ignoreParent) {
+            return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent);
+        },
+
+        /**
+         * @param {Object} layout
+         * @return {boolean} [merge=false]
+         */
+        setLayout: function (layout, merge$$1) {
+            this.dataIndex >= 0
+                && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge$$1);
+        },
+
+        /**
+         * @return {Object}
+         */
+        getLayout: function () {
+            return this[hostName][dataName].getItemLayout(this.dataIndex);
+        },
+
+        /**
+         * @return {module:zrender/Element}
+         */
+        getGraphicEl: function () {
+            return this[hostName][dataName].getItemGraphicEl(this.dataIndex);
+        },
+
+        /**
+         * @return {number}
+         */
+        getRawIndex: function () {
+            return this[hostName][dataName].getRawIndex(this.dataIndex);
+        }
+    };
+};
+
+mixin(Node, createGraphDataProxyMixin('hostGraph', 'data'));
+mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData'));
+
+Graph.Node = Node;
+Graph.Edge = Edge;
+
+enableClassCheck(Node);
+enableClassCheck(Edge);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var createGraphFromNodeEdge = function (nodes, edges, seriesModel, directed, beforeLink) {
+    // ??? TODO
+    // support dataset?
+    var graph = new Graph(directed);
+    for (var i = 0; i < nodes.length; i++) {
+        graph.addNode(retrieve(
+            // Id, name, dataIndex
+            nodes[i].id, nodes[i].name, i
+        ), i);
+    }
+
+    var linkNameList = [];
+    var validEdges = [];
+    var linkCount = 0;
+    for (var i = 0; i < edges.length; i++) {
+        var link = edges[i];
+        var source = link.source;
+        var target = link.target;
+        // addEdge may fail when source or target not exists
+        if (graph.addEdge(source, target, linkCount)) {
+            validEdges.push(link);
+            linkNameList.push(retrieve(link.id, source + ' > ' + target));
+            linkCount++;
+        }
+    }
+
+    var coordSys = seriesModel.get('coordinateSystem');
+    var nodeData;
+    if (coordSys === 'cartesian2d' || coordSys === 'polar') {
+        nodeData = createListFromArray(nodes, seriesModel);
+    }
+    else {
+        var coordSysCtor = CoordinateSystemManager.get(coordSys);
+        var coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view')
+            ? (coordSysCtor.dimensions || []) : [];
+        // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs
+        // `value` dimension, but graph need `value` dimension. It's better to
+        // uniform this behavior.
+        if (indexOf(coordDimensions, 'value') < 0) {
+            coordDimensions.concat(['value']);
+        }
+
+        var dimensionNames = createDimensions(nodes, {
+            coordDimensions: coordDimensions
+        });
+        nodeData = new List(dimensionNames, seriesModel);
+        nodeData.initData(nodes);
+    }
+
+    var edgeData = new List(['value'], seriesModel);
+    edgeData.initData(validEdges, linkNameList);
+
+    beforeLink && beforeLink(nodeData, edgeData);
+
+    linkList({
+        mainData: nodeData,
+        struct: graph,
+        structAttr: 'graph',
+        datas: {node: nodeData, edge: edgeData},
+        datasAttr: {node: 'data', edge: 'edgeData'}
+    });
+
+    // Update dataIndex of nodes and edges because invalid edge may be removed
+    graph.update();
+
+    return graph;
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var GraphSeries = extendSeriesModel({
+
+    type: 'series.graph',
+
+    init: function (option) {
+        GraphSeries.superApply(this, 'init', arguments);
+
+        // Provide data for legend select
+        this.legendDataProvider = function () {
+            return this._categoriesData;
+        };
+
+        this.fillDataTextStyle(option.edges || option.links);
+
+        this._updateCategoriesData();
+    },
+
+    mergeOption: function (option) {
+        GraphSeries.superApply(this, 'mergeOption', arguments);
+
+        this.fillDataTextStyle(option.edges || option.links);
+
+        this._updateCategoriesData();
+    },
+
+    mergeDefaultAndTheme: function (option) {
+        GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments);
+        defaultEmphasis(option, ['edgeLabel'], ['show']);
+    },
+
+    getInitialData: function (option, ecModel) {
+        var edges = option.edges || option.links || [];
+        var nodes = option.data || option.nodes || [];
+        var self = this;
+
+        if (nodes && edges) {
+            return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data;
+        }
+
+        function beforeLink(nodeData, edgeData) {
+            // Overwrite nodeData.getItemModel to
+            nodeData.wrapMethod('getItemModel', function (model) {
+                var categoriesModels = self._categoriesModels;
+                var categoryIdx = model.getShallow('category');
+                var categoryModel = categoriesModels[categoryIdx];
+                if (categoryModel) {
+                    categoryModel.parentModel = model.parentModel;
+                    model.parentModel = categoryModel;
+                }
+                return model;
+            });
+
+            var edgeLabelModel = self.getModel('edgeLabel');
+            // For option `edgeLabel` can be found by label.xxx.xxx on item mode.
+            var fakeSeriesModel = new Model(
+                {label: edgeLabelModel.option},
+                edgeLabelModel.parentModel,
+                ecModel
+            );
+            var emphasisEdgeLabelModel = self.getModel('emphasis.edgeLabel');
+            var emphasisFakeSeriesModel = new Model(
+                {emphasis: {label: emphasisEdgeLabelModel.option}},
+                emphasisEdgeLabelModel.parentModel,
+                ecModel
+            );
+
+            edgeData.wrapMethod('getItemModel', function (model) {
+                model.customizeGetParent(edgeGetParent);
+                return model;
+            });
+
+            function edgeGetParent(path) {
+                path = this.parsePath(path);
+                return (path && path[0] === 'label')
+                    ? fakeSeriesModel
+                    : (path && path[0] === 'emphasis' && path[1] === 'label')
+                    ? emphasisFakeSeriesModel
+                    : this.parentModel;
+            }
+        }
+    },
+
+    /**
+     * @return {module:echarts/data/Graph}
+     */
+    getGraph: function () {
+        return this.getData().graph;
+    },
+
+    /**
+     * @return {module:echarts/data/List}
+     */
+    getEdgeData: function () {
+        return this.getGraph().edgeData;
+    },
+
+    /**
+     * @return {module:echarts/data/List}
+     */
+    getCategoriesData: function () {
+        return this._categoriesData;
+    },
+
+    /**
+     * @override
+     */
+    formatTooltip: function (dataIndex, multipleSeries, dataType) {
+        if (dataType === 'edge') {
+            var nodeData = this.getData();
+            var params = this.getDataParams(dataIndex, dataType);
+            var edge = nodeData.graph.getEdgeByIndex(dataIndex);
+            var sourceName = nodeData.getName(edge.node1.dataIndex);
+            var targetName = nodeData.getName(edge.node2.dataIndex);
+
+            var html = [];
+            sourceName != null && html.push(sourceName);
+            targetName != null && html.push(targetName);
+            html = encodeHTML(html.join(' > '));
+
+            if (params.value) {
+                html += ' : ' + encodeHTML(params.value);
+            }
+            return html;
+        }
+        else { // dataType === 'node' or empty
+            return GraphSeries.superApply(this, 'formatTooltip', arguments);
+        }
+    },
+
+    _updateCategoriesData: function () {
+        var categories = map(this.option.categories || [], function (category) {
+            // Data must has value
+            return category.value != null ? category : extend({
+                value: 0
+            }, category);
+        });
+        var categoriesData = new List(['value'], this);
+        categoriesData.initData(categories);
+
+        this._categoriesData = categoriesData;
+
+        this._categoriesModels = categoriesData.mapArray(function (idx) {
+            return categoriesData.getItemModel(idx, true);
+        });
+    },
+
+    setZoom: function (zoom) {
+        this.option.zoom = zoom;
+    },
+
+    setCenter: function (center) {
+        this.option.center = center;
+    },
+
+    isAnimationEnabled: function () {
+        return GraphSeries.superCall(this, 'isAnimationEnabled')
+            // Not enable animation when do force layout
+            && !(this.get('layout') === 'force' && this.get('force.layoutAnimation'));
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+
+        coordinateSystem: 'view',
+
+        // Default option for all coordinate systems
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+        // polarIndex: 0,
+        // geoIndex: 0,
+
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+
+        layout: null,
+
+        focusNodeAdjacency: false,
+
+        // Configuration of circular layout
+        circular: {
+            rotateLabel: false
+        },
+        // Configuration of force directed layout
+        force: {
+            initLayout: null,
+            // Node repulsion. Can be an array to represent range.
+            repulsion: [0, 50],
+            gravity: 0.1,
+
+            // Edge length. Can be an array to represent range.
+            edgeLength: 30,
+
+            layoutAnimation: true
+        },
+
+        left: 'center',
+        top: 'center',
+        // right: null,
+        // bottom: null,
+        // width: '80%',
+        // height: '80%',
+
+        symbol: 'circle',
+        symbolSize: 10,
+
+        edgeSymbol: ['none', 'none'],
+        edgeSymbolSize: 10,
+        edgeLabel: {
+            position: 'middle'
+        },
+
+        draggable: false,
+
+        roam: false,
+
+        // Default on center of graph
+        center: null,
+
+        zoom: 1,
+        // Symbol size scale ratio in roam
+        nodeScaleRatio: 0.6,
+        // cursor: null,
+
+        // categories: [],
+
+        // data: []
+        // Or
+        // nodes: []
+        //
+        // links: []
+        // Or
+        // edges: []
+
+        label: {
+            show: false,
+            formatter: '{b}'
+        },
+
+        itemStyle: {},
+
+        lineStyle: {
+            color: '#aaa',
+            width: 1,
+            curveness: 0,
+            opacity: 0.5
+        },
+        emphasis: {
+            label: {
+                show: true
+            }
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Line path for bezier and straight line draw
+ */
+
+var straightLineProto = Line.prototype;
+var bezierCurveProto = BezierCurve.prototype;
+
+function isLine(shape) {
+    return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);
+}
+
+var LinePath = 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 (ctx, shape) {
+        (isLine(shape) ? straightLineProto : bezierCurveProto).buildPath(ctx, shape);
+    },
+
+    pointAt: function (t) {
+        return isLine(this.shape)
+            ? straightLineProto.pointAt.call(this, t)
+            : bezierCurveProto.pointAt.call(this, t);
+    },
+
+    tangentAt: function (t) {
+        var shape = this.shape;
+        var p = isLine(shape)
+            ? [shape.x2 - shape.x1, shape.y2 - shape.y1]
+            : bezierCurveProto.tangentAt.call(this, t);
+        return normalize(p, p);
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/chart/helper/Line
+ */
+
+var SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'];
+
+function makeSymbolTypeKey(symbolCategory) {
+    return '_' + symbolCategory + 'Type';
+}
+/**
+ * @inner
+ */
+function createSymbol$1(name, lineData, idx) {
+    var color = lineData.getItemVisual(idx, 'color');
+    var symbolType = lineData.getItemVisual(idx, name);
+    var symbolSize = lineData.getItemVisual(idx, name + 'Size');
+
+    if (!symbolType || symbolType === 'none') {
+        return;
+    }
+
+    if (!isArray(symbolSize)) {
+        symbolSize = [symbolSize, symbolSize];
+    }
+    var symbolPath = createSymbol(
+        symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,
+        symbolSize[0], symbolSize[1], color
+    );
+
+    symbolPath.name = name;
+
+    return symbolPath;
+}
+
+function createLine(points) {
+    var line = new LinePath({
+        name: 'line'
+    });
+    setLinePoints(line.shape, points);
+    return line;
+}
+
+function setLinePoints(targetShape, points) {
+    var p1 = points[0];
+    var p2 = points[1];
+    var cp1 = points[2];
+    targetShape.x1 = p1[0];
+    targetShape.y1 = p1[1];
+    targetShape.x2 = p2[0];
+    targetShape.y2 = p2[1];
+    targetShape.percent = 1;
+
+    if (cp1) {
+        targetShape.cpx1 = cp1[0];
+        targetShape.cpy1 = cp1[1];
+    }
+    else {
+        targetShape.cpx1 = NaN;
+        targetShape.cpy1 = NaN;
+    }
+}
+
+function updateSymbolAndLabelBeforeLineUpdate () {
+    var lineGroup = this;
+    var symbolFrom = lineGroup.childOfName('fromSymbol');
+    var symbolTo = lineGroup.childOfName('toSymbol');
+    var label = lineGroup.childOfName('label');
+    // Quick reject
+    if (!symbolFrom && !symbolTo && label.ignore) {
+        return;
+    }
+
+    var invScale = 1;
+    var parentNode = this.parent;
+    while (parentNode) {
+        if (parentNode.scale) {
+            invScale /= parentNode.scale[0];
+        }
+        parentNode = parentNode.parent;
+    }
+
+    var line = lineGroup.childOfName('line');
+    // If line not changed
+    // FIXME Parent scale changed
+    if (!this.__dirty && !line.__dirty) {
+        return;
+    }
+
+    var percent = line.shape.percent;
+    var fromPos = line.pointAt(0);
+    var toPos = line.pointAt(percent);
+
+    var d = sub([], toPos, fromPos);
+    normalize(d, d);
+
+    if (symbolFrom) {
+        symbolFrom.attr('position', fromPos);
+        var tangent = line.tangentAt(0);
+        symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(
+            tangent[1], tangent[0]
+        ));
+        symbolFrom.attr('scale', [invScale * percent, invScale * percent]);
+    }
+    if (symbolTo) {
+        symbolTo.attr('position', toPos);
+        var tangent = line.tangentAt(1);
+        symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(
+            tangent[1], tangent[0]
+        ));
+        symbolTo.attr('scale', [invScale * percent, invScale * percent]);
+    }
+
+    if (!label.ignore) {
+        label.attr('position', toPos);
+
+        var textPosition;
+        var textAlign;
+        var textVerticalAlign;
+
+        var distance$$1 = 5 * invScale;
+        // End
+        if (label.__position === 'end') {
+            textPosition = [d[0] * distance$$1 + toPos[0], d[1] * distance$$1 + toPos[1]];
+            textAlign = d[0] > 0.8 ? 'left' : (d[0] < -0.8 ? 'right' : 'center');
+            textVerticalAlign = d[1] > 0.8 ? 'top' : (d[1] < -0.8 ? 'bottom' : 'middle');
+        }
+        // Middle
+        else if (label.__position === 'middle') {
+            var halfPercent = percent / 2;
+            var tangent = line.tangentAt(halfPercent);
+            var n = [tangent[1], -tangent[0]];
+            var cp = line.pointAt(halfPercent);
+            if (n[1] > 0) {
+                n[0] = -n[0];
+                n[1] = -n[1];
+            }
+            textPosition = [cp[0] + n[0] * distance$$1, cp[1] + n[1] * distance$$1];
+            textAlign = 'center';
+            textVerticalAlign = 'bottom';
+            var rotation = -Math.atan2(tangent[1], tangent[0]);
+            if (toPos[0] < fromPos[0]) {
+                rotation = Math.PI + rotation;
+            }
+            label.attr('rotation', rotation);
+        }
+        // Start
+        else {
+            textPosition = [-d[0] * distance$$1 + fromPos[0], -d[1] * distance$$1 + fromPos[1]];
+            textAlign = d[0] > 0.8 ? 'right' : (d[0] < -0.8 ? 'left' : 'center');
+            textVerticalAlign = d[1] > 0.8 ? 'bottom' : (d[1] < -0.8 ? 'top' : 'middle');
+        }
+        label.attr({
+            style: {
+                // Use the user specified text align and baseline first
+                textVerticalAlign: label.__verticalAlign || textVerticalAlign,
+                textAlign: label.__textAlign || textAlign
+            },
+            position: textPosition,
+            scale: [invScale, invScale]
+        });
+    }
+}
+
+/**
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ * @alias {module:echarts/chart/helper/Line}
+ */
+function Line$1(lineData, idx, seriesScope) {
+    Group.call(this);
+
+    this._createLine(lineData, idx, seriesScope);
+}
+
+var lineProto = Line$1.prototype;
+
+// Update symbol position and rotation
+lineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate;
+
+lineProto._createLine = function (lineData, idx, seriesScope) {
+    var seriesModel = lineData.hostModel;
+    var linePoints = lineData.getItemLayout(idx);
+
+    var line = createLine(linePoints);
+    line.shape.percent = 0;
+    initProps(line, {
+        shape: {
+            percent: 1
+        }
+    }, seriesModel, idx);
+
+    this.add(line);
+
+    var label = new Text({
+        name: 'label'
+    });
+    this.add(label);
+
+    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {
+        var symbol = createSymbol$1(symbolCategory, lineData, idx);
+        // symbols must added after line to make sure
+        // it will be updated after line#update.
+        // Or symbol position and rotation update in line#beforeUpdate will be one frame slow
+        this.add(symbol);
+        this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory);
+    }, this);
+
+    this._updateCommonStl(lineData, idx, seriesScope);
+};
+
+lineProto.updateData = function (lineData, idx, seriesScope) {
+    var seriesModel = lineData.hostModel;
+
+    var line = this.childOfName('line');
+    var linePoints = lineData.getItemLayout(idx);
+    var target = {
+        shape: {}
+    };
+    setLinePoints(target.shape, linePoints);
+    updateProps(line, target, seriesModel, idx);
+
+    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {
+        var symbolType = lineData.getItemVisual(idx, symbolCategory);
+        var key = makeSymbolTypeKey(symbolCategory);
+        // Symbol changed
+        if (this[key] !== symbolType) {
+            this.remove(this.childOfName(symbolCategory));
+            var symbol = createSymbol$1(symbolCategory, lineData, idx);
+            this.add(symbol);
+        }
+        this[key] = symbolType;
+    }, this);
+
+    this._updateCommonStl(lineData, idx, seriesScope);
+};
+
+lineProto._updateCommonStl = function (lineData, idx, seriesScope) {
+    var seriesModel = lineData.hostModel;
+
+    var line = this.childOfName('line');
+
+    var lineStyle = seriesScope && seriesScope.lineStyle;
+    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
+    var labelModel = seriesScope && seriesScope.labelModel;
+    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;
+
+    // Optimization for large dataset
+    if (!seriesScope || lineData.hasItemOption) {
+        var itemModel = lineData.getItemModel(idx);
+
+        lineStyle = itemModel.getModel('lineStyle').getLineStyle();
+        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();
+
+        labelModel = itemModel.getModel('label');
+        hoverLabelModel = itemModel.getModel('emphasis.label');
+    }
+
+    var visualColor = lineData.getItemVisual(idx, 'color');
+    var visualOpacity = retrieve3(
+        lineData.getItemVisual(idx, 'opacity'),
+        lineStyle.opacity,
+        1
+    );
+
+    line.useStyle(defaults(
+        {
+            strokeNoScale: true,
+            fill: 'none',
+            stroke: visualColor,
+            opacity: visualOpacity
+        },
+        lineStyle
+    ));
+    line.hoverStyle = hoverLineStyle;
+
+    // Update symbol
+    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {
+        var symbol = this.childOfName(symbolCategory);
+        if (symbol) {
+            symbol.setColor(visualColor);
+            symbol.setStyle({
+                opacity: visualOpacity
+            });
+        }
+    }, this);
+
+    var showLabel = labelModel.getShallow('show');
+    var hoverShowLabel = hoverLabelModel.getShallow('show');
+
+    var label = this.childOfName('label');
+    var defaultLabelColor;
+    var baseText;
+
+    // FIXME: the logic below probably should be merged to `graphic.setLabelStyle`.
+    if (showLabel || hoverShowLabel) {
+        defaultLabelColor = visualColor || '#000';
+
+        baseText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType);
+        if (baseText == null) {
+            var rawVal = seriesModel.getRawValue(idx);
+            baseText = rawVal == null
+                ? lineData.getName(idx)
+                : isFinite(rawVal)
+                ? round$1(rawVal)
+                : rawVal;
+        }
+    }
+    var normalText = showLabel ? baseText : null;
+    var emphasisText = hoverShowLabel
+        ? retrieve2(
+            seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),
+            baseText
+        )
+        : null;
+
+    var labelStyle = label.style;
+
+    // Always set `textStyle` even if `normalStyle.text` is null, because default
+    // values have to be set on `normalStyle`.
+    if (normalText != null || emphasisText != null) {
+        setTextStyle(label.style, labelModel, {
+            text: normalText
+        }, {
+            autoColor: defaultLabelColor
+        });
+
+        label.__textAlign = labelStyle.textAlign;
+        label.__verticalAlign = labelStyle.textVerticalAlign;
+        // 'start', 'middle', 'end'
+        label.__position = labelModel.get('position') || 'middle';
+    }
+
+    if (emphasisText != null) {
+        // Only these properties supported in this emphasis style here.
+        label.hoverStyle = {
+            text: emphasisText,
+            textFill: hoverLabelModel.getTextColor(true),
+            // For merging hover style to normal style, do not use
+            // `hoverLabelModel.getFont()` here.
+            fontStyle: hoverLabelModel.getShallow('fontStyle'),
+            fontWeight: hoverLabelModel.getShallow('fontWeight'),
+            fontSize: hoverLabelModel.getShallow('fontSize'),
+            fontFamily: hoverLabelModel.getShallow('fontFamily')
+        };
+    }
+    else {
+        label.hoverStyle = {
+            text: null
+        };
+    }
+
+    label.ignore = !showLabel && !hoverShowLabel;
+
+    setHoverStyle(this);
+};
+
+lineProto.highlight = function () {
+    this.trigger('emphasis');
+};
+
+lineProto.downplay = function () {
+    this.trigger('normal');
+};
+
+lineProto.updateLayout = function (lineData, idx) {
+    this.setLinePoints(lineData.getItemLayout(idx));
+};
+
+lineProto.setLinePoints = function (points) {
+    var linePath = this.childOfName('line');
+    setLinePoints(linePath.shape, points);
+    linePath.dirty();
+};
+
+inherits(Line$1, Group);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/chart/helper/LineDraw
+ */
+
+// import IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';
+
+/**
+ * @alias module:echarts/component/marker/LineDraw
+ * @constructor
+ */
+function LineDraw(ctor) {
+    this._ctor = ctor || Line$1;
+
+    this.group = new Group();
+}
+
+var lineDrawProto = LineDraw.prototype;
+
+lineDrawProto.isPersistent = function () {
+    return true;
+};
+
+/**
+ * @param {module:echarts/data/List} lineData
+ */
+lineDrawProto.updateData = function (lineData) {
+    var lineDraw = this;
+    var group = lineDraw.group;
+
+    var oldLineData = lineDraw._lineData;
+    lineDraw._lineData = lineData;
+
+    // There is no oldLineData only when first rendering or switching from
+    // stream mode to normal mode, where previous elements should be removed.
+    if (!oldLineData) {
+        group.removeAll();
+    }
+
+    var seriesScope = makeSeriesScope$1(lineData);
+
+    lineData.diff(oldLineData)
+        .add(function (idx) {
+            doAdd(lineDraw, lineData, idx, seriesScope);
+        })
+        .update(function (newIdx, oldIdx) {
+            doUpdate(lineDraw, oldLineData, lineData, oldIdx, newIdx, seriesScope);
+        })
+        .remove(function (idx) {
+            group.remove(oldLineData.getItemGraphicEl(idx));
+        })
+        .execute();
+};
+
+function doAdd(lineDraw, lineData, idx, seriesScope) {
+    var itemLayout = lineData.getItemLayout(idx);
+
+    if (!lineNeedsDraw(itemLayout)) {
+        return;
+    }
+
+    var el = new lineDraw._ctor(lineData, idx, seriesScope);
+    lineData.setItemGraphicEl(idx, el);
+    lineDraw.group.add(el);
+}
+
+function doUpdate(lineDraw, oldLineData, newLineData, oldIdx, newIdx, seriesScope) {
+    var itemEl = oldLineData.getItemGraphicEl(oldIdx);
+
+    if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {
+        lineDraw.group.remove(itemEl);
+        return;
+    }
+
+    if (!itemEl) {
+        itemEl = new lineDraw._ctor(newLineData, newIdx, seriesScope);
+    }
+    else {
+        itemEl.updateData(newLineData, newIdx, seriesScope);
+    }
+
+    newLineData.setItemGraphicEl(newIdx, itemEl);
+
+    lineDraw.group.add(itemEl);
+}
+
+lineDrawProto.updateLayout = function () {
+    var lineData = this._lineData;
+
+    // Do not support update layout in incremental mode.
+    if (!lineData) {
+        return;
+    }
+
+    lineData.eachItemGraphicEl(function (el, idx) {
+        el.updateLayout(lineData, idx);
+    }, this);
+};
+
+lineDrawProto.incrementalPrepareUpdate = function (lineData) {
+    this._seriesScope = makeSeriesScope$1(lineData);
+    this._lineData = null;
+    this.group.removeAll();
+};
+
+lineDrawProto.incrementalUpdate = function (taskParams, lineData) {
+    function updateIncrementalAndHover(el) {
+        if (!el.isGroup) {
+            el.incremental = el.useHoverLayer = true;
+        }
+    }
+
+    for (var idx = taskParams.start; idx < taskParams.end; idx++) {
+        var itemLayout = lineData.getItemLayout(idx);
+
+        if (lineNeedsDraw(itemLayout)) {
+            var el = new this._ctor(lineData, idx, this._seriesScope);
+            el.traverse(updateIncrementalAndHover);
+
+            this.group.add(el);
+            lineData.setItemGraphicEl(idx, el);
+        }
+    }
+};
+
+function makeSeriesScope$1(lineData) {
+    var hostModel = lineData.hostModel;
+    return {
+        lineStyle: hostModel.getModel('lineStyle').getLineStyle(),
+        hoverLineStyle: hostModel.getModel('emphasis.lineStyle').getLineStyle(),
+        labelModel: hostModel.getModel('label'),
+        hoverLabelModel: hostModel.getModel('emphasis.label')
+    };
+}
+
+lineDrawProto.remove = function () {
+    this._clearIncremental();
+    this._incremental = null;
+    this.group.removeAll();
+};
+
+lineDrawProto._clearIncremental = function () {
+    var incremental = this._incremental;
+    if (incremental) {
+        incremental.clearDisplaybles();
+    }
+};
+
+function isPointNaN(pt) {
+    return isNaN(pt[0]) || isNaN(pt[1]);
+}
+
+function lineNeedsDraw(pts) {
+    return !isPointNaN(pts[0]) && !isPointNaN(pts[1]);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var v1 = [];
+var v2 = [];
+var v3 = [];
+var quadraticAt$1 = quadraticAt;
+var v2DistSquare = distSquare;
+var mathAbs$1 = Math.abs;
+function intersectCurveCircle(curvePoints, center, radius) {
+    var p0 = curvePoints[0];
+    var p1 = curvePoints[1];
+    var p2 = curvePoints[2];
+
+    var d = Infinity;
+    var t;
+    var radiusSquare = radius * radius;
+    var interval = 0.1;
+
+    for (var _t = 0.1; _t <= 0.9; _t += 0.1) {
+        v1[0] = quadraticAt$1(p0[0], p1[0], p2[0], _t);
+        v1[1] = quadraticAt$1(p0[1], p1[1], p2[1], _t);
+        var diff = mathAbs$1(v2DistSquare(v1, center) - radiusSquare);
+        if (diff < d) {
+            d = diff;
+            t = _t;
+        }
+    }
+
+    // Assume the segment is monotone,Find root through Bisection method
+    // At most 32 iteration
+    for (var i = 0; i < 32; i++) {
+        // var prev = t - interval;
+        var next = t + interval;
+        // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);
+        // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);
+        v2[0] = quadraticAt$1(p0[0], p1[0], p2[0], t);
+        v2[1] = quadraticAt$1(p0[1], p1[1], p2[1], t);
+        v3[0] = quadraticAt$1(p0[0], p1[0], p2[0], next);
+        v3[1] = quadraticAt$1(p0[1], p1[1], p2[1], next);
+
+        var diff = v2DistSquare(v2, center) - radiusSquare;
+        if (mathAbs$1(diff) < 1e-2) {
+            break;
+        }
+
+        // var prevDiff = v2DistSquare(v1, center) - radiusSquare;
+        var nextDiff = v2DistSquare(v3, center) - radiusSquare;
+
+        interval /= 2;
+        if (diff < 0) {
+            if (nextDiff >= 0) {
+                t = t + interval;
+            }
+            else {
+                t = t - interval;
+            }
+        }
+        else {
+            if (nextDiff >= 0) {
+                t = t - interval;
+            }
+            else {
+                t = t + interval;
+            }
+        }
+    }
+
+    return t;
+}
+
+// Adjust edge to avoid
+var adjustEdge = function (graph, scale$$1) {
+    var tmp0 = [];
+    var quadraticSubdivide$$1 = quadraticSubdivide;
+    var pts = [[], [], []];
+    var pts2 = [[], []];
+    var v = [];
+    scale$$1 /= 2;
+
+    function getSymbolSize(node) {
+        var symbolSize = node.getVisual('symbolSize');
+        if (symbolSize instanceof Array) {
+            symbolSize = (symbolSize[0] + symbolSize[1]) / 2;
+        }
+        return symbolSize;
+    }
+    graph.eachEdge(function (edge, idx) {
+        var linePoints = edge.getLayout();
+        var fromSymbol = edge.getVisual('fromSymbol');
+        var toSymbol = edge.getVisual('toSymbol');
+
+        if (!linePoints.__original) {
+            linePoints.__original = [
+                clone$1(linePoints[0]),
+                clone$1(linePoints[1])
+            ];
+            if (linePoints[2]) {
+                linePoints.__original.push(clone$1(linePoints[2]));
+            }
+        }
+        var originalPoints = linePoints.__original;
+        // Quadratic curve
+        if (linePoints[2] != null) {
+            copy(pts[0], originalPoints[0]);
+            copy(pts[1], originalPoints[2]);
+            copy(pts[2], originalPoints[1]);
+            if (fromSymbol && fromSymbol != 'none') {
+                var symbolSize = getSymbolSize(edge.node1);
+
+                var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale$$1);
+                // Subdivide and get the second
+                quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);
+                pts[0][0] = tmp0[3];
+                pts[1][0] = tmp0[4];
+                quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);
+                pts[0][1] = tmp0[3];
+                pts[1][1] = tmp0[4];
+            }
+            if (toSymbol && toSymbol != 'none') {
+                var symbolSize = getSymbolSize(edge.node2);
+
+                var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale$$1);
+                // Subdivide and get the first
+                quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);
+                pts[1][0] = tmp0[1];
+                pts[2][0] = tmp0[2];
+                quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);
+                pts[1][1] = tmp0[1];
+                pts[2][1] = tmp0[2];
+            }
+            // Copy back to layout
+            copy(linePoints[0], pts[0]);
+            copy(linePoints[1], pts[2]);
+            copy(linePoints[2], pts[1]);
+        }
+        // Line
+        else {
+            copy(pts2[0], originalPoints[0]);
+            copy(pts2[1], originalPoints[1]);
+
+            sub(v, pts2[1], pts2[0]);
+            normalize(v, v);
+            if (fromSymbol && fromSymbol != 'none') {
+
+                var symbolSize = getSymbolSize(edge.node1);
+
+                scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale$$1);
+            }
+            if (toSymbol && toSymbol != 'none') {
+                var symbolSize = getSymbolSize(edge.node2);
+
+                scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale$$1);
+            }
+            copy(linePoints[0], pts2[0]);
+            copy(linePoints[1], pts2[1]);
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var nodeOpacityPath = ['itemStyle', 'opacity'];
+var lineOpacityPath = ['lineStyle', 'opacity'];
+
+function getItemOpacity(item, opacityPath) {
+    return item.getVisual('opacity') || item.getModel().get(opacityPath);
+}
+
+function fadeOutItem(item, opacityPath, opacityRatio) {
+    var el = item.getGraphicEl();
+
+    var opacity = getItemOpacity(item, opacityPath);
+    if (opacityRatio != null) {
+        opacity == null && (opacity = 1);
+        opacity *= opacityRatio;
+    }
+
+    el.downplay && el.downplay();
+    el.traverse(function (child) {
+        if (child.type !== 'group') {
+            child.setStyle('opacity', opacity);
+        }
+    });
+}
+
+function fadeInItem(item, opacityPath) {
+    var opacity = getItemOpacity(item, opacityPath);
+    var el = item.getGraphicEl();
+
+    el.highlight && el.highlight();
+    el.traverse(function (child) {
+        if (child.type !== 'group') {
+            child.setStyle('opacity', opacity);
+        }
+    });
+}
+
+extendChartView({
+
+    type: 'graph',
+
+    init: function (ecModel, api) {
+        var symbolDraw = new SymbolDraw();
+        var lineDraw = new LineDraw();
+        var group = this.group;
+
+        this._controller = new RoamController(api.getZr());
+        this._controllerHost = {target: group};
+
+        group.add(symbolDraw.group);
+        group.add(lineDraw.group);
+
+        this._symbolDraw = symbolDraw;
+        this._lineDraw = lineDraw;
+
+        this._firstRender = true;
+    },
+
+    render: function (seriesModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+
+        this._model = seriesModel;
+        this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');
+
+        var symbolDraw = this._symbolDraw;
+        var lineDraw = this._lineDraw;
+
+        var group = this.group;
+
+        if (coordSys.type === 'view') {
+            var groupNewProp = {
+                position: coordSys.position,
+                scale: coordSys.scale
+            };
+            if (this._firstRender) {
+                group.attr(groupNewProp);
+            }
+            else {
+                updateProps(group, groupNewProp, seriesModel);
+            }
+        }
+        // Fix edge contact point with node
+        adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));
+
+        var data = seriesModel.getData();
+        symbolDraw.updateData(data);
+
+        var edgeData = seriesModel.getEdgeData();
+        lineDraw.updateData(edgeData);
+
+        this._updateNodeAndLinkScale();
+
+        this._updateController(seriesModel, ecModel, api);
+
+        clearTimeout(this._layoutTimeout);
+        var forceLayout = seriesModel.forceLayout;
+        var layoutAnimation = seriesModel.get('force.layoutAnimation');
+        if (forceLayout) {
+            this._startForceLayoutIteration(forceLayout, layoutAnimation);
+        }
+
+        data.eachItemGraphicEl(function (el, idx) {
+            var itemModel = data.getItemModel(idx);
+            // Update draggable
+            el.off('drag').off('dragend');
+            var draggable = data.getItemModel(idx).get('draggable');
+            if (draggable) {
+                el.on('drag', function () {
+                    if (forceLayout) {
+                        forceLayout.warmUp();
+                        !this._layouting
+                            && this._startForceLayoutIteration(forceLayout, layoutAnimation);
+                        forceLayout.setFixed(idx);
+                        // Write position back to layout
+                        data.setItemLayout(idx, el.position);
+                    }
+                }, this).on('dragend', function () {
+                    if (forceLayout) {
+                        forceLayout.setUnfixed(idx);
+                    }
+                }, this);
+            }
+            el.setDraggable(draggable && forceLayout);
+
+            el.off('mouseover', el.__focusNodeAdjacency);
+            el.off('mouseout', el.__unfocusNodeAdjacency);
+
+            if (itemModel.get('focusNodeAdjacency')) {
+                el.on('mouseover', el.__focusNodeAdjacency = function () {
+                    api.dispatchAction({
+                        type: 'focusNodeAdjacency',
+                        seriesId: seriesModel.id,
+                        dataIndex: el.dataIndex
+                    });
+                });
+                el.on('mouseout', el.__unfocusNodeAdjacency = function () {
+                    api.dispatchAction({
+                        type: 'unfocusNodeAdjacency',
+                        seriesId: seriesModel.id
+                    });
+                });
+
+            }
+
+        }, this);
+
+        data.graph.eachEdge(function (edge) {
+            var el = edge.getGraphicEl();
+
+            el.off('mouseover', el.__focusNodeAdjacency);
+            el.off('mouseout', el.__unfocusNodeAdjacency);
+
+            if (edge.getModel().get('focusNodeAdjacency')) {
+                el.on('mouseover', el.__focusNodeAdjacency = function () {
+                    api.dispatchAction({
+                        type: 'focusNodeAdjacency',
+                        seriesId: seriesModel.id,
+                        edgeDataIndex: edge.dataIndex
+                    });
+                });
+                el.on('mouseout', el.__unfocusNodeAdjacency = function () {
+                    api.dispatchAction({
+                        type: 'unfocusNodeAdjacency',
+                        seriesId: seriesModel.id
+                    });
+                });
+            }
+        });
+
+        var circularRotateLabel = seriesModel.get('layout') === 'circular'
+            && seriesModel.get('circular.rotateLabel');
+        var cx = data.getLayout('cx');
+        var cy = data.getLayout('cy');
+        data.eachItemGraphicEl(function (el, idx) {
+            var symbolPath = el.getSymbolPath();
+            if (circularRotateLabel) {
+                var pos = data.getItemLayout(idx);
+                var rad = Math.atan2(pos[1] - cy, pos[0] - cx);
+                if (rad < 0) {
+                    rad = Math.PI * 2 + rad;
+                }
+                var isLeft = pos[0] < cx;
+                if (isLeft) {
+                    rad = rad - Math.PI;
+                }
+                var textPosition = isLeft ? 'left' : 'right';
+                symbolPath.setStyle({
+                    textRotation: -rad,
+                    textPosition: textPosition,
+                    textOrigin: 'center'
+                });
+                symbolPath.hoverStyle && (symbolPath.hoverStyle.textPosition = textPosition);
+            }
+            else {
+                symbolPath.setStyle({
+                    textRotation: 0
+                });
+            }
+        });
+
+        this._firstRender = false;
+    },
+
+    dispose: function () {
+        this._controller && this._controller.dispose();
+        this._controllerHost = {};
+    },
+
+    focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
+        var data = this._model.getData();
+        var graph = data.graph;
+        var dataIndex = payload.dataIndex;
+        var edgeDataIndex = payload.edgeDataIndex;
+
+        var node = graph.getNodeByIndex(dataIndex);
+        var edge = graph.getEdgeByIndex(edgeDataIndex);
+
+        if (!node && !edge) {
+            return;
+        }
+
+        graph.eachNode(function (node) {
+            fadeOutItem(node, nodeOpacityPath, 0.1);
+        });
+        graph.eachEdge(function (edge) {
+            fadeOutItem(edge, lineOpacityPath, 0.1);
+        });
+
+        if (node) {
+            fadeInItem(node, nodeOpacityPath);
+            each$1(node.edges, function (adjacentEdge) {
+                if (adjacentEdge.dataIndex < 0) {
+                    return;
+                }
+                fadeInItem(adjacentEdge, lineOpacityPath);
+                fadeInItem(adjacentEdge.node1, nodeOpacityPath);
+                fadeInItem(adjacentEdge.node2, nodeOpacityPath);
+            });
+        }
+        if (edge) {
+            fadeInItem(edge, lineOpacityPath);
+            fadeInItem(edge.node1, nodeOpacityPath);
+            fadeInItem(edge.node2, nodeOpacityPath);
+        }
+    },
+
+    unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {
+        var graph = this._model.getData().graph;
+
+        graph.eachNode(function (node) {
+            fadeOutItem(node, nodeOpacityPath);
+        });
+        graph.eachEdge(function (edge) {
+            fadeOutItem(edge, lineOpacityPath);
+        });
+    },
+
+    _startForceLayoutIteration: function (forceLayout, layoutAnimation) {
+        var self = this;
+        (function step() {
+            forceLayout.step(function (stopped) {
+                self.updateLayout(self._model);
+                (self._layouting = !stopped) && (
+                    layoutAnimation
+                        ? (self._layoutTimeout = setTimeout(step, 16))
+                        : step()
+                );
+            });
+        })();
+    },
+
+    _updateController: function (seriesModel, ecModel, api) {
+        var controller = this._controller;
+        var controllerHost = this._controllerHost;
+        var group = this.group;
+
+        controller.setPointerChecker(function (e, x, y) {
+            var rect = group.getBoundingRect();
+            rect.applyTransform(group.transform);
+            return rect.contain(x, y)
+                && !onIrrelevantElement(e, api, seriesModel);
+        });
+
+        if (seriesModel.coordinateSystem.type !== 'view') {
+            controller.disable();
+            return;
+        }
+        controller.enable(seriesModel.get('roam'));
+        controllerHost.zoomLimit = seriesModel.get('scaleLimit');
+        controllerHost.zoom = seriesModel.coordinateSystem.getZoom();
+
+        controller
+            .off('pan')
+            .off('zoom')
+            .on('pan', function (dx, dy) {
+                updateViewOnPan(controllerHost, dx, dy);
+                api.dispatchAction({
+                    seriesId: seriesModel.id,
+                    type: 'graphRoam',
+                    dx: dx,
+                    dy: dy
+                });
+            })
+            .on('zoom', function (zoom, mouseX, mouseY) {
+                updateViewOnZoom(controllerHost, zoom, mouseX, mouseY);
+                api.dispatchAction({
+                    seriesId: seriesModel.id,
+                    type: 'graphRoam',
+                    zoom:  zoom,
+                    originX: mouseX,
+                    originY: mouseY
+                });
+                this._updateNodeAndLinkScale();
+                adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));
+                this._lineDraw.updateLayout();
+            }, this);
+    },
+
+    _updateNodeAndLinkScale: function () {
+        var seriesModel = this._model;
+        var data = seriesModel.getData();
+
+        var nodeScale = this._getNodeGlobalScale(seriesModel);
+        var invScale = [nodeScale, nodeScale];
+
+        data.eachItemGraphicEl(function (el, idx) {
+            el.attr('scale', invScale);
+        });
+    },
+
+    _getNodeGlobalScale: function (seriesModel) {
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys.type !== 'view') {
+            return 1;
+        }
+
+        var nodeScaleRatio = this._nodeScaleRatio;
+
+        var groupScale = coordSys.scale;
+        var groupZoom = (groupScale && groupScale[0]) || 1;
+        // Scale node when zoom changes
+        var roamZoom = coordSys.getZoom();
+        var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;
+
+        return nodeScale / groupZoom;
+    },
+
+    updateLayout: function (seriesModel) {
+        adjustEdge(seriesModel.getGraph(), this._getNodeGlobalScale(seriesModel));
+
+        this._symbolDraw.updateLayout();
+        this._lineDraw.updateLayout();
+    },
+
+    remove: function (ecModel, api) {
+        this._symbolDraw && this._symbolDraw.remove();
+        this._lineDraw && this._lineDraw.remove();
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var actionInfo = {
+    type: 'graphRoam',
+    event: 'graphRoam',
+    update: 'none'
+};
+
+/**
+ * @payload
+ * @property {string} name Series name
+ * @property {number} [dx]
+ * @property {number} [dy]
+ * @property {number} [zoom]
+ * @property {number} [originX]
+ * @property {number} [originY]
+ */
+registerAction(actionInfo, function (payload, ecModel) {
+    ecModel.eachComponent({mainType: 'series', query: payload}, function (seriesModel) {
+        var coordSys = seriesModel.coordinateSystem;
+
+        var res = updateCenterAndZoom(coordSys, payload);
+
+        seriesModel.setCenter
+            && seriesModel.setCenter(res.center);
+
+        seriesModel.setZoom
+            && seriesModel.setZoom(res.zoom);
+    });
+});
+
+
+/**
+ * @payload
+ * @property {number} [seriesIndex]
+ * @property {string} [seriesId]
+ * @property {string} [seriesName]
+ * @property {number} [dataIndex]
+ */
+registerAction({
+    type: 'focusNodeAdjacency',
+    event: 'focusNodeAdjacency',
+    update: 'series.graph:focusNodeAdjacency'
+}, function () {});
+
+/**
+ * @payload
+ * @property {number} [seriesIndex]
+ * @property {string} [seriesId]
+ * @property {string} [seriesName]
+ */
+registerAction({
+    type: 'unfocusNodeAdjacency',
+    event: 'unfocusNodeAdjacency',
+    update: 'series.graph:unfocusNodeAdjacency'
+}, function () {});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var categoryFilter = function (ecModel) {
+    var legendModels = ecModel.findComponents({
+        mainType: 'legend'
+    });
+    if (!legendModels || !legendModels.length) {
+        return;
+    }
+    ecModel.eachSeriesByType('graph', function (graphSeries) {
+        var categoriesData = graphSeries.getCategoriesData();
+        var graph = graphSeries.getGraph();
+        var data = graph.data;
+
+        var categoryNames = categoriesData.mapArray(categoriesData.getName);
+
+        data.filterSelf(function (idx) {
+            var model = data.getItemModel(idx);
+            var category = model.getShallow('category');
+            if (category != null) {
+                if (typeof category === 'number') {
+                    category = categoryNames[category];
+                }
+                // If in any legend component the status is not selected.
+                for (var i = 0; i < legendModels.length; i++) {
+                    if (!legendModels[i].isSelected(category)) {
+                        return false;
+                    }
+                }
+            }
+            return true;
+        });
+    }, this);
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var categoryVisual = function (ecModel) {
+
+    var paletteScope = {};
+    ecModel.eachSeriesByType('graph', function (seriesModel) {
+        var categoriesData = seriesModel.getCategoriesData();
+        var data = seriesModel.getData();
+
+        var categoryNameIdxMap = {};
+
+        categoriesData.each(function (idx) {
+            var name = categoriesData.getName(idx);
+            // Add prefix to avoid conflict with Object.prototype.
+            categoryNameIdxMap['ec-' + name] = idx;
+
+            var itemModel = categoriesData.getItemModel(idx);
+            var color = itemModel.get('itemStyle.color')
+                || seriesModel.getColorFromPalette(name, paletteScope);
+            categoriesData.setItemVisual(idx, 'color', color);
+        });
+
+        // Assign category color to visual
+        if (categoriesData.count()) {
+            data.each(function (idx) {
+                var model = data.getItemModel(idx);
+                var category = model.getShallow('category');
+                if (category != null) {
+                    if (typeof category === 'string') {
+                        category = categoryNameIdxMap['ec-' + category];
+                    }
+                    if (!data.getItemVisual(idx, 'color', true)) {
+                        data.setItemVisual(
+                            idx, 'color',
+                            categoriesData.getItemVisual(category, 'color')
+                        );
+                    }
+                }
+            });
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+function normalize$1(a) {
+    if (!(a instanceof Array)) {
+        a = [a, a];
+    }
+    return a;
+}
+
+var edgeVisual = function (ecModel) {
+    ecModel.eachSeriesByType('graph', function (seriesModel) {
+        var graph = seriesModel.getGraph();
+        var edgeData = seriesModel.getEdgeData();
+        var symbolType = normalize$1(seriesModel.get('edgeSymbol'));
+        var symbolSize = normalize$1(seriesModel.get('edgeSymbolSize'));
+
+        var colorQuery = 'lineStyle.color'.split('.');
+        var opacityQuery = 'lineStyle.opacity'.split('.');
+
+        edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);
+        edgeData.setVisual('toSymbol', symbolType && symbolType[1]);
+        edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);
+        edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]);
+        edgeData.setVisual('color', seriesModel.get(colorQuery));
+        edgeData.setVisual('opacity', seriesModel.get(opacityQuery));
+
+        edgeData.each(function (idx) {
+            var itemModel = edgeData.getItemModel(idx);
+            var edge = graph.getEdgeByIndex(idx);
+            var symbolType = normalize$1(itemModel.getShallow('symbol', true));
+            var symbolSize = normalize$1(itemModel.getShallow('symbolSize', true));
+            // Edge visual must after node visual
+            var color = itemModel.get(colorQuery);
+            var opacity = itemModel.get(opacityQuery);
+            switch (color) {
+                case 'source':
+                    color = edge.node1.getVisual('color');
+                    break;
+                case 'target':
+                    color = edge.node2.getVisual('color');
+                    break;
+            }
+
+            symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]);
+            symbolType[1] && edge.setVisual('toSymbol', symbolType[1]);
+            symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]);
+            symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]);
+
+            edge.setVisual('color', color);
+            edge.setVisual('opacity', opacity);
+        });
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function simpleLayout$1(seriesModel) {
+    var coordSys = seriesModel.coordinateSystem;
+    if (coordSys && coordSys.type !== 'view') {
+        return;
+    }
+    var graph = seriesModel.getGraph();
+
+    graph.eachNode(function (node) {
+        var model = node.getModel();
+        node.setLayout([+model.get('x'), +model.get('y')]);
+    });
+
+    simpleLayoutEdge(graph);
+}
+
+function simpleLayoutEdge(graph) {
+    graph.eachEdge(function (edge) {
+        var curveness = edge.getModel().get('lineStyle.curveness') || 0;
+        var p1 = clone$1(edge.node1.getLayout());
+        var p2 = clone$1(edge.node2.getLayout());
+        var points = [p1, p2];
+        if (+curveness) {
+            points.push([
+                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness,
+                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness
+            ]);
+        }
+        edge.setLayout(points);
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var simpleLayout = function (ecModel, api) {
+    ecModel.eachSeriesByType('graph', function (seriesModel) {
+        var layout = seriesModel.get('layout');
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys && coordSys.type !== 'view') {
+            var data = seriesModel.getData();
+
+            var dimensions = [];
+            each$1(coordSys.dimensions, function (coordDim) {
+                dimensions = dimensions.concat(data.mapDimension(coordDim, true));
+            });
+
+            for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
+                var value = [];
+                var hasValue = false;
+                for (var i = 0; i < dimensions.length; i++) {
+                    var val = data.get(dimensions[i], dataIndex);
+                    if (!isNaN(val)) {
+                        hasValue = true;
+                    }
+                    value.push(val);
+                }
+                if (hasValue) {
+                    data.setItemLayout(dataIndex, coordSys.dataToPoint(value));
+                }
+                else {
+                    // Also {Array.<number>}, not undefined to avoid if...else... statement
+                    data.setItemLayout(dataIndex, [NaN, NaN]);
+                }
+            }
+
+            simpleLayoutEdge(data.graph);
+        }
+        else if (!layout || layout === 'none') {
+            simpleLayout$1(seriesModel);
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function circularLayout$1(seriesModel) {
+    var coordSys = seriesModel.coordinateSystem;
+    if (coordSys && coordSys.type !== 'view') {
+        return;
+    }
+
+    var rect = coordSys.getBoundingRect();
+
+    var nodeData = seriesModel.getData();
+    var graph = nodeData.graph;
+
+    var angle = 0;
+    var sum = nodeData.getSum('value');
+    var unitAngle = Math.PI * 2 / (sum || nodeData.count());
+
+    var cx = rect.width / 2 + rect.x;
+    var cy = rect.height / 2 + rect.y;
+
+    var r = Math.min(rect.width, rect.height) / 2;
+
+    graph.eachNode(function (node) {
+        var value = node.getValue('value');
+
+        angle += unitAngle * (sum ? value : 1) / 2;
+
+        node.setLayout([
+            r * Math.cos(angle) + cx,
+            r * Math.sin(angle) + cy
+        ]);
+
+        angle += unitAngle * (sum ? value : 1) / 2;
+    });
+
+    nodeData.setLayout({
+        cx: cx,
+        cy: cy
+    });
+
+    graph.eachEdge(function (edge) {
+        var curveness = edge.getModel().get('lineStyle.curveness') || 0;
+        var p1 = clone$1(edge.node1.getLayout());
+        var p2 = clone$1(edge.node2.getLayout());
+        var cp1;
+        var x12 = (p1[0] + p2[0]) / 2;
+        var y12 = (p1[1] + p2[1]) / 2;
+        if (+curveness) {
+            curveness *= 3;
+            cp1 = [
+                cx * curveness + x12 * (1 - curveness),
+                cy * curveness + y12 * (1 - curveness)
+            ];
+        }
+        edge.setLayout([p1, p2, cp1]);
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var circularLayout = function (ecModel) {
+    ecModel.eachSeriesByType('graph', function (seriesModel) {
+        if (seriesModel.get('layout') === 'circular') {
+            circularLayout$1(seriesModel);
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* The layout implementation references to d3.js. The use of
+* the source code of this file is also subject to the terms
+* and consitions of its license (BSD-3Clause, see
+* <echarts/src/licenses/LICENSE-d3>).
+*/
+
+var scaleAndAdd$2 = scaleAndAdd;
+
+// function adjacentNode(n, e) {
+//     return e.n1 === n ? e.n2 : e.n1;
+// }
+
+function forceLayout$1(nodes, edges, opts) {
+    var rect = opts.rect;
+    var width = rect.width;
+    var height = rect.height;
+    var center = [rect.x + width / 2, rect.y + height / 2];
+    // var scale = opts.scale || 1;
+    var gravity = opts.gravity == null ? 0.1 : opts.gravity;
+
+    // for (var i = 0; i < edges.length; i++) {
+    //     var e = edges[i];
+    //     var n1 = e.n1;
+    //     var n2 = e.n2;
+    //     n1.edges = n1.edges || [];
+    //     n2.edges = n2.edges || [];
+    //     n1.edges.push(e);
+    //     n2.edges.push(e);
+    // }
+    // Init position
+    for (var i = 0; i < nodes.length; i++) {
+        var n = nodes[i];
+        if (!n.p) {
+            // Use the position from first adjecent node with defined position
+            // Or use a random position
+            // From d3
+            // if (n.edges) {
+            //     var j = -1;
+            //     while (++j < n.edges.length) {
+            //         var e = n.edges[j];
+            //         var other = adjacentNode(n, e);
+            //         if (other.p) {
+            //             n.p = vec2.clone(other.p);
+            //             break;
+            //         }
+            //     }
+            // }
+            // if (!n.p) {
+                n.p = create(
+                    width * (Math.random() - 0.5) + center[0],
+                    height * (Math.random() - 0.5) + center[1]
+                );
+            // }
+        }
+        n.pp = clone$1(n.p);
+        n.edges = null;
+    }
+
+    // Formula in 'Graph Drawing by Force-directed Placement'
+    // var k = scale * Math.sqrt(width * height / nodes.length);
+    // var k2 = k * k;
+
+    var friction = 0.6;
+
+    return {
+        warmUp: function () {
+            friction = 0.5;
+        },
+
+        setFixed: function (idx) {
+            nodes[idx].fixed = true;
+        },
+
+        setUnfixed: function (idx) {
+            nodes[idx].fixed = false;
+        },
+
+        step: function (cb) {
+            var v12 = [];
+            var nLen = nodes.length;
+            for (var i = 0; i < edges.length; i++) {
+                var e = edges[i];
+                var n1 = e.n1;
+                var n2 = e.n2;
+
+                sub(v12, n2.p, n1.p);
+                var d = len(v12) - e.d;
+                var w = n2.w / (n1.w + n2.w);
+
+                if (isNaN(w)) {
+                    w = 0;
+                }
+
+                normalize(v12, v12);
+
+                !n1.fixed && scaleAndAdd$2(n1.p, n1.p, v12, w * d * friction);
+                !n2.fixed && scaleAndAdd$2(n2.p, n2.p, v12, -(1 - w) * d * friction);
+            }
+            // Gravity
+            for (var i = 0; i < nLen; i++) {
+                var n = nodes[i];
+                if (!n.fixed) {
+                    sub(v12, center, n.p);
+                    // var d = vec2.len(v12);
+                    // vec2.scale(v12, v12, 1 / d);
+                    // var gravityFactor = gravity;
+                    scaleAndAdd$2(n.p, n.p, v12, gravity * friction);
+                }
+            }
+
+            // Repulsive
+            // PENDING
+            for (var i = 0; i < nLen; i++) {
+                var n1 = nodes[i];
+                for (var j = i + 1; j < nLen; j++) {
+                    var n2 = nodes[j];
+                    sub(v12, n2.p, n1.p);
+                    var d = len(v12);
+                    if (d === 0) {
+                        // Random repulse
+                        set(v12, Math.random() - 0.5, Math.random() - 0.5);
+                        d = 1;
+                    }
+                    var repFact = (n1.rep + n2.rep) / d / d;
+                    !n1.fixed && scaleAndAdd$2(n1.pp, n1.pp, v12, repFact);
+                    !n2.fixed && scaleAndAdd$2(n2.pp, n2.pp, v12, -repFact);
+                }
+            }
+            var v = [];
+            for (var i = 0; i < nLen; i++) {
+                var n = nodes[i];
+                if (!n.fixed) {
+                    sub(v, n.p, n.pp);
+                    scaleAndAdd$2(n.p, n.p, v, friction);
+                    copy(n.pp, n.p);
+                }
+            }
+
+            friction = friction * 0.992;
+
+            cb && cb(nodes, edges, friction < 0.01);
+        }
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var forceLayout = function (ecModel) {
+    ecModel.eachSeriesByType('graph', function (graphSeries) {
+        var coordSys = graphSeries.coordinateSystem;
+        if (coordSys && coordSys.type !== 'view') {
+            return;
+        }
+        if (graphSeries.get('layout') === 'force') {
+            var preservedPoints = graphSeries.preservedPoints || {};
+            var graph = graphSeries.getGraph();
+            var nodeData = graph.data;
+            var edgeData = graph.edgeData;
+            var forceModel = graphSeries.getModel('force');
+            var initLayout = forceModel.get('initLayout');
+            if (graphSeries.preservedPoints) {
+                nodeData.each(function (idx) {
+                    var id = nodeData.getId(idx);
+                    nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]);
+                });
+            }
+            else if (!initLayout || initLayout === 'none') {
+                simpleLayout$1(graphSeries);
+            }
+            else if (initLayout === 'circular') {
+                circularLayout$1(graphSeries);
+            }
+
+            var nodeDataExtent = nodeData.getDataExtent('value');
+            var edgeDataExtent = edgeData.getDataExtent('value');
+            // var edgeDataExtent = edgeData.getDataExtent('value');
+            var repulsion = forceModel.get('repulsion');
+            var edgeLength = forceModel.get('edgeLength');
+            if (!isArray(repulsion)) {
+                repulsion = [repulsion, repulsion];
+            }
+            if (!isArray(edgeLength)) {
+                edgeLength = [edgeLength, edgeLength];
+            }
+            // Larger value has smaller length
+            edgeLength = [edgeLength[1], edgeLength[0]];
+
+            var nodes = nodeData.mapArray('value', function (value, idx) {
+                var point = nodeData.getItemLayout(idx);
+                var rep = linearMap(value, nodeDataExtent, repulsion);
+                if (isNaN(rep)) {
+                    rep = (repulsion[0] + repulsion[1]) / 2;
+                }
+                return {
+                    w: rep,
+                    rep: rep,
+                    fixed: nodeData.getItemModel(idx).get('fixed'),
+                    p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point
+                };
+            });
+            var edges = edgeData.mapArray('value', function (value, idx) {
+                var edge = graph.getEdgeByIndex(idx);
+                var d = linearMap(value, edgeDataExtent, edgeLength);
+                if (isNaN(d)) {
+                    d = (edgeLength[0] + edgeLength[1]) / 2;
+                }
+                return {
+                    n1: nodes[edge.node1.dataIndex],
+                    n2: nodes[edge.node2.dataIndex],
+                    d: d,
+                    curveness: edge.getModel().get('lineStyle.curveness') || 0
+                };
+            });
+
+            var coordSys = graphSeries.coordinateSystem;
+            var rect = coordSys.getBoundingRect();
+            var forceInstance = forceLayout$1(nodes, edges, {
+                rect: rect,
+                gravity: forceModel.get('gravity')
+            });
+            var oldStep = forceInstance.step;
+            forceInstance.step = function (cb) {
+                for (var i = 0, l = nodes.length; i < l; i++) {
+                    if (nodes[i].fixed) {
+                        // Write back to layout instance
+                        copy(nodes[i].p, graph.getNodeByIndex(i).getLayout());
+                    }
+                }
+                oldStep(function (nodes, edges, stopped) {
+                    for (var i = 0, l = nodes.length; i < l; i++) {
+                        if (!nodes[i].fixed) {
+                            graph.getNodeByIndex(i).setLayout(nodes[i].p);
+                        }
+                        preservedPoints[nodeData.getId(i)] = nodes[i].p;
+                    }
+                    for (var i = 0, l = edges.length; i < l; i++) {
+                        var e = edges[i];
+                        var edge = graph.getEdgeByIndex(i);
+                        var p1 = e.n1.p;
+                        var p2 = e.n2.p;
+                        var points = edge.getLayout();
+                        points = points ? points.slice() : [];
+                        points[0] = points[0] || [];
+                        points[1] = points[1] || [];
+                        copy(points[0], p1);
+                        copy(points[1], p2);
+                        if (+e.curveness) {
+                            points[2] = [
+                                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness,
+                                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness
+                            ];
+                        }
+                        edge.setLayout(points);
+                    }
+                    // Update layout
+
+                    cb && cb(stopped);
+                });
+            };
+            graphSeries.forceLayout = forceInstance;
+            graphSeries.preservedPoints = preservedPoints;
+
+            // Step to get the layout
+            forceInstance.step();
+        }
+        else {
+            // Remove prev injected forceLayout instance
+            graphSeries.forceLayout = null;
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME Where to create the simple view coordinate system
+function getViewRect$1(seriesModel, api, aspect) {
+    var option = seriesModel.getBoxLayoutParams();
+    option.aspect = aspect;
+    return getLayoutRect(option, {
+        width: api.getWidth(),
+        height: api.getHeight()
+    });
+}
+
+var createView = function (ecModel, api) {
+    var viewList = [];
+    ecModel.eachSeriesByType('graph', function (seriesModel) {
+        var coordSysType = seriesModel.get('coordinateSystem');
+        if (!coordSysType || coordSysType === 'view') {
+
+            var data = seriesModel.getData();
+            var positions = data.mapArray(function (idx) {
+                var itemModel = data.getItemModel(idx);
+                return [+itemModel.get('x'), +itemModel.get('y')];
+            });
+
+            var min = [];
+            var max = [];
+
+            fromPoints(positions, min, max);
+
+            // If width or height is 0
+            if (max[0] - min[0] === 0) {
+                max[0] += 1;
+                min[0] -= 1;
+            }
+            if (max[1] - min[1] === 0) {
+                max[1] += 1;
+                min[1] -= 1;
+            }
+            var aspect = (max[0] - min[0]) / (max[1] - min[1]);
+            // FIXME If get view rect after data processed?
+            var viewRect = getViewRect$1(seriesModel, api, aspect);
+            // Position may be NaN, use view rect instead
+            if (isNaN(aspect)) {
+                min = [viewRect.x, viewRect.y];
+                max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];
+            }
+
+            var bbWidth = max[0] - min[0];
+            var bbHeight = max[1] - min[1];
+
+            var viewWidth = viewRect.width;
+            var viewHeight = viewRect.height;
+
+            var viewCoordSys = seriesModel.coordinateSystem = new View();
+            viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');
+
+            viewCoordSys.setBoundingRect(
+                min[0], min[1], bbWidth, bbHeight
+            );
+            viewCoordSys.setViewRect(
+                viewRect.x, viewRect.y, viewWidth, viewHeight
+            );
+
+            // Update roam info
+            viewCoordSys.setCenter(seriesModel.get('center'));
+            viewCoordSys.setZoom(seriesModel.get('zoom'));
+
+            viewList.push(viewCoordSys);
+        }
+    });
+
+    return viewList;
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerProcessor(categoryFilter);
+
+registerVisual(visualSymbol('graph', 'circle', null));
+registerVisual(categoryVisual);
+registerVisual(edgeVisual);
+
+registerLayout(simpleLayout);
+registerLayout(circularLayout);
+registerLayout(forceLayout);
+
+// Graph view coordinate system
+registerCoordinateSystem('graphView', {
+    create: createView
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var GaugeSeries = SeriesModel.extend({
+
+    type: 'series.gauge',
+
+    getInitialData: function (option, ecModel) {
+        var dataOpt = option.data || [];
+        if (!isArray(dataOpt)) {
+            dataOpt = [dataOpt];
+        }
+        option.data = dataOpt;
+        return createListSimply(this, ['value']);
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        // 默认全局居中
+        center: ['50%', '50%'],
+        legendHoverLink: true,
+        radius: '75%',
+        startAngle: 225,
+        endAngle: -45,
+        clockwise: true,
+        // 最小值
+        min: 0,
+        // 最大值
+        max: 100,
+        // 分割段数,默认为10
+        splitNumber: 10,
+        // 坐标轴线
+        axisLine: {
+            // 默认显示,属性show控制显示与否
+            show: true,
+            lineStyle: {       // 属性lineStyle控制线条样式
+                color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']],
+                width: 30
+            }
+        },
+        // 分隔线
+        splitLine: {
+            // 默认显示,属性show控制显示与否
+            show: true,
+            // 属性length控制线长
+            length: 30,
+            // 属性lineStyle(详见lineStyle)控制线条样式
+            lineStyle: {
+                color: '#eee',
+                width: 2,
+                type: 'solid'
+            }
+        },
+        // 坐标轴小标记
+        axisTick: {
+            // 属性show控制显示与否,默认不显示
+            show: true,
+            // 每份split细分多少段
+            splitNumber: 5,
+            // 属性length控制线长
+            length: 8,
+            // 属性lineStyle控制线条样式
+            lineStyle: {
+                color: '#eee',
+                width: 1,
+                type: 'solid'
+            }
+        },
+        axisLabel: {
+            show: true,
+            distance: 5,
+            // formatter: null,
+            color: 'auto'
+        },
+        pointer: {
+            show: true,
+            length: '80%',
+            width: 8
+        },
+        itemStyle: {
+            color: 'auto'
+        },
+        title: {
+            show: true,
+            // x, y,单位px
+            offsetCenter: [0, '-40%'],
+            // 其余属性默认使用全局文本样式,详见TEXTSTYLE
+            color: '#333',
+            fontSize: 15
+        },
+        detail: {
+            show: true,
+            backgroundColor: 'rgba(0,0,0,0)',
+            borderWidth: 0,
+            borderColor: '#ccc',
+            width: 100,
+            height: null, // self-adaption
+            padding: [5, 10],
+            // x, y,单位px
+            offsetCenter: [0, '40%'],
+            // formatter: null,
+            // 其余属性默认使用全局文本样式,详见TEXTSTYLE
+            color: 'auto',
+            fontSize: 30
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PointerPath = Path.extend({
+
+    type: 'echartsGaugePointer',
+
+    shape: {
+        angle: 0,
+
+        width: 10,
+
+        r: 10,
+
+        x: 0,
+
+        y: 0
+    },
+
+    buildPath: function (ctx, shape) {
+        var mathCos = Math.cos;
+        var mathSin = Math.sin;
+
+        var r = shape.r;
+        var width = shape.width;
+        var angle = shape.angle;
+        var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);
+        var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);
+
+        angle = shape.angle - Math.PI / 2;
+        ctx.moveTo(x, y);
+        ctx.lineTo(
+            shape.x + mathCos(angle) * width,
+            shape.y + mathSin(angle) * width
+        );
+        ctx.lineTo(
+            shape.x + mathCos(shape.angle) * r,
+            shape.y + mathSin(shape.angle) * r
+        );
+        ctx.lineTo(
+            shape.x - mathCos(angle) * width,
+            shape.y - mathSin(angle) * width
+        );
+        ctx.lineTo(x, y);
+        return;
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function parsePosition(seriesModel, api) {
+    var center = seriesModel.get('center');
+    var width = api.getWidth();
+    var height = api.getHeight();
+    var size = Math.min(width, height);
+    var cx = parsePercent$1(center[0], api.getWidth());
+    var cy = parsePercent$1(center[1], api.getHeight());
+    var r = parsePercent$1(seriesModel.get('radius'), size / 2);
+
+    return {
+        cx: cx,
+        cy: cy,
+        r: r
+    };
+}
+
+function formatLabel(label, labelFormatter) {
+    if (labelFormatter) {
+        if (typeof labelFormatter === 'string') {
+            label = labelFormatter.replace('{value}', label != null ? label : '');
+        }
+        else if (typeof labelFormatter === 'function') {
+            label = labelFormatter(label);
+        }
+    }
+
+    return label;
+}
+
+var PI2$5 = Math.PI * 2;
+
+var GaugeView = Chart.extend({
+
+    type: 'gauge',
+
+    render: function (seriesModel, ecModel, api) {
+
+        this.group.removeAll();
+
+        var colorList = seriesModel.get('axisLine.lineStyle.color');
+        var posInfo = parsePosition(seriesModel, api);
+
+        this._renderMain(
+            seriesModel, ecModel, api, colorList, posInfo
+        );
+    },
+
+    dispose: function () {},
+
+    _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) {
+        var group = this.group;
+
+        var axisLineModel = seriesModel.getModel('axisLine');
+        var lineStyleModel = axisLineModel.getModel('lineStyle');
+
+        var clockwise = seriesModel.get('clockwise');
+        var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;
+        var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;
+
+        var angleRangeSpan = (endAngle - startAngle) % PI2$5;
+
+        var prevEndAngle = startAngle;
+        var axisLineWidth = lineStyleModel.get('width');
+
+        for (var i = 0; i < colorList.length; i++) {
+            // Clamp
+            var percent = Math.min(Math.max(colorList[i][0], 0), 1);
+            var endAngle = startAngle + angleRangeSpan * percent;
+            var sector = new Sector({
+                shape: {
+                    startAngle: prevEndAngle,
+                    endAngle: endAngle,
+                    cx: posInfo.cx,
+                    cy: posInfo.cy,
+                    clockwise: clockwise,
+                    r0: posInfo.r - axisLineWidth,
+                    r: posInfo.r
+                },
+                silent: true
+            });
+
+            sector.setStyle({
+                fill: colorList[i][1]
+            });
+
+            sector.setStyle(lineStyleModel.getLineStyle(
+                // Because we use sector to simulate arc
+                // so the properties for stroking are useless
+                ['color', 'borderWidth', 'borderColor']
+            ));
+
+            group.add(sector);
+
+            prevEndAngle = endAngle;
+        }
+
+        var getColor = function (percent) {
+            // Less than 0
+            if (percent <= 0) {
+                return colorList[0][1];
+            }
+            for (var i = 0; i < colorList.length; i++) {
+                if (colorList[i][0] >= percent
+                    && (i === 0 ? 0 : colorList[i - 1][0]) < percent
+                ) {
+                    return colorList[i][1];
+                }
+            }
+            // More than 1
+            return colorList[i - 1][1];
+        };
+
+        if (!clockwise) {
+            var tmp = startAngle;
+            startAngle = endAngle;
+            endAngle = tmp;
+        }
+
+        this._renderTicks(
+            seriesModel, ecModel, api, getColor, posInfo,
+            startAngle, endAngle, clockwise
+        );
+
+        this._renderPointer(
+            seriesModel, ecModel, api, getColor, posInfo,
+            startAngle, endAngle, clockwise
+        );
+
+        this._renderTitle(
+            seriesModel, ecModel, api, getColor, posInfo
+        );
+        this._renderDetail(
+            seriesModel, ecModel, api, getColor, posInfo
+        );
+    },
+
+    _renderTicks: function (
+        seriesModel, ecModel, api, getColor, posInfo,
+        startAngle, endAngle, clockwise
+    ) {
+        var group = this.group;
+        var cx = posInfo.cx;
+        var cy = posInfo.cy;
+        var r = posInfo.r;
+
+        var minVal = +seriesModel.get('min');
+        var maxVal = +seriesModel.get('max');
+
+        var splitLineModel = seriesModel.getModel('splitLine');
+        var tickModel = seriesModel.getModel('axisTick');
+        var labelModel = seriesModel.getModel('axisLabel');
+
+        var splitNumber = seriesModel.get('splitNumber');
+        var subSplitNumber = tickModel.get('splitNumber');
+
+        var splitLineLen = parsePercent$1(
+            splitLineModel.get('length'), r
+        );
+        var tickLen = parsePercent$1(
+            tickModel.get('length'), r
+        );
+
+        var angle = startAngle;
+        var step = (endAngle - startAngle) / splitNumber;
+        var subStep = step / subSplitNumber;
+
+        var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();
+        var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();
+
+        for (var i = 0; i <= splitNumber; i++) {
+            var unitX = Math.cos(angle);
+            var unitY = Math.sin(angle);
+            // Split line
+            if (splitLineModel.get('show')) {
+                var splitLine = new Line({
+                    shape: {
+                        x1: unitX * r + cx,
+                        y1: unitY * r + cy,
+                        x2: unitX * (r - splitLineLen) + cx,
+                        y2: unitY * (r - splitLineLen) + cy
+                    },
+                    style: splitLineStyle,
+                    silent: true
+                });
+                if (splitLineStyle.stroke === 'auto') {
+                    splitLine.setStyle({
+                        stroke: getColor(i / splitNumber)
+                    });
+                }
+
+                group.add(splitLine);
+            }
+
+            // Label
+            if (labelModel.get('show')) {
+                var label = formatLabel(
+                    round$1(i / splitNumber * (maxVal - minVal) + minVal),
+                    labelModel.get('formatter')
+                );
+                var distance = labelModel.get('distance');
+                var autoColor = getColor(i / splitNumber);
+
+                group.add(new Text({
+                    style: setTextStyle({}, labelModel, {
+                        text: label,
+                        x: unitX * (r - splitLineLen - distance) + cx,
+                        y: unitY * (r - splitLineLen - distance) + cy,
+                        textVerticalAlign: unitY < -0.4 ? 'top' : (unitY > 0.4 ? 'bottom' : 'middle'),
+                        textAlign: unitX < -0.4 ? 'left' : (unitX > 0.4 ? 'right' : 'center')
+                    }, {autoColor: autoColor}),
+                    silent: true
+                }));
+            }
+
+            // Axis tick
+            if (tickModel.get('show') && i !== splitNumber) {
+                for (var j = 0; j <= subSplitNumber; j++) {
+                    var unitX = Math.cos(angle);
+                    var unitY = Math.sin(angle);
+                    var tickLine = new Line({
+                        shape: {
+                            x1: unitX * r + cx,
+                            y1: unitY * r + cy,
+                            x2: unitX * (r - tickLen) + cx,
+                            y2: unitY * (r - tickLen) + cy
+                        },
+                        silent: true,
+                        style: tickLineStyle
+                    });
+
+                    if (tickLineStyle.stroke === 'auto') {
+                        tickLine.setStyle({
+                            stroke: getColor((i + j / subSplitNumber) / splitNumber)
+                        });
+                    }
+
+                    group.add(tickLine);
+                    angle += subStep;
+                }
+                angle -= subStep;
+            }
+            else {
+                angle += step;
+            }
+        }
+    },
+
+    _renderPointer: function (
+        seriesModel, ecModel, api, getColor, posInfo,
+        startAngle, endAngle, clockwise
+    ) {
+
+        var group = this.group;
+        var oldData = this._data;
+
+        if (!seriesModel.get('pointer.show')) {
+            // Remove old element
+            oldData && oldData.eachItemGraphicEl(function (el) {
+                group.remove(el);
+            });
+            return;
+        }
+
+        var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];
+        var angleExtent = [startAngle, endAngle];
+
+        var data = seriesModel.getData();
+        var valueDim = data.mapDimension('value');
+
+        data.diff(oldData)
+            .add(function (idx) {
+                var pointer = new PointerPath({
+                    shape: {
+                        angle: startAngle
+                    }
+                });
+
+                initProps(pointer, {
+                    shape: {
+                        angle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true)
+                    }
+                }, seriesModel);
+
+                group.add(pointer);
+                data.setItemGraphicEl(idx, pointer);
+            })
+            .update(function (newIdx, oldIdx) {
+                var pointer = oldData.getItemGraphicEl(oldIdx);
+
+                updateProps(pointer, {
+                    shape: {
+                        angle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true)
+                    }
+                }, seriesModel);
+
+                group.add(pointer);
+                data.setItemGraphicEl(newIdx, pointer);
+            })
+            .remove(function (idx) {
+                var pointer = oldData.getItemGraphicEl(idx);
+                group.remove(pointer);
+            })
+            .execute();
+
+        data.eachItemGraphicEl(function (pointer, idx) {
+            var itemModel = data.getItemModel(idx);
+            var pointerModel = itemModel.getModel('pointer');
+
+            pointer.setShape({
+                x: posInfo.cx,
+                y: posInfo.cy,
+                width: parsePercent$1(
+                    pointerModel.get('width'), posInfo.r
+                ),
+                r: parsePercent$1(pointerModel.get('length'), posInfo.r)
+            });
+
+            pointer.useStyle(itemModel.getModel('itemStyle').getItemStyle());
+
+            if (pointer.style.fill === 'auto') {
+                pointer.setStyle('fill', getColor(
+                    linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true)
+                ));
+            }
+
+            setHoverStyle(
+                pointer, itemModel.getModel('emphasis.itemStyle').getItemStyle()
+            );
+        });
+
+        this._data = data;
+    },
+
+    _renderTitle: function (
+        seriesModel, ecModel, api, getColor, posInfo
+    ) {
+        var data = seriesModel.getData();
+        var valueDim = data.mapDimension('value');
+        var titleModel = seriesModel.getModel('title');
+        if (titleModel.get('show')) {
+            var offsetCenter = titleModel.get('offsetCenter');
+            var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r);
+            var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r);
+
+            var minVal = +seriesModel.get('min');
+            var maxVal = +seriesModel.get('max');
+            var value = seriesModel.getData().get(valueDim, 0);
+            var autoColor = getColor(
+                linearMap(value, [minVal, maxVal], [0, 1], true)
+            );
+
+            this.group.add(new Text({
+                silent: true,
+                style: setTextStyle({}, titleModel, {
+                    x: x,
+                    y: y,
+                    // FIXME First data name ?
+                    text: data.getName(0),
+                    textAlign: 'center',
+                    textVerticalAlign: 'middle'
+                }, {autoColor: autoColor, forceRich: true})
+            }));
+        }
+    },
+
+    _renderDetail: function (
+        seriesModel, ecModel, api, getColor, posInfo
+    ) {
+        var detailModel = seriesModel.getModel('detail');
+        var minVal = +seriesModel.get('min');
+        var maxVal = +seriesModel.get('max');
+        if (detailModel.get('show')) {
+            var offsetCenter = detailModel.get('offsetCenter');
+            var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r);
+            var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r);
+            var width = parsePercent$1(detailModel.get('width'), posInfo.r);
+            var height = parsePercent$1(detailModel.get('height'), posInfo.r);
+            var data = seriesModel.getData();
+            var value = data.get(data.mapDimension('value'), 0);
+            var autoColor = getColor(
+                linearMap(value, [minVal, maxVal], [0, 1], true)
+            );
+
+            this.group.add(new Text({
+                silent: true,
+                style: setTextStyle({}, detailModel, {
+                    x: x,
+                    y: y,
+                    text: formatLabel(
+                        // FIXME First data name ?
+                        value, detailModel.get('formatter')
+                    ),
+                    textWidth: isNaN(width) ? null : width,
+                    textHeight: isNaN(height) ? null : height,
+                    textAlign: 'center',
+                    textVerticalAlign: 'middle'
+                }, {autoColor: autoColor, forceRich: true})
+            }));
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var FunnelSeries = extendSeriesModel({
+
+    type: 'series.funnel',
+
+    init: function (option) {
+        FunnelSeries.superApply(this, 'init', arguments);
+
+        // Enable legend selection for each data item
+        // Use a function instead of direct access because data reference may changed
+        this.legendDataProvider = function () {
+            return this.getRawData();
+        };
+        // Extend labelLine emphasis
+        this._defaultLabelLine(option);
+    },
+
+    getInitialData: function (option, ecModel) {
+        return createListSimply(this, ['value']);
+    },
+
+    _defaultLabelLine: function (option) {
+        // Extend labelLine emphasis
+        defaultEmphasis(option, 'labelLine', ['show']);
+
+        var labelLineNormalOpt = option.labelLine;
+        var labelLineEmphasisOpt = option.emphasis.labelLine;
+        // Not show label line if `label.normal.show = false`
+        labelLineNormalOpt.show = labelLineNormalOpt.show
+            && option.label.show;
+        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show
+            && option.emphasis.label.show;
+    },
+
+    // Overwrite
+    getDataParams: function (dataIndex) {
+        var data = this.getData();
+        var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex);
+        var valueDim = data.mapDimension('value');
+        var sum = data.getSum(valueDim);
+        // Percent is 0 if sum is 0
+        params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2);
+
+        params.$vars.push('percent');
+        return params;
+    },
+
+    defaultOption: {
+        zlevel: 0,                  // 一级层叠
+        z: 2,                       // 二级层叠
+        legendHoverLink: true,
+        left: 80,
+        top: 60,
+        right: 80,
+        bottom: 60,
+        // width: {totalWidth} - left - right,
+        // height: {totalHeight} - top - bottom,
+
+        // 默认取数据最小最大值
+        // min: 0,
+        // max: 100,
+        minSize: '0%',
+        maxSize: '100%',
+        sort: 'descending', // 'ascending', 'descending'
+        gap: 0,
+        funnelAlign: 'center',
+        label: {
+            show: true,
+            position: 'outer'
+            // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+        },
+        labelLine: {
+            show: true,
+            length: 20,
+            lineStyle: {
+                // color: 各异,
+                width: 1,
+                type: 'solid'
+            }
+        },
+        itemStyle: {
+            // color: 各异,
+            borderColor: '#fff',
+            borderWidth: 1
+        },
+        emphasis: {
+            label: {
+                show: true
+            }
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Piece of pie including Sector, Label, LabelLine
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ */
+function FunnelPiece(data, idx) {
+
+    Group.call(this);
+
+    var polygon = new Polygon();
+    var labelLine = new Polyline();
+    var text = new Text();
+    this.add(polygon);
+    this.add(labelLine);
+    this.add(text);
+
+    this.updateData(data, idx, true);
+
+    // Hover to change label and labelLine
+    function onEmphasis() {
+        labelLine.ignore = labelLine.hoverIgnore;
+        text.ignore = text.hoverIgnore;
+    }
+    function onNormal() {
+        labelLine.ignore = labelLine.normalIgnore;
+        text.ignore = text.normalIgnore;
+    }
+    this.on('emphasis', onEmphasis)
+        .on('normal', onNormal)
+        .on('mouseover', onEmphasis)
+        .on('mouseout', onNormal);
+}
+
+var funnelPieceProto = FunnelPiece.prototype;
+
+var opacityAccessPath = ['itemStyle', 'opacity'];
+funnelPieceProto.updateData = function (data, idx, firstCreate) {
+
+    var polygon = this.childAt(0);
+
+    var seriesModel = data.hostModel;
+    var itemModel = data.getItemModel(idx);
+    var layout = data.getItemLayout(idx);
+    var opacity = data.getItemModel(idx).get(opacityAccessPath);
+    opacity = opacity == null ? 1 : opacity;
+
+    // Reset style
+    polygon.useStyle({});
+
+    if (firstCreate) {
+        polygon.setShape({
+            points: layout.points
+        });
+        polygon.setStyle({ opacity : 0 });
+        initProps(polygon, {
+            style: {
+                opacity: opacity
+            }
+        }, seriesModel, idx);
+    }
+    else {
+        updateProps(polygon, {
+            style: {
+                opacity: opacity
+            },
+            shape: {
+                points: layout.points
+            }
+        }, seriesModel, idx);
+    }
+
+    // Update common style
+    var itemStyleModel = itemModel.getModel('itemStyle');
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    polygon.setStyle(
+        defaults(
+            {
+                lineJoin: 'round',
+                fill: visualColor
+            },
+            itemStyleModel.getItemStyle(['opacity'])
+        )
+    );
+    polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle();
+
+    this._updateLabel(data, idx);
+
+    setHoverStyle(this);
+};
+
+funnelPieceProto._updateLabel = function (data, idx) {
+
+    var labelLine = this.childAt(1);
+    var labelText = this.childAt(2);
+
+    var seriesModel = data.hostModel;
+    var itemModel = data.getItemModel(idx);
+    var layout = data.getItemLayout(idx);
+    var labelLayout = layout.label;
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    updateProps(labelLine, {
+        shape: {
+            points: labelLayout.linePoints || labelLayout.linePoints
+        }
+    }, seriesModel, idx);
+
+    updateProps(labelText, {
+        style: {
+            x: labelLayout.x,
+            y: labelLayout.y
+        }
+    }, seriesModel, idx);
+    labelText.attr({
+        rotation: labelLayout.rotation,
+        origin: [labelLayout.x, labelLayout.y],
+        z2: 10
+    });
+
+    var labelModel = itemModel.getModel('label');
+    var labelHoverModel = itemModel.getModel('emphasis.label');
+    var labelLineModel = itemModel.getModel('labelLine');
+    var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');
+    var visualColor = data.getItemVisual(idx, 'color');
+
+    setLabelStyle(
+        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,
+        {
+            labelFetcher: data.hostModel,
+            labelDataIndex: idx,
+            defaultText: data.getName(idx),
+            autoColor: visualColor,
+            useInsideStyle: !!labelLayout.inside
+        },
+        {
+            textAlign: labelLayout.textAlign,
+            textVerticalAlign: labelLayout.verticalAlign
+        }
+    );
+
+    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');
+    labelText.hoverIgnore = !labelHoverModel.get('show');
+
+    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');
+    labelLine.hoverIgnore = !labelLineHoverModel.get('show');
+
+    // Default use item visual color
+    labelLine.setStyle({
+        stroke: visualColor
+    });
+    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());
+
+    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();
+};
+
+inherits(FunnelPiece, Group);
+
+
+var FunnelView = Chart.extend({
+
+    type: 'funnel',
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        var oldData = this._data;
+
+        var group = this.group;
+
+        data.diff(oldData)
+            .add(function (idx) {
+                var funnelPiece = new FunnelPiece(data, idx);
+
+                data.setItemGraphicEl(idx, funnelPiece);
+
+                group.add(funnelPiece);
+            })
+            .update(function (newIdx, oldIdx) {
+                var piePiece = oldData.getItemGraphicEl(oldIdx);
+
+                piePiece.updateData(data, newIdx);
+
+                group.add(piePiece);
+                data.setItemGraphicEl(newIdx, piePiece);
+            })
+            .remove(function (idx) {
+                var piePiece = oldData.getItemGraphicEl(idx);
+                group.remove(piePiece);
+            })
+            .execute();
+
+        this._data = data;
+    },
+
+    remove: function () {
+        this.group.removeAll();
+        this._data = null;
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function getViewRect$2(seriesModel, api) {
+    return getLayoutRect(
+        seriesModel.getBoxLayoutParams(), {
+            width: api.getWidth(),
+            height: api.getHeight()
+        }
+    );
+}
+
+function getSortedIndices(data, sort) {
+    var valueDim = data.mapDimension('value');
+    var valueArr = data.mapArray(valueDim, function (val) {
+        return val;
+    });
+    var indices = [];
+    var isAscending = sort === 'ascending';
+    for (var i = 0, len = data.count(); i < len; i++) {
+        indices[i] = i;
+    }
+
+    // Add custom sortable function & none sortable opetion by "options.sort"
+    if (typeof sort === 'function') {
+        indices.sort(sort);
+    } else if (sort !== 'none') {
+        indices.sort(function (a, b) {
+            return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];
+        });
+    }
+    return indices;
+}
+
+function labelLayout$1(data) {
+    data.each(function (idx) {
+        var itemModel = data.getItemModel(idx);
+        var labelModel = itemModel.getModel('label');
+        var labelPosition = labelModel.get('position');
+
+        var labelLineModel = itemModel.getModel('labelLine');
+
+        var layout = data.getItemLayout(idx);
+        var points = layout.points;
+
+        var isLabelInside = labelPosition === 'inner'
+            || labelPosition === 'inside' || labelPosition === 'center';
+
+        var textAlign;
+        var textX;
+        var textY;
+        var linePoints;
+
+        if (isLabelInside) {
+            textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4;
+            textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4;
+            textAlign = 'center';
+            linePoints = [
+                [textX, textY], [textX, textY]
+            ];
+        }
+        else {
+            var x1;
+            var y1;
+            var x2;
+            var labelLineLen = labelLineModel.get('length');
+            if (labelPosition === 'left') {
+                // Left side
+                x1 = (points[3][0] + points[0][0]) / 2;
+                y1 = (points[3][1] + points[0][1]) / 2;
+                x2 = x1 - labelLineLen;
+                textX = x2 - 5;
+                textAlign = 'right';
+            }
+            else {
+                // Right side
+                x1 = (points[1][0] + points[2][0]) / 2;
+                y1 = (points[1][1] + points[2][1]) / 2;
+                x2 = x1 + labelLineLen;
+                textX = x2 + 5;
+                textAlign = 'left';
+            }
+            var y2 = y1;
+
+            linePoints = [[x1, y1], [x2, y2]];
+            textY = y2;
+        }
+
+        layout.label = {
+            linePoints: linePoints,
+            x: textX,
+            y: textY,
+            verticalAlign: 'middle',
+            textAlign: textAlign,
+            inside: isLabelInside
+        };
+    });
+}
+
+var funnelLayout = function (ecModel, api, payload) {
+    ecModel.eachSeriesByType('funnel', function (seriesModel) {
+        var data = seriesModel.getData();
+        var valueDim = data.mapDimension('value');
+        var sort = seriesModel.get('sort');
+        var viewRect = getViewRect$2(seriesModel, api);
+        var indices = getSortedIndices(data, sort);
+
+        var sizeExtent = [
+            parsePercent$1(seriesModel.get('minSize'), viewRect.width),
+            parsePercent$1(seriesModel.get('maxSize'), viewRect.width)
+        ];
+        var dataExtent = data.getDataExtent(valueDim);
+        var min = seriesModel.get('min');
+        var max = seriesModel.get('max');
+        if (min == null) {
+            min = Math.min(dataExtent[0], 0);
+        }
+        if (max == null) {
+            max = dataExtent[1];
+        }
+
+        var funnelAlign = seriesModel.get('funnelAlign');
+        var gap = seriesModel.get('gap');
+        var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();
+
+        var y = viewRect.y;
+
+        var getLinePoints = function (idx, offY) {
+            // End point index is data.count() and we assign it 0
+            var val = data.get(valueDim, idx) || 0;
+            var itemWidth = linearMap(val, [min, max], sizeExtent, true);
+            var x0;
+            switch (funnelAlign) {
+                case 'left':
+                    x0 = viewRect.x;
+                    break;
+                case 'center':
+                    x0 = viewRect.x + (viewRect.width - itemWidth) / 2;
+                    break;
+                case 'right':
+                    x0 = viewRect.x + viewRect.width - itemWidth;
+                    break;
+            }
+            return [
+                [x0, offY],
+                [x0 + itemWidth, offY]
+            ];
+        };
+
+        if (sort === 'ascending') {
+            // From bottom to top
+            itemHeight = -itemHeight;
+            gap = -gap;
+            y += viewRect.height;
+            indices = indices.reverse();
+        }
+
+        for (var i = 0; i < indices.length; i++) {
+            var idx = indices[i];
+            var nextIdx = indices[i + 1];
+
+            var itemModel = data.getItemModel(idx);
+            var height = itemModel.get('itemStyle.height');
+            if (height == null) {
+                height = itemHeight;
+            }
+            else {
+                height = parsePercent$1(height, viewRect.height);
+                if (sort === 'ascending') {
+                    height = -height;
+                }
+            }
+
+            var start = getLinePoints(idx, y);
+            var end = getLinePoints(nextIdx, y + height);
+
+            y += height + gap;
+
+            data.setItemLayout(idx, {
+                points: start.concat(end.slice().reverse())
+            });
+        }
+
+        labelLayout$1(data);
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(dataColor('funnel'));
+registerLayout(funnelLayout);
+registerProcessor(dataFilter('funnel'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var parallelPreprocessor = function (option) {
+    createParallelIfNeeded(option);
+    mergeAxisOptionFromParallel(option);
+};
+
+/**
+ * Create a parallel coordinate if not exists.
+ * @inner
+ */
+function createParallelIfNeeded(option) {
+    if (option.parallel) {
+        return;
+    }
+
+    var hasParallelSeries = false;
+
+    each$1(option.series, function (seriesOpt) {
+        if (seriesOpt && seriesOpt.type === 'parallel') {
+            hasParallelSeries = true;
+        }
+    });
+
+    if (hasParallelSeries) {
+        option.parallel = [{}];
+    }
+}
+
+/**
+ * Merge aixs definition from parallel option (if exists) to axis option.
+ * @inner
+ */
+function mergeAxisOptionFromParallel(option) {
+    var axes = normalizeToArray(option.parallelAxis);
+
+    each$1(axes, function (axisOption) {
+        if (!isObject$1(axisOption)) {
+            return;
+        }
+
+        var parallelIndex = axisOption.parallelIndex || 0;
+        var parallelOption = normalizeToArray(option.parallel)[parallelIndex];
+
+        if (parallelOption && parallelOption.parallelAxisDefault) {
+            merge(axisOption, parallelOption.parallelAxisDefault, false);
+        }
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @constructor module:echarts/coord/parallel/ParallelAxis
+ * @extends {module:echarts/coord/Axis}
+ * @param {string} dim
+ * @param {*} scale
+ * @param {Array.<number>} coordExtent
+ * @param {string} axisType
+ */
+var ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {
+
+    Axis.call(this, dim, scale, coordExtent);
+
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = axisType || 'value';
+
+    /**
+     * @type {number}
+     * @readOnly
+     */
+    this.axisIndex = axisIndex;
+};
+
+ParallelAxis.prototype = {
+
+    constructor: ParallelAxis,
+
+    /**
+     * Axis model
+     * @param {module:echarts/coord/parallel/AxisModel}
+     */
+    model: null,
+
+    /**
+     * @override
+     */
+    isHorizontal: function () {
+        return this.coordinateSystem.getModel().get('layout') !== 'horizontal';
+    }
+
+};
+
+inherits(ParallelAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Calculate slider move result.
+ * Usage:
+ * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as
+ * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`.
+ * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`.
+ *
+ * @param {number} delta Move length.
+ * @param {Array.<number>} handleEnds handleEnds[0] can be bigger then handleEnds[1].
+ *              handleEnds will be modified in this method.
+ * @param {Array.<number>} extent handleEnds is restricted by extent.
+ *              extent[0] should less or equals than extent[1].
+ * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds,
+ *              where the input minSpan and maxSpan will not work.
+ * @param {number} [minSpan] The range of dataZoom can not be smaller than that.
+ *              If not set, handle0 and cross handle1. If set as a non-negative
+ *              number (including `0`), handles will push each other when reaching
+ *              the minSpan.
+ * @param {number} [maxSpan] The range of dataZoom can not be larger than that.
+ * @return {Array.<number>} The input handleEnds.
+ */
+var sliderMove = function (delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {
+    // Normalize firstly.
+    handleEnds[0] = restrict$1(handleEnds[0], extent);
+    handleEnds[1] = restrict$1(handleEnds[1], extent);
+
+    delta = delta || 0;
+
+    var extentSpan = extent[1] - extent[0];
+
+    // Notice maxSpan and minSpan can be null/undefined.
+    if (minSpan != null) {
+        minSpan = restrict$1(minSpan, [0, extentSpan]);
+    }
+    if (maxSpan != null) {
+        maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);
+    }
+    if (handleIndex === 'all') {
+        minSpan = maxSpan = Math.abs(handleEnds[1] - handleEnds[0]);
+        handleIndex = 0;
+    }
+
+    var originalDistSign = getSpanSign(handleEnds, handleIndex);
+
+    handleEnds[handleIndex] += delta;
+
+    // Restrict in extent.
+    var extentMinSpan = minSpan || 0;
+    var realExtent = extent.slice();
+    originalDistSign.sign < 0 ? (realExtent[0] += extentMinSpan) : (realExtent[1] -= extentMinSpan);
+    handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent);
+
+    // Expand span.
+    var currDistSign = getSpanSign(handleEnds, handleIndex);
+    if (minSpan != null && (
+        currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan
+    )) {
+        // If minSpan exists, 'cross' is forbinden.
+        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;
+    }
+
+    // Shrink span.
+    var currDistSign = getSpanSign(handleEnds, handleIndex);
+    if (maxSpan != null && currDistSign.span > maxSpan) {
+        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;
+    }
+
+    return handleEnds;
+};
+
+function getSpanSign(handleEnds, handleIndex) {
+    var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex];
+    // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]
+    // is at left of handleEnds[1] for non-cross case.
+    return {span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1};
+}
+
+function restrict$1(value, extend) {
+    return Math.min(extend[1], Math.max(extend[0], value));
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Parallel Coordinates
+ * <https://en.wikipedia.org/wiki/Parallel_coordinates>
+ */
+
+var each$11 = each$1;
+var mathMin$5 = Math.min;
+var mathMax$5 = Math.max;
+var mathFloor$2 = Math.floor;
+var mathCeil$2 = Math.ceil;
+var round$2 = round$1;
+
+var PI$3 = Math.PI;
+
+function Parallel(parallelModel, ecModel, api) {
+
+    /**
+     * key: dimension
+     * @type {Object.<string, module:echarts/coord/parallel/Axis>}
+     * @private
+     */
+    this._axesMap = createHashMap();
+
+    /**
+     * key: dimension
+     * value: {position: [], rotation, }
+     * @type {Object.<string, Object>}
+     * @private
+     */
+    this._axesLayout = {};
+
+    /**
+     * Always follow axis order.
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    this.dimensions = parallelModel.dimensions;
+
+    /**
+     * @type {module:zrender/core/BoundingRect}
+     */
+    this._rect;
+
+    /**
+     * @type {module:echarts/coord/parallel/ParallelModel}
+     */
+    this._model = parallelModel;
+
+    this._init(parallelModel, ecModel, api);
+}
+
+Parallel.prototype = {
+
+    type: 'parallel',
+
+    constructor: Parallel,
+
+    /**
+     * Initialize cartesian coordinate systems
+     * @private
+     */
+    _init: function (parallelModel, ecModel, api) {
+
+        var dimensions = parallelModel.dimensions;
+        var parallelAxisIndex = parallelModel.parallelAxisIndex;
+
+        each$11(dimensions, function (dim, idx) {
+
+            var axisIndex = parallelAxisIndex[idx];
+            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);
+
+            var axis = this._axesMap.set(dim, new ParallelAxis(
+                dim,
+                createScaleByModel(axisModel),
+                [0, 0],
+                axisModel.get('type'),
+                axisIndex
+            ));
+
+            var isCategory = axis.type === 'category';
+            axis.onBand = isCategory && axisModel.get('boundaryGap');
+            axis.inverse = axisModel.get('inverse');
+
+            // Injection
+            axisModel.axis = axis;
+            axis.model = axisModel;
+            axis.coordinateSystem = axisModel.coordinateSystem = this;
+
+        }, this);
+    },
+
+    /**
+     * Update axis scale after data processed
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    update: function (ecModel, api) {
+        this._updateAxesFromSeries(this._model, ecModel);
+    },
+
+    /**
+     * @override
+     */
+    containPoint: function (point) {
+        var layoutInfo = this._makeLayoutInfo();
+        var axisBase = layoutInfo.axisBase;
+        var layoutBase = layoutInfo.layoutBase;
+        var pixelDimIndex = layoutInfo.pixelDimIndex;
+        var pAxis = point[1 - pixelDimIndex];
+        var pLayout = point[pixelDimIndex];
+
+        return pAxis >= axisBase
+            && pAxis <= axisBase + layoutInfo.axisLength
+            && pLayout >= layoutBase
+            && pLayout <= layoutBase + layoutInfo.layoutLength;
+    },
+
+    getModel: function () {
+        return this._model;
+    },
+
+    /**
+     * Update properties from series
+     * @private
+     */
+    _updateAxesFromSeries: function (parallelModel, ecModel) {
+        ecModel.eachSeries(function (seriesModel) {
+
+            if (!parallelModel.contains(seriesModel, ecModel)) {
+                return;
+            }
+
+            var data = seriesModel.getData();
+
+            each$11(this.dimensions, function (dim) {
+                var axis = this._axesMap.get(dim);
+                axis.scale.unionExtentFromData(data, data.mapDimension(dim));
+                niceScaleExtent(axis.scale, axis.model);
+            }, this);
+        }, this);
+    },
+
+    /**
+     * Resize the parallel coordinate system.
+     * @param {module:echarts/coord/parallel/ParallelModel} parallelModel
+     * @param {module:echarts/ExtensionAPI} api
+     */
+    resize: function (parallelModel, api) {
+        this._rect = getLayoutRect(
+            parallelModel.getBoxLayoutParams(),
+            {
+                width: api.getWidth(),
+                height: api.getHeight()
+            }
+        );
+
+        this._layoutAxes();
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getRect: function () {
+        return this._rect;
+    },
+
+    /**
+     * @private
+     */
+    _makeLayoutInfo: function () {
+        var parallelModel = this._model;
+        var rect = this._rect;
+        var xy = ['x', 'y'];
+        var wh = ['width', 'height'];
+        var layout = parallelModel.get('layout');
+        var pixelDimIndex = layout === 'horizontal' ? 0 : 1;
+        var layoutLength = rect[wh[pixelDimIndex]];
+        var layoutExtent = [0, layoutLength];
+        var axisCount = this.dimensions.length;
+
+        var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);
+        var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);
+        var axisExpandable = parallelModel.get('axisExpandable')
+            && axisCount > 3
+            && axisCount > axisExpandCount
+            && axisExpandCount > 1
+            && axisExpandWidth > 0
+            && layoutLength > 0;
+
+        // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength],
+        // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow),
+        // where collapsed axes should be overlapped.
+        var axisExpandWindow = parallelModel.get('axisExpandWindow');
+        var winSize;
+        if (!axisExpandWindow) {
+            winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);
+            var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor$2(axisCount / 2);
+            axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];
+            axisExpandWindow[1] = axisExpandWindow[0] + winSize;
+        }
+        else {
+                winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);
+                axisExpandWindow[1] = axisExpandWindow[0] + winSize;
+        }
+
+        var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount);
+        // Avoid axisCollapseWidth is too small.
+        axisCollapseWidth < 3 && (axisCollapseWidth = 0);
+
+        // Find the first and last indices > ewin[0] and < ewin[1].
+        var winInnerIndices = [
+            mathFloor$2(round$2(axisExpandWindow[0] / axisExpandWidth, 1)) + 1,
+            mathCeil$2(round$2(axisExpandWindow[1] / axisExpandWidth, 1)) - 1
+        ];
+
+        // Pos in ec coordinates.
+        var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];
+
+        return {
+            layout: layout,
+            pixelDimIndex: pixelDimIndex,
+            layoutBase: rect[xy[pixelDimIndex]],
+            layoutLength: layoutLength,
+            axisBase: rect[xy[1 - pixelDimIndex]],
+            axisLength: rect[wh[1 - pixelDimIndex]],
+            axisExpandable: axisExpandable,
+            axisExpandWidth: axisExpandWidth,
+            axisCollapseWidth: axisCollapseWidth,
+            axisExpandWindow: axisExpandWindow,
+            axisCount: axisCount,
+            winInnerIndices: winInnerIndices,
+            axisExpandWindow0Pos: axisExpandWindow0Pos
+        };
+    },
+
+    /**
+     * @private
+     */
+    _layoutAxes: function () {
+        var rect = this._rect;
+        var axes = this._axesMap;
+        var dimensions = this.dimensions;
+        var layoutInfo = this._makeLayoutInfo();
+        var layout = layoutInfo.layout;
+
+        axes.each(function (axis) {
+            var axisExtent = [0, layoutInfo.axisLength];
+            var idx = axis.inverse ? 1 : 0;
+            axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);
+        });
+
+        each$11(dimensions, function (dim, idx) {
+            var posInfo = (layoutInfo.axisExpandable
+                ? layoutAxisWithExpand : layoutAxisWithoutExpand
+            )(idx, layoutInfo);
+
+            var positionTable = {
+                horizontal: {
+                    x: posInfo.position,
+                    y: layoutInfo.axisLength
+                },
+                vertical: {
+                    x: 0,
+                    y: posInfo.position
+                }
+            };
+            var rotationTable = {
+                horizontal: PI$3 / 2,
+                vertical: 0
+            };
+
+            var position = [
+                positionTable[layout].x + rect.x,
+                positionTable[layout].y + rect.y
+            ];
+
+            var rotation = rotationTable[layout];
+            var transform = create$1();
+            rotate(transform, transform, rotation);
+            translate(transform, transform, position);
+
+            // TODO
+            // tick等排布信息。
+
+            // TODO
+            // 根据axis order 更新 dimensions顺序。
+
+            this._axesLayout[dim] = {
+                position: position,
+                rotation: rotation,
+                transform: transform,
+                axisNameAvailableWidth: posInfo.axisNameAvailableWidth,
+                axisLabelShow: posInfo.axisLabelShow,
+                nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,
+                tickDirection: 1,
+                labelDirection: 1
+            };
+        }, this);
+    },
+
+    /**
+     * Get axis by dim.
+     * @param {string} dim
+     * @return {module:echarts/coord/parallel/ParallelAxis} [description]
+     */
+    getAxis: function (dim) {
+        return this._axesMap.get(dim);
+    },
+
+    /**
+     * Convert a dim value of a single item of series data to Point.
+     * @param {*} value
+     * @param {string} dim
+     * @return {Array}
+     */
+    dataToPoint: function (value, dim) {
+        return this.axisCoordToPoint(
+            this._axesMap.get(dim).dataToCoord(value),
+            dim
+        );
+    },
+
+    /**
+     * Travel data for one time, get activeState of each data item.
+     * @param {module:echarts/data/List} data
+     * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal'
+     *                            {number} dataIndex
+     * @param {number} [start=0] the start dataIndex that travel from.
+     * @param {number} [end=data.count()] the next dataIndex of the last dataIndex will be travel.
+     */
+    eachActiveState: function (data, callback, start, end) {
+        start == null && (start = 0);
+        end == null && (end = data.count());
+
+        var axesMap = this._axesMap;
+        var dimensions = this.dimensions;
+        var dataDimensions = [];
+        var axisModels = [];
+
+        each$1(dimensions, function (axisDim) {
+            dataDimensions.push(data.mapDimension(axisDim));
+            axisModels.push(axesMap.get(axisDim).model);
+        });
+
+        var hasActiveSet = this.hasAxisBrushed();
+
+        for (var dataIndex = start; dataIndex < end; dataIndex++) {
+            var activeState;
+
+            if (!hasActiveSet) {
+                activeState = 'normal';
+            }
+            else {
+                activeState = 'active';
+                var values = data.getValues(dataDimensions, dataIndex);
+                for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
+                    var state = axisModels[j].getActiveState(values[j]);
+
+                    if (state === 'inactive') {
+                        activeState = 'inactive';
+                        break;
+                    }
+                }
+            }
+
+            callback(activeState, dataIndex);
+        }
+    },
+
+    /**
+     * Whether has any activeSet.
+     * @return {boolean}
+     */
+    hasAxisBrushed: function () {
+        var dimensions = this.dimensions;
+        var axesMap = this._axesMap;
+        var hasActiveSet = false;
+
+        for (var j = 0, lenj = dimensions.length; j < lenj; j++) {
+            if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') {
+                hasActiveSet = true;
+            }
+        }
+
+        return hasActiveSet;
+    },
+
+    /**
+     * Convert coords of each axis to Point.
+     *  Return point. For example: [10, 20]
+     * @param {Array.<number>} coords
+     * @param {string} dim
+     * @return {Array.<number>}
+     */
+    axisCoordToPoint: function (coord, dim) {
+        var axisLayout = this._axesLayout[dim];
+        return applyTransform$1([coord, 0], axisLayout.transform);
+    },
+
+    /**
+     * Get axis layout.
+     */
+    getAxisLayout: function (dim) {
+        return clone(this._axesLayout[dim]);
+    },
+
+    /**
+     * @param {Array.<number>} point
+     * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.
+     */
+    getSlidedAxisExpandWindow: function (point) {
+        var layoutInfo = this._makeLayoutInfo();
+        var pixelDimIndex = layoutInfo.pixelDimIndex;
+        var axisExpandWindow = layoutInfo.axisExpandWindow.slice();
+        var winSize = axisExpandWindow[1] - axisExpandWindow[0];
+        var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)];
+
+        // Out of the area of coordinate system.
+        if (!this.containPoint(point)) {
+            return {behavior: 'none', axisExpandWindow: axisExpandWindow};
+        }
+
+        // Conver the point from global to expand coordinates.
+        var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos;
+
+        // For dragging operation convenience, the window should not be
+        // slided when mouse is the center area of the window.
+        var delta;
+        var behavior = 'slide';
+        var axisCollapseWidth = layoutInfo.axisCollapseWidth;
+        var triggerArea = this._model.get('axisExpandSlideTriggerArea');
+        // But consider touch device, jump is necessary.
+        var useJump = triggerArea[0] != null;
+
+        if (axisCollapseWidth) {
+            if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {
+                behavior = 'jump';
+                delta = pointCoord - winSize * triggerArea[2];
+            }
+            else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {
+                behavior = 'jump';
+                delta = pointCoord - winSize * (1 - triggerArea[2]);
+            }
+            else {
+                (delta = pointCoord - winSize * triggerArea[1]) >= 0
+                    && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0
+                    && (delta = 0);
+            }
+            delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;
+            delta
+                ? sliderMove(delta, axisExpandWindow, extent, 'all')
+                // Avoid nonsense triger on mousemove.
+                : (behavior = 'none');
+        }
+        // When screen is too narrow, make it visible and slidable, although it is hard to interact.
+        else {
+            var winSize = axisExpandWindow[1] - axisExpandWindow[0];
+            var pos = extent[1] * pointCoord / winSize;
+            axisExpandWindow = [mathMax$5(0, pos - winSize / 2)];
+            axisExpandWindow[1] = mathMin$5(extent[1], axisExpandWindow[0] + winSize);
+            axisExpandWindow[0] = axisExpandWindow[1] - winSize;
+        }
+
+        return {
+            axisExpandWindow: axisExpandWindow,
+            behavior: behavior
+        };
+    }
+};
+
+function restrict(len, extent) {
+    return mathMin$5(mathMax$5(len, extent[0]), extent[1]);
+}
+
+function layoutAxisWithoutExpand(axisIndex, layoutInfo) {
+    var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);
+    return {
+        position: step * axisIndex,
+        axisNameAvailableWidth: step,
+        axisLabelShow: true
+    };
+}
+
+function layoutAxisWithExpand(axisIndex, layoutInfo) {
+    var layoutLength = layoutInfo.layoutLength;
+    var axisExpandWidth = layoutInfo.axisExpandWidth;
+    var axisCount = layoutInfo.axisCount;
+    var axisCollapseWidth = layoutInfo.axisCollapseWidth;
+    var winInnerIndices = layoutInfo.winInnerIndices;
+
+    var position;
+    var axisNameAvailableWidth = axisCollapseWidth;
+    var axisLabelShow = false;
+    var nameTruncateMaxWidth;
+
+    if (axisIndex < winInnerIndices[0]) {
+        position = axisIndex * axisCollapseWidth;
+        nameTruncateMaxWidth = axisCollapseWidth;
+    }
+    else if (axisIndex <= winInnerIndices[1]) {
+        position = layoutInfo.axisExpandWindow0Pos
+            + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];
+        axisNameAvailableWidth = axisExpandWidth;
+        axisLabelShow = true;
+    }
+    else {
+        position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;
+        nameTruncateMaxWidth = axisCollapseWidth;
+    }
+
+    return {
+        position: position,
+        axisNameAvailableWidth: axisNameAvailableWidth,
+        axisLabelShow: axisLabelShow,
+        nameTruncateMaxWidth: nameTruncateMaxWidth
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Parallel coordinate system creater.
+ */
+
+function create$2(ecModel, api) {
+    var coordSysList = [];
+
+    ecModel.eachComponent('parallel', function (parallelModel, idx) {
+        var coordSys = new Parallel(parallelModel, ecModel, api);
+
+        coordSys.name = 'parallel_' + idx;
+        coordSys.resize(parallelModel, api);
+
+        parallelModel.coordinateSystem = coordSys;
+        coordSys.model = parallelModel;
+
+        coordSysList.push(coordSys);
+    });
+
+    // Inject the coordinateSystems into seriesModel
+    ecModel.eachSeries(function (seriesModel) {
+        if (seriesModel.get('coordinateSystem') === 'parallel') {
+            var parallelModel = ecModel.queryComponents({
+                mainType: 'parallel',
+                index: seriesModel.get('parallelIndex'),
+                id: seriesModel.get('parallelId')
+            })[0];
+            seriesModel.coordinateSystem = parallelModel.coordinateSystem;
+        }
+    });
+
+    return coordSysList;
+}
+
+CoordinateSystemManager.register('parallel', {create: create$2});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AxisModel$2 = ComponentModel.extend({
+
+    type: 'baseParallelAxis',
+
+    /**
+     * @type {module:echarts/coord/parallel/Axis}
+     */
+    axis: null,
+
+    /**
+     * @type {Array.<Array.<number>}
+     * @readOnly
+     */
+    activeIntervals: [],
+
+    /**
+     * @return {Object}
+     */
+    getAreaSelectStyle: function () {
+        return makeStyleMapper(
+            [
+                ['fill', 'color'],
+                ['lineWidth', 'borderWidth'],
+                ['stroke', 'borderColor'],
+                ['width', 'width'],
+                ['opacity', 'opacity']
+            ]
+        )(this.getModel('areaSelectStyle'));
+    },
+
+    /**
+     * The code of this feature is put on AxisModel but not ParallelAxis,
+     * because axisModel can be alive after echarts updating but instance of
+     * ParallelAxis having been disposed. this._activeInterval should be kept
+     * when action dispatched (i.e. legend click).
+     *
+     * @param {Array.<Array<number>>} intervals interval.length === 0
+     *                                          means set all active.
+     * @public
+     */
+    setActiveIntervals: function (intervals) {
+        var activeIntervals = this.activeIntervals = clone(intervals);
+
+        // Normalize
+        if (activeIntervals) {
+            for (var i = activeIntervals.length - 1; i >= 0; i--) {
+                asc(activeIntervals[i]);
+            }
+        }
+    },
+
+    /**
+     * @param {number|string} [value] When attempting to detect 'no activeIntervals set',
+     *                         value can not be input.
+     * @return {string} 'normal': no activeIntervals set,
+     *                  'active',
+     *                  'inactive'.
+     * @public
+     */
+    getActiveState: function (value) {
+        var activeIntervals = this.activeIntervals;
+
+        if (!activeIntervals.length) {
+            return 'normal';
+        }
+
+        if (value == null || isNaN(value)) {
+            return 'inactive';
+        }
+
+        // Simple optimization
+        if (activeIntervals.length === 1) {
+            var interval = activeIntervals[0];
+            if (interval[0] <= value && value <= interval[1]) {
+                return 'active';
+            }
+        }
+        else {
+            for (var i = 0, len = activeIntervals.length; i < len; i++) {
+                if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {
+                    return 'active';
+                }
+            }
+        }
+
+        return 'inactive';
+    }
+
+});
+
+var defaultOption$1 = {
+
+    type: 'value',
+
+    /**
+     * @type {Array.<number>}
+     */
+    dim: null, // 0, 1, 2, ...
+
+    // parallelIndex: null,
+
+    areaSelectStyle: {
+        width: 20,
+        borderWidth: 1,
+        borderColor: 'rgba(160,197,232)',
+        color: 'rgba(160,197,232)',
+        opacity: 0.3
+    },
+
+    realtime: true, // Whether realtime update view when select.
+
+    z: 10
+};
+
+merge(AxisModel$2.prototype, axisModelCommonMixin);
+
+function getAxisType$1(axisName, option) {
+    return option.type || (option.data ? 'category' : 'value');
+}
+
+axisModelCreator('parallel', AxisModel$2, getAxisType$1, defaultOption$1);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+ComponentModel.extend({
+
+    type: 'parallel',
+
+    dependencies: ['parallelAxis'],
+
+    /**
+     * @type {module:echarts/coord/parallel/Parallel}
+     */
+    coordinateSystem: null,
+
+    /**
+     * Each item like: 'dim0', 'dim1', 'dim2', ...
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    dimensions: null,
+
+    /**
+     * Coresponding to dimensions.
+     * @type {Array.<number>}
+     * @readOnly
+     */
+    parallelAxisIndex: null,
+
+    layoutMode: 'box',
+
+    defaultOption: {
+        zlevel: 0,
+        z: 0,
+        left: 80,
+        top: 60,
+        right: 80,
+        bottom: 60,
+        // width: {totalWidth} - left - right,
+        // height: {totalHeight} - top - bottom,
+
+        layout: 'horizontal',      // 'horizontal' or 'vertical'
+
+        // FIXME
+        // naming?
+        axisExpandable: false,
+        axisExpandCenter: null,
+        axisExpandCount: 0,
+        axisExpandWidth: 50,      // FIXME '10%' ?
+        axisExpandRate: 17,
+        axisExpandDebounce: 50,
+        // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.
+        // Do not doc to user until necessary.
+        axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],
+        axisExpandTriggerOn: 'click', // 'mousemove' or 'click'
+
+        parallelAxisDefault: null
+    },
+
+    /**
+     * @override
+     */
+    init: function () {
+        ComponentModel.prototype.init.apply(this, arguments);
+
+        this.mergeOption({});
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function (newOption) {
+        var thisOption = this.option;
+
+        newOption && merge(thisOption, newOption, true);
+
+        this._initDimensions();
+    },
+
+    /**
+     * Whether series or axis is in this coordinate system.
+     * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model
+     * @param {module:echarts/model/Global} ecModel
+     */
+    contains: function (model, ecModel) {
+        var parallelIndex = model.get('parallelIndex');
+        return parallelIndex != null
+            && ecModel.getComponent('parallel', parallelIndex) === this;
+    },
+
+    setAxisExpand: function (opt) {
+        each$1(
+            ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'],
+            function (name) {
+                if (opt.hasOwnProperty(name)) {
+                    this.option[name] = opt[name];
+                }
+            },
+            this
+        );
+    },
+
+    /**
+     * @private
+     */
+    _initDimensions: function () {
+        var dimensions = this.dimensions = [];
+        var parallelAxisIndex = this.parallelAxisIndex = [];
+
+        var axisModels = filter(this.dependentModels.parallelAxis, function (axisModel) {
+            // Can not use this.contains here, because
+            // initialization has not been completed yet.
+            return (axisModel.get('parallelIndex') || 0) === this.componentIndex;
+        }, this);
+
+        each$1(axisModels, function (axisModel) {
+            dimensions.push('dim' + axisModel.get('dim'));
+            parallelAxisIndex.push(axisModel.componentIndex);
+        });
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @payload
+ * @property {string} parallelAxisId
+ * @property {Array.<Array.<number>>} intervals
+ */
+var actionInfo$1 = {
+    type: 'axisAreaSelect',
+    event: 'axisAreaSelected'
+    // update: 'updateVisual'
+};
+
+registerAction(actionInfo$1, function (payload, ecModel) {
+    ecModel.eachComponent(
+        {mainType: 'parallelAxis', query: payload},
+        function (parallelAxisModel) {
+            parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);
+        }
+    );
+});
+
+/**
+ * @payload
+ */
+registerAction('parallelAxisExpand', function (payload, ecModel) {
+    ecModel.eachComponent(
+        {mainType: 'parallel', query: payload},
+        function (parallelModel) {
+            parallelModel.setAxisExpand(payload);
+        }
+    );
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var curry$2 = curry;
+var each$12 = each$1;
+var map$2 = map;
+var mathMin$6 = Math.min;
+var mathMax$6 = Math.max;
+var mathPow$2 = Math.pow;
+
+var COVER_Z = 10000;
+var UNSELECT_THRESHOLD = 6;
+var MIN_RESIZE_LINE_WIDTH = 6;
+var MUTEX_RESOURCE_KEY = 'globalPan';
+
+var DIRECTION_MAP = {
+    w: [0, 0],
+    e: [0, 1],
+    n: [1, 0],
+    s: [1, 1]
+};
+var CURSOR_MAP = {
+    w: 'ew',
+    e: 'ew',
+    n: 'ns',
+    s: 'ns',
+    ne: 'nesw',
+    sw: 'nesw',
+    nw: 'nwse',
+    se: 'nwse'
+};
+var DEFAULT_BRUSH_OPT = {
+    brushStyle: {
+        lineWidth: 2,
+        stroke: 'rgba(0,0,0,0.3)',
+        fill: 'rgba(0,0,0,0.1)'
+    },
+    transformable: true,
+    brushMode: 'single',
+    removeOnClick: false
+};
+
+var baseUID = 0;
+
+/**
+ * @alias module:echarts/component/helper/BrushController
+ * @constructor
+ * @mixin {module:zrender/mixin/Eventful}
+ * @event module:echarts/component/helper/BrushController#brush
+ *        params:
+ *            areas: Array.<Array>, coord relates to container group,
+ *                                    If no container specified, to global.
+ *            opt {
+ *                isEnd: boolean,
+ *                removeOnClick: boolean
+ *            }
+ *
+ * @param {module:zrender/zrender~ZRender} zr
+ */
+function BrushController(zr) {
+
+    if (__DEV__) {
+        assert$1(zr);
+    }
+
+    Eventful.call(this);
+
+    /**
+     * @type {module:zrender/zrender~ZRender}
+     * @private
+     */
+    this._zr = zr;
+
+    /**
+     * @type {module:zrender/container/Group}
+     * @readOnly
+     */
+    this.group = new Group();
+
+    /**
+     * Only for drawing (after enabledBrush).
+     *     'line', 'rect', 'polygon' or false
+     *     If passing false/null/undefined, disable brush.
+     *     If passing 'auto', determined by panel.defaultBrushType
+     * @private
+     * @type {string}
+     */
+    this._brushType;
+
+    /**
+     * Only for drawing (after enabledBrush).
+     *
+     * @private
+     * @type {Object}
+     */
+    this._brushOption;
+
+    /**
+     * @private
+     * @type {Object}
+     */
+    this._panels;
+
+    /**
+     * @private
+     * @type {Array.<nubmer>}
+     */
+    this._track = [];
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._dragging;
+
+    /**
+     * @private
+     * @type {Array}
+     */
+    this._covers = [];
+
+    /**
+     * @private
+     * @type {moudule:zrender/container/Group}
+     */
+    this._creatingCover;
+
+    /**
+     * `true` means global panel
+     * @private
+     * @type {module:zrender/container/Group|boolean}
+     */
+    this._creatingPanel;
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._enableGlobalPan;
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    if (__DEV__) {
+        this._mounted;
+    }
+
+    /**
+     * @private
+     * @type {string}
+     */
+    this._uid = 'brushController_' + baseUID++;
+
+    /**
+     * @private
+     * @type {Object}
+     */
+    this._handlers = {};
+    each$12(mouseHandlers, function (handler, eventName) {
+        this._handlers[eventName] = bind(handler, this);
+    }, this);
+}
+
+BrushController.prototype = {
+
+    constructor: BrushController,
+
+    /**
+     * If set to null/undefined/false, select disabled.
+     * @param {Object} brushOption
+     * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false
+     *                          If passing false/null/undefined, disable brush.
+     *                          If passing 'auto', determined by panel.defaultBrushType.
+     *                              ('auto' can not be used in global panel)
+     * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple'
+     * @param {boolean} [brushOption.transformable=true]
+     * @param {boolean} [brushOption.removeOnClick=false]
+     * @param {Object} [brushOption.brushStyle]
+     * @param {number} [brushOption.brushStyle.width]
+     * @param {number} [brushOption.brushStyle.lineWidth]
+     * @param {string} [brushOption.brushStyle.stroke]
+     * @param {string} [brushOption.brushStyle.fill]
+     * @param {number} [brushOption.z]
+     */
+    enableBrush: function (brushOption) {
+        if (__DEV__) {
+            assert$1(this._mounted);
+        }
+
+        this._brushType && doDisableBrush(this);
+        brushOption.brushType && doEnableBrush(this, brushOption);
+
+        return this;
+    },
+
+    /**
+     * @param {Array.<Object>} panelOpts If not pass, it is global brush.
+     *        Each items: {
+     *            panelId, // mandatory.
+     *            clipPath, // mandatory. function.
+     *            isTargetByCursor, // mandatory. function.
+     *            defaultBrushType, // optional, only used when brushType is 'auto'.
+     *            getLinearBrushOtherExtent, // optional. function.
+     *        }
+     */
+    setPanels: function (panelOpts) {
+        if (panelOpts && panelOpts.length) {
+            var panels = this._panels = {};
+            each$1(panelOpts, function (panelOpts) {
+                panels[panelOpts.panelId] = clone(panelOpts);
+            });
+        }
+        else {
+            this._panels = null;
+        }
+        return this;
+    },
+
+    /**
+     * @param {Object} [opt]
+     * @return {boolean} [opt.enableGlobalPan=false]
+     */
+    mount: function (opt) {
+        opt = opt || {};
+
+        if (__DEV__) {
+            this._mounted = true; // should be at first.
+        }
+
+        this._enableGlobalPan = opt.enableGlobalPan;
+
+        var thisGroup = this.group;
+        this._zr.add(thisGroup);
+
+        thisGroup.attr({
+            position: opt.position || [0, 0],
+            rotation: opt.rotation || 0,
+            scale: opt.scale || [1, 1]
+        });
+        this._transform = thisGroup.getLocalTransform();
+
+        return this;
+    },
+
+    eachCover: function (cb, context) {
+        each$12(this._covers, cb, context);
+    },
+
+    /**
+     * Update covers.
+     * @param {Array.<Object>} brushOptionList Like:
+     *        [
+     *            {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable},
+     *            {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]},
+     *            ...
+     *        ]
+     *        `brushType` is required in each cover info. (can not be 'auto')
+     *        `id` is not mandatory.
+     *        `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default.
+     *        If brushOptionList is null/undefined, all covers removed.
+     */
+    updateCovers: function (brushOptionList) {
+        if (__DEV__) {
+            assert$1(this._mounted);
+        }
+
+        brushOptionList = map(brushOptionList, function (brushOption) {
+            return merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);
+        });
+
+        var tmpIdPrefix = '\0-brush-index-';
+        var oldCovers = this._covers;
+        var newCovers = this._covers = [];
+        var controller = this;
+        var creatingCover = this._creatingCover;
+
+        (new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey))
+            .add(addOrUpdate)
+            .update(addOrUpdate)
+            .remove(remove)
+            .execute();
+
+        return this;
+
+        function getKey(brushOption, index) {
+            return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index)
+                + '-' + brushOption.brushType;
+        }
+
+        function oldGetKey(cover, index) {
+            return getKey(cover.__brushOption, index);
+        }
+
+        function addOrUpdate(newIndex, oldIndex) {
+            var newBrushOption = brushOptionList[newIndex];
+            // Consider setOption in event listener of brushSelect,
+            // where updating cover when creating should be forbiden.
+            if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {
+                newCovers[newIndex] = oldCovers[oldIndex];
+            }
+            else {
+                var cover = newCovers[newIndex] = oldIndex != null
+                    ? (
+                        oldCovers[oldIndex].__brushOption = newBrushOption,
+                        oldCovers[oldIndex]
+                    )
+                    : endCreating(controller, createCover(controller, newBrushOption));
+                updateCoverAfterCreation(controller, cover);
+            }
+        }
+
+        function remove(oldIndex) {
+            if (oldCovers[oldIndex] !== creatingCover) {
+                controller.group.remove(oldCovers[oldIndex]);
+            }
+        }
+    },
+
+    unmount: function () {
+        if (__DEV__) {
+            if (!this._mounted) {
+                return;
+            }
+        }
+
+        this.enableBrush(false);
+
+        // container may 'removeAll' outside.
+        clearCovers(this);
+        this._zr.remove(this.group);
+
+        if (__DEV__) {
+            this._mounted = false; // should be at last.
+        }
+
+        return this;
+    },
+
+    dispose: function () {
+        this.unmount();
+        this.off();
+    }
+};
+
+mixin(BrushController, Eventful);
+
+function doEnableBrush(controller, brushOption) {
+    var zr = controller._zr;
+
+    // Consider roam, which takes globalPan too.
+    if (!controller._enableGlobalPan) {
+        take(zr, MUTEX_RESOURCE_KEY, controller._uid);
+    }
+
+    each$12(controller._handlers, function (handler, eventName) {
+        zr.on(eventName, handler);
+    });
+
+    controller._brushType = brushOption.brushType;
+    controller._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);
+}
+
+function doDisableBrush(controller) {
+    var zr = controller._zr;
+
+    release(zr, MUTEX_RESOURCE_KEY, controller._uid);
+
+    each$12(controller._handlers, function (handler, eventName) {
+        zr.off(eventName, handler);
+    });
+
+    controller._brushType = controller._brushOption = null;
+}
+
+function createCover(controller, brushOption) {
+    var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);
+    cover.__brushOption = brushOption;
+    updateZ$1(cover, brushOption);
+    controller.group.add(cover);
+    return cover;
+}
+
+function endCreating(controller, creatingCover) {
+    var coverRenderer = getCoverRenderer(creatingCover);
+    if (coverRenderer.endCreating) {
+        coverRenderer.endCreating(controller, creatingCover);
+        updateZ$1(creatingCover, creatingCover.__brushOption);
+    }
+    return creatingCover;
+}
+
+function updateCoverShape(controller, cover) {
+    var brushOption = cover.__brushOption;
+    getCoverRenderer(cover).updateCoverShape(
+        controller, cover, brushOption.range, brushOption
+    );
+}
+
+function updateZ$1(cover, brushOption) {
+    var z = brushOption.z;
+    z == null && (z = COVER_Z);
+    cover.traverse(function (el) {
+        el.z = z;
+        el.z2 = z; // Consider in given container.
+    });
+}
+
+function updateCoverAfterCreation(controller, cover) {
+    getCoverRenderer(cover).updateCommon(controller, cover);
+    updateCoverShape(controller, cover);
+}
+
+function getCoverRenderer(cover) {
+    return coverRenderers[cover.__brushOption.brushType];
+}
+
+// return target panel or `true` (means global panel)
+function getPanelByPoint(controller, e, localCursorPoint) {
+    var panels = controller._panels;
+    if (!panels) {
+        return true; // Global panel
+    }
+    var panel;
+    var transform = controller._transform;
+    each$12(panels, function (pn) {
+        pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);
+    });
+    return panel;
+}
+
+// Return a panel or true
+function getPanelByCover(controller, cover) {
+    var panels = controller._panels;
+    if (!panels) {
+        return true; // Global panel
+    }
+    var panelId = cover.__brushOption.panelId;
+    // User may give cover without coord sys info,
+    // which is then treated as global panel.
+    return panelId != null ? panels[panelId] : true;
+}
+
+function clearCovers(controller) {
+    var covers = controller._covers;
+    var originalLength = covers.length;
+    each$12(covers, function (cover) {
+        controller.group.remove(cover);
+    }, controller);
+    covers.length = 0;
+
+    return !!originalLength;
+}
+
+function trigger(controller, opt) {
+    var areas = map$2(controller._covers, function (cover) {
+        var brushOption = cover.__brushOption;
+        var range = clone(brushOption.range);
+        return {
+            brushType: brushOption.brushType,
+            panelId: brushOption.panelId,
+            range: range
+        };
+    });
+
+    controller.trigger('brush', areas, {
+        isEnd: !!opt.isEnd,
+        removeOnClick: !!opt.removeOnClick
+    });
+}
+
+function shouldShowCover(controller) {
+    var track = controller._track;
+
+    if (!track.length) {
+        return false;
+    }
+
+    var p2 = track[track.length - 1];
+    var p1 = track[0];
+    var dx = p2[0] - p1[0];
+    var dy = p2[1] - p1[1];
+    var dist = mathPow$2(dx * dx + dy * dy, 0.5);
+
+    return dist > UNSELECT_THRESHOLD;
+}
+
+function getTrackEnds(track) {
+    var tail = track.length - 1;
+    tail < 0 && (tail = 0);
+    return [track[0], track[tail]];
+}
+
+function createBaseRectCover(doDrift, controller, brushOption, edgeNames) {
+    var cover = new Group();
+
+    cover.add(new Rect({
+        name: 'main',
+        style: makeStyle(brushOption),
+        silent: true,
+        draggable: true,
+        cursor: 'move',
+        drift: curry$2(doDrift, controller, cover, 'nswe'),
+        ondragend: curry$2(trigger, controller, {isEnd: true})
+    }));
+
+    each$12(
+        edgeNames,
+        function (name) {
+            cover.add(new Rect({
+                name: name,
+                style: {opacity: 0},
+                draggable: true,
+                silent: true,
+                invisible: true,
+                drift: curry$2(doDrift, controller, cover, name),
+                ondragend: curry$2(trigger, controller, {isEnd: true})
+            }));
+        }
+    );
+
+    return cover;
+}
+
+function updateBaseRect(controller, cover, localRange, brushOption) {
+    var lineWidth = brushOption.brushStyle.lineWidth || 0;
+    var handleSize = mathMax$6(lineWidth, MIN_RESIZE_LINE_WIDTH);
+    var x = localRange[0][0];
+    var y = localRange[1][0];
+    var xa = x - lineWidth / 2;
+    var ya = y - lineWidth / 2;
+    var x2 = localRange[0][1];
+    var y2 = localRange[1][1];
+    var x2a = x2 - handleSize + lineWidth / 2;
+    var y2a = y2 - handleSize + lineWidth / 2;
+    var width = x2 - x;
+    var height = y2 - y;
+    var widtha = width + lineWidth;
+    var heighta = height + lineWidth;
+
+    updateRectShape(controller, cover, 'main', x, y, width, height);
+
+    if (brushOption.transformable) {
+        updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);
+        updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);
+        updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);
+        updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);
+
+        updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);
+        updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);
+        updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);
+        updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);
+    }
+}
+
+function updateCommon(controller, cover) {
+    var brushOption = cover.__brushOption;
+    var transformable = brushOption.transformable;
+
+    var mainEl = cover.childAt(0);
+    mainEl.useStyle(makeStyle(brushOption));
+    mainEl.attr({
+        silent: !transformable,
+        cursor: transformable ? 'move' : 'default'
+    });
+
+    each$12(
+        ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'],
+        function (name) {
+            var el = cover.childOfName(name);
+            var globalDir = getGlobalDirection(controller, name);
+
+            el && el.attr({
+                silent: !transformable,
+                invisible: !transformable,
+                cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null
+            });
+        }
+    );
+}
+
+function updateRectShape(controller, cover, name, x, y, w, h) {
+    var el = cover.childOfName(name);
+    el && el.setShape(pointsToRect(
+        clipByPanel(controller, cover, [[x, y], [x + w, y + h]])
+    ));
+}
+
+function makeStyle(brushOption) {
+    return defaults({strokeNoScale: true}, brushOption.brushStyle);
+}
+
+function formatRectRange(x, y, x2, y2) {
+    var min = [mathMin$6(x, x2), mathMin$6(y, y2)];
+    var max = [mathMax$6(x, x2), mathMax$6(y, y2)];
+
+    return [
+        [min[0], max[0]], // x range
+        [min[1], max[1]] // y range
+    ];
+}
+
+function getTransform$1(controller) {
+    return getTransform(controller.group);
+}
+
+function getGlobalDirection(controller, localDirection) {
+    if (localDirection.length > 1) {
+        localDirection = localDirection.split('');
+        var globalDir = [
+            getGlobalDirection(controller, localDirection[0]),
+            getGlobalDirection(controller, localDirection[1])
+        ];
+        (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();
+        return globalDir.join('');
+    }
+    else {
+        var map$$1 = {w: 'left', e: 'right', n: 'top', s: 'bottom'};
+        var inverseMap = {left: 'w', right: 'e', top: 'n', bottom: 's'};
+        var globalDir = transformDirection(
+            map$$1[localDirection], getTransform$1(controller)
+        );
+        return inverseMap[globalDir];
+    }
+}
+
+function driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) {
+    var brushOption = cover.__brushOption;
+    var rectRange = toRectRange(brushOption.range);
+    var localDelta = toLocalDelta(controller, dx, dy);
+
+    each$12(name.split(''), function (namePart) {
+        var ind = DIRECTION_MAP[namePart];
+        rectRange[ind[0]][ind[1]] += localDelta[ind[0]];
+    });
+
+    brushOption.range = fromRectRange(formatRectRange(
+        rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]
+    ));
+
+    updateCoverAfterCreation(controller, cover);
+    trigger(controller, {isEnd: false});
+}
+
+function driftPolygon(controller, cover, dx, dy, e) {
+    var range = cover.__brushOption.range;
+    var localDelta = toLocalDelta(controller, dx, dy);
+
+    each$12(range, function (point) {
+        point[0] += localDelta[0];
+        point[1] += localDelta[1];
+    });
+
+    updateCoverAfterCreation(controller, cover);
+    trigger(controller, {isEnd: false});
+}
+
+function toLocalDelta(controller, dx, dy) {
+    var thisGroup = controller.group;
+    var localD = thisGroup.transformCoordToLocal(dx, dy);
+    var localZero = thisGroup.transformCoordToLocal(0, 0);
+
+    return [localD[0] - localZero[0], localD[1] - localZero[1]];
+}
+
+function clipByPanel(controller, cover, data) {
+    var panel = getPanelByCover(controller, cover);
+
+    return (panel && panel !== true)
+        ? panel.clipPath(data, controller._transform)
+        : clone(data);
+}
+
+function pointsToRect(points) {
+    var xmin = mathMin$6(points[0][0], points[1][0]);
+    var ymin = mathMin$6(points[0][1], points[1][1]);
+    var xmax = mathMax$6(points[0][0], points[1][0]);
+    var ymax = mathMax$6(points[0][1], points[1][1]);
+
+    return {
+        x: xmin,
+        y: ymin,
+        width: xmax - xmin,
+        height: ymax - ymin
+    };
+}
+
+function resetCursor(controller, e, localCursorPoint) {
+    // Check active
+    if (!controller._brushType) {
+        return;
+    }
+
+    var zr = controller._zr;
+    var covers = controller._covers;
+    var currPanel = getPanelByPoint(controller, e, localCursorPoint);
+
+    // Check whether in covers.
+    if (!controller._dragging) {
+        for (var i = 0; i < covers.length; i++) {
+            var brushOption = covers[i].__brushOption;
+            if (currPanel
+                && (currPanel === true || brushOption.panelId === currPanel.panelId)
+                && coverRenderers[brushOption.brushType].contain(
+                    covers[i], localCursorPoint[0], localCursorPoint[1]
+                )
+            ) {
+                // Use cursor style set on cover.
+                return;
+            }
+        }
+    }
+
+    currPanel && zr.setCursorStyle('crosshair');
+}
+
+function preventDefault(e) {
+    var rawE = e.event;
+    rawE.preventDefault && rawE.preventDefault();
+}
+
+function mainShapeContain(cover, x, y) {
+    return cover.childOfName('main').contain(x, y);
+}
+
+function updateCoverByMouse(controller, e, localCursorPoint, isEnd) {
+    var creatingCover = controller._creatingCover;
+    var panel = controller._creatingPanel;
+    var thisBrushOption = controller._brushOption;
+    var eventParams;
+
+    controller._track.push(localCursorPoint.slice());
+
+    if (shouldShowCover(controller) || creatingCover) {
+
+        if (panel && !creatingCover) {
+            thisBrushOption.brushMode === 'single' && clearCovers(controller);
+            var brushOption = clone(thisBrushOption);
+            brushOption.brushType = determineBrushType(brushOption.brushType, panel);
+            brushOption.panelId = panel === true ? null : panel.panelId;
+            creatingCover = controller._creatingCover = createCover(controller, brushOption);
+            controller._covers.push(creatingCover);
+        }
+
+        if (creatingCover) {
+            var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];
+            var coverBrushOption = creatingCover.__brushOption;
+
+            coverBrushOption.range = coverRenderer.getCreatingRange(
+                clipByPanel(controller, creatingCover, controller._track)
+            );
+
+            if (isEnd) {
+                endCreating(controller, creatingCover);
+                coverRenderer.updateCommon(controller, creatingCover);
+            }
+
+            updateCoverShape(controller, creatingCover);
+
+            eventParams = {isEnd: isEnd};
+        }
+    }
+    else if (
+        isEnd
+        && thisBrushOption.brushMode === 'single'
+        && thisBrushOption.removeOnClick
+    ) {
+        // Help user to remove covers easily, only by a tiny drag, in 'single' mode.
+        // But a single click do not clear covers, because user may have casual
+        // clicks (for example, click on other component and do not expect covers
+        // disappear).
+        // Only some cover removed, trigger action, but not every click trigger action.
+        if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {
+            eventParams = {isEnd: isEnd, removeOnClick: true};
+        }
+    }
+
+    return eventParams;
+}
+
+function determineBrushType(brushType, panel) {
+    if (brushType === 'auto') {
+        if (__DEV__) {
+            assert$1(
+                panel && panel.defaultBrushType,
+                'MUST have defaultBrushType when brushType is "atuo"'
+            );
+        }
+        return panel.defaultBrushType;
+    }
+    return brushType;
+}
+
+var mouseHandlers = {
+
+    mousedown: function (e) {
+        if (this._dragging) {
+            // In case some browser do not support globalOut,
+            // and release mose out side the browser.
+            handleDragEnd.call(this, e);
+        }
+        else if (!e.target || !e.target.draggable) {
+
+            preventDefault(e);
+
+            var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);
+
+            this._creatingCover = null;
+            var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);
+
+            if (panel) {
+                this._dragging = true;
+                this._track = [localCursorPoint.slice()];
+            }
+        }
+    },
+
+    mousemove: function (e) {
+        var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);
+
+        resetCursor(this, e, localCursorPoint);
+
+        if (this._dragging) {
+
+            preventDefault(e);
+
+            var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);
+
+            eventParams && trigger(this, eventParams);
+        }
+    },
+
+    mouseup: handleDragEnd //,
+
+    // FIXME
+    // in tooltip, globalout should not be triggered.
+    // globalout: handleDragEnd
+};
+
+function handleDragEnd(e) {
+    if (this._dragging) {
+
+        preventDefault(e);
+
+        var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);
+        var eventParams = updateCoverByMouse(this, e, localCursorPoint, true);
+
+        this._dragging = false;
+        this._track = [];
+        this._creatingCover = null;
+
+        // trigger event shoule be at final, after procedure will be nested.
+        eventParams && trigger(this, eventParams);
+    }
+}
+
+/**
+ * key: brushType
+ * @type {Object}
+ */
+var coverRenderers = {
+
+    lineX: getLineRenderer(0),
+
+    lineY: getLineRenderer(1),
+
+    rect: {
+        createCover: function (controller, brushOption) {
+            return createBaseRectCover(
+                curry$2(
+                    driftRect,
+                    function (range) {
+                        return range;
+                    },
+                    function (range) {
+                        return range;
+                    }
+                ),
+                controller,
+                brushOption,
+                ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw']
+            );
+        },
+        getCreatingRange: function (localTrack) {
+            var ends = getTrackEnds(localTrack);
+            return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);
+        },
+        updateCoverShape: function (controller, cover, localRange, brushOption) {
+            updateBaseRect(controller, cover, localRange, brushOption);
+        },
+        updateCommon: updateCommon,
+        contain: mainShapeContain
+    },
+
+    polygon: {
+        createCover: function (controller, brushOption) {
+            var cover = new Group();
+
+            // Do not use graphic.Polygon because graphic.Polyline do not close the
+            // border of the shape when drawing, which is a better experience for user.
+            cover.add(new Polyline({
+                name: 'main',
+                style: makeStyle(brushOption),
+                silent: true
+            }));
+
+            return cover;
+        },
+        getCreatingRange: function (localTrack) {
+            return localTrack;
+        },
+        endCreating: function (controller, cover) {
+            cover.remove(cover.childAt(0));
+            // Use graphic.Polygon close the shape.
+            cover.add(new Polygon({
+                name: 'main',
+                draggable: true,
+                drift: curry$2(driftPolygon, controller, cover),
+                ondragend: curry$2(trigger, controller, {isEnd: true})
+            }));
+        },
+        updateCoverShape: function (controller, cover, localRange, brushOption) {
+            cover.childAt(0).setShape({
+                points: clipByPanel(controller, cover, localRange)
+            });
+        },
+        updateCommon: updateCommon,
+        contain: mainShapeContain
+    }
+};
+
+function getLineRenderer(xyIndex) {
+    return {
+        createCover: function (controller, brushOption) {
+            return createBaseRectCover(
+                curry$2(
+                    driftRect,
+                    function (range) {
+                        var rectRange = [range, [0, 100]];
+                        xyIndex && rectRange.reverse();
+                        return rectRange;
+                    },
+                    function (rectRange) {
+                        return rectRange[xyIndex];
+                    }
+                ),
+                controller,
+                brushOption,
+                [['w', 'e'], ['n', 's']][xyIndex]
+            );
+        },
+        getCreatingRange: function (localTrack) {
+            var ends = getTrackEnds(localTrack);
+            var min = mathMin$6(ends[0][xyIndex], ends[1][xyIndex]);
+            var max = mathMax$6(ends[0][xyIndex], ends[1][xyIndex]);
+
+            return [min, max];
+        },
+        updateCoverShape: function (controller, cover, localRange, brushOption) {
+            var otherExtent;
+            // If brushWidth not specified, fit the panel.
+            var panel = getPanelByCover(controller, cover);
+            if (panel !== true && panel.getLinearBrushOtherExtent) {
+                otherExtent = panel.getLinearBrushOtherExtent(
+                    xyIndex, controller._transform
+                );
+            }
+            else {
+                var zr = controller._zr;
+                otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];
+            }
+            var rectRange = [localRange, otherExtent];
+            xyIndex && rectRange.reverse();
+
+            updateBaseRect(controller, cover, rectRange, brushOption);
+        },
+        updateCommon: updateCommon,
+        contain: mainShapeContain
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function makeRectPanelClipPath(rect) {
+    rect = normalizeRect(rect);
+    return function (localPoints, transform) {
+        return clipPointsByRect(localPoints, rect);
+    };
+}
+
+function makeLinearBrushOtherExtent(rect, specifiedXYIndex) {
+    rect = normalizeRect(rect);
+    return function (xyIndex) {
+        var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;
+        var brushWidth = idx ? rect.width : rect.height;
+        var base = idx ? rect.x : rect.y;
+        return [base, base + (brushWidth || 0)];
+    };
+}
+
+function makeRectIsTargetByCursor(rect, api, targetModel) {
+    rect = normalizeRect(rect);
+    return function (e, localCursorPoint, transform) {
+        return rect.contain(localCursorPoint[0], localCursorPoint[1])
+            && !onIrrelevantElement(e, api, targetModel);
+    };
+}
+
+// Consider width/height is negative.
+function normalizeRect(rect) {
+    return BoundingRect.create(rect);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var elementList = ['axisLine', 'axisTickLabel', 'axisName'];
+
+var AxisView$2 = extendComponentView({
+
+    type: 'parallelAxis',
+
+    /**
+     * @override
+     */
+    init: function (ecModel, api) {
+        AxisView$2.superApply(this, 'init', arguments);
+
+        /**
+         * @type {module:echarts/component/helper/BrushController}
+         */
+        (this._brushController = new BrushController(api.getZr()))
+            .on('brush', bind(this._onBrush, this));
+    },
+
+    /**
+     * @override
+     */
+    render: function (axisModel, ecModel, api, payload) {
+        if (fromAxisAreaSelect(axisModel, ecModel, payload)) {
+            return;
+        }
+
+        this.axisModel = axisModel;
+        this.api = api;
+
+        this.group.removeAll();
+
+        var oldAxisGroup = this._axisGroup;
+        this._axisGroup = new Group();
+        this.group.add(this._axisGroup);
+
+        if (!axisModel.get('show')) {
+            return;
+        }
+
+        var coordSysModel = getCoordSysModel(axisModel, ecModel);
+        var coordSys = coordSysModel.coordinateSystem;
+
+        var areaSelectStyle = axisModel.getAreaSelectStyle();
+        var areaWidth = areaSelectStyle.width;
+
+        var dim = axisModel.axis.dim;
+        var axisLayout = coordSys.getAxisLayout(dim);
+
+        var builderOpt = extend(
+            {strokeContainThreshold: areaWidth},
+            axisLayout
+        );
+
+        var axisBuilder = new AxisBuilder(axisModel, builderOpt);
+
+        each$1(elementList, axisBuilder.add, axisBuilder);
+
+        this._axisGroup.add(axisBuilder.getGroup());
+
+        this._refreshBrushController(
+            builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api
+        );
+
+        var animationModel = (payload && payload.animation === false) ? null : axisModel;
+        groupTransition(oldAxisGroup, this._axisGroup, animationModel);
+    },
+
+    // /**
+    //  * @override
+    //  */
+    // updateVisual: function (axisModel, ecModel, api, payload) {
+    //     this._brushController && this._brushController
+    //         .updateCovers(getCoverInfoList(axisModel));
+    // },
+
+    _refreshBrushController: function (
+        builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api
+    ) {
+        // After filtering, axis may change, select area needs to be update.
+        var extent = axisModel.axis.getExtent();
+        var extentLen = extent[1] - extent[0];
+        var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value.
+
+        // width/height might be negative, which will be
+        // normalized in BoundingRect.
+        var rect = BoundingRect.create({
+            x: extent[0],
+            y: -areaWidth / 2,
+            width: extentLen,
+            height: areaWidth
+        });
+        rect.x -= extra;
+        rect.width += 2 * extra;
+
+        this._brushController
+            .mount({
+                enableGlobalPan: true,
+                rotation: builderOpt.rotation,
+                position: builderOpt.position
+            })
+            .setPanels([{
+                panelId: 'pl',
+                clipPath: makeRectPanelClipPath(rect),
+                isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel),
+                getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0)
+            }])
+            .enableBrush({
+                brushType: 'lineX',
+                brushStyle: areaSelectStyle,
+                removeOnClick: true
+            })
+            .updateCovers(getCoverInfoList(axisModel));
+    },
+
+    _onBrush: function (coverInfoList, opt) {
+        // Do not cache these object, because the mey be changed.
+        var axisModel = this.axisModel;
+        var axis = axisModel.axis;
+        var intervals = map(coverInfoList, function (coverInfo) {
+            return [
+                axis.coordToData(coverInfo.range[0], true),
+                axis.coordToData(coverInfo.range[1], true)
+            ];
+        });
+
+        // If realtime is true, action is not dispatched on drag end, because
+        // the drag end emits the same params with the last drag move event,
+        // and may have some delay when using touch pad.
+        if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) { // jshint ignore:line
+            this.api.dispatchAction({
+                type: 'axisAreaSelect',
+                parallelAxisId: axisModel.id,
+                intervals: intervals
+            });
+        }
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        this._brushController.dispose();
+    }
+});
+
+function fromAxisAreaSelect(axisModel, ecModel, payload) {
+    return payload
+        && payload.type === 'axisAreaSelect'
+        && ecModel.findComponents(
+            {mainType: 'parallelAxis', query: payload}
+        )[0] === axisModel;
+}
+
+function getCoverInfoList(axisModel) {
+    var axis = axisModel.axis;
+    return map(axisModel.activeIntervals, function (interval) {
+        return {
+            brushType: 'lineX',
+            panelId: 'pl',
+            range: [
+                axis.dataToCoord(interval[0], true),
+                axis.dataToCoord(interval[1], true)
+            ]
+        };
+    });
+}
+
+function getCoordSysModel(axisModel, ecModel) {
+    return ecModel.getComponent(
+        'parallel', axisModel.get('parallelIndex')
+    );
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var CLICK_THRESHOLD = 5; // > 4
+
+// Parallel view
+extendComponentView({
+    type: 'parallel',
+
+    render: function (parallelModel, ecModel, api) {
+        this._model = parallelModel;
+        this._api = api;
+
+        if (!this._handlers) {
+            this._handlers = {};
+            each$1(handlers, function (handler, eventName) {
+                api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this));
+            }, this);
+        }
+
+        createOrUpdate(
+            this,
+            '_throttledDispatchExpand',
+            parallelModel.get('axisExpandRate'),
+            'fixRate'
+        );
+    },
+
+    dispose: function (ecModel, api) {
+        each$1(this._handlers, function (handler, eventName) {
+            api.getZr().off(eventName, handler);
+        });
+        this._handlers = null;
+    },
+
+    /**
+     * @param {Object} [opt] If null, cancle the last action triggering for debounce.
+     */
+    _throttledDispatchExpand: function (opt) {
+        this._dispatchExpand(opt);
+    },
+
+    _dispatchExpand: function (opt) {
+        opt && this._api.dispatchAction(
+            extend({type: 'parallelAxisExpand'}, opt)
+        );
+    }
+
+});
+
+var handlers = {
+
+    mousedown: function (e) {
+        if (checkTrigger(this, 'click')) {
+            this._mouseDownPoint = [e.offsetX, e.offsetY];
+        }
+    },
+
+    mouseup: function (e) {
+        var mouseDownPoint = this._mouseDownPoint;
+
+        if (checkTrigger(this, 'click') && mouseDownPoint) {
+            var point = [e.offsetX, e.offsetY];
+            var dist = Math.pow(mouseDownPoint[0] - point[0], 2)
+                + Math.pow(mouseDownPoint[1] - point[1], 2);
+
+            if (dist > CLICK_THRESHOLD) {
+                return;
+            }
+
+            var result = this._model.coordinateSystem.getSlidedAxisExpandWindow(
+                [e.offsetX, e.offsetY]
+            );
+
+            result.behavior !== 'none' && this._dispatchExpand({
+                axisExpandWindow: result.axisExpandWindow
+            });
+        }
+
+        this._mouseDownPoint = null;
+    },
+
+    mousemove: function (e) {
+        // Should do nothing when brushing.
+        if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {
+            return;
+        }
+        var model = this._model;
+        var result = model.coordinateSystem.getSlidedAxisExpandWindow(
+            [e.offsetX, e.offsetY]
+        );
+
+        var behavior = result.behavior;
+        behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));
+        this._throttledDispatchExpand(
+            behavior === 'none'
+                ? null // Cancle the last trigger, in case that mouse slide out of the area quickly.
+                : {
+                    axisExpandWindow: result.axisExpandWindow,
+                    // Jumping uses animation, and sliding suppresses animation.
+                    animation: behavior === 'jump'  ? null : false
+                }
+        );
+    }
+};
+
+function checkTrigger(view, triggerOn) {
+    var model = view._model;
+    return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;
+}
+
+registerPreprocessor(parallelPreprocessor);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.parallel',
+
+    dependencies: ['parallel'],
+
+    visualColorAccessPath: 'lineStyle.color',
+
+    getInitialData: function (option, ecModel) {
+        var source = this.getSource();
+
+        setEncodeAndDimensions(source, this);
+
+        return createListFromArray(source, this);
+    },
+
+    /**
+     * User can get data raw indices on 'axisAreaSelected' event received.
+     *
+     * @public
+     * @param {string} activeState 'active' or 'inactive' or 'normal'
+     * @return {Array.<number>} Raw indices
+     */
+    getRawIndicesByActiveState: function (activeState) {
+        var coordSys = this.coordinateSystem;
+        var data = this.getData();
+        var indices = [];
+
+        coordSys.eachActiveState(data, function (theActiveState, dataIndex) {
+            if (activeState === theActiveState) {
+                indices.push(data.getRawIndex(dataIndex));
+            }
+        });
+
+        return indices;
+    },
+
+    defaultOption: {
+        zlevel: 0,                  // 一级层叠
+        z: 2,                       // 二级层叠
+
+        coordinateSystem: 'parallel',
+        parallelIndex: 0,
+
+        label: {
+            show: false
+        },
+
+        inactiveOpacity: 0.05,
+        activeOpacity: 1,
+
+        lineStyle: {
+            width: 1,
+            opacity: 0.45,
+            type: 'solid'
+        },
+        emphasis: {
+            label: {
+                show: false
+            }
+        },
+
+        progressive: 500,
+        smooth: false, // true | false | number
+
+        animationEasing: 'linear'
+    }
+});
+
+function setEncodeAndDimensions(source, seriesModel) {
+    // The mapping of parallelAxis dimension to data dimension can
+    // be specified in parallelAxis.option.dim. For example, if
+    // parallelAxis.option.dim is 'dim3', it mapping to the third
+    // dimension of data. But `data.encode` has higher priority.
+    // Moreover, parallelModel.dimension should not be regarded as data
+    // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6'];
+
+    if (source.encodeDefine) {
+        return;
+    }
+
+    var parallelModel = seriesModel.ecModel.getComponent(
+        'parallel', seriesModel.get('parallelIndex')
+    );
+    if (!parallelModel) {
+        return;
+    }
+
+    var encodeDefine = source.encodeDefine = createHashMap();
+    each$1(parallelModel.dimensions, function (axisDim) {
+        var dataDimIndex = convertDimNameToNumber(axisDim);
+        encodeDefine.set(axisDim, dataDimIndex);
+    });
+}
+
+function convertDimNameToNumber(dimName) {
+    return +dimName.replace('dim', '');
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var DEFAULT_SMOOTH = 0.3;
+
+var ParallelView = Chart.extend({
+
+    type: 'parallel',
+
+    init: function () {
+
+        /**
+         * @type {module:zrender/container/Group}
+         * @private
+         */
+        this._dataGroup = new Group();
+
+        this.group.add(this._dataGroup);
+
+        /**
+         * @type {module:echarts/data/List}
+         */
+        this._data;
+
+        /**
+         * @type {boolean}
+         */
+        this._initialized;
+    },
+
+    /**
+     * @override
+     */
+    render: function (seriesModel, ecModel, api, payload) {
+        var dataGroup = this._dataGroup;
+        var data = seriesModel.getData();
+        var oldData = this._data;
+        var coordSys = seriesModel.coordinateSystem;
+        var dimensions = coordSys.dimensions;
+        var seriesScope = makeSeriesScope$2(seriesModel);
+
+        data.diff(oldData)
+            .add(add)
+            .update(update)
+            .remove(remove)
+            .execute();
+
+        function add(newDataIndex) {
+            var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);
+            updateElCommon(line, data, newDataIndex, seriesScope);
+        }
+
+        function update(newDataIndex, oldDataIndex) {
+            var line = oldData.getItemGraphicEl(oldDataIndex);
+            var points = createLinePoints(data, newDataIndex, dimensions, coordSys);
+            data.setItemGraphicEl(newDataIndex, line);
+            var animationModel = (payload && payload.animation === false) ? null : seriesModel;
+            updateProps(line, {shape: {points: points}}, animationModel, newDataIndex);
+
+            updateElCommon(line, data, newDataIndex, seriesScope);
+        }
+
+        function remove(oldDataIndex) {
+            var line = oldData.getItemGraphicEl(oldDataIndex);
+            dataGroup.remove(line);
+        }
+
+        // First create
+        if (!this._initialized) {
+            this._initialized = true;
+            var clipPath = createGridClipShape$1(
+                coordSys, seriesModel, function () {
+                    // Callback will be invoked immediately if there is no animation
+                    setTimeout(function () {
+                        dataGroup.removeClipPath();
+                    });
+                }
+            );
+            dataGroup.setClipPath(clipPath);
+        }
+
+        this._data = data;
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        this._initialized = true;
+        this._data = null;
+        this._dataGroup.removeAll();
+    },
+
+    incrementalRender: function (taskParams, seriesModel, ecModel) {
+        var data = seriesModel.getData();
+        var coordSys = seriesModel.coordinateSystem;
+        var dimensions = coordSys.dimensions;
+        var seriesScope = makeSeriesScope$2(seriesModel);
+
+        for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {
+            var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);
+            line.incremental = true;
+            updateElCommon(line, data, dataIndex, seriesScope);
+        }
+    },
+
+    dispose: function () {},
+
+    // _renderForProgressive: function (seriesModel) {
+    //     var dataGroup = this._dataGroup;
+    //     var data = seriesModel.getData();
+    //     var oldData = this._data;
+    //     var coordSys = seriesModel.coordinateSystem;
+    //     var dimensions = coordSys.dimensions;
+    //     var option = seriesModel.option;
+    //     var progressive = option.progressive;
+    //     var smooth = option.smooth ? SMOOTH : null;
+
+    //     // In progressive animation is disabled, so use simple data diff,
+    //     // which effects performance less.
+    //     // (Typically performance for data with length 7000+ like:
+    //     // simpleDiff: 60ms, addEl: 184ms,
+    //     // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit))
+    //     if (simpleDiff(oldData, data, dimensions)) {
+    //         dataGroup.removeAll();
+    //         data.each(function (dataIndex) {
+    //             addEl(data, dataGroup, dataIndex, dimensions, coordSys);
+    //         });
+    //     }
+
+    //     updateElCommon(data, progressive, smooth);
+
+    //     // Consider switch between progressive and not.
+    //     data.__plProgressive = true;
+    //     this._data = data;
+    // },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        this._dataGroup && this._dataGroup.removeAll();
+        this._data = null;
+    }
+});
+
+function createGridClipShape$1(coordSys, seriesModel, cb) {
+    var parallelModel = coordSys.model;
+    var rect = coordSys.getRect();
+    var rectEl = new Rect({
+        shape: {
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        }
+    });
+
+    var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';
+    rectEl.setShape(dim, 0);
+    initProps(rectEl, {
+        shape: {
+            width: rect.width,
+            height: rect.height
+        }
+    }, seriesModel, cb);
+    return rectEl;
+}
+
+function createLinePoints(data, dataIndex, dimensions, coordSys) {
+    var points = [];
+    for (var i = 0; i < dimensions.length; i++) {
+        var dimName = dimensions[i];
+        var value = data.get(data.mapDimension(dimName), dataIndex);
+        if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {
+            points.push(coordSys.dataToPoint(value, dimName));
+        }
+    }
+    return points;
+}
+
+function addEl(data, dataGroup, dataIndex, dimensions, coordSys) {
+    var points = createLinePoints(data, dataIndex, dimensions, coordSys);
+    var line = new Polyline({
+        shape: {points: points},
+        silent: true,
+        z2: 10
+    });
+    dataGroup.add(line);
+    data.setItemGraphicEl(dataIndex, line);
+    return line;
+}
+
+function makeSeriesScope$2(seriesModel) {
+    var smooth = seriesModel.get('smooth', true);
+    smooth === true && (smooth = DEFAULT_SMOOTH);
+    return {
+        lineStyle: seriesModel.getModel('lineStyle').getLineStyle(),
+        smooth: smooth != null ? smooth : DEFAULT_SMOOTH
+    };
+}
+
+function updateElCommon(el, data, dataIndex, seriesScope) {
+    var lineStyle = seriesScope.lineStyle;
+
+    if (data.hasItemOption) {
+        var lineStyleModel = data.getItemModel(dataIndex).getModel('lineStyle');
+        lineStyle = lineStyleModel.getLineStyle();
+    }
+
+    el.useStyle(lineStyle);
+
+    var elStyle = el.style;
+    elStyle.fill = null;
+    // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.
+    elStyle.stroke = data.getItemVisual(dataIndex, 'color');
+    // lineStyle.opacity have been set to itemVisual in parallelVisual.
+    elStyle.opacity = data.getItemVisual(dataIndex, 'opacity');
+
+    seriesScope.smooth && (el.shape.smooth = seriesScope.smooth);
+}
+
+// function simpleDiff(oldData, newData, dimensions) {
+//     var oldLen;
+//     if (!oldData
+//         || !oldData.__plProgressive
+//         || (oldLen = oldData.count()) !== newData.count()
+//     ) {
+//         return true;
+//     }
+
+//     var dimLen = dimensions.length;
+//     for (var i = 0; i < oldLen; i++) {
+//         for (var j = 0; j < dimLen; j++) {
+//             if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {
+//                 return true;
+//             }
+//         }
+//     }
+
+//     return false;
+// }
+
+// FIXME
+// 公用方法?
+function isEmptyValue(val, axisType) {
+    return axisType === 'category'
+        ? val == null
+        : (val == null || isNaN(val)); // axisType === 'value'
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var opacityAccessPath$1 = ['lineStyle', 'normal', 'opacity'];
+
+var parallelVisual = {
+
+    seriesType: 'parallel',
+
+    reset: function (seriesModel, ecModel, api) {
+
+        var itemStyleModel = seriesModel.getModel('itemStyle');
+        var lineStyleModel = seriesModel.getModel('lineStyle');
+        var globalColors = ecModel.get('color');
+
+        var color = lineStyleModel.get('color')
+            || itemStyleModel.get('color')
+            || globalColors[seriesModel.seriesIndex % globalColors.length];
+        var inactiveOpacity = seriesModel.get('inactiveOpacity');
+        var activeOpacity = seriesModel.get('activeOpacity');
+        var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();
+
+        var coordSys = seriesModel.coordinateSystem;
+        var data = seriesModel.getData();
+
+        var opacityMap = {
+            normal: lineStyle.opacity,
+            active: activeOpacity,
+            inactive: inactiveOpacity
+        };
+
+        data.setVisual('color', color);
+
+        function progress(params, data) {
+            coordSys.eachActiveState(data, function (activeState, dataIndex) {
+                var opacity = opacityMap[activeState];
+                if (activeState === 'normal' && data.hasItemOption) {
+                    var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath$1, true);
+                    itemOpacity != null && (opacity = itemOpacity);
+                }
+                data.setItemVisual(dataIndex, 'opacity', opacity);
+            }, params.start, params.end);
+        }
+
+        return {progress: progress};
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(parallelVisual);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Get initial data and define sankey view's series model
+ * @author Deqing Li(annong035@gmail.com)
+ */
+
+var SankeySeries = SeriesModel.extend({
+
+    type: 'series.sankey',
+
+    layoutInfo: null,
+
+    /**
+     * Init a graph data structure from data in option series
+     *
+     * @param  {Object} option  the object used to config echarts view
+     * @return {module:echarts/data/List} storage initial data
+     */
+    getInitialData: function (option) {
+        var links = option.edges || option.links;
+        var nodes = option.data || option.nodes;
+        if (nodes && links) {
+            var graph = createGraphFromNodeEdge(nodes, links, this, true);
+            return graph.data;
+        }
+    },
+
+    setNodePosition: function (dataIndex, localPosition) {
+        var dataItem = this.option.data[dataIndex];
+        dataItem.localX = localPosition[0];
+        dataItem.localY = localPosition[1];
+    },
+
+    /**
+     * Return the graphic data structure
+     *
+     * @return {module:echarts/data/Graph} graphic data structure
+     */
+    getGraph: function () {
+        return this.getData().graph;
+    },
+
+    /**
+     * Get edge data of graphic data structure
+     *
+     * @return {module:echarts/data/List} data structure of list
+     */
+    getEdgeData: function () {
+        return this.getGraph().edgeData;
+    },
+
+    /**
+     * @override
+     */
+    formatTooltip: function (dataIndex, multipleSeries, dataType) {
+        // dataType === 'node' or empty do not show tooltip by default
+        if (dataType === 'edge') {
+            var params = this.getDataParams(dataIndex, dataType);
+            var rawDataOpt = params.data;
+            var html = rawDataOpt.source + ' -- ' + rawDataOpt.target;
+            if (params.value) {
+                html += ' : ' + params.value;
+            }
+            return encodeHTML(html);
+        }
+
+        return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+
+        coordinateSystem: 'view',
+
+        layout: null,
+
+        // the position of the whole view
+        left: '5%',
+        top: '5%',
+        right: '20%',
+        bottom: '5%',
+
+        // the dx of the node
+        nodeWidth: 20,
+
+        // the vertical distance between two nodes
+        nodeGap: 8,
+
+        // control if the node can move or not
+        draggable: true,
+
+        // the number of iterations to change the position of the node
+        layoutIterations: 32,
+
+        label: {
+            show: true,
+            position: 'right',
+            color: '#000',
+            fontSize: 12
+        },
+
+        itemStyle: {
+            borderWidth: 1,
+            borderColor: '#333'
+        },
+
+        lineStyle: {
+            color: '#314656',
+            opacity: 0.2,
+            curveness: 0.5
+        },
+
+        emphasis: {
+            label: {
+                show: true
+            },
+            lineStyle: {
+                opacity: 0.6
+            }
+        },
+
+        animationEasing: 'linear',
+
+        animationDuration: 1000
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file  The file used to draw sankey view
+ * @author  Deqing Li(annong035@gmail.com)
+ */
+
+var SankeyShape = extendShape({
+    shape: {
+        x1: 0, y1: 0,
+        x2: 0, y2: 0,
+        cpx1: 0, cpy1: 0,
+        cpx2: 0, cpy2: 0,
+
+        extent: 0
+    },
+
+    buildPath: function (ctx, shape) {
+        var halfExtent = shape.extent / 2;
+        ctx.moveTo(shape.x1, shape.y1 - halfExtent);
+        ctx.bezierCurveTo(
+            shape.cpx1, shape.cpy1 - halfExtent,
+            shape.cpx2, shape.cpy2 - halfExtent,
+            shape.x2, shape.y2 - halfExtent
+        );
+        ctx.lineTo(shape.x2, shape.y2 + halfExtent);
+        ctx.bezierCurveTo(
+            shape.cpx2, shape.cpy2 + halfExtent,
+            shape.cpx1, shape.cpy1 + halfExtent,
+            shape.x1, shape.y1 + halfExtent
+        );
+        ctx.closePath();
+    }
+});
+
+extendChartView({
+
+    type: 'sankey',
+
+    /**
+     * @private
+     * @type {module:echarts/chart/sankey/SankeySeries}
+     */
+    _model: null,
+
+    render: function (seriesModel, ecModel, api) {
+        var graph = seriesModel.getGraph();
+        var group = this.group;
+        var layoutInfo = seriesModel.layoutInfo;
+        // view width
+        var width = layoutInfo.width;
+        // view height
+        var height = layoutInfo.height;
+        
+        var nodeData = seriesModel.getData();
+        var edgeData = seriesModel.getData('edge');
+
+        this._model = seriesModel;
+
+        group.removeAll();
+
+        group.attr('position', [layoutInfo.x, layoutInfo.y]);
+
+        // generate a bezire Curve for each edge
+        graph.eachEdge(function (edge) {
+            var curve = new SankeyShape();
+            curve.dataIndex = edge.dataIndex;
+            curve.seriesIndex = seriesModel.seriesIndex;
+            curve.dataType = 'edge';
+            var lineStyleModel = edge.getModel('lineStyle');
+            var curvature = lineStyleModel.get('curveness');
+            var n1Layout = edge.node1.getLayout();
+            var node1Model =edge.node1.getModel();
+            var dragX1 = node1Model.get('localX');
+            var dragY1 = node1Model.get('localY');
+            var n2Layout = edge.node2.getLayout();
+            var node2Model = edge.node2.getModel();
+            var dragX2 = node2Model.get('localX');
+            var dragY2 = node2Model.get('localY');
+            var edgeLayout = edge.getLayout();
+
+            curve.shape.extent = Math.max(1, edgeLayout.dy);
+
+            var x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx;
+            var y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy + edgeLayout.dy / 2;
+            var x2 = dragX2 != null ? dragX2 * width : n2Layout.x;
+            var y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty + edgeLayout.dy / 2;
+            var cpx1 = x1 * (1 - curvature) + x2 * curvature;
+            var cpy1 = y1;
+            var cpx2 = x1 * curvature + x2 * (1 - curvature);
+            var cpy2 = y2;
+
+            curve.setShape({
+                x1: x1,
+                y1: y1,
+                x2: x2,
+                y2: y2,
+                cpx1: cpx1,
+                cpy1: cpy1,
+                cpx2: cpx2,
+                cpy2: cpy2
+            });
+
+            curve.setStyle(lineStyleModel.getItemStyle());
+            // Special color, use source node color or target node color
+            switch (curve.style.fill) {
+                case 'source':
+                    curve.style.fill = edge.node1.getVisual('color');
+                    break;
+                case 'target':
+                    curve.style.fill = edge.node2.getVisual('color');
+                    break;
+            }
+
+            setHoverStyle(curve, edge.getModel('emphasis.lineStyle').getItemStyle());
+
+            group.add(curve);
+
+            edgeData.setItemGraphicEl(edge.dataIndex, curve);
+        });
+
+        // generate a rect for each node
+        graph.eachNode(function (node) {
+            var layout = node.getLayout();
+            var itemModel = node.getModel();
+            var dragX = itemModel.get('localX');
+            var dragY = itemModel.get('localY');
+            var labelModel = itemModel.getModel('label');
+            var labelHoverModel = itemModel.getModel('emphasis.label');
+
+            var rect = new Rect({
+                shape: {
+                    x: dragX != null ? dragX * width : layout.x,
+                    y: dragY != null ? dragY * height : layout.y,
+                    width: layout.dx,
+                    height: layout.dy
+                },
+                style: itemModel.getModel('itemStyle').getItemStyle()
+            });
+
+            var hoverStyle = node.getModel('emphasis.itemStyle').getItemStyle();
+
+            setLabelStyle(
+                rect.style, hoverStyle, labelModel, labelHoverModel,
+                {
+                    labelFetcher: seriesModel,
+                    labelDataIndex: node.dataIndex,
+                    defaultText: node.id,
+                    isRectText: true
+                }
+            );
+
+            rect.setStyle('fill', node.getVisual('color'));
+
+            setHoverStyle(rect, hoverStyle);
+
+            group.add(rect);
+
+            nodeData.setItemGraphicEl(node.dataIndex, rect);
+
+            rect.dataType = 'node';
+        });
+
+        var draggable = seriesModel.get('draggable');
+        if (draggable) {
+            nodeData.eachItemGraphicEl(function (el, dataIndex) {
+                el.drift = function (dx, dy) {
+                    this.shape.x += dx;
+                    this.shape.y += dy;
+                    this.dirty();
+                    api.dispatchAction({
+                        type: 'dragNode',
+                        seriesId: seriesModel.id,
+                        dataIndex: nodeData.getRawIndex(dataIndex),
+                        localX: this.shape.x / width,
+                        localY: this.shape.y / height
+                    });
+                };
+        
+                el.draggable = true;
+                el.cursor = 'move';
+            });
+        }
+        
+        if (!this._data && seriesModel.get('animation')) {
+            group.setClipPath(createGridClipShape$2(group.getBoundingRect(), seriesModel, function () {
+                group.removeClipPath();
+            }));
+        }
+
+        this._data = seriesModel.getData();
+    },
+
+    dispose: function () {}
+});
+
+// add animation to the view
+function createGridClipShape$2(rect, seriesModel, cb) {
+    var rectEl = new Rect({
+        shape: {
+            x: rect.x - 10,
+            y: rect.y - 10,
+            width: 0,
+            height: rect.height + 20
+        }
+    });
+    initProps(rectEl, {
+        shape: {
+            width: rect.width + 20,
+            height: rect.height + 20
+        }
+    }, seriesModel, cb);
+
+    return rectEl;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerAction({
+    type: 'dragNode',
+    event: 'dragNode',
+    // here can only use 'update' now, other value is not support in echarts.
+    update: 'update'
+}, function (payload, ecModel) {
+    ecModel.eachComponent({mainType: 'series', subType: 'sankey', query: payload}, function (seriesModel) {
+        seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]);
+    });
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* The implementation references to d3.js. The use of the source
+* code of this file is also subject to the terms and consitions
+* of its license (BSD-3Clause, see <echarts/src/licenses/LICENSE-d3>).
+*/
+
+
+/**
+ * nest helper used to group by the array.
+ * can specified the keys and sort the keys.
+ */
+function nest() {
+
+    var keysFunction = [];
+    var sortKeysFunction = [];
+
+    /**
+     * map an Array into the mapObject.
+     * @param {Array} array
+     * @param {number} depth
+     */
+    function map$$1(array, depth) {
+        if (depth >= keysFunction.length) {
+            return array;
+        }
+        var i = -1;
+        var n = array.length;
+        var keyFunction = keysFunction[depth++];
+        var mapObject = {};
+        var valuesByKey = {};
+
+        while (++i < n) {
+            var keyValue = keyFunction(array[i]);
+            var values = valuesByKey[keyValue];
+
+            if (values) {
+                values.push(array[i]);
+            }
+            else {
+                valuesByKey[keyValue] = [array[i]];
+            }
+        }
+
+        each$1(valuesByKey, function (value, key) {
+            mapObject[key] = map$$1(value, depth);
+        });
+
+        return mapObject;
+    }
+
+    /**
+     * transform the Map Object to multidimensional Array
+     * @param {Object} map
+     * @param {number} depth
+     */
+    function entriesMap(mapObject, depth) {
+        if (depth >= keysFunction.length) {
+            return mapObject;
+        }
+        var array = [];
+        var sortKeyFunction = sortKeysFunction[depth++];
+
+        each$1(mapObject, function (value, key) {
+            array.push({
+                key: key, values: entriesMap(value, depth)
+            });
+        });
+
+        if (sortKeyFunction) {
+            return array.sort(function (a, b) {
+                return sortKeyFunction(a.key, b.key);
+            });
+        }
+        else {
+            return array;
+        }
+    }
+
+    return {
+        /**
+         * specified the key to groupby the arrays.
+         * users can specified one more keys.
+         * @param {Function} d
+         */
+        key: function (d) {
+            keysFunction.push(d);
+            return this;
+        },
+
+        /**
+         * specified the comparator to sort the keys
+         * @param {Function} order
+         */
+        sortKeys: function (order) {
+            sortKeysFunction[keysFunction.length - 1] = order;
+            return this;
+        },
+
+        /**
+         * the array to be grouped by.
+         * @param {Array} array
+         */
+        entries: function (array) {
+            return entriesMap(map$$1(array, 0), 0);
+        }
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file The layout algorithm of sankey view
+ * @author Deqing Li(annong035@gmail.com)
+ */
+
+var sankeyLayout = function (ecModel, api, payload) {
+
+    ecModel.eachSeriesByType('sankey', function (seriesModel) {
+
+        var nodeWidth = seriesModel.get('nodeWidth');
+        var nodeGap = seriesModel.get('nodeGap');
+
+        var layoutInfo = getViewRect$3(seriesModel, api);
+
+        seriesModel.layoutInfo = layoutInfo;
+
+        var width = layoutInfo.width;
+        var height = layoutInfo.height;
+
+        var graph = seriesModel.getGraph();
+
+        var nodes = graph.nodes;
+        var edges = graph.edges;
+
+        computeNodeValues(nodes);
+
+        var filteredNodes = filter(nodes, function (node) {
+            return node.getLayout().value === 0;
+        });
+
+        var iterations = filteredNodes.length !== 0
+            ? 0 : seriesModel.get('layoutIterations');
+
+        layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations);
+    });
+};
+
+/**
+ * Get the layout position of the whole view
+ *
+ * @param {module:echarts/model/Series} seriesModel  the model object of sankey series
+ * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call
+ * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view
+ */
+function getViewRect$3(seriesModel, api) {
+    return getLayoutRect(
+        seriesModel.getBoxLayoutParams(), {
+            width: api.getWidth(),
+            height: api.getHeight()
+        }
+    );
+}
+
+function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations) {
+    computeNodeBreadths(nodes, edges, nodeWidth, width);
+    computeNodeDepths(nodes, edges, height, nodeGap, iterations);
+    computeEdgeDepths(nodes);
+}
+
+/**
+ * Compute the value of each node by summing the associated edge's value
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ */
+function computeNodeValues(nodes) {
+    each$1(nodes, function (node) {
+        var value1 = sum(node.outEdges, getEdgeValue);
+        var value2 = sum(node.inEdges, getEdgeValue);
+        var value = Math.max(value1, value2);
+        node.setLayout({value: value}, true);
+    });
+}
+
+/**
+ * Compute the x-position for each node.
+ * 
+ * Here we use Kahn algorithm to detect cycle when we traverse
+ * the node to computer the initial x position.
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ * @param  {number} nodeWidth  the dx of the node
+ * @param  {number} width  the whole width of the area to draw the view
+ */
+function computeNodeBreadths(nodes, edges, nodeWidth, width) {
+    // Used to mark whether the edge is deleted. if it is deleted,
+    // the value is 0, otherwise it is 1.
+    var remainEdges = [];
+    // Storage each node's indegree.
+    var indegreeArr = [];
+    //Used to storage the node with indegree is equal to 0.
+    var zeroIndegrees = [];
+    var nextNode = [];
+    var x = 0;
+    var kx = 0;
+
+    for (var i = 0; i < edges.length; i++) {
+        remainEdges[i] = 1;
+    }
+
+    for (var i = 0; i < nodes.length; i++) {
+        indegreeArr[i] = nodes[i].inEdges.length;
+        if (indegreeArr[i] === 0) {
+            zeroIndegrees.push(nodes[i]);
+        }
+    }
+    
+    while (zeroIndegrees.length) {
+        each$1(zeroIndegrees, function (node) {
+            node.setLayout({x: x}, true);
+            node.setLayout({dx: nodeWidth}, true);
+            each$1(node.outEdges, function (edge) {
+                var indexEdge = edges.indexOf(edge);
+                remainEdges[indexEdge] = 0;
+                var targetNode = edge.node2;
+                var nodeIndex = nodes.indexOf(targetNode);
+                if (--indegreeArr[nodeIndex] === 0) {
+                    nextNode.push(targetNode);
+                }
+            });
+        });
+       
+        ++x;
+        zeroIndegrees = nextNode;
+        nextNode = [];
+    }
+    
+    for (var i = 0; i < remainEdges.length; i++) {
+        if (__DEV__) {
+            if (remainEdges[i] === 1) {
+                throw new Error('Sankey is a DAG, the original data has cycle!');
+            }
+        } 
+    }
+
+    moveSinksRight(nodes, x);
+    kx = (width - nodeWidth) / (x - 1);
+
+    scaleNodeBreadths(nodes, kx);
+}
+
+/**
+ * All the node without outEgdes are assigned maximum x-position and
+ *     be aligned in the last column.
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ * @param {number} x  value (x-1) use to assign to node without outEdges
+ *     as x-position
+ */
+function moveSinksRight(nodes, x) {
+    each$1(nodes, function (node) {
+        if (!node.outEdges.length) {
+            node.setLayout({x: x - 1}, true);
+        }
+    });
+}
+
+/**
+ * Scale node x-position to the width
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ * @param {number} kx   multiple used to scale nodes
+ */
+function scaleNodeBreadths(nodes, kx) {
+    each$1(nodes, function (node) {
+        var nodeX = node.getLayout().x * kx;
+        node.setLayout({x: nodeX}, true);
+    });
+}
+
+/**
+ * Using Gauss-Seidel iterations method to compute the node depth(y-position)
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view
+ * @param {number} height  the whole height of the area to draw the view
+ * @param {number} nodeGap  the vertical distance between two nodes
+ *     in the same column.
+ * @param {number} iterations  the number of iterations for the algorithm
+ */
+function computeNodeDepths(nodes, edges, height, nodeGap, iterations) {
+    var nodesByBreadth = nest()
+        .key(function (d) {
+            return d.getLayout().x;
+        })
+        .sortKeys(ascending)
+        .entries(nodes)
+        .map(function (d) {
+            return d.values;
+        });
+
+    initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap);
+    resolveCollisions(nodesByBreadth, nodeGap, height);
+
+    for (var alpha = 1; iterations > 0; iterations--) {
+        // 0.99 is a experience parameter, ensure that each iterations of
+        // changes as small as possible.
+        alpha *= 0.99;
+        relaxRightToLeft(nodesByBreadth, alpha);
+        resolveCollisions(nodesByBreadth, nodeGap, height);
+        relaxLeftToRight(nodesByBreadth, alpha);
+        resolveCollisions(nodesByBreadth, nodeGap, height);
+    }
+}
+
+/**
+ * Compute the original y-position for each node
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth
+ *     group by the array of all sankey nodes based on the nodes x-position.
+ * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view
+ * @param {number} height  the whole height of the area to draw the view
+ * @param {number} nodeGap  the vertical distance between two nodes
+ */
+function initializeNodeDepth(nodes, nodesByBreadth, edges, height, nodeGap) {
+    var kyArray = [];
+    each$1(nodesByBreadth, function (nodes) {
+        var n = nodes.length;
+        var sum = 0;
+        each$1(nodes, function (node) {
+            sum += node.getLayout().value;
+        });
+        var ky = (height - (n - 1) * nodeGap) / sum;
+        kyArray.push(ky);
+    });
+
+    kyArray.sort(function (a, b) {
+        return a - b;
+    });
+    var ky0 = kyArray[0];
+
+    each$1(nodesByBreadth, function (nodes) {
+        each$1(nodes, function (node, i) {
+            node.setLayout({y: i}, true);
+            var nodeDy = node.getLayout().value * ky0;
+            node.setLayout({dy: nodeDy}, true);
+        });
+    });
+
+    each$1(edges, function (edge) {
+        var edgeDy = +edge.getValue() * ky0;
+        edge.setLayout({dy: edgeDy}, true);
+    });
+}
+
+/**
+ * Resolve the collision of initialized depth (y-position)
+ *
+ * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth
+ *     group by the array of all sankey nodes based on the nodes x-position.
+ * @param {number} nodeGap  the vertical distance between two nodes
+ * @param {number} height  the whole height of the area to draw the view
+ */
+function resolveCollisions(nodesByBreadth, nodeGap, height) {
+    each$1(nodesByBreadth, function (nodes) {
+        var node;
+        var dy;
+        var y0 = 0;
+        var n = nodes.length;
+        var i;
+
+        nodes.sort(ascendingDepth);
+
+        for (i = 0; i < n; i++) {
+            node = nodes[i];
+            dy = y0 - node.getLayout().y;
+            if (dy > 0) {
+                var nodeY = node.getLayout().y + dy;
+                node.setLayout({y: nodeY}, true);
+            }
+            y0 = node.getLayout().y + node.getLayout().dy + nodeGap;
+        }
+
+        // If the bottommost node goes outside the bounds, push it back up
+        dy = y0 - nodeGap - height;
+        if (dy > 0) {
+            var nodeY = node.getLayout().y - dy;
+            node.setLayout({y: nodeY}, true);
+            y0 = node.getLayout().y;
+            for (i = n - 2; i >= 0; --i) {
+                node = nodes[i];
+                dy = node.getLayout().y + node.getLayout().dy + nodeGap - y0;
+                if (dy > 0) {
+                    nodeY = node.getLayout().y - dy;
+                    node.setLayout({y: nodeY}, true);
+                }
+                y0 = node.getLayout().y;
+            }
+        }
+    });
+}
+
+/**
+ * Change the y-position of the nodes, except most the right side nodes
+ *
+ * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth
+ *     group by the array of all sankey nodes based on the node x-position.
+ * @param {number} alpha  parameter used to adjust the nodes y-position
+ */
+function relaxRightToLeft(nodesByBreadth, alpha) {
+    each$1(nodesByBreadth.slice().reverse(), function (nodes) {
+        each$1(nodes, function (node) {
+            if (node.outEdges.length) {
+                var y = sum(node.outEdges, weightedTarget) / sum(node.outEdges, getEdgeValue);
+                var nodeY = node.getLayout().y + (y - center$1(node)) * alpha;
+                node.setLayout({y: nodeY}, true);
+            }
+        });
+    });
+}
+
+function weightedTarget(edge) {
+    return center$1(edge.node2) * edge.getValue();
+}
+
+/**
+ * Change the y-position of the nodes, except most the left side nodes
+ *
+ * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth
+ *     group by the array of all sankey nodes based on the node x-position.
+ * @param {number} alpha  parameter used to adjust the nodes y-position
+ */
+function relaxLeftToRight(nodesByBreadth, alpha) {
+    each$1(nodesByBreadth, function (nodes) {
+        each$1(nodes, function (node) {
+            if (node.inEdges.length) {
+                var y = sum(node.inEdges, weightedSource) / sum(node.inEdges, getEdgeValue);
+                var nodeY = node.getLayout().y + (y - center$1(node)) * alpha;
+                node.setLayout({y: nodeY}, true);
+            }
+        });
+    });
+}
+
+function weightedSource(edge) {
+    return center$1(edge.node1) * edge.getValue();
+}
+
+/**
+ * Compute the depth(y-position) of each edge
+ *
+ * @param {module:echarts/data/Graph~Node} nodes  node of sankey view
+ */
+function computeEdgeDepths(nodes) {
+    each$1(nodes, function (node) {
+        node.outEdges.sort(ascendingTargetDepth);
+        node.inEdges.sort(ascendingSourceDepth);
+    });
+    each$1(nodes, function (node) {
+        var sy = 0;
+        var ty = 0;
+        each$1(node.outEdges, function (edge) {
+            edge.setLayout({sy: sy}, true);
+            sy += edge.getLayout().dy;
+        });
+        each$1(node.inEdges, function (edge) {
+            edge.setLayout({ty: ty}, true);
+            ty += edge.getLayout().dy;
+        });
+    });
+}
+
+function ascendingTargetDepth(a, b) {
+    return a.node2.getLayout().y - b.node2.getLayout().y;
+}
+
+function ascendingSourceDepth(a, b) {
+    return a.node1.getLayout().y - b.node1.getLayout().y;
+}
+
+function sum(array, f) {
+    var sum = 0;
+    var len = array.length;
+    var i = -1;
+    while (++i < len) {
+        var value = +f.call(array, array[i], i);
+        if (!isNaN(value)) {
+            sum += value;
+        }
+    }
+    return sum;
+}
+
+function center$1(node) {
+    return node.getLayout().y + node.getLayout().dy / 2;
+}
+
+function ascendingDepth(a, b) {
+    return a.getLayout().y - b.getLayout().y;
+}
+
+function ascending(a, b) {
+    return a - b;
+}
+
+function getEdgeValue(edge) {
+    return edge.getValue();
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Visual encoding for sankey view
+ * @author  Deqing Li(annong035@gmail.com)
+ */
+
+var sankeyVisual = function (ecModel, payload) {
+    ecModel.eachSeriesByType('sankey', function (seriesModel) {
+        var graph = seriesModel.getGraph();
+        var nodes = graph.nodes;
+        if (nodes.length) {
+            var minValue = Infinity;
+            var maxValue = -Infinity;
+            each$1(nodes, function (node) {
+                var nodeValue = node.getLayout().value;
+                if (nodeValue < minValue) {
+                    minValue = nodeValue;
+                }
+                if (nodeValue > maxValue) {
+                    maxValue = nodeValue;
+                }
+            });
+            
+            each$1(nodes, function (node) {
+                var mapping = new VisualMapping({
+                    type: 'color',
+                    mappingMethod: 'linear',
+                    dataExtent: [minValue, maxValue],
+                    visual: seriesModel.get('color')
+                });
+    
+                var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);
+                node.setVisual('color', mapValueToColor);
+                // If set itemStyle.normal.color
+                var itemModel = node.getModel();
+                var customColor = itemModel.get('itemStyle.color');
+                if (customColor != null) {
+                    node.setVisual('color', customColor);
+                }
+            });
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerLayout(sankeyLayout);
+registerVisual(sankeyVisual);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var seriesModelMixin = {
+
+    /**
+     * @private
+     * @type {string}
+     */
+    _baseAxisDim: null,
+
+    /**
+     * @override
+     */
+    getInitialData: function (option, ecModel) {
+        // When both types of xAxis and yAxis are 'value', layout is
+        // needed to be specified by user. Otherwise, layout can be
+        // judged by which axis is category.
+
+        var ordinalMeta;
+
+        var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));
+        var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));
+        var xAxisType = xAxisModel.get('type');
+        var yAxisType = yAxisModel.get('type');
+        var addOrdinal;
+
+        // FIXME
+        // 考虑时间轴
+
+        if (xAxisType === 'category') {
+            option.layout = 'horizontal';
+            ordinalMeta = xAxisModel.getOrdinalMeta();
+            addOrdinal = true;
+        }
+        else if (yAxisType  === 'category') {
+            option.layout = 'vertical';
+            ordinalMeta = yAxisModel.getOrdinalMeta();
+            addOrdinal = true;
+        }
+        else {
+            option.layout = option.layout || 'horizontal';
+        }
+
+        var coordDims = ['x', 'y'];
+        var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;
+        var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];
+        var otherAxisDim = coordDims[1 - baseAxisDimIndex];
+        var axisModels = [xAxisModel, yAxisModel];
+        var baseAxisType = axisModels[baseAxisDimIndex].get('type');
+        var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type');
+        var data = option.data;
+
+        // ??? FIXME make a stage to perform data transfrom.
+        // MUST create a new data, consider setOption({}) again.
+        if (data && addOrdinal) {
+            var newOptionData = [];
+            each$1(data, function (item, index) {
+                var newItem;
+                if (item.value && isArray(item.value)) {
+                    newItem = item.value.slice();
+                    item.value.unshift(index);
+                }
+                else if (isArray(item)) {
+                    newItem = item.slice();
+                    item.unshift(index);
+                }
+                else {
+                    newItem = item;
+                }
+                newOptionData.push(newItem);
+            });
+            option.data = newOptionData;
+        }
+
+        var defaultValueDimensions = this.defaultValueDimensions;
+
+        return createListSimply(
+            this,
+            {
+                coordDimensions: [{
+                    name: baseAxisDim,
+                    type: getDimensionTypeByAxis(baseAxisType),
+                    ordinalMeta: ordinalMeta,
+                    otherDims: {
+                        tooltip: false,
+                        itemName: 0
+                    },
+                    dimsDef: ['base']
+                }, {
+                    name: otherAxisDim,
+                    type: getDimensionTypeByAxis(otherAxisType),
+                    dimsDef: defaultValueDimensions.slice()
+                }],
+                dimensionsCount: defaultValueDimensions.length + 1
+            }
+        );
+    },
+
+    /**
+     * If horizontal, base axis is x, otherwise y.
+     * @override
+     */
+    getBaseAxis: function () {
+        var dim = this._baseAxisDim;
+        return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;
+    }
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var BoxplotSeries = SeriesModel.extend({
+
+    type: 'series.boxplot',
+
+    dependencies: ['xAxis', 'yAxis', 'grid'],
+
+    // TODO
+    // box width represents group size, so dimension should have 'size'.
+
+    /**
+     * @see <https://en.wikipedia.org/wiki/Box_plot>
+     * The meanings of 'min' and 'max' depend on user,
+     * and echarts do not need to know it.
+     * @readOnly
+     */
+    defaultValueDimensions: [
+        {name: 'min', defaultTooltip: true},
+        {name: 'Q1', defaultTooltip: true},
+        {name: 'median', defaultTooltip: true},
+        {name: 'Q3', defaultTooltip: true},
+        {name: 'max', defaultTooltip: true}
+    ],
+
+    /**
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    dimensions: null,
+
+    /**
+     * @override
+     */
+    defaultOption: {
+        zlevel: 0,                  // 一级层叠
+        z: 2,                       // 二级层叠
+        coordinateSystem: 'cartesian2d',
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        layout: null,               // 'horizontal' or 'vertical'
+        boxWidth: [7, 50],       // [min, max] can be percent of band width.
+
+        itemStyle: {
+            color: '#fff',
+            borderWidth: 1
+        },
+
+        emphasis: {
+            itemStyle: {
+                borderWidth: 2,
+                shadowBlur: 5,
+                shadowOffsetX: 2,
+                shadowOffsetY: 2,
+                shadowColor: 'rgba(0,0,0,0.4)'
+            }
+        },
+
+        animationEasing: 'elasticOut',
+        animationDuration: 800
+    }
+});
+
+mixin(BoxplotSeries, seriesModelMixin, true);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Update common properties
+var NORMAL_ITEM_STYLE_PATH = ['itemStyle'];
+var EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];
+
+var BoxplotView = Chart.extend({
+
+    type: 'boxplot',
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        var group = this.group;
+        var oldData = this._data;
+
+        // There is no old data only when first rendering or switching from
+        // stream mode to normal mode, where previous elements should be removed.
+        if (!this._data) {
+            group.removeAll();
+        }
+
+        var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;
+
+        data.diff(oldData)
+            .add(function (newIdx) {
+                if (data.hasValue(newIdx)) {
+                    var itemLayout = data.getItemLayout(newIdx);
+                    var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);
+                    data.setItemGraphicEl(newIdx, symbolEl);
+                    group.add(symbolEl);
+                }
+            })
+            .update(function (newIdx, oldIdx) {
+                var symbolEl = oldData.getItemGraphicEl(oldIdx);
+
+                // Empty data
+                if (!data.hasValue(newIdx)) {
+                    group.remove(symbolEl);
+                    return;
+                }
+
+                var itemLayout = data.getItemLayout(newIdx);
+                if (!symbolEl) {
+                    symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);
+                }
+                else {
+                    updateNormalBoxData(itemLayout, symbolEl, data, newIdx);
+                }
+
+                group.add(symbolEl);
+
+                data.setItemGraphicEl(newIdx, symbolEl);
+            })
+            .remove(function (oldIdx) {
+                var el = oldData.getItemGraphicEl(oldIdx);
+                el && group.remove(el);
+            })
+            .execute();
+
+        this._data = data;
+    },
+
+    remove: function (ecModel) {
+        var group = this.group;
+        var data = this._data;
+        this._data = null;
+        data && data.eachItemGraphicEl(function (el) {
+            el && group.remove(el);
+        });
+    },
+
+    dispose: noop
+
+});
+
+
+var BoxPath = Path.extend({
+
+    type: 'boxplotBoxPath',
+
+    shape: {},
+
+    buildPath: function (ctx, shape) {
+        var ends = shape.points;
+
+        var i = 0;
+        ctx.moveTo(ends[i][0], ends[i][1]);
+        i++;
+        for (; i < 4; i++) {
+            ctx.lineTo(ends[i][0], ends[i][1]);
+        }
+        ctx.closePath();
+
+        for (; i < ends.length; i++) {
+            ctx.moveTo(ends[i][0], ends[i][1]);
+            i++;
+            ctx.lineTo(ends[i][0], ends[i][1]);
+        }
+    }
+});
+
+
+function createNormalBox(itemLayout, data, dataIndex, constDim, isInit) {
+    var ends = itemLayout.ends;
+
+    var el = new BoxPath({
+        shape: {
+            points: isInit
+                ? transInit(ends, constDim, itemLayout)
+                : ends
+        }
+    });
+
+    updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);
+
+    return el;
+}
+
+function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) {
+    var seriesModel = data.hostModel;
+    var updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];
+
+    updateMethod(
+        el,
+        {shape: {points: itemLayout.ends}},
+        seriesModel,
+        dataIndex
+    );
+
+    var itemModel = data.getItemModel(dataIndex);
+    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);
+    var borderColor = data.getItemVisual(dataIndex, 'color');
+
+    // Exclude borderColor.
+    var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']);
+    itemStyle.stroke = borderColor;
+    itemStyle.strokeNoScale = true;
+    el.useStyle(itemStyle);
+
+    el.z2 = 100;
+
+    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();
+    setHoverStyle(el, hoverStyle);
+}
+
+function transInit(points, dim, itemLayout) {
+    return map(points, function (point) {
+        point = point.slice();
+        point[dim] = itemLayout.initBaseline;
+        return point;
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var borderColorQuery = ['itemStyle', 'borderColor'];
+
+var boxplotVisual = function (ecModel, api) {
+
+    var globalColors = ecModel.get('color');
+
+    ecModel.eachRawSeriesByType('boxplot', function (seriesModel) {
+
+        var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];
+        var data = seriesModel.getData();
+
+        data.setVisual({
+            legendSymbol: 'roundRect',
+            // Use name 'color' but not 'borderColor' for legend usage and
+            // visual coding from other component like dataRange.
+            color: seriesModel.get(borderColorQuery) || defaulColor
+        });
+
+        // Only visible series has each data be visual encoded
+        if (!ecModel.isSeriesFiltered(seriesModel)) {
+            data.each(function (idx) {
+                var itemModel = data.getItemModel(idx);
+                data.setItemVisual(
+                    idx,
+                    {color: itemModel.get(borderColorQuery, true)}
+                );
+            });
+        }
+    });
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$13 = each$1;
+
+var boxplotLayout = function (ecModel) {
+
+    var groupResult = groupSeriesByAxis(ecModel);
+
+    each$13(groupResult, function (groupItem) {
+        var seriesModels = groupItem.seriesModels;
+
+        if (!seriesModels.length) {
+            return;
+        }
+
+        calculateBase(groupItem);
+
+        each$13(seriesModels, function (seriesModel, idx) {
+            layoutSingleSeries(
+                seriesModel,
+                groupItem.boxOffsetList[idx],
+                groupItem.boxWidthList[idx]
+            );
+        });
+    });
+};
+
+/**
+ * Group series by axis.
+ */
+function groupSeriesByAxis(ecModel) {
+    var result = [];
+    var axisList = [];
+
+    ecModel.eachSeriesByType('boxplot', function (seriesModel) {
+        var baseAxis = seriesModel.getBaseAxis();
+        var idx = indexOf(axisList, baseAxis);
+
+        if (idx < 0) {
+            idx = axisList.length;
+            axisList[idx] = baseAxis;
+            result[idx] = {axis: baseAxis, seriesModels: []};
+        }
+
+        result[idx].seriesModels.push(seriesModel);
+    });
+
+    return result;
+}
+
+/**
+ * Calculate offset and box width for each series.
+ */
+function calculateBase(groupItem) {
+    var extent;
+    var baseAxis = groupItem.axis;
+    var seriesModels = groupItem.seriesModels;
+    var seriesCount = seriesModels.length;
+
+    var boxWidthList = groupItem.boxWidthList = [];
+    var boxOffsetList = groupItem.boxOffsetList = [];
+    var boundList = [];
+
+    var bandWidth;
+    if (baseAxis.type === 'category') {
+        bandWidth = baseAxis.getBandWidth();
+    }
+    else {
+        var maxDataCount = 0;
+        each$13(seriesModels, function (seriesModel) {
+            maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());
+        });
+        extent = baseAxis.getExtent(),
+        Math.abs(extent[1] - extent[0]) / maxDataCount;
+    }
+
+    each$13(seriesModels, function (seriesModel) {
+        var boxWidthBound = seriesModel.get('boxWidth');
+        if (!isArray(boxWidthBound)) {
+            boxWidthBound = [boxWidthBound, boxWidthBound];
+        }
+        boundList.push([
+            parsePercent$1(boxWidthBound[0], bandWidth) || 0,
+            parsePercent$1(boxWidthBound[1], bandWidth) || 0
+        ]);
+    });
+
+    var availableWidth = bandWidth * 0.8 - 2;
+    var boxGap = availableWidth / seriesCount * 0.3;
+    var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;
+    var base = boxWidth / 2 - availableWidth / 2;
+
+    each$13(seriesModels, function (seriesModel, idx) {
+        boxOffsetList.push(base);
+        base += boxGap + boxWidth;
+
+        boxWidthList.push(
+            Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1])
+        );
+    });
+}
+
+/**
+ * Calculate points location for each series.
+ */
+function layoutSingleSeries(seriesModel, offset, boxWidth) {
+    var coordSys = seriesModel.coordinateSystem;
+    var data = seriesModel.getData();
+    var halfWidth = boxWidth / 2;
+    var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;
+    var vDimIdx = 1 - cDimIdx;
+    var coordDims = ['x', 'y'];
+    var cDim = data.mapDimension(coordDims[cDimIdx]);
+    var vDims = data.mapDimension(coordDims[vDimIdx], true);
+
+    if (cDim == null || vDims.length < 5) {
+        return;
+    }
+
+    for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {
+        var axisDimVal = data.get(cDim, dataIndex);
+
+        var median = getPoint(axisDimVal, vDims[2], dataIndex);
+        var end1 = getPoint(axisDimVal, vDims[0], dataIndex);
+        var end2 = getPoint(axisDimVal, vDims[1], dataIndex);
+        var end4 = getPoint(axisDimVal, vDims[3], dataIndex);
+        var end5 = getPoint(axisDimVal, vDims[4], dataIndex);
+
+        var ends = [];
+        addBodyEnd(ends, end2, 0);
+        addBodyEnd(ends, end4, 1);
+
+        ends.push(end1, end2, end5, end4);
+        layEndLine(ends, end1);
+        layEndLine(ends, end5);
+        layEndLine(ends, median);
+
+        data.setItemLayout(dataIndex, {
+            initBaseline: median[vDimIdx],
+            ends: ends
+        });
+    }
+
+    function getPoint(axisDimVal, dimIdx, dataIndex) {
+        var val = data.get(dimIdx, dataIndex);
+        var p = [];
+        p[cDimIdx] = axisDimVal;
+        p[vDimIdx] = val;
+        var point;
+        if (isNaN(axisDimVal) || isNaN(val)) {
+            point = [NaN, NaN];
+        }
+        else {
+            point = coordSys.dataToPoint(p);
+            point[cDimIdx] += offset;
+        }
+        return point;
+    }
+
+    function addBodyEnd(ends, point, start) {
+        var point1 = point.slice();
+        var point2 = point.slice();
+        point1[cDimIdx] += halfWidth;
+        point2[cDimIdx] -= halfWidth;
+        start
+            ? ends.push(point1, point2)
+            : ends.push(point2, point1);
+    }
+
+    function layEndLine(ends, endCenter) {
+        var from = endCenter.slice();
+        var to = endCenter.slice();
+        from[cDimIdx] -= halfWidth;
+        to[cDimIdx] += halfWidth;
+        ends.push(from, to);
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(boxplotVisual);
+registerLayout(boxplotLayout);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var CandlestickSeries = SeriesModel.extend({
+
+    type: 'series.candlestick',
+
+    dependencies: ['xAxis', 'yAxis', 'grid'],
+
+    /**
+     * @readOnly
+     */
+    defaultValueDimensions: [
+        {name: 'open', defaultTooltip: true},
+        {name: 'close', defaultTooltip: true},
+        {name: 'lowest', defaultTooltip: true},
+        {name: 'highest', defaultTooltip: true}
+    ],
+
+    /**
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    dimensions: null,
+
+    /**
+     * @override
+     */
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        coordinateSystem: 'cartesian2d',
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        layout: null, // 'horizontal' or 'vertical'
+
+        itemStyle: {
+            color: '#c23531', // 阳线 positive
+            color0: '#314656', // 阴线 negative     '#c23531', '#314656'
+            borderWidth: 1,
+            // FIXME
+            // ec2中使用的是lineStyle.color 和 lineStyle.color0
+            borderColor: '#c23531',
+            borderColor0: '#314656'
+        },
+
+        emphasis: {
+            itemStyle: {
+                borderWidth: 2
+            }
+        },
+
+        barMaxWidth: null,
+        barMinWidth: null,
+        barWidth: null,
+
+        large: true,
+        largeThreshold: 600,
+
+        progressive: 3e3,
+        progressiveThreshold: 1e4,
+        progressiveChunkMode: 'mod',
+
+        animationUpdate: false,
+        animationEasing: 'linear',
+        animationDuration: 300
+    },
+
+    /**
+     * Get dimension for shadow in dataZoom
+     * @return {string} dimension name
+     */
+    getShadowDim: function () {
+        return 'open';
+    },
+
+    brushSelector: function (dataIndex, data, selectors) {
+        var itemLayout = data.getItemLayout(dataIndex);
+        return itemLayout && selectors.rect(itemLayout.brushRect);
+    }
+
+});
+
+mixin(CandlestickSeries, seriesModelMixin, true);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var NORMAL_ITEM_STYLE_PATH$1 = ['itemStyle'];
+var EMPHASIS_ITEM_STYLE_PATH$1 = ['emphasis', 'itemStyle'];
+var SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0'];
+
+
+var CandlestickView = Chart.extend({
+
+    type: 'candlestick',
+
+    render: function (seriesModel, ecModel, api) {
+        this._updateDrawMode(seriesModel);
+
+        this._isLargeDraw
+            ? this._renderLarge(seriesModel)
+            : this._renderNormal(seriesModel);
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        this._clear();
+        this._updateDrawMode(seriesModel);
+    },
+
+    incrementalRender: function (params, seriesModel, ecModel, api) {
+        this._isLargeDraw
+             ? this._incrementalRenderLarge(params, seriesModel)
+             : this._incrementalRenderNormal(params, seriesModel);
+    },
+
+    _updateDrawMode: function (seriesModel) {
+        var isLargeDraw = seriesModel.pipelineContext.large;
+        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {
+            this._isLargeDraw = isLargeDraw;
+            this._clear();
+        }
+    },
+
+    _renderNormal: function (seriesModel) {
+        var data = seriesModel.getData();
+        var oldData = this._data;
+        var group = this.group;
+        var isSimpleBox = data.getLayout('isSimpleBox');
+
+        // There is no old data only when first rendering or switching from
+        // stream mode to normal mode, where previous elements should be removed.
+        if (!this._data) {
+            group.removeAll();
+        }
+
+        data.diff(oldData)
+            .add(function (newIdx) {
+                if (data.hasValue(newIdx)) {
+                    var el;
+
+                    var itemLayout = data.getItemLayout(newIdx);
+                    el = createNormalBox$1(itemLayout, newIdx, true);
+                    initProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);
+
+                    setBoxCommon(el, data, newIdx, isSimpleBox);
+
+                    group.add(el);
+                    data.setItemGraphicEl(newIdx, el);
+                }
+            })
+            .update(function (newIdx, oldIdx) {
+                var el = oldData.getItemGraphicEl(oldIdx);
+
+                // Empty data
+                if (!data.hasValue(newIdx)) {
+                    group.remove(el);
+                    return;
+                }
+
+                var itemLayout = data.getItemLayout(newIdx);
+                if (!el) {
+                    el = createNormalBox$1(itemLayout, newIdx);
+                }
+                else {
+                    updateProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);
+                }
+
+                setBoxCommon(el, data, newIdx, isSimpleBox);
+
+                group.add(el);
+                data.setItemGraphicEl(newIdx, el);
+            })
+            .remove(function (oldIdx) {
+                var el = oldData.getItemGraphicEl(oldIdx);
+                el && group.remove(el);
+            })
+            .execute();
+
+        this._data = data;
+    },
+
+    _renderLarge: function (seriesModel) {
+        this._clear();
+        createLarge$1(seriesModel, this.group);
+    },
+
+    _incrementalRenderNormal: function (params, seriesModel) {
+        var data = seriesModel.getData();
+        var isSimpleBox = data.getLayout('isSimpleBox');
+
+        var dataIndex;
+        while ((dataIndex = params.next()) != null) {
+            var el;
+
+            var itemLayout = data.getItemLayout(dataIndex);
+            el = createNormalBox$1(itemLayout, dataIndex);
+            setBoxCommon(el, data, dataIndex, isSimpleBox);
+
+            el.incremental = true;
+            this.group.add(el);
+        }
+    },
+
+    _incrementalRenderLarge: function (params, seriesModel) {
+        createLarge$1(seriesModel, this.group, true);
+    },
+
+    remove: function (ecModel) {
+        this._clear();
+    },
+
+    _clear: function () {
+        this.group.removeAll();
+        this._data = null;
+    },
+
+    dispose: noop
+
+});
+
+
+var NormalBoxPath = Path.extend({
+
+    type: 'normalCandlestickBox',
+
+    shape: {},
+
+    buildPath: function (ctx, shape) {
+        var ends = shape.points;
+
+        if (this.__simpleBox) {
+            ctx.moveTo(ends[4][0], ends[4][1]);
+            ctx.lineTo(ends[6][0], ends[6][1]);
+        }
+        else {
+            ctx.moveTo(ends[0][0], ends[0][1]);
+            ctx.lineTo(ends[1][0], ends[1][1]);
+            ctx.lineTo(ends[2][0], ends[2][1]);
+            ctx.lineTo(ends[3][0], ends[3][1]);
+            ctx.closePath();
+
+            ctx.moveTo(ends[4][0], ends[4][1]);
+            ctx.lineTo(ends[5][0], ends[5][1]);
+            ctx.moveTo(ends[6][0], ends[6][1]);
+            ctx.lineTo(ends[7][0], ends[7][1]);
+        }
+    }
+});
+
+function createNormalBox$1(itemLayout, dataIndex, isInit) {
+    var ends = itemLayout.ends;
+    return new NormalBoxPath({
+        shape: {
+            points: isInit
+                ? transInit$1(ends, itemLayout)
+                : ends
+        },
+        z2: 100
+    });
+}
+
+function setBoxCommon(el, data, dataIndex, isSimpleBox) {
+    var itemModel = data.getItemModel(dataIndex);
+    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH$1);
+    var color = data.getItemVisual(dataIndex, 'color');
+    var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color;
+
+    // Color must be excluded.
+    // Because symbol provide setColor individually to set fill and stroke
+    var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);
+
+    el.useStyle(itemStyle);
+    el.style.strokeNoScale = true;
+    el.style.fill = color;
+    el.style.stroke = borderColor;
+
+    el.__simpleBox = isSimpleBox;
+
+    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH$1).getItemStyle();
+    setHoverStyle(el, hoverStyle);
+}
+
+function transInit$1(points, itemLayout) {
+    return map(points, function (point) {
+        point = point.slice();
+        point[1] = itemLayout.initBaseline;
+        return point;
+    });
+}
+
+
+
+var LargeBoxPath = Path.extend({
+
+    type: 'largeCandlestickBox',
+
+    shape: {},
+
+    buildPath: function (ctx, shape) {
+        // Drawing lines is more efficient than drawing
+        // a whole line or drawing rects.
+        var points = shape.points;
+        for (var i = 0; i < points.length;) {
+            if (this.__sign === points[i++]) {
+                var x = points[i++];
+                ctx.moveTo(x, points[i++]);
+                ctx.lineTo(x, points[i++]);
+            }
+            else {
+                i += 3;
+            }
+        }
+    }
+});
+
+function createLarge$1(seriesModel, group, incremental) {
+    var data = seriesModel.getData();
+    var largePoints = data.getLayout('largePoints');
+
+    var elP = new LargeBoxPath({
+        shape: {points: largePoints},
+        __sign: 1
+    });
+    group.add(elP);
+    var elN = new LargeBoxPath({
+        shape: {points: largePoints},
+        __sign: -1
+    });
+    group.add(elN);
+
+    setLargeStyle$1(1, elP, seriesModel, data);
+    setLargeStyle$1(-1, elN, seriesModel, data);
+
+    if (incremental) {
+        elP.incremental = true;
+        elN.incremental = true;
+    }
+}
+
+function setLargeStyle$1(sign, el, seriesModel, data) {
+    var suffix = sign > 0 ? 'P' : 'N';
+    var borderColor = data.getVisual('borderColor' + suffix)
+        || data.getVisual('color' + suffix);
+
+    // Color must be excluded.
+    // Because symbol provide setColor individually to set fill and stroke
+    var itemStyle = seriesModel.getModel(NORMAL_ITEM_STYLE_PATH$1).getItemStyle(SKIP_PROPS);
+
+    el.useStyle(itemStyle);
+    el.style.fill = null;
+    el.style.stroke = borderColor;
+    // No different
+    // el.style.lineWidth = .5;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var preprocessor = function (option) {
+    if (!option || !isArray(option.series)) {
+        return;
+    }
+
+    // Translate 'k' to 'candlestick'.
+    each$1(option.series, function (seriesItem) {
+        if (isObject$1(seriesItem) && seriesItem.type === 'k') {
+            seriesItem.type = 'candlestick';
+        }
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var positiveBorderColorQuery = ['itemStyle', 'borderColor'];
+var negativeBorderColorQuery = ['itemStyle', 'borderColor0'];
+var positiveColorQuery = ['itemStyle', 'color'];
+var negativeColorQuery = ['itemStyle', 'color0'];
+
+var candlestickVisual = {
+
+    seriesType: 'candlestick',
+
+    plan: createRenderPlanner(),
+
+    // For legend.
+    performRawSeries: true,
+
+    reset: function (seriesModel, ecModel) {
+
+        var data = seriesModel.getData();
+        var isLargeRender = seriesModel.pipelineContext.large;
+
+        data.setVisual({
+            legendSymbol: 'roundRect',
+            colorP: getColor(1, seriesModel),
+            colorN: getColor(-1, seriesModel),
+            borderColorP: getBorderColor(1, seriesModel),
+            borderColorN: getBorderColor(-1, seriesModel)
+        });
+
+        // Only visible series has each data be visual encoded
+        if (ecModel.isSeriesFiltered(seriesModel)) {
+            return;
+        }
+
+        return !isLargeRender && {progress: progress};
+
+
+        function progress(params, data) {
+            var dataIndex;
+            while ((dataIndex = params.next()) != null) {
+                var itemModel = data.getItemModel(dataIndex);
+                var sign = data.getItemLayout(dataIndex).sign;
+
+                data.setItemVisual(
+                    dataIndex,
+                    {
+                        color: getColor(sign, itemModel),
+                        borderColor: getBorderColor(sign, itemModel)
+                    }
+                );
+            }
+        }
+
+        function getColor(sign, model) {
+            return model.get(
+                sign > 0 ? positiveColorQuery : negativeColorQuery
+            );
+        }
+
+        function getBorderColor(sign, model) {
+            return model.get(
+                sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery
+            );
+        }
+
+    }
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var LargeArr$1 = typeof Float32Array !== 'undefined' ? Float32Array : Array;
+
+var candlestickLayout = {
+
+    seriesType: 'candlestick',
+
+    plan: createRenderPlanner(),
+
+    reset: function (seriesModel) {
+
+        var coordSys = seriesModel.coordinateSystem;
+        var data = seriesModel.getData();
+        var candleWidth = calculateCandleWidth(seriesModel, data);
+        var cDimIdx = 0;
+        var vDimIdx = 1;
+        var coordDims = ['x', 'y'];
+        var cDim = data.mapDimension(coordDims[cDimIdx]);
+        var vDims = data.mapDimension(coordDims[vDimIdx], true);
+        var openDim = vDims[0];
+        var closeDim = vDims[1];
+        var lowestDim = vDims[2];
+        var highestDim = vDims[3];
+
+        data.setLayout({
+            candleWidth: candleWidth,
+            // The value is experimented visually.
+            isSimpleBox: candleWidth <= 1.3
+        });
+
+        if (cDim == null || vDims.length < 4) {
+            return;
+        }
+
+        return {
+            progress: seriesModel.pipelineContext.large
+                ? largeProgress : normalProgress
+        };
+
+        function normalProgress(params, data) {
+            var dataIndex;
+            while ((dataIndex = params.next()) != null) {
+
+                var axisDimVal = data.get(cDim, dataIndex);
+                var openVal = data.get(openDim, dataIndex);
+                var closeVal = data.get(closeDim, dataIndex);
+                var lowestVal = data.get(lowestDim, dataIndex);
+                var highestVal = data.get(highestDim, dataIndex);
+
+                var ocLow = Math.min(openVal, closeVal);
+                var ocHigh = Math.max(openVal, closeVal);
+
+                var ocLowPoint = getPoint(ocLow, axisDimVal);
+                var ocHighPoint = getPoint(ocHigh, axisDimVal);
+                var lowestPoint = getPoint(lowestVal, axisDimVal);
+                var highestPoint = getPoint(highestVal, axisDimVal);
+
+                var ends = [];
+                addBodyEnd(ends, ocHighPoint, 0);
+                addBodyEnd(ends, ocLowPoint, 1);
+
+                ends.push(
+                    subPixelOptimizePoint(highestPoint),
+                    subPixelOptimizePoint(ocHighPoint),
+                    subPixelOptimizePoint(lowestPoint),
+                    subPixelOptimizePoint(ocLowPoint)
+                );
+
+                data.setItemLayout(dataIndex, {
+                    sign: getSign(data, dataIndex, openVal, closeVal, closeDim),
+                    initBaseline: openVal > closeVal
+                        ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], // open point.
+                    ends: ends,
+                    brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal)
+                });
+            }
+
+            function getPoint(val, axisDimVal) {
+                var p = [];
+                p[cDimIdx] = axisDimVal;
+                p[vDimIdx] = val;
+                return (isNaN(axisDimVal) || isNaN(val))
+                    ? [NaN, NaN]
+                    : coordSys.dataToPoint(p);
+            }
+
+            function addBodyEnd(ends, point, start) {
+                var point1 = point.slice();
+                var point2 = point.slice();
+
+                point1[cDimIdx] = subPixelOptimize(
+                    point1[cDimIdx] + candleWidth / 2, 1, false
+                );
+                point2[cDimIdx] = subPixelOptimize(
+                    point2[cDimIdx] - candleWidth / 2, 1, true
+                );
+
+                start
+                    ? ends.push(point1, point2)
+                    : ends.push(point2, point1);
+            }
+
+            function makeBrushRect(lowestVal, highestVal, axisDimVal) {
+                var pmin = getPoint(lowestVal, axisDimVal);
+                var pmax = getPoint(highestVal, axisDimVal);
+
+                pmin[cDimIdx] -= candleWidth / 2;
+                pmax[cDimIdx] -= candleWidth / 2;
+
+                return {
+                    x: pmin[0],
+                    y: pmin[1],
+                    width: vDimIdx ? candleWidth : pmax[0] - pmin[0],
+                    height: vDimIdx ? pmax[1] - pmin[1] : candleWidth
+                };
+            }
+
+            function subPixelOptimizePoint(point) {
+                point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1);
+                return point;
+            }
+        }
+
+        function largeProgress(params, data) {
+            // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]
+            var points = new LargeArr$1(params.count * 5);
+            var offset = 0;
+            var point;
+            var tmpIn = [];
+            var tmpOut = [];
+            var dataIndex;
+
+            while ((dataIndex = params.next()) != null) {
+                var axisDimVal = data.get(cDim, dataIndex);
+                var openVal = data.get(openDim, dataIndex);
+                var closeVal = data.get(closeDim, dataIndex);
+                var lowestVal = data.get(lowestDim, dataIndex);
+                var highestVal = data.get(highestDim, dataIndex);
+
+                if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {
+                    points[offset++] = NaN;
+                    offset += 4;
+                    continue;
+                }
+
+                points[offset++] = getSign(data, dataIndex, openVal, closeVal, closeDim);
+
+                tmpIn[cDimIdx] = axisDimVal;
+
+                tmpIn[vDimIdx] = lowestVal;
+                point = coordSys.dataToPoint(tmpIn, null, tmpOut);
+                points[offset++] = point ? point[0] : NaN;
+                points[offset++] = point ? point[1] : NaN;
+                tmpIn[vDimIdx] = highestVal;
+                point = coordSys.dataToPoint(tmpIn, null, tmpOut);
+                points[offset++] = point ? point[1] : NaN;
+            }
+
+            data.setLayout('largePoints', points);
+        }
+    }
+};
+
+function getSign(data, dataIndex, openVal, closeVal, closeDim) {
+    var sign;
+    if (openVal > closeVal) {
+        sign = -1;
+    }
+    else if (openVal < closeVal) {
+        sign = 1;
+    }
+    else {
+        sign = dataIndex > 0
+            // If close === open, compare with close of last record
+            ? (data.get(closeDim, dataIndex - 1) <= closeVal ? 1 : -1)
+            // No record of previous, set to be positive
+            : 1;
+    }
+
+    return sign;
+}
+
+function calculateCandleWidth(seriesModel, data) {
+    var baseAxis = seriesModel.getBaseAxis();
+    var extent;
+
+    var bandWidth = baseAxis.type === 'category'
+        ? baseAxis.getBandWidth()
+        : (
+            extent = baseAxis.getExtent(),
+            Math.abs(extent[1] - extent[0]) / data.count()
+        );
+
+    var barMaxWidth = parsePercent$1(
+        retrieve2(seriesModel.get('barMaxWidth'), bandWidth),
+        bandWidth
+    );
+    var barMinWidth = parsePercent$1(
+        retrieve2(seriesModel.get('barMinWidth'), 1),
+        bandWidth
+    );
+    var barWidth = seriesModel.get('barWidth');
+
+    return barWidth != null
+        ? parsePercent$1(barWidth, bandWidth)
+        // Put max outer to ensure bar visible in spite of overlap.
+        : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerPreprocessor(preprocessor);
+registerVisual(candlestickVisual);
+registerLayout(candlestickLayout);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.effectScatter',
+
+    dependencies: ['grid', 'polar'],
+
+    getInitialData: function (option, ecModel) {
+        return createListFromArray(this.getSource(), this);
+    },
+
+    brushSelector: 'point',
+
+    defaultOption: {
+        coordinateSystem: 'cartesian2d',
+        zlevel: 0,
+        z: 2,
+        legendHoverLink: true,
+
+        effectType: 'ripple',
+
+        progressive: 0,
+
+        // When to show the effect, option: 'render'|'emphasis'
+        showEffectOn: 'render',
+
+        // Ripple effect config
+        rippleEffect: {
+            period: 4,
+            // Scale of ripple
+            scale: 2.5,
+            // Brush type can be fill or stroke
+            brushType: 'fill'
+        },
+
+        // Cartesian coordinate system
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // Polar coordinate system
+        // polarIndex: 0,
+
+        // Geo coordinate system
+        // geoIndex: 0,
+
+        // symbol: null,        // 图形类型
+        symbolSize: 10          // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2
+        // symbolRotate: null,  // 图形旋转控制
+
+        // large: false,
+        // Available when large is true
+        // largeThreshold: 2000,
+
+        // itemStyle: {
+        //     opacity: 1
+        // }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Symbol with ripple effect
+ * @module echarts/chart/helper/EffectSymbol
+ */
+
+var EFFECT_RIPPLE_NUMBER = 3;
+
+function normalizeSymbolSize$1(symbolSize) {
+    if (!isArray(symbolSize)) {
+        symbolSize = [+symbolSize, +symbolSize];
+    }
+    return symbolSize;
+}
+
+function updateRipplePath(rippleGroup, effectCfg) {
+    rippleGroup.eachChild(function (ripplePath) {
+        ripplePath.attr({
+            z: effectCfg.z,
+            zlevel: effectCfg.zlevel,
+            style: {
+                stroke: effectCfg.brushType === 'stroke' ? effectCfg.color : null,
+                fill: effectCfg.brushType === 'fill' ? effectCfg.color : null
+            }
+        });
+    });
+}
+/**
+ * @constructor
+ * @param {module:echarts/data/List} data
+ * @param {number} idx
+ * @extends {module:zrender/graphic/Group}
+ */
+function EffectSymbol(data, idx) {
+    Group.call(this);
+
+    var symbol = new SymbolClz$1(data, idx);
+    var rippleGroup = new Group();
+    this.add(symbol);
+    this.add(rippleGroup);
+
+    rippleGroup.beforeUpdate = function () {
+        this.attr(symbol.getScale());
+    };
+    this.updateData(data, idx);
+}
+
+var effectSymbolProto = EffectSymbol.prototype;
+
+effectSymbolProto.stopEffectAnimation = function () {
+    this.childAt(1).removeAll();
+};
+
+effectSymbolProto.startEffectAnimation = function (effectCfg) {
+    var symbolType = effectCfg.symbolType;
+    var color = effectCfg.color;
+    var rippleGroup = this.childAt(1);
+
+    for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {
+        // var ripplePath = createSymbol(
+        //     symbolType, -0.5, -0.5, 1, 1, color
+        // );
+        // If width/height are set too small (e.g., set to 1) on ios10
+        // and macOS Sierra, a circle stroke become a rect, no matter what
+        // the scale is set. So we set width/height as 2. See #4136.
+        var ripplePath = createSymbol(
+            symbolType, -1, -1, 2, 2, color
+        );
+        ripplePath.attr({
+            style: {
+                strokeNoScale: true
+            },
+            z2: 99,
+            silent: true,
+            scale: [0.5, 0.5]
+        });
+
+        var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset;
+        // TODO Configurable effectCfg.period
+        ripplePath.animate('', true)
+            .when(effectCfg.period, {
+                scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2]
+            })
+            .delay(delay)
+            .start();
+        ripplePath.animateStyle(true)
+            .when(effectCfg.period, {
+                opacity: 0
+            })
+            .delay(delay)
+            .start();
+
+        rippleGroup.add(ripplePath);
+    }
+
+    updateRipplePath(rippleGroup, effectCfg);
+};
+
+/**
+ * Update effect symbol
+ */
+effectSymbolProto.updateEffectAnimation = function (effectCfg) {
+    var oldEffectCfg = this._effectCfg;
+    var rippleGroup = this.childAt(1);
+
+    // Must reinitialize effect if following configuration changed
+    var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'];
+    for (var i = 0; i < DIFFICULT_PROPS.length; i++) {
+        var propName = DIFFICULT_PROPS[i];
+        if (oldEffectCfg[propName] !== effectCfg[propName]) {
+            this.stopEffectAnimation();
+            this.startEffectAnimation(effectCfg);
+            return;
+        }
+    }
+
+    updateRipplePath(rippleGroup, effectCfg);
+};
+
+/**
+ * Highlight symbol
+ */
+effectSymbolProto.highlight = function () {
+    this.trigger('emphasis');
+};
+
+/**
+ * Downplay symbol
+ */
+effectSymbolProto.downplay = function () {
+    this.trigger('normal');
+};
+
+/**
+ * Update symbol properties
+ * @param  {module:echarts/data/List} data
+ * @param  {number} idx
+ */
+effectSymbolProto.updateData = function (data, idx) {
+    var seriesModel = data.hostModel;
+
+    this.childAt(0).updateData(data, idx);
+
+    var rippleGroup = this.childAt(1);
+    var itemModel = data.getItemModel(idx);
+    var symbolType = data.getItemVisual(idx, 'symbol');
+    var symbolSize = normalizeSymbolSize$1(data.getItemVisual(idx, 'symbolSize'));
+    var color = data.getItemVisual(idx, 'color');
+
+    rippleGroup.attr('scale', symbolSize);
+
+    rippleGroup.traverse(function (ripplePath) {
+        ripplePath.attr({
+            fill: color
+        });
+    });
+
+    var symbolOffset = itemModel.getShallow('symbolOffset');
+    if (symbolOffset) {
+        var pos = rippleGroup.position;
+        pos[0] = parsePercent$1(symbolOffset[0], symbolSize[0]);
+        pos[1] = parsePercent$1(symbolOffset[1], symbolSize[1]);
+    }
+    rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0;
+
+    var effectCfg = {};
+
+    effectCfg.showEffectOn = seriesModel.get('showEffectOn');
+    effectCfg.rippleScale = itemModel.get('rippleEffect.scale');
+    effectCfg.brushType = itemModel.get('rippleEffect.brushType');
+    effectCfg.period = itemModel.get('rippleEffect.period') * 1000;
+    effectCfg.effectOffset = idx / data.count();
+    effectCfg.z = itemModel.getShallow('z') || 0;
+    effectCfg.zlevel = itemModel.getShallow('zlevel') || 0;
+    effectCfg.symbolType = symbolType;
+    effectCfg.color = color;
+
+    this.off('mouseover').off('mouseout').off('emphasis').off('normal');
+
+    if (effectCfg.showEffectOn === 'render') {
+        this._effectCfg
+            ? this.updateEffectAnimation(effectCfg)
+            : this.startEffectAnimation(effectCfg);
+
+        this._effectCfg = effectCfg;
+    }
+    else {
+        // Not keep old effect config
+        this._effectCfg = null;
+
+        this.stopEffectAnimation();
+        var symbol = this.childAt(0);
+        var onEmphasis = function () {
+            symbol.highlight();
+            if (effectCfg.showEffectOn !== 'render') {
+                this.startEffectAnimation(effectCfg);
+            }
+        };
+        var onNormal = function () {
+            symbol.downplay();
+            if (effectCfg.showEffectOn !== 'render') {
+                this.stopEffectAnimation();
+            }
+        };
+        this.on('mouseover', onEmphasis, this)
+            .on('mouseout', onNormal, this)
+            .on('emphasis', onEmphasis, this)
+            .on('normal', onNormal, this);
+    }
+
+    this._effectCfg = effectCfg;
+};
+
+effectSymbolProto.fadeOut = function (cb) {
+    this.off('mouseover').off('mouseout').off('emphasis').off('normal');
+    cb && cb();
+};
+
+inherits(EffectSymbol, Group);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendChartView({
+
+    type: 'effectScatter',
+
+    init: function () {
+        this._symbolDraw = new SymbolDraw(EffectSymbol);
+    },
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        var effectSymbolDraw = this._symbolDraw;
+        effectSymbolDraw.updateData(data);
+        this.group.add(effectSymbolDraw.group);
+    },
+
+    updateTransform: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+
+        this.group.dirty();
+
+        var res = pointsLayout().reset(seriesModel);
+        if (res.progress) {
+            res.progress({ start: 0, end: data.count() }, data);
+        }
+
+        this._symbolDraw.updateLayout(data);
+    },
+
+    _updateGroupTransform: function (seriesModel) {
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys && coordSys.getRoamTransform) {
+            this.group.transform = clone$2(coordSys.getRoamTransform());
+            this.group.decomposeTransform();
+        }
+    },
+
+    remove: function (ecModel, api) {
+        this._symbolDraw && this._symbolDraw.remove(api);
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(visualSymbol('effectScatter', 'circle'));
+registerLayout(pointsLayout('effectScatter'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;
+var Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;
+
+function compatEc2(seriesOpt) {
+    var data = seriesOpt.data;
+    if (data && data[0] && data[0][0] && data[0][0].coord) {
+        if (__DEV__) {
+            console.warn('Lines data configuration has been changed to'
+                + ' { coords:[[1,2],[2,3]] }');
+        }
+        seriesOpt.data = map(data, function (itemOpt) {
+            var coords = [
+                itemOpt[0].coord, itemOpt[1].coord
+            ];
+            var target = {
+                coords: coords
+            };
+            if (itemOpt[0].name) {
+                target.fromName = itemOpt[0].name;
+            }
+            if (itemOpt[1].name) {
+                target.toName = itemOpt[1].name;
+            }
+            return mergeAll([target, itemOpt[0], itemOpt[1]]);
+        });
+    }
+}
+
+var LinesSeries = SeriesModel.extend({
+
+    type: 'series.lines',
+
+    dependencies: ['grid', 'polar'],
+
+    visualColorAccessPath: 'lineStyle.color',
+
+    init: function (option) {
+        // The input data may be null/undefined.
+        option.data = option.data || [];
+
+        // Not using preprocessor because mergeOption may not have series.type
+        compatEc2(option);
+
+        var result = this._processFlatCoordsArray(option.data);
+        this._flatCoords = result.flatCoords;
+        this._flatCoordsOffset = result.flatCoordsOffset;
+        if (result.flatCoords) {
+            option.data = new Float32Array(result.count);
+        }
+
+        LinesSeries.superApply(this, 'init', arguments);
+    },
+
+    mergeOption: function (option) {
+        // The input data may be null/undefined.
+        option.data = option.data || [];
+
+        compatEc2(option);
+
+        if (option.data) {
+            // Only update when have option data to merge.
+            var result = this._processFlatCoordsArray(option.data);
+            this._flatCoords = result.flatCoords;
+            this._flatCoordsOffset = result.flatCoordsOffset;
+            if (result.flatCoords) {
+                option.data = new Float32Array(result.count);
+            }
+        }
+
+        LinesSeries.superApply(this, 'mergeOption', arguments);
+    },
+
+    appendData: function (params) {
+        var result = this._processFlatCoordsArray(params.data);
+        if (result.flatCoords) {
+            if (!this._flatCoords) {
+                this._flatCoords = result.flatCoords;
+                this._flatCoordsOffset = result.flatCoordsOffset;
+            }
+            else {
+                this._flatCoords = concatArray(this._flatCoords, result.flatCoords);
+                this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);
+            }
+            params.data = new Float32Array(result.count);
+        }
+
+        this.getRawData().appendData(params.data);
+    },
+
+    _getCoordsFromItemModel: function (idx) {
+        var itemModel = this.getData().getItemModel(idx);
+        var coords = (itemModel.option instanceof Array)
+            ? itemModel.option : itemModel.getShallow('coords');
+
+        if (__DEV__) {
+            if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) {
+                throw new Error('Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.');
+            }
+        }
+        return coords;
+    },
+
+    getLineCoordsCount: function (idx) {
+        if (this._flatCoordsOffset) {
+            return this._flatCoordsOffset[idx * 2 + 1];
+        }
+        else {
+            return this._getCoordsFromItemModel(idx).length;
+        }
+    },
+
+    getLineCoords: function (idx, out) {
+        if (this._flatCoordsOffset) {
+            var offset = this._flatCoordsOffset[idx * 2];
+            var len = this._flatCoordsOffset[idx * 2 + 1];
+            for (var i = 0; i < len; i++) {
+                out[i] = out[i] || [];
+                out[i][0] = this._flatCoords[offset + i * 2];
+                out[i][1] = this._flatCoords[offset + i * 2 + 1];
+            }
+            return len;
+        }
+        else {
+            var coords = this._getCoordsFromItemModel(idx);
+            for (var i = 0; i < coords.length; i++) {
+                out[i] = out[i] || [];
+                out[i][0] = coords[i][0];
+                out[i][1] = coords[i][1];
+            }
+            return coords.length;
+        }
+    },
+
+    _processFlatCoordsArray: function (data) {
+        var startOffset = 0;
+        if (this._flatCoords) {
+            startOffset = this._flatCoords.length;
+        }
+        // Stored as a typed array. In format
+        // Points Count(2) | x | y | x | y | Points Count(3) | x |  y | x | y | x | y |
+        if (typeof data[0] === 'number') {
+            var len = data.length;
+            // Store offset and len of each segment
+            var coordsOffsetAndLenStorage = new Uint32Arr(len);
+            var coordsStorage = new Float64Arr(len);
+            var coordsCursor = 0;
+            var offsetCursor = 0;
+            var dataCount = 0;
+            for (var i = 0; i < len;) {
+                dataCount++;
+                var count = data[i++];
+                // Offset
+                coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset;
+                // Len
+                coordsOffsetAndLenStorage[offsetCursor++] = count;
+                for (var k = 0; k < count; k++) {
+                    var x = data[i++];
+                    var y = data[i++];
+                    coordsStorage[coordsCursor++] = x;
+                    coordsStorage[coordsCursor++] = y;
+
+                    if (i > len) {
+                        if (__DEV__) {
+                            throw new Error('Invalid data format.');
+                        }
+                    }
+                }
+            }
+
+            return {
+                flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor),
+                flatCoords: coordsStorage,
+                count: dataCount
+            };
+        }
+
+        return {
+            flatCoordsOffset: null,
+            flatCoords: null,
+            count: data.length
+        };
+    },
+
+    getInitialData: function (option, ecModel) {
+        if (__DEV__) {
+            var CoordSys = CoordinateSystemManager.get(option.coordinateSystem);
+            if (!CoordSys) {
+                throw new Error('Unkown coordinate system ' + option.coordinateSystem);
+            }
+        }
+
+        var lineData = new List(['value'], this);
+        lineData.hasItemOption = false;
+
+        lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {
+            // dataItem is simply coords
+            if (dataItem instanceof Array) {
+                return NaN;
+            }
+            else {
+                lineData.hasItemOption = true;
+                var value = dataItem.value;
+                if (value != null) {
+                    return value instanceof Array ? value[dimIndex] : value;
+                }
+            }
+        });
+
+        return lineData;
+    },
+
+    formatTooltip: function (dataIndex) {
+        var data = this.getData();
+        var itemModel = data.getItemModel(dataIndex);
+        var name = itemModel.get('name');
+        if (name) {
+            return name;
+        }
+        var fromName = itemModel.get('fromName');
+        var toName = itemModel.get('toName');
+        var html = [];
+        fromName != null && html.push(fromName);
+        toName != null && html.push(toName);
+
+        return encodeHTML(html.join(' > '));
+    },
+
+    preventIncremental: function () {
+        return !!this.get('effect.show');
+    },
+
+    getProgressive: function () {
+        var progressive = this.option.progressive;
+        if (progressive == null) {
+            return this.option.large ? 1e4 : this.get('progressive');
+        }
+        return progressive;
+    },
+
+    getProgressiveThreshold: function () {
+        var progressiveThreshold = this.option.progressiveThreshold;
+        if (progressiveThreshold == null) {
+            return this.option.large ? 2e4 : this.get('progressiveThreshold');
+        }
+        return progressiveThreshold;
+    },
+
+    defaultOption: {
+        coordinateSystem: 'geo',
+        zlevel: 0,
+        z: 2,
+        legendHoverLink: true,
+
+        hoverAnimation: true,
+        // Cartesian coordinate system
+        xAxisIndex: 0,
+        yAxisIndex: 0,
+
+        symbol: ['none', 'none'],
+        symbolSize: [10, 10],
+        // Geo coordinate system
+        geoIndex: 0,
+
+        effect: {
+            show: false,
+            period: 4,
+            // Animation delay. support callback
+            // delay: 0,
+            // If move with constant speed px/sec
+            // period will be ignored if this property is > 0,
+            constantSpeed: 0,
+            symbol: 'circle',
+            symbolSize: 3,
+            loop: true,
+            // Length of trail, 0 - 1
+            trailLength: 0.2
+            // Same with lineStyle.color
+            // color
+        },
+
+        large: false,
+        // Available when large is true
+        largeThreshold: 2000,
+
+        // If lines are polyline
+        // polyline not support curveness, label, animation
+        polyline: false,
+
+        label: {
+            show: false,
+            position: 'end'
+            // distance: 5,
+            // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调
+        },
+
+        lineStyle: {
+            opacity: 0.5
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Provide effect for line
+ * @module echarts/chart/helper/EffectLine
+ */
+
+/**
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ * @alias {module:echarts/chart/helper/Line}
+ */
+function EffectLine(lineData, idx, seriesScope) {
+    Group.call(this);
+
+    this.add(this.createLine(lineData, idx, seriesScope));
+
+    this._updateEffectSymbol(lineData, idx);
+}
+
+var effectLineProto = EffectLine.prototype;
+
+effectLineProto.createLine = function (lineData, idx, seriesScope) {
+    return new Line$1(lineData, idx, seriesScope);
+};
+
+effectLineProto._updateEffectSymbol = function (lineData, idx) {
+    var itemModel = lineData.getItemModel(idx);
+    var effectModel = itemModel.getModel('effect');
+    var size = effectModel.get('symbolSize');
+    var symbolType = effectModel.get('symbol');
+    if (!isArray(size)) {
+        size = [size, size];
+    }
+    var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');
+    var symbol = this.childAt(1);
+
+    if (this._symbolType !== symbolType) {
+        // Remove previous
+        this.remove(symbol);
+
+        symbol = createSymbol(
+            symbolType, -0.5, -0.5, 1, 1, color
+        );
+        symbol.z2 = 100;
+        symbol.culling = true;
+
+        this.add(symbol);
+    }
+
+    // Symbol may be removed if loop is false
+    if (!symbol) {
+        return;
+    }
+
+    // Shadow color is same with color in default
+    symbol.setStyle('shadowColor', color);
+    symbol.setStyle(effectModel.getItemStyle(['color']));
+
+    symbol.attr('scale', size);
+
+    symbol.setColor(color);
+    symbol.attr('scale', size);
+
+    this._symbolType = symbolType;
+
+    this._updateEffectAnimation(lineData, effectModel, idx);
+};
+
+effectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) {
+
+    var symbol = this.childAt(1);
+    if (!symbol) {
+        return;
+    }
+
+    var self = this;
+
+    var points = lineData.getItemLayout(idx);
+
+    var period = effectModel.get('period') * 1000;
+    var loop = effectModel.get('loop');
+    var constantSpeed = effectModel.get('constantSpeed');
+    var delayExpr = retrieve(effectModel.get('delay'), function (idx) {
+        return idx / lineData.count() * period / 3;
+    });
+    var isDelayFunc = typeof delayExpr === 'function';
+
+    // Ignore when updating
+    symbol.ignore = true;
+
+    this.updateAnimationPoints(symbol, points);
+
+    if (constantSpeed > 0) {
+        period = this.getLineLength(symbol) / constantSpeed * 1000;
+    }
+
+    if (period !== this._period || loop !== this._loop) {
+
+        symbol.stopAnimation();
+
+        var delay = delayExpr;
+        if (isDelayFunc) {
+            delay = delayExpr(idx);
+        }
+        if (symbol.__t > 0) {
+            delay = -period * symbol.__t;
+        }
+        symbol.__t = 0;
+        var animator = symbol.animate('', loop)
+            .when(period, {
+                __t: 1
+            })
+            .delay(delay)
+            .during(function () {
+                self.updateSymbolPosition(symbol);
+            });
+        if (!loop) {
+            animator.done(function () {
+                self.remove(symbol);
+            });
+        }
+        animator.start();
+    }
+
+    this._period = period;
+    this._loop = loop;
+};
+
+effectLineProto.getLineLength = function (symbol) {
+    // Not so accurate
+    return (dist(symbol.__p1, symbol.__cp1)
+        + dist(symbol.__cp1, symbol.__p2));
+};
+
+effectLineProto.updateAnimationPoints = function (symbol, points) {
+    symbol.__p1 = points[0];
+    symbol.__p2 = points[1];
+    symbol.__cp1 = points[2] || [
+        (points[0][0] + points[1][0]) / 2,
+        (points[0][1] + points[1][1]) / 2
+    ];
+};
+
+effectLineProto.updateData = function (lineData, idx, seriesScope) {
+    this.childAt(0).updateData(lineData, idx, seriesScope);
+    this._updateEffectSymbol(lineData, idx);
+};
+
+effectLineProto.updateSymbolPosition = function (symbol) {
+    var p1 = symbol.__p1;
+    var p2 = symbol.__p2;
+    var cp1 = symbol.__cp1;
+    var t = symbol.__t;
+    var pos = symbol.position;
+    var quadraticAt$$1 = quadraticAt;
+    var quadraticDerivativeAt$$1 = quadraticDerivativeAt;
+    pos[0] = quadraticAt$$1(p1[0], cp1[0], p2[0], t);
+    pos[1] = quadraticAt$$1(p1[1], cp1[1], p2[1], t);
+
+    // Tangent
+    var tx = quadraticDerivativeAt$$1(p1[0], cp1[0], p2[0], t);
+    var ty = quadraticDerivativeAt$$1(p1[1], cp1[1], p2[1], t);
+
+    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
+
+    symbol.ignore = false;
+};
+
+
+effectLineProto.updateLayout = function (lineData, idx) {
+    this.childAt(0).updateLayout(lineData, idx);
+
+    var effectModel = lineData.getItemModel(idx).getModel('effect');
+    this._updateEffectAnimation(lineData, effectModel, idx);
+};
+
+inherits(EffectLine, Group);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/chart/helper/Line
+ */
+
+/**
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ * @alias {module:echarts/chart/helper/Polyline}
+ */
+function Polyline$2(lineData, idx, seriesScope) {
+    Group.call(this);
+
+    this._createPolyline(lineData, idx, seriesScope);
+}
+
+var polylineProto = Polyline$2.prototype;
+
+polylineProto._createPolyline = function (lineData, idx, seriesScope) {
+    // var seriesModel = lineData.hostModel;
+    var points = lineData.getItemLayout(idx);
+
+    var line = new Polyline({
+        shape: {
+            points: points
+        }
+    });
+
+    this.add(line);
+
+    this._updateCommonStl(lineData, idx, seriesScope);
+};
+
+polylineProto.updateData = function (lineData, idx, seriesScope) {
+    var seriesModel = lineData.hostModel;
+
+    var line = this.childAt(0);
+    var target = {
+        shape: {
+            points: lineData.getItemLayout(idx)
+        }
+    };
+    updateProps(line, target, seriesModel, idx);
+
+    this._updateCommonStl(lineData, idx, seriesScope);
+};
+
+polylineProto._updateCommonStl = function (lineData, idx, seriesScope) {
+    var line = this.childAt(0);
+    var itemModel = lineData.getItemModel(idx);
+
+    var visualColor = lineData.getItemVisual(idx, 'color');
+
+    var lineStyle = seriesScope && seriesScope.lineStyle;
+    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;
+
+    if (!seriesScope || lineData.hasItemOption) {
+        lineStyle = itemModel.getModel('lineStyle').getLineStyle();
+        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();
+    }
+    line.useStyle(defaults(
+        {
+            strokeNoScale: true,
+            fill: 'none',
+            stroke: visualColor
+        },
+        lineStyle
+    ));
+    line.hoverStyle = hoverLineStyle;
+
+    setHoverStyle(this);
+};
+
+polylineProto.updateLayout = function (lineData, idx) {
+    var polyline = this.childAt(0);
+    polyline.setShape('points', lineData.getItemLayout(idx));
+};
+
+inherits(Polyline$2, Group);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Provide effect for line
+ * @module echarts/chart/helper/EffectLine
+ */
+
+/**
+ * @constructor
+ * @extends {module:echarts/chart/helper/EffectLine}
+ * @alias {module:echarts/chart/helper/Polyline}
+ */
+function EffectPolyline(lineData, idx, seriesScope) {
+    EffectLine.call(this, lineData, idx, seriesScope);
+    this._lastFrame = 0;
+    this._lastFramePercent = 0;
+}
+
+var effectPolylineProto = EffectPolyline.prototype;
+
+// Overwrite
+effectPolylineProto.createLine = function (lineData, idx, seriesScope) {
+    return new Polyline$2(lineData, idx, seriesScope);
+};
+
+// Overwrite
+effectPolylineProto.updateAnimationPoints = function (symbol, points) {
+    this._points = points;
+    var accLenArr = [0];
+    var len$$1 = 0;
+    for (var i = 1; i < points.length; i++) {
+        var p1 = points[i - 1];
+        var p2 = points[i];
+        len$$1 += dist(p1, p2);
+        accLenArr.push(len$$1);
+    }
+    if (len$$1 === 0) {
+        return;
+    }
+
+    for (var i = 0; i < accLenArr.length; i++) {
+        accLenArr[i] /= len$$1;
+    }
+    this._offsets = accLenArr;
+    this._length = len$$1;
+};
+
+// Overwrite
+effectPolylineProto.getLineLength = function (symbol) {
+    return this._length;
+};
+
+// Overwrite
+effectPolylineProto.updateSymbolPosition = function (symbol) {
+    var t = symbol.__t;
+    var points = this._points;
+    var offsets = this._offsets;
+    var len$$1 = points.length;
+
+    if (!offsets) {
+        // Has length 0
+        return;
+    }
+
+    var lastFrame = this._lastFrame;
+    var frame;
+
+    if (t < this._lastFramePercent) {
+        // Start from the next frame
+        // PENDING start from lastFrame ?
+        var start = Math.min(lastFrame + 1, len$$1 - 1);
+        for (frame = start; frame >= 0; frame--) {
+            if (offsets[frame] <= t) {
+                break;
+            }
+        }
+        // PENDING really need to do this ?
+        frame = Math.min(frame, len$$1 - 2);
+    }
+    else {
+        for (var frame = lastFrame; frame < len$$1; frame++) {
+            if (offsets[frame] > t) {
+                break;
+            }
+        }
+        frame = Math.min(frame - 1, len$$1 - 2);
+    }
+
+    lerp(
+        symbol.position, points[frame], points[frame + 1],
+        (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame])
+    );
+
+    var tx = points[frame + 1][0] - points[frame][0];
+    var ty = points[frame + 1][1] - points[frame][1];
+    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
+
+    this._lastFrame = frame;
+    this._lastFramePercent = t;
+
+    symbol.ignore = false;
+};
+
+inherits(EffectPolyline, EffectLine);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO Batch by color
+
+var LargeLineShape = extendShape({
+
+    shape: {
+        polyline: false,
+        curveness: 0,
+        segs: []
+    },
+
+    buildPath: function (path, shape) {
+        var segs = shape.segs;
+        var curveness = shape.curveness;
+
+        if (shape.polyline) {
+            for (var i = 0; i < segs.length;) {
+                var count = segs[i++];
+                if (count > 0) {
+                    path.moveTo(segs[i++], segs[i++]);
+                    for (var k = 1; k < count; k++) {
+                        path.lineTo(segs[i++], segs[i++]);
+                    }
+                }
+            }
+        }
+        else {
+            for (var i = 0; i < segs.length;) {
+                var x0 = segs[i++];
+                var y0 = segs[i++];
+                var x1 = segs[i++];
+                var y1 = segs[i++];
+                path.moveTo(x0, y0);
+                if (curveness > 0) {
+                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
+                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
+                    path.quadraticCurveTo(x2, y2, x1, y1);
+                }
+                else {
+                    path.lineTo(x1, y1);
+                }
+            }
+        }
+    },
+
+    findDataIndex: function (x, y) {
+
+        var shape = this.shape;
+        var segs = shape.segs;
+        var curveness = shape.curveness;
+
+        if (shape.polyline) {
+            var dataIndex = 0;
+            for (var i = 0; i < segs.length;) {
+                var count = segs[i++];
+                if (count > 0) {
+                    var x0 = segs[i++];
+                    var y0 = segs[i++];
+                    for (var k = 1; k < count; k++) {
+                        var x1 = segs[i++];
+                        var y1 = segs[i++];
+                        if (containStroke$1(x0, y0, x1, y1)) {
+                            return dataIndex;
+                        }
+                    }
+                }
+
+                dataIndex++;
+            }
+        }
+        else {
+            var dataIndex = 0;
+            for (var i = 0; i < segs.length;) {
+                var x0 = segs[i++];
+                var y0 = segs[i++];
+                var x1 = segs[i++];
+                var y1 = segs[i++];
+                if (curveness > 0) {
+                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;
+                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;
+
+                    if (containStroke$3(x0, y0, x2, y2, x1, y1)) {
+                        return dataIndex;
+                    }
+                }
+                else {
+                    if (containStroke$1(x0, y0, x1, y1)) {
+                        return dataIndex;
+                    }
+                }
+
+                dataIndex++;
+            }
+        }
+
+        return -1;
+    }
+});
+
+function LargeLineDraw() {
+    this.group = new Group();
+}
+
+var largeLineProto = LargeLineDraw.prototype;
+
+largeLineProto.isPersistent = function () {
+    return !this._incremental;
+};
+
+/**
+ * Update symbols draw by new data
+ * @param {module:echarts/data/List} data
+ */
+largeLineProto.updateData = function (data) {
+    this.group.removeAll();
+
+    var lineEl = new LargeLineShape({
+        rectHover: true,
+        cursor: 'default'
+    });
+    lineEl.setShape({
+        segs: data.getLayout('linesPoints')
+    });
+
+    this._setCommon(lineEl, data);
+
+    // Add back
+    this.group.add(lineEl);
+
+    this._incremental = null;
+};
+
+/**
+ * @override
+ */
+largeLineProto.incrementalPrepareUpdate = function (data) {
+    this.group.removeAll();
+
+    this._clearIncremental();
+
+    if (data.count() > 5e5) {
+        if (!this._incremental) {
+            this._incremental = new IncrementalDisplayble({
+                silent: true
+            });
+        }
+        this.group.add(this._incremental);
+    }
+    else {
+        this._incremental = null;
+    }
+};
+
+/**
+ * @override
+ */
+largeLineProto.incrementalUpdate = function (taskParams, data) {
+    var lineEl = new LargeLineShape();
+    lineEl.setShape({
+        segs: data.getLayout('linesPoints')
+    });
+
+    this._setCommon(lineEl, data, !!this._incremental);
+
+    if (!this._incremental) {
+        lineEl.rectHover = true;
+        lineEl.cursor = 'default';
+        lineEl.__startIndex = taskParams.start;
+        this.group.add(lineEl);
+    }
+    else {
+        this._incremental.addDisplayable(lineEl, true);
+    }
+};
+
+/**
+ * @override
+ */
+largeLineProto.remove = function () {
+    this._clearIncremental();
+    this._incremental = null;
+    this.group.removeAll();
+};
+
+largeLineProto._setCommon = function (lineEl, data, isIncremental) {
+    var hostModel = data.hostModel;
+
+    lineEl.setShape({
+        polyline: hostModel.get('polyline'),
+        curveness: hostModel.get('lineStyle.curveness')
+    });
+
+    lineEl.useStyle(
+        hostModel.getModel('lineStyle').getLineStyle()
+    );
+    lineEl.style.strokeNoScale = true;
+
+    var visualColor = data.getVisual('color');
+    if (visualColor) {
+        lineEl.setStyle('stroke', visualColor);
+    }
+    lineEl.setStyle('fill');
+
+    if (!isIncremental) {
+        // Enable tooltip
+        // PENDING May have performance issue when path is extremely large
+        lineEl.seriesIndex = hostModel.seriesIndex;
+        lineEl.on('mousemove', function (e) {
+            lineEl.dataIndex = null;
+            var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);
+            if (dataIndex > 0) {
+                // Provide dataIndex for tooltip
+                lineEl.dataIndex = dataIndex + lineEl.__startIndex;
+            }
+        });
+    }
+};
+
+largeLineProto._clearIncremental = function () {
+    var incremental = this._incremental;
+    if (incremental) {
+        incremental.clearDisplaybles();
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var linesLayout = {
+    seriesType: 'lines',
+
+    plan: createRenderPlanner(),
+
+    reset: function (seriesModel) {
+        var coordSys = seriesModel.coordinateSystem;
+        var isPolyline = seriesModel.get('polyline');
+        var isLarge = seriesModel.pipelineContext.large;
+
+        function progress(params, lineData) {
+            var lineCoords = [];
+            if (isLarge) {
+                var points;
+                var segCount = params.end - params.start;
+                if (isPolyline) {
+                    var totalCoordsCount = 0;
+                    for (var i = params.start; i < params.end; i++) {
+                        totalCoordsCount += seriesModel.getLineCoordsCount(i);
+                    }
+                    points = new Float32Array(segCount + totalCoordsCount * 2);
+                }
+                else {
+                    points = new Float32Array(segCount * 4);
+                }
+
+                var offset = 0;
+                var pt = [];
+                for (var i = params.start; i < params.end; i++) {
+                    var len = seriesModel.getLineCoords(i, lineCoords);
+                    if (isPolyline) {
+                        points[offset++] = len;
+                    }
+                    for (var k = 0; k < len; k++) {
+                        pt = coordSys.dataToPoint(lineCoords[k], false, pt);
+                        points[offset++] = pt[0];
+                        points[offset++] = pt[1];
+                    }
+                }
+
+                lineData.setLayout('linesPoints', points);
+            }
+            else {
+                for (var i = params.start; i < params.end; i++) {
+                    var itemModel = lineData.getItemModel(i);
+                    var len = seriesModel.getLineCoords(i, lineCoords);
+
+                    var pts = [];
+                    if (isPolyline) {
+                        for (var j = 0; j < len; j++) {
+                            pts.push(coordSys.dataToPoint(lineCoords[j]));
+                        }
+                    }
+                    else {
+                        pts[0] = coordSys.dataToPoint(lineCoords[0]);
+                        pts[1] = coordSys.dataToPoint(lineCoords[1]);
+
+                        var curveness = itemModel.get('lineStyle.curveness');
+                        if (+curveness) {
+                            pts[2] = [
+                                (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness,
+                                (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness
+                            ];
+                        }
+                    }
+                    lineData.setItemLayout(i, pts);
+                }
+            }
+        }
+
+        return { progress: progress };
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendChartView({
+
+    type: 'lines',
+
+    init: function () {},
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+
+        var lineDraw = this._updateLineDraw(data, seriesModel);
+
+        var zlevel = seriesModel.get('zlevel');
+        var trailLength = seriesModel.get('effect.trailLength');
+
+        var zr = api.getZr();
+        // Avoid the drag cause ghost shadow
+        // FIXME Better way ?
+        // SVG doesn't support
+        var isSvg = zr.painter.getType() === 'svg';
+        if (!isSvg) {
+            zr.painter.getLayer(zlevel).clear(true);
+        }
+        // Config layer with motion blur
+        if (this._lastZlevel != null && !isSvg) {
+            zr.configLayer(this._lastZlevel, {
+                motionBlur: false
+            });
+        }
+        if (this._showEffect(seriesModel) && trailLength) {
+            if (__DEV__) {
+                var notInIndividual = false;
+                ecModel.eachSeries(function (otherSeriesModel) {
+                    if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) {
+                        notInIndividual = true;
+                    }
+                });
+                notInIndividual && console.warn('Lines with trail effect should have an individual zlevel');
+            }
+
+            if (!isSvg) {
+                zr.configLayer(zlevel, {
+                    motionBlur: true,
+                    lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)
+                });
+            }
+        }
+
+        lineDraw.updateData(data);
+
+        this._lastZlevel = zlevel;
+
+        this._finished = true;
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+
+        var lineDraw = this._updateLineDraw(data, seriesModel);
+
+        lineDraw.incrementalPrepareUpdate(data);
+
+        this._clearLayer(api);
+
+        this._finished = false;
+    },
+
+    incrementalRender: function (taskParams, seriesModel, ecModel) {
+        this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());
+
+        this._finished = taskParams.end === seriesModel.getData().count();
+    },
+
+    updateTransform: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+        var pipelineContext = seriesModel.pipelineContext;
+
+        if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {
+            // TODO Don't have to do update in large mode. Only do it when there are millions of data.
+            return {
+                update: true
+            };
+        }
+        else {
+            // TODO Use same logic with ScatterView.
+            // Manually update layout
+            var res = linesLayout.reset(seriesModel);
+            if (res.progress) {
+                res.progress({ start: 0, end: data.count() }, data);
+            }
+            this._lineDraw.updateLayout();
+            this._clearLayer(api);
+        }
+    },
+
+    _updateLineDraw: function (data, seriesModel) {
+        var lineDraw = this._lineDraw;
+        var hasEffect = this._showEffect(seriesModel);
+        var isPolyline = !!seriesModel.get('polyline');
+        var pipelineContext = seriesModel.pipelineContext;
+        var isLargeDraw = pipelineContext.large;
+
+        if (__DEV__) {
+            if (hasEffect && isLargeDraw) {
+                console.warn('Large lines not support effect');
+            }
+        }
+        if (!lineDraw
+            || hasEffect !== this._hasEffet
+            || isPolyline !== this._isPolyline
+            || isLargeDraw !== this._isLargeDraw
+        ) {
+            if (lineDraw) {
+                lineDraw.remove();
+            }
+            lineDraw = this._lineDraw = isLargeDraw
+                ? new LargeLineDraw()
+                : new LineDraw(
+                    isPolyline
+                        ? (hasEffect ? EffectPolyline : Polyline$2)
+                        : (hasEffect ? EffectLine : Line$1)
+                );
+            this._hasEffet = hasEffect;
+            this._isPolyline = isPolyline;
+            this._isLargeDraw = isLargeDraw;
+            this.group.removeAll();
+        }
+
+        this.group.add(lineDraw.group);
+
+        return lineDraw;
+    },
+
+    _showEffect: function (seriesModel) {
+        return !!seriesModel.get('effect.show');
+    },
+
+    _clearLayer: function (api) {
+        // Not use motion when dragging or zooming
+        var zr = api.getZr();
+        var isSvg = zr.painter.getType() === 'svg';
+        if (!isSvg && this._lastZlevel != null) {
+            zr.painter.getLayer(this._lastZlevel).clear(true);
+        }
+    },
+
+    remove: function (ecModel, api) {
+        this._lineDraw && this._lineDraw.remove();
+        this._lineDraw = null;
+        // Clear motion when lineDraw is removed
+        this._clearLayer(api);
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+function normalize$2(a) {
+    if (!(a instanceof Array)) {
+        a = [a, a];
+    }
+    return a;
+}
+
+var opacityQuery = 'lineStyle.opacity'.split('.');
+
+var linesVisual = {
+    seriesType: 'lines',
+    reset: function (seriesModel, ecModel, api) {
+        var symbolType = normalize$2(seriesModel.get('symbol'));
+        var symbolSize = normalize$2(seriesModel.get('symbolSize'));
+        var data = seriesModel.getData();
+
+        data.setVisual('fromSymbol', symbolType && symbolType[0]);
+        data.setVisual('toSymbol', symbolType && symbolType[1]);
+        data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);
+        data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);
+        data.setVisual('opacity', seriesModel.get(opacityQuery));
+
+        function dataEach(data, idx) {
+            var itemModel = data.getItemModel(idx);
+            var symbolType = normalize$2(itemModel.getShallow('symbol', true));
+            var symbolSize = normalize$2(itemModel.getShallow('symbolSize', true));
+            var opacity = itemModel.get(opacityQuery);
+
+            symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);
+            symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);
+            symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);
+            symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);
+
+            data.setItemVisual(idx, 'opacity', opacity);
+        }
+
+        return {dataEach: data.hasItemOption ? dataEach : null};
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerLayout(linesLayout);
+registerVisual(linesVisual);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+    type: 'series.heatmap',
+
+    getInitialData: function (option, ecModel) {
+        return createListFromArray(this.getSource(), this, {
+            generateCoord: 'value'
+        });
+    },
+
+    preventIncremental: function () {
+        var coordSysCreator = CoordinateSystemManager.get(this.get('coordinateSystem'));
+        if (coordSysCreator && coordSysCreator.dimensions) {
+            return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat';
+        }
+    },
+
+    defaultOption: {
+
+        // Cartesian2D or geo
+        coordinateSystem: 'cartesian2d',
+
+        zlevel: 0,
+
+        z: 2,
+
+        // Cartesian coordinate system
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // Geo coordinate system
+        geoIndex: 0,
+
+        blurSize: 30,
+
+        pointSize: 20,
+
+        maxOpacity: 1,
+
+        minOpacity: 0
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file defines echarts Heatmap Chart
+ * @author Ovilia (me@zhangwenli.com)
+ * Inspired by https://github.com/mourner/simpleheat
+ *
+ * @module
+ */
+
+var GRADIENT_LEVELS = 256;
+
+/**
+ * Heatmap Chart
+ *
+ * @class
+ */
+function Heatmap() {
+    var canvas = createCanvas();
+    this.canvas = canvas;
+
+    this.blurSize = 30;
+    this.pointSize = 20;
+
+    this.maxOpacity = 1;
+    this.minOpacity = 0;
+
+    this._gradientPixels = {};
+}
+
+Heatmap.prototype = {
+    /**
+     * Renders Heatmap and returns the rendered canvas
+     * @param {Array} data array of data, each has x, y, value
+     * @param {number} width canvas width
+     * @param {number} height canvas height
+     */
+    update: function(data, width, height, normalize, colorFunc, isInRange) {
+        var brush = this._getBrush();
+        var gradientInRange = this._getGradient(data, colorFunc, 'inRange');
+        var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');
+        var r = this.pointSize + this.blurSize;
+
+        var canvas = this.canvas;
+        var ctx = canvas.getContext('2d');
+        var len = data.length;
+        canvas.width = width;
+        canvas.height = height;
+        for (var i = 0; i < len; ++i) {
+            var p = data[i];
+            var x = p[0];
+            var y = p[1];
+            var value = p[2];
+
+            // calculate alpha using value
+            var alpha = normalize(value);
+
+            // draw with the circle brush with alpha
+            ctx.globalAlpha = alpha;
+            ctx.drawImage(brush, x - r, y - r);
+        }
+
+        if (!canvas.width || !canvas.height) {
+            // Avoid "Uncaught DOMException: Failed to execute 'getImageData' on
+            // 'CanvasRenderingContext2D': The source height is 0."
+            return canvas;
+        }
+
+        // colorize the canvas using alpha value and set with gradient
+        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+
+        var pixels = imageData.data;
+        var offset = 0;
+        var pixelLen = pixels.length;
+        var minOpacity = this.minOpacity;
+        var maxOpacity = this.maxOpacity;
+        var diffOpacity = maxOpacity - minOpacity;
+
+        while(offset < pixelLen) {
+            var alpha = pixels[offset + 3] / 256;
+            var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;
+            // Simple optimize to ignore the empty data
+            if (alpha > 0) {
+                var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;
+                // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]
+                alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);
+                pixels[offset++] = gradient[gradientOffset];
+                pixels[offset++] = gradient[gradientOffset + 1];
+                pixels[offset++] = gradient[gradientOffset + 2];
+                pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256;
+            }
+            else {
+                offset += 4;
+            }
+        }
+        ctx.putImageData(imageData, 0, 0);
+
+        return canvas;
+    },
+
+    /**
+     * get canvas of a black circle brush used for canvas to draw later
+     * @private
+     * @returns {Object} circle brush canvas
+     */
+    _getBrush: function() {
+        var brushCanvas = this._brushCanvas || (this._brushCanvas = createCanvas());
+        // set brush size
+        var r = this.pointSize + this.blurSize;
+        var d = r * 2;
+        brushCanvas.width = d;
+        brushCanvas.height = d;
+
+        var ctx = brushCanvas.getContext('2d');
+        ctx.clearRect(0, 0, d, d);
+
+        // in order to render shadow without the distinct circle,
+        // draw the distinct circle in an invisible place,
+        // and use shadowOffset to draw shadow in the center of the canvas
+        ctx.shadowOffsetX = d;
+        ctx.shadowBlur = this.blurSize;
+        // draw the shadow in black, and use alpha and shadow blur to generate
+        // color in color map
+        ctx.shadowColor = '#000';
+
+        // draw circle in the left to the canvas
+        ctx.beginPath();
+        ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);
+        ctx.closePath();
+        ctx.fill();
+        return brushCanvas;
+    },
+
+    /**
+     * get gradient color map
+     * @private
+     */
+    _getGradient: function (data, colorFunc, state) {
+        var gradientPixels = this._gradientPixels;
+        var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));
+        var color = [0, 0, 0, 0];
+        var off = 0;
+        for (var i = 0; i < 256; i++) {
+            colorFunc[state](i / 255, true, color);
+            pixelsSingleState[off++] = color[0];
+            pixelsSingleState[off++] = color[1];
+            pixelsSingleState[off++] = color[2];
+            pixelsSingleState[off++] = color[3];
+        }
+        return pixelsSingleState;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function getIsInPiecewiseRange(dataExtent, pieceList, selected) {
+    var dataSpan = dataExtent[1] - dataExtent[0];
+    pieceList = map(pieceList, function (piece) {
+        return {
+            interval: [
+                (piece.interval[0] - dataExtent[0]) / dataSpan,
+                (piece.interval[1] - dataExtent[0]) / dataSpan
+            ]
+        };
+    });
+    var len = pieceList.length;
+    var lastIndex = 0;
+
+    return function (val) {
+        // Try to find in the location of the last found
+        for (var i = lastIndex; i < len; i++) {
+            var interval = pieceList[i].interval;
+            if (interval[0] <= val && val <= interval[1]) {
+                lastIndex = i;
+                break;
+            }
+        }
+        if (i === len) { // Not found, back interation
+            for (var i = lastIndex - 1; i >= 0; i--) {
+                var interval = pieceList[i].interval;
+                if (interval[0] <= val && val <= interval[1]) {
+                    lastIndex = i;
+                    break;
+                }
+            }
+        }
+        return i >= 0 && i < len && selected[i];
+    };
+}
+
+function getIsInContinuousRange(dataExtent, range) {
+    var dataSpan = dataExtent[1] - dataExtent[0];
+    range = [
+        (range[0] - dataExtent[0]) / dataSpan,
+        (range[1] - dataExtent[0]) / dataSpan
+    ];
+    return function (val) {
+        return val >= range[0] && val <= range[1];
+    };
+}
+
+function isGeoCoordSys(coordSys) {
+    var dimensions = coordSys.dimensions;
+    // Not use coorSys.type === 'geo' because coordSys maybe extended
+    return dimensions[0] === 'lng' && dimensions[1] === 'lat';
+}
+
+extendChartView({
+
+    type: 'heatmap',
+
+    render: function (seriesModel, ecModel, api) {
+        var visualMapOfThisSeries;
+        ecModel.eachComponent('visualMap', function (visualMap) {
+            visualMap.eachTargetSeries(function (targetSeries) {
+                if (targetSeries === seriesModel) {
+                    visualMapOfThisSeries = visualMap;
+                }
+            });
+        });
+
+        if (__DEV__) {
+            if (!visualMapOfThisSeries) {
+                throw new Error('Heatmap must use with visualMap');
+            }
+        }
+
+        this.group.removeAll();
+
+        this._incrementalDisplayable = null;
+
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {
+            this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());
+        }
+        else if (isGeoCoordSys(coordSys)) {
+            this._renderOnGeo(
+                coordSys, seriesModel, visualMapOfThisSeries, api
+            );
+        }
+    },
+
+    incrementalPrepareRender: function (seriesModel, ecModel, api) {
+        this.group.removeAll();
+    },
+
+    incrementalRender: function (params, seriesModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys) {
+            this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);
+        }
+    },
+
+    _renderOnCartesianAndCalendar: function (seriesModel, api, start, end, incremental) {
+
+        var coordSys = seriesModel.coordinateSystem;
+        var width;
+        var height;
+
+        if (coordSys.type === 'cartesian2d') {
+            var xAxis = coordSys.getAxis('x');
+            var yAxis = coordSys.getAxis('y');
+
+            if (__DEV__) {
+                if (!(xAxis.type === 'category' && yAxis.type === 'category')) {
+                    throw new Error('Heatmap on cartesian must have two category axes');
+                }
+                if (!(xAxis.onBand && yAxis.onBand)) {
+                    throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');
+                }
+            }
+
+            width = xAxis.getBandWidth();
+            height = yAxis.getBandWidth();
+        }
+
+        var group = this.group;
+        var data = seriesModel.getData();
+
+        var itemStyleQuery = 'itemStyle';
+        var hoverItemStyleQuery = 'emphasis.itemStyle';
+        var labelQuery = 'label';
+        var hoverLabelQuery = 'emphasis.label';
+        var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']);
+        var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle();
+        var labelModel = seriesModel.getModel(labelQuery);
+        var hoverLabelModel = seriesModel.getModel(hoverLabelQuery);
+        var coordSysType = coordSys.type;
+
+
+        var dataDims = coordSysType === 'cartesian2d'
+            ? [
+                data.mapDimension('x'),
+                data.mapDimension('y'),
+                data.mapDimension('value')
+            ]
+            : [
+                data.mapDimension('time'),
+                data.mapDimension('value')
+            ];
+
+        for (var idx = start; idx < end; idx++) {
+            var rect;
+
+            if (coordSysType === 'cartesian2d') {
+                // Ignore empty data
+                if (isNaN(data.get(dataDims[2], idx))) {
+                    continue;
+                }
+
+                var point = coordSys.dataToPoint([
+                    data.get(dataDims[0], idx),
+                    data.get(dataDims[1], idx)
+                ]);
+
+                rect = new Rect({
+                    shape: {
+                        x: point[0] - width / 2,
+                        y: point[1] - height / 2,
+                        width: width,
+                        height: height
+                    },
+                    style: {
+                        fill: data.getItemVisual(idx, 'color'),
+                        opacity: data.getItemVisual(idx, 'opacity')
+                    }
+                });
+            }
+            else {
+                // Ignore empty data
+                if (isNaN(data.get(dataDims[1], idx))) {
+                    continue;
+                }
+
+                rect = new Rect({
+                    z2: 1,
+                    shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,
+                    style: {
+                        fill: data.getItemVisual(idx, 'color'),
+                        opacity: data.getItemVisual(idx, 'opacity')
+                    }
+                });
+            }
+
+            var itemModel = data.getItemModel(idx);
+
+            // Optimization for large datset
+            if (data.hasItemOption) {
+                style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);
+                hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();
+                labelModel = itemModel.getModel(labelQuery);
+                hoverLabelModel = itemModel.getModel(hoverLabelQuery);
+            }
+
+            var rawValue = seriesModel.getRawValue(idx);
+            var defaultText = '-';
+            if (rawValue && rawValue[2] != null) {
+                defaultText = rawValue[2];
+            }
+
+            setLabelStyle(
+                style, hoverStl, labelModel, hoverLabelModel,
+                {
+                    labelFetcher: seriesModel,
+                    labelDataIndex: idx,
+                    defaultText: defaultText,
+                    isRectText: true
+                }
+            );
+
+            rect.setStyle(style);
+            setHoverStyle(rect, data.hasItemOption ? hoverStl : extend({}, hoverStl));
+
+            rect.incremental = incremental;
+            // PENDING
+            if (incremental) {
+                // Rect must use hover layer if it's incremental.
+                rect.useHoverLayer = true;
+            }
+
+            group.add(rect);
+            data.setItemGraphicEl(idx, rect);
+        }
+    },
+
+    _renderOnGeo: function (geo, seriesModel, visualMapModel, api) {
+        var inRangeVisuals = visualMapModel.targetVisuals.inRange;
+        var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;
+        // if (!visualMapping) {
+        //     throw new Error('Data range must have color visuals');
+        // }
+
+        var data = seriesModel.getData();
+        var hmLayer = this._hmLayer || (this._hmLayer || new Heatmap());
+        hmLayer.blurSize = seriesModel.get('blurSize');
+        hmLayer.pointSize = seriesModel.get('pointSize');
+        hmLayer.minOpacity = seriesModel.get('minOpacity');
+        hmLayer.maxOpacity = seriesModel.get('maxOpacity');
+
+        var rect = geo.getViewRect().clone();
+        var roamTransform = geo.getRoamTransform();
+        rect.applyTransform(roamTransform);
+
+        // Clamp on viewport
+        var x = Math.max(rect.x, 0);
+        var y = Math.max(rect.y, 0);
+        var x2 = Math.min(rect.width + rect.x, api.getWidth());
+        var y2 = Math.min(rect.height + rect.y, api.getHeight());
+        var width = x2 - x;
+        var height = y2 - y;
+
+        var dims = [
+            data.mapDimension('lng'),
+            data.mapDimension('lat'),
+            data.mapDimension('value')
+        ];
+
+        var points = data.mapArray(dims, function (lng, lat, value) {
+            var pt = geo.dataToPoint([lng, lat]);
+            pt[0] -= x;
+            pt[1] -= y;
+            pt.push(value);
+            return pt;
+        });
+
+        var dataExtent = visualMapModel.getExtent();
+        var isInRange = visualMapModel.type === 'visualMap.continuous'
+            ? getIsInContinuousRange(dataExtent, visualMapModel.option.range)
+            : getIsInPiecewiseRange(
+                dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected
+            );
+
+        hmLayer.update(
+            points, width, height,
+            inRangeVisuals.color.getNormalizer(),
+            {
+                inRange: inRangeVisuals.color.getColorMapper(),
+                outOfRange: outOfRangeVisuals.color.getColorMapper()
+            },
+            isInRange
+        );
+        var img = new ZImage({
+            style: {
+                width: width,
+                height: height,
+                x: x,
+                y: y,
+                image: hmLayer.canvas
+            },
+            silent: true
+        });
+        this.group.add(img);
+    },
+
+    dispose: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PictorialBarSeries = BaseBarSeries.extend({
+
+    type: 'series.pictorialBar',
+
+    dependencies: ['grid'],
+
+    defaultOption: {
+        symbol: 'circle',     // Customized bar shape
+        symbolSize: null,     // Can be ['100%', '100%'], null means auto.
+        symbolRotate: null,
+
+        symbolPosition: null, // 'start' or 'end' or 'center', null means auto.
+        symbolOffset: null,
+        symbolMargin: null,   // start margin and end margin. Can be a number or a percent string.
+                                // Auto margin by defualt.
+        symbolRepeat: false,  // false/null/undefined, means no repeat.
+                                // Can be true, means auto calculate repeat times and cut by data.
+                                // Can be a number, specifies repeat times, and do not cut by data.
+                                // Can be 'fixed', means auto calculate repeat times but do not cut by data.
+        symbolRepeatDirection: 'end', // 'end' means from 'start' to 'end'.
+
+        symbolClip: false,
+        symbolBoundingData: null, // Can be 60 or -40 or [-40, 60]
+        symbolPatternSize: 400, // 400 * 400 px
+
+        barGap: '-100%',      // In most case, overlap is needed.
+
+        // z can be set in data item, which is z2 actually.
+
+        // Disable progressive
+        progressive: 0,
+        hoverAnimation: false // Open only when needed.
+    },
+
+    getInitialData: function (option) {
+        // Disable stack.
+        option.stack = null;
+        return PictorialBarSeries.superApply(this, 'getInitialData', arguments);
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var BAR_BORDER_WIDTH_QUERY$1 = ['itemStyle', 'borderWidth'];
+
+// index: +isHorizontal
+var LAYOUT_ATTRS = [
+    {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']},
+    {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']}
+];
+
+var pathForLineWidth = new Circle();
+
+var BarView$1 = extendChartView({
+
+    type: 'pictorialBar',
+
+    render: function (seriesModel, ecModel, api) {
+        var group = this.group;
+        var data = seriesModel.getData();
+        var oldData = this._data;
+
+        var cartesian = seriesModel.coordinateSystem;
+        var baseAxis = cartesian.getBaseAxis();
+        var isHorizontal = !!baseAxis.isHorizontal();
+        var coordSysRect = cartesian.grid.getRect();
+
+        var opt = {
+            ecSize: {width: api.getWidth(), height: api.getHeight()},
+            seriesModel: seriesModel,
+            coordSys: cartesian,
+            coordSysExtent: [
+                [coordSysRect.x, coordSysRect.x + coordSysRect.width],
+                [coordSysRect.y, coordSysRect.y + coordSysRect.height]
+            ],
+            isHorizontal: isHorizontal,
+            valueDim: LAYOUT_ATTRS[+isHorizontal],
+            categoryDim: LAYOUT_ATTRS[1 - isHorizontal]
+        };
+
+        data.diff(oldData)
+            .add(function (dataIndex) {
+                if (!data.hasValue(dataIndex)) {
+                    return;
+                }
+
+                var itemModel = getItemModel(data, dataIndex);
+                var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);
+
+                var bar = createBar(data, opt, symbolMeta);
+
+                data.setItemGraphicEl(dataIndex, bar);
+                group.add(bar);
+
+                updateCommon$1(bar, opt, symbolMeta);
+            })
+            .update(function (newIndex, oldIndex) {
+                var bar = oldData.getItemGraphicEl(oldIndex);
+
+                if (!data.hasValue(newIndex)) {
+                    group.remove(bar);
+                    return;
+                }
+
+                var itemModel = getItemModel(data, newIndex);
+                var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);
+
+                var pictorialShapeStr = getShapeStr(data, symbolMeta);
+                if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {
+                    group.remove(bar);
+                    data.setItemGraphicEl(newIndex, null);
+                    bar = null;
+                }
+
+                if (bar) {
+                    updateBar(bar, opt, symbolMeta);
+                }
+                else {
+                    bar = createBar(data, opt, symbolMeta, true);
+                }
+
+                data.setItemGraphicEl(newIndex, bar);
+                bar.__pictorialSymbolMeta = symbolMeta;
+                // Add back
+                group.add(bar);
+
+                updateCommon$1(bar, opt, symbolMeta);
+            })
+            .remove(function (dataIndex) {
+                var bar = oldData.getItemGraphicEl(dataIndex);
+                bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);
+            })
+            .execute();
+
+        this._data = data;
+
+        return this.group;
+    },
+
+    dispose: noop,
+
+    remove: function (ecModel, api) {
+        var group = this.group;
+        var data = this._data;
+        if (ecModel.get('animation')) {
+            if (data) {
+                data.eachItemGraphicEl(function (bar) {
+                    removeBar(data, bar.dataIndex, ecModel, bar);
+                });
+            }
+        }
+        else {
+            group.removeAll();
+        }
+    }
+});
+
+
+// Set or calculate default value about symbol, and calculate layout info.
+function getSymbolMeta(data, dataIndex, itemModel, opt) {
+    var layout = data.getItemLayout(dataIndex);
+    var symbolRepeat = itemModel.get('symbolRepeat');
+    var symbolClip = itemModel.get('symbolClip');
+    var symbolPosition = itemModel.get('symbolPosition') || 'start';
+    var symbolRotate = itemModel.get('symbolRotate');
+    var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
+    var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;
+    var isAnimationEnabled = itemModel.isAnimationEnabled();
+
+    var symbolMeta = {
+        dataIndex: dataIndex,
+        layout: layout,
+        itemModel: itemModel,
+        symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle',
+        color: data.getItemVisual(dataIndex, 'color'),
+        symbolClip: symbolClip,
+        symbolRepeat: symbolRepeat,
+        symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),
+        symbolPatternSize: symbolPatternSize,
+        rotation: rotation,
+        animationModel: isAnimationEnabled ? itemModel : null,
+        hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'),
+        z2: itemModel.getShallow('z', true) || 0
+    };
+
+    prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);
+
+    prepareSymbolSize(
+        data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength,
+        symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta
+    );
+
+    prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);
+
+    var symbolSize = symbolMeta.symbolSize;
+    var symbolOffset = itemModel.get('symbolOffset');
+    if (isArray(symbolOffset)) {
+        symbolOffset = [
+            parsePercent$1(symbolOffset[0], symbolSize[0]),
+            parsePercent$1(symbolOffset[1], symbolSize[1])
+        ];
+    }
+
+    prepareLayoutInfo(
+        itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,
+        symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength,
+        opt, symbolMeta
+    );
+
+    return symbolMeta;
+}
+
+// bar length can be negative.
+function prepareBarLength(itemModel, symbolRepeat, layout, opt, output) {
+    var valueDim = opt.valueDim;
+    var symbolBoundingData = itemModel.get('symbolBoundingData');
+    var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());
+    var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));
+    var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);
+    var boundingLength;
+
+    if (isArray(symbolBoundingData)) {
+        var symbolBoundingExtent = [
+            convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx,
+            convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx
+        ];
+        symbolBoundingExtent[1] < symbolBoundingExtent[0] && (symbolBoundingExtent.reverse());
+        boundingLength = symbolBoundingExtent[pxSignIdx];
+    }
+    else if (symbolBoundingData != null) {
+        boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;
+    }
+    else if (symbolRepeat) {
+        boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;
+    }
+    else {
+        boundingLength = layout[valueDim.wh];
+    }
+
+    output.boundingLength = boundingLength;
+
+    if (symbolRepeat) {
+        output.repeatCutLength = layout[valueDim.wh];
+    }
+
+    output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0;
+}
+
+function convertToCoordOnAxis(axis, value) {
+    return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));
+}
+
+// Support ['100%', '100%']
+function prepareSymbolSize(
+    data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength,
+    pxSign, symbolPatternSize, opt, output
+) {
+    var valueDim = opt.valueDim;
+    var categoryDim = opt.categoryDim;
+    var categorySize = Math.abs(layout[categoryDim.wh]);
+
+    var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');
+    if (isArray(symbolSize)) {
+        symbolSize = symbolSize.slice();
+    }
+    else {
+        if (symbolSize == null) {
+            symbolSize = '100%';
+        }
+        symbolSize = [symbolSize, symbolSize];
+    }
+
+    // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is
+    // to complicated to calculate real percent value if considering scaled lineWidth.
+    // So the actual size will bigger than layout size if lineWidth is bigger than zero,
+    // which can be tolerated in pictorial chart.
+
+    symbolSize[categoryDim.index] = parsePercent$1(
+        symbolSize[categoryDim.index],
+        categorySize
+    );
+    symbolSize[valueDim.index] = parsePercent$1(
+        symbolSize[valueDim.index],
+        symbolRepeat ? categorySize : Math.abs(boundingLength)
+    );
+
+    output.symbolSize = symbolSize;
+
+    // If x or y is less than zero, show reversed shape.
+    var symbolScale = output.symbolScale = [
+        symbolSize[0] / symbolPatternSize,
+        symbolSize[1] / symbolPatternSize
+    ];
+    // Follow convention, 'right' and 'top' is the normal scale.
+    symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;
+}
+
+function prepareLineWidth(itemModel, symbolScale, rotation, opt, output) {
+    // In symbols are drawn with scale, so do not need to care about the case that width
+    // or height are too small. But symbol use strokeNoScale, where acture lineWidth should
+    // be calculated.
+    var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY$1) || 0;
+
+    if (valueLineWidth) {
+        pathForLineWidth.attr({
+            scale: symbolScale.slice(),
+            rotation: rotation
+        });
+        pathForLineWidth.updateTransform();
+        valueLineWidth /= pathForLineWidth.getLineScale();
+        valueLineWidth *= symbolScale[opt.valueDim.index];
+    }
+
+    output.valueLineWidth = valueLineWidth;
+}
+
+function prepareLayoutInfo(
+    itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,
+    symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output
+) {
+    var categoryDim = opt.categoryDim;
+    var valueDim = opt.valueDim;
+    var pxSign = output.pxSign;
+
+    var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);
+    var pathLen = unitLength;
+
+    // Note: rotation will not effect the layout of symbols, because user may
+    // want symbols to rotate on its center, which should not be translated
+    // when rotating.
+
+    if (symbolRepeat) {
+        var absBoundingLength = Math.abs(boundingLength);
+
+        var symbolMargin = retrieve(itemModel.get('symbolMargin'), '15%') + '';
+        var hasEndGap = false;
+        if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {
+            hasEndGap = true;
+            symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);
+        }
+        symbolMargin = parsePercent$1(symbolMargin, symbolSize[valueDim.index]);
+
+        var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0);
+
+        // When symbol margin is less than 0, margin at both ends will be subtracted
+        // to ensure that all of the symbols will not be overflow the given area.
+        var endFix = hasEndGap ? 0 : symbolMargin * 2;
+
+        // Both final repeatTimes and final symbolMargin area calculated based on
+        // boundingLength.
+        var repeatSpecified = isNumeric(symbolRepeat);
+        var repeatTimes = repeatSpecified
+            ? symbolRepeat
+            : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);
+
+        // Adjust calculate margin, to ensure each symbol is displayed
+        // entirely in the given layout area.
+        var mDiff = absBoundingLength - repeatTimes * unitLength;
+        symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1);
+        uLenWithMargin = unitLength + symbolMargin * 2;
+        endFix = hasEndGap ? 0 : symbolMargin * 2;
+
+        // Update repeatTimes when not all symbol will be shown.
+        if (!repeatSpecified && symbolRepeat !== 'fixed') {
+            repeatTimes = repeatCutLength
+                ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin)
+                : 0;
+        }
+
+        pathLen = repeatTimes * uLenWithMargin - endFix;
+        output.repeatTimes = repeatTimes;
+        output.symbolMargin = symbolMargin;
+    }
+
+    var sizeFix = pxSign * (pathLen / 2);
+    var pathPosition = output.pathPosition = [];
+    pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;
+    pathPosition[valueDim.index] = symbolPosition === 'start'
+        ? sizeFix
+        : symbolPosition === 'end'
+        ? boundingLength - sizeFix
+        : boundingLength / 2; // 'center'
+    if (symbolOffset) {
+        pathPosition[0] += symbolOffset[0];
+        pathPosition[1] += symbolOffset[1];
+    }
+
+    var bundlePosition = output.bundlePosition = [];
+    bundlePosition[categoryDim.index] = layout[categoryDim.xy];
+    bundlePosition[valueDim.index] = layout[valueDim.xy];
+
+    var barRectShape = output.barRectShape = extend({}, layout);
+    barRectShape[valueDim.wh] = pxSign * Math.max(
+        Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)
+    );
+    barRectShape[categoryDim.wh] = layout[categoryDim.wh];
+
+    var clipShape = output.clipShape = {};
+    // Consider that symbol may be overflow layout rect.
+    clipShape[categoryDim.xy] = -layout[categoryDim.xy];
+    clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];
+    clipShape[valueDim.xy] = 0;
+    clipShape[valueDim.wh] = layout[valueDim.wh];
+}
+
+function createPath(symbolMeta) {
+    var symbolPatternSize = symbolMeta.symbolPatternSize;
+    var path = createSymbol(
+        // Consider texture img, make a big size.
+        symbolMeta.symbolType,
+        -symbolPatternSize / 2,
+        -symbolPatternSize / 2,
+        symbolPatternSize,
+        symbolPatternSize,
+        symbolMeta.color
+    );
+    path.attr({
+        culling: true
+    });
+    path.type !== 'image' && path.setStyle({
+        strokeNoScale: true
+    });
+
+    return path;
+}
+
+function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {
+    var bundle = bar.__pictorialBundle;
+    var symbolSize = symbolMeta.symbolSize;
+    var valueLineWidth = symbolMeta.valueLineWidth;
+    var pathPosition = symbolMeta.pathPosition;
+    var valueDim = opt.valueDim;
+    var repeatTimes = symbolMeta.repeatTimes || 0;
+
+    var index = 0;
+    var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;
+
+    eachPath(bar, function (path) {
+        path.__pictorialAnimationIndex = index;
+        path.__pictorialRepeatTimes = repeatTimes;
+        if (index < repeatTimes) {
+            updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);
+        }
+        else {
+            updateAttr(path, null, {scale: [0, 0]}, symbolMeta, isUpdate, function () {
+                bundle.remove(path);
+            });
+        }
+
+        updateHoverAnimation(path, symbolMeta);
+
+        index++;
+    });
+
+    for (; index < repeatTimes; index++) {
+        var path = createPath(symbolMeta);
+        path.__pictorialAnimationIndex = index;
+        path.__pictorialRepeatTimes = repeatTimes;
+        bundle.add(path);
+
+        var target = makeTarget(index);
+
+        updateAttr(
+            path,
+            {
+                position: target.position,
+                scale: [0, 0]
+            },
+            {
+                scale: target.scale,
+                rotation: target.rotation
+            },
+            symbolMeta,
+            isUpdate
+        );
+
+        // FIXME
+        // If all emphasis/normal through action.
+        path
+            .on('mouseover', onMouseOver)
+            .on('mouseout', onMouseOut);
+
+        updateHoverAnimation(path, symbolMeta);
+    }
+
+    function makeTarget(index) {
+        var position = pathPosition.slice();
+        // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index
+        // Otherwise: i = index;
+        var pxSign = symbolMeta.pxSign;
+        var i = index;
+        if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {
+            i = repeatTimes - 1 - index;
+        }
+        position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];
+
+        return {
+            position: position,
+            scale: symbolMeta.symbolScale.slice(),
+            rotation: symbolMeta.rotation
+        };
+    }
+
+    function onMouseOver() {
+        eachPath(bar, function (path) {
+            path.trigger('emphasis');
+        });
+    }
+
+    function onMouseOut() {
+        eachPath(bar, function (path) {
+            path.trigger('normal');
+        });
+    }
+}
+
+function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {
+    var bundle = bar.__pictorialBundle;
+    var mainPath = bar.__pictorialMainPath;
+
+    if (!mainPath) {
+        mainPath = bar.__pictorialMainPath = createPath(symbolMeta);
+        bundle.add(mainPath);
+
+        updateAttr(
+            mainPath,
+            {
+                position: symbolMeta.pathPosition.slice(),
+                scale: [0, 0],
+                rotation: symbolMeta.rotation
+            },
+            {
+                scale: symbolMeta.symbolScale.slice()
+            },
+            symbolMeta,
+            isUpdate
+        );
+
+        mainPath
+            .on('mouseover', onMouseOver)
+            .on('mouseout', onMouseOut);
+    }
+    else {
+        updateAttr(
+            mainPath,
+            null,
+            {
+                position: symbolMeta.pathPosition.slice(),
+                scale: symbolMeta.symbolScale.slice(),
+                rotation: symbolMeta.rotation
+            },
+            symbolMeta,
+            isUpdate
+        );
+    }
+
+    updateHoverAnimation(mainPath, symbolMeta);
+
+    function onMouseOver() {
+        this.trigger('emphasis');
+    }
+
+    function onMouseOut() {
+        this.trigger('normal');
+    }
+}
+
+// bar rect is used for label.
+function createOrUpdateBarRect(bar, symbolMeta, isUpdate) {
+    var rectShape = extend({}, symbolMeta.barRectShape);
+
+    var barRect = bar.__pictorialBarRect;
+    if (!barRect) {
+        barRect = bar.__pictorialBarRect = new Rect({
+            z2: 2,
+            shape: rectShape,
+            silent: true,
+            style: {
+                stroke: 'transparent',
+                fill: 'transparent',
+                lineWidth: 0
+            }
+        });
+
+        bar.add(barRect);
+    }
+    else {
+        updateAttr(barRect, null, {shape: rectShape}, symbolMeta, isUpdate);
+    }
+}
+
+function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {
+    // If not clip, symbol will be remove and rebuilt.
+    if (symbolMeta.symbolClip) {
+        var clipPath = bar.__pictorialClipPath;
+        var clipShape = extend({}, symbolMeta.clipShape);
+        var valueDim = opt.valueDim;
+        var animationModel = symbolMeta.animationModel;
+        var dataIndex = symbolMeta.dataIndex;
+
+        if (clipPath) {
+            updateProps(
+                clipPath, {shape: clipShape}, animationModel, dataIndex
+            );
+        }
+        else {
+            clipShape[valueDim.wh] = 0;
+            clipPath = new Rect({shape: clipShape});
+            bar.__pictorialBundle.setClipPath(clipPath);
+            bar.__pictorialClipPath = clipPath;
+
+            var target = {};
+            target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];
+
+            graphic[isUpdate ? 'updateProps' : 'initProps'](
+                clipPath, {shape: target}, animationModel, dataIndex
+            );
+        }
+    }
+}
+
+function getItemModel(data, dataIndex) {
+    var itemModel = data.getItemModel(dataIndex);
+    itemModel.getAnimationDelayParams = getAnimationDelayParams;
+    itemModel.isAnimationEnabled = isAnimationEnabled;
+    return itemModel;
+}
+
+function getAnimationDelayParams(path) {
+    // The order is the same as the z-order, see `symbolRepeatDiretion`.
+    return {
+        index: path.__pictorialAnimationIndex,
+        count: path.__pictorialRepeatTimes
+    };
+}
+
+function isAnimationEnabled() {
+    // `animation` prop can be set on itemModel in pictorial bar chart.
+    return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation');
+}
+
+function updateHoverAnimation(path, symbolMeta) {
+    path.off('emphasis').off('normal');
+
+    var scale = symbolMeta.symbolScale.slice();
+
+    symbolMeta.hoverAnimation && path
+        .on('emphasis', function() {
+            this.animateTo({
+                scale: [scale[0] * 1.1, scale[1] * 1.1]
+            }, 400, 'elasticOut');
+        })
+        .on('normal', function() {
+            this.animateTo({
+                scale: scale.slice()
+            }, 400, 'elasticOut');
+        });
+}
+
+function createBar(data, opt, symbolMeta, isUpdate) {
+    // bar is the main element for each data.
+    var bar = new Group();
+    // bundle is used for location and clip.
+    var bundle = new Group();
+    bar.add(bundle);
+    bar.__pictorialBundle = bundle;
+    bundle.attr('position', symbolMeta.bundlePosition.slice());
+
+    if (symbolMeta.symbolRepeat) {
+        createOrUpdateRepeatSymbols(bar, opt, symbolMeta);
+    }
+    else {
+        createOrUpdateSingleSymbol(bar, opt, symbolMeta);
+    }
+
+    createOrUpdateBarRect(bar, symbolMeta, isUpdate);
+
+    createOrUpdateClip(bar, opt, symbolMeta, isUpdate);
+
+    bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);
+    bar.__pictorialSymbolMeta = symbolMeta;
+
+    return bar;
+}
+
+function updateBar(bar, opt, symbolMeta) {
+    var animationModel = symbolMeta.animationModel;
+    var dataIndex = symbolMeta.dataIndex;
+    var bundle = bar.__pictorialBundle;
+
+    updateProps(
+        bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex
+    );
+
+    if (symbolMeta.symbolRepeat) {
+        createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);
+    }
+    else {
+        createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);
+    }
+
+    createOrUpdateBarRect(bar, symbolMeta, true);
+
+    createOrUpdateClip(bar, opt, symbolMeta, true);
+}
+
+function removeBar(data, dataIndex, animationModel, bar) {
+    // Not show text when animating
+    var labelRect = bar.__pictorialBarRect;
+    labelRect && (labelRect.style.text = null);
+
+    var pathes = [];
+    eachPath(bar, function (path) {
+        pathes.push(path);
+    });
+    bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath);
+
+    // I do not find proper remove animation for clip yet.
+    bar.__pictorialClipPath && (animationModel = null);
+
+    each$1(pathes, function (path) {
+        updateProps(
+            path, {scale: [0, 0]}, animationModel, dataIndex,
+            function () {
+                bar.parent && bar.parent.remove(bar);
+            }
+        );
+    });
+
+    data.setItemGraphicEl(dataIndex, null);
+}
+
+function getShapeStr(data, symbolMeta) {
+    return [
+        data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none',
+        !!symbolMeta.symbolRepeat,
+        !!symbolMeta.symbolClip
+    ].join(':');
+}
+
+function eachPath(bar, cb, context) {
+    // Do not use Group#eachChild, because it do not support remove.
+    each$1(bar.__pictorialBundle.children(), function (el) {
+        el !== bar.__pictorialBarRect && cb.call(context, el);
+    });
+}
+
+function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {
+    immediateAttrs && el.attr(immediateAttrs);
+    // when symbolCip used, only clip path has init animation, otherwise it would be weird effect.
+    if (symbolMeta.symbolClip && !isUpdate) {
+        animationAttrs && el.attr(animationAttrs);
+    }
+    else {
+        animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](
+            el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb
+        );
+    }
+}
+
+function updateCommon$1(bar, opt, symbolMeta) {
+    var color = symbolMeta.color;
+    var dataIndex = symbolMeta.dataIndex;
+    var itemModel = symbolMeta.itemModel;
+    // Color must be excluded.
+    // Because symbol provide setColor individually to set fill and stroke
+    var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);
+    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();
+    var cursorStyle = itemModel.getShallow('cursor');
+
+    eachPath(bar, function (path) {
+        // PENDING setColor should be before setStyle!!!
+        path.setColor(color);
+        path.setStyle(defaults(
+            {
+                fill: color,
+                opacity: symbolMeta.opacity
+            },
+            normalStyle
+        ));
+        setHoverStyle(path, hoverStyle);
+
+        cursorStyle && (path.cursor = cursorStyle);
+        path.z2 = symbolMeta.z2;
+    });
+
+    var barRectHoverStyle = {};
+    var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];
+    var barRect = bar.__pictorialBarRect;
+
+    setLabel(
+        barRect.style, barRectHoverStyle, itemModel,
+        color, opt.seriesModel, dataIndex, barPositionOutside
+    );
+
+    setHoverStyle(barRect, barRectHoverStyle);
+}
+
+function toIntTimes(times) {
+    var roundedTimes = Math.round(times);
+    // Escapse accurate error
+    return Math.abs(times - roundedTimes) < 1e-4
+        ? roundedTimes
+        : Math.ceil(times);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// In case developer forget to include grid component
+registerLayout(curry(
+    layout, 'pictorialBar'
+));
+registerVisual(visualSymbol('pictorialBar', 'roundRect'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @constructor  module:echarts/coord/single/SingleAxis
+ * @extends {module:echarts/coord/Axis}
+ * @param {string} dim
+ * @param {*} scale
+ * @param {Array.<number>} coordExtent
+ * @param {string} axisType
+ * @param {string} position
+ */
+var SingleAxis = function (dim, scale, coordExtent, axisType, position) {
+
+    Axis.call(this, dim, scale, coordExtent);
+
+    /**
+     * Axis type
+     * - 'category'
+     * - 'value'
+     * - 'time'
+     * - 'log'
+     * @type {string}
+     */
+    this.type = axisType || 'value';
+
+    /**
+     * Axis position
+     *  - 'top'
+     *  - 'bottom'
+     *  - 'left'
+     *  - 'right'
+     *  @type {string}
+     */
+    this.position = position || 'bottom';
+
+    /**
+     * Axis orient
+     *  - 'horizontal'
+     *  - 'vertical'
+     * @type {[type]}
+     */
+    this.orient = null;
+
+};
+
+SingleAxis.prototype = {
+
+    constructor: SingleAxis,
+
+    /**
+     * Axis model
+     * @type {module:echarts/coord/single/AxisModel}
+     */
+    model: null,
+
+    /**
+     * Judge the orient of the axis.
+     * @return {boolean}
+     */
+    isHorizontal: function () {
+        var position = this.position;
+        return position === 'top' || position === 'bottom';
+
+    },
+
+    /**
+     * @override
+     */
+    pointToData: function (point, clamp) {
+        return this.coordinateSystem.pointToData(point, clamp)[0];
+    },
+
+    /**
+     * Convert the local coord(processed by dataToCoord())
+     * to global coord(concrete pixel coord).
+     * designated by module:echarts/coord/single/Single.
+     * @type {Function}
+     */
+    toGlobalCoord: null,
+
+    /**
+     * Convert the global coord to local coord.
+     * designated by module:echarts/coord/single/Single.
+     * @type {Function}
+     */
+    toLocalCoord: null
+
+};
+
+inherits(SingleAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Single coordinates system.
+ */
+
+/**
+ * Create a single coordinates system.
+ *
+ * @param {module:echarts/coord/single/AxisModel} axisModel
+ * @param {module:echarts/model/Global} ecModel
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function Single(axisModel, ecModel, api) {
+
+    /**
+     * @type {string}
+     * @readOnly
+     */
+    this.dimension = 'single';
+
+    /**
+     * Add it just for draw tooltip.
+     *
+     * @type {Array.<string>}
+     * @readOnly
+     */
+    this.dimensions = ['single'];
+
+    /**
+     * @private
+     * @type {module:echarts/coord/single/SingleAxis}.
+     */
+    this._axis = null;
+
+    /**
+     * @private
+     * @type {module:zrender/core/BoundingRect}
+     */
+    this._rect;
+
+    this._init(axisModel, ecModel, api);
+
+    /**
+     * @type {module:echarts/coord/single/AxisModel}
+     */
+    this.model = axisModel;
+}
+
+Single.prototype = {
+
+    type: 'singleAxis',
+
+    axisPointerEnabled: true,
+
+    constructor: Single,
+
+    /**
+     * Initialize single coordinate system.
+     *
+     * @param  {module:echarts/coord/single/AxisModel} axisModel
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     * @private
+     */
+    _init: function (axisModel, ecModel, api) {
+
+        var dim = this.dimension;
+
+        var axis = new SingleAxis(
+            dim,
+            createScaleByModel(axisModel),
+            [0, 0],
+            axisModel.get('type'),
+            axisModel.get('position')
+        );
+
+        var isCategory = axis.type === 'category';
+        axis.onBand = isCategory && axisModel.get('boundaryGap');
+        axis.inverse = axisModel.get('inverse');
+        axis.orient = axisModel.get('orient');
+
+        axisModel.axis = axis;
+        axis.model = axisModel;
+        axis.coordinateSystem = this;
+        this._axis = axis;
+    },
+
+    /**
+     * Update axis scale after data processed
+     * @param  {module:echarts/model/Global} ecModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    update: function (ecModel, api) {
+        ecModel.eachSeries(function (seriesModel) {
+            if (seriesModel.coordinateSystem === this) {
+                var data = seriesModel.getData();
+                each$1(data.mapDimension(this.dimension, true), function (dim) {
+                    this._axis.scale.unionExtentFromData(data, dim);
+                }, this);
+                niceScaleExtent(this._axis.scale, this._axis.model);
+            }
+        }, this);
+    },
+
+    /**
+     * Resize the single coordinate system.
+     *
+     * @param  {module:echarts/coord/single/AxisModel} axisModel
+     * @param  {module:echarts/ExtensionAPI} api
+     */
+    resize: function (axisModel, api) {
+        this._rect = getLayoutRect(
+            {
+                left: axisModel.get('left'),
+                top: axisModel.get('top'),
+                right: axisModel.get('right'),
+                bottom: axisModel.get('bottom'),
+                width: axisModel.get('width'),
+                height: axisModel.get('height')
+            },
+            {
+                width: api.getWidth(),
+                height: api.getHeight()
+            }
+        );
+
+        this._adjustAxis();
+    },
+
+    /**
+     * @return {module:zrender/core/BoundingRect}
+     */
+    getRect: function () {
+        return this._rect;
+    },
+
+    /**
+     * @private
+     */
+    _adjustAxis: function () {
+
+        var rect = this._rect;
+        var axis = this._axis;
+
+        var isHorizontal = axis.isHorizontal();
+        var extent = isHorizontal ? [0, rect.width] : [0, rect.height];
+        var idx =  axis.reverse ? 1 : 0;
+
+        axis.setExtent(extent[idx], extent[1 - idx]);
+
+        this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);
+
+    },
+
+    /**
+     * @param  {module:echarts/coord/single/SingleAxis} axis
+     * @param  {number} coordBase
+     */
+    _updateAxisTransform: function (axis, coordBase) {
+
+        var axisExtent = axis.getExtent();
+        var extentSum = axisExtent[0] + axisExtent[1];
+        var isHorizontal = axis.isHorizontal();
+
+        axis.toGlobalCoord = isHorizontal
+            ? function (coord) {
+                return coord + coordBase;
+            }
+            : function (coord) {
+                return extentSum - coord + coordBase;
+            };
+
+        axis.toLocalCoord = isHorizontal
+            ? function (coord) {
+                return coord - coordBase;
+            }
+            : function (coord) {
+                return extentSum - coord + coordBase;
+            };
+    },
+
+    /**
+     * Get axis.
+     *
+     * @return {module:echarts/coord/single/SingleAxis}
+     */
+    getAxis: function () {
+        return this._axis;
+    },
+
+    /**
+     * Get axis, add it just for draw tooltip.
+     *
+     * @return {[type]} [description]
+     */
+    getBaseAxis: function () {
+        return this._axis;
+    },
+
+    /**
+     * @return {Array.<module:echarts/coord/Axis>}
+     */
+    getAxes: function () {
+        return [this._axis];
+    },
+
+    /**
+     * @return {Object} {baseAxes: [], otherAxes: []}
+     */
+    getTooltipAxes: function () {
+        return {baseAxes: [this.getAxis()]};
+    },
+
+    /**
+     * If contain point.
+     *
+     * @param  {Array.<number>} point
+     * @return {boolean}
+     */
+    containPoint: function (point) {
+        var rect = this.getRect();
+        var axis = this.getAxis();
+        var orient = axis.orient;
+        if (orient === 'horizontal') {
+            return axis.contain(axis.toLocalCoord(point[0]))
+            && (point[1] >= rect.y && point[1] <= (rect.y + rect.height));
+        }
+        else {
+            return axis.contain(axis.toLocalCoord(point[1]))
+            && (point[0] >= rect.y && point[0] <= (rect.y + rect.height));
+        }
+    },
+
+    /**
+     * @param {Array.<number>} point
+     * @return {Array.<number>}
+     */
+    pointToData: function (point) {
+        var axis = this.getAxis();
+        return [axis.coordToData(axis.toLocalCoord(
+            point[axis.orient === 'horizontal' ? 0 : 1]
+        ))];
+    },
+
+    /**
+     * Convert the series data to concrete point.
+     *
+     * @param  {number|Array.<number>} val
+     * @return {Array.<number>}
+     */
+    dataToPoint: function (val) {
+        var axis = this.getAxis();
+        var rect = this.getRect();
+        var pt = [];
+        var idx = axis.orient === 'horizontal' ? 0 : 1;
+
+        if (val instanceof Array) {
+            val = val[0];
+        }
+
+        pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));
+        pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2);
+        return pt;
+    }
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Single coordinate system creator.
+ */
+
+/**
+ * Create single coordinate system and inject it into seriesModel.
+ *
+ * @param {module:echarts/model/Global} ecModel
+ * @param {module:echarts/ExtensionAPI} api
+ * @return {Array.<module:echarts/coord/single/Single>}
+ */
+function create$3(ecModel, api) {
+    var singles = [];
+
+    ecModel.eachComponent('singleAxis', function(axisModel, idx) {
+
+        var single = new Single(axisModel, ecModel, api);
+        single.name = 'single_' + idx;
+        single.resize(axisModel, api);
+        axisModel.coordinateSystem = single;
+        singles.push(single);
+
+    });
+
+    ecModel.eachSeries(function (seriesModel) {
+        if (seriesModel.get('coordinateSystem') === 'singleAxis') {
+            var singleAxisModel = ecModel.queryComponents({
+                mainType: 'singleAxis',
+                index: seriesModel.get('singleAxisIndex'),
+                id: seriesModel.get('singleAxisId')
+            })[0];
+            seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;
+        }
+    });
+
+    return singles;
+}
+
+CoordinateSystemManager.register('single', {
+    create: create$3,
+    dimensions: Single.prototype.dimensions
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {Object} opt {labelInside}
+ * @return {Object} {
+ *  position, rotation, labelDirection, labelOffset,
+ *  tickDirection, labelRotate, z2
+ * }
+ */
+function layout$2(axisModel, opt) {
+    opt = opt || {};
+    var single = axisModel.coordinateSystem;
+    var axis = axisModel.axis;
+    var layout = {};
+
+    var axisPosition = axis.position;
+    var orient = axis.orient;
+
+    var rect = single.getRect();
+    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];
+
+    var positionMap = {
+        horizontal: {top: rectBound[2], bottom: rectBound[3]},
+        vertical: {left: rectBound[0], right: rectBound[1]}
+    };
+
+    layout.position = [
+        orient === 'vertical'
+            ? positionMap.vertical[axisPosition]
+            : rectBound[0],
+        orient === 'horizontal'
+            ? positionMap.horizontal[axisPosition]
+            : rectBound[3]
+    ];
+
+    var r = {horizontal: 0, vertical: 1};
+    layout.rotation = Math.PI / 2 * r[orient];
+
+    var directionMap = {top: -1, bottom: 1, right: 1, left: -1};
+
+    layout.labelDirection = layout.tickDirection
+        = layout.nameDirection
+        = directionMap[axisPosition];
+
+    if (axisModel.get('axisTick.inside')) {
+        layout.tickDirection = -layout.tickDirection;
+    }
+
+    if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {
+        layout.labelDirection = -layout.labelDirection;
+    }
+
+    var labelRotation = opt.rotate;
+    labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate'));
+    layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation;
+
+    layout.z2 = 1;
+
+    return layout;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var axisBuilderAttrs$2 = [
+    'axisLine', 'axisTickLabel', 'axisName'
+];
+
+var selfBuilderAttr = 'splitLine';
+
+var SingleAxisView = AxisView.extend({
+
+    type: 'singleAxis',
+
+    axisPointerClass: 'SingleAxisPointer',
+
+    render: function (axisModel, ecModel, api, payload) {
+
+        var group = this.group;
+
+        group.removeAll();
+
+        var layout =  layout$2(axisModel);
+
+        var axisBuilder = new AxisBuilder(axisModel, layout);
+
+        each$1(axisBuilderAttrs$2, axisBuilder.add, axisBuilder);
+
+        group.add(axisBuilder.getGroup());
+
+        if (axisModel.get(selfBuilderAttr + '.show')) {
+            this['_' + selfBuilderAttr](axisModel);
+        }
+
+        SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);
+    },
+
+    _splitLine: function(axisModel) {
+        var axis = axisModel.axis;
+
+        if (axis.scale.isBlank()) {
+            return;
+        }
+
+        var splitLineModel = axisModel.getModel('splitLine');
+        var lineStyleModel = splitLineModel.getModel('lineStyle');
+        var lineWidth = lineStyleModel.get('width');
+        var lineColors = lineStyleModel.get('color');
+
+        lineColors = lineColors instanceof Array ? lineColors : [lineColors];
+
+        var gridRect = axisModel.coordinateSystem.getRect();
+        var isHorizontal = axis.isHorizontal();
+
+        var splitLines = [];
+        var lineCount = 0;
+
+        var ticksCoords = axis.getTicksCoords({
+            tickModel: splitLineModel
+        });
+
+        var p1 = [];
+        var p2 = [];
+
+        for (var i = 0; i < ticksCoords.length; ++i) {
+            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
+            if (isHorizontal) {
+                p1[0] = tickCoord;
+                p1[1] = gridRect.y;
+                p2[0] = tickCoord;
+                p2[1] = gridRect.y + gridRect.height;
+            }
+            else {
+                p1[0] = gridRect.x;
+                p1[1] = tickCoord;
+                p2[0] = gridRect.x + gridRect.width;
+                p2[1] = tickCoord;
+            }
+            var colorIndex = (lineCount++) % lineColors.length;
+            splitLines[colorIndex] = splitLines[colorIndex] || [];
+            splitLines[colorIndex].push(new Line(
+                subPixelOptimizeLine({
+                    shape: {
+                        x1: p1[0],
+                        y1: p1[1],
+                        x2: p2[0],
+                        y2: p2[1]
+                    },
+                    style: {
+                        lineWidth: lineWidth
+                    },
+                    silent: true
+                })));
+        }
+
+        for (var i = 0; i < splitLines.length; ++i) {
+            this.group.add(mergePath(splitLines[i], {
+                style: {
+                    stroke: lineColors[i % lineColors.length],
+                    lineDash: lineStyleModel.getLineDash(lineWidth),
+                    lineWidth: lineWidth
+                },
+                silent: true
+            }));
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AxisModel$4 = ComponentModel.extend({
+
+    type: 'singleAxis',
+
+    layoutMode: 'box',
+
+    /**
+     * @type {module:echarts/coord/single/SingleAxis}
+     */
+    axis: null,
+
+    /**
+     * @type {module:echarts/coord/single/Single}
+     */
+    coordinateSystem: null,
+
+    /**
+     * @override
+     */
+    getCoordSysModel: function () {
+        return this;
+    }
+
+});
+
+var defaultOption$2 = {
+
+    left: '5%',
+    top: '5%',
+    right: '5%',
+    bottom: '5%',
+
+    type: 'value',
+
+    position: 'bottom',
+
+    orient: 'horizontal',
+
+    axisLine: {
+        show: true,
+        lineStyle: {
+            width: 2,
+            type: 'solid'
+        }
+    },
+
+    // Single coordinate system and single axis is the,
+    // which is used as the parent tooltip model.
+    // same model, so we set default tooltip show as true.
+    tooltip: {
+        show: true
+    },
+
+    axisTick: {
+        show: true,
+        length: 6,
+        lineStyle: {
+            width: 2
+        }
+    },
+
+    axisLabel: {
+        show: true,
+        interval: 'auto'
+    },
+
+    splitLine: {
+        show: true,
+        lineStyle: {
+            type: 'dashed',
+            opacity: 0.2
+        }
+    }
+};
+
+function getAxisType$2(axisName, option) {
+    return option.type || (option.data ? 'category' : 'value');
+}
+
+merge(AxisModel$4.prototype, axisModelCommonMixin);
+
+axisModelCreator('single', AxisModel$4, getAxisType$2, defaultOption$2);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside}
+ * @param {module:echarts/model/Global} ecModel
+ * @return {Object} {point: [x, y], el: ...} point Will not be null.
+ */
+var findPointFromSeries = function (finder, ecModel) {
+    var point = [];
+    var seriesIndex = finder.seriesIndex;
+    var seriesModel;
+    if (seriesIndex == null || !(
+        seriesModel = ecModel.getSeriesByIndex(seriesIndex)
+    )) {
+        return {point: []};
+    }
+
+    var data = seriesModel.getData();
+    var dataIndex = queryDataIndex(data, finder);
+    if (dataIndex == null || dataIndex < 0 || isArray(dataIndex)) {
+        return {point: []};
+    }
+
+    var el = data.getItemGraphicEl(dataIndex);
+    var coordSys = seriesModel.coordinateSystem;
+
+    if (seriesModel.getTooltipPosition) {
+        point = seriesModel.getTooltipPosition(dataIndex) || [];
+    }
+    else if (coordSys && coordSys.dataToPoint) {
+        point = coordSys.dataToPoint(
+            data.getValues(
+                map(coordSys.dimensions, function (dim) {
+                    return data.mapDimension(dim);
+                }), dataIndex, true
+            )
+        ) || [];
+    }
+    else if (el) {
+        // Use graphic bounding rect
+        var rect = el.getBoundingRect().clone();
+        rect.applyTransform(el.transform);
+        point = [
+            rect.x + rect.width / 2,
+            rect.y + rect.height / 2
+        ];
+    }
+
+    return {point: point, el: el};
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$14 = each$1;
+var curry$3 = curry;
+var inner$7 = makeInner();
+
+/**
+ * Basic logic: check all axis, if they do not demand show/highlight,
+ * then hide/downplay them.
+ *
+ * @param {Object} coordSysAxesInfo
+ * @param {Object} payload
+ * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave'
+ * @param {Array.<number>} [payload.x] x and y, which are mandatory, specify a point to
+ *              trigger axisPointer and tooltip.
+ * @param {Array.<number>} [payload.y] x and y, which are mandatory, specify a point to
+ *              trigger axisPointer and tooltip.
+ * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes.
+ * @param {Object} [payload.dataIndex] finder, restrict target axes.
+ * @param {Object} [payload.axesInfo] finder, restrict target axes.
+ *        [{
+ *          axisDim: 'x'|'y'|'angle'|...,
+ *          axisIndex: ...,
+ *          value: ...
+ *        }, ...]
+ * @param {Function} [payload.dispatchAction]
+ * @param {Object} [payload.tooltipOption]
+ * @param {Object|Array.<number>|Function} [payload.position] Tooltip position,
+ *        which can be specified in dispatchAction
+ * @param {module:echarts/model/Global} ecModel
+ * @param {module:echarts/ExtensionAPI} api
+ * @return {Object} content of event obj for echarts.connect.
+ */
+var axisTrigger = function (payload, ecModel, api) {
+    var currTrigger = payload.currTrigger;
+    var point = [payload.x, payload.y];
+    var finder = payload;
+    var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api);
+    var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;
+
+    // Pending
+    // See #6121. But we are not able to reproduce it yet.
+    if (!coordSysAxesInfo) {
+        return;
+    }
+
+    if (illegalPoint(point)) {
+        // Used in the default behavior of `connection`: use the sample seriesIndex
+        // and dataIndex. And also used in the tooltipView trigger.
+        point = findPointFromSeries({
+            seriesIndex: finder.seriesIndex,
+            // Do not use dataIndexInside from other ec instance.
+            // FIXME: auto detect it?
+            dataIndex: finder.dataIndex
+        }, ecModel).point;
+    }
+    var isIllegalPoint = illegalPoint(point);
+
+    // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}).
+    // Notice: In this case, it is difficult to get the `point` (which is necessary to show
+    // tooltip, so if point is not given, we just use the point found by sample seriesIndex
+    // and dataIndex.
+    var inputAxesInfo = finder.axesInfo;
+
+    var axesInfo = coordSysAxesInfo.axesInfo;
+    var shouldHide = currTrigger === 'leave' || illegalPoint(point);
+    var outputFinder = {};
+
+    var showValueMap = {};
+    var dataByCoordSys = {list: [], map: {}};
+    var updaters = {
+        showPointer: curry$3(showPointer, showValueMap),
+        showTooltip: curry$3(showTooltip, dataByCoordSys)
+    };
+
+    // Process for triggered axes.
+    each$14(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) {
+        // If a point given, it must be contained by the coordinate system.
+        var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);
+
+        each$14(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {
+            var axis = axisInfo.axis;
+            var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo);
+            // If no inputAxesInfo, no axis is restricted.
+            if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {
+                var val = inputAxisInfo && inputAxisInfo.value;
+                if (val == null && !isIllegalPoint) {
+                    val = axis.pointToData(point);
+                }
+                val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder);
+            }
+        });
+    });
+
+    // Process for linked axes.
+    var linkTriggers = {};
+    each$14(axesInfo, function (tarAxisInfo, tarKey) {
+        var linkGroup = tarAxisInfo.linkGroup;
+
+        // If axis has been triggered in the previous stage, it should not be triggered by link.
+        if (linkGroup && !showValueMap[tarKey]) {
+            each$14(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {
+                var srcValItem = showValueMap[srcKey];
+                // If srcValItem exist, source axis is triggered, so link to target axis.
+                if (srcAxisInfo !== tarAxisInfo && srcValItem) {
+                    var val = srcValItem.value;
+                    linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(
+                        val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo)
+                    )));
+                    linkTriggers[tarAxisInfo.key] = val;
+                }
+            });
+        }
+    });
+    each$14(linkTriggers, function (val, tarKey) {
+        processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder);
+    });
+
+    updateModelActually(showValueMap, axesInfo, outputFinder);
+    dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);
+    dispatchHighDownActually(axesInfo, dispatchAction, api);
+
+    return outputFinder;
+};
+
+function processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) {
+    var axis = axisInfo.axis;
+
+    if (axis.scale.isBlank() || !axis.containData(newValue)) {
+        return;
+    }
+
+    if (!axisInfo.involveSeries) {
+        updaters.showPointer(axisInfo, newValue);
+        return;
+    }
+
+    // Heavy calculation. So put it after axis.containData checking.
+    var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);
+    var payloadBatch = payloadInfo.payloadBatch;
+    var snapToValue = payloadInfo.snapToValue;
+
+    // Fill content of event obj for echarts.connect.
+    // By defualt use the first involved series data as a sample to connect.
+    if (payloadBatch[0] && outputFinder.seriesIndex == null) {
+        extend(outputFinder, payloadBatch[0]);
+    }
+
+    // If no linkSource input, this process is for collecting link
+    // target, where snap should not be accepted.
+    if (!dontSnap && axisInfo.snap) {
+        if (axis.containData(snapToValue) && snapToValue != null) {
+            newValue = snapToValue;
+        }
+    }
+
+    updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder);
+    // Tooltip should always be snapToValue, otherwise there will be
+    // incorrect "axis value ~ series value" mapping displayed in tooltip.
+    updaters.showTooltip(axisInfo, payloadInfo, snapToValue);
+}
+
+function buildPayloadsBySeries(value, axisInfo) {
+    var axis = axisInfo.axis;
+    var dim = axis.dim;
+    var snapToValue = value;
+    var payloadBatch = [];
+    var minDist = Number.MAX_VALUE;
+    var minDiff = -1;
+
+    each$14(axisInfo.seriesModels, function (series, idx) {
+        var dataDim = series.getData().mapDimension(dim, true);
+        var seriesNestestValue;
+        var dataIndices;
+
+        if (series.getAxisTooltipData) {
+            var result = series.getAxisTooltipData(dataDim, value, axis);
+            dataIndices = result.dataIndices;
+            seriesNestestValue = result.nestestValue;
+        }
+        else {
+            dataIndices = series.getData().indicesOfNearest(
+                dataDim[0],
+                value,
+                // Add a threshold to avoid find the wrong dataIndex
+                // when data length is not same.
+                // false,
+                axis.type === 'category' ? 0.5 : null
+            );
+            if (!dataIndices.length) {
+                return;
+            }
+            seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);
+        }
+
+        if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {
+            return;
+        }
+
+        var diff = value - seriesNestestValue;
+        var dist = Math.abs(diff);
+        // Consider category case
+        if (dist <= minDist) {
+            if (dist < minDist || (diff >= 0 && minDiff < 0)) {
+                minDist = dist;
+                minDiff = diff;
+                snapToValue = seriesNestestValue;
+                payloadBatch.length = 0;
+            }
+            each$14(dataIndices, function (dataIndex) {
+                payloadBatch.push({
+                    seriesIndex: series.seriesIndex,
+                    dataIndexInside: dataIndex,
+                    dataIndex: series.getData().getRawIndex(dataIndex)
+                });
+            });
+        }
+    });
+
+    return {
+        payloadBatch: payloadBatch,
+        snapToValue: snapToValue
+    };
+}
+
+function showPointer(showValueMap, axisInfo, value, payloadBatch) {
+    showValueMap[axisInfo.key] = {value: value, payloadBatch: payloadBatch};
+}
+
+function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {
+    var payloadBatch = payloadInfo.payloadBatch;
+    var axis = axisInfo.axis;
+    var axisModel = axis.model;
+    var axisPointerModel = axisInfo.axisPointerModel;
+
+    // If no data, do not create anything in dataByCoordSys,
+    // whose length will be used to judge whether dispatch action.
+    if (!axisInfo.triggerTooltip || !payloadBatch.length) {
+        return;
+    }
+
+    var coordSysModel = axisInfo.coordSys.model;
+    var coordSysKey = makeKey(coordSysModel);
+    var coordSysItem = dataByCoordSys.map[coordSysKey];
+    if (!coordSysItem) {
+        coordSysItem = dataByCoordSys.map[coordSysKey] = {
+            coordSysId: coordSysModel.id,
+            coordSysIndex: coordSysModel.componentIndex,
+            coordSysType: coordSysModel.type,
+            coordSysMainType: coordSysModel.mainType,
+            dataByAxis: []
+        };
+        dataByCoordSys.list.push(coordSysItem);
+    }
+
+    coordSysItem.dataByAxis.push({
+        axisDim: axis.dim,
+        axisIndex: axisModel.componentIndex,
+        axisType: axisModel.type,
+        axisId: axisModel.id,
+        value: value,
+        // Caustion: viewHelper.getValueLabel is actually on "view stage", which
+        // depends that all models have been updated. So it should not be performed
+        // here. Considering axisPointerModel used here is volatile, which is hard
+        // to be retrieve in TooltipView, we prepare parameters here.
+        valueLabelOpt: {
+            precision: axisPointerModel.get('label.precision'),
+            formatter: axisPointerModel.get('label.formatter')
+        },
+        seriesDataIndices: payloadBatch.slice()
+    });
+}
+
+function updateModelActually(showValueMap, axesInfo, outputFinder) {
+    var outputAxesInfo = outputFinder.axesInfo = [];
+    // Basic logic: If no 'show' required, 'hide' this axisPointer.
+    each$14(axesInfo, function (axisInfo, key) {
+        var option = axisInfo.axisPointerModel.option;
+        var valItem = showValueMap[key];
+
+        if (valItem) {
+            !axisInfo.useHandle && (option.status = 'show');
+            option.value = valItem.value;
+            // For label formatter param and highlight.
+            option.seriesDataIndices = (valItem.payloadBatch || []).slice();
+        }
+        // When always show (e.g., handle used), remain
+        // original value and status.
+        else {
+            // If hide, value still need to be set, consider
+            // click legend to toggle axis blank.
+            !axisInfo.useHandle && (option.status = 'hide');
+        }
+
+        // If status is 'hide', should be no info in payload.
+        option.status === 'show' && outputAxesInfo.push({
+            axisDim: axisInfo.axis.dim,
+            axisIndex: axisInfo.axis.model.componentIndex,
+            value: option.value
+        });
+    });
+}
+
+function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) {
+    // Basic logic: If no showTip required, hideTip will be dispatched.
+    if (illegalPoint(point) || !dataByCoordSys.list.length) {
+        dispatchAction({type: 'hideTip'});
+        return;
+    }
+
+    // In most case only one axis (or event one series is used). It is
+    // convinient to fetch payload.seriesIndex and payload.dataIndex
+    // dirtectly. So put the first seriesIndex and dataIndex of the first
+    // axis on the payload.
+    var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
+
+    dispatchAction({
+        type: 'showTip',
+        escapeConnect: true,
+        x: point[0],
+        y: point[1],
+        tooltipOption: payload.tooltipOption,
+        position: payload.position,
+        dataIndexInside: sampleItem.dataIndexInside,
+        dataIndex: sampleItem.dataIndex,
+        seriesIndex: sampleItem.seriesIndex,
+        dataByCoordSys: dataByCoordSys.list
+    });
+}
+
+function dispatchHighDownActually(axesInfo, dispatchAction, api) {
+    // FIXME
+    // highlight status modification shoule be a stage of main process?
+    // (Consider confilct (e.g., legend and axisPointer) and setOption)
+
+    var zr = api.getZr();
+    var highDownKey = 'axisPointerLastHighlights';
+    var lastHighlights = inner$7(zr)[highDownKey] || {};
+    var newHighlights = inner$7(zr)[highDownKey] = {};
+
+    // Update highlight/downplay status according to axisPointer model.
+    // Build hash map and remove duplicate incidentally.
+    each$14(axesInfo, function (axisInfo, key) {
+        var option = axisInfo.axisPointerModel.option;
+        option.status === 'show' && each$14(option.seriesDataIndices, function (batchItem) {
+            var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex;
+            newHighlights[key] = batchItem;
+        });
+    });
+
+    // Diff.
+    var toHighlight = [];
+    var toDownplay = [];
+    each$1(lastHighlights, function (batchItem, key) {
+        !newHighlights[key] && toDownplay.push(batchItem);
+    });
+    each$1(newHighlights, function (batchItem, key) {
+        !lastHighlights[key] && toHighlight.push(batchItem);
+    });
+
+    toDownplay.length && api.dispatchAction({
+        type: 'downplay', escapeConnect: true, batch: toDownplay
+    });
+    toHighlight.length && api.dispatchAction({
+        type: 'highlight', escapeConnect: true, batch: toHighlight
+    });
+}
+
+function findInputAxisInfo(inputAxesInfo, axisInfo) {
+    for (var i = 0; i < (inputAxesInfo || []).length; i++) {
+        var inputAxisInfo = inputAxesInfo[i];
+        if (axisInfo.axis.dim === inputAxisInfo.axisDim
+            && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex
+        ) {
+            return inputAxisInfo;
+        }
+    }
+}
+
+function makeMapperParam(axisInfo) {
+    var axisModel = axisInfo.axis.model;
+    var item = {};
+    var dim = item.axisDim = axisInfo.axis.dim;
+    item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex;
+    item.axisName = item[dim + 'AxisName'] = axisModel.name;
+    item.axisId = item[dim + 'AxisId'] = axisModel.id;
+    return item;
+}
+
+function illegalPoint(point) {
+    return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AxisPointerModel = extendComponentModel({
+
+    type: 'axisPointer',
+
+    coordSysAxesInfo: null,
+
+    defaultOption: {
+        // 'auto' means that show when triggered by tooltip or handle.
+        show: 'auto',
+        // 'click' | 'mousemove' | 'none'
+        triggerOn: null, // set default in AxisPonterView.js
+
+        zlevel: 0,
+        z: 50,
+
+        type: 'line',
+        // axispointer triggered by tootip determine snap automatically,
+        // see `modelHelper`.
+        snap: false,
+        triggerTooltip: true,
+
+        value: null,
+        status: null, // Init value depends on whether handle is used.
+
+        // [group0, group1, ...]
+        // Each group can be: {
+        //      mapper: function () {},
+        //      singleTooltip: 'multiple',  // 'multiple' or 'single'
+        //      xAxisId: ...,
+        //      yAxisName: ...,
+        //      angleAxisIndex: ...
+        // }
+        // mapper: can be ignored.
+        //      input: {axisInfo, value}
+        //      output: {axisInfo, value}
+        link: [],
+
+        // Do not set 'auto' here, otherwise global animation: false
+        // will not effect at this axispointer.
+        animation: null,
+        animationDurationUpdate: 200,
+
+        lineStyle: {
+            color: '#aaa',
+            width: 1,
+            type: 'solid'
+        },
+
+        shadowStyle: {
+            color: 'rgba(150,150,150,0.3)'
+        },
+
+        label: {
+            show: true,
+            formatter: null, // string | Function
+            precision: 'auto', // Or a number like 0, 1, 2 ...
+            margin: 3,
+            color: '#fff',
+            padding: [5, 7, 5, 7],
+            backgroundColor: 'auto', // default: axis line color
+            borderColor: null,
+            borderWidth: 0,
+            shadowBlur: 3,
+            shadowColor: '#aaa'
+            // Considering applicability, common style should
+            // better not have shadowOffset.
+            // shadowOffsetX: 0,
+            // shadowOffsetY: 2
+        },
+
+        handle: {
+            show: false,
+            icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line
+            size: 45,
+            // handle margin is from symbol center to axis, which is stable when circular move.
+            margin: 50,
+            // color: '#1b8bbd'
+            // color: '#2f4554'
+            color: '#333',
+            shadowBlur: 3,
+            shadowColor: '#aaa',
+            shadowOffsetX: 0,
+            shadowOffsetY: 2,
+
+            // For mobile performance
+            throttle: 40
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$8 = makeInner();
+var each$15 = each$1;
+
+/**
+ * @param {string} key
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {Function} handler
+ *      param: {string} currTrigger
+ *      param: {Array.<number>} point
+ */
+function register(key, api, handler) {
+    if (env$1.node) {
+        return;
+    }
+
+    var zr = api.getZr();
+    inner$8(zr).records || (inner$8(zr).records = {});
+
+    initGlobalListeners(zr, api);
+
+    var record = inner$8(zr).records[key] || (inner$8(zr).records[key] = {});
+    record.handler = handler;
+}
+
+function initGlobalListeners(zr, api) {
+    if (inner$8(zr).initialized) {
+        return;
+    }
+
+    inner$8(zr).initialized = true;
+
+    useHandler('click', curry(doEnter, 'click'));
+    useHandler('mousemove', curry(doEnter, 'mousemove'));
+    // useHandler('mouseout', onLeave);
+    useHandler('globalout', onLeave);
+
+    function useHandler(eventType, cb) {
+        zr.on(eventType, function (e) {
+            var dis = makeDispatchAction(api);
+
+            each$15(inner$8(zr).records, function (record) {
+                record && cb(record, e, dis.dispatchAction);
+            });
+
+            dispatchTooltipFinally(dis.pendings, api);
+        });
+    }
+}
+
+function dispatchTooltipFinally(pendings, api) {
+    var showLen = pendings.showTip.length;
+    var hideLen = pendings.hideTip.length;
+
+    var actuallyPayload;
+    if (showLen) {
+        actuallyPayload = pendings.showTip[showLen - 1];
+    }
+    else if (hideLen) {
+        actuallyPayload = pendings.hideTip[hideLen - 1];
+    }
+    if (actuallyPayload) {
+        actuallyPayload.dispatchAction = null;
+        api.dispatchAction(actuallyPayload);
+    }
+}
+
+function onLeave(record, e, dispatchAction) {
+    record.handler('leave', null, dispatchAction);
+}
+
+function doEnter(currTrigger, record, e, dispatchAction) {
+    record.handler(currTrigger, e, dispatchAction);
+}
+
+function makeDispatchAction(api) {
+    var pendings = {
+        showTip: [],
+        hideTip: []
+    };
+    // FIXME
+    // better approach?
+    // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip,
+    // which may be conflict, (axisPointer call showTip but tooltip call hideTip);
+    // So we have to add "final stage" to merge those dispatched actions.
+    var dispatchAction = function (payload) {
+        var pendingList = pendings[payload.type];
+        if (pendingList) {
+            pendingList.push(payload);
+        }
+        else {
+            payload.dispatchAction = dispatchAction;
+            api.dispatchAction(payload);
+        }
+    };
+
+    return {
+        dispatchAction: dispatchAction,
+        pendings: pendings
+    };
+}
+
+/**
+ * @param {string} key
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function unregister(key, api) {
+    if (env$1.node) {
+        return;
+    }
+    var zr = api.getZr();
+    var record = (inner$8(zr).records || {})[key];
+    if (record) {
+        inner$8(zr).records[key] = null;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AxisPointerView = extendComponentView({
+
+    type: 'axisPointer',
+
+    render: function (globalAxisPointerModel, ecModel, api) {
+        var globalTooltipModel = ecModel.getComponent('tooltip');
+        var triggerOn = globalAxisPointerModel.get('triggerOn')
+            || (globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click');
+
+        // Register global listener in AxisPointerView to enable
+        // AxisPointerView to be independent to Tooltip.
+        register(
+            'axisPointer',
+            api,
+            function (currTrigger, e, dispatchAction) {
+                // If 'none', it is not controlled by mouse totally.
+                if (triggerOn !== 'none'
+                    && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)
+                ) {
+                    dispatchAction({
+                        type: 'updateAxisPointer',
+                        currTrigger: currTrigger,
+                        x: e && e.offsetX,
+                        y: e && e.offsetY
+                    });
+                }
+            }
+        );
+    },
+
+    /**
+     * @override
+     */
+    remove: function (ecModel, api) {
+        unregister(api.getZr(), 'axisPointer');
+        AxisPointerView.superApply(this._model, 'remove', arguments);
+    },
+
+    /**
+     * @override
+     */
+    dispose: function (ecModel, api) {
+        unregister('axisPointer', api);
+        AxisPointerView.superApply(this._model, 'dispose', arguments);
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var inner$9 = makeInner();
+var clone$4 = clone;
+var bind$2 = bind;
+
+/**
+ * Base axis pointer class in 2D.
+ * Implemenents {module:echarts/component/axis/IAxisPointer}.
+ */
+function BaseAxisPointer () {
+}
+
+BaseAxisPointer.prototype = {
+
+    /**
+     * @private
+     */
+    _group: null,
+
+    /**
+     * @private
+     */
+    _lastGraphicKey: null,
+
+    /**
+     * @private
+     */
+    _handle: null,
+
+    /**
+     * @private
+     */
+    _dragging: false,
+
+    /**
+     * @private
+     */
+    _lastValue: null,
+
+    /**
+     * @private
+     */
+    _lastStatus: null,
+
+    /**
+     * @private
+     */
+    _payloadInfo: null,
+
+    /**
+     * In px, arbitrary value. Do not set too small,
+     * no animation is ok for most cases.
+     * @protected
+     */
+    animationThreshold: 15,
+
+    /**
+     * @implement
+     */
+    render: function (axisModel, axisPointerModel, api, forceRender) {
+        var value = axisPointerModel.get('value');
+        var status = axisPointerModel.get('status');
+
+        // Bind them to `this`, not in closure, otherwise they will not
+        // be replaced when user calling setOption in not merge mode.
+        this._axisModel = axisModel;
+        this._axisPointerModel = axisPointerModel;
+        this._api = api;
+
+        // Optimize: `render` will be called repeatly during mouse move.
+        // So it is power consuming if performing `render` each time,
+        // especially on mobile device.
+        if (!forceRender
+            && this._lastValue === value
+            && this._lastStatus === status
+        ) {
+            return;
+        }
+        this._lastValue = value;
+        this._lastStatus = status;
+
+        var group = this._group;
+        var handle = this._handle;
+
+        if (!status || status === 'hide') {
+            // Do not clear here, for animation better.
+            group && group.hide();
+            handle && handle.hide();
+            return;
+        }
+        group && group.show();
+        handle && handle.show();
+
+        // Otherwise status is 'show'
+        var elOption = {};
+        this.makeElOption(elOption, value, axisModel, axisPointerModel, api);
+
+        // Enable change axis pointer type.
+        var graphicKey = elOption.graphicKey;
+        if (graphicKey !== this._lastGraphicKey) {
+            this.clear(api);
+        }
+        this._lastGraphicKey = graphicKey;
+
+        var moveAnimation = this._moveAnimation =
+            this.determineAnimation(axisModel, axisPointerModel);
+
+        if (!group) {
+            group = this._group = new Group();
+            this.createPointerEl(group, elOption, axisModel, axisPointerModel);
+            this.createLabelEl(group, elOption, axisModel, axisPointerModel);
+            api.getZr().add(group);
+        }
+        else {
+            var doUpdateProps = curry(updateProps$1, axisPointerModel, moveAnimation);
+            this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel);
+            this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);
+        }
+
+        updateMandatoryProps(group, axisPointerModel, true);
+
+        this._renderHandle(value);
+    },
+
+    /**
+     * @implement
+     */
+    remove: function (api) {
+        this.clear(api);
+    },
+
+    /**
+     * @implement
+     */
+    dispose: function (api) {
+        this.clear(api);
+    },
+
+    /**
+     * @protected
+     */
+    determineAnimation: function (axisModel, axisPointerModel) {
+        var animation = axisPointerModel.get('animation');
+        var axis = axisModel.axis;
+        var isCategoryAxis = axis.type === 'category';
+        var useSnap = axisPointerModel.get('snap');
+
+        // Value axis without snap always do not snap.
+        if (!useSnap && !isCategoryAxis) {
+            return false;
+        }
+
+        if (animation === 'auto' || animation == null) {
+            var animationThreshold = this.animationThreshold;
+            if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {
+                return true;
+            }
+
+            // It is important to auto animation when snap used. Consider if there is
+            // a dataZoom, animation will be disabled when too many points exist, while
+            // it will be enabled for better visual effect when little points exist.
+            if (useSnap) {
+                var seriesDataCount = getAxisInfo(axisModel).seriesDataCount;
+                var axisExtent = axis.getExtent();
+                // Approximate band width
+                return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;
+            }
+
+            return false;
+        }
+
+        return animation === true;
+    },
+
+    /**
+     * add {pointer, label, graphicKey} to elOption
+     * @protected
+     */
+    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {
+        // Shoule be implemenented by sub-class.
+    },
+
+    /**
+     * @protected
+     */
+    createPointerEl: function (group, elOption, axisModel, axisPointerModel) {
+        var pointerOption = elOption.pointer;
+        if (pointerOption) {
+            var pointerEl = inner$9(group).pointerEl = new graphic[pointerOption.type](
+                clone$4(elOption.pointer)
+            );
+            group.add(pointerEl);
+        }
+    },
+
+    /**
+     * @protected
+     */
+    createLabelEl: function (group, elOption, axisModel, axisPointerModel) {
+        if (elOption.label) {
+            var labelEl = inner$9(group).labelEl = new Rect(
+                clone$4(elOption.label)
+            );
+
+            group.add(labelEl);
+            updateLabelShowHide(labelEl, axisPointerModel);
+        }
+    },
+
+    /**
+     * @protected
+     */
+    updatePointerEl: function (group, elOption, updateProps$$1) {
+        var pointerEl = inner$9(group).pointerEl;
+        if (pointerEl) {
+            pointerEl.setStyle(elOption.pointer.style);
+            updateProps$$1(pointerEl, {shape: elOption.pointer.shape});
+        }
+    },
+
+    /**
+     * @protected
+     */
+    updateLabelEl: function (group, elOption, updateProps$$1, axisPointerModel) {
+        var labelEl = inner$9(group).labelEl;
+        if (labelEl) {
+            labelEl.setStyle(elOption.label.style);
+            updateProps$$1(labelEl, {
+                // Consider text length change in vertical axis, animation should
+                // be used on shape, otherwise the effect will be weird.
+                shape: elOption.label.shape,
+                position: elOption.label.position
+            });
+
+            updateLabelShowHide(labelEl, axisPointerModel);
+        }
+    },
+
+    /**
+     * @private
+     */
+    _renderHandle: function (value) {
+        if (this._dragging || !this.updateHandleTransform) {
+            return;
+        }
+
+        var axisPointerModel = this._axisPointerModel;
+        var zr = this._api.getZr();
+        var handle = this._handle;
+        var handleModel = axisPointerModel.getModel('handle');
+
+        var status = axisPointerModel.get('status');
+        if (!handleModel.get('show') || !status || status === 'hide') {
+            handle && zr.remove(handle);
+            this._handle = null;
+            return;
+        }
+
+        var isInit;
+        if (!this._handle) {
+            isInit = true;
+            handle = this._handle = createIcon(
+                handleModel.get('icon'),
+                {
+                    cursor: 'move',
+                    draggable: true,
+                    onmousemove: function (e) {
+                        // Fot mobile devicem, prevent screen slider on the button.
+                        stop(e.event);
+                    },
+                    onmousedown: bind$2(this._onHandleDragMove, this, 0, 0),
+                    drift: bind$2(this._onHandleDragMove, this),
+                    ondragend: bind$2(this._onHandleDragEnd, this)
+                }
+            );
+            zr.add(handle);
+        }
+
+        updateMandatoryProps(handle, axisPointerModel, false);
+
+        // update style
+        var includeStyles = [
+            'color', 'borderColor', 'borderWidth', 'opacity',
+            'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'
+        ];
+        handle.setStyle(handleModel.getItemStyle(null, includeStyles));
+
+        // update position
+        var handleSize = handleModel.get('size');
+        if (!isArray(handleSize)) {
+            handleSize = [handleSize, handleSize];
+        }
+        handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]);
+
+        createOrUpdate(
+            this,
+            '_doDispatchAxisPointer',
+            handleModel.get('throttle') || 0,
+            'fixRate'
+        );
+
+        this._moveHandleToValue(value, isInit);
+    },
+
+    /**
+     * @private
+     */
+    _moveHandleToValue: function (value, isInit) {
+        updateProps$1(
+            this._axisPointerModel,
+            !isInit && this._moveAnimation,
+            this._handle,
+            getHandleTransProps(this.getHandleTransform(
+                value, this._axisModel, this._axisPointerModel
+            ))
+        );
+    },
+
+    /**
+     * @private
+     */
+    _onHandleDragMove: function (dx, dy) {
+        var handle = this._handle;
+        if (!handle) {
+            return;
+        }
+
+        this._dragging = true;
+
+        // Persistent for throttle.
+        var trans = this.updateHandleTransform(
+            getHandleTransProps(handle),
+            [dx, dy],
+            this._axisModel,
+            this._axisPointerModel
+        );
+        this._payloadInfo = trans;
+
+        handle.stopAnimation();
+        handle.attr(getHandleTransProps(trans));
+        inner$9(handle).lastProp = null;
+
+        this._doDispatchAxisPointer();
+    },
+
+    /**
+     * Throttled method.
+     * @private
+     */
+    _doDispatchAxisPointer: function () {
+        var handle = this._handle;
+        if (!handle) {
+            return;
+        }
+
+        var payloadInfo = this._payloadInfo;
+        var axisModel = this._axisModel;
+        this._api.dispatchAction({
+            type: 'updateAxisPointer',
+            x: payloadInfo.cursorPoint[0],
+            y: payloadInfo.cursorPoint[1],
+            tooltipOption: payloadInfo.tooltipOption,
+            axesInfo: [{
+                axisDim: axisModel.axis.dim,
+                axisIndex: axisModel.componentIndex
+            }]
+        });
+    },
+
+    /**
+     * @private
+     */
+    _onHandleDragEnd: function (moveAnimation) {
+        this._dragging = false;
+        var handle = this._handle;
+        if (!handle) {
+            return;
+        }
+
+        var value = this._axisPointerModel.get('value');
+        // Consider snap or categroy axis, handle may be not consistent with
+        // axisPointer. So move handle to align the exact value position when
+        // drag ended.
+        this._moveHandleToValue(value);
+
+        // For the effect: tooltip will be shown when finger holding on handle
+        // button, and will be hidden after finger left handle button.
+        this._api.dispatchAction({
+            type: 'hideTip'
+        });
+    },
+
+    /**
+     * Should be implemenented by sub-class if support `handle`.
+     * @protected
+     * @param {number} value
+     * @param {module:echarts/model/Model} axisModel
+     * @param {module:echarts/model/Model} axisPointerModel
+     * @return {Object} {position: [x, y], rotation: 0}
+     */
+    getHandleTransform: null,
+
+    /**
+     * * Should be implemenented by sub-class if support `handle`.
+     * @protected
+     * @param {Object} transform {position, rotation}
+     * @param {Array.<number>} delta [dx, dy]
+     * @param {module:echarts/model/Model} axisModel
+     * @param {module:echarts/model/Model} axisPointerModel
+     * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]}
+     */
+    updateHandleTransform: null,
+
+    /**
+     * @private
+     */
+    clear: function (api) {
+        this._lastValue = null;
+        this._lastStatus = null;
+
+        var zr = api.getZr();
+        var group = this._group;
+        var handle = this._handle;
+        if (zr && group) {
+            this._lastGraphicKey = null;
+            group && zr.remove(group);
+            handle && zr.remove(handle);
+            this._group = null;
+            this._handle = null;
+            this._payloadInfo = null;
+        }
+    },
+
+    /**
+     * @protected
+     */
+    doClear: function () {
+        // Implemented by sub-class if necessary.
+    },
+
+    /**
+     * @protected
+     * @param {Array.<number>} xy
+     * @param {Array.<number>} wh
+     * @param {number} [xDimIndex=0] or 1
+     */
+    buildLabel: function (xy, wh, xDimIndex) {
+        xDimIndex = xDimIndex || 0;
+        return {
+            x: xy[xDimIndex],
+            y: xy[1 - xDimIndex],
+            width: wh[xDimIndex],
+            height: wh[1 - xDimIndex]
+        };
+    }
+};
+
+BaseAxisPointer.prototype.constructor = BaseAxisPointer;
+
+
+function updateProps$1(animationModel, moveAnimation, el, props) {
+    // Animation optimize.
+    if (!propsEqual(inner$9(el).lastProp, props)) {
+        inner$9(el).lastProp = props;
+        moveAnimation
+            ? updateProps(el, props, animationModel)
+            : (el.stopAnimation(), el.attr(props));
+    }
+}
+
+function propsEqual(lastProps, newProps) {
+    if (isObject$1(lastProps) && isObject$1(newProps)) {
+        var equals = true;
+        each$1(newProps, function (item, key) {
+            equals = equals && propsEqual(lastProps[key], item);
+        });
+        return !!equals;
+    }
+    else {
+        return lastProps === newProps;
+    }
+}
+
+function updateLabelShowHide(labelEl, axisPointerModel) {
+    labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide']();
+}
+
+function getHandleTransProps(trans) {
+    return {
+        position: trans.position.slice(),
+        rotation: trans.rotation || 0
+    };
+}
+
+function updateMandatoryProps(group, axisPointerModel, silent) {
+    var z = axisPointerModel.get('z');
+    var zlevel = axisPointerModel.get('zlevel');
+
+    group && group.traverse(function (el) {
+        if (el.type !== 'group') {
+            z != null && (el.z = z);
+            zlevel != null && (el.zlevel = zlevel);
+            el.silent = silent;
+        }
+    });
+}
+
+enableClassExtend(BaseAxisPointer);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/model/Model} axisPointerModel
+ */
+function buildElStyle(axisPointerModel) {
+    var axisPointerType = axisPointerModel.get('type');
+    var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');
+    var style;
+    if (axisPointerType === 'line') {
+        style = styleModel.getLineStyle();
+        style.fill = null;
+    }
+    else if (axisPointerType === 'shadow') {
+        style = styleModel.getAreaStyle();
+        style.stroke = null;
+    }
+    return style;
+}
+
+/**
+ * @param {Function} labelPos {align, verticalAlign, position}
+ */
+function buildLabelElOption(
+    elOption, axisModel, axisPointerModel, api, labelPos
+) {
+    var value = axisPointerModel.get('value');
+    var text = getValueLabel(
+        value, axisModel.axis, axisModel.ecModel,
+        axisPointerModel.get('seriesDataIndices'),
+        {
+            precision: axisPointerModel.get('label.precision'),
+            formatter: axisPointerModel.get('label.formatter')
+        }
+    );
+    var labelModel = axisPointerModel.getModel('label');
+    var paddings = normalizeCssArray$1(labelModel.get('padding') || 0);
+
+    var font = labelModel.getFont();
+    var textRect = getBoundingRect(text, font);
+
+    var position = labelPos.position;
+    var width = textRect.width + paddings[1] + paddings[3];
+    var height = textRect.height + paddings[0] + paddings[2];
+
+    // Adjust by align.
+    var align = labelPos.align;
+    align === 'right' && (position[0] -= width);
+    align === 'center' && (position[0] -= width / 2);
+    var verticalAlign = labelPos.verticalAlign;
+    verticalAlign === 'bottom' && (position[1] -= height);
+    verticalAlign === 'middle' && (position[1] -= height / 2);
+
+    // Not overflow ec container
+    confineInContainer(position, width, height, api);
+
+    var bgColor = labelModel.get('backgroundColor');
+    if (!bgColor || bgColor === 'auto') {
+        bgColor = axisModel.get('axisLine.lineStyle.color');
+    }
+
+    elOption.label = {
+        shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')},
+        position: position.slice(),
+        // TODO: rich
+        style: {
+            text: text,
+            textFont: font,
+            textFill: labelModel.getTextColor(),
+            textPosition: 'inside',
+            fill: bgColor,
+            stroke: labelModel.get('borderColor') || 'transparent',
+            lineWidth: labelModel.get('borderWidth') || 0,
+            shadowBlur: labelModel.get('shadowBlur'),
+            shadowColor: labelModel.get('shadowColor'),
+            shadowOffsetX: labelModel.get('shadowOffsetX'),
+            shadowOffsetY: labelModel.get('shadowOffsetY')
+        },
+        // Lable should be over axisPointer.
+        z2: 10
+    };
+}
+
+// Do not overflow ec container
+function confineInContainer(position, width, height, api) {
+    var viewWidth = api.getWidth();
+    var viewHeight = api.getHeight();
+    position[0] = Math.min(position[0] + width, viewWidth) - width;
+    position[1] = Math.min(position[1] + height, viewHeight) - height;
+    position[0] = Math.max(position[0], 0);
+    position[1] = Math.max(position[1], 0);
+}
+
+/**
+ * @param {number} value
+ * @param {module:echarts/coord/Axis} axis
+ * @param {module:echarts/model/Global} ecModel
+ * @param {Object} opt
+ * @param {Array.<Object>} seriesDataIndices
+ * @param {number|string} opt.precision 'auto' or a number
+ * @param {string|Function} opt.formatter label formatter
+ */
+function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {
+    value = axis.scale.parse(value);
+    var text = axis.scale.getLabel(
+        // If `precision` is set, width can be fixed (like '12.00500'), which
+        // helps to debounce when when moving label.
+        value, {precision: opt.precision}
+    );
+    var formatter = opt.formatter;
+
+    if (formatter) {
+        var params = {
+            value: getAxisRawValue(axis, value),
+            seriesData: []
+        };
+        each$1(seriesDataIndices, function (idxItem) {
+            var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
+            var dataIndex = idxItem.dataIndexInside;
+            var dataParams = series && series.getDataParams(dataIndex);
+            dataParams && params.seriesData.push(dataParams);
+        });
+
+        if (isString(formatter)) {
+            text = formatter.replace('{value}', text);
+        }
+        else if (isFunction$1(formatter)) {
+            text = formatter(params);
+        }
+    }
+
+    return text;
+}
+
+/**
+ * @param {module:echarts/coord/Axis} axis
+ * @param {number} value
+ * @param {Object} layoutInfo {
+ *  rotation, position, labelOffset, labelDirection, labelMargin
+ * }
+ */
+function getTransformedPosition (axis, value, layoutInfo) {
+    var transform = create$1();
+    rotate(transform, transform, layoutInfo.rotation);
+    translate(transform, transform, layoutInfo.position);
+
+    return applyTransform$1([
+        axis.dataToCoord(value),
+        (layoutInfo.labelOffset || 0)
+            + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)
+    ], transform);
+}
+
+function buildCartesianSingleLabelElOption(
+    value, elOption, layoutInfo, axisModel, axisPointerModel, api
+) {
+    var textLayout = AxisBuilder.innerTextLayout(
+        layoutInfo.rotation, 0, layoutInfo.labelDirection
+    );
+    layoutInfo.labelMargin = axisPointerModel.get('label.margin');
+    buildLabelElOption(elOption, axisModel, axisPointerModel, api, {
+        position: getTransformedPosition(axisModel.axis, value, layoutInfo),
+        align: textLayout.textAlign,
+        verticalAlign: textLayout.textVerticalAlign
+    });
+}
+
+/**
+ * @param {Array.<number>} p1
+ * @param {Array.<number>} p2
+ * @param {number} [xDimIndex=0] or 1
+ */
+function makeLineShape(p1, p2, xDimIndex) {
+    xDimIndex = xDimIndex || 0;
+    return {
+        x1: p1[xDimIndex],
+        y1: p1[1 - xDimIndex],
+        x2: p2[xDimIndex],
+        y2: p2[1 - xDimIndex]
+    };
+}
+
+/**
+ * @param {Array.<number>} xy
+ * @param {Array.<number>} wh
+ * @param {number} [xDimIndex=0] or 1
+ */
+function makeRectShape(xy, wh, xDimIndex) {
+    xDimIndex = xDimIndex || 0;
+    return {
+        x: xy[xDimIndex],
+        y: xy[1 - xDimIndex],
+        width: wh[xDimIndex],
+        height: wh[1 - xDimIndex]
+    };
+}
+
+function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {
+    return {
+        cx: cx,
+        cy: cy,
+        r0: r0,
+        r: r,
+        startAngle: startAngle,
+        endAngle: endAngle,
+        clockwise: true
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var CartesianAxisPointer = BaseAxisPointer.extend({
+
+    /**
+     * @override
+     */
+    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {
+        var axis = axisModel.axis;
+        var grid = axis.grid;
+        var axisPointerType = axisPointerModel.get('type');
+        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
+        var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));
+
+        if (axisPointerType && axisPointerType !== 'none') {
+            var elStyle = buildElStyle(axisPointerModel);
+            var pointerOption = pointerShapeBuilder[axisPointerType](
+                axis, pixelValue, otherExtent, elStyle
+            );
+            pointerOption.style = elStyle;
+            elOption.graphicKey = pointerOption.type;
+            elOption.pointer = pointerOption;
+        }
+
+        var layoutInfo = layout$1(grid.model, axisModel);
+        buildCartesianSingleLabelElOption(
+            value, elOption, layoutInfo, axisModel, axisPointerModel, api
+        );
+    },
+
+    /**
+     * @override
+     */
+    getHandleTransform: function (value, axisModel, axisPointerModel) {
+        var layoutInfo = layout$1(axisModel.axis.grid.model, axisModel, {
+            labelInside: false
+        });
+        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');
+        return {
+            position: getTransformedPosition(axisModel.axis, value, layoutInfo),
+            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)
+        };
+    },
+
+    /**
+     * @override
+     */
+    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {
+        var axis = axisModel.axis;
+        var grid = axis.grid;
+        var axisExtent = axis.getGlobalExtent(true);
+        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();
+        var dimIndex = axis.dim === 'x' ? 0 : 1;
+
+        var currPosition = transform.position;
+        currPosition[dimIndex] += delta[dimIndex];
+        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);
+        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);
+
+        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;
+        var cursorPoint = [cursorOtherValue, cursorOtherValue];
+        cursorPoint[dimIndex] = currPosition[dimIndex];
+
+        // Make tooltip do not overlap axisPointer and in the middle of the grid.
+        var tooltipOptions = [{verticalAlign: 'middle'}, {align: 'center'}];
+
+        return {
+            position: currPosition,
+            rotation: transform.rotation,
+            cursorPoint: cursorPoint,
+            tooltipOption: tooltipOptions[dimIndex]
+        };
+    }
+
+});
+
+function getCartesian(grid, axis) {
+    var opt = {};
+    opt[axis.dim + 'AxisIndex'] = axis.index;
+    return grid.getCartesian(opt);
+}
+
+var pointerShapeBuilder = {
+
+    line: function (axis, pixelValue, otherExtent, elStyle) {
+        var targetShape = makeLineShape(
+            [pixelValue, otherExtent[0]],
+            [pixelValue, otherExtent[1]],
+            getAxisDimIndex(axis)
+        );
+        subPixelOptimizeLine({
+            shape: targetShape,
+            style: elStyle
+        });
+        return {
+            type: 'Line',
+            shape: targetShape
+        };
+    },
+
+    shadow: function (axis, pixelValue, otherExtent, elStyle) {
+        var bandWidth = Math.max(1, axis.getBandWidth());
+        var span = otherExtent[1] - otherExtent[0];
+        return {
+            type: 'Rect',
+            shape: makeRectShape(
+                [pixelValue - bandWidth / 2, otherExtent[0]],
+                [bandWidth, span],
+                getAxisDimIndex(axis)
+            )
+        };
+    }
+};
+
+function getAxisDimIndex(axis) {
+    return axis.dim === 'x' ? 0 : 1;
+}
+
+AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// CartesianAxisPointer is not supposed to be required here. But consider
+// echarts.simple.js and online build tooltip, which only require gridSimple,
+// CartesianAxisPointer should be able to required somewhere.
+registerPreprocessor(function (option) {
+    // Always has a global axisPointerModel for default setting.
+    if (option) {
+        (!option.axisPointer || option.axisPointer.length === 0)
+            && (option.axisPointer = {});
+
+        var link = option.axisPointer.link;
+        // Normalize to array to avoid object mergin. But if link
+        // is not set, remain null/undefined, otherwise it will
+        // override existent link setting.
+        if (link && !isArray(link)) {
+            option.axisPointer.link = [link];
+        }
+    }
+});
+
+// This process should proformed after coordinate systems created
+// and series data processed. So put it on statistic processing stage.
+registerProcessor(PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) {
+    // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.
+    // allAxesInfo should be updated when setOption performed.
+    ecModel.getComponent('axisPointer').coordSysAxesInfo
+        = collect(ecModel, api);
+});
+
+// Broadcast to all views.
+registerAction({
+    type: 'updateAxisPointer',
+    event: 'updateAxisPointer',
+    update: ':updateAxisPointer'
+}, axisTrigger);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var XY = ['x', 'y'];
+var WH = ['width', 'height'];
+
+var SingleAxisPointer = BaseAxisPointer.extend({
+
+    /**
+     * @override
+     */
+    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {
+        var axis = axisModel.axis;
+        var coordSys = axis.coordinateSystem;
+        var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis));
+        var pixelValue = coordSys.dataToPoint(value)[0];
+
+        var axisPointerType = axisPointerModel.get('type');
+        if (axisPointerType && axisPointerType !== 'none') {
+            var elStyle = buildElStyle(axisPointerModel);
+            var pointerOption = pointerShapeBuilder$1[axisPointerType](
+                axis, pixelValue, otherExtent, elStyle
+            );
+            pointerOption.style = elStyle;
+
+            elOption.graphicKey = pointerOption.type;
+            elOption.pointer = pointerOption;
+        }
+
+        var layoutInfo = layout$2(axisModel);
+        buildCartesianSingleLabelElOption(
+            value, elOption, layoutInfo, axisModel, axisPointerModel, api
+        );
+    },
+
+    /**
+     * @override
+     */
+    getHandleTransform: function (value, axisModel, axisPointerModel) {
+        var layoutInfo = layout$2(axisModel, {labelInside: false});
+        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');
+        return {
+            position: getTransformedPosition(axisModel.axis, value, layoutInfo),
+            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)
+        };
+    },
+
+    /**
+     * @override
+     */
+    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {
+        var axis = axisModel.axis;
+        var coordSys = axis.coordinateSystem;
+        var dimIndex = getPointDimIndex(axis);
+        var axisExtent = getGlobalExtent(coordSys, dimIndex);
+        var currPosition = transform.position;
+        currPosition[dimIndex] += delta[dimIndex];
+        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);
+        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);
+        var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex);
+        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;
+        var cursorPoint = [cursorOtherValue, cursorOtherValue];
+        cursorPoint[dimIndex] = currPosition[dimIndex];
+
+        return {
+            position: currPosition,
+            rotation: transform.rotation,
+            cursorPoint: cursorPoint,
+            tooltipOption: {
+                verticalAlign: 'middle'
+            }
+        };
+    }
+});
+
+var pointerShapeBuilder$1 = {
+
+    line: function (axis, pixelValue, otherExtent, elStyle) {
+        var targetShape = makeLineShape(
+            [pixelValue, otherExtent[0]],
+            [pixelValue, otherExtent[1]],
+            getPointDimIndex(axis)
+        );
+        subPixelOptimizeLine({
+            shape: targetShape,
+            style: elStyle
+        });
+        return {
+            type: 'Line',
+            shape: targetShape
+        };
+    },
+
+    shadow: function (axis, pixelValue, otherExtent, elStyle) {
+        var bandWidth = axis.getBandWidth();
+        var span = otherExtent[1] - otherExtent[0];
+        return {
+            type: 'Rect',
+            shape: makeRectShape(
+                [pixelValue - bandWidth / 2, otherExtent[0]],
+                [bandWidth, span],
+                getPointDimIndex(axis)
+            )
+        };
+    }
+};
+
+function getPointDimIndex(axis) {
+    return axis.isHorizontal() ? 0 : 1;
+}
+
+function getGlobalExtent(coordSys, dimIndex) {
+    var rect = coordSys.getRect();
+    return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]];
+}
+
+AxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentView({
+    type: 'single'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file  Define the themeRiver view's series model
+ * @author Deqing Li(annong035@gmail.com)
+ */
+
+var DATA_NAME_INDEX = 2;
+
+var ThemeRiverSeries = SeriesModel.extend({
+
+    type: 'series.themeRiver',
+
+    dependencies: ['singleAxis'],
+
+    /**
+     * @readOnly
+     * @type {module:zrender/core/util#HashMap}
+     */
+    nameMap: null,
+
+    /**
+     * @override
+     */
+    init: function (option) {
+        ThemeRiverSeries.superApply(this, 'init', arguments);
+
+        // Put this function here is for the sake of consistency of code style.
+        // Enable legend selection for each data item
+        // Use a function instead of direct access because data reference may changed
+        this.legendDataProvider = function () {
+            return this.getRawData();
+        };
+    },
+
+    /**
+     * If there is no value of a certain point in the time for some event,set it value to 0.
+     *
+     * @param {Array} data  initial data in the option
+     * @return {Array}
+     */
+    fixData: function (data) {
+        var rawDataLength = data.length;
+
+        // grouped data by name
+        var dataByName = nest()
+            .key(function (dataItem) {
+                return dataItem[2];
+            })
+            .entries(data);
+
+        // data group in each layer
+        var layData = map(dataByName, function (d) {
+            return {
+                name: d.key,
+                dataList: d.values
+            };
+        });
+
+        var layerNum = layData.length;
+        var largestLayer = -1;
+        var index = -1;
+        for (var i = 0; i < layerNum; ++i) {
+            var len = layData[i].dataList.length;
+            if (len > largestLayer) {
+                largestLayer = len;
+                index = i;
+            }
+        }
+
+        for (var k = 0; k < layerNum; ++k) {
+            if (k === index) {
+                continue;
+            }
+            var name = layData[k].name;
+            for (var j = 0; j < largestLayer; ++j) {
+                var timeValue = layData[index].dataList[j][0];
+                var length = layData[k].dataList.length;
+                var keyIndex = -1;
+                for (var l = 0; l < length; ++l) {
+                    var value = layData[k].dataList[l][0];
+                    if (value === timeValue) {
+                        keyIndex = l;
+                        break;
+                    }
+                }
+                if (keyIndex === -1) {
+                    data[rawDataLength] = [];
+                    data[rawDataLength][0] = timeValue;
+                    data[rawDataLength][1] = 0;
+                    data[rawDataLength][2] = name;
+                    rawDataLength++;
+
+                }
+            }
+        }
+        return data;
+    },
+
+    /**
+     * @override
+     * @param  {Object} option  the initial option that user gived
+     * @param  {module:echarts/model/Model} ecModel  the model object for themeRiver option
+     * @return {module:echarts/data/List}
+     */
+    getInitialData: function (option, ecModel) {
+
+        var singleAxisModel = ecModel.queryComponents({
+            mainType: 'singleAxis',
+            index: this.get('singleAxisIndex'),
+            id: this.get('singleAxisId')
+        })[0];
+
+        var axisType = singleAxisModel.get('type');
+
+        // filter the data item with the value of label is undefined
+        var filterData = filter(option.data, function (dataItem) {
+            return dataItem[2] !== undefined;
+        });
+
+        // ??? TODO design a stage to transfer data for themeRiver and lines?
+        var data = this.fixData(filterData || []);
+        var nameList = [];
+        var nameMap = this.nameMap = createHashMap();
+        var count = 0;
+
+        for (var i = 0; i < data.length; ++i) {
+            nameList.push(data[i][DATA_NAME_INDEX]);
+            if (!nameMap.get(data[i][DATA_NAME_INDEX])) {
+                nameMap.set(data[i][DATA_NAME_INDEX], count);
+                count++;
+            }
+        }
+
+        var dimensionsInfo = createDimensions(data, {
+            coordDimensions: ['single'],
+            dimensionsDefine: [
+                {
+                    name: 'time',
+                    type: getDimensionTypeByAxis(axisType)
+                },
+                {
+                    name: 'value',
+                    type: 'float'
+                },
+                {
+                    name: 'name',
+                    type: 'ordinal'
+                }
+            ],
+            encodeDefine: {
+                single: 0,
+                value: 1,
+                itemName: 2
+            }
+        });
+
+        var list = new List(dimensionsInfo, this);
+        list.initData(data);
+
+        return list;
+    },
+
+    /**
+     * The raw data is divided into multiple layers and each layer
+     *     has same name.
+     *
+     * @return {Array.<Array.<number>>}
+     */
+    getLayerSeries: function () {
+        var data = this.getData();
+        var lenCount = data.count();
+        var indexArr = [];
+
+        for (var i = 0; i < lenCount; ++i) {
+            indexArr[i] = i;
+        }
+        // data group by name
+        var dataByName = nest()
+            .key(function (index) {
+                return data.get('name', index);
+            })
+            .entries(indexArr);
+
+        var layerSeries = map(dataByName, function (d) {
+            return {
+                name: d.key,
+                indices: d.values
+            };
+        });
+
+        var timeDim = data.mapDimension('single');
+
+        for (var j = 0; j < layerSeries.length; ++j) {
+            layerSeries[j].indices.sort(comparer);
+        }
+
+        function comparer(index1, index2) {
+            return data.get(timeDim, index1) - data.get(timeDim, index2);
+        }
+
+        return layerSeries;
+    },
+
+    /**
+     * Get data indices for show tooltip content
+     *
+     * @param {Array.<string>|string} dim  single coordinate dimension
+     * @param {number} value axis value
+     * @param {module:echarts/coord/single/SingleAxis} baseAxis  single Axis used
+     *     the themeRiver.
+     * @return {Object} {dataIndices, nestestValue}
+     */
+    getAxisTooltipData: function (dim, value, baseAxis) {
+        if (!isArray(dim)) {
+            dim = dim ? [dim] : [];
+        }
+
+        var data = this.getData();
+        var layerSeries = this.getLayerSeries();
+        var indices = [];
+        var layerNum = layerSeries.length;
+        var nestestValue;
+
+        for (var i = 0; i < layerNum; ++i) {
+            var minDist = Number.MAX_VALUE;
+            var nearestIdx = -1;
+            var pointNum = layerSeries[i].indices.length;
+            for (var j = 0; j < pointNum; ++j) {
+                var theValue = data.get(dim[0], layerSeries[i].indices[j]);
+                var dist = Math.abs(theValue - value);
+                if (dist <= minDist) {
+                    nestestValue = theValue;
+                    minDist = dist;
+                    nearestIdx = layerSeries[i].indices[j];
+                }
+            }
+            indices.push(nearestIdx);
+        }
+
+        return {dataIndices: indices, nestestValue: nestestValue};
+    },
+
+    /**
+     * @override
+     * @param {number} dataIndex  index of data
+     */
+    formatTooltip: function (dataIndex) {
+        var data = this.getData();
+        var htmlName = data.getName(dataIndex);
+        var htmlValue = data.get(data.mapDimension('value'), dataIndex);
+        if (isNaN(htmlValue) || htmlValue == null) {
+            htmlValue = '-';
+        }
+        return encodeHTML(htmlName + ' : ' + htmlValue);
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+
+        coordinateSystem: 'singleAxis',
+
+        // gap in axis's orthogonal orientation
+        boundaryGap: ['10%', '10%'],
+
+        // legendHoverLink: true,
+
+        singleAxisIndex: 0,
+
+        animationEasing: 'linear',
+
+        label: {
+            margin: 4,
+            show: true,
+            position: 'left',
+            color: '#000',
+            fontSize: 11
+        },
+
+        emphasis: {
+            label: {
+                show: true
+            }
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file  The file used to draw themeRiver view
+ * @author  Deqing Li(annong035@gmail.com)
+ */
+
+extendChartView({
+
+    type: 'themeRiver',
+
+    init: function () {
+        this._layers = [];
+    },
+
+    render: function (seriesModel, ecModel, api) {
+        var data = seriesModel.getData();
+
+        var group = this.group;
+
+        var layerSeries = seriesModel.getLayerSeries();
+
+        var layoutInfo = data.getLayout('layoutInfo');
+        var rect = layoutInfo.rect;
+        var boundaryGap = layoutInfo.boundaryGap;
+
+        group.attr('position', [0, rect.y + boundaryGap[0]]);
+
+        function keyGetter(item) {
+            return item.name;
+        }
+        var dataDiffer = new DataDiffer(
+            this._layersSeries || [], layerSeries,
+            keyGetter, keyGetter
+        );
+
+        var newLayersGroups = {};
+
+        dataDiffer
+            .add(bind(process, this, 'add'))
+            .update(bind(process, this, 'update'))
+            .remove(bind(process, this, 'remove'))
+            .execute();
+
+        function process(status, idx, oldIdx) {
+            var oldLayersGroups = this._layers;
+            if (status === 'remove') {
+                group.remove(oldLayersGroups[idx]);
+                return;
+            }
+            var points0 = [];
+            var points1 = [];
+            var color;
+            var indices = layerSeries[idx].indices;
+            for (var j = 0; j < indices.length; j++) {
+                var layout = data.getItemLayout(indices[j]);
+                var x = layout.x;
+                var y0 = layout.y0;
+                var y = layout.y;
+
+                points0.push([x, y0]);
+                points1.push([x, y0 + y]);
+
+                color = data.getItemVisual(indices[j], 'color');
+            }
+
+            var polygon;
+            var text;
+            var textLayout = data.getItemLayout(indices[0]);
+            var itemModel = data.getItemModel(indices[j - 1]);
+            var labelModel = itemModel.getModel('label');
+            var margin = labelModel.get('margin');
+            if (status === 'add') {
+                var layerGroup = newLayersGroups[idx] = new Group();
+                polygon = new Polygon$1({
+                    shape: {
+                        points: points0,
+                        stackedOnPoints: points1,
+                        smooth: 0.4,
+                        stackedOnSmooth: 0.4,
+                        smoothConstraint: false
+                    },
+                    z2: 0
+                });
+                text = new Text({
+                    style: {
+                        x: textLayout.x - margin,
+                        y: textLayout.y0 + textLayout.y / 2
+                    }
+                });
+                layerGroup.add(polygon);
+                layerGroup.add(text);
+                group.add(layerGroup);
+
+                polygon.setClipPath(createGridClipShape$3(polygon.getBoundingRect(), seriesModel, function () {
+                    polygon.removeClipPath();
+                }));
+            }
+            else {
+                var layerGroup = oldLayersGroups[oldIdx];
+                polygon = layerGroup.childAt(0);
+                text = layerGroup.childAt(1);
+                group.add(layerGroup);
+
+                newLayersGroups[idx] = layerGroup;
+
+                updateProps(polygon, {
+                    shape: {
+                        points: points0,
+                        stackedOnPoints: points1
+                    }
+                }, seriesModel);
+
+                updateProps(text, {
+                    style: {
+                        x: textLayout.x - margin,
+                        y: textLayout.y0 + textLayout.y / 2
+                    }
+                }, seriesModel);
+            }
+
+            var hoverItemStyleModel = itemModel.getModel('emphasis.itemStyle');
+            var itemStyleModel = itemModel.getModel('itemStyle');
+
+            setTextStyle(text.style, labelModel, {
+                text: labelModel.get('show')
+                    ? seriesModel.getFormattedLabel(indices[j - 1], 'normal')
+                        || data.getName(indices[j - 1])
+                    : null,
+                textVerticalAlign: 'middle'
+            });
+
+            polygon.setStyle(extend({
+                fill: color
+            }, itemStyleModel.getItemStyle(['color'])));
+
+            setHoverStyle(polygon, hoverItemStyleModel.getItemStyle());
+        }
+
+        this._layersSeries = layerSeries;
+        this._layers = newLayersGroups;
+    },
+
+    dispose: function () {}
+});
+
+// add animation to the view
+function createGridClipShape$3(rect, seriesModel, cb) {
+    var rectEl = new Rect({
+        shape: {
+            x: rect.x - 10,
+            y: rect.y - 10,
+            width: 0,
+            height: rect.height + 20
+        }
+    });
+    initProps(rectEl, {
+        shape: {
+            width: rect.width + 20,
+            height: rect.height + 20
+        }
+    }, seriesModel, cb);
+
+    return rectEl;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file  Using layout algorithm transform the raw data to layout information.
+ * @author Deqing Li(annong035@gmail.com)
+ */
+
+var themeRiverLayout = function (ecModel, api) {
+
+    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {
+
+        var data = seriesModel.getData();
+
+        var single = seriesModel.coordinateSystem;
+
+        var layoutInfo = {};
+
+        // use the axis boundingRect for view
+        var rect = single.getRect();
+
+        layoutInfo.rect = rect;
+
+        var boundaryGap = seriesModel.get('boundaryGap');
+
+        var axis = single.getAxis();
+
+        layoutInfo.boundaryGap = boundaryGap;
+
+        if (axis.orient === 'horizontal') {
+            boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.height);
+            boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.height);
+            var height = rect.height - boundaryGap[0] - boundaryGap[1];
+            themeRiverLayout$1(data, seriesModel, height);
+        }
+        else {
+            boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.width);
+            boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.width);
+            var width = rect.width - boundaryGap[0] - boundaryGap[1];
+            themeRiverLayout$1(data, seriesModel, width);
+        }
+
+        data.setLayout('layoutInfo', layoutInfo);
+    });
+};
+
+/**
+ * The layout information about themeriver
+ *
+ * @param {module:echarts/data/List} data  data in the series
+ * @param {module:echarts/model/Series} seriesModel  the model object of themeRiver series
+ * @param {number} height  value used to compute every series height
+ */
+function themeRiverLayout$1(data, seriesModel, height) {
+    if (!data.count()) {
+        return;
+    }
+    var coordSys = seriesModel.coordinateSystem;
+    // the data in each layer are organized into a series.
+    var layerSeries = seriesModel.getLayerSeries();
+
+    // the points in each layer.
+    var timeDim = data.mapDimension('single');
+    var valueDim = data.mapDimension('value');
+    var layerPoints = map(layerSeries, function (singleLayer) {
+        return map(singleLayer.indices, function (idx) {
+            var pt = coordSys.dataToPoint(data.get(timeDim, idx));
+            pt[1] = data.get(valueDim, idx);
+            return pt;
+        });
+    });
+
+    var base = computeBaseline(layerPoints);
+    var baseLine = base.y0;
+    var ky = height / base.max;
+
+    // set layout information for each item.
+    var n = layerSeries.length;
+    var m = layerSeries[0].indices.length;
+    var baseY0;
+    for (var j = 0; j < m; ++j) {
+        baseY0 = baseLine[j] * ky;
+        data.setItemLayout(layerSeries[0].indices[j], {
+            layerIndex: 0,
+            x: layerPoints[0][j][0],
+            y0: baseY0,
+            y: layerPoints[0][j][1] * ky
+        });
+        for (var i = 1; i < n; ++i) {
+            baseY0 += layerPoints[i - 1][j][1] * ky;
+            data.setItemLayout(layerSeries[i].indices[j], {
+                layerIndex: i,
+                x: layerPoints[i][j][0],
+                y0: baseY0,
+                y: layerPoints[i][j][1] * ky
+            });
+        }
+    }
+}
+
+/**
+ * Compute the baseLine of the rawdata
+ * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics
+ *
+ * @param  {Array.<Array>} data  the points in each layer
+ * @return {Object}
+ */
+function computeBaseline(data) {
+    var layerNum = data.length;
+    var pointNum = data[0].length;
+    var sums = [];
+    var y0 = [];
+    var max = 0;
+    var temp;
+    var base = {};
+
+    for (var i = 0; i < pointNum; ++i) {
+        for (var j = 0, temp = 0; j < layerNum; ++j) {
+            temp += data[j][i][1];
+        }
+        if (temp > max) {
+            max = temp;
+        }
+        sums.push(temp);
+    }
+
+    for (var k = 0; k < pointNum; ++k) {
+        y0[k] = (max - sums[k]) / 2;
+    }
+    max = 0;
+
+    for (var l = 0; l < pointNum; ++l) {
+        var sum = sums[l] + y0[l];
+        if (sum > max) {
+            max = sum;
+        }
+    }
+    base.y0 = y0;
+    base.max = max;
+
+    return base;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Visual encoding for themeRiver view
+ * @author  Deqing Li(annong035@gmail.com)
+ */
+
+var themeRiverVisual = function (ecModel) {
+    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {
+        var data = seriesModel.getData();
+        var rawData = seriesModel.getRawData();
+        var colorList = seriesModel.get('color');
+        var idxMap = createHashMap();
+
+        data.each(function (idx) {
+            idxMap.set(data.getRawIndex(idx), idx);
+        });
+
+        rawData.each(function (rawIndex) {
+            var name = rawData.getName(rawIndex);
+            var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length];
+
+            rawData.setItemVisual(rawIndex, 'color', color);
+
+            var idx = idxMap.get(rawIndex);
+
+            if (idx != null) {
+                data.setItemVisual(idx, 'color', color);
+            }
+        });
+    });
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerLayout(themeRiverLayout);
+registerVisual(themeRiverVisual);
+registerProcessor(dataFilter('themeRiver'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+SeriesModel.extend({
+
+    type: 'series.sunburst',
+
+    /**
+     * @type {module:echarts/data/Tree~Node}
+     */
+    _viewRoot: null,
+
+    getInitialData: function (option, ecModel) {
+        // Create a virtual root.
+        var root = { name: option.name, children: option.data };
+
+        completeTreeValue$1(root);
+
+        var levels = option.levels || [];
+
+        // levels = option.levels = setDefault(levels, ecModel);
+
+        var treeOption = {};
+
+        treeOption.levels = levels;
+
+        // Make sure always a new tree is created when setOption,
+        // in TreemapView, we check whether oldTree === newTree
+        // to choose mappings approach among old shapes and new shapes.
+        return Tree.createTree(root, this, treeOption).data;
+    },
+
+    optionUpdated: function () {
+        this.resetViewRoot();
+    },
+
+    /*
+     * @override
+     */
+    getDataParams: function (dataIndex) {
+        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);
+
+        var node = this.getData().tree.getNodeByDataIndex(dataIndex);
+        params.treePathInfo = wrapTreePathInfo(node, this);
+
+        return params;
+    },
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+
+        // 默认全局居中
+        center: ['50%', '50%'],
+        radius: [0, '75%'],
+        // 默认顺时针
+        clockwise: true,
+        startAngle: 90,
+        // 最小角度改为0
+        minAngle: 0,
+
+        percentPrecision: 2,
+
+        // If still show when all data zero.
+        stillShowZeroSum: true,
+
+        // Policy of highlighting pieces when hover on one
+        // Valid values: 'none' (for not downplay others), 'descendant',
+        // 'ancestor', 'self'
+        highlightPolicy: 'descendant',
+
+        // 'rootToNode', 'link', or false
+        nodeClick: 'rootToNode',
+
+        renderLabelForZeroData: false,
+
+        label: {
+            // could be: 'radial', 'tangential', or 'none'
+            rotate: 'radial',
+            show: true,
+            opacity: 1,
+            // 'left' is for inner side of inside, and 'right' is for outter
+            // side for inside
+            align: 'center',
+            position: 'inside',
+            distance: 5,
+            silent: true,
+            emphasis: {}
+        },
+        itemStyle: {
+            borderWidth: 1,
+            borderColor: 'white',
+            opacity: 1,
+            emphasis: {},
+            highlight: {
+                opacity: 1
+            },
+            downplay: {
+                opacity: 0.9
+            }
+        },
+
+        // Animation type canbe expansion, scale
+        animationType: 'expansion',
+        animationDuration: 1000,
+        animationDurationUpdate: 500,
+        animationEasing: 'cubicOut',
+
+        data: [],
+
+        levels: [],
+
+        /**
+         * Sort order.
+         *
+         * Valid values: 'desc', 'asc', null, or callback function.
+         * 'desc' and 'asc' for descend and ascendant order;
+         * null for not sorting;
+         * example of callback function:
+         * function(nodeA, nodeB) {
+         *     return nodeA.getValue() - nodeB.getValue();
+         * }
+         */
+        sort: 'desc'
+    },
+
+    getViewRoot: function () {
+        return this._viewRoot;
+    },
+
+    /**
+     * @param {module:echarts/data/Tree~Node} [viewRoot]
+     */
+    resetViewRoot: function (viewRoot) {
+        viewRoot
+            ? (this._viewRoot = viewRoot)
+            : (viewRoot = this._viewRoot);
+
+        var root = this.getRawData().tree.root;
+
+        if (!viewRoot
+            || (viewRoot !== root && !root.contains(viewRoot))
+        ) {
+            this._viewRoot = root;
+        }
+    }
+});
+
+
+
+/**
+ * @param {Object} dataNode
+ */
+function completeTreeValue$1(dataNode) {
+    // Postorder travel tree.
+    // If value of none-leaf node is not set,
+    // calculate it by suming up the value of all children.
+    var sum = 0;
+
+    each$1(dataNode.children, function (child) {
+
+        completeTreeValue$1(child);
+
+        var childValue = child.value;
+        isArray(childValue) && (childValue = childValue[0]);
+
+        sum += childValue;
+    });
+
+    var thisValue = dataNode.value;
+    if (isArray(thisValue)) {
+        thisValue = thisValue[0];
+    }
+
+    if (thisValue == null || isNaN(thisValue)) {
+        thisValue = sum;
+    }
+    // Value should not less than 0.
+    if (thisValue < 0) {
+        thisValue = 0;
+    }
+
+    isArray(dataNode.value)
+        ? (dataNode.value[0] = thisValue)
+        : (dataNode.value = thisValue);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var NodeHighlightPolicy = {
+    NONE: 'none', // not downplay others
+    DESCENDANT: 'descendant',
+    ANCESTOR: 'ancestor',
+    SELF: 'self'
+};
+
+var DEFAULT_SECTOR_Z = 2;
+var DEFAULT_TEXT_Z = 4;
+
+/**
+ * Sunburstce of Sunburst including Sector, Label, LabelLine
+ * @constructor
+ * @extends {module:zrender/graphic/Group}
+ */
+function SunburstPiece(node, seriesModel, ecModel) {
+
+    Group.call(this);
+
+    var sector = new Sector({
+        z2: DEFAULT_SECTOR_Z
+    });
+    sector.seriesIndex = seriesModel.seriesIndex;
+
+    var text = new Text({
+        z2: DEFAULT_TEXT_Z,
+        silent: node.getModel('label').get('silent')
+    });
+    this.add(sector);
+    this.add(text);
+
+    this.updateData(true, node, 'normal', seriesModel, ecModel);
+
+    // Hover to change label and labelLine
+    function onEmphasis() {
+        text.ignore = text.hoverIgnore;
+    }
+    function onNormal() {
+        text.ignore = text.normalIgnore;
+    }
+    this.on('emphasis', onEmphasis)
+        .on('normal', onNormal)
+        .on('mouseover', onEmphasis)
+        .on('mouseout', onNormal);
+}
+
+var SunburstPieceProto = SunburstPiece.prototype;
+
+SunburstPieceProto.updateData = function (
+    firstCreate,
+    node,
+    state,
+    seriesModel,
+    ecModel
+) {
+    this.node = node;
+    node.piece = this;
+
+    seriesModel = seriesModel || this._seriesModel;
+    ecModel = ecModel || this._ecModel;
+
+    var sector = this.childAt(0);
+    sector.dataIndex = node.dataIndex;
+
+    var itemModel = node.getModel();
+    var layout = node.getLayout();
+    if (!layout) {
+        console.log(node.getLayout());
+    }
+    var sectorShape = extend({}, layout);
+    sectorShape.label = null;
+
+    var visualColor = getNodeColor(node, seriesModel, ecModel);
+
+    var normalStyle = itemModel.getModel('itemStyle').getItemStyle();
+    var style;
+    if (state === 'normal') {
+        style = normalStyle;
+    }
+    else {
+        var stateStyle = itemModel.getModel(state + '.itemStyle')
+            .getItemStyle();
+        style = merge(stateStyle, normalStyle);
+    }
+    style = defaults(
+        {
+            lineJoin: 'bevel',
+            fill: style.fill || visualColor
+        },
+        style
+    );
+
+    if (firstCreate) {
+        sector.setShape(sectorShape);
+        sector.shape.r = layout.r0;
+        updateProps(
+            sector,
+            {
+                shape: {
+                    r: layout.r
+                }
+            },
+            seriesModel,
+            node.dataIndex
+        );
+        sector.useStyle(style);
+    }
+    else if (typeof style.fill === 'object' && style.fill.type
+        || typeof sector.style.fill === 'object' && sector.style.fill.type
+    ) {
+        // Disable animation for gradient since no interpolation method
+        // is supported for gradient
+        updateProps(sector, {
+            shape: sectorShape
+        }, seriesModel);
+        sector.useStyle(style);
+    }
+    else {
+        updateProps(sector, {
+            shape: sectorShape,
+            style: style
+        }, seriesModel);
+    }
+
+    this._updateLabel(seriesModel, visualColor, state);
+
+    var cursorStyle = itemModel.getShallow('cursor');
+    cursorStyle && sector.attr('cursor', cursorStyle);
+
+    if (firstCreate) {
+        var highlightPolicy = seriesModel.getShallow('highlightPolicy');
+        this._initEvents(sector, node, seriesModel, highlightPolicy);
+    }
+
+    this._seriesModel = seriesModel || this._seriesModel;
+    this._ecModel = ecModel || this._ecModel;
+};
+
+SunburstPieceProto.onEmphasis = function (highlightPolicy) {
+    var that = this;
+    this.node.hostTree.root.eachNode(function (n) {
+        if (n.piece) {
+            if (that.node === n) {
+                n.piece.updateData(false, n, 'emphasis');
+            }
+            else if (isNodeHighlighted(n, that.node, highlightPolicy)) {
+                n.piece.childAt(0).trigger('highlight');
+            }
+            else if (highlightPolicy !== NodeHighlightPolicy.NONE) {
+                n.piece.childAt(0).trigger('downplay');
+            }
+        }
+    });
+};
+
+SunburstPieceProto.onNormal = function () {
+    this.node.hostTree.root.eachNode(function (n) {
+        if (n.piece) {
+            n.piece.updateData(false, n, 'normal');
+        }
+    });
+};
+
+SunburstPieceProto.onHighlight = function () {
+    this.updateData(false, this.node, 'highlight');
+};
+
+SunburstPieceProto.onDownplay = function () {
+    this.updateData(false, this.node, 'downplay');
+};
+
+SunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {
+    var itemModel = this.node.getModel();
+    var normalModel = itemModel.getModel('label');
+    var labelModel = state === 'normal' || state === 'emphasis'
+        ? normalModel
+        : itemModel.getModel(state + '.label');
+    var labelHoverModel = itemModel.getModel('emphasis.label');
+
+    var text = retrieve(
+        seriesModel.getFormattedLabel(
+            this.node.dataIndex, 'normal', null, null, 'label'
+        ),
+        this.node.name
+    );
+    if (getLabelAttr('show') === false) {
+        text = '';
+    }
+
+    var layout = this.node.getLayout();
+    var labelMinAngle = labelModel.get('minAngle');
+    if (labelMinAngle == null) {
+        labelMinAngle = normalModel.get('minAngle');
+    }
+    labelMinAngle = labelMinAngle / 180 * Math.PI;
+    var angle = layout.endAngle - layout.startAngle;
+    if (labelMinAngle != null && Math.abs(angle) < labelMinAngle) {
+        // Not displaying text when angle is too small
+        text = '';
+    }
+
+    var label = this.childAt(1);
+
+    setLabelStyle(
+        label.style, label.hoverStyle || {}, normalModel, labelHoverModel,
+        {
+            defaultText: labelModel.getShallow('show') ? text : null,
+            autoColor: visualColor,
+            useInsideStyle: true
+        }
+    );
+
+    var midAngle = (layout.startAngle + layout.endAngle) / 2;
+    var dx = Math.cos(midAngle);
+    var dy = Math.sin(midAngle);
+
+    var r;
+    var labelPosition = getLabelAttr('position');
+    var labelPadding = getLabelAttr('distance') || 0;
+    var textAlign = getLabelAttr('align');
+    if (labelPosition === 'outside') {
+        r = layout.r + labelPadding;
+        textAlign = midAngle > Math.PI / 2 ? 'right' : 'left';
+    }
+    else {
+        if (!textAlign || textAlign === 'center') {
+            r = (layout.r + layout.r0) / 2;
+            textAlign = 'center';
+        }
+        else if (textAlign === 'left') {
+            r = layout.r0 + labelPadding;
+            if (midAngle > Math.PI / 2) {
+                textAlign = 'right';
+            }
+        }
+        else if (textAlign === 'right') {
+            r = layout.r - labelPadding;
+            if (midAngle > Math.PI / 2) {
+                textAlign = 'left';
+            }
+        }
+    }
+
+    label.attr('style', {
+        text: text,
+        textAlign: textAlign,
+        textVerticalAlign: getLabelAttr('verticalAlign') || 'middle',
+        opacity: getLabelAttr('opacity')
+    });
+
+    var textX = r * dx + layout.cx;
+    var textY = r * dy + layout.cy;
+    label.attr('position', [textX, textY]);
+
+    var rotateType = getLabelAttr('rotate');
+    var rotate = 0;
+    if (rotateType === 'radial') {
+        rotate = -midAngle;
+        if (rotate < -Math.PI / 2) {
+            rotate += Math.PI;
+        }
+    }
+    else if (rotateType === 'tangential') {
+        rotate = Math.PI / 2 - midAngle;
+        if (rotate > Math.PI / 2) {
+            rotate -= Math.PI;
+        }
+        else if (rotate < -Math.PI / 2) {
+            rotate += Math.PI;
+        }
+    } else if (typeof rotateType === 'number') {
+        rotate = rotateType * Math.PI / 180;
+    }
+    label.attr('rotation', rotate);
+
+    function getLabelAttr(name) {
+        var stateAttr = labelModel.get(name);
+        if (stateAttr == null) {
+            return normalModel.get(name);
+        }
+        else {
+            return stateAttr;
+        }
+    }
+};
+
+SunburstPieceProto._initEvents = function (
+    sector,
+    node,
+    seriesModel,
+    highlightPolicy
+) {
+    sector.off('mouseover').off('mouseout').off('emphasis').off('normal');
+
+    var that = this;
+    var onEmphasis = function () {
+        that.onEmphasis(highlightPolicy);
+    };
+    var onNormal = function () {
+        that.onNormal();
+    };
+    var onDownplay = function () {
+        that.onDownplay();
+    };
+    var onHighlight = function () {
+        that.onHighlight();
+    };
+
+    if (seriesModel.isAnimationEnabled()) {
+        sector
+            .on('mouseover', onEmphasis)
+            .on('mouseout', onNormal)
+            .on('emphasis', onEmphasis)
+            .on('normal', onNormal)
+            .on('downplay', onDownplay)
+            .on('highlight', onHighlight);
+    }
+};
+
+inherits(SunburstPiece, Group);
+
+/**
+ * Get node color
+ *
+ * @param {TreeNode} node the node to get color
+ * @param {module:echarts/model/Series} seriesModel series
+ * @param {module:echarts/model/Global} ecModel echarts defaults
+ */
+function getNodeColor(node, seriesModel, ecModel) {
+    // Color from visualMap
+    var visualColor = node.getVisual('color');
+    var visualMetaList = node.getVisual('visualMeta');
+    if (!visualMetaList || visualMetaList.length === 0) {
+        // Use first-generation color if has no visualMap
+        visualColor = null;
+    }
+
+    // Self color or level color
+    var color = node.getModel('itemStyle').get('color');
+    if (color) {
+        return color;
+    }
+    else if (visualColor) {
+        // Color mapping
+        return visualColor;
+    }
+    else if (node.depth === 0) {
+        // Virtual root node
+        return ecModel.option.color[0];
+    }
+    else {
+        // First-generation color
+        var length = ecModel.option.color.length;
+        color = ecModel.option.color[getRootId(node) % length];
+    }
+    return color;
+}
+
+/**
+ * Get index of root in sorted order
+ *
+ * @param {TreeNode} node current node
+ * @return {number} index in root
+ */
+function getRootId(node) {
+    var ancestor = node;
+    while (ancestor.depth > 1) {
+        ancestor = ancestor.parentNode;
+    }
+
+    var virtualRoot = node.getAncestors()[0];
+    return indexOf(virtualRoot.children, ancestor);
+}
+
+function isNodeHighlighted(node, activeNode, policy) {
+    if (policy === NodeHighlightPolicy.NONE) {
+        return false;
+    }
+    else if (policy === NodeHighlightPolicy.SELF) {
+        return node === activeNode;
+    }
+    else if (policy === NodeHighlightPolicy.ANCESTOR) {
+        return node === activeNode || node.isAncestorOf(activeNode);
+    }
+    else {
+        return node === activeNode || node.isDescendantOf(activeNode);
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var ROOT_TO_NODE_ACTION = 'sunburstRootToNode';
+
+var SunburstView = Chart.extend({
+
+    type: 'sunburst',
+
+    init: function () {
+    },
+
+    render: function (seriesModel, ecModel, api, payload) {
+        var that = this;
+
+        this.seriesModel = seriesModel;
+        this.api = api;
+        this.ecModel = ecModel;
+
+        var data = seriesModel.getData();
+        var virtualRoot = data.tree.root;
+
+        var newRoot = seriesModel.getViewRoot();
+
+        var group = this.group;
+
+        var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData');
+
+        var newChildren = [];
+        newRoot.eachNode(function (node) {
+            newChildren.push(node);
+        });
+        var oldChildren = this._oldChildren || [];
+
+        dualTravel(newChildren, oldChildren);
+
+        renderRollUp(virtualRoot, newRoot);
+
+        if (payload && payload.highlight && payload.highlight.piece) {
+            var highlightPolicy = seriesModel.getShallow('highlightPolicy');
+            payload.highlight.piece.onEmphasis(highlightPolicy);
+        }
+        else if (payload && payload.unhighlight) {
+            var piece = this.virtualPiece;
+            if (!piece && virtualRoot.children.length) {
+                piece = virtualRoot.children[0].piece;
+            }
+            if (piece) {
+                piece.onNormal();
+            }
+        }
+
+        this._initEvents();
+
+        this._oldChildren = newChildren;
+
+        function dualTravel(newChildren, oldChildren) {
+            if (newChildren.length === 0 && oldChildren.length === 0) {
+                return;
+            }
+
+            new DataDiffer(oldChildren, newChildren, getKey, getKey)
+                .add(processNode)
+                .update(processNode)
+                .remove(curry(processNode, null))
+                .execute();
+
+            function getKey(node) {
+                return node.getId();
+            }
+
+            function processNode(newId, oldId) {
+                var newNode = newId == null ? null : newChildren[newId];
+                var oldNode = oldId == null ? null : oldChildren[oldId];
+
+                doRenderNode(newNode, oldNode);
+            }
+        }
+
+        function doRenderNode(newNode, oldNode) {
+            if (!renderLabelForZeroData && newNode && !newNode.getValue()) {
+                // Not render data with value 0
+                newNode = null;
+            }
+
+            if (newNode !== virtualRoot && oldNode !== virtualRoot) {
+                if (oldNode && oldNode.piece) {
+                    if (newNode) {
+                        // Update
+                        oldNode.piece.updateData(
+                            false, newNode, 'normal', seriesModel, ecModel);
+
+                        // For tooltip
+                        data.setItemGraphicEl(newNode.dataIndex, oldNode.piece);
+                    }
+                    else {
+                        // Remove
+                        removeNode(oldNode);
+                    }
+                }
+                else if (newNode) {
+                    // Add
+                    var piece = new SunburstPiece(
+                        newNode,
+                        seriesModel,
+                        ecModel
+                    );
+                    group.add(piece);
+
+                    // For tooltip
+                    data.setItemGraphicEl(newNode.dataIndex, piece);
+                }
+            }
+        }
+
+        function removeNode(node) {
+            if (!node) {
+                return;
+            }
+
+            if (node.piece) {
+                group.remove(node.piece);
+                node.piece = null;
+            }
+        }
+
+        function renderRollUp(virtualRoot, viewRoot) {
+            if (viewRoot.depth > 0) {
+                // Render
+                if (that.virtualPiece) {
+                    // Update
+                    that.virtualPiece.updateData(
+                        false, virtualRoot, 'normal', seriesModel, ecModel);
+                }
+                else {
+                    // Add
+                    that.virtualPiece = new SunburstPiece(
+                        virtualRoot,
+                        seriesModel,
+                        ecModel
+                    );
+                    group.add(that.virtualPiece);
+                }
+
+                if (viewRoot.piece._onclickEvent) {
+                    viewRoot.piece.off('click', viewRoot.piece._onclickEvent);
+                }
+                var event = function (e) {
+                    that._rootToNode(viewRoot.parentNode);
+                };
+                viewRoot.piece._onclickEvent = event;
+                that.virtualPiece.on('click', event);
+            }
+            else if (that.virtualPiece) {
+                // Remove
+                group.remove(that.virtualPiece);
+                that.virtualPiece = null;
+            }
+        }
+    },
+
+    dispose: function () {
+    },
+
+    /**
+     * @private
+     */
+    _initEvents: function () {
+        var that = this;
+
+        var event = function (e) {
+            var targetFound = false;
+            var viewRoot = that.seriesModel.getViewRoot();
+            viewRoot.eachNode(function (node) {
+                if (!targetFound
+                    && node.piece && node.piece.childAt(0) === e.target
+                ) {
+                    var nodeClick = node.getModel().get('nodeClick');
+                    if (nodeClick === 'rootToNode') {
+                        that._rootToNode(node);
+                    }
+                    else if (nodeClick === 'link') {
+                        var itemModel = node.getModel();
+                        var link = itemModel.get('link');
+                        if (link) {
+                            var linkTarget = itemModel.get('target', true)
+                                || '_blank';
+                            window.open(link, linkTarget);
+                        }
+                    }
+                    targetFound = true;
+                }
+            });
+        };
+
+        if (this.group._onclickEvent) {
+            this.group.off('click', this.group._onclickEvent);
+        }
+        this.group.on('click', event);
+        this.group._onclickEvent = event;
+    },
+
+    /**
+     * @private
+     */
+    _rootToNode: function (node) {
+        if (node !== this.seriesModel.getViewRoot()) {
+            this.api.dispatchAction({
+                type: ROOT_TO_NODE_ACTION,
+                from: this.uid,
+                seriesId: this.seriesModel.id,
+                targetNode: node
+            });
+        }
+    },
+
+    /**
+     * @implement
+     */
+    containPoint: function (point, seriesModel) {
+        var treeRoot = seriesModel.getData();
+        var itemLayout = treeRoot.getItemLayout(0);
+        if (itemLayout) {
+            var dx = point[0] - itemLayout.cx;
+            var dy = point[1] - itemLayout.cy;
+            var radius = Math.sqrt(dx * dx + dy * dy);
+            return radius <= itemLayout.r && radius >= itemLayout.r0;
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Sunburst action
+ */
+
+var ROOT_TO_NODE_ACTION$1 = 'sunburstRootToNode';
+
+registerAction(
+    {type: ROOT_TO_NODE_ACTION$1, update: 'updateView'},
+    function (payload, ecModel) {
+
+        ecModel.eachComponent(
+            {mainType: 'series', subType: 'sunburst', query: payload},
+            handleRootToNode
+        );
+
+        function handleRootToNode(model, index) {
+            var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION$1], model);
+
+            if (targetInfo) {
+                var originViewRoot = model.getViewRoot();
+                if (originViewRoot) {
+                    payload.direction = aboveViewRoot(originViewRoot, targetInfo.node)
+                        ? 'rollUp' : 'drillDown';
+                }
+                model.resetViewRoot(targetInfo.node);
+            }
+        }
+    }
+);
+
+
+var HIGHLIGHT_ACTION = 'sunburstHighlight';
+
+registerAction(
+    {type: HIGHLIGHT_ACTION, update: 'updateView'},
+    function (payload, ecModel) {
+
+        ecModel.eachComponent(
+            {mainType: 'series', subType: 'sunburst', query: payload},
+            handleHighlight
+        );
+
+        function handleHighlight(model, index) {
+            var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model);
+
+            if (targetInfo) {
+                payload.highlight = targetInfo.node;
+            }
+        }
+    }
+);
+
+
+var UNHIGHLIGHT_ACTION = 'sunburstUnhighlight';
+
+registerAction(
+    {type: UNHIGHLIGHT_ACTION, update: 'updateView'},
+    function (payload, ecModel) {
+
+        ecModel.eachComponent(
+            {mainType: 'series', subType: 'sunburst', query: payload},
+            handleUnhighlight
+        );
+
+        function handleUnhighlight(model, index) {
+            payload.unhighlight = true;
+        }
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var RADIAN$1 = Math.PI / 180;
+
+var sunburstLayout = function (seriesType, ecModel, api, payload) {
+    ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+        var center = seriesModel.get('center');
+        var radius = seriesModel.get('radius');
+
+        if (!isArray(radius)) {
+            radius = [0, radius];
+        }
+        if (!isArray(center)) {
+            center = [center, center];
+        }
+
+        var width = api.getWidth();
+        var height = api.getHeight();
+        var size = Math.min(width, height);
+        var cx = parsePercent$1(center[0], width);
+        var cy = parsePercent$1(center[1], height);
+        var r0 = parsePercent$1(radius[0], size / 2);
+        var r = parsePercent$1(radius[1], size / 2);
+
+        var startAngle = -seriesModel.get('startAngle') * RADIAN$1;
+        var minAngle = seriesModel.get('minAngle') * RADIAN$1;
+
+        var virtualRoot = seriesModel.getData().tree.root;
+        var treeRoot = seriesModel.getViewRoot();
+        var rootDepth = treeRoot.depth;
+
+        var sort = seriesModel.get('sort');
+        if (sort != null) {
+            initChildren$1(treeRoot, sort);
+        }
+
+        var validDataCount = 0;
+        each$1(treeRoot.children, function (child) {
+            !isNaN(child.getValue()) && validDataCount++;
+        });
+
+        var sum = treeRoot.getValue();
+        // Sum may be 0
+        var unitRadian = Math.PI / (sum || validDataCount) * 2;
+
+        var renderRollupNode = treeRoot.depth > 0;
+        var levels = treeRoot.height - (renderRollupNode ? -1 : 1);
+        var rPerLevel = (r - r0) / (levels || 1);
+
+        var clockwise = seriesModel.get('clockwise');
+
+        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');
+
+        // In the case some sector angle is smaller than minAngle
+        var dir = clockwise ? 1 : -1;
+
+        /**
+         * Render a tree
+         * @return increased angle
+         */
+        var renderNode = function (node, startAngle) {
+            if (!node) {
+                return;
+            }
+
+            var endAngle = startAngle;
+
+            // Render self
+            if (node !== virtualRoot) {
+                // Tree node is virtual, so it doesn't need to be drawn
+                var value = node.getValue();
+
+                var angle = (sum === 0 && stillShowZeroSum)
+                    ? unitRadian : (value * unitRadian);
+                if (angle < minAngle) {
+                    angle = minAngle;
+                    
+                }
+                else {
+                    
+                }
+
+                endAngle = startAngle + dir * angle;
+
+                var depth = node.depth - rootDepth
+                    - (renderRollupNode ? -1 : 1);
+                var rStart = r0 + rPerLevel * depth;
+                var rEnd = r0 + rPerLevel * (depth + 1);
+
+                var itemModel = node.getModel();
+                if (itemModel.get('r0') != null) {
+                    rStart = parsePercent$1(itemModel.get('r0'), size / 2);
+                }
+                if (itemModel.get('r') != null) {
+                    rEnd = parsePercent$1(itemModel.get('r'), size / 2);
+                }
+
+                node.setLayout({
+                    angle: angle,
+                    startAngle: startAngle,
+                    endAngle: endAngle,
+                    clockwise: clockwise,
+                    cx: cx,
+                    cy: cy,
+                    r0: rStart,
+                    r: rEnd
+                });
+            }
+
+            // Render children
+            if (node.children && node.children.length) {
+                // currentAngle = startAngle;
+                var siblingAngle = 0;
+                each$1(node.children, function (node) {
+                    siblingAngle += renderNode(node, startAngle + siblingAngle);
+                });
+            }
+
+            return endAngle - startAngle;
+        };
+
+        // Virtual root node for roll up
+        if (renderRollupNode) {
+            var rStart = r0;
+            var rEnd = r0 + rPerLevel;
+
+            var angle = Math.PI * 2;
+            virtualRoot.setLayout({
+                angle: angle,
+                startAngle: startAngle,
+                endAngle: startAngle + angle,
+                clockwise: clockwise,
+                cx: cx,
+                cy: cy,
+                r0: rStart,
+                r: rEnd
+            });
+        }
+
+        renderNode(treeRoot, startAngle);
+    });
+};
+
+/**
+ * Init node children by order and update visual
+ *
+ * @param {TreeNode} node  root node
+ * @param {boolean}  isAsc if is in ascendant order
+ */
+function initChildren$1(node, isAsc) {
+    var children = node.children || [];
+
+    node.children = sort$2(children, isAsc);
+
+    // Init children recursively
+    if (children.length) {
+        each$1(node.children, function (child) {
+            initChildren$1(child, isAsc);
+        });
+    }
+}
+
+/**
+ * Sort children nodes
+ *
+ * @param {TreeNode[]}               children children of node to be sorted
+ * @param {string | function | null} sort sort method
+ *                                   See SunburstSeries.js for details.
+ */
+function sort$2(children, sortOrder) {
+    if (typeof sortOrder === 'function') {
+        return children.sort(sortOrder);
+    }
+    else {
+        var isAsc = sortOrder === 'asc';
+        return children.sort(function (a, b) {
+            var diff = (a.getValue() - b.getValue()) * (isAsc ? 1 : -1);
+            return diff === 0
+                ? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1)
+                : diff;
+        });
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerVisual(curry(dataColor, 'sunburst'));
+registerLayout(curry(sunburstLayout, 'sunburst'));
+registerProcessor(curry(dataFilter, 'sunburst'));
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function dataToCoordSize(dataSize, dataItem) {
+    // dataItem is necessary in log axis.
+    dataItem = dataItem || [0, 0];
+    return map(['x', 'y'], function (dim, dimIdx) {
+        var axis = this.getAxis(dim);
+        var val = dataItem[dimIdx];
+        var halfSize = dataSize[dimIdx] / 2;
+        return axis.type === 'category'
+            ? axis.getBandWidth()
+            : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
+    }, this);
+}
+
+var prepareCartesian2d = function (coordSys) {
+    var rect = coordSys.grid.getRect();
+    return {
+        coordSys: {
+            // The name exposed to user is always 'cartesian2d' but not 'grid'.
+            type: 'cartesian2d',
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        },
+        api: {
+            coord: function (data) {
+                // do not provide "out" param
+                return coordSys.dataToPoint(data);
+            },
+            size: bind(dataToCoordSize, coordSys)
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function dataToCoordSize$1(dataSize, dataItem) {
+    dataItem = dataItem || [0, 0];
+    return map([0, 1], function (dimIdx) {
+        var val = dataItem[dimIdx];
+        var halfSize = dataSize[dimIdx] / 2;
+        var p1 = [];
+        var p2 = [];
+        p1[dimIdx] = val - halfSize;
+        p2[dimIdx] = val + halfSize;
+        p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
+        return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
+    }, this);
+}
+
+var prepareGeo = function (coordSys) {
+    var rect = coordSys.getBoundingRect();
+    return {
+        coordSys: {
+            type: 'geo',
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        },
+        api: {
+            coord: function (data) {
+                // do not provide "out" and noRoam param,
+                // Compatible with this usage:
+                // echarts.util.map(item.points, api.coord)
+                return coordSys.dataToPoint(data);
+            },
+            size: bind(dataToCoordSize$1, coordSys)
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function dataToCoordSize$2(dataSize, dataItem) {
+    // dataItem is necessary in log axis.
+    var axis = this.getAxis();
+    var val = dataItem instanceof Array ? dataItem[0] : dataItem;
+    var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;
+    return axis.type === 'category'
+        ? axis.getBandWidth()
+        : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));
+}
+
+var prepareSingleAxis = function (coordSys) {
+    var rect = coordSys.getRect();
+
+    return {
+        coordSys: {
+            type: 'singleAxis',
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        },
+        api: {
+            coord: function (val) {
+                // do not provide "out" param
+                return coordSys.dataToPoint(val);
+            },
+            size: bind(dataToCoordSize$2, coordSys)
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function dataToCoordSize$3(dataSize, dataItem) {
+    // dataItem is necessary in log axis.
+    return map(['Radius', 'Angle'], function (dim, dimIdx) {
+        var axis = this['get' + dim + 'Axis']();
+        var val = dataItem[dimIdx];
+        var halfSize = dataSize[dimIdx] / 2;
+        var method = 'dataTo' + dim;
+
+        var result = axis.type === 'category'
+            ? axis.getBandWidth()
+            : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize));
+
+        if (dim === 'Angle') {
+            result = result * Math.PI / 180;
+        }
+
+        return result;
+
+    }, this);
+}
+
+var preparePolar = function (coordSys) {
+    var radiusAxis = coordSys.getRadiusAxis();
+    var angleAxis = coordSys.getAngleAxis();
+    var radius = radiusAxis.getExtent();
+    radius[0] > radius[1] && radius.reverse();
+
+    return {
+        coordSys: {
+            type: 'polar',
+            cx: coordSys.cx,
+            cy: coordSys.cy,
+            r: radius[1],
+            r0: radius[0]
+        },
+        api: {
+            coord: bind(function (data) {
+                var radius = radiusAxis.dataToRadius(data[0]);
+                var angle = angleAxis.dataToAngle(data[1]);
+                var coord = coordSys.coordToPoint([radius, angle]);
+                coord.push(radius, angle * Math.PI / 180);
+                return coord;
+            }),
+            size: bind(dataToCoordSize$3, coordSys)
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var prepareCalendar = function (coordSys) {
+    var rect = coordSys.getRect();
+    var rangeInfo = coordSys.getRangeInfo();
+
+    return {
+        coordSys: {
+            type: 'calendar',
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height,
+            cellWidth: coordSys.getCellWidth(),
+            cellHeight: coordSys.getCellHeight(),
+            rangeInfo: {
+                start: rangeInfo.start,
+                end: rangeInfo.end,
+                weeks: rangeInfo.weeks,
+                dayCount: rangeInfo.allDay
+            }
+        },
+        api: {
+            coord: function (data, clamp) {
+                return coordSys.dataToPoint(data, clamp);
+            }
+        }
+    };
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var ITEM_STYLE_NORMAL_PATH = ['itemStyle'];
+var ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle'];
+var LABEL_NORMAL = ['label'];
+var LABEL_EMPHASIS = ['emphasis', 'label'];
+// Use prefix to avoid index to be the same as el.name,
+// which will cause weird udpate animation.
+var GROUP_DIFF_PREFIX = 'e\0\0';
+
+/**
+ * To reduce total package size of each coordinate systems, the modules `prepareCustom`
+ * of each coordinate systems are not required by each coordinate systems directly, but
+ * required by the module `custom`.
+ *
+ * prepareInfoForCustomSeries {Function}: optional
+ *     @return {Object} {coordSys: {...}, api: {
+ *         coord: function (data, clamp) {}, // return point in global.
+ *         size: function (dataSize, dataItem) {} // return size of each axis in coordSys.
+ *     }}
+ */
+var prepareCustoms = {
+    cartesian2d: prepareCartesian2d,
+    geo: prepareGeo,
+    singleAxis: prepareSingleAxis,
+    polar: preparePolar,
+    calendar: prepareCalendar
+};
+
+// ------
+// Model
+// ------
+
+extendSeriesModel({
+
+    type: 'series.custom',
+
+    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],
+
+    defaultOption: {
+        coordinateSystem: 'cartesian2d', // Can be set as 'none'
+        zlevel: 0,
+        z: 2,
+        legendHoverLink: true
+
+        // Cartesian coordinate system
+        // xAxisIndex: 0,
+        // yAxisIndex: 0,
+
+        // Polar coordinate system
+        // polarIndex: 0,
+
+        // Geo coordinate system
+        // geoIndex: 0,
+
+        // label: {}
+        // itemStyle: {}
+    },
+
+    getInitialData: function (option, ecModel) {
+        return createListFromArray(this.getSource(), this);
+    }
+});
+
+// -----
+// View
+// -----
+
+extendChartView({
+
+    type: 'custom',
+
+    /**
+     * @private
+     * @type {module:echarts/data/List}
+     */
+    _data: null,
+
+    /**
+     * @override
+     */
+    render: function (customSeries, ecModel, api) {
+        var oldData = this._data;
+        var data = customSeries.getData();
+        var group = this.group;
+        var renderItem = makeRenderItem(customSeries, data, ecModel, api);
+
+        this.group.removeAll();
+
+        data.diff(oldData)
+            .add(function (newIdx) {
+                createOrUpdate$1(
+                    null, newIdx, renderItem(newIdx), customSeries, group, data
+                );
+            })
+            .update(function (newIdx, oldIdx) {
+                var el = oldData.getItemGraphicEl(oldIdx);
+                createOrUpdate$1(
+                    el, newIdx, renderItem(newIdx), customSeries, group, data
+                );
+            })
+            .remove(function (oldIdx) {
+                var el = oldData.getItemGraphicEl(oldIdx);
+                el && group.remove(el);
+            })
+            .execute();
+
+        this._data = data;
+    },
+
+    incrementalPrepareRender: function (customSeries, ecModel, api) {
+        this.group.removeAll();
+        this._data = null;
+    },
+
+    incrementalRender: function (params, customSeries, ecModel, api) {
+        var data = customSeries.getData();
+        var renderItem = makeRenderItem(customSeries, data, ecModel, api);
+        function setIncrementalAndHoverLayer(el) {
+            if (!el.isGroup) {
+                el.incremental = true;
+                el.useHoverLayer = true;
+            }
+        }
+        for (var idx = params.start; idx < params.end; idx++) {
+            var el = createOrUpdate$1(null, idx, renderItem(idx), customSeries, this.group, data);
+            el.traverse(setIncrementalAndHoverLayer);
+        }
+    },
+
+    /**
+     * @override
+     */
+    dispose: noop
+});
+
+
+function createEl(elOption) {
+    var graphicType = elOption.type;
+    var el;
+
+    if (graphicType === 'path') {
+        var shape = elOption.shape;
+        el = makePath(
+            shape.pathData,
+            null,
+            {
+                x: shape.x || 0,
+                y: shape.y || 0,
+                width: shape.width || 0,
+                height: shape.height || 0
+            },
+            'center'
+        );
+        el.__customPathData = elOption.pathData;
+    }
+    else if (graphicType === 'image') {
+        el = new ZImage({
+        });
+        el.__customImagePath = elOption.style.image;
+    }
+    else if (graphicType === 'text') {
+        el = new Text({
+        });
+        el.__customText = elOption.style.text;
+    }
+    else {
+        var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];
+
+        if (__DEV__) {
+            assert$1(Clz, 'graphic type "' + graphicType + '" can not be found.');
+        }
+
+        el = new Clz();
+    }
+
+    el.__customGraphicType = graphicType;
+    el.name = elOption.name;
+
+    return el;
+}
+
+function updateEl(el, dataIndex, elOption, animatableModel, data, isInit) {
+    var targetProps = {};
+    var elOptionStyle = elOption.style || {};
+
+    elOption.shape && (targetProps.shape = clone(elOption.shape));
+    elOption.position && (targetProps.position = elOption.position.slice());
+    elOption.scale && (targetProps.scale = elOption.scale.slice());
+    elOption.origin && (targetProps.origin = elOption.origin.slice());
+    elOption.rotation && (targetProps.rotation = elOption.rotation);
+
+    if (el.type === 'image' && elOption.style) {
+        var targetStyle = targetProps.style = {};
+        each$1(['x', 'y', 'width', 'height'], function (prop) {
+            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);
+        });
+    }
+
+    if (el.type === 'text' && elOption.style) {
+        var targetStyle = targetProps.style = {};
+        each$1(['x', 'y'], function (prop) {
+            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);
+        });
+        // Compatible with previous: both support
+        // textFill and fill, textStroke and stroke in 'text' element.
+        !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (
+            elOptionStyle.textFill = elOptionStyle.fill
+        );
+        !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (
+            elOptionStyle.textStroke = elOptionStyle.stroke
+        );
+    }
+
+    if (el.type !== 'group') {
+        el.useStyle(elOptionStyle);
+
+        // Init animation.
+        if (isInit) {
+            el.style.opacity = 0;
+            var targetOpacity = elOptionStyle.opacity;
+            targetOpacity == null && (targetOpacity = 1);
+            initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex);
+        }
+    }
+
+    if (isInit) {
+        el.attr(targetProps);
+    }
+    else {
+        updateProps(el, targetProps, animatableModel, dataIndex);
+    }
+
+    // z2 must not be null/undefined, otherwise sort error may occur.
+    el.attr({z2: elOption.z2 || 0, silent: elOption.silent});
+
+    elOption.styleEmphasis !== false && setHoverStyle(el, elOption.styleEmphasis);
+}
+
+function prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) {
+    if (elOptionStyle[prop] != null && !isInit) {
+        targetStyle[prop] = elOptionStyle[prop];
+        elOptionStyle[prop] = oldElStyle[prop];
+    }
+}
+
+function makeRenderItem(customSeries, data, ecModel, api) {
+    var renderItem = customSeries.get('renderItem');
+    var coordSys = customSeries.coordinateSystem;
+    var prepareResult = {};
+
+    if (coordSys) {
+        if (__DEV__) {
+            assert$1(renderItem, 'series.render is required.');
+            assert$1(
+                coordSys.prepareCustoms || prepareCustoms[coordSys.type],
+                'This coordSys does not support custom series.'
+            );
+        }
+
+        prepareResult = coordSys.prepareCustoms
+            ? coordSys.prepareCustoms()
+            : prepareCustoms[coordSys.type](coordSys);
+    }
+
+    var userAPI = defaults({
+        getWidth: api.getWidth,
+        getHeight: api.getHeight,
+        getZr: api.getZr,
+        getDevicePixelRatio: api.getDevicePixelRatio,
+        value: value,
+        style: style,
+        styleEmphasis: styleEmphasis,
+        visual: visual,
+        barLayout: barLayout,
+        currentSeriesIndices: currentSeriesIndices,
+        font: font
+    }, prepareResult.api || {});
+
+    var userParams = {
+        context: {},
+        seriesId: customSeries.id,
+        seriesName: customSeries.name,
+        seriesIndex: customSeries.seriesIndex,
+        coordSys: prepareResult.coordSys,
+        dataInsideLength: data.count(),
+        encode: wrapEncodeDef(customSeries.getData())
+    };
+
+    // Do not support call `api` asynchronously without dataIndexInside input.
+    var currDataIndexInside;
+    var currDirty = true;
+    var currItemModel;
+    var currLabelNormalModel;
+    var currLabelEmphasisModel;
+    var currVisualColor;
+
+    return function (dataIndexInside) {
+        currDataIndexInside = dataIndexInside;
+        currDirty = true;
+        return renderItem && renderItem(
+            defaults({
+                dataIndexInside: dataIndexInside,
+                dataIndex: data.getRawIndex(dataIndexInside)
+            }, userParams),
+            userAPI
+        ) || {};
+    };
+
+    // Do not update cache until api called.
+    function updateCache(dataIndexInside) {
+        dataIndexInside == null && (dataIndexInside = currDataIndexInside);
+        if (currDirty) {
+            currItemModel = data.getItemModel(dataIndexInside);
+            currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL);
+            currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS);
+            currVisualColor = data.getItemVisual(dataIndexInside, 'color');
+
+            currDirty = false;
+        }
+    }
+
+    /**
+     * @public
+     * @param {number|string} dim
+     * @param {number} [dataIndexInside=currDataIndexInside]
+     * @return {number|string} value
+     */
+    function value(dim, dataIndexInside) {
+        dataIndexInside == null && (dataIndexInside = currDataIndexInside);
+        return data.get(data.getDimension(dim || 0), dataIndexInside);
+    }
+
+    /**
+     * By default, `visual` is applied to style (to support visualMap).
+     * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`,
+     * it can be implemented as:
+     * `api.style({stroke: api.visual('color'), fill: null})`;
+     * @public
+     * @param {Object} [extra]
+     * @param {number} [dataIndexInside=currDataIndexInside]
+     */
+    function style(extra, dataIndexInside) {
+        dataIndexInside == null && (dataIndexInside = currDataIndexInside);
+        updateCache(dataIndexInside);
+
+        var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();
+
+        currVisualColor != null && (itemStyle.fill = currVisualColor);
+        var opacity = data.getItemVisual(dataIndexInside, 'opacity');
+        opacity != null && (itemStyle.opacity = opacity);
+
+        setTextStyle(itemStyle, currLabelNormalModel, null, {
+            autoColor: currVisualColor,
+            isRectText: true
+        });
+
+        itemStyle.text = currLabelNormalModel.getShallow('show')
+            ? retrieve2(
+                customSeries.getFormattedLabel(dataIndexInside, 'normal'),
+                getDefaultLabel(data, dataIndexInside)
+            )
+            : null;
+
+        extra && extend(itemStyle, extra);
+        return itemStyle;
+    }
+
+    /**
+     * @public
+     * @param {Object} [extra]
+     * @param {number} [dataIndexInside=currDataIndexInside]
+     */
+    function styleEmphasis(extra, dataIndexInside) {
+        dataIndexInside == null && (dataIndexInside = currDataIndexInside);
+        updateCache(dataIndexInside);
+
+        var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();
+
+        setTextStyle(itemStyle, currLabelEmphasisModel, null, {
+            isRectText: true
+        }, true);
+
+        itemStyle.text = currLabelEmphasisModel.getShallow('show')
+            ? retrieve3(
+                customSeries.getFormattedLabel(dataIndexInside, 'emphasis'),
+                customSeries.getFormattedLabel(dataIndexInside, 'normal'),
+                getDefaultLabel(data, dataIndexInside)
+            )
+            : null;
+
+        extra && extend(itemStyle, extra);
+        return itemStyle;
+    }
+
+    /**
+     * @public
+     * @param {string} visualType
+     * @param {number} [dataIndexInside=currDataIndexInside]
+     */
+    function visual(visualType, dataIndexInside) {
+        dataIndexInside == null && (dataIndexInside = currDataIndexInside);
+        return data.getItemVisual(dataIndexInside, visualType);
+    }
+
+    /**
+     * @public
+     * @param {number} opt.count Positive interger.
+     * @param {number} [opt.barWidth]
+     * @param {number} [opt.barMaxWidth]
+     * @param {number} [opt.barGap]
+     * @param {number} [opt.barCategoryGap]
+     * @return {Object} {width, offset, offsetCenter} is not support, return undefined.
+     */
+    function barLayout(opt) {
+        if (coordSys.getBaseAxis) {
+            var baseAxis = coordSys.getBaseAxis();
+            return getLayoutOnAxis(defaults({axis: baseAxis}, opt), api);
+        }
+    }
+
+    /**
+     * @public
+     * @return {Array.<number>}
+     */
+    function currentSeriesIndices() {
+        return ecModel.getCurrentSeriesIndices();
+    }
+
+    /**
+     * @public
+     * @param {Object} opt
+     * @param {string} [opt.fontStyle]
+     * @param {number} [opt.fontWeight]
+     * @param {number} [opt.fontSize]
+     * @param {string} [opt.fontFamily]
+     * @return {string} font string
+     */
+    function font(opt) {
+        return getFont(opt, ecModel);
+    }
+}
+
+function wrapEncodeDef(data) {
+    var encodeDef = {};
+    each$1(data.dimensions, function (dimName, dataDimIndex) {
+        var dimInfo = data.getDimensionInfo(dimName);
+        if (!dimInfo.isExtraCoord) {
+            var coordDim = dimInfo.coordDim;
+            var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];
+            dataDims[dimInfo.coordDimIndex] = dataDimIndex;
+        }
+    });
+    return encodeDef;
+}
+
+function createOrUpdate$1(el, dataIndex, elOption, animatableModel, group, data) {
+    el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data);
+    el && data.setItemGraphicEl(dataIndex, el);
+
+    return el;
+}
+
+function doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data) {
+    var elOptionType = elOption.type;
+    if (el
+        && elOptionType !== el.__customGraphicType
+        && (elOptionType !== 'path' || elOption.pathData !== el.__customPathData)
+        && (elOptionType !== 'image' || elOption.style.image !== el.__customImagePath)
+        && (elOptionType !== 'text' || elOption.style.text !== el.__customText)
+    ) {
+        group.remove(el);
+        el = null;
+    }
+
+    // `elOption.type` is undefined when `renderItem` returns nothing.
+    if (elOptionType == null) {
+        return;
+    }
+
+    var isInit = !el;
+    !el && (el = createEl(elOption));
+    updateEl(el, dataIndex, elOption, animatableModel, data, isInit);
+
+    if (elOptionType === 'group') {
+        var oldChildren = el.children() || [];
+        var newChildren = elOption.children || [];
+
+        if (elOption.diffChildrenByName) {
+            // lower performance.
+            diffGroupChildren({
+                oldChildren: oldChildren,
+                newChildren: newChildren,
+                dataIndex: dataIndex,
+                animatableModel: animatableModel,
+                group: el,
+                data: data
+            });
+        }
+        else {
+            // better performance.
+            var index = 0;
+            for (; index < newChildren.length; index++) {
+                doCreateOrUpdate(
+                    el.childAt(index),
+                    dataIndex,
+                    newChildren[index],
+                    animatableModel,
+                    el,
+                    data
+                );
+            }
+            for (; index < oldChildren.length; index++) {
+                oldChildren[index] && el.remove(oldChildren[index]);
+            }
+        }
+    }
+
+    group.add(el);
+
+    return el;
+}
+
+function diffGroupChildren(context) {
+    (new DataDiffer(
+        context.oldChildren,
+        context.newChildren,
+        getKey,
+        getKey,
+        context
+    ))
+        .add(processAddUpdate)
+        .update(processAddUpdate)
+        .remove(processRemove)
+        .execute();
+}
+
+function getKey(item, idx) {
+    var name = item && item.name;
+    return name != null ? name : GROUP_DIFF_PREFIX + idx;
+}
+
+function processAddUpdate(newIndex, oldIndex) {
+    var context = this.context;
+    var childOption = newIndex != null ? context.newChildren[newIndex] : null;
+    var child = oldIndex != null ? context.oldChildren[oldIndex] : null;
+
+    doCreateOrUpdate(
+        child,
+        context.dataIndex,
+        childOption,
+        context.animatableModel,
+        context.group,
+        context.data
+    );
+}
+
+function processRemove(oldIndex) {
+    var context = this.context;
+    var child = context.oldChildren[oldIndex];
+    child && context.group.remove(child);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// -------------
+// Preprocessor
+// -------------
+
+registerPreprocessor(function (option) {
+    var graphicOption = option.graphic;
+
+    // Convert
+    // {graphic: [{left: 10, type: 'circle'}, ...]}
+    // or
+    // {graphic: {left: 10, type: 'circle'}}
+    // to
+    // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]}
+    if (isArray(graphicOption)) {
+        if (!graphicOption[0] || !graphicOption[0].elements) {
+            option.graphic = [{elements: graphicOption}];
+        }
+        else {
+            // Only one graphic instance can be instantiated. (We dont
+            // want that too many views are created in echarts._viewMap)
+            option.graphic = [option.graphic[0]];
+        }
+    }
+    else if (graphicOption && !graphicOption.elements) {
+        option.graphic = [{elements: [graphicOption]}];
+    }
+});
+
+// ------
+// Model
+// ------
+
+var GraphicModel = extendComponentModel({
+
+    type: 'graphic',
+
+    defaultOption: {
+
+        // Extra properties for each elements:
+        //
+        // left/right/top/bottom: (like 12, '22%', 'center', default undefined)
+        //      If left/rigth is set, shape.x/shape.cx/position will not be used.
+        //      If top/bottom is set, shape.y/shape.cy/position will not be used.
+        //      This mechanism is useful when you want to position a group/element
+        //      against the right side or the center of this container.
+        //
+        // width/height: (can only be pixel value, default 0)
+        //      Only be used to specify contianer(group) size, if needed. And
+        //      can not be percentage value (like '33%'). See the reason in the
+        //      layout algorithm below.
+        //
+        // bounding: (enum: 'all' (default) | 'raw')
+        //      Specify how to calculate boundingRect when locating.
+        //      'all': Get uioned and transformed boundingRect
+        //          from both itself and its descendants.
+        //          This mode simplies confining a group of elements in the bounding
+        //          of their ancester container (e.g., using 'right: 0').
+        //      'raw': Only use the boundingRect of itself and before transformed.
+        //          This mode is similar to css behavior, which is useful when you
+        //          want an element to be able to overflow its container. (Consider
+        //          a rotated circle needs to be located in a corner.)
+
+        // Note: elements is always behind its ancestors in this elements array.
+        elements: [],
+        parentId: null
+    },
+
+    /**
+     * Save el options for the sake of the performance (only update modified graphics).
+     * The order is the same as those in option. (ancesters -> descendants)
+     *
+     * @private
+     * @type {Array.<Object>}
+     */
+    _elOptionsToUpdate: null,
+
+    /**
+     * @override
+     */
+    mergeOption: function (option) {
+        // Prevent default merge to elements
+        var elements = this.option.elements;
+        this.option.elements = null;
+
+        GraphicModel.superApply(this, 'mergeOption', arguments);
+
+        this.option.elements = elements;
+    },
+
+    /**
+     * @override
+     */
+    optionUpdated: function (newOption, isInit) {
+        var thisOption = this.option;
+        var newList = (isInit ? thisOption : newOption).elements;
+        var existList = thisOption.elements = isInit ? [] : thisOption.elements;
+
+        var flattenedList = [];
+        this._flatten(newList, flattenedList);
+
+        var mappingResult = mappingToExists(existList, flattenedList);
+        makeIdAndName(mappingResult);
+
+        // Clear elOptionsToUpdate
+        var elOptionsToUpdate = this._elOptionsToUpdate = [];
+
+        each$1(mappingResult, function (resultItem, index) {
+            var newElOption = resultItem.option;
+
+            if (__DEV__) {
+                assert$1(
+                    isObject$1(newElOption) || resultItem.exist,
+                    'Empty graphic option definition'
+                );
+            }
+
+            if (!newElOption) {
+                return;
+            }
+
+            elOptionsToUpdate.push(newElOption);
+
+            setKeyInfoToNewElOption(resultItem, newElOption);
+
+            mergeNewElOptionToExist(existList, index, newElOption);
+
+            setLayoutInfoToExist(existList[index], newElOption);
+
+        }, this);
+
+        // Clean
+        for (var i = existList.length - 1; i >= 0; i--) {
+            if (existList[i] == null) {
+                existList.splice(i, 1);
+            }
+            else {
+                // $action should be volatile, otherwise option gotten from
+                // `getOption` will contain unexpected $action.
+                delete existList[i].$action;
+            }
+        }
+    },
+
+    /**
+     * Convert
+     * [{
+     *  type: 'group',
+     *  id: 'xx',
+     *  children: [{type: 'circle'}, {type: 'polygon'}]
+     * }]
+     * to
+     * [
+     *  {type: 'group', id: 'xx'},
+     *  {type: 'circle', parentId: 'xx'},
+     *  {type: 'polygon', parentId: 'xx'}
+     * ]
+     *
+     * @private
+     * @param {Array.<Object>} optionList option list
+     * @param {Array.<Object>} result result of flatten
+     * @param {Object} parentOption parent option
+     */
+    _flatten: function (optionList, result, parentOption) {
+        each$1(optionList, function (option) {
+            if (!option) {
+                return;
+            }
+
+            if (parentOption) {
+                option.parentOption = parentOption;
+            }
+
+            result.push(option);
+
+            var children = option.children;
+            if (option.type === 'group' && children) {
+                this._flatten(children, result, option);
+            }
+            // Deleting for JSON output, and for not affecting group creation.
+            delete option.children;
+        }, this);
+    },
+
+    // FIXME
+    // Pass to view using payload? setOption has a payload?
+    useElOptionsToUpdate: function () {
+        var els = this._elOptionsToUpdate;
+        // Clear to avoid render duplicately when zooming.
+        this._elOptionsToUpdate = null;
+        return els;
+    }
+});
+
+// -----
+// View
+// -----
+
+extendComponentView({
+
+    type: 'graphic',
+
+    /**
+     * @override
+     */
+    init: function (ecModel, api) {
+
+        /**
+         * @private
+         * @type {module:zrender/core/util.HashMap}
+         */
+        this._elMap = createHashMap();
+
+        /**
+         * @private
+         * @type {module:echarts/graphic/GraphicModel}
+         */
+        this._lastGraphicModel;
+    },
+
+    /**
+     * @override
+     */
+    render: function (graphicModel, ecModel, api) {
+
+        // Having leveraged between use cases and algorithm complexity, a very
+        // simple layout mechanism is used:
+        // The size(width/height) can be determined by itself or its parent (not
+        // implemented yet), but can not by its children. (Top-down travel)
+        // The location(x/y) can be determined by the bounding rect of itself
+        // (can including its descendants or not) and the size of its parent.
+        // (Bottom-up travel)
+
+        // When `chart.clear()` or `chart.setOption({...}, true)` with the same id,
+        // view will be reused.
+        if (graphicModel !== this._lastGraphicModel) {
+            this._clear();
+        }
+        this._lastGraphicModel = graphicModel;
+
+        this._updateElements(graphicModel, api);
+        this._relocate(graphicModel, api);
+    },
+
+    /**
+     * Update graphic elements.
+     *
+     * @private
+     * @param {Object} graphicModel graphic model
+     * @param {module:echarts/ExtensionAPI} api extension API
+     */
+    _updateElements: function (graphicModel, api) {
+        var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();
+
+        if (!elOptionsToUpdate) {
+            return;
+        }
+
+        var elMap = this._elMap;
+        var rootGroup = this.group;
+
+        // Top-down tranverse to assign graphic settings to each elements.
+        each$1(elOptionsToUpdate, function (elOption) {
+            var $action = elOption.$action;
+            var id = elOption.id;
+            var existEl = elMap.get(id);
+            var parentId = elOption.parentId;
+            var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;
+
+            if (elOption.type === 'text') {
+                var elOptionStyle = elOption.style;
+
+                // In top/bottom mode, textVerticalAlign should not be used, which cause
+                // inaccurately locating.
+                if (elOption.hv && elOption.hv[1]) {
+                    elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null;
+                }
+
+                // Compatible with previous setting: both support fill and textFill,
+                // stroke and textStroke.
+                !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (
+                    elOptionStyle.textFill = elOptionStyle.fill
+                );
+                !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (
+                    elOptionStyle.textStroke = elOptionStyle.stroke
+                );
+            }
+
+            // Remove unnecessary props to avoid potential problems.
+            var elOptionCleaned = getCleanedElOption(elOption);
+
+            // For simple, do not support parent change, otherwise reorder is needed.
+            if (__DEV__) {
+                existEl && assert$1(
+                    targetElParent === existEl.parent,
+                    'Changing parent is not supported.'
+                );
+            }
+
+            if (!$action || $action === 'merge') {
+                existEl
+                    ? existEl.attr(elOptionCleaned)
+                    : createEl$1(id, targetElParent, elOptionCleaned, elMap);
+            }
+            else if ($action === 'replace') {
+                removeEl(existEl, elMap);
+                createEl$1(id, targetElParent, elOptionCleaned, elMap);
+            }
+            else if ($action === 'remove') {
+                removeEl(existEl, elMap);
+            }
+
+            var el = elMap.get(id);
+            if (el) {
+                el.__ecGraphicWidth = elOption.width;
+                el.__ecGraphicHeight = elOption.height;
+            }
+        });
+    },
+
+    /**
+     * Locate graphic elements.
+     *
+     * @private
+     * @param {Object} graphicModel graphic model
+     * @param {module:echarts/ExtensionAPI} api extension API
+     */
+    _relocate: function (graphicModel, api) {
+        var elOptions = graphicModel.option.elements;
+        var rootGroup = this.group;
+        var elMap = this._elMap;
+
+        // Bottom-up tranvese all elements (consider ec resize) to locate elements.
+        for (var i = elOptions.length - 1; i >= 0; i--) {
+            var elOption = elOptions[i];
+            var el = elMap.get(elOption.id);
+
+            if (!el) {
+                continue;
+            }
+
+            var parentEl = el.parent;
+            var containerInfo = parentEl === rootGroup
+                ? {
+                    width: api.getWidth(),
+                    height: api.getHeight()
+                }
+                : { // Like 'position:absolut' in css, default 0.
+                    width: parentEl.__ecGraphicWidth || 0,
+                    height: parentEl.__ecGraphicHeight || 0
+                };
+
+            positionElement(
+                el, elOption, containerInfo, null,
+                {hv: elOption.hv, boundingMode: elOption.bounding}
+            );
+        }
+    },
+
+    /**
+     * Clear all elements.
+     *
+     * @private
+     */
+    _clear: function () {
+        var elMap = this._elMap;
+        elMap.each(function (el) {
+            removeEl(el, elMap);
+        });
+        this._elMap = createHashMap();
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        this._clear();
+    }
+});
+
+function createEl$1(id, targetElParent, elOption, elMap) {
+    var graphicType = elOption.type;
+
+    if (__DEV__) {
+        assert$1(graphicType, 'graphic type MUST be set');
+    }
+
+    var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];
+
+    if (__DEV__) {
+        assert$1(Clz, 'graphic type can not be found');
+    }
+
+    var el = new Clz(elOption);
+    targetElParent.add(el);
+    elMap.set(id, el);
+    el.__ecGraphicId = id;
+}
+
+function removeEl(existEl, elMap) {
+    var existElParent = existEl && existEl.parent;
+    if (existElParent) {
+        existEl.type === 'group' && existEl.traverse(function (el) {
+            removeEl(el, elMap);
+        });
+        elMap.removeKey(existEl.__ecGraphicId);
+        existElParent.remove(existEl);
+    }
+}
+
+// Remove unnecessary props to avoid potential problems.
+function getCleanedElOption(elOption) {
+    elOption = extend({}, elOption);
+    each$1(
+        ['id', 'parentId', '$action', 'hv', 'bounding'].concat(LOCATION_PARAMS),
+        function (name) {
+            delete elOption[name];
+        }
+    );
+    return elOption;
+}
+
+function isSetLoc(obj, props) {
+    var isSet;
+    each$1(props, function (prop) {
+        obj[prop] != null && obj[prop] !== 'auto' && (isSet = true);
+    });
+    return isSet;
+}
+
+function setKeyInfoToNewElOption(resultItem, newElOption) {
+    var existElOption = resultItem.exist;
+
+    // Set id and type after id assigned.
+    newElOption.id = resultItem.keyInfo.id;
+    !newElOption.type && existElOption && (newElOption.type = existElOption.type);
+
+    // Set parent id if not specified
+    if (newElOption.parentId == null) {
+        var newElParentOption = newElOption.parentOption;
+        if (newElParentOption) {
+            newElOption.parentId = newElParentOption.id;
+        }
+        else if (existElOption) {
+            newElOption.parentId = existElOption.parentId;
+        }
+    }
+
+    // Clear
+    newElOption.parentOption = null;
+}
+
+function mergeNewElOptionToExist(existList, index, newElOption) {
+    // Update existing options, for `getOption` feature.
+    var newElOptCopy = extend({}, newElOption);
+    var existElOption = existList[index];
+
+    var $action = newElOption.$action || 'merge';
+    if ($action === 'merge') {
+        if (existElOption) {
+
+            if (__DEV__) {
+                var newType = newElOption.type;
+                assert$1(
+                    !newType || existElOption.type === newType,
+                    'Please set $action: "replace" to change `type`'
+                );
+            }
+
+            // We can ensure that newElOptCopy and existElOption are not
+            // the same object, so `merge` will not change newElOptCopy.
+            merge(existElOption, newElOptCopy, true);
+            // Rigid body, use ignoreSize.
+            mergeLayoutParam(existElOption, newElOptCopy, {ignoreSize: true});
+            // Will be used in render.
+            copyLayoutParams(newElOption, existElOption);
+        }
+        else {
+            existList[index] = newElOptCopy;
+        }
+    }
+    else if ($action === 'replace') {
+        existList[index] = newElOptCopy;
+    }
+    else if ($action === 'remove') {
+        // null will be cleaned later.
+        existElOption && (existList[index] = null);
+    }
+}
+
+function setLayoutInfoToExist(existItem, newElOption) {
+    if (!existItem) {
+        return;
+    }
+    existItem.hv = newElOption.hv = [
+        // Rigid body, dont care `width`.
+        isSetLoc(newElOption, ['left', 'right']),
+        // Rigid body, dont care `height`.
+        isSetLoc(newElOption, ['top', 'bottom'])
+    ];
+    // Give default group size. Otherwise layout error may occur.
+    if (existItem.type === 'group') {
+        existItem.width == null && (existItem.width = newElOption.width = 0);
+        existItem.height == null && (existItem.height = newElOption.height = 0);
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var LegendModel = extendComponentModel({
+
+    type: 'legend.plain',
+
+    dependencies: ['series'],
+
+    layoutMode: {
+        type: 'box',
+        // legend.width/height are maxWidth/maxHeight actually,
+        // whereas realy width/height is calculated by its content.
+        // (Setting {left: 10, right: 10} does not make sense).
+        // So consider the case:
+        // `setOption({legend: {left: 10});`
+        // then `setOption({legend: {right: 10});`
+        // The previous `left` should be cleared by setting `ignoreSize`.
+        ignoreSize: true
+    },
+
+    init: function (option, parentModel, ecModel) {
+        this.mergeDefaultAndTheme(option, ecModel);
+
+        option.selected = option.selected || {};
+    },
+
+    mergeOption: function (option) {
+        LegendModel.superCall(this, 'mergeOption', option);
+    },
+
+    optionUpdated: function () {
+        this._updateData(this.ecModel);
+
+        var legendData = this._data;
+
+        // If selectedMode is single, try to select one
+        if (legendData[0] && this.get('selectedMode') === 'single') {
+            var hasSelected = false;
+            // If has any selected in option.selected
+            for (var i = 0; i < legendData.length; i++) {
+                var name = legendData[i].get('name');
+                if (this.isSelected(name)) {
+                    // Force to unselect others
+                    this.select(name);
+                    hasSelected = true;
+                    break;
+                }
+            }
+            // Try select the first if selectedMode is single
+            !hasSelected && this.select(legendData[0].get('name'));
+        }
+    },
+
+    _updateData: function (ecModel) {
+        var potentialData = [];
+        var availableNames = [];
+
+        ecModel.eachRawSeries(function (seriesModel) {
+            var seriesName = seriesModel.name;
+            availableNames.push(seriesName);
+            var isPotential;
+
+            if (seriesModel.legendDataProvider) {
+                var data = seriesModel.legendDataProvider();
+                var names = data.mapArray(data.getName);
+
+                if (!ecModel.isSeriesFiltered(seriesModel)) {
+                    availableNames = availableNames.concat(names);
+                }
+
+                if (names.length) {
+                    potentialData = potentialData.concat(names);
+                }
+                else {
+                    isPotential = true;
+                }
+            }
+            else {
+                isPotential = true;
+            }
+
+            if (isPotential && isNameSpecified(seriesModel)) {
+                potentialData.push(seriesModel.name);
+            }
+        });
+
+        /**
+         * @type {Array.<string>}
+         * @private
+         */
+        this._availableNames = availableNames;
+
+        // If legend.data not specified in option, use availableNames as data,
+        // which is convinient for user preparing option.
+        var rawData = this.get('data') || potentialData;
+
+        var legendData = map(rawData, function (dataItem) {
+            // Can be string or number
+            if (typeof dataItem === 'string' || typeof dataItem === 'number') {
+                dataItem = {
+                    name: dataItem
+                };
+            }
+            return new Model(dataItem, this, this.ecModel);
+        }, this);
+
+        /**
+         * @type {Array.<module:echarts/model/Model>}
+         * @private
+         */
+        this._data = legendData;
+    },
+
+    /**
+     * @return {Array.<module:echarts/model/Model>}
+     */
+    getData: function () {
+        return this._data;
+    },
+
+    /**
+     * @param {string} name
+     */
+    select: function (name) {
+        var selected = this.option.selected;
+        var selectedMode = this.get('selectedMode');
+        if (selectedMode === 'single') {
+            var data = this._data;
+            each$1(data, function (dataItem) {
+                selected[dataItem.get('name')] = false;
+            });
+        }
+        selected[name] = true;
+    },
+
+    /**
+     * @param {string} name
+     */
+    unSelect: function (name) {
+        if (this.get('selectedMode') !== 'single') {
+            this.option.selected[name] = false;
+        }
+    },
+
+    /**
+     * @param {string} name
+     */
+    toggleSelected: function (name) {
+        var selected = this.option.selected;
+        // Default is true
+        if (!selected.hasOwnProperty(name)) {
+            selected[name] = true;
+        }
+        this[selected[name] ? 'unSelect' : 'select'](name);
+    },
+
+    /**
+     * @param {string} name
+     */
+    isSelected: function (name) {
+        var selected = this.option.selected;
+        return !(selected.hasOwnProperty(name) && !selected[name])
+            && indexOf(this._availableNames, name) >= 0;
+    },
+
+    defaultOption: {
+        // 一级层叠
+        zlevel: 0,
+        // 二级层叠
+        z: 4,
+        show: true,
+
+        // 布局方式,默认为水平布局,可选为:
+        // 'horizontal' | 'vertical'
+        orient: 'horizontal',
+
+        left: 'center',
+        // right: 'center',
+
+        top: 0,
+        // bottom: null,
+
+        // 水平对齐
+        // 'auto' | 'left' | 'right'
+        // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐
+        align: 'auto',
+
+        backgroundColor: 'rgba(0,0,0,0)',
+        // 图例边框颜色
+        borderColor: '#ccc',
+        borderRadius: 0,
+        // 图例边框线宽,单位px,默认为0(无边框)
+        borderWidth: 0,
+        // 图例内边距,单位px,默认各方向内边距为5,
+        // 接受数组分别设定上右下左边距,同css
+        padding: 5,
+        // 各个item之间的间隔,单位px,默认为10,
+        // 横向布局时为水平间隔,纵向布局时为纵向间隔
+        itemGap: 10,
+        // 图例图形宽度
+        itemWidth: 25,
+        // 图例图形高度
+        itemHeight: 14,
+
+        // 图例关闭时候的颜色
+        inactiveColor: '#ccc',
+
+        textStyle: {
+            // 图例文字颜色
+            color: '#333'
+        },
+        // formatter: '',
+        // 选择模式,默认开启图例开关
+        selectedMode: true,
+        // 配置默认选中状态,可配合LEGEND.SELECTED事件做动态数据载入
+        // selected: null,
+        // 图例内容(详见legend.data,数组中每一项代表一个item
+        // data: [],
+
+        // Tooltip 相关配置
+        tooltip: {
+            show: false
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function legendSelectActionHandler(methodName, payload, ecModel) {
+    var selectedMap = {};
+    var isToggleSelect = methodName === 'toggleSelected';
+    var isSelected;
+    // Update all legend components
+    ecModel.eachComponent('legend', function (legendModel) {
+        if (isToggleSelect && isSelected != null) {
+            // Force other legend has same selected status
+            // Or the first is toggled to true and other are toggled to false
+            // In the case one legend has some item unSelected in option. And if other legend
+            // doesn't has the item, they will assume it is selected.
+            legendModel[isSelected ? 'select' : 'unSelect'](payload.name);
+        }
+        else {
+            legendModel[methodName](payload.name);
+            isSelected = legendModel.isSelected(payload.name);
+        }
+        var legendData = legendModel.getData();
+        each$1(legendData, function (model) {
+            var name = model.get('name');
+            // Wrap element
+            if (name === '\n' || name === '') {
+                return;
+            }
+            var isItemSelected = legendModel.isSelected(name);
+            if (selectedMap.hasOwnProperty(name)) {
+                // Unselected if any legend is unselected
+                selectedMap[name] = selectedMap[name] && isItemSelected;
+            }
+            else {
+                selectedMap[name] = isItemSelected;
+            }
+        });
+    });
+    // Return the event explicitly
+    return {
+        name: payload.name,
+        selected: selectedMap
+    };
+}
+/**
+ * @event legendToggleSelect
+ * @type {Object}
+ * @property {string} type 'legendToggleSelect'
+ * @property {string} [from]
+ * @property {string} name Series name or data item name
+ */
+registerAction(
+    'legendToggleSelect', 'legendselectchanged',
+    curry(legendSelectActionHandler, 'toggleSelected')
+);
+
+/**
+ * @event legendSelect
+ * @type {Object}
+ * @property {string} type 'legendSelect'
+ * @property {string} name Series name or data item name
+ */
+registerAction(
+    'legendSelect', 'legendselected',
+    curry(legendSelectActionHandler, 'select')
+);
+
+/**
+ * @event legendUnSelect
+ * @type {Object}
+ * @property {string} type 'legendUnSelect'
+ * @property {string} name Series name or data item name
+ */
+registerAction(
+    'legendUnSelect', 'legendunselected',
+    curry(legendSelectActionHandler, 'unSelect')
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Layout list like component.
+ * It will box layout each items in group of component and then position the whole group in the viewport
+ * @param {module:zrender/group/Group} group
+ * @param {module:echarts/model/Component} componentModel
+ * @param {module:echarts/ExtensionAPI}
+ */
+function layout$3(group, componentModel, api) {
+    var boxLayoutParams = componentModel.getBoxLayoutParams();
+    var padding = componentModel.get('padding');
+    var viewportSize = {width: api.getWidth(), height: api.getHeight()};
+
+    var rect = getLayoutRect(
+        boxLayoutParams,
+        viewportSize,
+        padding
+    );
+
+    box(
+        componentModel.get('orient'),
+        group,
+        componentModel.get('itemGap'),
+        rect.width,
+        rect.height
+    );
+
+    positionElement(
+        group,
+        boxLayoutParams,
+        viewportSize,
+        padding
+    );
+}
+
+function makeBackground(rect, componentModel) {
+    var padding = normalizeCssArray$1(
+        componentModel.get('padding')
+    );
+    var style = componentModel.getItemStyle(['color', 'opacity']);
+    style.fill = componentModel.get('backgroundColor');
+    var rect = new Rect({
+        shape: {
+            x: rect.x - padding[3],
+            y: rect.y - padding[0],
+            width: rect.width + padding[1] + padding[3],
+            height: rect.height + padding[0] + padding[2],
+            r: componentModel.get('borderRadius')
+        },
+        style: style,
+        silent: true,
+        z2: -1
+    });
+    // FIXME
+    // `subPixelOptimizeRect` may bring some gap between edge of viewpart
+    // and background rect when setting like `left: 0`, `top: 0`.
+    // graphic.subPixelOptimizeRect(rect);
+
+    return rect;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var curry$4 = curry;
+var each$16 = each$1;
+var Group$3 = Group;
+
+var LegendView = extendComponentView({
+
+    type: 'legend.plain',
+
+    newlineDisabled: false,
+
+    /**
+     * @override
+     */
+    init: function () {
+
+        /**
+         * @private
+         * @type {module:zrender/container/Group}
+         */
+        this.group.add(this._contentGroup = new Group$3());
+
+        /**
+         * @private
+         * @type {module:zrender/Element}
+         */
+        this._backgroundEl;
+    },
+
+    /**
+     * @protected
+     */
+    getContentGroup: function () {
+        return this._contentGroup;
+    },
+
+    /**
+     * @override
+     */
+    render: function (legendModel, ecModel, api) {
+
+        this.resetInner();
+
+        if (!legendModel.get('show', true)) {
+            return;
+        }
+
+        var itemAlign = legendModel.get('align');
+        if (!itemAlign || itemAlign === 'auto') {
+            itemAlign = (
+                legendModel.get('left') === 'right'
+                && legendModel.get('orient') === 'vertical'
+            ) ? 'right' : 'left';
+        }
+
+        this.renderInner(itemAlign, legendModel, ecModel, api);
+
+        // Perform layout.
+        var positionInfo = legendModel.getBoxLayoutParams();
+        var viewportSize = {width: api.getWidth(), height: api.getHeight()};
+        var padding = legendModel.get('padding');
+
+        var maxSize = getLayoutRect(positionInfo, viewportSize, padding);
+        var mainRect = this.layoutInner(legendModel, itemAlign, maxSize);
+
+        // Place mainGroup, based on the calculated `mainRect`.
+        var layoutRect = getLayoutRect(
+            defaults({width: mainRect.width, height: mainRect.height}, positionInfo),
+            viewportSize,
+            padding
+        );
+        this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]);
+
+        // Render background after group is layout.
+        this.group.add(
+            this._backgroundEl = makeBackground(mainRect, legendModel)
+        );
+    },
+
+    /**
+     * @protected
+     */
+    resetInner: function () {
+        this.getContentGroup().removeAll();
+        this._backgroundEl && this.group.remove(this._backgroundEl);
+    },
+
+    /**
+     * @protected
+     */
+    renderInner: function (itemAlign, legendModel, ecModel, api) {
+        var contentGroup = this.getContentGroup();
+        var legendDrawnMap = createHashMap();
+        var selectMode = legendModel.get('selectedMode');
+
+        var excludeSeriesId = [];
+        ecModel.eachRawSeries(function (seriesModel) {
+            !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id);
+        });
+
+        each$16(legendModel.getData(), function (itemModel, dataIndex) {
+            var name = itemModel.get('name');
+
+            // Use empty string or \n as a newline string
+            if (!this.newlineDisabled && (name === '' || name === '\n')) {
+                contentGroup.add(new Group$3({
+                    newline: true
+                }));
+                return;
+            }
+
+            // Representitive series.
+            var seriesModel = ecModel.getSeriesByName(name)[0];
+
+            if (legendDrawnMap.get(name)) {
+                // Have been drawed
+                return;
+            }
+
+            // Series legend
+            if (seriesModel) {
+                var data = seriesModel.getData();
+                var color = data.getVisual('color');
+
+                // If color is a callback function
+                if (typeof color === 'function') {
+                    // Use the first data
+                    color = color(seriesModel.getDataParams(0));
+                }
+
+                // Using rect symbol defaultly
+                var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect';
+                var symbolType = data.getVisual('symbol');
+
+                var itemGroup = this._createItem(
+                    name, dataIndex, itemModel, legendModel,
+                    legendSymbolType, symbolType,
+                    itemAlign, color,
+                    selectMode
+                );
+
+                itemGroup.on('click', curry$4(dispatchSelectAction, name, api))
+                    .on('mouseover', curry$4(dispatchHighlightAction, seriesModel, null, api, excludeSeriesId))
+                    .on('mouseout', curry$4(dispatchDownplayAction, seriesModel, null, api, excludeSeriesId));
+
+                legendDrawnMap.set(name, true);
+            }
+            else {
+                // Data legend of pie, funnel
+                ecModel.eachRawSeries(function (seriesModel) {
+                    // In case multiple series has same data name
+                    if (legendDrawnMap.get(name)) {
+                        return;
+                    }
+
+                    if (seriesModel.legendDataProvider) {
+                        var data = seriesModel.legendDataProvider();
+                        var idx = data.indexOfName(name);
+                        if (idx < 0) {
+                            return;
+                        }
+
+                        var color = data.getItemVisual(idx, 'color');
+
+                        var legendSymbolType = 'roundRect';
+
+                        var itemGroup = this._createItem(
+                            name, dataIndex, itemModel, legendModel,
+                            legendSymbolType, null,
+                            itemAlign, color,
+                            selectMode
+                        );
+
+                        // FIXME: consider different series has items with the same name.
+                        itemGroup.on('click', curry$4(dispatchSelectAction, name, api))
+                            // FIXME Should not specify the series name
+                            .on('mouseover', curry$4(dispatchHighlightAction, seriesModel, name, api, excludeSeriesId))
+                            .on('mouseout', curry$4(dispatchDownplayAction, seriesModel, name, api, excludeSeriesId));
+
+                        legendDrawnMap.set(name, true);
+                    }
+
+                }, this);
+            }
+
+            if (__DEV__) {
+                if (!legendDrawnMap.get(name)) {
+                    console.warn(name + ' series not exists. Legend data should be same with series name or data name.');
+                }
+            }
+        }, this);
+    },
+
+    _createItem: function (
+        name, dataIndex, itemModel, legendModel,
+        legendSymbolType, symbolType,
+        itemAlign, color, selectMode
+    ) {
+        var itemWidth = legendModel.get('itemWidth');
+        var itemHeight = legendModel.get('itemHeight');
+        var inactiveColor = legendModel.get('inactiveColor');
+        var symbolKeepAspect = legendModel.get('symbolKeepAspect');
+
+        var isSelected = legendModel.isSelected(name);
+        var itemGroup = new Group$3();
+
+        var textStyleModel = itemModel.getModel('textStyle');
+
+        var itemIcon = itemModel.get('icon');
+
+        var tooltipModel = itemModel.getModel('tooltip');
+        var legendGlobalTooltipModel = tooltipModel.parentModel;
+
+        // Use user given icon first
+        legendSymbolType = itemIcon || legendSymbolType;
+        itemGroup.add(createSymbol(
+            legendSymbolType,
+            0,
+            0,
+            itemWidth,
+            itemHeight,
+            isSelected ? color : inactiveColor,
+            // symbolKeepAspect default true for legend
+            symbolKeepAspect == null ? true : symbolKeepAspect
+        ));
+
+        // Compose symbols
+        // PENDING
+        if (!itemIcon && symbolType
+            // At least show one symbol, can't be all none
+            && ((symbolType !== legendSymbolType) || symbolType == 'none')
+        ) {
+            var size = itemHeight * 0.8;
+            if (symbolType === 'none') {
+                symbolType = 'circle';
+            }
+            // Put symbol in the center
+            itemGroup.add(createSymbol(
+                symbolType,
+                (itemWidth - size) / 2,
+                (itemHeight - size) / 2,
+                size,
+                size,
+                isSelected ? color : inactiveColor,
+                // symbolKeepAspect default true for legend
+                symbolKeepAspect == null ? true : symbolKeepAspect
+            ));
+        }
+
+        var textX = itemAlign === 'left' ? itemWidth + 5 : -5;
+        var textAlign = itemAlign;
+
+        var formatter = legendModel.get('formatter');
+        var content = name;
+        if (typeof formatter === 'string' && formatter) {
+            content = formatter.replace('{name}', name != null ? name : '');
+        }
+        else if (typeof formatter === 'function') {
+            content = formatter(name);
+        }
+
+        itemGroup.add(new Text({
+            style: setTextStyle({}, textStyleModel, {
+                text: content,
+                x: textX,
+                y: itemHeight / 2,
+                textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor,
+                textAlign: textAlign,
+                textVerticalAlign: 'middle'
+            })
+        }));
+
+        // Add a invisible rect to increase the area of mouse hover
+        var hitRect = new Rect({
+            shape: itemGroup.getBoundingRect(),
+            invisible: true,
+            tooltip: tooltipModel.get('show') ? extend({
+                content: name,
+                // Defaul formatter
+                formatter: legendGlobalTooltipModel.get('formatter', true) || function () {
+                    return name;
+                },
+                formatterParams: {
+                    componentType: 'legend',
+                    legendIndex: legendModel.componentIndex,
+                    name: name,
+                    $vars: ['name']
+                }
+            }, tooltipModel.option) : null
+        });
+        itemGroup.add(hitRect);
+
+        itemGroup.eachChild(function (child) {
+            child.silent = true;
+        });
+
+        hitRect.silent = !selectMode;
+
+        this.getContentGroup().add(itemGroup);
+
+        setHoverStyle(itemGroup);
+
+        itemGroup.__legendDataIndex = dataIndex;
+
+        return itemGroup;
+    },
+
+    /**
+     * @protected
+     */
+    layoutInner: function (legendModel, itemAlign, maxSize) {
+        var contentGroup = this.getContentGroup();
+
+        // Place items in contentGroup.
+        box(
+            legendModel.get('orient'),
+            contentGroup,
+            legendModel.get('itemGap'),
+            maxSize.width,
+            maxSize.height
+        );
+
+        var contentRect = contentGroup.getBoundingRect();
+        contentGroup.attr('position', [-contentRect.x, -contentRect.y]);
+
+        return this.group.getBoundingRect();
+    }
+
+});
+
+function dispatchSelectAction(name, api) {
+    api.dispatchAction({
+        type: 'legendToggleSelect',
+        name: name
+    });
+}
+
+function dispatchHighlightAction(seriesModel, dataName, api, excludeSeriesId) {
+    // If element hover will move to a hoverLayer.
+    var el = api.getZr().storage.getDisplayList()[0];
+    if (!(el && el.useHoverLayer)) {
+        api.dispatchAction({
+            type: 'highlight',
+            seriesName: seriesModel.name,
+            name: dataName,
+            excludeSeriesId: excludeSeriesId
+        });
+    }
+}
+
+function dispatchDownplayAction(seriesModel, dataName, api, excludeSeriesId) {
+    // If element hover will move to a hoverLayer.
+    var el = api.getZr().storage.getDisplayList()[0];
+    if (!(el && el.useHoverLayer)) {
+        api.dispatchAction({
+            type: 'downplay',
+            seriesName: seriesModel.name,
+            name: dataName,
+            excludeSeriesId: excludeSeriesId
+        });
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var legendFilter = function (ecModel) {
+
+    var legendModels = ecModel.findComponents({
+        mainType: 'legend'
+    });
+    if (legendModels && legendModels.length) {
+        ecModel.filterSeries(function (series) {
+            // If in any legend component the status is not selected.
+            // Because in legend series is assumed selected when it is not in the legend data.
+            for (var i = 0; i < legendModels.length; i++) {
+                if (!legendModels[i].isSelected(series.name)) {
+                    return false;
+                }
+            }
+            return true;
+        });
+    }
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+// Do not contain scrollable legend, for sake of file size.
+
+// Series Filter
+registerProcessor(legendFilter);
+
+ComponentModel.registerSubTypeDefaulter('legend', function () {
+    // Default 'plain' when no type specified.
+    return 'plain';
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var ScrollableLegendModel = LegendModel.extend({
+
+    type: 'legend.scroll',
+
+    /**
+     * @param {number} scrollDataIndex
+     */
+    setScrollDataIndex: function (scrollDataIndex) {
+        this.option.scrollDataIndex = scrollDataIndex;
+    },
+
+    defaultOption: {
+        scrollDataIndex: 0,
+        pageButtonItemGap: 5,
+        pageButtonGap: null,
+        pageButtonPosition: 'end', // 'start' or 'end'
+        pageFormatter: '{current}/{total}', // If null/undefined, do not show page.
+        pageIcons: {
+            horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],
+            vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']
+        },
+        pageIconColor: '#2f4554',
+        pageIconInactiveColor: '#aaa',
+        pageIconSize: 15, // Can be [10, 3], which represents [width, height]
+        pageTextStyle: {
+            color: '#333'
+        },
+
+        animationDurationUpdate: 800
+    },
+
+    /**
+     * @override
+     */
+    init: function (option, parentModel, ecModel, extraOpt) {
+        var inputPositionParams = getLayoutParams(option);
+
+        ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);
+
+        mergeAndNormalizeLayoutParams(this, option, inputPositionParams);
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function (option, extraOpt) {
+        ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);
+
+        mergeAndNormalizeLayoutParams(this, this.option, option);
+    },
+
+    getOrient: function () {
+        return this.get('orient') === 'vertical'
+            ? {index: 1, name: 'vertical'}
+            : {index: 0, name: 'horizontal'};
+    }
+
+});
+
+// Do not `ignoreSize` to enable setting {left: 10, right: 10}.
+function mergeAndNormalizeLayoutParams(legendModel, target, raw) {
+    var orient = legendModel.getOrient();
+    var ignoreSize = [1, 1];
+    ignoreSize[orient.index] = 0;
+    mergeLayoutParam(target, raw, {
+        type: 'box', ignoreSize: ignoreSize
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Separate legend and scrollable legend to reduce package size.
+ */
+
+var Group$4 = Group;
+
+var WH$1 = ['width', 'height'];
+var XY$1 = ['x', 'y'];
+
+var ScrollableLegendView = LegendView.extend({
+
+    type: 'legend.scroll',
+
+    newlineDisabled: true,
+
+    init: function () {
+
+        ScrollableLegendView.superCall(this, 'init');
+
+        /**
+         * @private
+         * @type {number} For `scroll`.
+         */
+        this._currentIndex = 0;
+
+        /**
+         * @private
+         * @type {module:zrender/container/Group}
+         */
+        this.group.add(this._containerGroup = new Group$4());
+        this._containerGroup.add(this.getContentGroup());
+
+        /**
+         * @private
+         * @type {module:zrender/container/Group}
+         */
+        this.group.add(this._controllerGroup = new Group$4());
+
+        /**
+         *
+         * @private
+         */
+        this._showController;
+    },
+
+    /**
+     * @override
+     */
+    resetInner: function () {
+        ScrollableLegendView.superCall(this, 'resetInner');
+
+        this._controllerGroup.removeAll();
+        this._containerGroup.removeClipPath();
+        this._containerGroup.__rectSize = null;
+    },
+
+    /**
+     * @override
+     */
+    renderInner: function (itemAlign, legendModel, ecModel, api) {
+        var me = this;
+
+        // Render content items.
+        ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api);
+
+        var controllerGroup = this._controllerGroup;
+
+        var pageIconSize = legendModel.get('pageIconSize', true);
+        if (!isArray(pageIconSize)) {
+            pageIconSize = [pageIconSize, pageIconSize];
+        }
+
+        createPageButton('pagePrev', 0);
+
+        var pageTextStyleModel = legendModel.getModel('pageTextStyle');
+        controllerGroup.add(new Text({
+            name: 'pageText',
+            style: {
+                textFill: pageTextStyleModel.getTextColor(),
+                font: pageTextStyleModel.getFont(),
+                textVerticalAlign: 'middle',
+                textAlign: 'center'
+            },
+            silent: true
+        }));
+
+        createPageButton('pageNext', 1);
+
+        function createPageButton(name, iconIdx) {
+            var pageDataIndexName = name + 'DataIndex';
+            var icon = createIcon(
+                legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx],
+                {
+                    // Buttons will be created in each render, so we do not need
+                    // to worry about avoiding using legendModel kept in scope.
+                    onclick: bind(
+                        me._pageGo, me, pageDataIndexName, legendModel, api
+                    )
+                },
+                {
+                    x: -pageIconSize[0] / 2,
+                    y: -pageIconSize[1] / 2,
+                    width: pageIconSize[0],
+                    height: pageIconSize[1]
+                }
+            );
+            icon.name = name;
+            controllerGroup.add(icon);
+        }
+    },
+
+    /**
+     * @override
+     */
+    layoutInner: function (legendModel, itemAlign, maxSize) {
+        var contentGroup = this.getContentGroup();
+        var containerGroup = this._containerGroup;
+        var controllerGroup = this._controllerGroup;
+
+        var orientIdx = legendModel.getOrient().index;
+        var wh = WH$1[orientIdx];
+        var hw = WH$1[1 - orientIdx];
+        var yx = XY$1[1 - orientIdx];
+
+        // Place items in contentGroup.
+        box(
+            legendModel.get('orient'),
+            contentGroup,
+            legendModel.get('itemGap'),
+            !orientIdx ? null : maxSize.width,
+            orientIdx ? null : maxSize.height
+        );
+
+        box(
+            // Buttons in controller are layout always horizontally.
+            'horizontal',
+            controllerGroup,
+            legendModel.get('pageButtonItemGap', true)
+        );
+
+        var contentRect = contentGroup.getBoundingRect();
+        var controllerRect = controllerGroup.getBoundingRect();
+        var showController = this._showController = contentRect[wh] > maxSize[wh];
+
+        var contentPos = [-contentRect.x, -contentRect.y];
+        // Remain contentPos when scroll animation perfroming.
+        contentPos[orientIdx] = contentGroup.position[orientIdx];
+
+        // Layout container group based on 0.
+        var containerPos = [0, 0];
+        var controllerPos = [-controllerRect.x, -controllerRect.y];
+        var pageButtonGap = retrieve2(
+            legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)
+        );
+
+        // Place containerGroup and controllerGroup and contentGroup.
+        if (showController) {
+            var pageButtonPosition = legendModel.get('pageButtonPosition', true);
+            // controller is on the right / bottom.
+            if (pageButtonPosition === 'end') {
+                controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];
+            }
+            // controller is on the left / top.
+            else {
+                containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;
+            }
+        }
+
+        // Always align controller to content as 'middle'.
+        controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;
+
+        contentGroup.attr('position', contentPos);
+        containerGroup.attr('position', containerPos);
+        controllerGroup.attr('position', controllerPos);
+
+        // Calculate `mainRect` and set `clipPath`.
+        // mainRect should not be calculated by `this.group.getBoundingRect()`
+        // for sake of the overflow.
+        var mainRect = this.group.getBoundingRect();
+        var mainRect = {x: 0, y: 0};
+        // Consider content may be overflow (should be clipped).
+        mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];
+        mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]);
+        // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.
+        mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);
+
+        containerGroup.__rectSize = maxSize[wh];
+        if (showController) {
+            var clipShape = {x: 0, y: 0};
+            clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);
+            clipShape[hw] = mainRect[hw];
+            containerGroup.setClipPath(new Rect({shape: clipShape}));
+            // Consider content may be larger than container, container rect
+            // can not be obtained from `containerGroup.getBoundingRect()`.
+            containerGroup.__rectSize = clipShape[wh];
+        }
+        else {
+            // Do not remove or ignore controller. Keep them set as place holders.
+            controllerGroup.eachChild(function (child) {
+                child.attr({invisible: true, silent: true});
+            });
+        }
+
+        // Content translate animation.
+        var pageInfo = this._getPageInfo(legendModel);
+        pageInfo.pageIndex != null && updateProps(
+            contentGroup,
+            {position: pageInfo.contentPosition},
+            // When switch from "show controller" to "not show controller", view should be
+            // updated immediately without animation, otherwise causes weird efffect.
+            showController ? legendModel : false
+        );
+
+        this._updatePageInfoView(legendModel, pageInfo);
+
+        return mainRect;
+    },
+
+    _pageGo: function (to, legendModel, api) {
+        var scrollDataIndex = this._getPageInfo(legendModel)[to];
+
+        scrollDataIndex != null && api.dispatchAction({
+            type: 'legendScroll',
+            scrollDataIndex: scrollDataIndex,
+            legendId: legendModel.id
+        });
+    },
+
+    _updatePageInfoView: function (legendModel, pageInfo) {
+        var controllerGroup = this._controllerGroup;
+
+        each$1(['pagePrev', 'pageNext'], function (name) {
+            var canJump = pageInfo[name + 'DataIndex'] != null;
+            var icon = controllerGroup.childOfName(name);
+            if (icon) {
+                icon.setStyle(
+                    'fill',
+                    canJump
+                        ? legendModel.get('pageIconColor', true)
+                        : legendModel.get('pageIconInactiveColor', true)
+                );
+                icon.cursor = canJump ? 'pointer' : 'default';
+            }
+        });
+
+        var pageText = controllerGroup.childOfName('pageText');
+        var pageFormatter = legendModel.get('pageFormatter');
+        var pageIndex = pageInfo.pageIndex;
+        var current = pageIndex != null ? pageIndex + 1 : 0;
+        var total = pageInfo.pageCount;
+
+        pageText && pageFormatter && pageText.setStyle(
+            'text',
+            isString(pageFormatter)
+                ? pageFormatter.replace('{current}', current).replace('{total}', total)
+                : pageFormatter({current: current, total: total})
+        );
+    },
+
+    /**
+     * @param {module:echarts/model/Model} legendModel
+     * @return {Object} {
+     *  contentPosition: Array.<number>, null when data item not found.
+     *  pageIndex: number, null when data item not found.
+     *  pageCount: number, always be a number, can be 0.
+     *  pagePrevDataIndex: number, null when no next page.
+     *  pageNextDataIndex: number, null when no previous page.
+     * }
+     */
+    _getPageInfo: function (legendModel) {
+        // Align left or top by the current dataIndex.
+        var currDataIndex = legendModel.get('scrollDataIndex', true);
+        var contentGroup = this.getContentGroup();
+        var contentRect = contentGroup.getBoundingRect();
+        var containerRectSize = this._containerGroup.__rectSize;
+
+        var orientIdx = legendModel.getOrient().index;
+        var wh = WH$1[orientIdx];
+        var hw = WH$1[1 - orientIdx];
+        var xy = XY$1[orientIdx];
+        var contentPos = contentGroup.position.slice();
+
+        var pageIndex;
+        var pagePrevDataIndex;
+        var pageNextDataIndex;
+
+        var targetItemGroup;
+        if (this._showController) {
+            contentGroup.eachChild(function (child) {
+                if (child.__legendDataIndex === currDataIndex) {
+                    targetItemGroup = child;
+                }
+            });
+        }
+        else {
+            targetItemGroup = contentGroup.childAt(0);
+        }
+
+        var pageCount = containerRectSize ? Math.ceil(contentRect[wh] / containerRectSize) : 0;
+
+        if (targetItemGroup) {
+            var itemRect = targetItemGroup.getBoundingRect();
+            var itemLoc = targetItemGroup.position[orientIdx] + itemRect[xy];
+            contentPos[orientIdx] = -itemLoc - contentRect[xy];
+            pageIndex = Math.floor(
+                pageCount * (itemLoc + itemRect[xy] + containerRectSize / 2) / contentRect[wh]
+            );
+            pageIndex = (contentRect[wh] && pageCount)
+                ? Math.max(0, Math.min(pageCount - 1, pageIndex))
+                : -1;
+
+            var winRect = {x: 0, y: 0};
+            winRect[wh] = containerRectSize;
+            winRect[hw] = contentRect[hw];
+            winRect[xy] = -contentPos[orientIdx] - contentRect[xy];
+
+            var startIdx;
+            var children = contentGroup.children();
+
+            contentGroup.eachChild(function (child, index) {
+                var itemRect = getItemRect(child);
+
+                if (itemRect.intersect(winRect)) {
+                    startIdx == null && (startIdx = index);
+                    // It is user-friendly that the last item shown in the
+                    // current window is shown at the begining of next window.
+                    pageNextDataIndex = child.__legendDataIndex;
+                }
+
+                // If the last item is shown entirely, no next page.
+                if (index === children.length - 1
+                    && itemRect[xy] + itemRect[wh] <= winRect[xy] + winRect[wh]
+                ) {
+                    pageNextDataIndex = null;
+                }
+            });
+
+            // Always align based on the left/top most item, so the left/top most
+            // item in the previous window is needed to be found here.
+            if (startIdx != null) {
+                var startItem = children[startIdx];
+                var startRect = getItemRect(startItem);
+                winRect[xy] = startRect[xy] + startRect[wh] - winRect[wh];
+
+                // If the first item is shown entirely, no previous page.
+                if (startIdx <= 0 && startRect[xy] >= winRect[xy]) {
+                    pagePrevDataIndex = null;
+                }
+                else {
+                    while (startIdx > 0 && getItemRect(children[startIdx - 1]).intersect(winRect)) {
+                        startIdx--;
+                    }
+                    pagePrevDataIndex = children[startIdx].__legendDataIndex;
+                }
+            }
+        }
+
+        return {
+            contentPosition: contentPos,
+            pageIndex: pageIndex,
+            pageCount: pageCount,
+            pagePrevDataIndex: pagePrevDataIndex,
+            pageNextDataIndex: pageNextDataIndex
+        };
+
+        function getItemRect(el) {
+            var itemRect = el.getBoundingRect().clone();
+            itemRect[xy] += el.position[orientIdx];
+            return itemRect;
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @event legendScroll
+ * @type {Object}
+ * @property {string} type 'legendScroll'
+ * @property {string} scrollDataIndex
+ */
+registerAction(
+    'legendScroll', 'legendscroll',
+    function (payload, ecModel) {
+        var scrollDataIndex = payload.scrollDataIndex;
+
+        scrollDataIndex != null && ecModel.eachComponent(
+            {mainType: 'legend', subType: 'scroll', query: payload},
+            function (legendModel) {
+                legendModel.setScrollDataIndex(scrollDataIndex);
+            }
+        );
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Legend component entry file8
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentModel({
+
+    type: 'tooltip',
+
+    dependencies: ['axisPointer'],
+
+    defaultOption: {
+        zlevel: 0,
+
+        z: 8,
+
+        show: true,
+
+        // tooltip主体内容
+        showContent: true,
+
+        // 'trigger' only works on coordinate system.
+        // 'item' | 'axis' | 'none'
+        trigger: 'item',
+
+        // 'click' | 'mousemove' | 'none'
+        triggerOn: 'mousemove|click',
+
+        alwaysShowContent: false,
+
+        displayMode: 'single', // 'single' | 'multipleByCoordSys'
+
+        // 位置 {Array} | {Function}
+        // position: null
+        // Consider triggered from axisPointer handle, verticalAlign should be 'middle'
+        // align: null,
+        // verticalAlign: null,
+
+        // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。
+        confine: false,
+
+        // 内容格式器:{string}(Template) ¦ {Function}
+        // formatter: null
+
+        showDelay: 0,
+
+        // 隐藏延迟,单位ms
+        hideDelay: 100,
+
+        // 动画变换时间,单位s
+        transitionDuration: 0.4,
+
+        enterable: false,
+
+        // 提示背景颜色,默认为透明度为0.7的黑色
+        backgroundColor: 'rgba(50,50,50,0.7)',
+
+        // 提示边框颜色
+        borderColor: '#333',
+
+        // 提示边框圆角,单位px,默认为4
+        borderRadius: 4,
+
+        // 提示边框线宽,单位px,默认为0(无边框)
+        borderWidth: 0,
+
+        // 提示内边距,单位px,默认各方向内边距为5,
+        // 接受数组分别设定上右下左边距,同css
+        padding: 5,
+
+        // Extra css text
+        extraCssText: '',
+
+        // 坐标轴指示器,坐标轴触发有效
+        axisPointer: {
+            // 默认为直线
+            // 可选为:'line' | 'shadow' | 'cross'
+            type: 'line',
+
+            // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选
+            // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'
+            // 默认 'auto',会选择类型为 category 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴
+            // 极坐标系会默认选择 angle 轴
+            axis: 'auto',
+
+            animation: 'auto',
+            animationDurationUpdate: 200,
+            animationEasingUpdate: 'exponentialOut',
+
+            crossStyle: {
+                color: '#999',
+                width: 1,
+                type: 'dashed',
+
+                // TODO formatter
+                textStyle: {}
+            }
+
+            // lineStyle and shadowStyle should not be specified here,
+            // otherwise it will always override those styles on option.axisPointer.
+        },
+        textStyle: {
+            color: '#fff',
+            fontSize: 14
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$18 = each$1;
+var toCamelCase$1 = toCamelCase;
+
+var vendors = ['', '-webkit-', '-moz-', '-o-'];
+
+var gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';
+
+/**
+ * @param {number} duration
+ * @return {string}
+ * @inner
+ */
+function assembleTransition(duration) {
+    var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';
+    var transitionText = 'left ' + duration + 's ' + transitionCurve + ','
+                        + 'top ' + duration + 's ' + transitionCurve;
+    return map(vendors, function (vendorPrefix) {
+        return vendorPrefix + 'transition:' + transitionText;
+    }).join(';');
+}
+
+/**
+ * @param {Object} textStyle
+ * @return {string}
+ * @inner
+ */
+function assembleFont(textStyleModel) {
+    var cssText = [];
+
+    var fontSize = textStyleModel.get('fontSize');
+    var color = textStyleModel.getTextColor();
+
+    color && cssText.push('color:' + color);
+
+    cssText.push('font:' + textStyleModel.getFont());
+
+    fontSize &&
+        cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');
+
+    each$18(['decoration', 'align'], function (name) {
+        var val = textStyleModel.get(name);
+        val && cssText.push('text-' + name + ':' + val);
+    });
+
+    return cssText.join(';');
+}
+
+/**
+ * @param {Object} tooltipModel
+ * @return {string}
+ * @inner
+ */
+function assembleCssText(tooltipModel) {
+
+    var cssText = [];
+
+    var transitionDuration = tooltipModel.get('transitionDuration');
+    var backgroundColor = tooltipModel.get('backgroundColor');
+    var textStyleModel = tooltipModel.getModel('textStyle');
+    var padding = tooltipModel.get('padding');
+
+    // Animation transition. Do not animate when transitionDuration is 0.
+    transitionDuration &&
+        cssText.push(assembleTransition(transitionDuration));
+
+    if (backgroundColor) {
+        if (env$1.canvasSupported) {
+            cssText.push('background-Color:' + backgroundColor);
+        }
+        else {
+            // for ie
+            cssText.push(
+                'background-Color:#' + toHex(backgroundColor)
+            );
+            cssText.push('filter:alpha(opacity=70)');
+        }
+    }
+
+    // Border style
+    each$18(['width', 'color', 'radius'], function (name) {
+        var borderName = 'border-' + name;
+        var camelCase = toCamelCase$1(borderName);
+        var val = tooltipModel.get(camelCase);
+        val != null &&
+            cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));
+    });
+
+    // Text style
+    cssText.push(assembleFont(textStyleModel));
+
+    // Padding
+    if (padding != null) {
+        cssText.push('padding:' + normalizeCssArray$1(padding).join('px ') + 'px');
+    }
+
+    return cssText.join(';') + ';';
+}
+
+/**
+ * @alias module:echarts/component/tooltip/TooltipContent
+ * @constructor
+ */
+function TooltipContent(container, api) {
+    if (env$1.wxa) {
+        return null;
+    }
+
+    var el = document.createElement('div');
+    var zr = this._zr = api.getZr();
+
+    this.el = el;
+
+    this._x = api.getWidth() / 2;
+    this._y = api.getHeight() / 2;
+
+    container.appendChild(el);
+
+    this._container = container;
+
+    this._show = false;
+
+    /**
+     * @private
+     */
+    this._hideTimeout;
+
+    var self = this;
+    el.onmouseenter = function () {
+        // clear the timeout in hideLater and keep showing tooltip
+        if (self._enterable) {
+            clearTimeout(self._hideTimeout);
+            self._show = true;
+        }
+        self._inContent = true;
+    };
+    el.onmousemove = function (e) {
+        e = e || window.event;
+        if (!self._enterable) {
+            // Try trigger zrender event to avoid mouse
+            // in and out shape too frequently
+            var handler = zr.handler;
+            normalizeEvent(container, e, true);
+            handler.dispatch('mousemove', e);
+        }
+    };
+    el.onmouseleave = function () {
+        if (self._enterable) {
+            if (self._show) {
+                self.hideLater(self._hideDelay);
+            }
+        }
+        self._inContent = false;
+    };
+}
+
+TooltipContent.prototype = {
+
+    constructor: TooltipContent,
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    _enterable: true,
+
+    /**
+     * Update when tooltip is rendered
+     */
+    update: function () {
+        // FIXME
+        // Move this logic to ec main?
+        var container = this._container;
+        var stl = container.currentStyle
+            || document.defaultView.getComputedStyle(container);
+        var domStyle = container.style;
+        if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {
+            domStyle.position = 'relative';
+        }
+        // Hide the tooltip
+        // PENDING
+        // this.hide();
+    },
+
+    show: function (tooltipModel) {
+        clearTimeout(this._hideTimeout);
+        var el = this.el;
+
+        el.style.cssText = gCssText + assembleCssText(tooltipModel)
+            // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore
+            + ';left:' + this._x + 'px;top:' + this._y + 'px;'
+            + (tooltipModel.get('extraCssText') || '');
+
+        el.style.display = el.innerHTML ?  'block' : 'none';
+
+        this._show = true;
+    },
+
+    setContent: function (content) {
+        this.el.innerHTML = content == null ? '' : content;
+    },
+
+    setEnterable: function (enterable) {
+        this._enterable = enterable;
+    },
+
+    getSize: function () {
+        var el = this.el;
+        return [el.clientWidth, el.clientHeight];
+    },
+
+    moveTo: function (x, y) {
+        // xy should be based on canvas root. But tooltipContent is
+        // the sibling of canvas root. So padding of ec container
+        // should be considered here.
+        var zr = this._zr;
+        var viewportRootOffset;
+        if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) {
+            x += viewportRootOffset.offsetLeft;
+            y += viewportRootOffset.offsetTop;
+        }
+
+        var style = this.el.style;
+        style.left = x + 'px';
+        style.top = y + 'px';
+
+        this._x = x;
+        this._y = y;
+    },
+
+    hide: function () {
+        this.el.style.display = 'none';
+        this._show = false;
+    },
+
+    hideLater: function (time) {
+        if (this._show && !(this._inContent && this._enterable)) {
+            if (time) {
+                this._hideDelay = time;
+                // Set show false to avoid invoke hideLater mutiple times
+                this._show = false;
+                this._hideTimeout = setTimeout(bind(this.hide, this), time);
+            }
+            else {
+                this.hide();
+            }
+        }
+    },
+
+    isShow: function () {
+        return this._show;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var bind$3 = bind;
+var each$17 = each$1;
+var parsePercent$2 = parsePercent$1;
+
+var proxyRect = new Rect({
+    shape: {x: -1, y: -1, width: 2, height: 2}
+});
+
+extendComponentView({
+
+    type: 'tooltip',
+
+    init: function (ecModel, api) {
+        if (env$1.node) {
+            return;
+        }
+        var tooltipContent = new TooltipContent(api.getDom(), api);
+        this._tooltipContent = tooltipContent;
+    },
+
+    render: function (tooltipModel, ecModel, api) {
+        if (env$1.node || env$1.wxa) {
+            return;
+        }
+
+        // Reset
+        this.group.removeAll();
+
+        /**
+         * @private
+         * @type {module:echarts/component/tooltip/TooltipModel}
+         */
+        this._tooltipModel = tooltipModel;
+
+        /**
+         * @private
+         * @type {module:echarts/model/Global}
+         */
+        this._ecModel = ecModel;
+
+        /**
+         * @private
+         * @type {module:echarts/ExtensionAPI}
+         */
+        this._api = api;
+
+        /**
+         * Should be cleaned when render.
+         * @private
+         * @type {Array.<Array.<Object>>}
+         */
+        this._lastDataByCoordSys = null;
+
+        /**
+         * @private
+         * @type {boolean}
+         */
+        this._alwaysShowContent = tooltipModel.get('alwaysShowContent');
+
+        var tooltipContent = this._tooltipContent;
+        tooltipContent.update();
+        tooltipContent.setEnterable(tooltipModel.get('enterable'));
+
+        this._initGlobalListener();
+
+        this._keepShow();
+    },
+
+    _initGlobalListener: function () {
+        var tooltipModel = this._tooltipModel;
+        var triggerOn = tooltipModel.get('triggerOn');
+
+        register(
+            'itemTooltip',
+            this._api,
+            bind$3(function (currTrigger, e, dispatchAction) {
+                // If 'none', it is not controlled by mouse totally.
+                if (triggerOn !== 'none') {
+                    if (triggerOn.indexOf(currTrigger) >= 0) {
+                        this._tryShow(e, dispatchAction);
+                    }
+                    else if (currTrigger === 'leave') {
+                        this._hide(dispatchAction);
+                    }
+                }
+            }, this)
+        );
+    },
+
+    _keepShow: function () {
+        var tooltipModel = this._tooltipModel;
+        var ecModel = this._ecModel;
+        var api = this._api;
+
+        // Try to keep the tooltip show when refreshing
+        if (this._lastX != null
+            && this._lastY != null
+            // When user is willing to control tooltip totally using API,
+            // self.manuallyShowTip({x, y}) might cause tooltip hide,
+            // which is not expected.
+            && tooltipModel.get('triggerOn') !== 'none'
+        ) {
+            var self = this;
+            clearTimeout(this._refreshUpdateTimeout);
+            this._refreshUpdateTimeout = setTimeout(function () {
+                // Show tip next tick after other charts are rendered
+                // In case highlight action has wrong result
+                // FIXME
+                self.manuallyShowTip(tooltipModel, ecModel, api, {
+                    x: self._lastX,
+                    y: self._lastY
+                });
+            });
+        }
+    },
+
+    /**
+     * Show tip manually by
+     * dispatchAction({
+     *     type: 'showTip',
+     *     x: 10,
+     *     y: 10
+     * });
+     * Or
+     * dispatchAction({
+     *      type: 'showTip',
+     *      seriesIndex: 0,
+     *      dataIndex or dataIndexInside or name
+     * });
+     *
+     *  TODO Batch
+     */
+    manuallyShowTip: function (tooltipModel, ecModel, api, payload) {
+        if (payload.from === this.uid || env$1.node) {
+            return;
+        }
+
+        var dispatchAction = makeDispatchAction$1(payload, api);
+
+        // Reset ticket
+        this._ticket = '';
+
+        // When triggered from axisPointer.
+        var dataByCoordSys = payload.dataByCoordSys;
+
+        if (payload.tooltip && payload.x != null && payload.y != null) {
+            var el = proxyRect;
+            el.position = [payload.x, payload.y];
+            el.update();
+            el.tooltip = payload.tooltip;
+            // Manually show tooltip while view is not using zrender elements.
+            this._tryShow({
+                offsetX: payload.x,
+                offsetY: payload.y,
+                target: el
+            }, dispatchAction);
+        }
+        else if (dataByCoordSys) {
+            this._tryShow({
+                offsetX: payload.x,
+                offsetY: payload.y,
+                position: payload.position,
+                event: {},
+                dataByCoordSys: payload.dataByCoordSys,
+                tooltipOption: payload.tooltipOption
+            }, dispatchAction);
+        }
+        else if (payload.seriesIndex != null) {
+
+            if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {
+                return;
+            }
+
+            var pointInfo = findPointFromSeries(payload, ecModel);
+            var cx = pointInfo.point[0];
+            var cy = pointInfo.point[1];
+            if (cx != null && cy != null) {
+                this._tryShow({
+                    offsetX: cx,
+                    offsetY: cy,
+                    position: payload.position,
+                    target: pointInfo.el,
+                    event: {}
+                }, dispatchAction);
+            }
+        }
+        else if (payload.x != null && payload.y != null) {
+            // FIXME
+            // should wrap dispatchAction like `axisPointer/globalListener` ?
+            api.dispatchAction({
+                type: 'updateAxisPointer',
+                x: payload.x,
+                y: payload.y
+            });
+
+            this._tryShow({
+                offsetX: payload.x,
+                offsetY: payload.y,
+                position: payload.position,
+                target: api.getZr().findHover(payload.x, payload.y).target,
+                event: {}
+            }, dispatchAction);
+        }
+    },
+
+    manuallyHideTip: function (tooltipModel, ecModel, api, payload) {
+        var tooltipContent = this._tooltipContent;
+
+        if (!this._alwaysShowContent && this._tooltipModel) {
+            tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));
+        }
+
+        this._lastX = this._lastY = null;
+
+        if (payload.from !== this.uid) {
+            this._hide(makeDispatchAction$1(payload, api));
+        }
+    },
+
+    // Be compatible with previous design, that is, when tooltip.type is 'axis' and
+    // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer
+    // and tooltip.
+    _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) {
+        var seriesIndex = payload.seriesIndex;
+        var dataIndex = payload.dataIndex;
+        var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;
+
+        if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {
+            return;
+        }
+
+        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
+        if (!seriesModel) {
+            return;
+        }
+
+        var data = seriesModel.getData();
+        var tooltipModel = buildTooltipModel([
+            data.getItemModel(dataIndex),
+            seriesModel,
+            (seriesModel.coordinateSystem || {}).model,
+            tooltipModel
+        ]);
+
+        if (tooltipModel.get('trigger') !== 'axis') {
+            return;
+        }
+
+        api.dispatchAction({
+            type: 'updateAxisPointer',
+            seriesIndex: seriesIndex,
+            dataIndex: dataIndex,
+            position: payload.position
+        });
+
+        return true;
+    },
+
+    _tryShow: function (e, dispatchAction) {
+        var el = e.target;
+        var tooltipModel = this._tooltipModel;
+
+        if (!tooltipModel) {
+            return;
+        }
+
+        // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed
+        this._lastX = e.offsetX;
+        this._lastY = e.offsetY;
+
+        var dataByCoordSys = e.dataByCoordSys;
+        if (dataByCoordSys && dataByCoordSys.length) {
+            this._showAxisTooltip(dataByCoordSys, e);
+        }
+        // Always show item tooltip if mouse is on the element with dataIndex
+        else if (el && el.dataIndex != null) {
+            this._lastDataByCoordSys = null;
+            this._showSeriesItemTooltip(e, el, dispatchAction);
+        }
+        // Tooltip provided directly. Like legend.
+        else if (el && el.tooltip) {
+            this._lastDataByCoordSys = null;
+            this._showComponentItemTooltip(e, el, dispatchAction);
+        }
+        else {
+            this._lastDataByCoordSys = null;
+            this._hide(dispatchAction);
+        }
+    },
+
+    _showOrMove: function (tooltipModel, cb) {
+        // showDelay is used in this case: tooltip.enterable is set
+        // as true. User intent to move mouse into tooltip and click
+        // something. `showDelay` makes it easyer to enter the content
+        // but tooltip do not move immediately.
+        var delay = tooltipModel.get('showDelay');
+        cb = bind(cb, this);
+        clearTimeout(this._showTimout);
+        delay > 0
+            ? (this._showTimout = setTimeout(cb, delay))
+            : cb();
+    },
+
+    _showAxisTooltip: function (dataByCoordSys, e) {
+        var ecModel = this._ecModel;
+        var globalTooltipModel = this._tooltipModel;
+        var point = [e.offsetX, e.offsetY];
+        var singleDefaultHTML = [];
+        var singleParamsList = [];
+        var singleTooltipModel = buildTooltipModel([
+            e.tooltipOption,
+            globalTooltipModel
+        ]);
+
+        each$17(dataByCoordSys, function (itemCoordSys) {
+            // var coordParamList = [];
+            // var coordDefaultHTML = [];
+            // var coordTooltipModel = buildTooltipModel([
+            //     e.tooltipOption,
+            //     itemCoordSys.tooltipOption,
+            //     ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex),
+            //     globalTooltipModel
+            // ]);
+            // var displayMode = coordTooltipModel.get('displayMode');
+            // var paramsList = displayMode === 'single' ? singleParamsList : [];
+
+            each$17(itemCoordSys.dataByAxis, function (item) {
+                var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex);
+                var axisValue = item.value;
+                var seriesDefaultHTML = [];
+
+                if (!axisModel || axisValue == null) {
+                    return;
+                }
+
+                var valueLabel = getValueLabel(
+                    axisValue, axisModel.axis, ecModel,
+                    item.seriesDataIndices,
+                    item.valueLabelOpt
+                );
+
+                each$1(item.seriesDataIndices, function (idxItem) {
+                    var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);
+                    var dataIndex = idxItem.dataIndexInside;
+                    var dataParams = series && series.getDataParams(dataIndex);
+                    dataParams.axisDim = item.axisDim;
+                    dataParams.axisIndex = item.axisIndex;
+                    dataParams.axisType = item.axisType;
+                    dataParams.axisId = item.axisId;
+                    dataParams.axisValue = getAxisRawValue(axisModel.axis, axisValue);
+                    dataParams.axisValueLabel = valueLabel;
+
+                    if (dataParams) {
+                        singleParamsList.push(dataParams);
+                        seriesDefaultHTML.push(series.formatTooltip(dataIndex, true));
+                    }
+                });
+
+                // Default tooltip content
+                // FIXME
+                // (1) shold be the first data which has name?
+                // (2) themeRiver, firstDataIndex is array, and first line is unnecessary.
+                var firstLine = valueLabel;
+                singleDefaultHTML.push(
+                    (firstLine ? encodeHTML(firstLine) + '<br />' : '')
+                    + seriesDefaultHTML.join('<br />')
+                );
+            });
+        }, this);
+
+        // In most case, the second axis is shown upper than the first one.
+        singleDefaultHTML.reverse();
+        singleDefaultHTML = singleDefaultHTML.join('<br /><br />');
+
+        var positionExpr = e.position;
+        this._showOrMove(singleTooltipModel, function () {
+            if (this._updateContentNotChangedOnAxis(dataByCoordSys)) {
+                this._updatePosition(
+                    singleTooltipModel,
+                    positionExpr,
+                    point[0], point[1],
+                    this._tooltipContent,
+                    singleParamsList
+                );
+            }
+            else {
+                this._showTooltipContent(
+                    singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(),
+                    point[0], point[1], positionExpr
+                );
+            }
+        });
+
+        // Do not trigger events here, because this branch only be entered
+        // from dispatchAction.
+    },
+
+    _showSeriesItemTooltip: function (e, el, dispatchAction) {
+        var ecModel = this._ecModel;
+        // Use dataModel in element if possible
+        // Used when mouseover on a element like markPoint or edge
+        // In which case, the data is not main data in series.
+        var seriesIndex = el.seriesIndex;
+        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);
+
+        // For example, graph link.
+        var dataModel = el.dataModel || seriesModel;
+        var dataIndex = el.dataIndex;
+        var dataType = el.dataType;
+        var data = dataModel.getData();
+
+        var tooltipModel = buildTooltipModel([
+            data.getItemModel(dataIndex),
+            dataModel,
+            seriesModel && (seriesModel.coordinateSystem || {}).model,
+            this._tooltipModel
+        ]);
+
+        var tooltipTrigger = tooltipModel.get('trigger');
+        if (tooltipTrigger != null && tooltipTrigger !== 'item') {
+            return;
+        }
+
+        var params = dataModel.getDataParams(dataIndex, dataType);
+        var defaultHtml = dataModel.formatTooltip(dataIndex, false, dataType);
+        var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;
+
+        this._showOrMove(tooltipModel, function () {
+            this._showTooltipContent(
+                tooltipModel, defaultHtml, params, asyncTicket,
+                e.offsetX, e.offsetY, e.position, e.target
+            );
+        });
+
+        // FIXME
+        // duplicated showtip if manuallyShowTip is called from dispatchAction.
+        dispatchAction({
+            type: 'showTip',
+            dataIndexInside: dataIndex,
+            dataIndex: data.getRawIndex(dataIndex),
+            seriesIndex: seriesIndex,
+            from: this.uid
+        });
+    },
+
+    _showComponentItemTooltip: function (e, el, dispatchAction) {
+        var tooltipOpt = el.tooltip;
+        if (typeof tooltipOpt === 'string') {
+            var content = tooltipOpt;
+            tooltipOpt = {
+                content: content,
+                // Fixed formatter
+                formatter: content
+            };
+        }
+        var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel);
+        var defaultHtml = subTooltipModel.get('content');
+        var asyncTicket = Math.random();
+
+        // Do not check whether `trigger` is 'none' here, because `trigger`
+        // only works on cooridinate system. In fact, we have not found case
+        // that requires setting `trigger` nothing on component yet.
+
+        this._showOrMove(subTooltipModel, function () {
+            this._showTooltipContent(
+                subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {},
+                asyncTicket, e.offsetX, e.offsetY, e.position, el
+            );
+        });
+
+        // If not dispatch showTip, tip may be hide triggered by axis.
+        dispatchAction({
+            type: 'showTip',
+            from: this.uid
+        });
+    },
+
+    _showTooltipContent: function (
+        tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el
+    ) {
+        // Reset ticket
+        this._ticket = '';
+
+        if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {
+            return;
+        }
+
+        var tooltipContent = this._tooltipContent;
+
+        var formatter = tooltipModel.get('formatter');
+        positionExpr = positionExpr || tooltipModel.get('position');
+        var html = defaultHtml;
+
+        if (formatter && typeof formatter === 'string') {
+            html = formatTpl(formatter, params, true);
+        }
+        else if (typeof formatter === 'function') {
+            var callback = bind$3(function (cbTicket, html) {
+                if (cbTicket === this._ticket) {
+                    tooltipContent.setContent(html);
+                    this._updatePosition(
+                        tooltipModel, positionExpr, x, y, tooltipContent, params, el
+                    );
+                }
+            }, this);
+            this._ticket = asyncTicket;
+            html = formatter(params, asyncTicket, callback);
+        }
+
+        tooltipContent.setContent(html);
+        tooltipContent.show(tooltipModel);
+
+        this._updatePosition(
+            tooltipModel, positionExpr, x, y, tooltipContent, params, el
+        );
+    },
+
+    /**
+     * @param  {string|Function|Array.<number>|Object} positionExpr
+     * @param  {number} x Mouse x
+     * @param  {number} y Mouse y
+     * @param  {boolean} confine Whether confine tooltip content in view rect.
+     * @param  {Object|<Array.<Object>} params
+     * @param  {module:zrender/Element} el target element
+     * @param  {module:echarts/ExtensionAPI} api
+     * @return {Array.<number>}
+     */
+    _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) {
+        var viewWidth = this._api.getWidth();
+        var viewHeight = this._api.getHeight();
+        positionExpr = positionExpr || tooltipModel.get('position');
+
+        var contentSize = content.getSize();
+        var align = tooltipModel.get('align');
+        var vAlign = tooltipModel.get('verticalAlign');
+        var rect = el && el.getBoundingRect().clone();
+        el && rect.applyTransform(el.transform);
+
+        if (typeof positionExpr === 'function') {
+            // Callback of position can be an array or a string specify the position
+            positionExpr = positionExpr([x, y], params, content.el, rect, {
+                viewSize: [viewWidth, viewHeight],
+                contentSize: contentSize.slice()
+            });
+        }
+
+        if (isArray(positionExpr)) {
+            x = parsePercent$2(positionExpr[0], viewWidth);
+            y = parsePercent$2(positionExpr[1], viewHeight);
+        }
+        else if (isObject$1(positionExpr)) {
+            positionExpr.width = contentSize[0];
+            positionExpr.height = contentSize[1];
+            var layoutRect = getLayoutRect(
+                positionExpr, {width: viewWidth, height: viewHeight}
+            );
+            x = layoutRect.x;
+            y = layoutRect.y;
+            align = null;
+            // When positionExpr is left/top/right/bottom,
+            // align and verticalAlign will not work.
+            vAlign = null;
+        }
+        // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element
+        else if (typeof positionExpr === 'string' && el) {
+            var pos = calcTooltipPosition(
+                positionExpr, rect, contentSize
+            );
+            x = pos[0];
+            y = pos[1];
+        }
+        else {
+            var pos = refixTooltipPosition(
+                x, y, content.el, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20
+            );
+            x = pos[0];
+            y = pos[1];
+        }
+
+        align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);
+        vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);
+
+        if (tooltipModel.get('confine')) {
+            var pos = confineTooltipPosition(
+                x, y, content.el, viewWidth, viewHeight
+            );
+            x = pos[0];
+            y = pos[1];
+        }
+
+        content.moveTo(x, y);
+    },
+
+    // FIXME
+    // Should we remove this but leave this to user?
+    _updateContentNotChangedOnAxis: function (dataByCoordSys) {
+        var lastCoordSys = this._lastDataByCoordSys;
+        var contentNotChanged = !!lastCoordSys
+            && lastCoordSys.length === dataByCoordSys.length;
+
+        contentNotChanged && each$17(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {
+            var lastDataByAxis = lastItemCoordSys.dataByAxis || {};
+            var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};
+            var thisDataByAxis = thisItemCoordSys.dataByAxis || [];
+            contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length;
+
+            contentNotChanged && each$17(lastDataByAxis, function (lastItem, indexAxis) {
+                var thisItem = thisDataByAxis[indexAxis] || {};
+                var lastIndices = lastItem.seriesDataIndices || [];
+                var newIndices = thisItem.seriesDataIndices || [];
+
+                contentNotChanged &=
+                    lastItem.value === thisItem.value
+                    && lastItem.axisType === thisItem.axisType
+                    && lastItem.axisId === thisItem.axisId
+                    && lastIndices.length === newIndices.length;
+
+                contentNotChanged && each$17(lastIndices, function (lastIdxItem, j) {
+                    var newIdxItem = newIndices[j];
+                    contentNotChanged &=
+                        lastIdxItem.seriesIndex === newIdxItem.seriesIndex
+                        && lastIdxItem.dataIndex === newIdxItem.dataIndex;
+                });
+            });
+        });
+
+        this._lastDataByCoordSys = dataByCoordSys;
+
+        return !!contentNotChanged;
+    },
+
+    _hide: function (dispatchAction) {
+        // Do not directly hideLater here, because this behavior may be prevented
+        // in dispatchAction when showTip is dispatched.
+
+        // FIXME
+        // duplicated hideTip if manuallyHideTip is called from dispatchAction.
+        this._lastDataByCoordSys = null;
+        dispatchAction({
+            type: 'hideTip',
+            from: this.uid
+        });
+    },
+
+    dispose: function (ecModel, api) {
+        if (env$1.node || env$1.wxa) {
+            return;
+        }
+        this._tooltipContent.hide();
+        unregister('itemTooltip', api);
+    }
+});
+
+
+/**
+ * @param {Array.<Object|module:echarts/model/Model>} modelCascade
+ * From top to bottom. (the last one should be globalTooltipModel);
+ */
+function buildTooltipModel(modelCascade) {
+    var resultModel = modelCascade.pop();
+    while (modelCascade.length) {
+        var tooltipOpt = modelCascade.pop();
+        if (tooltipOpt) {
+            if (Model.isInstance(tooltipOpt)) {
+                tooltipOpt = tooltipOpt.get('tooltip', true);
+            }
+            // In each data item tooltip can be simply write:
+            // {
+            //  value: 10,
+            //  tooltip: 'Something you need to know'
+            // }
+            if (typeof tooltipOpt === 'string') {
+                tooltipOpt = {formatter: tooltipOpt};
+            }
+            resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel);
+        }
+    }
+    return resultModel;
+}
+
+function makeDispatchAction$1(payload, api) {
+    return payload.dispatchAction || bind(api.dispatchAction, api);
+}
+
+function refixTooltipPosition(x, y, el, viewWidth, viewHeight, gapH, gapV) {
+    var size = getOuterSize(el);
+    var width = size.width;
+    var height = size.height;
+
+    if (gapH != null) {
+        if (x + width + gapH > viewWidth) {
+            x -= width + gapH;
+        }
+        else {
+            x += gapH;
+        }
+    }
+    if (gapV != null) {
+        if (y + height + gapV > viewHeight) {
+            y -= height + gapV;
+        }
+        else {
+            y += gapV;
+        }
+    }
+    return [x, y];
+}
+
+function confineTooltipPosition(x, y, el, viewWidth, viewHeight) {
+    var size = getOuterSize(el);
+    var width = size.width;
+    var height = size.height;
+
+    x = Math.min(x + width, viewWidth) - width;
+    y = Math.min(y + height, viewHeight) - height;
+    x = Math.max(x, 0);
+    y = Math.max(y, 0);
+
+    return [x, y];
+}
+
+function getOuterSize(el) {
+    var width = el.clientWidth;
+    var height = el.clientHeight;
+
+    // Consider browser compatibility.
+    // IE8 does not support getComputedStyle.
+    if (document.defaultView && document.defaultView.getComputedStyle) {
+        var stl = document.defaultView.getComputedStyle(el);
+        if (stl) {
+            width += parseInt(stl.paddingLeft, 10) + parseInt(stl.paddingRight, 10)
+                + parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10);
+            height += parseInt(stl.paddingTop, 10) + parseInt(stl.paddingBottom, 10)
+                + parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10);
+        }
+    }
+
+    return {width: width, height: height};
+}
+
+function calcTooltipPosition(position, rect, contentSize) {
+    var domWidth = contentSize[0];
+    var domHeight = contentSize[1];
+    var gap = 5;
+    var x = 0;
+    var y = 0;
+    var rectWidth = rect.width;
+    var rectHeight = rect.height;
+    switch (position) {
+        case 'inside':
+            x = rect.x + rectWidth / 2 - domWidth / 2;
+            y = rect.y + rectHeight / 2 - domHeight / 2;
+            break;
+        case 'top':
+            x = rect.x + rectWidth / 2 - domWidth / 2;
+            y = rect.y - domHeight - gap;
+            break;
+        case 'bottom':
+            x = rect.x + rectWidth / 2 - domWidth / 2;
+            y = rect.y + rectHeight + gap;
+            break;
+        case 'left':
+            x = rect.x - domWidth - gap;
+            y = rect.y + rectHeight / 2 - domHeight / 2;
+            break;
+        case 'right':
+            x = rect.x + rectWidth + gap;
+            y = rect.y + rectHeight / 2 - domHeight / 2;
+    }
+    return [x, y];
+}
+
+function isCenterAlign(align) {
+    return align === 'center' || align === 'middle';
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// FIXME Better way to pack data in graphic element
+
+/**
+ * @action
+ * @property {string} type
+ * @property {number} seriesIndex
+ * @property {number} dataIndex
+ * @property {number} [x]
+ * @property {number} [y]
+ */
+registerAction(
+    {
+        type: 'showTip',
+        event: 'showTip',
+        update: 'tooltip:manuallyShowTip'
+    },
+    // noop
+    function () {}
+);
+
+registerAction(
+    {
+        type: 'hideTip',
+        event: 'hideTip',
+        update: 'tooltip:manuallyHideTip'
+    },
+    // noop
+    function () {}
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function getSeriesStackId$1(seriesModel) {
+    return seriesModel.get('stack')
+        || '__ec_stack_' + seriesModel.seriesIndex;
+}
+
+function getAxisKey$1(axis) {
+    return axis.dim;
+}
+
+/**
+ * @param {string} seriesType
+ * @param {module:echarts/model/Global} ecModel
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function barLayoutPolar(seriesType, ecModel, api) {
+
+    var width = api.getWidth();
+    var height = api.getHeight();
+
+    var lastStackCoords = {};
+
+    var barWidthAndOffset = calRadialBar(
+        filter(
+            ecModel.getSeriesByType(seriesType),
+            function (seriesModel) {
+                return !ecModel.isSeriesFiltered(seriesModel)
+                    && seriesModel.coordinateSystem
+                    && seriesModel.coordinateSystem.type === 'polar';
+            }
+        )
+    );
+
+    ecModel.eachSeriesByType(seriesType, function (seriesModel) {
+        // Check series coordinate, do layout for polar only
+        if (seriesModel.coordinateSystem.type !== 'polar') {
+            return;
+        }
+
+        var data = seriesModel.getData();
+        var polar = seriesModel.coordinateSystem;
+        var baseAxis = polar.getBaseAxis();
+
+        var stackId = getSeriesStackId$1(seriesModel);
+        var columnLayoutInfo
+            = barWidthAndOffset[getAxisKey$1(baseAxis)][stackId];
+        var columnOffset = columnLayoutInfo.offset;
+        var columnWidth = columnLayoutInfo.width;
+        var valueAxis = polar.getOtherAxis(baseAxis);
+
+        var center = seriesModel.get('center') || ['50%', '50%'];
+        var cx = parsePercent$1(center[0], width);
+        var cy = parsePercent$1(center[1], height);
+
+        var barMinHeight = seriesModel.get('barMinHeight') || 0;
+        var barMinAngle = seriesModel.get('barMinAngle') || 0;
+
+        lastStackCoords[stackId] = lastStackCoords[stackId] || [];
+
+        var valueDim = data.mapDimension(valueAxis.dim);
+        var baseDim = data.mapDimension(baseAxis.dim);
+        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);
+
+        var valueAxisStart = valueAxis.getExtent()[0];
+
+        for (var idx = 0, len = data.count(); idx < len; idx++) {
+            var value = data.get(valueDim, idx);
+            var baseValue = data.get(baseDim, idx);
+
+            if (isNaN(value)) {
+                continue;
+            }
+
+            var sign = value >= 0 ? 'p' : 'n';
+            var baseCoord = valueAxisStart;
+
+            // Because of the barMinHeight, we can not use the value in
+            // stackResultDimension directly.
+            // Only ordinal axis can be stacked.
+            if (stacked) {
+                if (!lastStackCoords[stackId][baseValue]) {
+                    lastStackCoords[stackId][baseValue] = {
+                        p: valueAxisStart, // Positive stack
+                        n: valueAxisStart  // Negative stack
+                    };
+                }
+                // Should also consider #4243
+                baseCoord = lastStackCoords[stackId][baseValue][sign];
+            }
+
+            var r0;
+            var r;
+            var startAngle;
+            var endAngle;
+
+            // radial sector
+            if (valueAxis.dim === 'radius') {
+                var radiusSpan = valueAxis.dataToRadius(value) - valueAxisStart;
+                var angle = baseAxis.dataToAngle(baseValue);
+
+                if (Math.abs(radiusSpan) < barMinHeight) {
+                    radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight;
+                }
+
+                r0 = baseCoord;
+                r = baseCoord + radiusSpan;
+                startAngle = angle - columnOffset;
+                endAngle = startAngle - columnWidth;
+
+                stacked && (lastStackCoords[stackId][baseValue][sign] = r);
+            }
+            // tangential sector
+            else {
+                // angleAxis must be clamped.
+                var angleSpan = valueAxis.dataToAngle(value, true) - valueAxisStart;
+                var radius = baseAxis.dataToRadius(baseValue);
+
+                if (Math.abs(angleSpan) < barMinAngle) {
+                    angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;
+                }
+
+                r0 = radius + columnOffset;
+                r = r0 + columnWidth;
+                startAngle = baseCoord;
+                endAngle = baseCoord + angleSpan;
+
+                // if the previous stack is at the end of the ring,
+                // add a round to differentiate it from origin
+                // var extent = angleAxis.getExtent();
+                // var stackCoord = angle;
+                // if (stackCoord === extent[0] && value > 0) {
+                //     stackCoord = extent[1];
+                // }
+                // else if (stackCoord === extent[1] && value < 0) {
+                //     stackCoord = extent[0];
+                // }
+                stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle);
+            }
+
+            data.setItemLayout(idx, {
+                cx: cx,
+                cy: cy,
+                r0: r0,
+                r: r,
+                // Consider that positive angle is anti-clockwise,
+                // while positive radian of sector is clockwise
+                startAngle: -startAngle * Math.PI / 180,
+                endAngle: -endAngle * Math.PI / 180
+            });
+
+        }
+
+    }, this);
+
+}
+
+/**
+ * Calculate bar width and offset for radial bar charts
+ */
+function calRadialBar(barSeries, api) {
+    // Columns info on each category axis. Key is polar name
+    var columnsMap = {};
+
+    each$1(barSeries, function (seriesModel, idx) {
+        var data = seriesModel.getData();
+        var polar = seriesModel.coordinateSystem;
+
+        var baseAxis = polar.getBaseAxis();
+
+        var axisExtent = baseAxis.getExtent();
+        var bandWidth = baseAxis.type === 'category'
+            ? baseAxis.getBandWidth()
+            : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());
+
+        var columnsOnAxis = columnsMap[getAxisKey$1(baseAxis)] || {
+            bandWidth: bandWidth,
+            remainedWidth: bandWidth,
+            autoWidthCount: 0,
+            categoryGap: '20%',
+            gap: '30%',
+            stacks: {}
+        };
+        var stacks = columnsOnAxis.stacks;
+        columnsMap[getAxisKey$1(baseAxis)] = columnsOnAxis;
+
+        var stackId = getSeriesStackId$1(seriesModel);
+
+        if (!stacks[stackId]) {
+            columnsOnAxis.autoWidthCount++;
+        }
+        stacks[stackId] = stacks[stackId] || {
+            width: 0,
+            maxWidth: 0
+        };
+
+        var barWidth = parsePercent$1(
+            seriesModel.get('barWidth'),
+            bandWidth
+        );
+        var barMaxWidth = parsePercent$1(
+            seriesModel.get('barMaxWidth'),
+            bandWidth
+        );
+        var barGap = seriesModel.get('barGap');
+        var barCategoryGap = seriesModel.get('barCategoryGap');
+
+        if (barWidth && !stacks[stackId].width) {
+            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);
+            stacks[stackId].width = barWidth;
+            columnsOnAxis.remainedWidth -= barWidth;
+        }
+
+        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);
+        (barGap != null) && (columnsOnAxis.gap = barGap);
+        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);
+    });
+
+
+    var result = {};
+
+    each$1(columnsMap, function (columnsOnAxis, coordSysName) {
+
+        result[coordSysName] = {};
+
+        var stacks = columnsOnAxis.stacks;
+        var bandWidth = columnsOnAxis.bandWidth;
+        var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth);
+        var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1);
+
+        var remainedWidth = columnsOnAxis.remainedWidth;
+        var autoWidthCount = columnsOnAxis.autoWidthCount;
+        var autoWidth = (remainedWidth - categoryGap)
+            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
+        autoWidth = Math.max(autoWidth, 0);
+
+        // Find if any auto calculated bar exceeded maxBarWidth
+        each$1(stacks, function (column, stack) {
+            var maxWidth = column.maxWidth;
+            if (maxWidth && maxWidth < autoWidth) {
+                maxWidth = Math.min(maxWidth, remainedWidth);
+                if (column.width) {
+                    maxWidth = Math.min(maxWidth, column.width);
+                }
+                remainedWidth -= maxWidth;
+                column.width = maxWidth;
+                autoWidthCount--;
+            }
+        });
+
+        // Recalculate width again
+        autoWidth = (remainedWidth - categoryGap)
+            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);
+        autoWidth = Math.max(autoWidth, 0);
+
+        var widthSum = 0;
+        var lastColumn;
+        each$1(stacks, function (column, idx) {
+            if (!column.width) {
+                column.width = autoWidth;
+            }
+            lastColumn = column;
+            widthSum += column.width * (1 + barGapPercent);
+        });
+        if (lastColumn) {
+            widthSum -= lastColumn.width * barGapPercent;
+        }
+
+        var offset = -widthSum / 2;
+        each$1(stacks, function (column, stackId) {
+            result[coordSysName][stackId] = result[coordSysName][stackId] || {
+                offset: offset,
+                width: column.width
+            };
+
+            offset += column.width * (1 + barGapPercent);
+        });
+    });
+
+    return result;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function RadiusAxis(scale, radiusExtent) {
+
+    Axis.call(this, 'radius', scale, radiusExtent);
+
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = 'category';
+}
+
+RadiusAxis.prototype = {
+
+    constructor: RadiusAxis,
+
+    /**
+     * @override
+     */
+    pointToData: function (point, clamp) {
+        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];
+    },
+
+    dataToRadius: Axis.prototype.dataToCoord,
+
+    radiusToData: Axis.prototype.coordToData
+};
+
+inherits(RadiusAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function AngleAxis(scale, angleExtent) {
+
+    angleExtent = angleExtent || [0, 360];
+
+    Axis.call(this, 'angle', scale, angleExtent);
+
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = 'category';
+}
+
+AngleAxis.prototype = {
+
+    constructor: AngleAxis,
+
+    /**
+     * @override
+     */
+    pointToData: function (point, clamp) {
+        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];
+    },
+
+    dataToAngle: Axis.prototype.dataToCoord,
+
+    angleToData: Axis.prototype.coordToData
+};
+
+inherits(AngleAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @module echarts/coord/polar/Polar
+ */
+
+/**
+ * @alias {module:echarts/coord/polar/Polar}
+ * @constructor
+ * @param {string} name
+ */
+var Polar = function (name) {
+
+    /**
+     * @type {string}
+     */
+    this.name = name || '';
+
+    /**
+     * x of polar center
+     * @type {number}
+     */
+    this.cx = 0;
+
+    /**
+     * y of polar center
+     * @type {number}
+     */
+    this.cy = 0;
+
+    /**
+     * @type {module:echarts/coord/polar/RadiusAxis}
+     * @private
+     */
+    this._radiusAxis = new RadiusAxis();
+
+    /**
+     * @type {module:echarts/coord/polar/AngleAxis}
+     * @private
+     */
+    this._angleAxis = new AngleAxis();
+
+    this._radiusAxis.polar = this._angleAxis.polar = this;
+};
+
+Polar.prototype = {
+
+    type: 'polar',
+
+    axisPointerEnabled: true,
+
+    constructor: Polar,
+
+    /**
+     * @param {Array.<string>}
+     * @readOnly
+     */
+    dimensions: ['radius', 'angle'],
+
+    /**
+     * @type {module:echarts/coord/PolarModel}
+     */
+    model: null,
+
+    /**
+     * If contain coord
+     * @param {Array.<number>} point
+     * @return {boolean}
+     */
+    containPoint: function (point) {
+        var coord = this.pointToCoord(point);
+        return this._radiusAxis.contain(coord[0])
+            && this._angleAxis.contain(coord[1]);
+    },
+
+    /**
+     * If contain data
+     * @param {Array.<number>} data
+     * @return {boolean}
+     */
+    containData: function (data) {
+        return this._radiusAxis.containData(data[0])
+            && this._angleAxis.containData(data[1]);
+    },
+
+    /**
+     * @param {string} dim
+     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
+     */
+    getAxis: function (dim) {
+        return this['_' + dim + 'Axis'];
+    },
+
+    /**
+     * @return {Array.<module:echarts/coord/Axis>}
+     */
+    getAxes: function () {
+        return [this._radiusAxis, this._angleAxis];
+    },
+
+    /**
+     * Get axes by type of scale
+     * @param {string} scaleType
+     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
+     */
+    getAxesByScale: function (scaleType) {
+        var axes = [];
+        var angleAxis = this._angleAxis;
+        var radiusAxis = this._radiusAxis;
+        angleAxis.scale.type === scaleType && axes.push(angleAxis);
+        radiusAxis.scale.type === scaleType && axes.push(radiusAxis);
+
+        return axes;
+    },
+
+    /**
+     * @return {module:echarts/coord/polar/AngleAxis}
+     */
+    getAngleAxis: function () {
+        return this._angleAxis;
+    },
+
+    /**
+     * @return {module:echarts/coord/polar/RadiusAxis}
+     */
+    getRadiusAxis: function () {
+        return this._radiusAxis;
+    },
+
+    /**
+     * @param {module:echarts/coord/polar/Axis}
+     * @return {module:echarts/coord/polar/Axis}
+     */
+    getOtherAxis: function (axis) {
+        var angleAxis = this._angleAxis;
+        return axis === angleAxis ? this._radiusAxis : angleAxis;
+    },
+
+    /**
+     * Base axis will be used on stacking.
+     *
+     * @return {module:echarts/coord/polar/Axis}
+     */
+    getBaseAxis: function () {
+        return this.getAxesByScale('ordinal')[0]
+            || this.getAxesByScale('time')[0]
+            || this.getAngleAxis();
+    },
+
+    /**
+     * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined
+     * @return {Object} {baseAxes: [], otherAxes: []}
+     */
+    getTooltipAxes: function (dim) {
+        var baseAxis = (dim != null && dim !== 'auto')
+            ? this.getAxis(dim) : this.getBaseAxis();
+        return {
+            baseAxes: [baseAxis],
+            otherAxes: [this.getOtherAxis(baseAxis)]
+        };
+    },
+
+    /**
+     * Convert a single data item to (x, y) point.
+     * Parameter data is an array which the first element is radius and the second is angle
+     * @param {Array.<number>} data
+     * @param {boolean} [clamp=false]
+     * @return {Array.<number>}
+     */
+    dataToPoint: function (data, clamp) {
+        return this.coordToPoint([
+            this._radiusAxis.dataToRadius(data[0], clamp),
+            this._angleAxis.dataToAngle(data[1], clamp)
+        ]);
+    },
+
+    /**
+     * Convert a (x, y) point to data
+     * @param {Array.<number>} point
+     * @param {boolean} [clamp=false]
+     * @return {Array.<number>}
+     */
+    pointToData: function (point, clamp) {
+        var coord = this.pointToCoord(point);
+        return [
+            this._radiusAxis.radiusToData(coord[0], clamp),
+            this._angleAxis.angleToData(coord[1], clamp)
+        ];
+    },
+
+    /**
+     * Convert a (x, y) point to (radius, angle) coord
+     * @param {Array.<number>} point
+     * @return {Array.<number>}
+     */
+    pointToCoord: function (point) {
+        var dx = point[0] - this.cx;
+        var dy = point[1] - this.cy;
+        var angleAxis = this.getAngleAxis();
+        var extent = angleAxis.getExtent();
+        var minAngle = Math.min(extent[0], extent[1]);
+        var maxAngle = Math.max(extent[0], extent[1]);
+        // Fix fixed extent in polarCreator
+        // FIXME
+        angleAxis.inverse
+            ? (minAngle = maxAngle - 360)
+            : (maxAngle = minAngle + 360);
+
+        var radius = Math.sqrt(dx * dx + dy * dy);
+        dx /= radius;
+        dy /= radius;
+
+        var radian = Math.atan2(-dy, dx) / Math.PI * 180;
+
+        // move to angleExtent
+        var dir = radian < minAngle ? 1 : -1;
+        while (radian < minAngle || radian > maxAngle) {
+            radian += dir * 360;
+        }
+
+        return [radius, radian];
+    },
+
+    /**
+     * Convert a (radius, angle) coord to (x, y) point
+     * @param {Array.<number>} coord
+     * @return {Array.<number>}
+     */
+    coordToPoint: function (coord) {
+        var radius = coord[0];
+        var radian = coord[1] / 180 * Math.PI;
+        var x = Math.cos(radian) * radius + this.cx;
+        // Inverse the y
+        var y = -Math.sin(radian) * radius + this.cy;
+
+        return [x, y];
+    }
+
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PolarAxisModel = ComponentModel.extend({
+
+    type: 'polarAxis',
+
+    /**
+     * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
+     */
+    axis: null,
+
+    /**
+     * @override
+     */
+    getCoordSysModel: function () {
+        return this.ecModel.queryComponents({
+            mainType: 'polar',
+            index: this.option.polarIndex,
+            id: this.option.polarId
+        })[0];
+    }
+
+});
+
+merge(PolarAxisModel.prototype, axisModelCommonMixin);
+
+var polarAxisDefaultExtendedOption = {
+    angle: {
+        // polarIndex: 0,
+        // polarId: '',
+
+        startAngle: 90,
+
+        clockwise: true,
+
+        splitNumber: 12,
+
+        axisLabel: {
+            rotate: false
+        }
+    },
+    radius: {
+        // polarIndex: 0,
+        // polarId: '',
+
+        splitNumber: 5
+    }
+};
+
+function getAxisType$3(axisDim, option) {
+    // Default axis with data is category axis
+    return option.type || (option.data ? 'category' : 'value');
+}
+
+axisModelCreator('angle', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.angle);
+axisModelCreator('radius', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.radius);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentModel({
+
+    type: 'polar',
+
+    dependencies: ['polarAxis', 'angleAxis'],
+
+    /**
+     * @type {module:echarts/coord/polar/Polar}
+     */
+    coordinateSystem: null,
+
+    /**
+     * @param {string} axisType
+     * @return {module:echarts/coord/polar/AxisModel}
+     */
+    findAxisModel: function (axisType) {
+        var foundAxisModel;
+        var ecModel = this.ecModel;
+
+        ecModel.eachComponent(axisType, function (axisModel) {
+            if (axisModel.getCoordSysModel() === this) {
+                foundAxisModel = axisModel;
+            }
+        }, this);
+        return foundAxisModel;
+    },
+
+    defaultOption: {
+
+        zlevel: 0,
+
+        z: 0,
+
+        center: ['50%', '50%'],
+
+        radius: '80%'
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO Axis scale
+
+/**
+ * Resize method bound to the polar
+ * @param {module:echarts/coord/polar/PolarModel} polarModel
+ * @param {module:echarts/ExtensionAPI} api
+ */
+function resizePolar(polar, polarModel, api) {
+    var center = polarModel.get('center');
+    var width = api.getWidth();
+    var height = api.getHeight();
+
+    polar.cx = parsePercent$1(center[0], width);
+    polar.cy = parsePercent$1(center[1], height);
+
+    var radiusAxis = polar.getRadiusAxis();
+    var size = Math.min(width, height) / 2;
+    var radius = parsePercent$1(polarModel.get('radius'), size);
+    radiusAxis.inverse
+        ? radiusAxis.setExtent(radius, 0)
+        : radiusAxis.setExtent(0, radius);
+}
+
+/**
+ * Update polar
+ */
+function updatePolarScale(ecModel, api) {
+    var polar = this;
+    var angleAxis = polar.getAngleAxis();
+    var radiusAxis = polar.getRadiusAxis();
+    // Reset scale
+    angleAxis.scale.setExtent(Infinity, -Infinity);
+    radiusAxis.scale.setExtent(Infinity, -Infinity);
+
+    ecModel.eachSeries(function (seriesModel) {
+        if (seriesModel.coordinateSystem === polar) {
+            var data = seriesModel.getData();
+            each$1(data.mapDimension('radius', true), function (dim) {
+                radiusAxis.scale.unionExtentFromData(
+                    data, getStackedDimension(data, dim)
+                );
+            });
+            each$1(data.mapDimension('angle', true), function (dim) {
+                angleAxis.scale.unionExtentFromData(
+                    data, getStackedDimension(data, dim)
+                );
+            });
+        }
+    });
+
+    niceScaleExtent(angleAxis.scale, angleAxis.model);
+    niceScaleExtent(radiusAxis.scale, radiusAxis.model);
+
+    // Fix extent of category angle axis
+    if (angleAxis.type === 'category' && !angleAxis.onBand) {
+        var extent = angleAxis.getExtent();
+        var diff = 360 / angleAxis.scale.count();
+        angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff);
+        angleAxis.setExtent(extent[0], extent[1]);
+    }
+}
+
+/**
+ * Set common axis properties
+ * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}
+ * @param {module:echarts/coord/polar/AxisModel}
+ * @inner
+ */
+function setAxis(axis, axisModel) {
+    axis.type = axisModel.get('type');
+    axis.scale = createScaleByModel(axisModel);
+    axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category';
+    axis.inverse = axisModel.get('inverse');
+
+    if (axisModel.mainType === 'angleAxis') {
+        axis.inverse ^= axisModel.get('clockwise');
+        var startAngle = axisModel.get('startAngle');
+        axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360));
+    }
+
+    // Inject axis instance
+    axisModel.axis = axis;
+    axis.model = axisModel;
+}
+
+
+var polarCreator = {
+
+    dimensions: Polar.prototype.dimensions,
+
+    create: function (ecModel, api) {
+        var polarList = [];
+        ecModel.eachComponent('polar', function (polarModel, idx) {
+            var polar = new Polar(idx);
+            // Inject resize and update method
+            polar.update = updatePolarScale;
+
+            var radiusAxis = polar.getRadiusAxis();
+            var angleAxis = polar.getAngleAxis();
+
+            var radiusAxisModel = polarModel.findAxisModel('radiusAxis');
+            var angleAxisModel = polarModel.findAxisModel('angleAxis');
+
+            setAxis(radiusAxis, radiusAxisModel);
+            setAxis(angleAxis, angleAxisModel);
+
+            resizePolar(polar, polarModel, api);
+
+            polarList.push(polar);
+
+            polarModel.coordinateSystem = polar;
+            polar.model = polarModel;
+        });
+        // Inject coordinateSystem to series
+        ecModel.eachSeries(function (seriesModel) {
+            if (seriesModel.get('coordinateSystem') === 'polar') {
+                var polarModel = ecModel.queryComponents({
+                    mainType: 'polar',
+                    index: seriesModel.get('polarIndex'),
+                    id: seriesModel.get('polarId')
+                })[0];
+
+                if (__DEV__) {
+                    if (!polarModel) {
+                        throw new Error(
+                            'Polar "' + retrieve(
+                                seriesModel.get('polarIndex'),
+                                seriesModel.get('polarId'),
+                                0
+                            ) + '" not found'
+                        );
+                    }
+                }
+                seriesModel.coordinateSystem = polarModel.coordinateSystem;
+            }
+        });
+
+        return polarList;
+    }
+};
+
+CoordinateSystemManager.register('polar', polarCreator);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var elementList$1 = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea'];
+
+function getAxisLineShape(polar, rExtent, angle) {
+    rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());
+    var start = polar.coordToPoint([rExtent[0], angle]);
+    var end = polar.coordToPoint([rExtent[1], angle]);
+
+    return {
+        x1: start[0],
+        y1: start[1],
+        x2: end[0],
+        y2: end[1]
+    };
+}
+
+function getRadiusIdx(polar) {
+    var radiusAxis = polar.getRadiusAxis();
+    return radiusAxis.inverse ? 0 : 1;
+}
+
+// Remove the last tick which will overlap the first tick
+function fixAngleOverlap(list) {
+    var firstItem = list[0];
+    var lastItem = list[list.length - 1];
+    if (firstItem
+        && lastItem
+        && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4
+    ) {
+        list.pop();
+    }
+}
+
+AxisView.extend({
+
+    type: 'angleAxis',
+
+    axisPointerClass: 'PolarAxisPointer',
+
+    render: function (angleAxisModel, ecModel) {
+        this.group.removeAll();
+        if (!angleAxisModel.get('show')) {
+            return;
+        }
+
+        var angleAxis = angleAxisModel.axis;
+        var polar = angleAxis.polar;
+        var radiusExtent = polar.getRadiusAxis().getExtent();
+
+        var ticksAngles = angleAxis.getTicksCoords();
+        var labels = map(angleAxis.getViewLabels(), function (labelItem) {
+            var labelItem = clone(labelItem);
+            labelItem.coord = angleAxis.dataToCoord(labelItem.tickValue);
+            return labelItem;
+        });
+
+        fixAngleOverlap(labels);
+        fixAngleOverlap(ticksAngles);
+
+        each$1(elementList$1, function (name) {
+            if (angleAxisModel.get(name +'.show')
+                && (!angleAxis.scale.isBlank() || name === 'axisLine')
+            ) {
+                this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent, labels);
+            }
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
+        var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle');
+
+        var circle = new Circle({
+            shape: {
+                cx: polar.cx,
+                cy: polar.cy,
+                r: radiusExtent[getRadiusIdx(polar)]
+            },
+            style: lineStyleModel.getLineStyle(),
+            z2: 1,
+            silent: true
+        });
+        circle.style.fill = null;
+
+        this.group.add(circle);
+    },
+
+    /**
+     * @private
+     */
+    _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
+        var tickModel = angleAxisModel.getModel('axisTick');
+
+        var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');
+        var radius = radiusExtent[getRadiusIdx(polar)];
+
+        var lines = map(ticksAngles, function (tickAngleItem) {
+            return new Line({
+                shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord)
+            });
+        });
+        this.group.add(mergePath(
+            lines, {
+                style: defaults(
+                    tickModel.getModel('lineStyle').getLineStyle(),
+                    {
+                        stroke: angleAxisModel.get('axisLine.lineStyle.color')
+                    }
+                )
+            }
+        ));
+    },
+
+    /**
+     * @private
+     */
+    _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent, labels) {
+        var rawCategoryData = angleAxisModel.getCategories(true);
+
+        var commonLabelModel = angleAxisModel.getModel('axisLabel');
+
+        var labelMargin = commonLabelModel.get('margin');
+
+        // Use length of ticksAngles because it may remove the last tick to avoid overlapping
+        each$1(labels, function (labelItem, idx) {
+            var labelModel = commonLabelModel;
+            var tickValue = labelItem.tickValue;
+
+            var r = radiusExtent[getRadiusIdx(polar)];
+            var p = polar.coordToPoint([r + labelMargin, labelItem.coord]);
+            var cx = polar.cx;
+            var cy = polar.cy;
+
+            var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3
+                ? 'center' : (p[0] > cx ? 'left' : 'right');
+            var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3
+                ? 'middle' : (p[1] > cy ? 'top' : 'bottom');
+
+            if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {
+                labelModel = new Model(rawCategoryData[tickValue].textStyle, commonLabelModel, commonLabelModel.ecModel);
+            }
+
+            var textEl = new Text({silent: true});
+            this.group.add(textEl);
+            setTextStyle(textEl.style, labelModel, {
+                x: p[0],
+                y: p[1],
+                textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'),
+                text: labelItem.formattedLabel,
+                textAlign: labelTextAlign,
+                textVerticalAlign: labelTextVerticalAlign
+            });
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
+        var splitLineModel = angleAxisModel.getModel('splitLine');
+        var lineStyleModel = splitLineModel.getModel('lineStyle');
+        var lineColors = lineStyleModel.get('color');
+        var lineCount = 0;
+
+        lineColors = lineColors instanceof Array ? lineColors : [lineColors];
+
+        var splitLines = [];
+
+        for (var i = 0; i < ticksAngles.length; i++) {
+            var colorIndex = (lineCount++) % lineColors.length;
+            splitLines[colorIndex] = splitLines[colorIndex] || [];
+            splitLines[colorIndex].push(new Line({
+                shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord)
+            }));
+        }
+
+        // Simple optimization
+        // Batching the lines if color are the same
+        for (var i = 0; i < splitLines.length; i++) {
+            this.group.add(mergePath(splitLines[i], {
+                style: defaults({
+                    stroke: lineColors[i % lineColors.length]
+                }, lineStyleModel.getLineStyle()),
+                silent: true,
+                z: angleAxisModel.get('z')
+            }));
+        }
+    },
+
+    /**
+     * @private
+     */
+    _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) {
+        if (!ticksAngles.length) {
+            return;
+        }
+
+        var splitAreaModel = angleAxisModel.getModel('splitArea');
+        var areaStyleModel = splitAreaModel.getModel('areaStyle');
+        var areaColors = areaStyleModel.get('color');
+        var lineCount = 0;
+
+        areaColors = areaColors instanceof Array ? areaColors : [areaColors];
+
+        var splitAreas = [];
+
+        var RADIAN = Math.PI / 180;
+        var prevAngle = -ticksAngles[0].coord * RADIAN;
+        var r0 = Math.min(radiusExtent[0], radiusExtent[1]);
+        var r1 = Math.max(radiusExtent[0], radiusExtent[1]);
+
+        var clockwise = angleAxisModel.get('clockwise');
+
+        for (var i = 1; i < ticksAngles.length; i++) {
+            var colorIndex = (lineCount++) % areaColors.length;
+            splitAreas[colorIndex] = splitAreas[colorIndex] || [];
+            splitAreas[colorIndex].push(new Sector({
+                shape: {
+                    cx: polar.cx,
+                    cy: polar.cy,
+                    r0: r0,
+                    r: r1,
+                    startAngle: prevAngle,
+                    endAngle: -ticksAngles[i].coord * RADIAN,
+                    clockwise: clockwise
+                },
+                silent: true
+            }));
+            prevAngle = -ticksAngles[i].coord * RADIAN;
+        }
+
+        // Simple optimization
+        // Batching the lines if color are the same
+        for (var i = 0; i < splitAreas.length; i++) {
+            this.group.add(mergePath(splitAreas[i], {
+                style: defaults({
+                    fill: areaColors[i % areaColors.length]
+                }, areaStyleModel.getAreaStyle()),
+                silent: true
+            }));
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var axisBuilderAttrs$3 = [
+    'axisLine', 'axisTickLabel', 'axisName'
+];
+var selfBuilderAttrs$1 = [
+    'splitLine', 'splitArea'
+];
+
+AxisView.extend({
+
+    type: 'radiusAxis',
+
+    axisPointerClass: 'PolarAxisPointer',
+
+    render: function (radiusAxisModel, ecModel) {
+        this.group.removeAll();
+        if (!radiusAxisModel.get('show')) {
+            return;
+        }
+        var radiusAxis = radiusAxisModel.axis;
+        var polar = radiusAxis.polar;
+        var angleAxis = polar.getAngleAxis();
+        var ticksCoords = radiusAxis.getTicksCoords();
+        var axisAngle = angleAxis.getExtent()[0];
+        var radiusExtent = radiusAxis.getExtent();
+
+        var layout = layoutAxis(polar, radiusAxisModel, axisAngle);
+        var axisBuilder = new AxisBuilder(radiusAxisModel, layout);
+        each$1(axisBuilderAttrs$3, axisBuilder.add, axisBuilder);
+        this.group.add(axisBuilder.getGroup());
+
+        each$1(selfBuilderAttrs$1, function (name) {
+            if (radiusAxisModel.get(name +'.show') && !radiusAxis.scale.isBlank()) {
+                this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords);
+            }
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {
+        var splitLineModel = radiusAxisModel.getModel('splitLine');
+        var lineStyleModel = splitLineModel.getModel('lineStyle');
+        var lineColors = lineStyleModel.get('color');
+        var lineCount = 0;
+
+        lineColors = lineColors instanceof Array ? lineColors : [lineColors];
+
+        var splitLines = [];
+
+        for (var i = 0; i < ticksCoords.length; i++) {
+            var colorIndex = (lineCount++) % lineColors.length;
+            splitLines[colorIndex] = splitLines[colorIndex] || [];
+            splitLines[colorIndex].push(new Circle({
+                shape: {
+                    cx: polar.cx,
+                    cy: polar.cy,
+                    r: ticksCoords[i].coord
+                },
+                silent: true
+            }));
+        }
+
+        // Simple optimization
+        // Batching the lines if color are the same
+        for (var i = 0; i < splitLines.length; i++) {
+            this.group.add(mergePath(splitLines[i], {
+                style: defaults({
+                    stroke: lineColors[i % lineColors.length],
+                    fill: null
+                }, lineStyleModel.getLineStyle()),
+                silent: true
+            }));
+        }
+    },
+
+    /**
+     * @private
+     */
+    _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {
+        if (!ticksCoords.length) {
+            return;
+        }
+
+        var splitAreaModel = radiusAxisModel.getModel('splitArea');
+        var areaStyleModel = splitAreaModel.getModel('areaStyle');
+        var areaColors = areaStyleModel.get('color');
+        var lineCount = 0;
+
+        areaColors = areaColors instanceof Array ? areaColors : [areaColors];
+
+        var splitAreas = [];
+
+        var prevRadius = ticksCoords[0].coord;
+        for (var i = 1; i < ticksCoords.length; i++) {
+            var colorIndex = (lineCount++) % areaColors.length;
+            splitAreas[colorIndex] = splitAreas[colorIndex] || [];
+            splitAreas[colorIndex].push(new Sector({
+                shape: {
+                    cx: polar.cx,
+                    cy: polar.cy,
+                    r0: prevRadius,
+                    r: ticksCoords[i].coord,
+                    startAngle: 0,
+                    endAngle: Math.PI * 2
+                },
+                silent: true
+            }));
+            prevRadius = ticksCoords[i].coord;
+        }
+
+        // Simple optimization
+        // Batching the lines if color are the same
+        for (var i = 0; i < splitAreas.length; i++) {
+            this.group.add(mergePath(splitAreas[i], {
+                style: defaults({
+                    fill: areaColors[i % areaColors.length]
+                }, areaStyleModel.getAreaStyle()),
+                silent: true
+            }));
+        }
+    }
+});
+
+/**
+ * @inner
+ */
+function layoutAxis(polar, radiusAxisModel, axisAngle) {
+    return {
+        position: [polar.cx, polar.cy],
+        rotation: axisAngle / 180 * Math.PI,
+        labelDirection: -1,
+        tickDirection: -1,
+        nameDirection: 1,
+        labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'),
+        // Over splitLine and splitArea
+        z2: 1
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PolarAxisPointer = BaseAxisPointer.extend({
+
+    /**
+     * @override
+     */
+    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {
+        var axis = axisModel.axis;
+
+        if (axis.dim === 'angle') {
+            this.animationThreshold = Math.PI / 18;
+        }
+
+        var polar = axis.polar;
+        var otherAxis = polar.getOtherAxis(axis);
+        var otherExtent = otherAxis.getExtent();
+
+        var coordValue;
+        coordValue = axis['dataTo' + capitalFirst(axis.dim)](value);
+
+        var axisPointerType = axisPointerModel.get('type');
+        if (axisPointerType && axisPointerType !== 'none') {
+            var elStyle = buildElStyle(axisPointerModel);
+            var pointerOption = pointerShapeBuilder$2[axisPointerType](
+                axis, polar, coordValue, otherExtent, elStyle
+            );
+            pointerOption.style = elStyle;
+            elOption.graphicKey = pointerOption.type;
+            elOption.pointer = pointerOption;
+        }
+
+        var labelMargin = axisPointerModel.get('label.margin');
+        var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);
+        buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);
+    }
+
+    // Do not support handle, utill any user requires it.
+
+});
+
+function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {
+    var axis = axisModel.axis;
+    var coord = axis.dataToCoord(value);
+    var axisAngle = polar.getAngleAxis().getExtent()[0];
+    axisAngle = axisAngle / 180 * Math.PI;
+    var radiusExtent = polar.getRadiusAxis().getExtent();
+    var position;
+    var align;
+    var verticalAlign;
+
+    if (axis.dim === 'radius') {
+        var transform = create$1();
+        rotate(transform, transform, axisAngle);
+        translate(transform, transform, [polar.cx, polar.cy]);
+        position = applyTransform$1([coord, -labelMargin], transform);
+
+        var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0;
+        var labelLayout = AxisBuilder.innerTextLayout(
+            axisAngle, labelRotation * Math.PI / 180, -1
+        );
+        align = labelLayout.textAlign;
+        verticalAlign = labelLayout.textVerticalAlign;
+    }
+    else { // angle axis
+        var r = radiusExtent[1];
+        position = polar.coordToPoint([r + labelMargin, coord]);
+        var cx = polar.cx;
+        var cy = polar.cy;
+        align = Math.abs(position[0] - cx) / r < 0.3
+            ? 'center' : (position[0] > cx ? 'left' : 'right');
+        verticalAlign = Math.abs(position[1] - cy) / r < 0.3
+            ? 'middle' : (position[1] > cy ? 'top' : 'bottom');
+    }
+
+    return {
+        position: position,
+        align: align,
+        verticalAlign: verticalAlign
+    };
+}
+
+
+var pointerShapeBuilder$2 = {
+
+    line: function (axis, polar, coordValue, otherExtent, elStyle) {
+        return axis.dim === 'angle'
+            ? {
+                type: 'Line',
+                shape: makeLineShape(
+                    polar.coordToPoint([otherExtent[0], coordValue]),
+                    polar.coordToPoint([otherExtent[1], coordValue])
+                )
+            }
+            : {
+                type: 'Circle',
+                shape: {
+                    cx: polar.cx,
+                    cy: polar.cy,
+                    r: coordValue
+                }
+            };
+    },
+
+    shadow: function (axis, polar, coordValue, otherExtent, elStyle) {
+        var bandWidth = Math.max(1, axis.getBandWidth());
+        var radian = Math.PI / 180;
+
+        return axis.dim === 'angle'
+            ? {
+                type: 'Sector',
+                shape: makeSectorShape(
+                    polar.cx, polar.cy,
+                    otherExtent[0], otherExtent[1],
+                    // In ECharts y is negative if angle is positive
+                    (-coordValue - bandWidth / 2) * radian,
+                    (-coordValue + bandWidth / 2) * radian
+                )
+            }
+            : {
+                type: 'Sector',
+                shape: makeSectorShape(
+                    polar.cx, polar.cy,
+                    coordValue - bandWidth / 2,
+                    coordValue + bandWidth / 2,
+                    0, Math.PI * 2
+                )
+            };
+    }
+};
+
+AxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// For reducing size of echarts.min, barLayoutPolar is required by polar.
+registerLayout(curry(barLayoutPolar, 'bar'));
+
+// Polar view
+extendComponentView({
+    type: 'polar'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var GeoModel = ComponentModel.extend({
+
+    type: 'geo',
+
+    /**
+     * @type {module:echarts/coord/geo/Geo}
+     */
+    coordinateSystem: null,
+
+    layoutMode: 'box',
+
+    init: function (option) {
+        ComponentModel.prototype.init.apply(this, arguments);
+
+        // Default label emphasis `show`
+        defaultEmphasis(option, 'label', ['show']);
+    },
+
+    optionUpdated: function () {
+        var option = this.option;
+        var self = this;
+
+        option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);
+
+        this._optionModelMap = reduce(option.regions || [], function (optionModelMap, regionOpt) {
+            if (regionOpt.name) {
+                optionModelMap.set(regionOpt.name, new Model(regionOpt, self));
+            }
+            return optionModelMap;
+        }, createHashMap());
+
+        this.updateSelectedMap(option.regions);
+    },
+
+    defaultOption: {
+
+        zlevel: 0,
+
+        z: 0,
+
+        show: true,
+
+        left: 'center',
+
+        top: 'center',
+
+
+        // width:,
+        // height:,
+        // right
+        // bottom
+
+        // Aspect is width / height. Inited to be geoJson bbox aspect
+        // This parameter is used for scale this aspect
+        aspectScale: 0.75,
+
+        ///// Layout with center and size
+        // If you wan't to put map in a fixed size box with right aspect ratio
+        // This two properties may more conveninet
+        // layoutCenter: [50%, 50%]
+        // layoutSize: 100
+
+
+        silent: false,
+
+        // Map type
+        map: '',
+
+        // Define left-top, right-bottom coords to control view
+        // For example, [ [180, 90], [-180, -90] ]
+        boundingCoords: null,
+
+        // Default on center of map
+        center: null,
+
+        zoom: 1,
+
+        scaleLimit: null,
+
+        // selectedMode: false
+
+        label: {
+            show: false,
+            color: '#000'
+        },
+
+        itemStyle: {
+            // color: 各异,
+            borderWidth: 0.5,
+            borderColor: '#444',
+            color: '#eee'
+        },
+
+        emphasis: {
+            label: {
+                show: true,
+                color: 'rgb(100,0,0)'
+            },
+            itemStyle: {
+                color: 'rgba(255,215,0,0.8)'
+            }
+        },
+
+        regions: []
+    },
+
+    /**
+     * Get model of region
+     * @param  {string} name
+     * @return {module:echarts/model/Model}
+     */
+    getRegionModel: function (name) {
+        return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);
+    },
+
+    /**
+     * Format label
+     * @param {string} name Region name
+     * @param {string} [status='normal'] 'normal' or 'emphasis'
+     * @return {string}
+     */
+    getFormattedLabel: function (name, status) {
+        var regionModel = this.getRegionModel(name);
+        var formatter = regionModel.get('label.' + status + '.formatter');
+        var params = {
+            name: name
+        };
+        if (typeof formatter === 'function') {
+            params.status = status;
+            return formatter(params);
+        }
+        else if (typeof formatter === 'string') {
+            return formatter.replace('{a}', name != null ? name : '');
+        }
+    },
+
+    setZoom: function (zoom) {
+        this.option.zoom = zoom;
+    },
+
+    setCenter: function (center) {
+        this.option.center = center;
+    }
+});
+
+mixin(GeoModel, selectableMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentView({
+
+    type: 'geo',
+
+    init: function (ecModel, api) {
+        var mapDraw = new MapDraw(api, true);
+        this._mapDraw = mapDraw;
+
+        this.group.add(mapDraw.group);
+    },
+
+    render: function (geoModel, ecModel, api, payload) {
+        // Not render if it is an toggleSelect action from self
+        if (payload && payload.type === 'geoToggleSelect'
+            && payload.from === this.uid
+        ) {
+            return;
+        }
+
+        var mapDraw = this._mapDraw;
+        if (geoModel.get('show')) {
+            mapDraw.draw(geoModel, ecModel, api, this, payload);
+        }
+        else {
+            this._mapDraw.group.removeAll();
+        }
+
+        this.group.silent = geoModel.get('silent');
+    },
+
+    dispose: function () {
+        this._mapDraw && this._mapDraw.remove();
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function makeAction(method, actionInfo) {
+    actionInfo.update = 'updateView';
+    registerAction(actionInfo, function (payload, ecModel) {
+        var selected = {};
+
+        ecModel.eachComponent(
+            { mainType: 'geo', query: payload},
+            function (geoModel) {
+                geoModel[method](payload.name);
+                var geo = geoModel.coordinateSystem;
+                each$1(geo.regions, function (region) {
+                    selected[region.name] = geoModel.isSelected(region.name) || false;
+                });
+            }
+        );
+
+        return {
+            selected: selected,
+            name: payload.name
+        };
+    });
+}
+
+makeAction('toggleSelected', {
+    type: 'geoToggleSelect',
+    event: 'geoselectchanged'
+});
+makeAction('select', {
+    type: 'geoSelect',
+    event: 'geoselected'
+});
+makeAction('unSelect', {
+    type: 'geoUnSelect',
+    event: 'geounselected'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];
+
+var preprocessor$1 = function (option, isNew) {
+    var brushComponents = option && option.brush;
+    if (!isArray(brushComponents)) {
+        brushComponents = brushComponents ? [brushComponents] : [];
+    }
+
+    if (!brushComponents.length) {
+        return;
+    }
+
+    var brushComponentSpecifiedBtns = [];
+
+    each$1(brushComponents, function (brushOpt) {
+        var tbs = brushOpt.hasOwnProperty('toolbox')
+            ? brushOpt.toolbox : [];
+
+        if (tbs instanceof Array) {
+            brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);
+        }
+    });
+
+    var toolbox = option && option.toolbox;
+
+    if (isArray(toolbox)) {
+        toolbox = toolbox[0];
+    }
+    if (!toolbox) {
+        toolbox = {feature: {}};
+        option.toolbox = [toolbox];
+    }
+
+    var toolboxFeature = (toolbox.feature || (toolbox.feature = {}));
+    var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {});
+    var brushTypes = toolboxBrush.type || (toolboxBrush.type = []);
+
+    brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);
+
+    removeDuplicate(brushTypes);
+
+    if (isNew && !brushTypes.length) {
+        brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS);
+    }
+};
+
+function removeDuplicate(arr) {
+    var map$$1 = {};
+    each$1(arr, function (val) {
+        map$$1[val] = 1;
+    });
+    arr.length = 0;
+    each$1(map$$1, function (flag, val) {
+        arr.push(val);
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Visual solution, for consistent option specification.
+ */
+
+var each$19 = each$1;
+
+function hasKeys(obj) {
+    if (obj) {
+        for (var name in obj){
+            if (obj.hasOwnProperty(name)) {
+                return true;
+            }
+        }
+    }
+}
+
+/**
+ * @param {Object} option
+ * @param {Array.<string>} stateList
+ * @param {Function} [supplementVisualOption]
+ * @return {Object} visualMappings <state, <visualType, module:echarts/visual/VisualMapping>>
+ */
+function createVisualMappings(option, stateList, supplementVisualOption) {
+    var visualMappings = {};
+
+    each$19(stateList, function (state) {
+        var mappings = visualMappings[state] = createMappings();
+
+        each$19(option[state], function (visualData, visualType) {
+            if (!VisualMapping.isValidType(visualType)) {
+                return;
+            }
+            var mappingOption = {
+                type: visualType,
+                visual: visualData
+            };
+            supplementVisualOption && supplementVisualOption(mappingOption, state);
+            mappings[visualType] = new VisualMapping(mappingOption);
+
+            // Prepare a alpha for opacity, for some case that opacity
+            // is not supported, such as rendering using gradient color.
+            if (visualType === 'opacity') {
+                mappingOption = clone(mappingOption);
+                mappingOption.type = 'colorAlpha';
+                mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);
+            }
+        });
+    });
+
+    return visualMappings;
+
+    function createMappings() {
+        var Creater = function () {};
+        // Make sure hidden fields will not be visited by
+        // object iteration (with hasOwnProperty checking).
+        Creater.prototype.__hidden = Creater.prototype;
+        var obj = new Creater();
+        return obj;
+    }
+}
+
+/**
+ * @param {Object} thisOption
+ * @param {Object} newOption
+ * @param {Array.<string>} keys
+ */
+function replaceVisualOption(thisOption, newOption, keys) {
+    // Visual attributes merge is not supported, otherwise it
+    // brings overcomplicated merge logic. See #2853. So if
+    // newOption has anyone of these keys, all of these keys
+    // will be reset. Otherwise, all keys remain.
+    var has;
+    each$1(keys, function (key) {
+        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {
+            has = true;
+        }
+    });
+    has && each$1(keys, function (key) {
+        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {
+            thisOption[key] = clone(newOption[key]);
+        }
+        else {
+            delete thisOption[key];
+        }
+    });
+}
+
+/**
+ * @param {Array.<string>} stateList
+ * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>
+ * @param {module:echarts/data/List} list
+ * @param {Function} getValueState param: valueOrIndex, return: state.
+ * @param {object} [scope] Scope for getValueState
+ * @param {string} [dimension] Concrete dimension, if used.
+ */
+// ???! handle brush?
+function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {
+    var visualTypesMap = {};
+    each$1(stateList, function (state) {
+        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);
+        visualTypesMap[state] = visualTypes;
+    });
+
+    var dataIndex;
+
+    function getVisual(key) {
+        return data.getItemVisual(dataIndex, key);
+    }
+
+    function setVisual(key, value) {
+        data.setItemVisual(dataIndex, key, value);
+    }
+
+    if (dimension == null) {
+        data.each(eachItem);
+    }
+    else {
+        data.each([dimension], eachItem);
+    }
+
+    function eachItem(valueOrIndex, index) {
+        dataIndex = dimension == null ? valueOrIndex : index;
+
+        var rawDataItem = data.getRawDataItem(dataIndex);
+        // Consider performance
+        if (rawDataItem && rawDataItem.visualMap === false) {
+            return;
+        }
+
+        var valueState = getValueState.call(scope, valueOrIndex);
+        var mappings = visualMappings[valueState];
+        var visualTypes = visualTypesMap[valueState];
+
+        for (var i = 0, len = visualTypes.length; i < len; i++) {
+            var type = visualTypes[i];
+            mappings[type] && mappings[type].applyVisual(
+                valueOrIndex, getVisual, setVisual
+            );
+        }
+    }
+}
+
+/**
+ * @param {module:echarts/data/List} data
+ * @param {Array.<string>} stateList
+ * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>
+ * @param {Function} getValueState param: valueOrIndex, return: state.
+ * @param {number} [dim] dimension or dimension index.
+ */
+function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {
+    var visualTypesMap = {};
+    each$1(stateList, function (state) {
+        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);
+        visualTypesMap[state] = visualTypes;
+    });
+
+    function progress(params, data) {
+        if (dim != null) {
+            dim = data.getDimension(dim);
+        }
+
+        function getVisual(key) {
+            return data.getItemVisual(dataIndex, key);
+        }
+
+        function setVisual(key, value) {
+            data.setItemVisual(dataIndex, key, value);
+        }
+
+        var dataIndex;
+        while ((dataIndex = params.next()) != null) {
+            var rawDataItem = data.getRawDataItem(dataIndex);
+
+            // Consider performance
+            if (rawDataItem && rawDataItem.visualMap === false) {
+                return;
+            }
+
+            var value = dim != null
+                ? data.get(dim, dataIndex, true)
+                : dataIndex;
+
+            var valueState = getValueState(value);
+            var mappings = visualMappings[valueState];
+            var visualTypes = visualTypesMap[valueState];
+
+            for (var i = 0, len = visualTypes.length; i < len; i++) {
+                var type = visualTypes[i];
+                mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual);
+            }
+        }
+    }
+
+    return {progress: progress};
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Key of the first level is brushType: `line`, `rect`, `polygon`.
+// Key of the second level is chart element type: `point`, `rect`.
+// See moudule:echarts/component/helper/BrushController
+// function param:
+//      {Object} itemLayout fetch from data.getItemLayout(dataIndex)
+//      {Object} selectors {point: selector, rect: selector, ...}
+//      {Object} area {range: [[], [], ..], boudingRect}
+// function return:
+//      {boolean} Whether in the given brush.
+var selector = {
+    lineX: getLineSelectors(0),
+    lineY: getLineSelectors(1),
+    rect: {
+        point: function (itemLayout, selectors, area) {
+            return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]);
+        },
+        rect: function (itemLayout, selectors, area) {
+            return itemLayout && area.boundingRect.intersect(itemLayout);
+        }
+    },
+    polygon: {
+        point: function (itemLayout, selectors, area) {
+            return itemLayout
+                && area.boundingRect.contain(itemLayout[0], itemLayout[1])
+                && contain$1(area.range, itemLayout[0], itemLayout[1]);
+        },
+        rect: function (itemLayout, selectors, area) {
+            var points = area.range;
+
+            if (!itemLayout || points.length <= 1) {
+                return false;
+            }
+
+            var x = itemLayout.x;
+            var y = itemLayout.y;
+            var width = itemLayout.width;
+            var height = itemLayout.height;
+            var p = points[0];
+
+            if (contain$1(points, x, y)
+                || contain$1(points, x + width, y)
+                || contain$1(points, x, y + height)
+                || contain$1(points, x + width, y + height)
+                || BoundingRect.create(itemLayout).contain(p[0], p[1])
+                || lineIntersectPolygon(x, y, x + width, y, points)
+                || lineIntersectPolygon(x, y, x, y + height, points)
+                || lineIntersectPolygon(x + width, y, x + width, y + height, points)
+                || lineIntersectPolygon(x, y + height, x + width, y + height, points)
+            ) {
+                return true;
+            }
+        }
+    }
+};
+
+function getLineSelectors(xyIndex) {
+    var xy = ['x', 'y'];
+    var wh = ['width', 'height'];
+
+    return {
+        point: function (itemLayout, selectors, area) {
+            if (itemLayout) {
+                var range = area.range;
+                var p = itemLayout[xyIndex];
+                return inLineRange(p, range);
+            }
+        },
+        rect: function (itemLayout, selectors, area) {
+            if (itemLayout) {
+                var range = area.range;
+                var layoutRange = [
+                    itemLayout[xy[xyIndex]],
+                    itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]
+                ];
+                layoutRange[1] < layoutRange[0] && layoutRange.reverse();
+                return inLineRange(layoutRange[0], range)
+                    || inLineRange(layoutRange[1], range)
+                    || inLineRange(range[0], layoutRange)
+                    || inLineRange(range[1], layoutRange);
+            }
+        }
+    };
+}
+
+function inLineRange(p, range) {
+    return range[0] <= p && p <= range[1];
+}
+
+function lineIntersectPolygon(lx, ly, l2x, l2y, points) {
+    for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {
+        var p = points[i];
+        if (lineIntersect(lx, ly, l2x, l2y, p[0], p[1], p2[0], p2[1])) {
+            return true;
+        }
+        p2 = p;
+    }
+}
+
+// Code from <http://blog.csdn.net/rickliuxiao/article/details/6259322> with some fix.
+// See <https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection>
+function lineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {
+    var delta = determinant(a2x - a1x, b1x - b2x, a2y - a1y, b1y - b2y);
+    if (nearZero(delta)) { // parallel
+        return false;
+    }
+    var namenda = determinant(b1x - a1x, b1x - b2x, b1y - a1y, b1y - b2y) / delta;
+    if (namenda < 0 || namenda > 1) {
+        return false;
+    }
+    var miu = determinant(a2x - a1x, b1x - a1x, a2y - a1y, b1y - a1y) / delta;
+    if (miu < 0 || miu > 1) {
+        return false;
+    }
+    return true;
+}
+
+function nearZero(val) {
+    return val <= (1e-6) && val >= -(1e-6);
+}
+
+function determinant(v1, v2, v3, v4) {
+    return v1 * v4 - v2 * v3;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$20 = each$1;
+var indexOf$1 = indexOf;
+var curry$5 = curry;
+
+var COORD_CONVERTS = ['dataToPoint', 'pointToData'];
+
+// FIXME
+// how to genarialize to more coordinate systems.
+var INCLUDE_FINDER_MAIN_TYPES = [
+    'grid', 'xAxis', 'yAxis', 'geo', 'graph',
+    'polar', 'radiusAxis', 'angleAxis', 'bmap'
+];
+
+/**
+ * [option in constructor]:
+ * {
+ *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.
+ * }
+ *
+ *
+ * [targetInfo]:
+ *
+ * There can be multiple axes in a single targetInfo. Consider the case
+ * of `grid` component, a targetInfo represents a grid which contains one or more
+ * cartesian and one or more axes. And consider the case of parallel system,
+ * which has multiple axes in a coordinate system.
+ * Can be {
+ *     panelId: ...,
+ *     coordSys: <a representitive cartesian in grid (first cartesian by default)>,
+ *     coordSyses: all cartesians.
+ *     gridModel: <grid component>
+ *     xAxes: correspond to coordSyses on index
+ *     yAxes: correspond to coordSyses on index
+ * }
+ * or {
+ *     panelId: ...,
+ *     coordSys: <geo coord sys>
+ *     coordSyses: [<geo coord sys>]
+ *     geoModel: <geo component>
+ * }
+ *
+ *
+ * [panelOpt]:
+ *
+ * Make from targetInfo. Input to BrushController.
+ * {
+ *     panelId: ...,
+ *     rect: ...
+ * }
+ *
+ *
+ * [area]:
+ *
+ * Generated by BrushController or user input.
+ * {
+ *     panelId: Used to locate coordInfo directly. If user inpput, no panelId.
+ *     brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y').
+ *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.
+ *     range: pixel range.
+ *     coordRange: representitive coord range (the first one of coordRanges).
+ *     coordRanges: <Array> coord ranges, used in multiple cartesian in one grid.
+ * }
+ */
+
+/**
+ * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid
+ *        Each can be {number|Array.<number>}. like: {xAxisIndex: [3, 4]}
+ * @param {module:echarts/model/Global} ecModel
+ * @param {Object} [opt]
+ * @param {Array.<string>} [opt.include] include coordinate system types.
+ */
+function BrushTargetManager(option, ecModel, opt) {
+    /**
+     * @private
+     * @type {Array.<Object>}
+     */
+    var targetInfoList = this._targetInfoList = [];
+    var info = {};
+    var foundCpts = parseFinder$1(ecModel, option);
+
+    each$20(targetInfoBuilders, function (builder, type) {
+        if (!opt || !opt.include || indexOf$1(opt.include, type) >= 0) {
+            builder(foundCpts, targetInfoList, info);
+        }
+    });
+}
+
+var proto$2 = BrushTargetManager.prototype;
+
+proto$2.setOutputRanges = function (areas, ecModel) {
+    this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {
+        (area.coordRanges || (area.coordRanges = [])).push(coordRange);
+        // area.coordRange is the first of area.coordRanges
+        if (!area.coordRange) {
+            area.coordRange = coordRange;
+            // In 'category' axis, coord to pixel is not reversible, so we can not
+            // rebuild range by coordRange accrately, which may bring trouble when
+            // brushing only one item. So we use __rangeOffset to rebuilding range
+            // by coordRange. And this it only used in brush component so it is no
+            // need to be adapted to coordRanges.
+            var result = coordConvert[area.brushType](0, coordSys, coordRange);
+            area.__rangeOffset = {
+                offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),
+                xyMinMax: result.xyMinMax
+            };
+        }
+    });
+};
+
+proto$2.matchOutputRanges = function (areas, ecModel, cb) {
+    each$20(areas, function (area) {
+        var targetInfo = this.findTargetInfo(area, ecModel);
+
+        if (targetInfo && targetInfo !== true) {
+            each$1(
+                targetInfo.coordSyses,
+                function (coordSys) {
+                    var result = coordConvert[area.brushType](1, coordSys, area.range);
+                    cb(area, result.values, coordSys, ecModel);
+                }
+            );
+        }
+    }, this);
+};
+
+proto$2.setInputRanges = function (areas, ecModel) {
+    each$20(areas, function (area) {
+        var targetInfo = this.findTargetInfo(area, ecModel);
+
+        if (__DEV__) {
+            assert$1(
+                !targetInfo || targetInfo === true || area.coordRange,
+                'coordRange must be specified when coord index specified.'
+            );
+            assert$1(
+                !targetInfo || targetInfo !== true || area.range,
+                'range must be specified in global brush.'
+            );
+        }
+
+        area.range = area.range || [];
+
+        // convert coordRange to global range and set panelId.
+        if (targetInfo && targetInfo !== true) {
+            area.panelId = targetInfo.panelId;
+            // (1) area.range shoule always be calculate from coordRange but does
+            // not keep its original value, for the sake of the dataZoom scenario,
+            // where area.coordRange remains unchanged but area.range may be changed.
+            // (2) Only support converting one coordRange to pixel range in brush
+            // component. So do not consider `coordRanges`.
+            // (3) About __rangeOffset, see comment above.
+            var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);
+            var rangeOffset = area.__rangeOffset;
+            area.range = rangeOffset
+                ? diffProcessor[area.brushType](
+                    result.values,
+                    rangeOffset.offset,
+                    getScales(result.xyMinMax, rangeOffset.xyMinMax)
+                )
+                : result.values;
+        }
+    }, this);
+};
+
+proto$2.makePanelOpts = function (api, getDefaultBrushType) {
+    return map(this._targetInfoList, function (targetInfo) {
+        var rect = targetInfo.getPanelRect();
+        return {
+            panelId: targetInfo.panelId,
+            defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo),
+            clipPath: makeRectPanelClipPath(rect),
+            isTargetByCursor: makeRectIsTargetByCursor(
+                rect, api, targetInfo.coordSysModel
+            ),
+            getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect)
+        };
+    });
+};
+
+proto$2.controlSeries = function (area, seriesModel, ecModel) {
+    // Check whether area is bound in coord, and series do not belong to that coord.
+    // If do not do this check, some brush (like lineX) will controll all axes.
+    var targetInfo = this.findTargetInfo(area, ecModel);
+    return targetInfo === true || (
+        targetInfo && indexOf$1(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0
+    );
+};
+
+/**
+ * If return Object, a coord found.
+ * If reutrn true, global found.
+ * Otherwise nothing found.
+ *
+ * @param {Object} area
+ * @param {Array} targetInfoList
+ * @return {Object|boolean}
+ */
+proto$2.findTargetInfo = function (area, ecModel) {
+    var targetInfoList = this._targetInfoList;
+    var foundCpts = parseFinder$1(ecModel, area);
+
+    for (var i = 0; i < targetInfoList.length; i++) {
+        var targetInfo = targetInfoList[i];
+        var areaPanelId = area.panelId;
+        if (areaPanelId) {
+            if (targetInfo.panelId === areaPanelId) {
+                return targetInfo;
+            }
+        }
+        else {
+            for (var i = 0; i < targetInfoMatchers.length; i++) {
+                if (targetInfoMatchers[i](foundCpts, targetInfo)) {
+                    return targetInfo;
+                }
+            }
+        }
+    }
+
+    return true;
+};
+
+function formatMinMax(minMax) {
+    minMax[0] > minMax[1] && minMax.reverse();
+    return minMax;
+}
+
+function parseFinder$1(ecModel, option) {
+    return parseFinder(
+        ecModel, option, {includeMainTypes: INCLUDE_FINDER_MAIN_TYPES}
+    );
+}
+
+var targetInfoBuilders = {
+
+    grid: function (foundCpts, targetInfoList) {
+        var xAxisModels = foundCpts.xAxisModels;
+        var yAxisModels = foundCpts.yAxisModels;
+        var gridModels = foundCpts.gridModels;
+        // Remove duplicated.
+        var gridModelMap = createHashMap();
+        var xAxesHas = {};
+        var yAxesHas = {};
+
+        if (!xAxisModels && !yAxisModels && !gridModels) {
+            return;
+        }
+
+        each$20(xAxisModels, function (axisModel) {
+            var gridModel = axisModel.axis.grid.model;
+            gridModelMap.set(gridModel.id, gridModel);
+            xAxesHas[gridModel.id] = true;
+        });
+        each$20(yAxisModels, function (axisModel) {
+            var gridModel = axisModel.axis.grid.model;
+            gridModelMap.set(gridModel.id, gridModel);
+            yAxesHas[gridModel.id] = true;
+        });
+        each$20(gridModels, function (gridModel) {
+            gridModelMap.set(gridModel.id, gridModel);
+            xAxesHas[gridModel.id] = true;
+            yAxesHas[gridModel.id] = true;
+        });
+
+        gridModelMap.each(function (gridModel) {
+            var grid = gridModel.coordinateSystem;
+            var cartesians = [];
+
+            each$20(grid.getCartesians(), function (cartesian, index) {
+                if (indexOf$1(xAxisModels, cartesian.getAxis('x').model) >= 0
+                    || indexOf$1(yAxisModels, cartesian.getAxis('y').model) >= 0
+                ) {
+                    cartesians.push(cartesian);
+                }
+            });
+            targetInfoList.push({
+                panelId: 'grid--' + gridModel.id,
+                gridModel: gridModel,
+                coordSysModel: gridModel,
+                // Use the first one as the representitive coordSys.
+                coordSys: cartesians[0],
+                coordSyses: cartesians,
+                getPanelRect: panelRectBuilder.grid,
+                xAxisDeclared: xAxesHas[gridModel.id],
+                yAxisDeclared: yAxesHas[gridModel.id]
+            });
+        });
+    },
+
+    geo: function (foundCpts, targetInfoList) {
+        each$20(foundCpts.geoModels, function (geoModel) {
+            var coordSys = geoModel.coordinateSystem;
+            targetInfoList.push({
+                panelId: 'geo--' + geoModel.id,
+                geoModel: geoModel,
+                coordSysModel: geoModel,
+                coordSys: coordSys,
+                coordSyses: [coordSys],
+                getPanelRect: panelRectBuilder.geo
+            });
+        });
+    }
+};
+
+var targetInfoMatchers = [
+
+    // grid
+    function (foundCpts, targetInfo) {
+        var xAxisModel = foundCpts.xAxisModel;
+        var yAxisModel = foundCpts.yAxisModel;
+        var gridModel = foundCpts.gridModel;
+
+        !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);
+        !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);
+
+        return gridModel && gridModel === targetInfo.gridModel;
+    },
+
+    // geo
+    function (foundCpts, targetInfo) {
+        var geoModel = foundCpts.geoModel;
+        return geoModel && geoModel === targetInfo.geoModel;
+    }
+];
+
+var panelRectBuilder = {
+
+    grid: function () {
+        // grid is not Transformable.
+        return this.coordSys.grid.getRect().clone();
+    },
+
+    geo: function () {
+        var coordSys = this.coordSys;
+        var rect = coordSys.getBoundingRect().clone();
+        // geo roam and zoom transform
+        rect.applyTransform(getTransform(coordSys));
+        return rect;
+    }
+};
+
+var coordConvert = {
+
+    lineX: curry$5(axisConvert, 0),
+
+    lineY: curry$5(axisConvert, 1),
+
+    rect: function (to, coordSys, rangeOrCoordRange) {
+        var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]);
+        var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]);
+        var values = [
+            formatMinMax([xminymin[0], xmaxymax[0]]),
+            formatMinMax([xminymin[1], xmaxymax[1]])
+        ];
+        return {values: values, xyMinMax: values};
+    },
+
+    polygon: function (to, coordSys, rangeOrCoordRange) {
+        var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];
+        var values = map(rangeOrCoordRange, function (item) {
+            var p = coordSys[COORD_CONVERTS[to]](item);
+            xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);
+            xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);
+            xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);
+            xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);
+            return p;
+        });
+        return {values: values, xyMinMax: xyMinMax};
+    }
+};
+
+function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {
+    if (__DEV__) {
+        assert$1(
+            coordSys.type === 'cartesian2d',
+            'lineX/lineY brush is available only in cartesian2d.'
+        );
+    }
+
+    var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);
+    var values = formatMinMax(map([0, 1], function (i) {
+        return to
+            ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]))
+            : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));
+    }));
+    var xyMinMax = [];
+    xyMinMax[axisNameIndex] = values;
+    xyMinMax[1 - axisNameIndex] = [NaN, NaN];
+
+    return {values: values, xyMinMax: xyMinMax};
+}
+
+var diffProcessor = {
+    lineX: curry$5(axisDiffProcessor, 0),
+
+    lineY: curry$5(axisDiffProcessor, 1),
+
+    rect: function (values, refer, scales) {
+        return [
+            [values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]],
+            [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]
+        ];
+    },
+
+    polygon: function (values, refer, scales) {
+        return map(values, function (item, idx) {
+            return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];
+        });
+    }
+};
+
+function axisDiffProcessor(axisNameIndex, values, refer, scales) {
+    return [
+        values[0] - scales[axisNameIndex] * refer[0],
+        values[1] - scales[axisNameIndex] * refer[1]
+    ];
+}
+
+// We have to process scale caused by dataZoom manually,
+// although it might be not accurate.
+function getScales(xyMinMaxCurr, xyMinMaxOrigin) {
+    var sizeCurr = getSize(xyMinMaxCurr);
+    var sizeOrigin = getSize(xyMinMaxOrigin);
+    var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];
+    isNaN(scales[0]) && (scales[0] = 1);
+    isNaN(scales[1]) && (scales[1] = 1);
+    return scales;
+}
+
+function getSize(xyMinMax) {
+    return xyMinMax
+        ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]]
+        : [NaN, NaN];
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var STATE_LIST = ['inBrush', 'outOfBrush'];
+var DISPATCH_METHOD = '__ecBrushSelect';
+var DISPATCH_FLAG = '__ecInBrushSelectEvent';
+var PRIORITY_BRUSH = PRIORITY.VISUAL.BRUSH;
+
+/**
+ * Layout for visual, the priority higher than other layout, and before brush visual.
+ */
+registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) {
+    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {
+
+        payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(
+            payload.key === 'brush' ? payload.brushOption : {brushType: false}
+        );
+
+        var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);
+
+        brushTargetManager.setInputRanges(brushModel.areas, ecModel);
+    });
+});
+
+/**
+ * Register the visual encoding if this modules required.
+ */
+registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) {
+
+    var brushSelected = [];
+    var throttleType;
+    var throttleDelay;
+
+    ecModel.eachComponent({mainType: 'brush'}, function (brushModel, brushIndex) {
+
+        var thisBrushSelected = {
+            brushId: brushModel.id,
+            brushIndex: brushIndex,
+            brushName: brushModel.name,
+            areas: clone(brushModel.areas),
+            selected: []
+        };
+        // Every brush component exists in event params, convenient
+        // for user to find by index.
+        brushSelected.push(thisBrushSelected);
+
+        var brushOption = brushModel.option;
+        var brushLink = brushOption.brushLink;
+        var linkedSeriesMap = [];
+        var selectedDataIndexForLink = [];
+        var rangeInfoBySeries = [];
+        var hasBrushExists = 0;
+
+        if (!brushIndex) { // Only the first throttle setting works.
+            throttleType = brushOption.throttleType;
+            throttleDelay = brushOption.throttleDelay;
+        }
+
+        // Add boundingRect and selectors to range.
+        var areas = map(brushModel.areas, function (area) {
+            return bindSelector(
+                defaults(
+                    {boundingRect: boundingRectBuilders[area.brushType](area)},
+                    area
+                )
+            );
+        });
+
+        var visualMappings = createVisualMappings(
+            brushModel.option, STATE_LIST, function (mappingOption) {
+                mappingOption.mappingMethod = 'fixed';
+            }
+        );
+
+        isArray(brushLink) && each$1(brushLink, function (seriesIndex) {
+            linkedSeriesMap[seriesIndex] = 1;
+        });
+
+        function linkOthers(seriesIndex) {
+            return brushLink === 'all' || linkedSeriesMap[seriesIndex];
+        }
+
+        // If no supported brush or no brush on the series,
+        // all visuals should be in original state.
+        function brushed(rangeInfoList) {
+            return !!rangeInfoList.length;
+        }
+
+        /**
+         * Logic for each series: (If the logic has to be modified one day, do it carefully!)
+         *
+         * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers  ) => StepA: ┬record, ┬ StepB: ┬visualByRecord.
+         *   !brushed┘    ├hasBrushExist ┤                            └nothing,┘        ├visualByRecord.
+         *                └!hasBrushExist┘                                              └nothing.
+         * ( !brushed  && ┬hasBrushExist ┬ && linkOthers  ) => StepA:  nothing,  StepB: ┬visualByRecord.
+         *                └!hasBrushExist┘                                              └nothing.
+         * ( brushed ┬ &&                     !linkOthers ) => StepA:  nothing,  StepB: ┬visualByCheck.
+         *   !brushed┘                                                                  └nothing.
+         * ( !brushed  &&                     !linkOthers ) => StepA:  nothing,  StepB:  nothing.
+         */
+
+        // Step A
+        ecModel.eachSeries(function (seriesModel, seriesIndex) {
+            var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];
+
+            seriesModel.subType === 'parallel'
+                ? stepAParallel(seriesModel, seriesIndex, rangeInfoList)
+                : stepAOthers(seriesModel, seriesIndex, rangeInfoList);
+        });
+
+        function stepAParallel(seriesModel, seriesIndex) {
+            var coordSys = seriesModel.coordinateSystem;
+            hasBrushExists |= coordSys.hasAxisBrushed();
+
+            linkOthers(seriesIndex) && coordSys.eachActiveState(
+                seriesModel.getData(),
+                function (activeState, dataIndex) {
+                    activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1);
+                }
+            );
+        }
+
+        function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {
+            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);
+            if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) {
+                return;
+            }
+
+            each$1(areas, function (area) {
+                selectorsByBrushType[area.brushType]
+                    && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)
+                    && rangeInfoList.push(area);
+                hasBrushExists |= brushed(rangeInfoList);
+            });
+
+            if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {
+                var data = seriesModel.getData();
+                data.each(function (dataIndex) {
+                    if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) {
+                        selectedDataIndexForLink[dataIndex] = 1;
+                    }
+                });
+            }
+        }
+
+        // Step B
+        ecModel.eachSeries(function (seriesModel, seriesIndex) {
+            var seriesBrushSelected = {
+                seriesId: seriesModel.id,
+                seriesIndex: seriesIndex,
+                seriesName: seriesModel.name,
+                dataIndex: []
+            };
+            // Every series exists in event params, convenient
+            // for user to find series by seriesIndex.
+            thisBrushSelected.selected.push(seriesBrushSelected);
+
+            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);
+            var rangeInfoList = rangeInfoBySeries[seriesIndex];
+
+            var data = seriesModel.getData();
+            var getValueState = linkOthers(seriesIndex)
+                ? function (dataIndex) {
+                    return selectedDataIndexForLink[dataIndex]
+                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')
+                        : 'outOfBrush';
+                }
+                : function (dataIndex) {
+                    return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)
+                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')
+                        : 'outOfBrush';
+                };
+
+            // If no supported brush or no brush, all visuals are in original state.
+            (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList))
+                && applyVisual(
+                    STATE_LIST, visualMappings, data, getValueState
+                );
+        });
+
+    });
+
+    dispatchAction(api, throttleType, throttleDelay, brushSelected, payload);
+});
+
+function dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) {
+    // This event will not be triggered when `setOpion`, otherwise dead lock may
+    // triggered when do `setOption` in event listener, which we do not find
+    // satisfactory way to solve yet. Some considered resolutions:
+    // (a) Diff with prevoius selected data ant only trigger event when changed.
+    // But store previous data and diff precisely (i.e., not only by dataIndex, but
+    // also detect value changes in selected data) might bring complexity or fragility.
+    // (b) Use spectial param like `silent` to suppress event triggering.
+    // But such kind of volatile param may be weird in `setOption`.
+    if (!payload) {
+        return;
+    }
+
+    var zr = api.getZr();
+    if (zr[DISPATCH_FLAG]) {
+        return;
+    }
+
+    if (!zr[DISPATCH_METHOD]) {
+        zr[DISPATCH_METHOD] = doDispatch;
+    }
+
+    var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);
+
+    fn(api, brushSelected);
+}
+
+function doDispatch(api, brushSelected) {
+    if (!api.isDisposed()) {
+        var zr = api.getZr();
+        zr[DISPATCH_FLAG] = true;
+        api.dispatchAction({
+            type: 'brushSelect',
+            batch: brushSelected
+        });
+        zr[DISPATCH_FLAG] = false;
+    }
+}
+
+function checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) {
+    for (var i = 0, len = rangeInfoList.length; i < len; i++) {
+        var area = rangeInfoList[i];
+        if (selectorsByBrushType[area.brushType](
+            dataIndex, data, area.selectors, area
+        )) {
+            return true;
+        }
+    }
+}
+
+function getSelectorsByBrushType(seriesModel) {
+    var brushSelector = seriesModel.brushSelector;
+    if (isString(brushSelector)) {
+        var sels = [];
+        each$1(selector, function (selectorsByElementType, brushType) {
+            sels[brushType] = function (dataIndex, data, selectors, area) {
+                var itemLayout = data.getItemLayout(dataIndex);
+                return selectorsByElementType[brushSelector](itemLayout, selectors, area);
+            };
+        });
+        return sels;
+    }
+    else if (isFunction$1(brushSelector)) {
+        var bSelector = {};
+        each$1(selector, function (sel, brushType) {
+            bSelector[brushType] = brushSelector;
+        });
+        return bSelector;
+    }
+    return brushSelector;
+}
+
+function brushModelNotControll(brushModel, seriesIndex) {
+    var seriesIndices = brushModel.option.seriesIndex;
+    return seriesIndices != null
+        && seriesIndices !== 'all'
+        && (
+            isArray(seriesIndices)
+            ? indexOf(seriesIndices, seriesIndex) < 0
+            : seriesIndex !== seriesIndices
+        );
+}
+
+function bindSelector(area) {
+    var selectors = area.selectors = {};
+    each$1(selector[area.brushType], function (selFn, elType) {
+        // Do not use function binding or curry for performance.
+        selectors[elType] = function (itemLayout) {
+            return selFn(itemLayout, selectors, area);
+        };
+    });
+    return area;
+}
+
+var boundingRectBuilders = {
+
+    lineX: noop,
+
+    lineY: noop,
+
+    rect: function (area) {
+        return getBoundingRectFromMinMax(area.range);
+    },
+
+    polygon: function (area) {
+        var minMax;
+        var range = area.range;
+
+        for (var i = 0, len = range.length; i < len; i++) {
+            minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]];
+            var rg = range[i];
+            rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]);
+            rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]);
+            rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]);
+            rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]);
+        }
+
+        return minMax && getBoundingRectFromMinMax(minMax);
+    }
+};
+
+function getBoundingRectFromMinMax(minMax) {
+    return new BoundingRect(
+        minMax[0][0],
+        minMax[1][0],
+        minMax[0][1] - minMax[0][0],
+        minMax[1][1] - minMax[1][0]
+    );
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd'];
+
+var BrushModel = extendComponentModel({
+
+    type: 'brush',
+
+    dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'],
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        // inBrush: null,
+        // outOfBrush: null,
+        toolbox: null,          // Default value see preprocessor.
+        brushLink: null,        // Series indices array, broadcast using dataIndex.
+                                // or 'all', which means all series. 'none' or null means no series.
+        seriesIndex: 'all',     // seriesIndex array, specify series controlled by this brush component.
+        geoIndex: null,         //
+        xAxisIndex: null,
+        yAxisIndex: null,
+
+        brushType: 'rect',      // Default brushType, see BrushController.
+        brushMode: 'single',    // Default brushMode, 'single' or 'multiple'
+        transformable: true,    // Default transformable.
+        brushStyle: {           // Default brushStyle
+            borderWidth: 1,
+            color: 'rgba(120,140,180,0.3)',
+            borderColor: 'rgba(120,140,180,0.8)'
+        },
+
+        throttleType: 'fixRate',// Throttle in brushSelected event. 'fixRate' or 'debounce'.
+                                // If null, no throttle. Valid only in the first brush component
+        throttleDelay: 0,       // Unit: ms, 0 means every event will be triggered.
+
+        // FIXME
+        // 试验效果
+        removeOnClick: true,
+
+        z: 10000
+    },
+
+    /**
+     * @readOnly
+     * @type {Array.<Object>}
+     */
+    areas: [],
+
+    /**
+     * Current activated brush type.
+     * If null, brush is inactived.
+     * see module:echarts/component/helper/BrushController
+     * @readOnly
+     * @type {string}
+     */
+    brushType: null,
+
+    /**
+     * Current brush opt.
+     * see module:echarts/component/helper/BrushController
+     * @readOnly
+     * @type {Object}
+     */
+    brushOption: {},
+
+    /**
+     * @readOnly
+     * @type {Array.<Object>}
+     */
+    coordInfoList: [],
+
+    optionUpdated: function (newOption, isInit) {
+        var thisOption = this.option;
+
+        !isInit && replaceVisualOption(
+            thisOption, newOption, ['inBrush', 'outOfBrush']
+        );
+
+        var inBrush = thisOption.inBrush = thisOption.inBrush || {};
+        // Always give default visual, consider setOption at the second time.
+        thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR};
+
+        if (!inBrush.hasOwnProperty('liftZ')) {
+            // Bigger than the highlight z lift, otherwise it will
+            // be effected by the highlight z when brush.
+            inBrush.liftZ = 5;
+        }
+    },
+
+    /**
+     * If ranges is null/undefined, range state remain.
+     *
+     * @param {Array.<Object>} [ranges]
+     */
+    setAreas: function (areas) {
+        if (__DEV__) {
+            assert$1(isArray(areas));
+            each$1(areas, function (area) {
+                assert$1(area.brushType, 'Illegal areas');
+            });
+        }
+
+        // If ranges is null/undefined, range state remain.
+        // This helps user to dispatchAction({type: 'brush'}) with no areas
+        // set but just want to get the current brush select info from a `brush` event.
+        if (!areas) {
+            return;
+        }
+
+        this.areas = map(areas, function (area) {
+            return generateBrushOption(this.option, area);
+        }, this);
+    },
+
+    /**
+     * see module:echarts/component/helper/BrushController
+     * @param {Object} brushOption
+     */
+    setBrushOption: function (brushOption) {
+        this.brushOption = generateBrushOption(this.option, brushOption);
+        this.brushType = this.brushOption.brushType;
+    }
+
+});
+
+function generateBrushOption(option, brushOption) {
+    return merge(
+        {
+            brushType: option.brushType,
+            brushMode: option.brushMode,
+            transformable: option.transformable,
+            brushStyle: new Model(option.brushStyle).getItemStyle(),
+            removeOnClick: option.removeOnClick,
+            z: option.z
+        },
+        brushOption,
+        true
+    );
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentView({
+
+    type: 'brush',
+
+    init: function (ecModel, api) {
+
+        /**
+         * @readOnly
+         * @type {module:echarts/model/Global}
+         */
+        this.ecModel = ecModel;
+
+        /**
+         * @readOnly
+         * @type {module:echarts/ExtensionAPI}
+         */
+        this.api = api;
+
+        /**
+         * @readOnly
+         * @type {module:echarts/component/brush/BrushModel}
+         */
+        this.model;
+
+        /**
+         * @private
+         * @type {module:echarts/component/helper/BrushController}
+         */
+        (this._brushController = new BrushController(api.getZr()))
+            .on('brush', bind(this._onBrush, this))
+            .mount();
+    },
+
+    /**
+     * @override
+     */
+    render: function (brushModel) {
+        this.model = brushModel;
+        return updateController.apply(this, arguments);
+    },
+
+    /**
+     * @override
+     */
+    updateTransform: updateController,
+
+    /**
+     * @override
+     */
+    updateView: updateController,
+
+    // /**
+    //  * @override
+    //  */
+    // updateLayout: updateController,
+
+    // /**
+    //  * @override
+    //  */
+    // updateVisual: updateController,
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        this._brushController.dispose();
+    },
+
+    /**
+     * @private
+     */
+    _onBrush: function (areas, opt) {
+        var modelId = this.model.id;
+
+        this.model.brushTargetManager.setOutputRanges(areas, this.ecModel);
+
+        // Action is not dispatched on drag end, because the drag end
+        // emits the same params with the last drag move event, and
+        // may have some delay when using touch pad, which makes
+        // animation not smooth (when using debounce).
+        (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({
+            type: 'brush',
+            brushId: modelId,
+            areas: clone(areas),
+            $from: modelId
+        });
+    }
+
+});
+
+function updateController(brushModel, ecModel, api, payload) {
+    // Do not update controller when drawing.
+    (!payload || payload.$from !== brushModel.id) && this._brushController
+        .setPanels(brushModel.brushTargetManager.makePanelOpts(api))
+        .enableBrush(brushModel.brushOption)
+        .updateCovers(brushModel.areas.slice());
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * payload: {
+ *      brushIndex: number, or,
+ *      brushId: string, or,
+ *      brushName: string,
+ *      globalRanges: Array
+ * }
+ */
+registerAction(
+        {type: 'brush', event: 'brush' /*, update: 'updateView' */},
+    function (payload, ecModel) {
+        ecModel.eachComponent({mainType: 'brush', query: payload}, function (brushModel) {
+            brushModel.setAreas(payload.areas);
+        });
+    }
+);
+
+/**
+ * payload: {
+ *      brushComponents: [
+ *          {
+ *              brushId,
+ *              brushIndex,
+ *              brushName,
+ *              series: [
+ *                  {
+ *                      seriesId,
+ *                      seriesIndex,
+ *                      seriesName,
+ *                      rawIndices: [21, 34, ...]
+ *                  },
+ *                  ...
+ *              ]
+ *          },
+ *          ...
+ *      ]
+ * }
+ */
+registerAction(
+        {type: 'brushSelect', event: 'brushSelected', update: 'none'},
+    function () {}
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+var features = {};
+
+function register$1(name, ctor) {
+    features[name] = ctor;
+}
+
+function get$1(name) {
+    return features[name];
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var brushLang = lang.toolbox.brush;
+
+function Brush(model, ecModel, api) {
+    this.model = model;
+    this.ecModel = ecModel;
+    this.api = api;
+
+    /**
+     * @private
+     * @type {string}
+     */
+    this._brushType;
+
+    /**
+     * @private
+     * @type {string}
+     */
+    this._brushMode;
+}
+
+Brush.defaultOption = {
+    show: true,
+    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', // jshint ignore:line
+        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', // jshint ignore:line
+        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', // jshint ignore:line
+        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', // jshint ignore:line
+        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', // jshint ignore:line
+        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' // jshint ignore:line
+    },
+    // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`
+    title: clone(brushLang.title)
+};
+
+var proto$3 = Brush.prototype;
+
+// proto.updateLayout = function (featureModel, ecModel, api) {
+proto$3.render =
+proto$3.updateView = function (featureModel, ecModel, api) {
+    var brushType;
+    var brushMode;
+    var isBrushed;
+
+    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {
+        brushType = brushModel.brushType;
+        brushMode = brushModel.brushOption.brushMode || 'single';
+        isBrushed |= brushModel.areas.length;
+    });
+    this._brushType = brushType;
+    this._brushMode = brushMode;
+
+    each$1(featureModel.get('type', true), function (type) {
+        featureModel.setIconStatus(
+            type,
+            (
+                type === 'keep'
+                ? brushMode === 'multiple'
+                : type === 'clear'
+                ? isBrushed
+                : type === brushType
+            ) ? 'emphasis' : 'normal'
+        );
+    });
+};
+
+proto$3.getIcons = function () {
+    var model = this.model;
+    var availableIcons = model.get('icon', true);
+    var icons = {};
+    each$1(model.get('type', true), function (type) {
+        if (availableIcons[type]) {
+            icons[type] = availableIcons[type];
+        }
+    });
+    return icons;
+};
+
+proto$3.onclick = function (ecModel, api, type) {
+    var brushType = this._brushType;
+    var brushMode = this._brushMode;
+
+    if (type === 'clear') {
+        // Trigger parallel action firstly
+        api.dispatchAction({
+            type: 'axisAreaSelect',
+            intervals: []
+        });
+
+        api.dispatchAction({
+            type: 'brush',
+            command: 'clear',
+            // Clear all areas of all brush components.
+            areas: []
+        });
+    }
+    else {
+        api.dispatchAction({
+            type: 'takeGlobalCursor',
+            key: 'brush',
+            brushOption: {
+                brushType: type === 'keep'
+                    ? brushType
+                    : (brushType === type ? false : type),
+                brushMode: type === 'keep'
+                    ? (brushMode === 'multiple' ? 'single' : 'multiple')
+                    : brushMode
+            }
+        });
+    }
+};
+
+register$1('brush', Brush);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Brush component entry
+ */
+
+registerPreprocessor(preprocessor$1);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// (24*60*60*1000)
+var PROXIMATE_ONE_DAY = 86400000;
+
+/**
+ * Calendar
+ *
+ * @constructor
+ *
+ * @param {Object} calendarModel calendarModel
+ * @param {Object} ecModel       ecModel
+ * @param {Object} api           api
+ */
+function Calendar(calendarModel, ecModel, api) {
+    this._model = calendarModel;
+}
+
+Calendar.prototype = {
+
+    constructor: Calendar,
+
+    type: 'calendar',
+
+    dimensions: ['time', 'value'],
+
+    // Required in createListFromData
+    getDimensionsInfo: function () {
+        return [{name: 'time', type: 'time'}, 'value'];
+    },
+
+    getRangeInfo: function () {
+        return this._rangeInfo;
+    },
+
+    getModel: function () {
+        return this._model;
+    },
+
+    getRect: function () {
+        return this._rect;
+    },
+
+    getCellWidth: function () {
+        return this._sw;
+    },
+
+    getCellHeight: function () {
+        return this._sh;
+    },
+
+    getOrient: function () {
+        return this._orient;
+    },
+
+    /**
+     * getFirstDayOfWeek
+     *
+     * @example
+     *     0 : start at Sunday
+     *     1 : start at Monday
+     *
+     * @return {number}
+     */
+    getFirstDayOfWeek: function () {
+        return this._firstDayOfWeek;
+    },
+
+    /**
+     * get date info
+     *
+     * @param  {string|number} date date
+     * @return {Object}
+     * {
+     *      y: string, local full year, eg., '1940',
+     *      m: string, local month, from '01' ot '12',
+     *      d: string, local date, from '01' to '31' (if exists),
+     *      day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,
+     *      time: timestamp,
+     *      formatedDate: string, yyyy-MM-dd,
+     *      date: original date object.
+     * }
+     */
+    getDateInfo: function (date) {
+
+        date = parseDate(date);
+
+        var y = date.getFullYear();
+
+        var m = date.getMonth() + 1;
+        m = m < 10 ? '0' + m : m;
+
+        var d = date.getDate();
+        d = d < 10 ? '0' + d : d;
+
+        var day = date.getDay();
+
+        day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);
+
+        return {
+            y: y,
+            m: m,
+            d: d,
+            day: day,
+            time: date.getTime(),
+            formatedDate: y + '-' + m + '-' + d,
+            date: date
+        };
+    },
+
+    getNextNDay: function (date, n) {
+        n = n || 0;
+        if (n === 0) {
+            return this.getDateInfo(date);
+        }
+
+        date = new Date(this.getDateInfo(date).time);
+        date.setDate(date.getDate() + n);
+
+        return this.getDateInfo(date);
+    },
+
+    update: function (ecModel, api) {
+
+        this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay');
+        this._orient = this._model.get('orient');
+        this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0;
+
+
+        this._rangeInfo = this._getRangeInfo(this._initRangeOption());
+        var weeks = this._rangeInfo.weeks || 1;
+        var whNames = ['width', 'height'];
+        var cellSize = this._model.get('cellSize').slice();
+        var layoutParams = this._model.getBoxLayoutParams();
+        var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];
+
+        each$1([0, 1], function (idx) {
+            if (cellSizeSpecified(cellSize, idx)) {
+                layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];
+            }
+        });
+
+        var whGlobal = {
+            width: api.getWidth(),
+            height: api.getHeight()
+        };
+        var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal);
+
+        each$1([0, 1], function (idx) {
+            if (!cellSizeSpecified(cellSize, idx)) {
+                cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];
+            }
+        });
+
+        function cellSizeSpecified(cellSize, idx) {
+            return cellSize[idx] != null && cellSize[idx] !== 'auto';
+        }
+
+        this._sw = cellSize[0];
+        this._sh = cellSize[1];
+    },
+
+
+    /**
+     * Convert a time data(time, value) item to (x, y) point.
+     *
+     * @override
+     * @param  {Array|number} data data
+     * @param  {boolean} [clamp=true] out of range
+     * @return {Array} point
+     */
+    dataToPoint: function (data, clamp) {
+        isArray(data) && (data = data[0]);
+        clamp == null && (clamp = true);
+
+        var dayInfo = this.getDateInfo(data);
+        var range = this._rangeInfo;
+        var date = dayInfo.formatedDate;
+
+        // if not in range return [NaN, NaN]
+        if (clamp && !(
+            dayInfo.time >= range.start.time
+            && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY
+        )) {
+            return [NaN, NaN];
+        }
+
+        var week = dayInfo.day;
+        var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;
+
+        if (this._orient === 'vertical') {
+            return [
+                this._rect.x + week * this._sw + this._sw / 2,
+                this._rect.y + nthWeek * this._sh + this._sh / 2
+            ];
+
+        }
+
+        return [
+            this._rect.x + nthWeek * this._sw + this._sw / 2,
+            this._rect.y + week * this._sh + this._sh / 2
+        ];
+
+    },
+
+    /**
+     * Convert a (x, y) point to time data
+     *
+     * @override
+     * @param  {string} point point
+     * @return {string}       data
+     */
+    pointToData: function (point) {
+
+        var date = this.pointToDate(point);
+
+        return date && date.time;
+    },
+
+    /**
+     * Convert a time date item to (x, y) four point.
+     *
+     * @param  {Array} data  date[0] is date
+     * @param  {boolean} [clamp=true]  out of range
+     * @return {Object}       point
+     */
+    dataToRect: function (data, clamp) {
+        var point = this.dataToPoint(data, clamp);
+
+        return {
+            contentShape: {
+                x: point[0] - (this._sw - this._lineWidth) / 2,
+                y: point[1] - (this._sh - this._lineWidth) / 2,
+                width: this._sw - this._lineWidth,
+                height: this._sh - this._lineWidth
+            },
+
+            center: point,
+
+            tl: [
+                point[0] - this._sw / 2,
+                point[1] - this._sh / 2
+            ],
+
+            tr: [
+                point[0] + this._sw / 2,
+                point[1] - this._sh / 2
+            ],
+
+            br: [
+                point[0] + this._sw / 2,
+                point[1] + this._sh / 2
+            ],
+
+            bl: [
+                point[0] - this._sw / 2,
+                point[1] + this._sh / 2
+            ]
+
+        };
+    },
+
+    /**
+     * Convert a (x, y) point to time date
+     *
+     * @param  {Array} point point
+     * @return {Object}       date
+     */
+    pointToDate: function (point) {
+        var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;
+        var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;
+        var range = this._rangeInfo.range;
+
+        if (this._orient === 'vertical') {
+            return this._getDateByWeeksAndDay(nthY, nthX - 1, range);
+        }
+
+        return this._getDateByWeeksAndDay(nthX, nthY - 1, range);
+    },
+
+    /**
+     * @inheritDoc
+     */
+    convertToPixel: curry(doConvert$2, 'dataToPoint'),
+
+    /**
+     * @inheritDoc
+     */
+    convertFromPixel: curry(doConvert$2, 'pointToData'),
+
+    /**
+     * initRange
+     *
+     * @private
+     * @return {Array} [start, end]
+     */
+    _initRangeOption: function () {
+        var range = this._model.get('range');
+
+        var rg = range;
+
+        if (isArray(rg) && rg.length === 1) {
+            rg = rg[0];
+        }
+
+        if (/^\d{4}$/.test(rg)) {
+            range = [rg + '-01-01', rg + '-12-31'];
+        }
+
+        if (/^\d{4}[\/|-]\d{1,2}$/.test(rg)) {
+
+            var start = this.getDateInfo(rg);
+            var firstDay = start.date;
+            firstDay.setMonth(firstDay.getMonth() + 1);
+
+            var end = this.getNextNDay(firstDay, -1);
+            range = [start.formatedDate, end.formatedDate];
+        }
+
+        if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rg)) {
+            range = [rg, rg];
+        }
+
+        var tmp = this._getRangeInfo(range);
+
+        if (tmp.start.time > tmp.end.time) {
+            range.reverse();
+        }
+
+        return range;
+    },
+
+    /**
+     * range info
+     *
+     * @private
+     * @param  {Array} range range ['2017-01-01', '2017-07-08']
+     *  If range[0] > range[1], they will not be reversed.
+     * @return {Object}       obj
+     */
+    _getRangeInfo: function (range) {
+        range = [
+            this.getDateInfo(range[0]),
+            this.getDateInfo(range[1])
+        ];
+
+        var reversed;
+        if (range[0].time > range[1].time) {
+            reversed = true;
+            range.reverse();
+        }
+
+        var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY)
+            - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1;
+
+        // Consider case:
+        // Firstly set system timezone as "Time Zone: America/Toronto",
+        // ```
+        // var first = new Date(1478412000000 - 3600 * 1000 * 2.5);
+        // var second = new Date(1478412000000);
+        // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;
+        // ```
+        // will get wrong result because of DST. So we should fix it.
+        var date = new Date(range[0].time);
+        var startDateNum = date.getDate();
+        var endDateNum = range[1].date.getDate();
+        date.setDate(startDateNum + allDay - 1);
+        // The bias can not over a month, so just compare date.
+        if (date.getDate() !== endDateNum) {
+            var sign = date.getTime() - range[1].time > 0 ? 1 : -1;
+            while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) {
+                allDay -= sign;
+                date.setDate(startDateNum + allDay - 1);
+            }
+        }
+
+        var weeks = Math.floor((allDay + range[0].day + 6) / 7);
+        var nthWeek = reversed ? -weeks + 1: weeks - 1;
+
+        reversed && range.reverse();
+
+        return {
+            range: [range[0].formatedDate, range[1].formatedDate],
+            start: range[0],
+            end: range[1],
+            allDay: allDay,
+            weeks: weeks,
+            // From 0.
+            nthWeek: nthWeek,
+            fweek: range[0].day,
+            lweek: range[1].day
+        };
+    },
+
+    /**
+     * get date by nthWeeks and week day in range
+     *
+     * @private
+     * @param  {number} nthWeek the week
+     * @param  {number} day   the week day
+     * @param  {Array} range [d1, d2]
+     * @return {Object}
+     */
+    _getDateByWeeksAndDay: function (nthWeek, day, range) {
+        var rangeInfo = this._getRangeInfo(range);
+
+        if (nthWeek > rangeInfo.weeks
+            || (nthWeek === 0 && day < rangeInfo.fweek)
+            || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek)
+        ) {
+            return false;
+        }
+
+        var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;
+        var date = new Date(rangeInfo.start.time);
+        date.setDate(rangeInfo.start.d + nthDay);
+
+        return this.getDateInfo(date);
+    }
+};
+
+Calendar.dimensions =  Calendar.prototype.dimensions;
+
+Calendar.getDimensionsInfo =  Calendar.prototype.getDimensionsInfo;
+
+Calendar.create = function (ecModel, api) {
+    var calendarList = [];
+
+    ecModel.eachComponent('calendar', function (calendarModel) {
+        var calendar = new Calendar(calendarModel, ecModel, api);
+        calendarList.push(calendar);
+        calendarModel.coordinateSystem = calendar;
+    });
+
+    ecModel.eachSeries(function (calendarSeries) {
+        if (calendarSeries.get('coordinateSystem') === 'calendar') {
+            // Inject coordinate system
+            calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0];
+        }
+    });
+    return calendarList;
+};
+
+function doConvert$2(methodName, ecModel, finder, value) {
+    var calendarModel = finder.calendarModel;
+    var seriesModel = finder.seriesModel;
+
+    var coordSys = calendarModel
+        ? calendarModel.coordinateSystem
+        : seriesModel
+        ? seriesModel.coordinateSystem
+        : null;
+
+    return coordSys === this ? coordSys[methodName](value) : null;
+}
+
+CoordinateSystemManager.register('calendar', Calendar);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var CalendarModel = ComponentModel.extend({
+
+    type: 'calendar',
+
+    /**
+     * @type {module:echarts/coord/calendar/Calendar}
+     */
+    coordinateSystem: null,
+
+    defaultOption: {
+        zlevel: 0,
+        z: 2,
+        left: 80,
+        top: 60,
+
+        cellSize: 20,
+
+        // horizontal vertical
+        orient: 'horizontal',
+
+        // month separate line style
+        splitLine: {
+            show: true,
+            lineStyle: {
+                color: '#000',
+                width: 1,
+                type: 'solid'
+            }
+        },
+
+        // rect style  temporarily unused emphasis
+        itemStyle: {
+            color: '#fff',
+            borderWidth: 1,
+            borderColor: '#ccc'
+        },
+
+        // week text style
+        dayLabel: {
+            show: true,
+
+            // a week first day
+            firstDay: 0,
+
+            // start end
+            position: 'start',
+            margin: '50%', // 50% of cellSize
+            nameMap: 'en',
+            color: '#000'
+        },
+
+        // month text style
+        monthLabel: {
+            show: true,
+
+            // start end
+            position: 'start',
+            margin: 5,
+
+            // center or left
+            align: 'center',
+
+            // cn en []
+            nameMap: 'en',
+            formatter: null,
+            color: '#000'
+        },
+
+        // year text style
+        yearLabel: {
+            show: true,
+
+            // top bottom left right
+            position: null,
+            margin: 30,
+            formatter: null,
+            color: '#ccc',
+            fontFamily: 'sans-serif',
+            fontWeight: 'bolder',
+            fontSize: 20
+        }
+    },
+
+    /**
+     * @override
+     */
+    init: function (option, parentModel, ecModel, extraOpt) {
+        var inputPositionParams = getLayoutParams(option);
+
+        CalendarModel.superApply(this, 'init', arguments);
+
+        mergeAndNormalizeLayoutParams$1(option, inputPositionParams);
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function (option, extraOpt) {
+        CalendarModel.superApply(this, 'mergeOption', arguments);
+
+        mergeAndNormalizeLayoutParams$1(this.option, option);
+    }
+});
+
+function mergeAndNormalizeLayoutParams$1(target, raw) {
+    // Normalize cellSize
+    var cellSize = target.cellSize;
+
+    if (!isArray(cellSize)) {
+        cellSize = target.cellSize = [cellSize, cellSize];
+    }
+    else if (cellSize.length === 1) {
+        cellSize[1] = cellSize[0];
+    }
+
+    var ignoreSize = map([0, 1], function (hvIdx) {
+        // If user have set `width` or both `left` and `right`, cellSize
+        // will be automatically set to 'auto', otherwise the default
+        // setting of cellSize will make `width` setting not work.
+        if (sizeCalculable(raw, hvIdx)) {
+            cellSize[hvIdx] = 'auto';
+        }
+        return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto';
+    });
+
+    mergeLayoutParam(target, raw, {
+        type: 'box', ignoreSize: ignoreSize
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var MONTH_TEXT = {
+    EN: [
+        'Jan', 'Feb', 'Mar',
+        'Apr', 'May', 'Jun',
+        'Jul', 'Aug', 'Sep',
+        'Oct', 'Nov', 'Dec'
+    ],
+    CN: [
+        '一月', '二月', '三月',
+        '四月', '五月', '六月',
+        '七月', '八月', '九月',
+        '十月', '十一月', '十二月'
+    ]
+};
+
+var WEEK_TEXT = {
+    EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
+    CN: ['日', '一', '二', '三', '四', '五', '六']
+};
+
+extendComponentView({
+
+    type: 'calendar',
+
+    /**
+     * top/left line points
+     *  @private
+     */
+    _tlpoints: null,
+
+    /**
+     * bottom/right line points
+     *  @private
+     */
+    _blpoints: null,
+
+    /**
+     * first day of month
+     *  @private
+     */
+    _firstDayOfMonth: null,
+
+    /**
+     * first day point of month
+     *  @private
+     */
+    _firstDayPoints: null,
+
+    render: function (calendarModel, ecModel, api) {
+
+        var group = this.group;
+
+        group.removeAll();
+
+        var coordSys = calendarModel.coordinateSystem;
+
+        // range info
+        var rangeData = coordSys.getRangeInfo();
+        var orient = coordSys.getOrient();
+
+        this._renderDayRect(calendarModel, rangeData, group);
+
+        // _renderLines must be called prior to following function
+        this._renderLines(calendarModel, rangeData, orient, group);
+
+        this._renderYearText(calendarModel, rangeData, orient, group);
+
+        this._renderMonthText(calendarModel, orient, group);
+
+        this._renderWeekText(calendarModel, rangeData, orient, group);
+    },
+
+    // render day rect
+    _renderDayRect: function (calendarModel, rangeData, group) {
+        var coordSys = calendarModel.coordinateSystem;
+        var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle();
+        var sw = coordSys.getCellWidth();
+        var sh = coordSys.getCellHeight();
+
+        for (var i = rangeData.start.time;
+            i <= rangeData.end.time;
+            i = coordSys.getNextNDay(i, 1).time
+        ) {
+
+            var point = coordSys.dataToRect([i], false).tl;
+
+            // every rect
+            var rect = new Rect({
+                shape: {
+                    x: point[0],
+                    y: point[1],
+                    width: sw,
+                    height: sh
+                },
+                cursor: 'default',
+                style: itemRectStyleModel
+            });
+
+            group.add(rect);
+        }
+
+    },
+
+    // render separate line
+    _renderLines: function (calendarModel, rangeData, orient, group) {
+
+        var self = this;
+
+        var coordSys = calendarModel.coordinateSystem;
+
+        var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle();
+        var show = calendarModel.get('splitLine.show');
+
+        var lineWidth = lineStyleModel.lineWidth;
+
+        this._tlpoints = [];
+        this._blpoints = [];
+        this._firstDayOfMonth = [];
+        this._firstDayPoints = [];
+
+
+        var firstDay = rangeData.start;
+
+        for (var i = 0; firstDay.time <= rangeData.end.time; i++) {
+            addPoints(firstDay.formatedDate);
+
+            if (i === 0) {
+                firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m);
+            }
+
+            var date = firstDay.date;
+            date.setMonth(date.getMonth() + 1);
+            firstDay = coordSys.getDateInfo(date);
+        }
+
+        addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);
+
+        function addPoints(date) {
+
+            self._firstDayOfMonth.push(coordSys.getDateInfo(date));
+            self._firstDayPoints.push(coordSys.dataToRect([date], false).tl);
+
+            var points = self._getLinePointsOfOneWeek(calendarModel, date, orient);
+
+            self._tlpoints.push(points[0]);
+            self._blpoints.push(points[points.length - 1]);
+
+            show && self._drawSplitline(points, lineStyleModel, group);
+        }
+
+
+        // render top/left line
+        show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group);
+
+        // render bottom/right line
+        show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);
+
+    },
+
+    // get points at both ends
+    _getEdgesPoints: function (points, lineWidth, orient) {
+        var rs = [points[0].slice(), points[points.length - 1].slice()];
+        var idx = orient === 'horizontal' ? 0 : 1;
+
+        // both ends of the line are extend half lineWidth
+        rs[0][idx] = rs[0][idx] - lineWidth / 2;
+        rs[1][idx] = rs[1][idx] + lineWidth / 2;
+
+        return rs;
+    },
+
+    // render split line
+    _drawSplitline: function (points, lineStyleModel, group) {
+
+        var poyline = new Polyline({
+            z2: 20,
+            shape: {
+                points: points
+            },
+            style: lineStyleModel
+        });
+
+        group.add(poyline);
+    },
+
+    // render month line of one week points
+    _getLinePointsOfOneWeek: function (calendarModel, date, orient) {
+
+        var coordSys = calendarModel.coordinateSystem;
+        date = coordSys.getDateInfo(date);
+
+        var points = [];
+
+        for (var i = 0; i < 7; i++) {
+
+            var tmpD = coordSys.getNextNDay(date.time, i);
+            var point = coordSys.dataToRect([tmpD.time], false);
+
+            points[2 * tmpD.day] = point.tl;
+            points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr'];
+        }
+
+        return points;
+
+    },
+
+    _formatterLabel: function (formatter, params) {
+
+        if (typeof formatter === 'string' && formatter) {
+            return formatTplSimple(formatter, params);
+        }
+
+        if (typeof formatter === 'function') {
+            return formatter(params);
+        }
+
+        return params.nameMap;
+
+    },
+
+    _yearTextPositionControl: function (textEl, point, orient, position, margin) {
+
+        point = point.slice();
+        var aligns = ['center', 'bottom'];
+
+        if (position === 'bottom') {
+            point[1] += margin;
+            aligns = ['center', 'top'];
+        }
+        else if (position === 'left') {
+            point[0] -= margin;
+        }
+        else if (position === 'right') {
+            point[0] += margin;
+            aligns = ['center', 'top'];
+        }
+        else { // top
+            point[1] -= margin;
+        }
+
+        var rotate = 0;
+        if (position === 'left' || position === 'right') {
+            rotate = Math.PI / 2;
+        }
+
+        return {
+            rotation: rotate,
+            position: point,
+            style: {
+                textAlign: aligns[0],
+                textVerticalAlign: aligns[1]
+            }
+        };
+    },
+
+    // render year
+    _renderYearText: function (calendarModel, rangeData, orient, group) {
+        var yearLabel = calendarModel.getModel('yearLabel');
+
+        if (!yearLabel.get('show')) {
+            return;
+        }
+
+        var margin = yearLabel.get('margin');
+        var pos = yearLabel.get('position');
+
+        if (!pos) {
+            pos = orient !== 'horizontal' ? 'top' : 'left';
+        }
+
+        var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]];
+        var xc = (points[0][0] + points[1][0]) / 2;
+        var yc = (points[0][1] + points[1][1]) / 2;
+
+        var idx = orient === 'horizontal' ? 0 : 1;
+
+        var posPoints = {
+            top: [xc, points[idx][1]],
+            bottom: [xc, points[1 - idx][1]],
+            left: [points[1 - idx][0], yc],
+            right: [points[idx][0], yc]
+        };
+
+        var name = rangeData.start.y;
+
+        if (+rangeData.end.y > +rangeData.start.y) {
+            name = name + '-' + rangeData.end.y;
+        }
+
+        var formatter = yearLabel.get('formatter');
+
+        var params = {
+            start: rangeData.start.y,
+            end: rangeData.end.y,
+            nameMap: name
+        };
+
+        var content = this._formatterLabel(formatter, params);
+
+        var yearText = new Text({z2: 30});
+        setTextStyle(yearText.style, yearLabel, {text: content}),
+        yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));
+
+        group.add(yearText);
+    },
+
+    _monthTextPositionControl: function (point, isCenter, orient, position, margin) {
+        var align = 'left';
+        var vAlign = 'top';
+        var x = point[0];
+        var y = point[1];
+
+        if (orient === 'horizontal') {
+            y = y + margin;
+
+            if (isCenter) {
+                align = 'center';
+            }
+
+            if (position === 'start') {
+                vAlign = 'bottom';
+            }
+        }
+        else {
+            x = x + margin;
+
+            if (isCenter) {
+                vAlign = 'middle';
+            }
+
+            if (position === 'start') {
+                align = 'right';
+            }
+        }
+
+        return {
+            x: x,
+            y: y,
+            textAlign: align,
+            textVerticalAlign: vAlign
+        };
+    },
+
+    // render month and year text
+    _renderMonthText: function (calendarModel, orient, group) {
+        var monthLabel = calendarModel.getModel('monthLabel');
+
+        if (!monthLabel.get('show')) {
+            return;
+        }
+
+        var nameMap = monthLabel.get('nameMap');
+        var margin = monthLabel.get('margin');
+        var pos = monthLabel.get('position');
+        var align = monthLabel.get('align');
+
+        var termPoints = [this._tlpoints, this._blpoints];
+
+        if (isString(nameMap)) {
+            nameMap = MONTH_TEXT[nameMap.toUpperCase()] || [];
+        }
+
+        var idx = pos === 'start' ? 0 : 1;
+        var axis = orient === 'horizontal' ? 0 : 1;
+        margin = pos === 'start' ? -margin : margin;
+        var isCenter = (align === 'center');
+
+        for (var i = 0; i < termPoints[idx].length - 1; i++) {
+
+            var tmp = termPoints[idx][i].slice();
+            var firstDay = this._firstDayOfMonth[i];
+
+            if (isCenter) {
+                var firstDayPoints = this._firstDayPoints[i];
+                tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2;
+            }
+
+            var formatter = monthLabel.get('formatter');
+            var name = nameMap[+firstDay.m - 1];
+            var params = {
+                yyyy: firstDay.y,
+                yy: (firstDay.y + '').slice(2),
+                MM: firstDay.m,
+                M: +firstDay.m,
+                nameMap: name
+            };
+
+            var content = this._formatterLabel(formatter, params);
+
+            var monthText = new Text({z2: 30});
+            extend(
+                setTextStyle(monthText.style, monthLabel, {text: content}),
+                this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)
+            );
+
+            group.add(monthText);
+        }
+    },
+
+    _weekTextPositionControl: function (point, orient, position, margin, cellSize) {
+        var align = 'center';
+        var vAlign = 'middle';
+        var x = point[0];
+        var y = point[1];
+        var isStart = position === 'start';
+
+        if (orient === 'horizontal') {
+            x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2;
+            align = isStart ? 'right' : 'left';
+        }
+        else {
+            y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2;
+            vAlign = isStart ? 'bottom' : 'top';
+        }
+
+        return {
+            x: x,
+            y: y,
+            textAlign: align,
+            textVerticalAlign: vAlign
+        };
+    },
+
+    // render weeks
+    _renderWeekText: function (calendarModel, rangeData, orient, group) {
+        var dayLabel = calendarModel.getModel('dayLabel');
+
+        if (!dayLabel.get('show')) {
+            return;
+        }
+
+        var coordSys = calendarModel.coordinateSystem;
+        var pos = dayLabel.get('position');
+        var nameMap = dayLabel.get('nameMap');
+        var margin = dayLabel.get('margin');
+        var firstDayOfWeek = coordSys.getFirstDayOfWeek();
+
+        if (isString(nameMap)) {
+            nameMap = WEEK_TEXT[nameMap.toUpperCase()] || [];
+        }
+
+        var start = coordSys.getNextNDay(
+            rangeData.end.time, (7 - rangeData.lweek)
+        ).time;
+
+        var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];
+        margin = parsePercent$1(margin, cellSize[orient === 'horizontal' ? 0 : 1]);
+
+        if (pos === 'start') {
+            start = coordSys.getNextNDay(
+                rangeData.start.time, -(7 + rangeData.fweek)
+            ).time;
+            margin = -margin;
+        }
+
+        for (var i = 0; i < 7; i++) {
+
+            var tmpD = coordSys.getNextNDay(start, i);
+            var point = coordSys.dataToRect([tmpD.time], false).center;
+            var day = i;
+            day = Math.abs((i + firstDayOfWeek) % 7);
+            var weekText = new Text({z2: 30});
+
+            extend(
+                setTextStyle(weekText.style, dayLabel, {text: nameMap[day]}),
+                this._weekTextPositionControl(point, orient, pos, margin, cellSize)
+            );
+            group.add(weekText);
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file calendar.js
+ * @author dxh
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Model
+extendComponentModel({
+
+    type: 'title',
+
+    layoutMode: {type: 'box', ignoreSize: true},
+
+    defaultOption: {
+        // 一级层叠
+        zlevel: 0,
+        // 二级层叠
+        z: 6,
+        show: true,
+
+        text: '',
+        // 超链接跳转
+        // link: null,
+        // 仅支持self | blank
+        target: 'blank',
+        subtext: '',
+
+        // 超链接跳转
+        // sublink: null,
+        // 仅支持self | blank
+        subtarget: 'blank',
+
+        // 'center' ¦ 'left' ¦ 'right'
+        // ¦ {number}(x坐标,单位px)
+        left: 0,
+        // 'top' ¦ 'bottom' ¦ 'center'
+        // ¦ {number}(y坐标,单位px)
+        top: 0,
+
+        // 水平对齐
+        // 'auto' | 'left' | 'right' | 'center'
+        // 默认根据 left 的位置判断是左对齐还是右对齐
+        // textAlign: null
+        //
+        // 垂直对齐
+        // 'auto' | 'top' | 'bottom' | 'middle'
+        // 默认根据 top 位置判断是上对齐还是下对齐
+        // textBaseline: null
+
+        backgroundColor: 'rgba(0,0,0,0)',
+
+        // 标题边框颜色
+        borderColor: '#ccc',
+
+        // 标题边框线宽,单位px,默认为0(无边框)
+        borderWidth: 0,
+
+        // 标题内边距,单位px,默认各方向内边距为5,
+        // 接受数组分别设定上右下左边距,同css
+        padding: 5,
+
+        // 主副标题纵向间隔,单位px,默认为10,
+        itemGap: 10,
+        textStyle: {
+            fontSize: 18,
+            fontWeight: 'bolder',
+            color: '#333'
+        },
+        subtextStyle: {
+            color: '#aaa'
+        }
+    }
+});
+
+// View
+extendComponentView({
+
+    type: 'title',
+
+    render: function (titleModel, ecModel, api) {
+        this.group.removeAll();
+
+        if (!titleModel.get('show')) {
+            return;
+        }
+
+        var group = this.group;
+
+        var textStyleModel = titleModel.getModel('textStyle');
+        var subtextStyleModel = titleModel.getModel('subtextStyle');
+
+        var textAlign = titleModel.get('textAlign');
+        var textBaseline = titleModel.get('textBaseline');
+
+        var textEl = new Text({
+            style: setTextStyle({}, textStyleModel, {
+                text: titleModel.get('text'),
+                textFill: textStyleModel.getTextColor()
+            }, {disableBox: true}),
+            z2: 10
+        });
+
+        var textRect = textEl.getBoundingRect();
+
+        var subText = titleModel.get('subtext');
+        var subTextEl = new Text({
+            style: setTextStyle({}, subtextStyleModel, {
+                text: subText,
+                textFill: subtextStyleModel.getTextColor(),
+                y: textRect.height + titleModel.get('itemGap'),
+                textVerticalAlign: 'top'
+            }, {disableBox: true}),
+            z2: 10
+        });
+
+        var link = titleModel.get('link');
+        var sublink = titleModel.get('sublink');
+
+        textEl.silent = !link;
+        subTextEl.silent = !sublink;
+
+        if (link) {
+            textEl.on('click', function () {
+                window.open(link, '_' + titleModel.get('target'));
+            });
+        }
+        if (sublink) {
+            subTextEl.on('click', function () {
+                window.open(sublink, '_' + titleModel.get('subtarget'));
+            });
+        }
+
+        group.add(textEl);
+        subText && group.add(subTextEl);
+        // If no subText, but add subTextEl, there will be an empty line.
+
+        var groupRect = group.getBoundingRect();
+        var layoutOption = titleModel.getBoxLayoutParams();
+        layoutOption.width = groupRect.width;
+        layoutOption.height = groupRect.height;
+        var layoutRect = getLayoutRect(
+            layoutOption, {
+                width: api.getWidth(),
+                height: api.getHeight()
+            }, titleModel.get('padding')
+        );
+        // Adjust text align based on position
+        if (!textAlign) {
+            // Align left if title is on the left. center and right is same
+            textAlign = titleModel.get('left') || titleModel.get('right');
+            if (textAlign === 'middle') {
+                textAlign = 'center';
+            }
+            // Adjust layout by text align
+            if (textAlign === 'right') {
+                layoutRect.x += layoutRect.width;
+            }
+            else if (textAlign === 'center') {
+                layoutRect.x += layoutRect.width / 2;
+            }
+        }
+        if (!textBaseline) {
+            textBaseline = titleModel.get('top') || titleModel.get('bottom');
+            if (textBaseline === 'center') {
+                textBaseline = 'middle';
+            }
+            if (textBaseline === 'bottom') {
+                layoutRect.y += layoutRect.height;
+            }
+            else if (textBaseline === 'middle') {
+                layoutRect.y += layoutRect.height / 2;
+            }
+
+            textBaseline = textBaseline || 'top';
+        }
+
+        group.attr('position', [layoutRect.x, layoutRect.y]);
+        var alignStyle = {
+            textAlign: textAlign,
+            textVerticalAlign: textBaseline
+        };
+        textEl.setStyle(alignStyle);
+        subTextEl.setStyle(alignStyle);
+
+        // Render background
+        // Get groupRect again because textAlign has been changed
+        groupRect = group.getBoundingRect();
+        var padding = layoutRect.margin;
+        var style = titleModel.getItemStyle(['color', 'opacity']);
+        style.fill = titleModel.get('backgroundColor');
+        var rect = new Rect({
+            shape: {
+                x: groupRect.x - padding[3],
+                y: groupRect.y - padding[0],
+                width: groupRect.width + padding[1] + padding[3],
+                height: groupRect.height + padding[0] + padding[2],
+                r: titleModel.get('borderRadius')
+            },
+            style: style,
+            silent: true
+        });
+        subPixelOptimizeRect(rect);
+
+        group.add(rect);
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+ComponentModel.registerSubTypeDefaulter('dataZoom', function () {
+    // Default 'slider' when no type specified.
+    return 'slider';
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single'];
+// Supported coords.
+var COORDS = ['cartesian2d', 'polar', 'singleAxis'];
+
+/**
+ * @param {string} coordType
+ * @return {boolean}
+ */
+function isCoordSupported(coordType) {
+    return indexOf(COORDS, coordType) >= 0;
+}
+
+/**
+ * Create "each" method to iterate names.
+ *
+ * @pubilc
+ * @param  {Array.<string>} names
+ * @param  {Array.<string>=} attrs
+ * @return {Function}
+ */
+function createNameEach(names, attrs) {
+    names = names.slice();
+    var capitalNames = map(names, capitalFirst);
+    attrs = (attrs || []).slice();
+    var capitalAttrs = map(attrs, capitalFirst);
+
+    return function (callback, context) {
+        each$1(names, function (name, index) {
+            var nameObj = {name: name, capital: capitalNames[index]};
+
+            for (var j = 0; j < attrs.length; j++) {
+                nameObj[attrs[j]] = name + capitalAttrs[j];
+            }
+
+            callback.call(context, nameObj);
+        });
+    };
+}
+
+/**
+ * Iterate each dimension name.
+ *
+ * @public
+ * @param {Function} callback The parameter is like:
+ *                            {
+ *                                name: 'angle',
+ *                                capital: 'Angle',
+ *                                axis: 'angleAxis',
+ *                                axisIndex: 'angleAixs',
+ *                                index: 'angleIndex'
+ *                            }
+ * @param {Object} context
+ */
+var eachAxisDim$1 = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);
+
+/**
+ * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.
+ * dataZoomModels and 'links' make up one or more graphics.
+ * This function finds the graphic where the source dataZoomModel is in.
+ *
+ * @public
+ * @param {Function} forEachNode Node iterator.
+ * @param {Function} forEachEdgeType edgeType iterator
+ * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.
+ * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}
+ */
+function createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) {
+
+    return function (sourceNode) {
+        var result = {
+            nodes: [],
+            records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).
+        };
+
+        forEachEdgeType(function (edgeType) {
+            result.records[edgeType.name] = {};
+        });
+
+        if (!sourceNode) {
+            return result;
+        }
+
+        absorb(sourceNode, result);
+
+        var existsLink;
+        do {
+            existsLink = false;
+            forEachNode(processSingleNode);
+        }
+        while (existsLink);
+
+        function processSingleNode(node) {
+            if (!isNodeAbsorded(node, result) && isLinked(node, result)) {
+                absorb(node, result);
+                existsLink = true;
+            }
+        }
+
+        return result;
+    };
+
+    function isNodeAbsorded(node, result) {
+        return indexOf(result.nodes, node) >= 0;
+    }
+
+    function isLinked(node, result) {
+        var hasLink = false;
+        forEachEdgeType(function (edgeType) {
+            each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) {
+                result.records[edgeType.name][edgeId] && (hasLink = true);
+            });
+        });
+        return hasLink;
+    }
+
+    function absorb(node, result) {
+        result.nodes.push(node);
+        forEachEdgeType(function (edgeType) {
+            each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) {
+                result.records[edgeType.name][edgeId] = true;
+            });
+        });
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$22 = each$1;
+var asc$1 = asc;
+
+/**
+ * Operate single axis.
+ * One axis can only operated by one axis operator.
+ * Different dataZoomModels may be defined to operate the same axis.
+ * (i.e. 'inside' data zoom and 'slider' data zoom components)
+ * So dataZoomModels share one axisProxy in that case.
+ *
+ * @class
+ */
+var AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) {
+
+    /**
+     * @private
+     * @type {string}
+     */
+    this._dimName = dimName;
+
+    /**
+     * @private
+     */
+    this._axisIndex = axisIndex;
+
+    /**
+     * @private
+     * @type {Array.<number>}
+     */
+    this._valueWindow;
+
+    /**
+     * @private
+     * @type {Array.<number>}
+     */
+    this._percentWindow;
+
+    /**
+     * @private
+     * @type {Array.<number>}
+     */
+    this._dataExtent;
+
+    /**
+     * {minSpan, maxSpan, minValueSpan, maxValueSpan}
+     * @private
+     * @type {Object}
+     */
+    this._minMaxSpan;
+
+    /**
+     * @readOnly
+     * @type {module: echarts/model/Global}
+     */
+    this.ecModel = ecModel;
+
+    /**
+     * @private
+     * @type {module: echarts/component/dataZoom/DataZoomModel}
+     */
+    this._dataZoomModel = dataZoomModel;
+
+    // /**
+    //  * @readOnly
+    //  * @private
+    //  */
+    // this.hasSeriesStacked;
+};
+
+AxisProxy.prototype = {
+
+    constructor: AxisProxy,
+
+    /**
+     * Whether the axisProxy is hosted by dataZoomModel.
+     *
+     * @public
+     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel
+     * @return {boolean}
+     */
+    hostedBy: function (dataZoomModel) {
+        return this._dataZoomModel === dataZoomModel;
+    },
+
+    /**
+     * @return {Array.<number>} Value can only be NaN or finite value.
+     */
+    getDataValueWindow: function () {
+        return this._valueWindow.slice();
+    },
+
+    /**
+     * @return {Array.<number>}
+     */
+    getDataPercentWindow: function () {
+        return this._percentWindow.slice();
+    },
+
+    /**
+     * @public
+     * @param {number} axisIndex
+     * @return {Array} seriesModels
+     */
+    getTargetSeriesModels: function () {
+        var seriesModels = [];
+        var ecModel = this.ecModel;
+
+        ecModel.eachSeries(function (seriesModel) {
+            if (isCoordSupported(seriesModel.get('coordinateSystem'))) {
+                var dimName = this._dimName;
+                var axisModel = ecModel.queryComponents({
+                    mainType: dimName + 'Axis',
+                    index: seriesModel.get(dimName + 'AxisIndex'),
+                    id: seriesModel.get(dimName + 'AxisId')
+                })[0];
+                if (this._axisIndex === (axisModel && axisModel.componentIndex)) {
+                    seriesModels.push(seriesModel);
+                }
+            }
+        }, this);
+
+        return seriesModels;
+    },
+
+    getAxisModel: function () {
+        return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);
+    },
+
+    getOtherAxisModel: function () {
+        var axisDim = this._dimName;
+        var ecModel = this.ecModel;
+        var axisModel = this.getAxisModel();
+        var isCartesian = axisDim === 'x' || axisDim === 'y';
+        var otherAxisDim;
+        var coordSysIndexName;
+        if (isCartesian) {
+            coordSysIndexName = 'gridIndex';
+            otherAxisDim = axisDim === 'x' ? 'y' : 'x';
+        }
+        else {
+            coordSysIndexName = 'polarIndex';
+            otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle';
+        }
+        var foundOtherAxisModel;
+        ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) {
+            if ((otherAxisModel.get(coordSysIndexName) || 0)
+                === (axisModel.get(coordSysIndexName) || 0)
+            ) {
+                foundOtherAxisModel = otherAxisModel;
+            }
+        });
+        return foundOtherAxisModel;
+    },
+
+    getMinMaxSpan: function () {
+        return clone(this._minMaxSpan);
+    },
+
+    /**
+     * Only calculate by given range and this._dataExtent, do not change anything.
+     *
+     * @param {Object} opt
+     * @param {number} [opt.start]
+     * @param {number} [opt.end]
+     * @param {number} [opt.startValue]
+     * @param {number} [opt.endValue]
+     */
+    calculateDataWindow: function (opt) {
+        var dataExtent = this._dataExtent;
+        var axisModel = this.getAxisModel();
+        var scale = axisModel.axis.scale;
+        var rangePropMode = this._dataZoomModel.getRangePropMode();
+        var percentExtent = [0, 100];
+        var percentWindow = [
+            opt.start,
+            opt.end
+        ];
+        var valueWindow = [];
+
+        each$22(['startValue', 'endValue'], function (prop) {
+            valueWindow.push(opt[prop] != null ? scale.parse(opt[prop]) : null);
+        });
+
+        // Normalize bound.
+        each$22([0, 1], function (idx) {
+            var boundValue = valueWindow[idx];
+            var boundPercent = percentWindow[idx];
+
+            // Notice: dataZoom is based either on `percentProp` ('start', 'end') or
+            // on `valueProp` ('startValue', 'endValue'). The former one is suitable
+            // for cases that a dataZoom component controls multiple axes with different
+            // unit or extent, and the latter one is suitable for accurate zoom by pixel
+            // (e.g., in dataZoomSelect). `valueProp` can be calculated from `percentProp`,
+            // but it is awkward that `percentProp` can not be obtained from `valueProp`
+            // accurately (because all of values that are overflow the `dataExtent` will
+            // be calculated to percent '100%'). So we have to use
+            // `dataZoom.getRangePropMode()` to mark which prop is used.
+            // `rangePropMode` is updated only when setOption or dispatchAction, otherwise
+            // it remains its original value.
+
+            if (rangePropMode[idx] === 'percent') {
+                if (boundPercent == null) {
+                    boundPercent = percentExtent[idx];
+                }
+                // Use scale.parse to math round for category or time axis.
+                boundValue = scale.parse(linearMap(
+                    boundPercent, percentExtent, dataExtent, true
+                ));
+            }
+            else {
+                // Calculating `percent` from `value` may be not accurate, because
+                // This calculation can not be inversed, because all of values that
+                // are overflow the `dataExtent` will be calculated to percent '100%'
+                boundPercent = linearMap(
+                    boundValue, dataExtent, percentExtent, true
+                );
+            }
+
+            // valueWindow[idx] = round(boundValue);
+            // percentWindow[idx] = round(boundPercent);
+            valueWindow[idx] = boundValue;
+            percentWindow[idx] = boundPercent;
+        });
+
+        return {
+            valueWindow: asc$1(valueWindow),
+            percentWindow: asc$1(percentWindow)
+        };
+    },
+
+    /**
+     * Notice: reset should not be called before series.restoreData() called,
+     * so it is recommanded to be called in "process stage" but not "model init
+     * stage".
+     *
+     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel
+     */
+    reset: function (dataZoomModel) {
+        if (dataZoomModel !== this._dataZoomModel) {
+            return;
+        }
+
+        var targetSeries = this.getTargetSeriesModels();
+        // Culculate data window and data extent, and record them.
+        this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries);
+
+        // this.hasSeriesStacked = false;
+        // each(targetSeries, function (series) {
+            // var data = series.getData();
+            // var dataDim = data.mapDimension(this._dimName);
+            // var stackedDimension = data.getCalculationInfo('stackedDimension');
+            // if (stackedDimension && stackedDimension === dataDim) {
+                // this.hasSeriesStacked = true;
+            // }
+        // }, this);
+
+        var dataWindow = this.calculateDataWindow(dataZoomModel.option);
+
+        this._valueWindow = dataWindow.valueWindow;
+        this._percentWindow = dataWindow.percentWindow;
+
+        setMinMaxSpan(this);
+
+        // Update axis setting then.
+        setAxisModel(this);
+    },
+
+    /**
+     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel
+     */
+    restore: function (dataZoomModel) {
+        if (dataZoomModel !== this._dataZoomModel) {
+            return;
+        }
+
+        this._valueWindow = this._percentWindow = null;
+        setAxisModel(this, true);
+    },
+
+    /**
+     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel
+     */
+    filterData: function (dataZoomModel, api) {
+        if (dataZoomModel !== this._dataZoomModel) {
+            return;
+        }
+
+        var axisDim = this._dimName;
+        var seriesModels = this.getTargetSeriesModels();
+        var filterMode = dataZoomModel.get('filterMode');
+        var valueWindow = this._valueWindow;
+
+        if (filterMode === 'none') {
+            return;
+        }
+
+        // FIXME
+        // Toolbox may has dataZoom injected. And if there are stacked bar chart
+        // with NaN data, NaN will be filtered and stack will be wrong.
+        // So we need to force the mode to be set empty.
+        // In fect, it is not a big deal that do not support filterMode-'filter'
+        // when using toolbox#dataZoom, utill tooltip#dataZoom support "single axis
+        // selection" some day, which might need "adapt to data extent on the
+        // otherAxis", which is disabled by filterMode-'empty'.
+        // But currently, stack has been fixed to based on value but not index,
+        // so this is not an issue any more.
+        // var otherAxisModel = this.getOtherAxisModel();
+        // if (dataZoomModel.get('$fromToolbox')
+        //     && otherAxisModel
+        //     && otherAxisModel.hasSeriesStacked
+        // ) {
+        //     filterMode = 'empty';
+        // }
+
+        // TODO
+        // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet.
+
+        // Process series data
+        each$22(seriesModels, function (seriesModel) {
+            var seriesData = seriesModel.getData();
+            var dataDims = seriesData.mapDimension(axisDim, true);
+
+            if (filterMode === 'weakFilter') {
+                seriesData.filterSelf(function (dataIndex) {
+                    var leftOut;
+                    var rightOut;
+                    var hasValue;
+                    for (var i = 0; i < dataDims.length; i++) {
+                        var value = seriesData.get(dataDims[i], dataIndex);
+                        var thisHasValue = !isNaN(value);
+                        var thisLeftOut = value < valueWindow[0];
+                        var thisRightOut = value > valueWindow[1];
+                        if (thisHasValue && !thisLeftOut && !thisRightOut) {
+                            return true;
+                        }
+                        thisHasValue && (hasValue = true);
+                        thisLeftOut && (leftOut = true);
+                        thisRightOut && (rightOut = true);
+                    }
+                    // If both left out and right out, do not filter.
+                    return hasValue && leftOut && rightOut;
+                });
+            }
+            else {
+                each$22(dataDims, function (dim) {
+                    if (filterMode === 'empty') {
+                        seriesModel.setData(
+                            seriesData.map(dim, function (value) {
+                                return !isInWindow(value) ? NaN : value;
+                            })
+                        );
+                    }
+                    else {
+                        var range = {};
+                        range[dim] = valueWindow;
+
+                        // console.time('select');
+                        seriesData.selectRange(range);
+                        // console.timeEnd('select');
+                    }
+                });
+            }
+
+            each$22(dataDims, function (dim) {
+                seriesData.setApproximateExtent(valueWindow, dim);
+            });
+        });
+
+        function isInWindow(value) {
+            return value >= valueWindow[0] && value <= valueWindow[1];
+        }
+    }
+};
+
+function calculateDataExtent(axisProxy, axisDim, seriesModels) {
+    var dataExtent = [Infinity, -Infinity];
+
+    each$22(seriesModels, function (seriesModel) {
+        var seriesData = seriesModel.getData();
+        if (seriesData) {
+            each$22(seriesData.mapDimension(axisDim, true), function (dim) {
+                var seriesExtent = seriesData.getApproximateExtent(dim);
+                seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);
+                seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);
+            });
+        }
+    });
+
+    if (dataExtent[1] < dataExtent[0]) {
+        dataExtent = [NaN, NaN];
+    }
+
+    // It is important to get "consistent" extent when more then one axes is
+    // controlled by a `dataZoom`, otherwise those axes will not be synchronized
+    // when zooming. But it is difficult to know what is "consistent", considering
+    // axes have different type or even different meanings (For example, two
+    // time axes are used to compare data of the same date in different years).
+    // So basically dataZoom just obtains extent by series.data (in category axis
+    // extent can be obtained from axis.data).
+    // Nevertheless, user can set min/max/scale on axes to make extent of axes
+    // consistent.
+    fixExtentByAxis(axisProxy, dataExtent);
+
+    return dataExtent;
+}
+
+function fixExtentByAxis(axisProxy, dataExtent) {
+    var axisModel = axisProxy.getAxisModel();
+    var min = axisModel.getMin(true);
+
+    // For category axis, if min/max/scale are not set, extent is determined
+    // by axis.data by default.
+    var isCategoryAxis = axisModel.get('type') === 'category';
+    var axisDataLen = isCategoryAxis && axisModel.getCategories().length;
+
+    if (min != null && min !== 'dataMin' && typeof min !== 'function') {
+        dataExtent[0] = min;
+    }
+    else if (isCategoryAxis) {
+        dataExtent[0] = axisDataLen > 0 ? 0 : NaN;
+    }
+
+    var max = axisModel.getMax(true);
+    if (max != null && max !== 'dataMax' && typeof max !== 'function') {
+        dataExtent[1] = max;
+    }
+    else if (isCategoryAxis) {
+        dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN;
+    }
+
+    if (!axisModel.get('scale', true)) {
+        dataExtent[0] > 0 && (dataExtent[0] = 0);
+        dataExtent[1] < 0 && (dataExtent[1] = 0);
+    }
+
+    // For value axis, if min/max/scale are not set, we just use the extent obtained
+    // by series data, which may be a little different from the extent calculated by
+    // `axisHelper.getScaleExtent`. But the different just affects the experience a
+    // little when zooming. So it will not be fixed until some users require it strongly.
+
+    return dataExtent;
+}
+
+function setAxisModel(axisProxy, isRestore) {
+    var axisModel = axisProxy.getAxisModel();
+
+    var percentWindow = axisProxy._percentWindow;
+    var valueWindow = axisProxy._valueWindow;
+
+    if (!percentWindow) {
+        return;
+    }
+
+    // [0, 500]: arbitrary value, guess axis extent.
+    var precision = getPixelPrecision(valueWindow, [0, 500]);
+    precision = Math.min(precision, 20);
+    // isRestore or isFull
+    var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100);
+
+    axisModel.setRange(
+        useOrigin ? null : +valueWindow[0].toFixed(precision),
+        useOrigin ? null : +valueWindow[1].toFixed(precision)
+    );
+}
+
+function setMinMaxSpan(axisProxy) {
+    var minMaxSpan = axisProxy._minMaxSpan = {};
+    var dataZoomModel = axisProxy._dataZoomModel;
+
+    each$22(['min', 'max'], function (minMax) {
+        minMaxSpan[minMax + 'Span'] = dataZoomModel.get(minMax + 'Span');
+
+        // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan
+        var valueSpan = dataZoomModel.get(minMax + 'ValueSpan');
+
+        if (valueSpan != null) {
+            minMaxSpan[minMax + 'ValueSpan'] = valueSpan;
+            valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan);
+
+            if (valueSpan != null) {
+                var dataExtent = axisProxy._dataExtent;
+                minMaxSpan[minMax + 'Span'] = linearMap(
+                    dataExtent[0] + valueSpan, dataExtent, [0, 100], true
+                );
+            }
+        }
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$21 = each$1;
+var eachAxisDim = eachAxisDim$1;
+
+var DataZoomModel = extendComponentModel({
+
+    type: 'dataZoom',
+
+    dependencies: [
+        'xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series'
+    ],
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        zlevel: 0,
+        z: 4,                   // Higher than normal component (z: 2).
+        orient: null,           // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.
+        xAxisIndex: null,       // Default the first horizontal category axis.
+        yAxisIndex: null,       // Default the first vertical category axis.
+
+        filterMode: 'filter',   // Possible values: 'filter' or 'empty' or 'weakFilter'.
+                                // 'filter': data items which are out of window will be removed. This option is
+                                //          applicable when filtering outliers. For each data item, it will be
+                                //          filtered if one of the relevant dimensions is out of the window.
+                                // 'weakFilter': data items which are out of window will be removed. This option
+                                //          is applicable when filtering outliers. For each data item, it will be
+                                //          filtered only if all  of the relevant dimensions are out of the same
+                                //          side of the window.
+                                // 'empty': data items which are out of window will be set to empty.
+                                //          This option is applicable when user should not neglect
+                                //          that there are some data items out of window.
+                                // 'none': Do not filter.
+                                // Taking line chart as an example, line will be broken in
+                                // the filtered points when filterModel is set to 'empty', but
+                                // be connected when set to 'filter'.
+
+        throttle: null,         // Dispatch action by the fixed rate, avoid frequency.
+                                // default 100. Do not throttle when use null/undefined.
+                                // If animation === true and animationDurationUpdate > 0,
+                                // default value is 100, otherwise 20.
+        start: 0,               // Start percent. 0 ~ 100
+        end: 100,               // End percent. 0 ~ 100
+        startValue: null,       // Start value. If startValue specified, start is ignored.
+        endValue: null,         // End value. If endValue specified, end is ignored.
+        minSpan: null,          // 0 ~ 100
+        maxSpan: null,          // 0 ~ 100
+        minValueSpan: null,     // The range of dataZoom can not be smaller than that.
+        maxValueSpan: null,     // The range of dataZoom can not be larger than that.
+        rangeMode: null         // Array, can be 'value' or 'percent'.
+    },
+
+    /**
+     * @override
+     */
+    init: function (option, parentModel, ecModel) {
+
+        /**
+         * key like x_0, y_1
+         * @private
+         * @type {Object}
+         */
+        this._dataIntervalByAxis = {};
+
+        /**
+         * @private
+         */
+        this._dataInfo = {};
+
+        /**
+         * key like x_0, y_1
+         * @private
+         */
+        this._axisProxies = {};
+
+        /**
+         * @readOnly
+         */
+        this.textStyleModel;
+
+        /**
+         * @private
+         */
+        this._autoThrottle = true;
+
+        /**
+         * 'percent' or 'value'
+         * @private
+         */
+        this._rangePropMode = ['percent', 'percent'];
+
+        var rawOption = retrieveRaw(option);
+
+        this.mergeDefaultAndTheme(option, ecModel);
+
+        this.doInit(rawOption);
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function (newOption) {
+        var rawOption = retrieveRaw(newOption);
+
+        //FIX #2591
+        merge(this.option, newOption, true);
+
+        this.doInit(rawOption);
+    },
+
+    /**
+     * @protected
+     */
+    doInit: function (rawOption) {
+        var thisOption = this.option;
+
+        // Disable realtime view update if canvas is not supported.
+        if (!env$1.canvasSupported) {
+            thisOption.realtime = false;
+        }
+
+        this._setDefaultThrottle(rawOption);
+
+        updateRangeUse(this, rawOption);
+
+        each$21([['start', 'startValue'], ['end', 'endValue']], function (names, index) {
+            // start/end has higher priority over startValue/endValue if they
+            // both set, but we should make chart.setOption({endValue: 1000})
+            // effective, rather than chart.setOption({endValue: 1000, end: null}).
+            if (this._rangePropMode[index] === 'value') {
+                thisOption[names[0]] = null;
+            }
+            // Otherwise do nothing and use the merge result.
+        }, this);
+
+        this.textStyleModel = this.getModel('textStyle');
+
+        this._resetTarget();
+
+        this._giveAxisProxies();
+    },
+
+    /**
+     * @private
+     */
+    _giveAxisProxies: function () {
+        var axisProxies = this._axisProxies;
+
+        this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) {
+            var axisModel = this.dependentModels[dimNames.axis][axisIndex];
+
+            // If exists, share axisProxy with other dataZoomModels.
+            var axisProxy = axisModel.__dzAxisProxy || (
+                // Use the first dataZoomModel as the main model of axisProxy.
+                axisModel.__dzAxisProxy = new AxisProxy(
+                    dimNames.name, axisIndex, this, ecModel
+                )
+            );
+            // FIXME
+            // dispose __dzAxisProxy
+
+            axisProxies[dimNames.name + '_' + axisIndex] = axisProxy;
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _resetTarget: function () {
+        var thisOption = this.option;
+
+        var autoMode = this._judgeAutoMode();
+
+        eachAxisDim(function (dimNames) {
+            var axisIndexName = dimNames.axisIndex;
+            thisOption[axisIndexName] = normalizeToArray(
+                thisOption[axisIndexName]
+            );
+        }, this);
+
+        if (autoMode === 'axisIndex') {
+            this._autoSetAxisIndex();
+        }
+        else if (autoMode === 'orient') {
+            this._autoSetOrient();
+        }
+    },
+
+    /**
+     * @private
+     */
+    _judgeAutoMode: function () {
+        // Auto set only works for setOption at the first time.
+        // The following is user's reponsibility. So using merged
+        // option is OK.
+        var thisOption = this.option;
+
+        var hasIndexSpecified = false;
+        eachAxisDim(function (dimNames) {
+            // When user set axisIndex as a empty array, we think that user specify axisIndex
+            // but do not want use auto mode. Because empty array may be encountered when
+            // some error occured.
+            if (thisOption[dimNames.axisIndex] != null) {
+                hasIndexSpecified = true;
+            }
+        }, this);
+
+        var orient = thisOption.orient;
+
+        if (orient == null && hasIndexSpecified) {
+            return 'orient';
+        }
+        else if (!hasIndexSpecified) {
+            if (orient == null) {
+                thisOption.orient = 'horizontal';
+            }
+            return 'axisIndex';
+        }
+    },
+
+    /**
+     * @private
+     */
+    _autoSetAxisIndex: function () {
+        var autoAxisIndex = true;
+        var orient = this.get('orient', true);
+        var thisOption = this.option;
+        var dependentModels = this.dependentModels;
+
+        if (autoAxisIndex) {
+            // Find axis that parallel to dataZoom as default.
+            var dimName = orient === 'vertical' ? 'y' : 'x';
+
+            if (dependentModels[dimName + 'Axis'].length) {
+                thisOption[dimName + 'AxisIndex'] = [0];
+                autoAxisIndex = false;
+            }
+            else {
+                each$21(dependentModels.singleAxis, function (singleAxisModel) {
+                    if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) {
+                        thisOption.singleAxisIndex = [singleAxisModel.componentIndex];
+                        autoAxisIndex = false;
+                    }
+                });
+            }
+        }
+
+        if (autoAxisIndex) {
+            // Find the first category axis as default. (consider polar)
+            eachAxisDim(function (dimNames) {
+                if (!autoAxisIndex) {
+                    return;
+                }
+                var axisIndices = [];
+                var axisModels = this.dependentModels[dimNames.axis];
+                if (axisModels.length && !axisIndices.length) {
+                    for (var i = 0, len = axisModels.length; i < len; i++) {
+                        if (axisModels[i].get('type') === 'category') {
+                            axisIndices.push(i);
+                        }
+                    }
+                }
+                thisOption[dimNames.axisIndex] = axisIndices;
+                if (axisIndices.length) {
+                    autoAxisIndex = false;
+                }
+            }, this);
+        }
+
+        if (autoAxisIndex) {
+            // FIXME
+            // 这里是兼容ec2的写法(没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制),
+            // 但是实际是否需要Grid.js#getScaleByOption来判断(考虑time,log等axis type)?
+
+            // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified,
+            // dataZoom component auto adopts series that reference to
+            // both xAxis and yAxis which type is 'value'.
+            this.ecModel.eachSeries(function (seriesModel) {
+                if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) {
+                    eachAxisDim(function (dimNames) {
+                        var axisIndices = thisOption[dimNames.axisIndex];
+
+                        var axisIndex = seriesModel.get(dimNames.axisIndex);
+                        var axisId = seriesModel.get(dimNames.axisId);
+
+                        var axisModel = seriesModel.ecModel.queryComponents({
+                            mainType: dimNames.axis,
+                            index: axisIndex,
+                            id: axisId
+                        })[0];
+
+                        if (__DEV__) {
+                            if (!axisModel) {
+                                throw new Error(
+                                    dimNames.axis + ' "' + retrieve(
+                                        axisIndex,
+                                        axisId,
+                                        0
+                                    ) + '" not found'
+                                );
+                            }
+                        }
+                        axisIndex = axisModel.componentIndex;
+
+                        if (indexOf(axisIndices, axisIndex) < 0) {
+                            axisIndices.push(axisIndex);
+                        }
+                    });
+                }
+            }, this);
+        }
+    },
+
+    /**
+     * @private
+     */
+    _autoSetOrient: function () {
+        var dim;
+
+        // Find the first axis
+        this.eachTargetAxis(function (dimNames) {
+            !dim && (dim = dimNames.name);
+        }, this);
+
+        this.option.orient = dim === 'y' ? 'vertical' : 'horizontal';
+    },
+
+    /**
+     * @private
+     */
+    _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) {
+        // FIXME
+        // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。
+        // 例如series.type === scatter时。
+
+        var is = true;
+        eachAxisDim(function (dimNames) {
+            var seriesAxisIndex = seriesModel.get(dimNames.axisIndex);
+            var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex];
+
+            if (!axisModel || axisModel.get('type') !== axisType) {
+                is = false;
+            }
+        }, this);
+        return is;
+    },
+
+    /**
+     * @private
+     */
+    _setDefaultThrottle: function (rawOption) {
+        // When first time user set throttle, auto throttle ends.
+        if (rawOption.hasOwnProperty('throttle')) {
+            this._autoThrottle = false;
+        }
+        if (this._autoThrottle) {
+            var globalOption = this.ecModel.option;
+            this.option.throttle =
+                (globalOption.animation && globalOption.animationDurationUpdate > 0)
+                ? 100 : 20;
+        }
+    },
+
+    /**
+     * @public
+     */
+    getFirstTargetAxisModel: function () {
+        var firstAxisModel;
+        eachAxisDim(function (dimNames) {
+            if (firstAxisModel == null) {
+                var indices = this.get(dimNames.axisIndex);
+                if (indices.length) {
+                    firstAxisModel = this.dependentModels[dimNames.axis][indices[0]];
+                }
+            }
+        }, this);
+
+        return firstAxisModel;
+    },
+
+    /**
+     * @public
+     * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel
+     */
+    eachTargetAxis: function (callback, context) {
+        var ecModel = this.ecModel;
+        eachAxisDim(function (dimNames) {
+            each$21(
+                this.get(dimNames.axisIndex),
+                function (axisIndex) {
+                    callback.call(context, dimNames, axisIndex, this, ecModel);
+                },
+                this
+            );
+        }, this);
+    },
+
+    /**
+     * @param {string} dimName
+     * @param {number} axisIndex
+     * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined.
+     */
+    getAxisProxy: function (dimName, axisIndex) {
+        return this._axisProxies[dimName + '_' + axisIndex];
+    },
+
+    /**
+     * @param {string} dimName
+     * @param {number} axisIndex
+     * @return {module:echarts/model/Model} If not found, return null/undefined.
+     */
+    getAxisModel: function (dimName, axisIndex) {
+        var axisProxy = this.getAxisProxy(dimName, axisIndex);
+        return axisProxy && axisProxy.getAxisModel();
+    },
+
+    /**
+     * If not specified, set to undefined.
+     *
+     * @public
+     * @param {Object} opt
+     * @param {number} [opt.start]
+     * @param {number} [opt.end]
+     * @param {number} [opt.startValue]
+     * @param {number} [opt.endValue]
+     * @param {boolean} [ignoreUpdateRangeUsg=false]
+     */
+    setRawRange: function (opt, ignoreUpdateRangeUsg) {
+        var option = this.option;
+        each$21([['start', 'startValue'], ['end', 'endValue']], function (names) {
+            // If only one of 'start' and 'startValue' is not null/undefined, the other
+            // should be cleared, which enable clear the option.
+            // If both of them are not set, keep option with the original value, which
+            // enable use only set start but not set end when calling `dispatchAction`.
+            // The same as 'end' and 'endValue'.
+            if (opt[names[0]] != null || opt[names[1]] != null) {
+                option[names[0]] = opt[names[0]];
+                option[names[1]] = opt[names[1]];
+            }
+        }, this);
+
+        !ignoreUpdateRangeUsg && updateRangeUse(this, opt);
+    },
+
+    /**
+     * @public
+     * @return {Array.<number>} [startPercent, endPercent]
+     */
+    getPercentRange: function () {
+        var axisProxy = this.findRepresentativeAxisProxy();
+        if (axisProxy) {
+            return axisProxy.getDataPercentWindow();
+        }
+    },
+
+    /**
+     * @public
+     * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0);
+     *
+     * @param {string} [axisDimName]
+     * @param {number} [axisIndex]
+     * @return {Array.<number>} [startValue, endValue] value can only be '-' or finite number.
+     */
+    getValueRange: function (axisDimName, axisIndex) {
+        if (axisDimName == null && axisIndex == null) {
+            var axisProxy = this.findRepresentativeAxisProxy();
+            if (axisProxy) {
+                return axisProxy.getDataValueWindow();
+            }
+        }
+        else {
+            return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow();
+        }
+    },
+
+    /**
+     * @public
+     * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy
+     *      corresponding to the axisModel
+     * @return {module:echarts/component/dataZoom/AxisProxy}
+     */
+    findRepresentativeAxisProxy: function (axisModel) {
+        if (axisModel) {
+            return axisModel.__dzAxisProxy;
+        }
+
+        // Find the first hosted axisProxy
+        var axisProxies = this._axisProxies;
+        for (var key in axisProxies) {
+            if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) {
+                return axisProxies[key];
+            }
+        }
+
+        // If no hosted axis find not hosted axisProxy.
+        // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis,
+        // and the option.start or option.end settings are different. The percentRange
+        // should follow axisProxy.
+        // (We encounter this problem in toolbox data zoom.)
+        for (var key in axisProxies) {
+            if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) {
+                return axisProxies[key];
+            }
+        }
+    },
+
+    /**
+     * @return {Array.<string>}
+     */
+    getRangePropMode: function () {
+        return this._rangePropMode.slice();
+    }
+
+});
+
+function retrieveRaw(option) {
+    var ret = {};
+    each$21(
+        ['start', 'end', 'startValue', 'endValue', 'throttle'],
+        function (name) {
+            option.hasOwnProperty(name) && (ret[name] = option[name]);
+        }
+    );
+    return ret;
+}
+
+function updateRangeUse(dataZoomModel, rawOption) {
+    var rangePropMode = dataZoomModel._rangePropMode;
+    var rangeModeInOption = dataZoomModel.get('rangeMode');
+
+    each$21([['start', 'startValue'], ['end', 'endValue']], function (names, index) {
+        var percentSpecified = rawOption[names[0]] != null;
+        var valueSpecified = rawOption[names[1]] != null;
+        if (percentSpecified && !valueSpecified) {
+            rangePropMode[index] = 'percent';
+        }
+        else if (!percentSpecified && valueSpecified) {
+            rangePropMode[index] = 'value';
+        }
+        else if (rangeModeInOption) {
+            rangePropMode[index] = rangeModeInOption[index];
+        }
+        else if (percentSpecified) { // percentSpecified && valueSpecified
+            rangePropMode[index] = 'percent';
+        }
+        // else remain its original setting.
+    });
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var DataZoomView = Component.extend({
+
+    type: 'dataZoom',
+
+    render: function (dataZoomModel, ecModel, api, payload) {
+        this.dataZoomModel = dataZoomModel;
+        this.ecModel = ecModel;
+        this.api = api;
+    },
+
+    /**
+     * Find the first target coordinate system.
+     *
+     * @protected
+     * @return {Object} {
+     *                   grid: [
+     *                       {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},
+     *                       {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},
+     *                       ...
+     *                   ],  // cartesians must not be null/undefined.
+     *                   polar: [
+     *                       {model: coord0, axisModels: [axis4], coordIndex: 0},
+     *                       ...
+     *                   ],  // polars must not be null/undefined.
+     *                   singleAxis: [
+     *                       {model: coord0, axisModels: [], coordIndex: 0}
+     *                   ]
+     */
+    getTargetCoordInfo: function () {
+        var dataZoomModel = this.dataZoomModel;
+        var ecModel = this.ecModel;
+        var coordSysLists = {};
+
+        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {
+            var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);
+            if (axisModel) {
+                var coordModel = axisModel.getCoordSysModel();
+                coordModel && save(
+                    coordModel,
+                    axisModel,
+                    coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []),
+                    coordModel.componentIndex
+                );
+            }
+        }, this);
+
+        function save(coordModel, axisModel, store, coordIndex) {
+            var item;
+            for (var i = 0; i < store.length; i++) {
+                if (store[i].model === coordModel) {
+                    item = store[i];
+                    break;
+                }
+            }
+            if (!item) {
+                store.push(item = {
+                    model: coordModel, axisModels: [], coordIndex: coordIndex
+                });
+            }
+            item.axisModels.push(axisModel);
+        }
+
+        return coordSysLists;
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var SliderZoomModel = DataZoomModel.extend({
+
+    type: 'dataZoom.slider',
+
+    layoutMode: 'box',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        show: true,
+
+        // ph => placeholder. Using placehoder here because
+        // deault value can only be drived in view stage.
+        right: 'ph',  // Default align to grid rect.
+        top: 'ph',    // Default align to grid rect.
+        width: 'ph',  // Default align to grid rect.
+        height: 'ph', // Default align to grid rect.
+        left: null,   // Default align to grid rect.
+        bottom: null, // Default align to grid rect.
+
+        backgroundColor: 'rgba(47,69,84,0)',    // Background of slider zoom component.
+        // dataBackgroundColor: '#ddd',         // Background coor of data shadow and border of box,
+                                                // highest priority, remain for compatibility of
+                                                // previous version, but not recommended any more.
+        dataBackground: {
+            lineStyle: {
+                color: '#2f4554',
+                width: 0.5,
+                opacity: 0.3
+            },
+            areaStyle: {
+                color: 'rgba(47,69,84,0.3)',
+                opacity: 0.3
+            }
+        },
+        borderColor: '#ddd',                    // border color of the box. For compatibility,
+                                                // if dataBackgroundColor is set, borderColor
+                                                // is ignored.
+
+        fillerColor: 'rgba(167,183,204,0.4)',     // Color of selected area.
+        // handleColor: 'rgba(89,170,216,0.95)',     // Color of handle.
+        // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z',
+        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',
+        // Percent of the slider height
+        handleSize: '100%',
+
+        handleStyle: {
+            color: '#a7b7cc'
+        },
+
+        labelPrecision: null,
+        labelFormatter: null,
+        showDetail: true,
+        showDataShadow: 'auto',                 // Default auto decision.
+        realtime: true,
+        zoomLock: false,                        // Whether disable zoom.
+        textStyle: {
+            color: '#333'
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var Rect$2 = Rect;
+var linearMap$1 = linearMap;
+var asc$2 = asc;
+var bind$4 = bind;
+var each$23 = each$1;
+
+// Constants
+var DEFAULT_LOCATION_EDGE_GAP = 7;
+var DEFAULT_FRAME_BORDER_WIDTH = 1;
+var DEFAULT_FILLER_SIZE = 30;
+var HORIZONTAL = 'horizontal';
+var VERTICAL = 'vertical';
+var LABEL_GAP = 5;
+var SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];
+
+var SliderZoomView = DataZoomView.extend({
+
+    type: 'dataZoom.slider',
+
+    init: function (ecModel, api) {
+
+        /**
+         * @private
+         * @type {Object}
+         */
+        this._displayables = {};
+
+        /**
+         * @private
+         * @type {string}
+         */
+        this._orient;
+
+        /**
+         * [0, 100]
+         * @private
+         */
+        this._range;
+
+        /**
+         * [coord of the first handle, coord of the second handle]
+         * @private
+         */
+        this._handleEnds;
+
+        /**
+         * [length, thick]
+         * @private
+         * @type {Array.<number>}
+         */
+        this._size;
+
+        /**
+         * @private
+         * @type {number}
+         */
+        this._handleWidth;
+
+        /**
+         * @private
+         * @type {number}
+         */
+        this._handleHeight;
+
+        /**
+         * @private
+         */
+        this._location;
+
+        /**
+         * @private
+         */
+        this._dragging;
+
+        /**
+         * @private
+         */
+        this._dataShadowInfo;
+
+        this.api = api;
+    },
+
+    /**
+     * @override
+     */
+    render: function (dataZoomModel, ecModel, api, payload) {
+        SliderZoomView.superApply(this, 'render', arguments);
+
+        createOrUpdate(
+            this,
+            '_dispatchZoomAction',
+            this.dataZoomModel.get('throttle'),
+            'fixRate'
+        );
+
+        this._orient = dataZoomModel.get('orient');
+
+        if (this.dataZoomModel.get('show') === false) {
+            this.group.removeAll();
+            return;
+        }
+
+        // Notice: this._resetInterval() should not be executed when payload.type
+        // is 'dataZoom', origin this._range should be maintained, otherwise 'pan'
+        // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction,
+        if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) {
+            this._buildView();
+        }
+
+        this._updateView();
+    },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        SliderZoomView.superApply(this, 'remove', arguments);
+        clear(this, '_dispatchZoomAction');
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        SliderZoomView.superApply(this, 'dispose', arguments);
+        clear(this, '_dispatchZoomAction');
+    },
+
+    _buildView: function () {
+        var thisGroup = this.group;
+
+        thisGroup.removeAll();
+
+        this._resetLocation();
+        this._resetInterval();
+
+        var barGroup = this._displayables.barGroup = new Group();
+
+        this._renderBackground();
+
+        this._renderHandle();
+
+        this._renderDataShadow();
+
+        thisGroup.add(barGroup);
+
+        this._positionGroup();
+    },
+
+    /**
+     * @private
+     */
+    _resetLocation: function () {
+        var dataZoomModel = this.dataZoomModel;
+        var api = this.api;
+
+        // If some of x/y/width/height are not specified,
+        // auto-adapt according to target grid.
+        var coordRect = this._findCoordRect();
+        var ecSize = {width: api.getWidth(), height: api.getHeight()};
+        // Default align by coordinate system rect.
+        var positionInfo = this._orient === HORIZONTAL
+            ? {
+                // Why using 'right', because right should be used in vertical,
+                // and it is better to be consistent for dealing with position param merge.
+                right: ecSize.width - coordRect.x - coordRect.width,
+                top: (ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP),
+                width: coordRect.width,
+                height: DEFAULT_FILLER_SIZE
+            }
+            : { // vertical
+                right: DEFAULT_LOCATION_EDGE_GAP,
+                top: coordRect.y,
+                width: DEFAULT_FILLER_SIZE,
+                height: coordRect.height
+            };
+
+        // Do not write back to option and replace value 'ph', because
+        // the 'ph' value should be recalculated when resize.
+        var layoutParams = getLayoutParams(dataZoomModel.option);
+
+        // Replace the placeholder value.
+        each$1(['right', 'top', 'width', 'height'], function (name) {
+            if (layoutParams[name] === 'ph') {
+                layoutParams[name] = positionInfo[name];
+            }
+        });
+
+        var layoutRect = getLayoutRect(
+            layoutParams,
+            ecSize,
+            dataZoomModel.padding
+        );
+
+        this._location = {x: layoutRect.x, y: layoutRect.y};
+        this._size = [layoutRect.width, layoutRect.height];
+        this._orient === VERTICAL && this._size.reverse();
+    },
+
+    /**
+     * @private
+     */
+    _positionGroup: function () {
+        var thisGroup = this.group;
+        var location = this._location;
+        var orient = this._orient;
+
+        // Just use the first axis to determine mapping.
+        var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();
+        var inverse = targetAxisModel && targetAxisModel.get('inverse');
+
+        var barGroup = this._displayables.barGroup;
+        var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse;
+
+        // Transform barGroup.
+        barGroup.attr(
+            (orient === HORIZONTAL && !inverse)
+            ? {scale: otherAxisInverse ? [1, 1] : [1, -1]}
+            : (orient === HORIZONTAL && inverse)
+            ? {scale: otherAxisInverse ? [-1, 1] : [-1, -1]}
+            : (orient === VERTICAL && !inverse)
+            ? {scale: otherAxisInverse ? [1, -1] : [1, 1], rotation: Math.PI / 2}
+            // Dont use Math.PI, considering shadow direction.
+            : {scale: otherAxisInverse ? [-1, -1] : [-1, 1], rotation: Math.PI / 2}
+        );
+
+        // Position barGroup
+        var rect = thisGroup.getBoundingRect([barGroup]);
+        thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]);
+    },
+
+    /**
+     * @private
+     */
+    _getViewExtent: function () {
+        return [0, this._size[0]];
+    },
+
+    _renderBackground: function () {
+        var dataZoomModel = this.dataZoomModel;
+        var size = this._size;
+        var barGroup = this._displayables.barGroup;
+
+        barGroup.add(new Rect$2({
+            silent: true,
+            shape: {
+                x: 0, y: 0, width: size[0], height: size[1]
+            },
+            style: {
+                fill: dataZoomModel.get('backgroundColor')
+            },
+            z2: -40
+        }));
+
+        // Click panel, over shadow, below handles.
+        barGroup.add(new Rect$2({
+            shape: {
+                x: 0, y: 0, width: size[0], height: size[1]
+            },
+            style: {
+                fill: 'transparent'
+            },
+            z2: 0,
+            onclick: bind(this._onClickPanelClick, this)
+        }));
+    },
+
+    _renderDataShadow: function () {
+        var info = this._dataShadowInfo = this._prepareDataShadowInfo();
+
+        if (!info) {
+            return;
+        }
+
+        var size = this._size;
+        var seriesModel = info.series;
+        var data = seriesModel.getRawData();
+
+        var otherDim = seriesModel.getShadowDim
+            ? seriesModel.getShadowDim() // @see candlestick
+            : info.otherDim;
+
+        if (otherDim == null) {
+            return;
+        }
+
+        var otherDataExtent = data.getDataExtent(otherDim);
+        // Nice extent.
+        var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3;
+        otherDataExtent = [
+            otherDataExtent[0] - otherOffset,
+            otherDataExtent[1] + otherOffset
+        ];
+        var otherShadowExtent = [0, size[1]];
+
+        var thisShadowExtent = [0, size[0]];
+
+        var areaPoints = [[size[0], 0], [0, 0]];
+        var linePoints = [];
+        var step = thisShadowExtent[1] / (data.count() - 1);
+        var thisCoord = 0;
+
+        // Optimize for large data shadow
+        var stride = Math.round(data.count() / size[0]);
+        var lastIsEmpty;
+        data.each([otherDim], function (value, index) {
+            if (stride > 0 && (index % stride)) {
+                thisCoord += step;
+                return;
+            }
+
+            // FIXME
+            // Should consider axis.min/axis.max when drawing dataShadow.
+
+            // FIXME
+            // 应该使用统一的空判断?还是在list里进行空判断?
+            var isEmpty = value == null || isNaN(value) || value === '';
+            // See #4235.
+            var otherCoord = isEmpty
+                ? 0 : linearMap$1(value, otherDataExtent, otherShadowExtent, true);
+
+            // Attempt to draw data shadow precisely when there are empty value.
+            if (isEmpty && !lastIsEmpty && index) {
+                areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);
+                linePoints.push([linePoints[linePoints.length - 1][0], 0]);
+            }
+            else if (!isEmpty && lastIsEmpty) {
+                areaPoints.push([thisCoord, 0]);
+                linePoints.push([thisCoord, 0]);
+            }
+
+            areaPoints.push([thisCoord, otherCoord]);
+            linePoints.push([thisCoord, otherCoord]);
+
+            thisCoord += step;
+            lastIsEmpty = isEmpty;
+        });
+
+        var dataZoomModel = this.dataZoomModel;
+        // var dataBackgroundModel = dataZoomModel.getModel('dataBackground');
+        this._displayables.barGroup.add(new Polygon({
+            shape: {points: areaPoints},
+            style: defaults(
+                {fill: dataZoomModel.get('dataBackgroundColor')},
+                dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle()
+            ),
+            silent: true,
+            z2: -20
+        }));
+        this._displayables.barGroup.add(new Polyline({
+            shape: {points: linePoints},
+            style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(),
+            silent: true,
+            z2: -19
+        }));
+    },
+
+    _prepareDataShadowInfo: function () {
+        var dataZoomModel = this.dataZoomModel;
+        var showDataShadow = dataZoomModel.get('showDataShadow');
+
+        if (showDataShadow === false) {
+            return;
+        }
+
+        // Find a representative series.
+        var result;
+        var ecModel = this.ecModel;
+
+        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {
+            var seriesModels = dataZoomModel
+                .getAxisProxy(dimNames.name, axisIndex)
+                .getTargetSeriesModels();
+
+            each$1(seriesModels, function (seriesModel) {
+                if (result) {
+                    return;
+                }
+
+                if (showDataShadow !== true && indexOf(
+                        SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')
+                    ) < 0
+                ) {
+                    return;
+                }
+
+                var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis;
+                var otherDim = getOtherDim(dimNames.name);
+                var otherAxisInverse;
+                var coordSys = seriesModel.coordinateSystem;
+
+                if (otherDim != null && coordSys.getOtherAxis) {
+                    otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;
+                }
+
+                otherDim = seriesModel.getData().mapDimension(otherDim);
+
+                result = {
+                    thisAxis: thisAxis,
+                    series: seriesModel,
+                    thisDim: dimNames.name,
+                    otherDim: otherDim,
+                    otherAxisInverse: otherAxisInverse
+                };
+
+            }, this);
+
+        }, this);
+
+        return result;
+    },
+
+    _renderHandle: function () {
+        var displaybles = this._displayables;
+        var handles = displaybles.handles = [];
+        var handleLabels = displaybles.handleLabels = [];
+        var barGroup = this._displayables.barGroup;
+        var size = this._size;
+        var dataZoomModel = this.dataZoomModel;
+
+        barGroup.add(displaybles.filler = new Rect$2({
+            draggable: true,
+            cursor: getCursor(this._orient),
+            drift: bind$4(this._onDragMove, this, 'all'),
+            onmousemove: function (e) {
+                // Fot mobile devicem, prevent screen slider on the button.
+                stop(e.event);
+            },
+            ondragstart: bind$4(this._showDataInfo, this, true),
+            ondragend: bind$4(this._onDragEnd, this),
+            onmouseover: bind$4(this._showDataInfo, this, true),
+            onmouseout: bind$4(this._showDataInfo, this, false),
+            style: {
+                fill: dataZoomModel.get('fillerColor'),
+                textPosition : 'inside'
+            }
+        }));
+
+        // Frame border.
+        barGroup.add(new Rect$2(subPixelOptimizeRect({
+            silent: true,
+            shape: {
+                x: 0,
+                y: 0,
+                width: size[0],
+                height: size[1]
+            },
+            style: {
+                stroke: dataZoomModel.get('dataBackgroundColor')
+                    || dataZoomModel.get('borderColor'),
+                lineWidth: DEFAULT_FRAME_BORDER_WIDTH,
+                fill: 'rgba(0,0,0,0)'
+            }
+        })));
+
+        each$23([0, 1], function (handleIndex) {
+            var path = createIcon(
+                dataZoomModel.get('handleIcon'),
+                {
+                    cursor: getCursor(this._orient),
+                    draggable: true,
+                    drift: bind$4(this._onDragMove, this, handleIndex),
+                    onmousemove: function (e) {
+                        // Fot mobile devicem, prevent screen slider on the button.
+                        stop(e.event);
+                    },
+                    ondragend: bind$4(this._onDragEnd, this),
+                    onmouseover: bind$4(this._showDataInfo, this, true),
+                    onmouseout: bind$4(this._showDataInfo, this, false)
+                },
+                {x: -1, y: 0, width: 2, height: 2}
+            );
+
+            var bRect = path.getBoundingRect();
+            this._handleHeight = parsePercent$1(dataZoomModel.get('handleSize'), this._size[1]);
+            this._handleWidth = bRect.width / bRect.height * this._handleHeight;
+
+            path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());
+            var handleColor = dataZoomModel.get('handleColor');
+            // Compatitable with previous version
+            if (handleColor != null) {
+                path.style.fill = handleColor;
+            }
+
+            barGroup.add(handles[handleIndex] = path);
+
+            var textStyleModel = dataZoomModel.textStyleModel;
+
+            this.group.add(
+                handleLabels[handleIndex] = new Text({
+                silent: true,
+                invisible: true,
+                style: {
+                    x: 0, y: 0, text: '',
+                    textVerticalAlign: 'middle',
+                    textAlign: 'center',
+                    textFill: textStyleModel.getTextColor(),
+                    textFont: textStyleModel.getFont()
+                },
+                z2: 10
+            }));
+
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _resetInterval: function () {
+        var range = this._range = this.dataZoomModel.getPercentRange();
+        var viewExtent = this._getViewExtent();
+
+        this._handleEnds = [
+            linearMap$1(range[0], [0, 100], viewExtent, true),
+            linearMap$1(range[1], [0, 100], viewExtent, true)
+        ];
+    },
+
+    /**
+     * @private
+     * @param {(number|string)} handleIndex 0 or 1 or 'all'
+     * @param {number} delta
+     * @return {boolean} changed
+     */
+    _updateInterval: function (handleIndex, delta) {
+        var dataZoomModel = this.dataZoomModel;
+        var handleEnds = this._handleEnds;
+        var viewExtend = this._getViewExtent();
+        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
+        var percentExtent = [0, 100];
+
+        sliderMove(
+            delta,
+            handleEnds,
+            viewExtend,
+            dataZoomModel.get('zoomLock') ? 'all' : handleIndex,
+            minMaxSpan.minSpan != null
+                ? linearMap$1(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null,
+            minMaxSpan.maxSpan != null
+                ? linearMap$1(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null
+        );
+
+        var lastRange = this._range;
+        var range = this._range = asc$2([
+            linearMap$1(handleEnds[0], viewExtend, percentExtent, true),
+            linearMap$1(handleEnds[1], viewExtend, percentExtent, true)
+        ]);
+
+        return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1];
+    },
+
+    /**
+     * @private
+     */
+    _updateView: function (nonRealtime) {
+        var displaybles = this._displayables;
+        var handleEnds = this._handleEnds;
+        var handleInterval = asc$2(handleEnds.slice());
+        var size = this._size;
+
+        each$23([0, 1], function (handleIndex) {
+            // Handles
+            var handle = displaybles.handles[handleIndex];
+            var handleHeight = this._handleHeight;
+            handle.attr({
+                scale: [handleHeight / 2, handleHeight / 2],
+                position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2]
+            });
+        }, this);
+
+        // Filler
+        displaybles.filler.setShape({
+            x: handleInterval[0],
+            y: 0,
+            width: handleInterval[1] - handleInterval[0],
+            height: size[1]
+        });
+
+        this._updateDataInfo(nonRealtime);
+    },
+
+    /**
+     * @private
+     */
+    _updateDataInfo: function (nonRealtime) {
+        var dataZoomModel = this.dataZoomModel;
+        var displaybles = this._displayables;
+        var handleLabels = displaybles.handleLabels;
+        var orient = this._orient;
+        var labelTexts = ['', ''];
+
+        // FIXME
+        // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter)
+        if (dataZoomModel.get('showDetail')) {
+            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();
+
+            if (axisProxy) {
+                var axis = axisProxy.getAxisModel().axis;
+                var range = this._range;
+
+                var dataInterval = nonRealtime
+                    // See #4434, data and axis are not processed and reset yet in non-realtime mode.
+                    ? axisProxy.calculateDataWindow({
+                        start: range[0], end: range[1]
+                    }).valueWindow
+                    : axisProxy.getDataValueWindow();
+
+                labelTexts = [
+                    this._formatLabel(dataInterval[0], axis),
+                    this._formatLabel(dataInterval[1], axis)
+                ];
+            }
+        }
+
+        var orderedHandleEnds = asc$2(this._handleEnds.slice());
+
+        setLabel.call(this, 0);
+        setLabel.call(this, 1);
+
+        function setLabel(handleIndex) {
+            // Label
+            // Text should not transform by barGroup.
+            // Ignore handlers transform
+            var barTransform = getTransform(
+                displaybles.handles[handleIndex].parent, this.group
+            );
+            var direction = transformDirection(
+                handleIndex === 0 ? 'right' : 'left', barTransform
+            );
+            var offset = this._handleWidth / 2 + LABEL_GAP;
+            var textPoint = applyTransform$1(
+                [
+                    orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset),
+                    this._size[1] / 2
+                ],
+                barTransform
+            );
+            handleLabels[handleIndex].setStyle({
+                x: textPoint[0],
+                y: textPoint[1],
+                textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction,
+                textAlign: orient === HORIZONTAL ? direction : 'center',
+                text: labelTexts[handleIndex]
+            });
+        }
+    },
+
+    /**
+     * @private
+     */
+    _formatLabel: function (value, axis) {
+        var dataZoomModel = this.dataZoomModel;
+        var labelFormatter = dataZoomModel.get('labelFormatter');
+
+        var labelPrecision = dataZoomModel.get('labelPrecision');
+        if (labelPrecision == null || labelPrecision === 'auto') {
+            labelPrecision = axis.getPixelPrecision();
+        }
+
+        var valueStr = (value == null || isNaN(value))
+            ? ''
+            // FIXME Glue code
+            : (axis.type === 'category' || axis.type === 'time')
+                ? axis.scale.getLabel(Math.round(value))
+                // param of toFixed should less then 20.
+                : value.toFixed(Math.min(labelPrecision, 20));
+
+        return isFunction$1(labelFormatter)
+            ? labelFormatter(value, valueStr)
+            : isString(labelFormatter)
+            ? labelFormatter.replace('{value}', valueStr)
+            : valueStr;
+    },
+
+    /**
+     * @private
+     * @param {boolean} showOrHide true: show, false: hide
+     */
+    _showDataInfo: function (showOrHide) {
+        // Always show when drgging.
+        showOrHide = this._dragging || showOrHide;
+
+        var handleLabels = this._displayables.handleLabels;
+        handleLabels[0].attr('invisible', !showOrHide);
+        handleLabels[1].attr('invisible', !showOrHide);
+    },
+
+    _onDragMove: function (handleIndex, dx, dy) {
+        this._dragging = true;
+
+        // Transform dx, dy to bar coordination.
+        var barTransform = this._displayables.barGroup.getLocalTransform();
+        var vertex = applyTransform$1([dx, dy], barTransform, true);
+
+        var changed = this._updateInterval(handleIndex, vertex[0]);
+
+        var realtime = this.dataZoomModel.get('realtime');
+
+        this._updateView(!realtime);
+
+        // Avoid dispatch dataZoom repeatly but range not changed,
+        // which cause bad visual effect when progressive enabled.
+        changed && realtime && this._dispatchZoomAction();
+    },
+
+    _onDragEnd: function () {
+        this._dragging = false;
+        this._showDataInfo(false);
+
+        // While in realtime mode and stream mode, dispatch action when
+        // drag end will cause the whole view rerender, which is unnecessary.
+        var realtime = this.dataZoomModel.get('realtime');
+        !realtime && this._dispatchZoomAction();
+    },
+
+    _onClickPanelClick: function (e) {
+        var size = this._size;
+        var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY);
+
+        if (localPoint[0] < 0 || localPoint[0] > size[0]
+            || localPoint[1] < 0 || localPoint[1] > size[1]
+        ) {
+            return;
+        }
+
+        var handleEnds = this._handleEnds;
+        var center = (handleEnds[0] + handleEnds[1]) / 2;
+
+        var changed = this._updateInterval('all', localPoint[0] - center);
+        this._updateView();
+        changed && this._dispatchZoomAction();
+    },
+
+    /**
+     * This action will be throttled.
+     * @private
+     */
+    _dispatchZoomAction: function () {
+        var range = this._range;
+
+        this.api.dispatchAction({
+            type: 'dataZoom',
+            from: this.uid,
+            dataZoomId: this.dataZoomModel.id,
+            start: range[0],
+            end: range[1]
+        });
+    },
+
+    /**
+     * @private
+     */
+    _findCoordRect: function () {
+        // Find the grid coresponding to the first axis referred by dataZoom.
+        var rect;
+        each$23(this.getTargetCoordInfo(), function (coordInfoList) {
+            if (!rect && coordInfoList.length) {
+                var coordSys = coordInfoList[0].model.coordinateSystem;
+                rect = coordSys.getRect && coordSys.getRect();
+            }
+        });
+        if (!rect) {
+            var width = this.api.getWidth();
+            var height = this.api.getHeight();
+            rect = {
+                x: width * 0.2,
+                y: height * 0.2,
+                width: width * 0.6,
+                height: height * 0.6
+            };
+        }
+
+        return rect;
+    }
+
+});
+
+function getOtherDim(thisDim) {
+    // FIXME
+    // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好
+    var map$$1 = {x: 'y', y: 'x', radius: 'angle', angle: 'radius'};
+    return map$$1[thisDim];
+}
+
+function getCursor(orient) {
+    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+DataZoomModel.extend({
+
+    type: 'dataZoom.inside',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        disabled: false,   // Whether disable this inside zoom.
+        zoomLock: false,   // Whether disable zoom but only pan.
+        zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.
+        moveOnMouseMove: true,   // Can be: true / false / 'shift' / 'ctrl' / 'alt'.
+        preventDefaultMouseMove: true
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Only create one roam controller for each coordinate system.
+// one roam controller might be refered by two inside data zoom
+// components (for example, one for x and one for y). When user
+// pan or zoom, only dispatch one action for those data zoom
+// components.
+
+var curry$6 = curry;
+
+var ATTR$1 = '\0_ec_dataZoom_roams';
+
+
+/**
+ * @public
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {Object} dataZoomInfo
+ * @param {string} dataZoomInfo.coordId
+ * @param {Function} dataZoomInfo.containsPoint
+ * @param {Array.<string>} dataZoomInfo.allCoordIds
+ * @param {string} dataZoomInfo.dataZoomId
+ * @param {number} dataZoomInfo.throttleRate
+ * @param {Function} dataZoomInfo.panGetRange
+ * @param {Function} dataZoomInfo.zoomGetRange
+ * @param {boolean} [dataZoomInfo.zoomLock]
+ * @param {boolean} [dataZoomInfo.disabled]
+ */
+function register$2(api, dataZoomInfo) {
+    var store = giveStore(api);
+    var theDataZoomId = dataZoomInfo.dataZoomId;
+    var theCoordId = dataZoomInfo.coordId;
+
+    // Do clean when a dataZoom changes its target coordnate system.
+    // Avoid memory leak, dispose all not-used-registered.
+    each$1(store, function (record, coordId) {
+        var dataZoomInfos = record.dataZoomInfos;
+        if (dataZoomInfos[theDataZoomId]
+            && indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0
+        ) {
+            delete dataZoomInfos[theDataZoomId];
+            record.count--;
+        }
+    });
+
+    cleanStore(store);
+
+    var record = store[theCoordId];
+    // Create if needed.
+    if (!record) {
+        record = store[theCoordId] = {
+            coordId: theCoordId,
+            dataZoomInfos: {},
+            count: 0
+        };
+        record.controller = createController(api, record);
+        record.dispatchAction = curry(dispatchAction$1, api);
+    }
+
+    // Update reference of dataZoom.
+    !(record.dataZoomInfos[theDataZoomId]) && record.count++;
+    record.dataZoomInfos[theDataZoomId] = dataZoomInfo;
+
+    var controllerParams = mergeControllerParams(record.dataZoomInfos);
+    record.controller.enable(controllerParams.controlType, controllerParams.opt);
+
+    // Consider resize, area should be always updated.
+    record.controller.setPointerChecker(dataZoomInfo.containsPoint);
+
+    // Update throttle.
+    createOrUpdate(
+        record,
+        'dispatchAction',
+        dataZoomInfo.throttleRate,
+        'fixRate'
+    );
+}
+
+/**
+ * @public
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {string} dataZoomId
+ */
+function unregister$1(api, dataZoomId) {
+    var store = giveStore(api);
+
+    each$1(store, function (record) {
+        record.controller.dispose();
+        var dataZoomInfos = record.dataZoomInfos;
+        if (dataZoomInfos[dataZoomId]) {
+            delete dataZoomInfos[dataZoomId];
+            record.count--;
+        }
+    });
+
+    cleanStore(store);
+}
+
+/**
+ * @public
+ */
+function generateCoordId(coordModel) {
+    return coordModel.type + '\0_' + coordModel.id;
+}
+
+/**
+ * Key: coordId, value: {dataZoomInfos: [], count, controller}
+ * @type {Array.<Object>}
+ */
+function giveStore(api) {
+    // Mount store on zrender instance, so that we do not
+    // need to worry about dispose.
+    var zr = api.getZr();
+    return zr[ATTR$1] || (zr[ATTR$1] = {});
+}
+
+function createController(api, newRecord) {
+    var controller = new RoamController(api.getZr());
+    controller.on('pan', curry$6(onPan, newRecord));
+    controller.on('zoom', curry$6(onZoom, newRecord));
+
+    return controller;
+}
+
+function cleanStore(store) {
+    each$1(store, function (record, coordId) {
+        if (!record.count) {
+            record.controller.dispose();
+            delete store[coordId];
+        }
+    });
+}
+
+function onPan(record, dx, dy, oldX, oldY, newX, newY) {
+    wrapAndDispatch(record, function (info) {
+        return info.panGetRange(record.controller, dx, dy, oldX, oldY, newX, newY);
+    });
+}
+
+function onZoom(record, scale, mouseX, mouseY) {
+    wrapAndDispatch(record, function (info) {
+        return info.zoomGetRange(record.controller, scale, mouseX, mouseY);
+    });
+}
+
+function wrapAndDispatch(record, getRange) {
+    var batch = [];
+
+    each$1(record.dataZoomInfos, function (info) {
+        var range = getRange(info);
+        !info.disabled && range && batch.push({
+            dataZoomId: info.dataZoomId,
+            start: range[0],
+            end: range[1]
+        });
+    });
+
+    batch.length && record.dispatchAction(batch);
+}
+
+/**
+ * This action will be throttled.
+ */
+function dispatchAction$1(api, batch) {
+    api.dispatchAction({
+        type: 'dataZoom',
+        batch: batch
+    });
+}
+
+/**
+ * Merge roamController settings when multiple dataZooms share one roamController.
+ */
+function mergeControllerParams(dataZoomInfos) {
+    var controlType;
+    var opt = {};
+    // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated
+    // as string, it is probably revert to reserved word by compress tool. See #7411.
+    var prefix = 'type_';
+    var typePriority = {
+        'type_true': 2,
+        'type_move': 1,
+        'type_false': 0,
+        'type_undefined': -1
+    };
+    each$1(dataZoomInfos, function (dataZoomInfo) {
+        var oneType = dataZoomInfo.disabled ? false : dataZoomInfo.zoomLock ? 'move' : true;
+        if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {
+            controlType = oneType;
+        }
+        // Do not support that different 'shift'/'ctrl'/'alt' setting used in one coord sys.
+        extend(opt, dataZoomInfo.roamControllerOpt);
+    });
+
+    return {
+        controlType: controlType,
+        opt: opt
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var bind$5 = bind;
+
+var InsideZoomView = DataZoomView.extend({
+
+    type: 'dataZoom.inside',
+
+    /**
+     * @override
+     */
+    init: function (ecModel, api) {
+        /**
+         * 'throttle' is used in this.dispatchAction, so we save range
+         * to avoid missing some 'pan' info.
+         * @private
+         * @type {Array.<number>}
+         */
+        this._range;
+    },
+
+    /**
+     * @override
+     */
+    render: function (dataZoomModel, ecModel, api, payload) {
+        InsideZoomView.superApply(this, 'render', arguments);
+
+        // Hance the `throttle` util ensures to preserve command order,
+        // here simply updating range all the time will not cause missing
+        // any of the the roam change.
+        this._range = dataZoomModel.getPercentRange();
+
+        // Reset controllers.
+        each$1(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) {
+
+            var allCoordIds = map(coordInfoList, function (coordInfo) {
+                return generateCoordId(coordInfo.model);
+            });
+
+            each$1(coordInfoList, function (coordInfo) {
+                var coordModel = coordInfo.model;
+                var dataZoomOption = dataZoomModel.option;
+
+                register$2(
+                    api,
+                    {
+                        coordId: generateCoordId(coordModel),
+                        allCoordIds: allCoordIds,
+                        containsPoint: function (e, x, y) {
+                            return coordModel.coordinateSystem.containPoint([x, y]);
+                        },
+                        dataZoomId: dataZoomModel.id,
+                        throttleRate: dataZoomModel.get('throttle', true),
+                        panGetRange: bind$5(this._onPan, this, coordInfo, coordSysName),
+                        zoomGetRange: bind$5(this._onZoom, this, coordInfo, coordSysName),
+                        zoomLock: dataZoomOption.zoomLock,
+                        disabled: dataZoomOption.disabled,
+                        roamControllerOpt: {
+                            zoomOnMouseWheel: dataZoomOption.zoomOnMouseWheel,
+                            moveOnMouseMove: dataZoomOption.moveOnMouseMove,
+                            preventDefaultMouseMove: dataZoomOption.preventDefaultMouseMove
+                        }
+                    }
+                );
+            }, this);
+
+        }, this);
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        unregister$1(this.api, this.dataZoomModel.id);
+        InsideZoomView.superApply(this, 'dispose', arguments);
+        this._range = null;
+    },
+
+    /**
+     * @private
+     */
+    _onPan: function (coordInfo, coordSysName, controller, dx, dy, oldX, oldY, newX, newY) {
+        var lastRange = this._range;
+        var range = lastRange.slice();
+
+        // Calculate transform by the first axis.
+        var axisModel = coordInfo.axisModels[0];
+        if (!axisModel) {
+            return;
+        }
+
+        var directionInfo = getDirectionInfo[coordSysName](
+            [oldX, oldY], [newX, newY], axisModel, controller, coordInfo
+        );
+
+        var percentDelta = directionInfo.signal
+            * (range[1] - range[0])
+            * directionInfo.pixel / directionInfo.pixelLength;
+
+        sliderMove(percentDelta, range, [0, 100], 'all');
+
+        this._range = range;
+
+        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {
+            return range;
+        }
+    },
+
+    /**
+     * @private
+     */
+    _onZoom: function (coordInfo, coordSysName, controller, scale, mouseX, mouseY) {
+        var lastRange = this._range;
+        var range = lastRange.slice();
+
+        // Calculate transform by the first axis.
+        var axisModel = coordInfo.axisModels[0];
+        if (!axisModel) {
+            return;
+        }
+
+        var directionInfo = getDirectionInfo[coordSysName](
+            null, [mouseX, mouseY], axisModel, controller, coordInfo
+        );
+        var percentPoint = (
+            directionInfo.signal > 0
+                ? (directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel)
+                : (directionInfo.pixel - directionInfo.pixelStart)
+            ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];
+
+        scale = Math.max(1 / scale, 0);
+        range[0] = (range[0] - percentPoint) * scale + percentPoint;
+        range[1] = (range[1] - percentPoint) * scale + percentPoint;
+
+        // Restrict range.
+        var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();
+
+        sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);
+
+        this._range = range;
+
+        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {
+            return range;
+        }
+    }
+
+});
+
+var getDirectionInfo = {
+
+    grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) {
+        var axis = axisModel.axis;
+        var ret = {};
+        var rect = coordInfo.model.coordinateSystem.getRect();
+        oldPoint = oldPoint || [0, 0];
+
+        if (axis.dim === 'x') {
+            ret.pixel = newPoint[0] - oldPoint[0];
+            ret.pixelLength = rect.width;
+            ret.pixelStart = rect.x;
+            ret.signal = axis.inverse ? 1 : -1;
+        }
+        else { // axis.dim === 'y'
+            ret.pixel = newPoint[1] - oldPoint[1];
+            ret.pixelLength = rect.height;
+            ret.pixelStart = rect.y;
+            ret.signal = axis.inverse ? -1 : 1;
+        }
+
+        return ret;
+    },
+
+    polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) {
+        var axis = axisModel.axis;
+        var ret = {};
+        var polar = coordInfo.model.coordinateSystem;
+        var radiusExtent = polar.getRadiusAxis().getExtent();
+        var angleExtent = polar.getAngleAxis().getExtent();
+
+        oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];
+        newPoint = polar.pointToCoord(newPoint);
+
+        if (axisModel.mainType === 'radiusAxis') {
+            ret.pixel = newPoint[0] - oldPoint[0];
+            // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);
+            // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);
+            ret.pixelLength = radiusExtent[1] - radiusExtent[0];
+            ret.pixelStart = radiusExtent[0];
+            ret.signal = axis.inverse ? 1 : -1;
+        }
+        else { // 'angleAxis'
+            ret.pixel = newPoint[1] - oldPoint[1];
+            // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);
+            // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);
+            ret.pixelLength = angleExtent[1] - angleExtent[0];
+            ret.pixelStart = angleExtent[0];
+            ret.signal = axis.inverse ? -1 : 1;
+        }
+
+        return ret;
+    },
+
+    singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) {
+        var axis = axisModel.axis;
+        var rect = coordInfo.model.coordinateSystem.getRect();
+        var ret = {};
+
+        oldPoint = oldPoint || [0, 0];
+
+        if (axis.orient === 'horizontal') {
+            ret.pixel = newPoint[0] - oldPoint[0];
+            ret.pixelLength = rect.width;
+            ret.pixelStart = rect.x;
+            ret.signal = axis.inverse ? 1 : -1;
+        }
+        else { // 'vertical'
+            ret.pixel = newPoint[1] - oldPoint[1];
+            ret.pixelLength = rect.height;
+            ret.pixelStart = rect.y;
+            ret.signal = axis.inverse ? -1 : 1;
+        }
+
+        return ret;
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerProcessor({
+
+    // `dataZoomProcessor` will only be performed in needed series. Consider if
+    // there is a line series and a pie series, it is better not to update the
+    // line series if only pie series is needed to be updated.
+    getTargetSeries: function (ecModel) {
+        var seriesModelMap = createHashMap();
+
+        ecModel.eachComponent('dataZoom', function (dataZoomModel) {
+            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {
+                var axisProxy = dataZoomModel.getAxisProxy(dimNames.name, axisIndex);
+                each$1(axisProxy.getTargetSeriesModels(), function (seriesModel) {
+                    seriesModelMap.set(seriesModel.uid, seriesModel);
+                });
+            });
+        });
+
+        return seriesModelMap;
+    },
+
+    modifyOutputEnd: true,
+
+    // Consider appendData, where filter should be performed. Because data process is
+    // in block mode currently, it is not need to worry about that the overallProgress
+    // execute every frame.
+    overallReset: function (ecModel, api) {
+
+        ecModel.eachComponent('dataZoom', function (dataZoomModel) {
+            // We calculate window and reset axis here but not in model
+            // init stage and not after action dispatch handler, because
+            // reset should be called after seriesData.restoreData.
+            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {
+                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel, api);
+            });
+
+            // Caution: data zoom filtering is order sensitive when using
+            // percent range and no min/max/scale set on axis.
+            // For example, we have dataZoom definition:
+            // [
+            //      {xAxisIndex: 0, start: 30, end: 70},
+            //      {yAxisIndex: 0, start: 20, end: 80}
+            // ]
+            // In this case, [20, 80] of y-dataZoom should be based on data
+            // that have filtered by x-dataZoom using range of [30, 70],
+            // but should not be based on full raw data. Thus sliding
+            // x-dataZoom will change both ranges of xAxis and yAxis,
+            // while sliding y-dataZoom will only change the range of yAxis.
+            // So we should filter x-axis after reset x-axis immediately,
+            // and then reset y-axis and filter y-axis.
+            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {
+                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel, api);
+            });
+        });
+
+        ecModel.eachComponent('dataZoom', function (dataZoomModel) {
+            // Fullfill all of the range props so that user
+            // is able to get them from chart.getOption().
+            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();
+            var percentRange = axisProxy.getDataPercentWindow();
+            var valueRange = axisProxy.getDataValueWindow();
+
+            dataZoomModel.setRawRange({
+                start: percentRange[0],
+                end: percentRange[1],
+                startValue: valueRange[0],
+                endValue: valueRange[1]
+            }, true);
+        });
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerAction('dataZoom', function (payload, ecModel) {
+
+    var linkedNodesFinder = createLinkedNodesFinder(
+        bind(ecModel.eachComponent, ecModel, 'dataZoom'),
+        eachAxisDim$1,
+        function (model, dimNames) {
+            return model.get(dimNames.axisIndex);
+        }
+    );
+
+    var effectedModels = [];
+
+    ecModel.eachComponent(
+        {mainType: 'dataZoom', query: payload},
+        function (model, index) {
+            effectedModels.push.apply(
+                effectedModels, linkedNodesFinder(model).nodes
+            );
+        }
+    );
+
+    each$1(effectedModels, function (dataZoomModel, index) {
+        dataZoomModel.setRawRange({
+            start: payload.start,
+            end: payload.end,
+            startValue: payload.startValue,
+            endValue: payload.endValue
+        });
+    });
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * DataZoom component entry
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$24 = each$1;
+
+var preprocessor$2 = function (option) {
+    var visualMap = option && option.visualMap;
+
+    if (!isArray(visualMap)) {
+        visualMap = visualMap ? [visualMap] : [];
+    }
+
+    each$24(visualMap, function (opt) {
+        if (!opt) {
+            return;
+        }
+
+        // rename splitList to pieces
+        if (has$1(opt, 'splitList') && !has$1(opt, 'pieces')) {
+            opt.pieces = opt.splitList;
+            delete opt.splitList;
+        }
+
+        var pieces = opt.pieces;
+        if (pieces && isArray(pieces)) {
+            each$24(pieces, function (piece) {
+                if (isObject$1(piece)) {
+                    if (has$1(piece, 'start') && !has$1(piece, 'min')) {
+                        piece.min = piece.start;
+                    }
+                    if (has$1(piece, 'end') && !has$1(piece, 'max')) {
+                        piece.max = piece.end;
+                    }
+                }
+            });
+        }
+    });
+};
+
+function has$1(obj, name) {
+    return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+ComponentModel.registerSubTypeDefaulter('visualMap', function (option) {
+    // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.
+    return (
+            !option.categories
+            && (
+                !(
+                    option.pieces
+                        ? option.pieces.length > 0
+                        : option.splitNumber > 0
+                )
+                || option.calculable
+            )
+        )
+        ? 'continuous' : 'piecewise';
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var VISUAL_PRIORITY = PRIORITY.VISUAL.COMPONENT;
+
+registerVisual(VISUAL_PRIORITY, {
+    createOnAllSeries: true,
+    reset: function (seriesModel, ecModel) {
+        var resetDefines = [];
+        ecModel.eachComponent('visualMap', function (visualMapModel) {
+            var pipelineContext = seriesModel.pipelineContext;
+            if (!visualMapModel.isTargetSeries(seriesModel)
+                || (pipelineContext && pipelineContext.large)
+            ) {
+                return;
+            }
+
+            resetDefines.push(incrementalApplyVisual(
+                visualMapModel.stateList,
+                visualMapModel.targetVisuals,
+                bind(visualMapModel.getValueState, visualMapModel),
+                visualMapModel.getDataDimension(seriesModel.getData())
+            ));
+        });
+
+        return resetDefines;
+    }
+});
+
+// Only support color.
+registerVisual(VISUAL_PRIORITY, {
+    createOnAllSeries: true,
+    reset: function (seriesModel, ecModel) {
+        var data = seriesModel.getData();
+        var visualMetaList = [];
+
+        ecModel.eachComponent('visualMap', function (visualMapModel) {
+            if (visualMapModel.isTargetSeries(seriesModel)) {
+                var visualMeta = visualMapModel.getVisualMeta(
+                    bind(getColorVisual, null, seriesModel, visualMapModel)
+                ) || {stops: [], outerColors: []};
+
+                var concreteDim = visualMapModel.getDataDimension(data);
+                var dimInfo = data.getDimensionInfo(concreteDim);
+                if (dimInfo != null) {
+                    // visualMeta.dimension should be dimension index, but not concrete dimension.
+                    visualMeta.dimension = dimInfo.index;
+                    visualMetaList.push(visualMeta);
+                }
+            }
+        });
+
+        // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));
+        seriesModel.getData().setVisual('visualMeta', visualMetaList);
+    }
+});
+
+// FIXME
+// performance and export for heatmap?
+// value can be Infinity or -Infinity
+function getColorVisual(seriesModel, visualMapModel, value, valueState) {
+    var mappings = visualMapModel.targetVisuals[valueState];
+    var visualTypes = VisualMapping.prepareVisualTypes(mappings);
+    var resultVisual = {
+        color: seriesModel.getData().getVisual('color') // default color.
+    };
+
+    for (var i = 0, len = visualTypes.length; i < len; i++) {
+        var type = visualTypes[i];
+        var mapping = mappings[
+            type === 'opacity' ? '__alphaForOpacity' : type
+        ];
+        mapping && mapping.applyVisual(value, getVisual, setVisual);
+    }
+
+    return resultVisual.color;
+
+    function getVisual(key) {
+        return resultVisual[key];
+    }
+
+    function setVisual(key, value) {
+        resultVisual[key] = value;
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @file Visual mapping.
+ */
+
+var visualDefault = {
+
+    /**
+     * @public
+     */
+    get: function (visualType, key, isCategory) {
+        var value = clone(
+            (defaultOption$3[visualType] || {})[key]
+        );
+
+        return isCategory
+            ? (isArray(value) ? value[value.length - 1] : value)
+            : value;
+    }
+
+};
+
+var defaultOption$3 = {
+
+    color: {
+        active: ['#006edd', '#e0ffff'],
+        inactive: ['rgba(0,0,0,0)']
+    },
+
+    colorHue: {
+        active: [0, 360],
+        inactive: [0, 0]
+    },
+
+    colorSaturation: {
+        active: [0.3, 1],
+        inactive: [0, 0]
+    },
+
+    colorLightness: {
+        active: [0.9, 0.5],
+        inactive: [0, 0]
+    },
+
+    colorAlpha: {
+        active: [0.3, 1],
+        inactive: [0, 0]
+    },
+
+    opacity: {
+        active: [0.3, 1],
+        inactive: [0, 0]
+    },
+
+    symbol: {
+        active: ['circle', 'roundRect', 'diamond'],
+        inactive: ['none']
+    },
+
+    symbolSize: {
+        active: [10, 50],
+        inactive: [0, 0]
+    }
+};
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var mapVisual$2 = VisualMapping.mapVisual;
+var eachVisual = VisualMapping.eachVisual;
+var isArray$3 = isArray;
+var each$25 = each$1;
+var asc$3 = asc;
+var linearMap$2 = linearMap;
+var noop$2 = noop;
+
+var VisualMapModel = extendComponentModel({
+
+    type: 'visualMap',
+
+    dependencies: ['series'],
+
+    /**
+     * @readOnly
+     * @type {Array.<string>}
+     */
+    stateList: ['inRange', 'outOfRange'],
+
+    /**
+     * @readOnly
+     * @type {Array.<string>}
+     */
+    replacableOptionKeys: [
+        'inRange', 'outOfRange', 'target', 'controller', 'color'
+    ],
+
+    /**
+     * [lowerBound, upperBound]
+     *
+     * @readOnly
+     * @type {Array.<number>}
+     */
+    dataBound: [-Infinity, Infinity],
+
+    /**
+     * @readOnly
+     * @type {string|Object}
+     */
+    layoutMode: {type: 'box', ignoreSize: true},
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        show: true,
+
+        zlevel: 0,
+        z: 4,
+
+        seriesIndex: 'all',     // 'all' or null/undefined: all series.
+                                // A number or an array of number: the specified series.
+
+                                // set min: 0, max: 200, only for campatible with ec2.
+                                // In fact min max should not have default value.
+        min: 0,                 // min value, must specified if pieces is not specified.
+        max: 200,               // max value, must specified if pieces is not specified.
+
+        dimension: null,
+        inRange: null,          // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',
+                                // 'symbol', 'symbolSize'
+        outOfRange: null,       // 'color', 'colorHue', 'colorSaturation',
+                                // 'colorLightness', 'colorAlpha',
+                                // 'symbol', 'symbolSize'
+
+        left: 0,                // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)
+        right: null,            // The same as left.
+        top: null,              // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)
+        bottom: 0,              // The same as top.
+
+        itemWidth: null,
+        itemHeight: null,
+        inverse: false,
+        orient: 'vertical',        // 'horizontal' ¦ 'vertical'
+
+        backgroundColor: 'rgba(0,0,0,0)',
+        borderColor: '#ccc',       // 值域边框颜色
+        contentColor: '#5793f3',
+        inactiveColor: '#aaa',
+        borderWidth: 0,            // 值域边框线宽,单位px,默认为0(无边框)
+        padding: 5,                // 值域内边距,单位px,默认各方向内边距为5,
+                                    // 接受数组分别设定上右下左边距,同css
+        textGap: 10,               //
+        precision: 0,              // 小数精度,默认为0,无小数点
+        color: null,               //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange)
+
+        formatter: null,
+        text: null,                // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值
+        textStyle: {
+            color: '#333'          // 值域文字颜色
+        }
+    },
+
+    /**
+     * @protected
+     */
+    init: function (option, parentModel, ecModel) {
+
+        /**
+         * @private
+         * @type {Array.<number>}
+         */
+        this._dataExtent;
+
+        /**
+         * @readOnly
+         */
+        this.targetVisuals = {};
+
+        /**
+         * @readOnly
+         */
+        this.controllerVisuals = {};
+
+        /**
+         * @readOnly
+         */
+        this.textStyleModel;
+
+        /**
+         * [width, height]
+         * @readOnly
+         * @type {Array.<number>}
+         */
+        this.itemSize;
+
+        this.mergeDefaultAndTheme(option, ecModel);
+    },
+
+    /**
+     * @protected
+     */
+    optionUpdated: function (newOption, isInit) {
+        var thisOption = this.option;
+
+        // FIXME
+        // necessary?
+        // Disable realtime view update if canvas is not supported.
+        if (!env$1.canvasSupported) {
+            thisOption.realtime = false;
+        }
+
+        !isInit && replaceVisualOption(
+            thisOption, newOption, this.replacableOptionKeys
+        );
+
+        this.textStyleModel = this.getModel('textStyle');
+
+        this.resetItemSize();
+
+        this.completeVisualOption();
+    },
+
+    /**
+     * @protected
+     */
+    resetVisual: function (supplementVisualOption) {
+        var stateList = this.stateList;
+        supplementVisualOption = bind(supplementVisualOption, this);
+
+        this.controllerVisuals = createVisualMappings(
+            this.option.controller, stateList, supplementVisualOption
+        );
+        this.targetVisuals = createVisualMappings(
+            this.option.target, stateList, supplementVisualOption
+        );
+    },
+
+    /**
+     * @protected
+     * @return {Array.<number>} An array of series indices.
+     */
+    getTargetSeriesIndices: function () {
+        var optionSeriesIndex = this.option.seriesIndex;
+        var seriesIndices = [];
+
+        if (optionSeriesIndex == null || optionSeriesIndex === 'all') {
+            this.ecModel.eachSeries(function (seriesModel, index) {
+                seriesIndices.push(index);
+            });
+        }
+        else {
+            seriesIndices = normalizeToArray(optionSeriesIndex);
+        }
+
+        return seriesIndices;
+    },
+
+    /**
+     * @public
+     */
+    eachTargetSeries: function (callback, context) {
+        each$1(this.getTargetSeriesIndices(), function (seriesIndex) {
+            callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex));
+        }, this);
+    },
+
+    /**
+     * @pubilc
+     */
+    isTargetSeries: function (seriesModel) {
+        var is = false;
+        this.eachTargetSeries(function (model) {
+            model === seriesModel && (is = true);
+        });
+        return is;
+    },
+
+    /**
+     * @example
+     * this.formatValueText(someVal); // format single numeric value to text.
+     * this.formatValueText(someVal, true); // format single category value to text.
+     * this.formatValueText([min, max]); // format numeric min-max to text.
+     * this.formatValueText([this.dataBound[0], max]); // using data lower bound.
+     * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.
+     *
+     * @param {number|Array.<number>} value Real value, or this.dataBound[0 or 1].
+     * @param {boolean} [isCategory=false] Only available when value is number.
+     * @param {Array.<string>} edgeSymbols Open-close symbol when value is interval.
+     * @return {string}
+     * @protected
+     */
+    formatValueText: function(value, isCategory, edgeSymbols) {
+        var option = this.option;
+        var precision = option.precision;
+        var dataBound = this.dataBound;
+        var formatter = option.formatter;
+        var isMinMax;
+        var textValue;
+        edgeSymbols = edgeSymbols || ['<', '>'];
+
+        if (isArray(value)) {
+            value = value.slice();
+            isMinMax = true;
+        }
+
+        textValue = isCategory
+            ? value
+            : (isMinMax
+                ? [toFixed(value[0]), toFixed(value[1])]
+                : toFixed(value)
+            );
+
+        if (isString(formatter)) {
+            return formatter
+                .replace('{value}', isMinMax ? textValue[0] : textValue)
+                .replace('{value2}', isMinMax ? textValue[1] : textValue);
+        }
+        else if (isFunction$1(formatter)) {
+            return isMinMax
+                ? formatter(value[0], value[1])
+                : formatter(value);
+        }
+
+        if (isMinMax) {
+            if (value[0] === dataBound[0]) {
+                return edgeSymbols[0] + ' ' + textValue[1];
+            }
+            else if (value[1] === dataBound[1]) {
+                return edgeSymbols[1] + ' ' + textValue[0];
+            }
+            else {
+                return textValue[0] + ' - ' + textValue[1];
+            }
+        }
+        else { // Format single value (includes category case).
+            return textValue;
+        }
+
+        function toFixed(val) {
+            return val === dataBound[0]
+                ? 'min'
+                : val === dataBound[1]
+                ? 'max'
+                : (+val).toFixed(Math.min(precision, 20));
+        }
+    },
+
+    /**
+     * @protected
+     */
+    resetExtent: function () {
+        var thisOption = this.option;
+
+        // Can not calculate data extent by data here.
+        // Because series and data may be modified in processing stage.
+        // So we do not support the feature "auto min/max".
+
+        var extent = asc$3([thisOption.min, thisOption.max]);
+
+        this._dataExtent = extent;
+    },
+
+    /**
+     * @public
+     * @param {module:echarts/data/List} list
+     * @return {string} Concrete dimention. If return null/undefined,
+     *                  no dimension used.
+     */
+    getDataDimension: function (list) {
+        var optDim = this.option.dimension;
+        var listDimensions = list.dimensions;
+        if (optDim == null && !listDimensions.length) {
+            return;
+        }
+
+        if (optDim != null) {
+            return list.getDimension(optDim);
+        }
+
+        var dimNames = list.dimensions;
+        for (var i = dimNames.length - 1; i >= 0; i--) {
+            var dimName = dimNames[i];
+            var dimInfo = list.getDimensionInfo(dimName);
+            if (!dimInfo.isCalculationCoord) {
+                return dimName;
+            }
+        }
+    },
+
+    /**
+     * @public
+     * @override
+     */
+    getExtent: function () {
+        return this._dataExtent.slice();
+    },
+
+    /**
+     * @protected
+     */
+    completeVisualOption: function () {
+        var ecModel = this.ecModel;
+        var thisOption = this.option;
+        var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange};
+
+        var target = thisOption.target || (thisOption.target = {});
+        var controller = thisOption.controller || (thisOption.controller = {});
+
+        merge(target, base); // Do not override
+        merge(controller, base); // Do not override
+
+        var isCategory = this.isCategory();
+
+        completeSingle.call(this, target);
+        completeSingle.call(this, controller);
+        completeInactive.call(this, target, 'inRange', 'outOfRange');
+        // completeInactive.call(this, target, 'outOfRange', 'inRange');
+        completeController.call(this, controller);
+
+        function completeSingle(base) {
+            // Compatible with ec2 dataRange.color.
+            // The mapping order of dataRange.color is: [high value, ..., low value]
+            // whereas inRange.color and outOfRange.color is [low value, ..., high value]
+            // Notice: ec2 has no inverse.
+            if (isArray$3(thisOption.color)
+                // If there has been inRange: {symbol: ...}, adding color is a mistake.
+                // So adding color only when no inRange defined.
+                && !base.inRange
+            ) {
+                base.inRange = {color: thisOption.color.slice().reverse()};
+            }
+
+            // Compatible with previous logic, always give a defautl color, otherwise
+            // simple config with no inRange and outOfRange will not work.
+            // Originally we use visualMap.color as the default color, but setOption at
+            // the second time the default color will be erased. So we change to use
+            // constant DEFAULT_COLOR.
+            // If user do not want the defualt color, set inRange: {color: null}.
+            base.inRange = base.inRange || {color: ecModel.get('gradientColor')};
+
+            // If using shortcut like: {inRange: 'symbol'}, complete default value.
+            each$25(this.stateList, function (state) {
+                var visualType = base[state];
+
+                if (isString(visualType)) {
+                    var defa = visualDefault.get(visualType, 'active', isCategory);
+                    if (defa) {
+                        base[state] = {};
+                        base[state][visualType] = defa;
+                    }
+                    else {
+                        // Mark as not specified.
+                        delete base[state];
+                    }
+                }
+            }, this);
+        }
+
+        function completeInactive(base, stateExist, stateAbsent) {
+            var optExist = base[stateExist];
+            var optAbsent = base[stateAbsent];
+
+            if (optExist && !optAbsent) {
+                optAbsent = base[stateAbsent] = {};
+                each$25(optExist, function (visualData, visualType) {
+                    if (!VisualMapping.isValidType(visualType)) {
+                        return;
+                    }
+
+                    var defa = visualDefault.get(visualType, 'inactive', isCategory);
+
+                    if (defa != null) {
+                        optAbsent[visualType] = defa;
+
+                        // Compatibable with ec2:
+                        // Only inactive color to rgba(0,0,0,0) can not
+                        // make label transparent, so use opacity also.
+                        if (visualType === 'color'
+                            && !optAbsent.hasOwnProperty('opacity')
+                            && !optAbsent.hasOwnProperty('colorAlpha')
+                        ) {
+                            optAbsent.opacity = [0, 0];
+                        }
+                    }
+                });
+            }
+        }
+
+        function completeController(controller) {
+            var symbolExists = (controller.inRange || {}).symbol
+                || (controller.outOfRange || {}).symbol;
+            var symbolSizeExists = (controller.inRange || {}).symbolSize
+                || (controller.outOfRange || {}).symbolSize;
+            var inactiveColor = this.get('inactiveColor');
+
+            each$25(this.stateList, function (state) {
+
+                var itemSize = this.itemSize;
+                var visuals = controller[state];
+
+                // Set inactive color for controller if no other color
+                // attr (like colorAlpha) specified.
+                if (!visuals) {
+                    visuals = controller[state] = {
+                        color: isCategory ? inactiveColor : [inactiveColor]
+                    };
+                }
+
+                // Consistent symbol and symbolSize if not specified.
+                if (visuals.symbol == null) {
+                    visuals.symbol = symbolExists
+                        && clone(symbolExists)
+                        || (isCategory ? 'roundRect' : ['roundRect']);
+                }
+                if (visuals.symbolSize == null) {
+                    visuals.symbolSize = symbolSizeExists
+                        && clone(symbolSizeExists)
+                        || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);
+                }
+
+                // Filter square and none.
+                visuals.symbol = mapVisual$2(visuals.symbol, function (symbol) {
+                    return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol;
+                });
+
+                // Normalize symbolSize
+                var symbolSize = visuals.symbolSize;
+
+                if (symbolSize != null) {
+                    var max = -Infinity;
+                    // symbolSize can be object when categories defined.
+                    eachVisual(symbolSize, function (value) {
+                        value > max && (max = value);
+                    });
+                    visuals.symbolSize = mapVisual$2(symbolSize, function (value) {
+                        return linearMap$2(value, [0, max], [0, itemSize[0]], true);
+                    });
+                }
+
+            }, this);
+        }
+    },
+
+    /**
+     * @protected
+     */
+    resetItemSize: function () {
+        this.itemSize = [
+            parseFloat(this.get('itemWidth')),
+            parseFloat(this.get('itemHeight'))
+        ];
+    },
+
+    /**
+     * @public
+     */
+    isCategory: function () {
+        return !!this.option.categories;
+    },
+
+    /**
+     * @public
+     * @abstract
+     */
+    setSelected: noop$2,
+
+    /**
+     * @public
+     * @abstract
+     * @param {*|module:echarts/data/List} valueOrData
+     * @param {number} dataIndex
+     * @return {string} state See this.stateList
+     */
+    getValueState: noop$2,
+
+    /**
+     * FIXME
+     * Do not publish to thirt-part-dev temporarily
+     * util the interface is stable. (Should it return
+     * a function but not visual meta?)
+     *
+     * @pubilc
+     * @abstract
+     * @param {Function} getColorVisual
+     *        params: value, valueState
+     *        return: color
+     * @return {Object} visualMeta
+     *        should includes {stops, outerColors}
+     *        outerColor means [colorBeyondMinValue, colorBeyondMaxValue]
+     */
+    getVisualMeta: noop$2
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Constant
+var DEFAULT_BAR_BOUND = [20, 140];
+
+var ContinuousModel = VisualMapModel.extend({
+
+    type: 'visualMap.continuous',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        align: 'auto',          // 'auto', 'left', 'right', 'top', 'bottom'
+        calculable: false,      // This prop effect default component type determine,
+                                // See echarts/component/visualMap/typeDefaulter.
+        range: null,            // selected range. In default case `range` is [min, max]
+                                // and can auto change along with modification of min max,
+                                // util use specifid a range.
+        realtime: true,         // Whether realtime update.
+        itemHeight: null,       // The length of the range control edge.
+        itemWidth: null,        // The length of the other side.
+        hoverLink: true,        // Enable hover highlight.
+        hoverLinkDataSize: null,// The size of hovered data.
+        hoverLinkOnHandle: null // Whether trigger hoverLink when hover handle.
+                                // If not specified, follow the value of `realtime`.
+    },
+
+    /**
+     * @override
+     */
+    optionUpdated: function (newOption, isInit) {
+        ContinuousModel.superApply(this, 'optionUpdated', arguments);
+
+        this.resetExtent();
+
+        this.resetVisual(function (mappingOption) {
+            mappingOption.mappingMethod = 'linear';
+            mappingOption.dataExtent = this.getExtent();
+        });
+
+        this._resetRange();
+    },
+
+    /**
+     * @protected
+     * @override
+     */
+    resetItemSize: function () {
+        ContinuousModel.superApply(this, 'resetItemSize', arguments);
+
+        var itemSize = this.itemSize;
+
+        this._orient === 'horizontal' && itemSize.reverse();
+
+        (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);
+        (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);
+    },
+
+    /**
+     * @private
+     */
+    _resetRange: function () {
+        var dataExtent = this.getExtent();
+        var range = this.option.range;
+
+        if (!range || range.auto) {
+            // `range` should always be array (so we dont use other
+            // value like 'auto') for user-friend. (consider getOption).
+            dataExtent.auto = 1;
+            this.option.range = dataExtent;
+        }
+        else if (isArray(range)) {
+            if (range[0] > range[1]) {
+                range.reverse();
+            }
+            range[0] = Math.max(range[0], dataExtent[0]);
+            range[1] = Math.min(range[1], dataExtent[1]);
+        }
+    },
+
+    /**
+     * @protected
+     * @override
+     */
+    completeVisualOption: function () {
+        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);
+
+        each$1(this.stateList, function (state) {
+            var symbolSize = this.option.controller[state].symbolSize;
+            if (symbolSize && symbolSize[0] !== symbolSize[1]) {
+                symbolSize[0] = 0; // For good looking.
+            }
+        }, this);
+    },
+
+    /**
+     * @override
+     */
+    setSelected: function (selected) {
+        this.option.range = selected.slice();
+        this._resetRange();
+    },
+
+    /**
+     * @public
+     */
+    getSelected: function () {
+        var dataExtent = this.getExtent();
+
+        var dataInterval = asc(
+            (this.get('range') || []).slice()
+        );
+
+        // Clamp
+        dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);
+        dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);
+        dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);
+        dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);
+
+        return dataInterval;
+    },
+
+    /**
+     * @override
+     */
+    getValueState: function (value) {
+        var range = this.option.range;
+        var dataExtent = this.getExtent();
+
+        // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.
+        // range[1] is processed likewise.
+        return (
+            (range[0] <= dataExtent[0] || range[0] <= value)
+            && (range[1] >= dataExtent[1] || value <= range[1])
+        ) ? 'inRange' : 'outOfRange';
+    },
+
+    /**
+     * @params {Array.<number>} range target value: range[0] <= value && value <= range[1]
+     * @return {Array.<Object>} [{seriesId, dataIndices: <Array.<number>>}, ...]
+     */
+    findTargetDataIndices: function (range) {
+        var result = [];
+
+        this.eachTargetSeries(function (seriesModel) {
+            var dataIndices = [];
+            var data = seriesModel.getData();
+
+            data.each(this.getDataDimension(data), function (value, dataIndex) {
+                range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);
+            }, this);
+
+            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});
+        }, this);
+
+        return result;
+    },
+
+    /**
+     * @implement
+     */
+    getVisualMeta: function (getColorVisual) {
+        var oVals = getColorStopValues(this, 'outOfRange', this.getExtent());
+        var iVals = getColorStopValues(this, 'inRange', this.option.range.slice());
+        var stops = [];
+
+        function setStop(value, valueState) {
+            stops.push({
+                value: value,
+                color: getColorVisual(value, valueState)
+            });
+        }
+
+        // Format to: outOfRange -- inRange -- outOfRange.
+        var iIdx = 0;
+        var oIdx = 0;
+        var iLen = iVals.length;
+        var oLen = oVals.length;
+
+        for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {
+            // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored.
+            if (oVals[oIdx] < iVals[iIdx]) {
+                setStop(oVals[oIdx], 'outOfRange');
+            }
+        }
+        for (var first = 1; iIdx < iLen; iIdx++, first = 0) {
+            // If range is full, value beyond min, max will be clamped.
+            // make a singularity
+            first && stops.length && setStop(iVals[iIdx], 'outOfRange');
+            setStop(iVals[iIdx], 'inRange');
+        }
+        for (var first = 1; oIdx < oLen; oIdx++) {
+            if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {
+                // make a singularity
+                if (first) {
+                    stops.length && setStop(stops[stops.length - 1].value, 'outOfRange');
+                    first = 0;
+                }
+                setStop(oVals[oIdx], 'outOfRange');
+            }
+        }
+
+        var stopsLen = stops.length;
+
+        return {
+            stops: stops,
+            outerColors: [
+                stopsLen ? stops[0].color : 'transparent',
+                stopsLen ? stops[stopsLen - 1].color : 'transparent'
+            ]
+        };
+    }
+
+});
+
+function getColorStopValues(visualMapModel, valueState, dataExtent) {
+    if (dataExtent[0] === dataExtent[1]) {
+        return dataExtent.slice();
+    }
+
+    // When using colorHue mapping, it is not linear color any more.
+    // Moreover, canvas gradient seems not to be accurate linear.
+    // FIXME
+    // Should be arbitrary value 100? or based on pixel size?
+    var count = 200;
+    var step = (dataExtent[1] - dataExtent[0]) / count;
+
+    var value = dataExtent[0];
+    var stopValues = [];
+    for (var i = 0; i <= count && value < dataExtent[1]; i++) {
+        stopValues.push(value);
+        value += step;
+    }
+    stopValues.push(dataExtent[1]);
+
+    return stopValues;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var VisualMapView = extendComponentView({
+
+    type: 'visualMap',
+
+    /**
+     * @readOnly
+     * @type {Object}
+     */
+    autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1},
+
+    init: function (ecModel, api) {
+        /**
+         * @readOnly
+         * @type {module:echarts/model/Global}
+         */
+        this.ecModel = ecModel;
+
+        /**
+         * @readOnly
+         * @type {module:echarts/ExtensionAPI}
+         */
+        this.api = api;
+
+        /**
+         * @readOnly
+         * @type {module:echarts/component/visualMap/visualMapModel}
+         */
+        this.visualMapModel;
+    },
+
+    /**
+     * @protected
+     */
+    render: function (visualMapModel, ecModel, api, payload) {
+        this.visualMapModel = visualMapModel;
+
+        if (visualMapModel.get('show') === false) {
+            this.group.removeAll();
+            return;
+        }
+
+        this.doRender.apply(this, arguments);
+    },
+
+    /**
+     * @protected
+     */
+    renderBackground: function (group) {
+        var visualMapModel = this.visualMapModel;
+        var padding = normalizeCssArray$1(visualMapModel.get('padding') || 0);
+        var rect = group.getBoundingRect();
+
+        group.add(new Rect({
+            z2: -1, // Lay background rect on the lowest layer.
+            silent: true,
+            shape: {
+                x: rect.x - padding[3],
+                y: rect.y - padding[0],
+                width: rect.width + padding[3] + padding[1],
+                height: rect.height + padding[0] + padding[2]
+            },
+            style: {
+                fill: visualMapModel.get('backgroundColor'),
+                stroke: visualMapModel.get('borderColor'),
+                lineWidth: visualMapModel.get('borderWidth')
+            }
+        }));
+    },
+
+    /**
+     * @protected
+     * @param {number} targetValue can be Infinity or -Infinity
+     * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'
+     * @param {Object} [opts]
+     * @param {string=} [opts.forceState] Specify state, instead of using getValueState method.
+     * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget.
+     * @return {*} Visual value.
+     */
+    getControllerVisual: function (targetValue, visualCluster, opts) {
+        opts = opts || {};
+
+        var forceState = opts.forceState;
+        var visualMapModel = this.visualMapModel;
+        var visualObj = {};
+
+        // Default values.
+        if (visualCluster === 'symbol') {
+            visualObj.symbol = visualMapModel.get('itemSymbol');
+        }
+        if (visualCluster === 'color') {
+            var defaultColor = visualMapModel.get('contentColor');
+            visualObj.color = defaultColor;
+        }
+
+        function getter(key) {
+            return visualObj[key];
+        }
+
+        function setter(key, value) {
+            visualObj[key] = value;
+        }
+
+        var mappings = visualMapModel.controllerVisuals[
+            forceState || visualMapModel.getValueState(targetValue)
+        ];
+        var visualTypes = VisualMapping.prepareVisualTypes(mappings);
+
+        each$1(visualTypes, function (type) {
+            var visualMapping = mappings[type];
+            if (opts.convertOpacityToAlpha && type === 'opacity') {
+                type = 'colorAlpha';
+                visualMapping = mappings.__alphaForOpacity;
+            }
+            if (VisualMapping.dependsOn(type, visualCluster)) {
+                visualMapping && visualMapping.applyVisual(
+                    targetValue, getter, setter
+                );
+            }
+        });
+
+        return visualObj[visualCluster];
+    },
+
+    /**
+     * @protected
+     */
+    positionGroup: function (group) {
+        var model = this.visualMapModel;
+        var api = this.api;
+
+        positionElement(
+            group,
+            model.getBoxLayoutParams(),
+            {width: api.getWidth(), height: api.getHeight()}
+        );
+    },
+
+    /**
+     * @protected
+     * @abstract
+     */
+    doRender: noop
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\
+ * @param {module:echarts/ExtensionAPI} api
+ * @param {Array.<number>} itemSize always [short, long]
+ * @return {string} 'left' or 'right' or 'top' or 'bottom'
+ */
+function getItemAlign(visualMapModel, api, itemSize) {
+    var modelOption = visualMapModel.option;
+    var itemAlign = modelOption.align;
+
+    if (itemAlign != null && itemAlign !== 'auto') {
+        return itemAlign;
+    }
+
+    // Auto decision align.
+    var ecSize = {width: api.getWidth(), height: api.getHeight()};
+    var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;
+
+    var paramsSet = [
+        ['left', 'right', 'width'],
+        ['top', 'bottom', 'height']
+    ];
+    var reals = paramsSet[realIndex];
+    var fakeValue = [0, null, 10];
+
+    var layoutInput = {};
+    for (var i = 0; i < 3; i++) {
+        layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];
+        layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];
+    }
+
+    var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];
+    var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);
+
+    return reals[
+        (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5
+            < ecSize[rParam[1]] * 0.5 ? 0 : 1
+    ];
+}
+
+/**
+ * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and
+ * dataIndexInside means filtered index.
+ */
+function convertDataIndex(batch) {
+    each$1(batch || [], function (batchItem) {
+        if (batch.dataIndex != null) {
+            batch.dataIndexInside = batch.dataIndex;
+            batch.dataIndex = null;
+        }
+    });
+    return batch;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var linearMap$3 = linearMap;
+var each$26 = each$1;
+var mathMin$7 = Math.min;
+var mathMax$7 = Math.max;
+
+// Arbitrary value
+var HOVER_LINK_SIZE = 12;
+var HOVER_LINK_OUT = 6;
+
+// Notice:
+// Any "interval" should be by the order of [low, high].
+// "handle0" (handleIndex === 0) maps to
+// low data value: this._dataInterval[0] and has low coord.
+// "handle1" (handleIndex === 1) maps to
+// high data value: this._dataInterval[1] and has high coord.
+// The logic of transform is implemented in this._createBarGroup.
+
+var ContinuousView = VisualMapView.extend({
+
+    type: 'visualMap.continuous',
+
+    /**
+     * @override
+     */
+    init: function () {
+
+        ContinuousView.superApply(this, 'init', arguments);
+
+        /**
+         * @private
+         */
+        this._shapes = {};
+
+        /**
+         * @private
+         */
+        this._dataInterval = [];
+
+        /**
+         * @private
+         */
+        this._handleEnds = [];
+
+        /**
+         * @private
+         */
+        this._orient;
+
+        /**
+         * @private
+         */
+        this._useHandle;
+
+        /**
+         * @private
+         */
+        this._hoverLinkDataIndices = [];
+
+        /**
+         * @private
+         */
+        this._dragging;
+
+        /**
+         * @private
+         */
+        this._hovering;
+    },
+
+    /**
+     * @protected
+     * @override
+     */
+    doRender: function (visualMapModel, ecModel, api, payload) {
+        if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {
+            this._buildView();
+        }
+    },
+
+    /**
+     * @private
+     */
+    _buildView: function () {
+        this.group.removeAll();
+
+        var visualMapModel = this.visualMapModel;
+        var thisGroup = this.group;
+
+        this._orient = visualMapModel.get('orient');
+        this._useHandle = visualMapModel.get('calculable');
+
+        this._resetInterval();
+
+        this._renderBar(thisGroup);
+
+        var dataRangeText = visualMapModel.get('text');
+        this._renderEndsText(thisGroup, dataRangeText, 0);
+        this._renderEndsText(thisGroup, dataRangeText, 1);
+
+        // Do this for background size calculation.
+        this._updateView(true);
+
+        // After updating view, inner shapes is built completely,
+        // and then background can be rendered.
+        this.renderBackground(thisGroup);
+
+        // Real update view
+        this._updateView();
+
+        this._enableHoverLinkToSeries();
+        this._enableHoverLinkFromSeries();
+
+        this.positionGroup(thisGroup);
+    },
+
+    /**
+     * @private
+     */
+    _renderEndsText: function (group, dataRangeText, endsIndex) {
+        if (!dataRangeText) {
+            return;
+        }
+
+        // Compatible with ec2, text[0] map to high value, text[1] map low value.
+        var text = dataRangeText[1 - endsIndex];
+        text = text != null ? text + '' : '';
+
+        var visualMapModel = this.visualMapModel;
+        var textGap = visualMapModel.get('textGap');
+        var itemSize = visualMapModel.itemSize;
+
+        var barGroup = this._shapes.barGroup;
+        var position = this._applyTransform(
+            [
+                itemSize[0] / 2,
+                endsIndex === 0 ? -textGap : itemSize[1] + textGap
+            ],
+            barGroup
+        );
+        var align = this._applyTransform(
+            endsIndex === 0 ? 'bottom' : 'top',
+            barGroup
+        );
+        var orient = this._orient;
+        var textStyleModel = this.visualMapModel.textStyleModel;
+
+        this.group.add(new Text({
+            style: {
+                x: position[0],
+                y: position[1],
+                textVerticalAlign: orient === 'horizontal' ? 'middle' : align,
+                textAlign: orient === 'horizontal' ? align : 'center',
+                text: text,
+                textFont: textStyleModel.getFont(),
+                textFill: textStyleModel.getTextColor()
+            }
+        }));
+    },
+
+    /**
+     * @private
+     */
+    _renderBar: function (targetGroup) {
+        var visualMapModel = this.visualMapModel;
+        var shapes = this._shapes;
+        var itemSize = visualMapModel.itemSize;
+        var orient = this._orient;
+        var useHandle = this._useHandle;
+        var itemAlign = getItemAlign(visualMapModel, this.api, itemSize);
+        var barGroup = shapes.barGroup = this._createBarGroup(itemAlign);
+
+        // Bar
+        barGroup.add(shapes.outOfRange = createPolygon());
+        barGroup.add(shapes.inRange = createPolygon(
+            null,
+            useHandle ? getCursor$1(this._orient) : null,
+            bind(this._dragHandle, this, 'all', false),
+            bind(this._dragHandle, this, 'all', true)
+        ));
+
+        var textRect = visualMapModel.textStyleModel.getTextRect('国');
+        var textSize = mathMax$7(textRect.width, textRect.height);
+
+        // Handle
+        if (useHandle) {
+            shapes.handleThumbs = [];
+            shapes.handleLabels = [];
+            shapes.handleLabelPoints = [];
+
+            this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);
+            this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign);
+        }
+
+        this._createIndicator(barGroup, itemSize, textSize, orient);
+
+        targetGroup.add(barGroup);
+    },
+
+    /**
+     * @private
+     */
+    _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) {
+        var onDrift = bind(this._dragHandle, this, handleIndex, false);
+        var onDragEnd = bind(this._dragHandle, this, handleIndex, true);
+        var handleThumb = createPolygon(
+            createHandlePoints(handleIndex, textSize),
+            getCursor$1(this._orient),
+            onDrift,
+            onDragEnd
+        );
+        handleThumb.position[0] = itemSize[0];
+        barGroup.add(handleThumb);
+
+        // Text is always horizontal layout but should not be effected by
+        // transform (orient/inverse). So label is built separately but not
+        // use zrender/graphic/helper/RectText, and is located based on view
+        // group (according to handleLabelPoint) but not barGroup.
+        var textStyleModel = this.visualMapModel.textStyleModel;
+        var handleLabel = new Text({
+            draggable: true,
+            drift: onDrift,
+            onmousemove: function (e) {
+                // Fot mobile devicem, prevent screen slider on the button.
+                stop(e.event);
+            },
+            ondragend: onDragEnd,
+            style: {
+                x: 0, y: 0, text: '',
+                textFont: textStyleModel.getFont(),
+                textFill: textStyleModel.getTextColor()
+            }
+        });
+        this.group.add(handleLabel);
+
+        var handleLabelPoint = [
+            orient === 'horizontal'
+                ? textSize / 2
+                : textSize * 1.5,
+            orient === 'horizontal'
+                ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5))
+                : (handleIndex === 0 ? -textSize / 2 : textSize / 2)
+        ];
+
+        var shapes = this._shapes;
+        shapes.handleThumbs[handleIndex] = handleThumb;
+        shapes.handleLabelPoints[handleIndex] = handleLabelPoint;
+        shapes.handleLabels[handleIndex] = handleLabel;
+    },
+
+    /**
+     * @private
+     */
+    _createIndicator: function (barGroup, itemSize, textSize, orient) {
+        var indicator = createPolygon([[0, 0]], 'move');
+        indicator.position[0] = itemSize[0];
+        indicator.attr({invisible: true, silent: true});
+        barGroup.add(indicator);
+
+        var textStyleModel = this.visualMapModel.textStyleModel;
+        var indicatorLabel = new Text({
+            silent: true,
+            invisible: true,
+            style: {
+                x: 0, y: 0, text: '',
+                textFont: textStyleModel.getFont(),
+                textFill: textStyleModel.getTextColor()
+            }
+        });
+        this.group.add(indicatorLabel);
+
+        var indicatorLabelPoint = [
+            orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3,
+            0
+        ];
+
+        var shapes = this._shapes;
+        shapes.indicator = indicator;
+        shapes.indicatorLabel = indicatorLabel;
+        shapes.indicatorLabelPoint = indicatorLabelPoint;
+    },
+
+    /**
+     * @private
+     */
+    _dragHandle: function (handleIndex, isEnd, dx, dy) {
+        if (!this._useHandle) {
+            return;
+        }
+
+        this._dragging = !isEnd;
+
+        if (!isEnd) {
+            // Transform dx, dy to bar coordination.
+            var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true);
+            this._updateInterval(handleIndex, vertex[1]);
+
+            // Considering realtime, update view should be executed
+            // before dispatch action.
+            this._updateView();
+        }
+
+        // dragEnd do not dispatch action when realtime.
+        if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line
+            this.api.dispatchAction({
+                type: 'selectDataRange',
+                from: this.uid,
+                visualMapId: this.visualMapModel.id,
+                selected: this._dataInterval.slice()
+            });
+        }
+
+        if (isEnd) {
+            !this._hovering && this._clearHoverLinkToSeries();
+        }
+        else if (useHoverLinkOnHandle(this.visualMapModel)) {
+            this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);
+        }
+    },
+
+    /**
+     * @private
+     */
+    _resetInterval: function () {
+        var visualMapModel = this.visualMapModel;
+
+        var dataInterval = this._dataInterval = visualMapModel.getSelected();
+        var dataExtent = visualMapModel.getExtent();
+        var sizeExtent = [0, visualMapModel.itemSize[1]];
+
+        this._handleEnds = [
+            linearMap$3(dataInterval[0], dataExtent, sizeExtent, true),
+            linearMap$3(dataInterval[1], dataExtent, sizeExtent, true)
+        ];
+    },
+
+    /**
+     * @private
+     * @param {(number|string)} handleIndex 0 or 1 or 'all'
+     * @param {number} dx
+     * @param {number} dy
+     */
+    _updateInterval: function (handleIndex, delta) {
+        delta = delta || 0;
+        var visualMapModel = this.visualMapModel;
+        var handleEnds = this._handleEnds;
+        var sizeExtent = [0, visualMapModel.itemSize[1]];
+
+        sliderMove(
+            delta,
+            handleEnds,
+            sizeExtent,
+            handleIndex,
+            // cross is forbiden
+            0
+        );
+
+        var dataExtent = visualMapModel.getExtent();
+        // Update data interval.
+        this._dataInterval = [
+            linearMap$3(handleEnds[0], sizeExtent, dataExtent, true),
+            linearMap$3(handleEnds[1], sizeExtent, dataExtent, true)
+        ];
+    },
+
+    /**
+     * @private
+     */
+    _updateView: function (forSketch) {
+        var visualMapModel = this.visualMapModel;
+        var dataExtent = visualMapModel.getExtent();
+        var shapes = this._shapes;
+
+        var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];
+        var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;
+
+        var visualInRange = this._createBarVisual(
+            this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange'
+        );
+        var visualOutOfRange = this._createBarVisual(
+            dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange'
+        );
+
+        shapes.inRange
+            .setStyle({
+                fill: visualInRange.barColor,
+                opacity: visualInRange.opacity
+            })
+            .setShape('points', visualInRange.barPoints);
+        shapes.outOfRange
+            .setStyle({
+                fill: visualOutOfRange.barColor,
+                opacity: visualOutOfRange.opacity
+            })
+            .setShape('points', visualOutOfRange.barPoints);
+
+        this._updateHandle(inRangeHandleEnds, visualInRange);
+    },
+
+    /**
+     * @private
+     */
+    _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) {
+        var opts = {
+            forceState: forceState,
+            convertOpacityToAlpha: true
+        };
+        var colorStops = this._makeColorGradient(dataInterval, opts);
+
+        var symbolSizes = [
+            this.getControllerVisual(dataInterval[0], 'symbolSize', opts),
+            this.getControllerVisual(dataInterval[1], 'symbolSize', opts)
+        ];
+        var barPoints = this._createBarPoints(handleEnds, symbolSizes);
+
+        return {
+            barColor: new LinearGradient(0, 0, 0, 1, colorStops),
+            barPoints: barPoints,
+            handlesColor: [
+                colorStops[0].color,
+                colorStops[colorStops.length - 1].color
+            ]
+        };
+    },
+
+    /**
+     * @private
+     */
+    _makeColorGradient: function (dataInterval, opts) {
+        // Considering colorHue, which is not linear, so we have to sample
+        // to calculate gradient color stops, but not only caculate head
+        // and tail.
+        var sampleNumber = 100; // Arbitrary value.
+        var colorStops = [];
+        var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;
+
+        colorStops.push({
+            color: this.getControllerVisual(dataInterval[0], 'color', opts),
+            offset: 0
+        });
+
+        for (var i = 1; i < sampleNumber; i++) {
+            var currValue = dataInterval[0] + step * i;
+            if (currValue > dataInterval[1]) {
+                break;
+            }
+            colorStops.push({
+                color: this.getControllerVisual(currValue, 'color', opts),
+                offset: i / sampleNumber
+            });
+        }
+
+        colorStops.push({
+            color: this.getControllerVisual(dataInterval[1], 'color', opts),
+            offset: 1
+        });
+
+        return colorStops;
+    },
+
+    /**
+     * @private
+     */
+    _createBarPoints: function (handleEnds, symbolSizes) {
+        var itemSize = this.visualMapModel.itemSize;
+
+        return [
+            [itemSize[0] - symbolSizes[0], handleEnds[0]],
+            [itemSize[0], handleEnds[0]],
+            [itemSize[0], handleEnds[1]],
+            [itemSize[0] - symbolSizes[1], handleEnds[1]]
+        ];
+    },
+
+    /**
+     * @private
+     */
+    _createBarGroup: function (itemAlign) {
+        var orient = this._orient;
+        var inverse = this.visualMapModel.get('inverse');
+
+        return new Group(
+            (orient === 'horizontal' && !inverse)
+            ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2}
+            : (orient === 'horizontal' && inverse)
+            ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2}
+            : (orient === 'vertical' && !inverse)
+            ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]}
+            : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]}
+        );
+    },
+
+    /**
+     * @private
+     */
+    _updateHandle: function (handleEnds, visualInRange) {
+        if (!this._useHandle) {
+            return;
+        }
+
+        var shapes = this._shapes;
+        var visualMapModel = this.visualMapModel;
+        var handleThumbs = shapes.handleThumbs;
+        var handleLabels = shapes.handleLabels;
+
+        each$26([0, 1], function (handleIndex) {
+            var handleThumb = handleThumbs[handleIndex];
+            handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);
+            handleThumb.position[1] = handleEnds[handleIndex];
+
+            // Update handle label position.
+            var textPoint = applyTransform$1(
+                shapes.handleLabelPoints[handleIndex],
+                getTransform(handleThumb, this.group)
+            );
+            handleLabels[handleIndex].setStyle({
+                x: textPoint[0],
+                y: textPoint[1],
+                text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),
+                textVerticalAlign: 'middle',
+                textAlign: this._applyTransform(
+                    this._orient === 'horizontal'
+                        ? (handleIndex === 0 ? 'bottom' : 'top')
+                        : 'left',
+                    shapes.barGroup
+                )
+            });
+        }, this);
+    },
+
+    /**
+     * @private
+     * @param {number} cursorValue
+     * @param {number} textValue
+     * @param {string} [rangeSymbol]
+     * @param {number} [halfHoverLinkSize]
+     */
+    _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {
+        var visualMapModel = this.visualMapModel;
+        var dataExtent = visualMapModel.getExtent();
+        var itemSize = visualMapModel.itemSize;
+        var sizeExtent = [0, itemSize[1]];
+        var pos = linearMap$3(cursorValue, dataExtent, sizeExtent, true);
+
+        var shapes = this._shapes;
+        var indicator = shapes.indicator;
+        if (!indicator) {
+            return;
+        }
+
+        indicator.position[1] = pos;
+        indicator.attr('invisible', false);
+        indicator.setShape('points', createIndicatorPoints(
+            !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]
+        ));
+
+        var opts = {convertOpacityToAlpha: true};
+        var color = this.getControllerVisual(cursorValue, 'color', opts);
+        indicator.setStyle('fill', color);
+
+        // Update handle label position.
+        var textPoint = applyTransform$1(
+            shapes.indicatorLabelPoint,
+            getTransform(indicator, this.group)
+        );
+
+        var indicatorLabel = shapes.indicatorLabel;
+        indicatorLabel.attr('invisible', false);
+        var align = this._applyTransform('left', shapes.barGroup);
+        var orient = this._orient;
+        indicatorLabel.setStyle({
+            text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),
+            textVerticalAlign: orient === 'horizontal' ? align : 'middle',
+            textAlign: orient === 'horizontal' ? 'center' : align,
+            x: textPoint[0],
+            y: textPoint[1]
+        });
+    },
+
+    /**
+     * @private
+     */
+    _enableHoverLinkToSeries: function () {
+        var self = this;
+        this._shapes.barGroup
+
+            .on('mousemove', function (e) {
+                self._hovering = true;
+
+                if (!self._dragging) {
+                    var itemSize = self.visualMapModel.itemSize;
+                    var pos = self._applyTransform(
+                        [e.offsetX, e.offsetY], self._shapes.barGroup, true, true
+                    );
+                    // For hover link show when hover handle, which might be
+                    // below or upper than sizeExtent.
+                    pos[1] = mathMin$7(mathMax$7(0, pos[1]), itemSize[1]);
+                    self._doHoverLinkToSeries(
+                        pos[1],
+                        0 <= pos[0] && pos[0] <= itemSize[0]
+                    );
+                }
+            })
+
+            .on('mouseout', function () {
+                // When mouse is out of handle, hoverLink still need
+                // to be displayed when realtime is set as false.
+                self._hovering = false;
+                !self._dragging && self._clearHoverLinkToSeries();
+            });
+    },
+
+    /**
+     * @private
+     */
+    _enableHoverLinkFromSeries: function () {
+        var zr = this.api.getZr();
+
+        if (this.visualMapModel.option.hoverLink) {
+            zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this);
+            zr.on('mouseout', this._hideIndicator, this);
+        }
+        else {
+            this._clearHoverLinkFromSeries();
+        }
+    },
+
+    /**
+     * @private
+     */
+    _doHoverLinkToSeries: function (cursorPos, hoverOnBar) {
+        var visualMapModel = this.visualMapModel;
+        var itemSize = visualMapModel.itemSize;
+
+        if (!visualMapModel.option.hoverLink) {
+            return;
+        }
+
+        var sizeExtent = [0, itemSize[1]];
+        var dataExtent = visualMapModel.getExtent();
+
+        // For hover link show when hover handle, which might be below or upper than sizeExtent.
+        cursorPos = mathMin$7(mathMax$7(sizeExtent[0], cursorPos), sizeExtent[1]);
+
+        var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);
+        var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];
+        var cursorValue = linearMap$3(cursorPos, sizeExtent, dataExtent, true);
+        var valueRange = [
+            linearMap$3(hoverRange[0], sizeExtent, dataExtent, true),
+            linearMap$3(hoverRange[1], sizeExtent, dataExtent, true)
+        ];
+        // Consider data range is out of visualMap range, see test/visualMap-continuous.html,
+        // where china and india has very large population.
+        hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);
+        hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity);
+
+        // Do not show indicator when mouse is over handle,
+        // otherwise labels overlap, especially when dragging.
+        if (hoverOnBar) {
+            if (valueRange[0] === -Infinity) {
+                this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);
+            }
+            else if (valueRange[1] === Infinity) {
+                this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);
+            }
+            else {
+                this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);
+            }
+        }
+
+        // When realtime is set as false, handles, which are in barGroup,
+        // also trigger hoverLink, which help user to realize where they
+        // focus on when dragging. (see test/heatmap-large.html)
+        // When realtime is set as true, highlight will not show when hover
+        // handle, because the label on handle, which displays a exact value
+        // but not range, might mislead users.
+        var oldBatch = this._hoverLinkDataIndices;
+        var newBatch = [];
+        if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {
+            newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);
+        }
+
+        var resultBatches = compressBatches(oldBatch, newBatch);
+
+        this._dispatchHighDown('downplay', convertDataIndex(resultBatches[0]));
+        this._dispatchHighDown('highlight', convertDataIndex(resultBatches[1]));
+    },
+
+    /**
+     * @private
+     */
+    _hoverLinkFromSeriesMouseOver: function (e) {
+        var el = e.target;
+        var visualMapModel = this.visualMapModel;
+
+        if (!el || el.dataIndex == null) {
+            return;
+        }
+
+        var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex);
+
+        if (!visualMapModel.isTargetSeries(dataModel)) {
+            return;
+        }
+
+        var data = dataModel.getData(el.dataType);
+        var value = data.get(visualMapModel.getDataDimension(data), el.dataIndex, true);
+
+        if (!isNaN(value)) {
+            this._showIndicator(value, value);
+        }
+    },
+
+    /**
+     * @private
+     */
+    _hideIndicator: function () {
+        var shapes = this._shapes;
+        shapes.indicator && shapes.indicator.attr('invisible', true);
+        shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);
+    },
+
+    /**
+     * @private
+     */
+    _clearHoverLinkToSeries: function () {
+        this._hideIndicator();
+
+        var indices = this._hoverLinkDataIndices;
+        this._dispatchHighDown('downplay', convertDataIndex(indices));
+
+        indices.length = 0;
+    },
+
+    /**
+     * @private
+     */
+    _clearHoverLinkFromSeries: function () {
+        this._hideIndicator();
+
+        var zr = this.api.getZr();
+        zr.off('mouseover', this._hoverLinkFromSeriesMouseOver);
+        zr.off('mouseout', this._hideIndicator);
+    },
+
+    /**
+     * @private
+     */
+    _applyTransform: function (vertex, element, inverse, global) {
+        var transform = getTransform(element, global ? null : this.group);
+
+        return graphic[
+            isArray(vertex) ? 'applyTransform' : 'transformDirection'
+        ](vertex, transform, inverse);
+    },
+
+    /**
+     * @private
+     */
+    _dispatchHighDown: function (type, batch) {
+        batch && batch.length && this.api.dispatchAction({
+            type: type,
+            batch: batch
+        });
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        this._clearHoverLinkFromSeries();
+        this._clearHoverLinkToSeries();
+    },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        this._clearHoverLinkFromSeries();
+        this._clearHoverLinkToSeries();
+    }
+
+});
+
+function createPolygon(points, cursor, onDrift, onDragEnd) {
+    return new Polygon({
+        shape: {points: points},
+        draggable: !!onDrift,
+        cursor: cursor,
+        drift: onDrift,
+        onmousemove: function (e) {
+            // Fot mobile devicem, prevent screen slider on the button.
+            stop(e.event);
+        },
+        ondragend: onDragEnd
+    });
+}
+
+function createHandlePoints(handleIndex, textSize) {
+    return handleIndex === 0
+        ? [[0, 0], [textSize, 0], [textSize, -textSize]]
+        : [[0, 0], [textSize, 0], [textSize, textSize]];
+}
+
+function createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {
+    return isRange
+        ? [ // indicate range
+            [0, -mathMin$7(halfHoverLinkSize, mathMax$7(pos, 0))],
+            [HOVER_LINK_OUT, 0],
+            [0, mathMin$7(halfHoverLinkSize, mathMax$7(extentMax - pos, 0))]
+        ]
+        : [ // indicate single value
+            [0, 0], [5, -5], [5, 5]
+        ];
+}
+
+function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {
+    var halfHoverLinkSize = HOVER_LINK_SIZE / 2;
+    var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');
+    if (hoverLinkDataSize) {
+        halfHoverLinkSize = linearMap$3(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;
+    }
+    return halfHoverLinkSize;
+}
+
+function useHoverLinkOnHandle(visualMapModel) {
+    var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle');
+    return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle);
+}
+
+function getCursor$1(orient) {
+    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var actionInfo$2 = {
+    type: 'selectDataRange',
+    event: 'dataRangeSelected',
+    // FIXME use updateView appears wrong
+    update: 'update'
+};
+
+registerAction(actionInfo$2, function (payload, ecModel) {
+
+    ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) {
+        model.setSelected(payload.selected);
+    });
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * DataZoom component entry
+ */
+
+registerPreprocessor(preprocessor$2);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PiecewiseModel = VisualMapModel.extend({
+
+    type: 'visualMap.piecewise',
+
+    /**
+     * Order Rule:
+     *
+     * option.categories / option.pieces / option.text / option.selected:
+     *     If !option.inverse,
+     *     Order when vertical: ['top', ..., 'bottom'].
+     *     Order when horizontal: ['left', ..., 'right'].
+     *     If option.inverse, the meaning of
+     *     the order should be reversed.
+     *
+     * this._pieceList:
+     *     The order is always [low, ..., high].
+     *
+     * Mapping from location to low-high:
+     *     If !option.inverse
+     *     When vertical, top is high.
+     *     When horizontal, right is high.
+     *     If option.inverse, reverse.
+     */
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+        selected: null,             // Object. If not specified, means selected.
+                                    // When pieces and splitNumber: {'0': true, '5': true}
+                                    // When categories: {'cate1': false, 'cate3': true}
+                                    // When selected === false, means all unselected.
+
+        minOpen: false,             // Whether include values that smaller than `min`.
+        maxOpen: false,             // Whether include values that bigger than `max`.
+
+        align: 'auto',              // 'auto', 'left', 'right'
+        itemWidth: 20,              // When put the controller vertically, it is the length of
+                                    // horizontal side of each item. Otherwise, vertical side.
+        itemHeight: 14,             // When put the controller vertically, it is the length of
+                                    // vertical side of each item. Otherwise, horizontal side.
+        itemSymbol: 'roundRect',
+        pieceList: null,            // Each item is Object, with some of those attrs:
+                                    // {min, max, lt, gt, lte, gte, value,
+                                    // color, colorSaturation, colorAlpha, opacity,
+                                    // symbol, symbolSize}, which customize the range or visual
+                                    // coding of the certain piece. Besides, see "Order Rule".
+        categories: null,           // category names, like: ['some1', 'some2', 'some3'].
+                                    // Attr min/max are ignored when categories set. See "Order Rule"
+        splitNumber: 5,             // If set to 5, auto split five pieces equally.
+                                    // If set to 0 and component type not set, component type will be
+                                    // determined as "continuous". (It is less reasonable but for ec2
+                                    // compatibility, see echarts/component/visualMap/typeDefaulter)
+        selectedMode: 'multiple',   // Can be 'multiple' or 'single'.
+        itemGap: 10,                // The gap between two items, in px.
+        hoverLink: true,            // Enable hover highlight.
+
+        showLabel: null             // By default, when text is used, label will hide (the logic
+                                    // is remained for compatibility reason)
+    },
+
+    /**
+     * @override
+     */
+    optionUpdated: function (newOption, isInit) {
+        PiecewiseModel.superApply(this, 'optionUpdated', arguments);
+
+        /**
+         * The order is always [low, ..., high].
+         * [{text: string, interval: Array.<number>}, ...]
+         * @private
+         * @type {Array.<Object>}
+         */
+        this._pieceList = [];
+
+        this.resetExtent();
+
+        /**
+         * 'pieces', 'categories', 'splitNumber'
+         * @type {string}
+         */
+        var mode = this._mode = this._determineMode();
+
+        resetMethods[this._mode].call(this);
+
+        this._resetSelected(newOption, isInit);
+
+        var categories = this.option.categories;
+
+        this.resetVisual(function (mappingOption, state) {
+            if (mode === 'categories') {
+                mappingOption.mappingMethod = 'category';
+                mappingOption.categories = clone(categories);
+            }
+            else {
+                mappingOption.dataExtent = this.getExtent();
+                mappingOption.mappingMethod = 'piecewise';
+                mappingOption.pieceList = map(this._pieceList, function (piece) {
+                    var piece = clone(piece);
+                    if (state !== 'inRange') {
+                        // FIXME
+                        // outOfRange do not support special visual in pieces.
+                        piece.visual = null;
+                    }
+                    return piece;
+                });
+            }
+        });
+    },
+
+    /**
+     * @protected
+     * @override
+     */
+    completeVisualOption: function () {
+        // Consider this case:
+        // visualMap: {
+        //      pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}]
+        // }
+        // where no inRange/outOfRange set but only pieces. So we should make
+        // default inRange/outOfRange for this case, otherwise visuals that only
+        // appear in `pieces` will not be taken into account in visual encoding.
+
+        var option = this.option;
+        var visualTypesInPieces = {};
+        var visualTypes = VisualMapping.listVisualTypes();
+        var isCategory = this.isCategory();
+
+        each$1(option.pieces, function (piece) {
+            each$1(visualTypes, function (visualType) {
+                if (piece.hasOwnProperty(visualType)) {
+                    visualTypesInPieces[visualType] = 1;
+                }
+            });
+        });
+
+        each$1(visualTypesInPieces, function (v, visualType) {
+            var exists = 0;
+            each$1(this.stateList, function (state) {
+                exists |= has(option, state, visualType)
+                    || has(option.target, state, visualType);
+            }, this);
+
+            !exists && each$1(this.stateList, function (state) {
+                (option[state] || (option[state] = {}))[visualType] = visualDefault.get(
+                    visualType, state === 'inRange' ? 'active' : 'inactive', isCategory
+                );
+            });
+        }, this);
+
+        function has(obj, state, visualType) {
+            return obj && obj[state] && (
+                isObject$1(obj[state])
+                    ? obj[state].hasOwnProperty(visualType)
+                    : obj[state] === visualType // e.g., inRange: 'symbol'
+            );
+        }
+
+        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);
+    },
+
+    _resetSelected: function (newOption, isInit) {
+        var thisOption = this.option;
+        var pieceList = this._pieceList;
+
+        // Selected do not merge but all override.
+        var selected = (isInit ? thisOption : newOption).selected || {};
+        thisOption.selected = selected;
+
+        // Consider 'not specified' means true.
+        each$1(pieceList, function (piece, index) {
+            var key = this.getSelectedMapKey(piece);
+            if (!selected.hasOwnProperty(key)) {
+                selected[key] = true;
+            }
+        }, this);
+
+        if (thisOption.selectedMode === 'single') {
+            // Ensure there is only one selected.
+            var hasSel = false;
+
+            each$1(pieceList, function (piece, index) {
+                var key = this.getSelectedMapKey(piece);
+                if (selected[key]) {
+                    hasSel
+                        ? (selected[key] = false)
+                        : (hasSel = true);
+                }
+            }, this);
+        }
+        // thisOption.selectedMode === 'multiple', default: all selected.
+    },
+
+    /**
+     * @public
+     */
+    getSelectedMapKey: function (piece) {
+        return this._mode === 'categories'
+            ? piece.value + '' : piece.index + '';
+    },
+
+    /**
+     * @public
+     */
+    getPieceList: function () {
+        return this._pieceList;
+    },
+
+    /**
+     * @private
+     * @return {string}
+     */
+    _determineMode: function () {
+        var option = this.option;
+
+        return option.pieces && option.pieces.length > 0
+            ? 'pieces'
+            : this.option.categories
+            ? 'categories'
+            : 'splitNumber';
+    },
+
+    /**
+     * @public
+     * @override
+     */
+    setSelected: function (selected) {
+        this.option.selected = clone(selected);
+    },
+
+    /**
+     * @public
+     * @override
+     */
+    getValueState: function (value) {
+        var index = VisualMapping.findPieceIndex(value, this._pieceList);
+
+        return index != null
+            ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])]
+                ? 'inRange' : 'outOfRange'
+            )
+            : 'outOfRange';
+    },
+
+    /**
+     * @public
+     * @params {number} pieceIndex piece index in visualMapModel.getPieceList()
+     * @return {Array.<Object>} [{seriesId, dataIndices: <Array.<number>>}, ...]
+     */
+    findTargetDataIndices: function (pieceIndex) {
+        var result = [];
+
+        this.eachTargetSeries(function (seriesModel) {
+            var dataIndices = [];
+            var data = seriesModel.getData();
+
+            data.each(this.getDataDimension(data), function (value, dataIndex) {
+                // Should always base on model pieceList, because it is order sensitive.
+                var pIdx = VisualMapping.findPieceIndex(value, this._pieceList);
+                pIdx === pieceIndex && dataIndices.push(dataIndex);
+            }, this);
+
+            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});
+        }, this);
+
+        return result;
+    },
+
+    /**
+     * @private
+     * @param {Object} piece piece.value or piece.interval is required.
+     * @return {number} Can be Infinity or -Infinity
+     */
+    getRepresentValue: function (piece) {
+        var representValue;
+        if (this.isCategory()) {
+            representValue = piece.value;
+        }
+        else {
+            if (piece.value != null) {
+                representValue = piece.value;
+            }
+            else {
+                var pieceInterval = piece.interval || [];
+                representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity)
+                    ? 0
+                    : (pieceInterval[0] + pieceInterval[1]) / 2;
+            }
+        }
+        return representValue;
+    },
+
+    getVisualMeta: function (getColorVisual) {
+        // Do not support category. (category axis is ordinal, numerical)
+        if (this.isCategory()) {
+            return;
+        }
+
+        var stops = [];
+        var outerColors = [];
+        var visualMapModel = this;
+
+        function setStop(interval, valueState) {
+            var representValue = visualMapModel.getRepresentValue({interval: interval});
+            if (!valueState) {
+                valueState = visualMapModel.getValueState(representValue);
+            }
+            var color = getColorVisual(representValue, valueState);
+            if (interval[0] === -Infinity) {
+                outerColors[0] = color;
+            }
+            else if (interval[1] === Infinity) {
+                outerColors[1] = color;
+            }
+            else {
+                stops.push(
+                    {value: interval[0], color: color},
+                    {value: interval[1], color: color}
+                );
+            }
+        }
+
+        // Suplement
+        var pieceList = this._pieceList.slice();
+        if (!pieceList.length) {
+            pieceList.push({interval: [-Infinity, Infinity]});
+        }
+        else {
+            var edge = pieceList[0].interval[0];
+            edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]});
+            edge = pieceList[pieceList.length - 1].interval[1];
+            edge !== Infinity && pieceList.push({interval: [edge, Infinity]});
+        }
+
+        var curr = -Infinity;
+        each$1(pieceList, function (piece) {
+            var interval = piece.interval;
+            if (interval) {
+                // Fulfill gap.
+                interval[0] > curr && setStop([curr, interval[0]], 'outOfRange');
+                setStop(interval.slice());
+                curr = interval[1];
+            }
+        }, this);
+
+        return {stops: stops, outerColors: outerColors};
+    }
+
+});
+
+/**
+ * Key is this._mode
+ * @type {Object}
+ * @this {module:echarts/component/viusalMap/PiecewiseMode}
+ */
+var resetMethods = {
+
+    splitNumber: function () {
+        var thisOption = this.option;
+        var pieceList = this._pieceList;
+        var precision = Math.min(thisOption.precision, 20);
+        var dataExtent = this.getExtent();
+        var splitNumber = thisOption.splitNumber;
+        splitNumber = Math.max(parseInt(splitNumber, 10), 1);
+        thisOption.splitNumber = splitNumber;
+
+        var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber;
+        // Precision auto-adaption
+        while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {
+            precision++;
+        }
+        thisOption.precision = precision;
+        splitStep = +splitStep.toFixed(precision);
+
+        var index = 0;
+
+        if (thisOption.minOpen) {
+            pieceList.push({
+                index: index++,
+                interval: [-Infinity, dataExtent[0]],
+                close: [0, 0]
+            });
+        }
+
+        for (
+            var curr = dataExtent[0], len = index + splitNumber;
+            index < len;
+            curr += splitStep
+        ) {
+            var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep);
+
+            pieceList.push({
+                index: index++,
+                interval: [curr, max],
+                close: [1, 1]
+            });
+        }
+
+        if (thisOption.maxOpen) {
+            pieceList.push({
+                index: index++,
+                interval: [dataExtent[1], Infinity],
+                close: [0, 0]
+            });
+        }
+
+        reformIntervals(pieceList);
+
+        each$1(pieceList, function (piece) {
+            piece.text = this.formatValueText(piece.interval);
+        }, this);
+    },
+
+    categories: function () {
+        var thisOption = this.option;
+        each$1(thisOption.categories, function (cate) {
+            // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。
+            // 是否改一致。
+            this._pieceList.push({
+                text: this.formatValueText(cate, true),
+                value: cate
+            });
+        }, this);
+
+        // See "Order Rule".
+        normalizeReverse(thisOption, this._pieceList);
+    },
+
+    pieces: function () {
+        var thisOption = this.option;
+        var pieceList = this._pieceList;
+
+        each$1(thisOption.pieces, function (pieceListItem, index) {
+
+            if (!isObject$1(pieceListItem)) {
+                pieceListItem = {value: pieceListItem};
+            }
+
+            var item = {text: '', index: index};
+
+            if (pieceListItem.label != null) {
+                item.text = pieceListItem.label;
+            }
+
+            if (pieceListItem.hasOwnProperty('value')) {
+                var value = item.value = pieceListItem.value;
+                item.interval = [value, value];
+                item.close = [1, 1];
+            }
+            else {
+                // `min` `max` is legacy option.
+                // `lt` `gt` `lte` `gte` is recommanded.
+                var interval = item.interval = [];
+                var close = item.close = [0, 0];
+
+                var closeList = [1, 0, 1];
+                var infinityList = [-Infinity, Infinity];
+
+                var useMinMax = [];
+                for (var lg = 0; lg < 2; lg++) {
+                    var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];
+                    for (var i = 0; i < 3 && interval[lg] == null; i++) {
+                        interval[lg] = pieceListItem[names[i]];
+                        close[lg] = closeList[i];
+                        useMinMax[lg] = i === 2;
+                    }
+                    interval[lg] == null && (interval[lg] = infinityList[lg]);
+                }
+                useMinMax[0] && interval[1] === Infinity && (close[0] = 0);
+                useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);
+
+                if (__DEV__) {
+                    if (interval[0] > interval[1]) {
+                        console.warn(
+                            'Piece ' + index + 'is illegal: ' + interval
+                            + ' lower bound should not greater then uppper bound.'
+                        );
+                    }
+                }
+
+                if (interval[0] === interval[1] && close[0] && close[1]) {
+                    // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}],
+                    // we use value to lift the priority when min === max
+                    item.value = interval[0];
+                }
+            }
+
+            item.visual = VisualMapping.retrieveVisuals(pieceListItem);
+
+            pieceList.push(item);
+
+        }, this);
+
+        // See "Order Rule".
+        normalizeReverse(thisOption, pieceList);
+        // Only pieces
+        reformIntervals(pieceList);
+
+        each$1(pieceList, function (piece) {
+            var close = piece.close;
+            var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]];
+            piece.text = piece.text || this.formatValueText(
+                piece.value != null ? piece.value : piece.interval,
+                false,
+                edgeSymbols
+            );
+        }, this);
+    }
+};
+
+function normalizeReverse(thisOption, pieceList) {
+    var inverse = thisOption.inverse;
+    if (thisOption.orient === 'vertical' ? !inverse : inverse) {
+            pieceList.reverse();
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var PiecewiseVisualMapView = VisualMapView.extend({
+
+    type: 'visualMap.piecewise',
+
+    /**
+     * @protected
+     * @override
+     */
+    doRender: function () {
+        var thisGroup = this.group;
+
+        thisGroup.removeAll();
+
+        var visualMapModel = this.visualMapModel;
+        var textGap = visualMapModel.get('textGap');
+        var textStyleModel = visualMapModel.textStyleModel;
+        var textFont = textStyleModel.getFont();
+        var textFill = textStyleModel.getTextColor();
+        var itemAlign = this._getItemAlign();
+        var itemSize = visualMapModel.itemSize;
+        var viewData = this._getViewData();
+        var endsText = viewData.endsText;
+        var showLabel = retrieve(visualMapModel.get('showLabel', true), !endsText);
+
+        endsText && this._renderEndsText(
+            thisGroup, endsText[0], itemSize, showLabel, itemAlign
+        );
+
+        each$1(viewData.viewPieceList, renderItem, this);
+
+        endsText && this._renderEndsText(
+            thisGroup, endsText[1], itemSize, showLabel, itemAlign
+        );
+
+        box(
+            visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap')
+        );
+
+        this.renderBackground(thisGroup);
+
+        this.positionGroup(thisGroup);
+
+        function renderItem(item) {
+            var piece = item.piece;
+
+            var itemGroup = new Group();
+            itemGroup.onclick = bind(this._onItemClick, this, piece);
+
+            this._enableHoverLink(itemGroup, item.indexInModelPieceList);
+
+            var representValue = visualMapModel.getRepresentValue(piece);
+
+            this._createItemSymbol(
+                itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]
+            );
+
+            if (showLabel) {
+                var visualState = this.visualMapModel.getValueState(representValue);
+
+                itemGroup.add(new Text({
+                    style: {
+                        x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap,
+                        y: itemSize[1] / 2,
+                        text: piece.text,
+                        textVerticalAlign: 'middle',
+                        textAlign: itemAlign,
+                        textFont: textFont,
+                        textFill: textFill,
+                        opacity: visualState === 'outOfRange' ? 0.5 : 1
+                    }
+                }));
+            }
+
+            thisGroup.add(itemGroup);
+        }
+    },
+
+    /**
+     * @private
+     */
+    _enableHoverLink: function (itemGroup, pieceIndex) {
+        itemGroup
+            .on('mouseover', bind(onHoverLink, this, 'highlight'))
+            .on('mouseout', bind(onHoverLink, this, 'downplay'));
+
+        function onHoverLink(method) {
+            var visualMapModel = this.visualMapModel;
+
+            visualMapModel.option.hoverLink && this.api.dispatchAction({
+                type: method,
+                batch: convertDataIndex(
+                    visualMapModel.findTargetDataIndices(pieceIndex)
+                )
+            });
+        }
+    },
+
+    /**
+     * @private
+     */
+    _getItemAlign: function () {
+        var visualMapModel = this.visualMapModel;
+        var modelOption = visualMapModel.option;
+
+        if (modelOption.orient === 'vertical') {
+            return getItemAlign(
+                visualMapModel, this.api, visualMapModel.itemSize
+            );
+        }
+        else { // horizontal, most case left unless specifying right.
+            var align = modelOption.align;
+            if (!align || align === 'auto') {
+                align = 'left';
+            }
+            return align;
+        }
+    },
+
+    /**
+     * @private
+     */
+    _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) {
+        if (!text) {
+            return;
+        }
+
+        var itemGroup = new Group();
+        var textStyleModel = this.visualMapModel.textStyleModel;
+
+        itemGroup.add(new Text({
+            style: {
+                x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2,
+                y: itemSize[1] / 2,
+                textVerticalAlign: 'middle',
+                textAlign: showLabel ? itemAlign : 'center',
+                text: text,
+                textFont: textStyleModel.getFont(),
+                textFill: textStyleModel.getTextColor()
+            }
+        }));
+
+        group.add(itemGroup);
+    },
+
+    /**
+     * @private
+     * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.
+     */
+    _getViewData: function () {
+        var visualMapModel = this.visualMapModel;
+
+        var viewPieceList = map(visualMapModel.getPieceList(), function (piece, index) {
+            return {piece: piece, indexInModelPieceList: index};
+        });
+        var endsText = visualMapModel.get('text');
+
+        // Consider orient and inverse.
+        var orient = visualMapModel.get('orient');
+        var inverse = visualMapModel.get('inverse');
+
+        // Order of model pieceList is always [low, ..., high]
+        if (orient === 'horizontal' ? inverse : !inverse) {
+            viewPieceList.reverse();
+        }
+        // Origin order of endsText is [high, low]
+        else if (endsText) {
+            endsText = endsText.slice().reverse();
+        }
+
+        return {viewPieceList: viewPieceList, endsText: endsText};
+    },
+
+    /**
+     * @private
+     */
+    _createItemSymbol: function (group, representValue, shapeParam) {
+        group.add(createSymbol(
+            this.getControllerVisual(representValue, 'symbol'),
+            shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3],
+            this.getControllerVisual(representValue, 'color')
+        ));
+    },
+
+    /**
+     * @private
+     */
+    _onItemClick: function (piece) {
+        var visualMapModel = this.visualMapModel;
+        var option = visualMapModel.option;
+        var selected = clone(option.selected);
+        var newKey = visualMapModel.getSelectedMapKey(piece);
+
+        if (option.selectedMode === 'single') {
+            selected[newKey] = true;
+            each$1(selected, function (o, key) {
+                selected[key] = key === newKey;
+            });
+        }
+        else {
+            selected[newKey] = !selected[newKey];
+        }
+
+        this.api.dispatchAction({
+            type: 'selectDataRange',
+            from: this.uid,
+            visualMapId: this.visualMapModel.id,
+            selected: selected
+        });
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * DataZoom component entry
+ */
+
+registerPreprocessor(preprocessor$2);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * visualMap component entry
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var addCommas$1 = addCommas;
+var encodeHTML$1 = encodeHTML;
+
+function fillLabel(opt) {
+    defaultEmphasis(opt, 'label', ['show']);
+}
+var MarkerModel = extendComponentModel({
+
+    type: 'marker',
+
+    dependencies: ['series', 'grid', 'polar', 'geo'],
+
+    /**
+     * @overrite
+     */
+    init: function (option, parentModel, ecModel, extraOpt) {
+
+        if (__DEV__) {
+            if (this.type === 'marker') {
+                throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.');
+            }
+        }
+        this.mergeDefaultAndTheme(option, ecModel);
+        this.mergeOption(option, ecModel, extraOpt.createdBySelf, true);
+    },
+
+    /**
+     * @return {boolean}
+     */
+    isAnimationEnabled: function () {
+        if (env$1.node) {
+            return false;
+        }
+
+        var hostSeries = this.__hostSeries;
+        return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled();
+    },
+
+    mergeOption: function (newOpt, ecModel, createdBySelf, isInit) {
+        var MarkerModel = this.constructor;
+        var modelPropName = this.mainType + 'Model';
+        if (!createdBySelf) {
+            ecModel.eachSeries(function (seriesModel) {
+
+                var markerOpt = seriesModel.get(this.mainType, true);
+
+                var markerModel = seriesModel[modelPropName];
+                if (!markerOpt || !markerOpt.data) {
+                    seriesModel[modelPropName] = null;
+                    return;
+                }
+                if (!markerModel) {
+                    if (isInit) {
+                        // Default label emphasis `position` and `show`
+                        fillLabel(markerOpt);
+                    }
+                    each$1(markerOpt.data, function (item) {
+                        // FIXME Overwrite fillLabel method ?
+                        if (item instanceof Array) {
+                            fillLabel(item[0]);
+                            fillLabel(item[1]);
+                        }
+                        else {
+                            fillLabel(item);
+                        }
+                    });
+
+                    markerModel = new MarkerModel(
+                        markerOpt, this, ecModel
+                    );
+
+                    extend(markerModel, {
+                        mainType: this.mainType,
+                        // Use the same series index and name
+                        seriesIndex: seriesModel.seriesIndex,
+                        name: seriesModel.name,
+                        createdBySelf: true
+                    });
+
+                    markerModel.__hostSeries = seriesModel;
+                }
+                else {
+                    markerModel.mergeOption(markerOpt, ecModel, true);
+                }
+                seriesModel[modelPropName] = markerModel;
+            }, this);
+        }
+    },
+
+    formatTooltip: function (dataIndex) {
+        var data = this.getData();
+        var value = this.getRawValue(dataIndex);
+        var formattedValue = isArray(value)
+            ? map(value, addCommas$1).join(', ') : addCommas$1(value);
+        var name = data.getName(dataIndex);
+        var html = encodeHTML$1(this.name);
+        if (value != null || name) {
+            html += '<br />';
+        }
+        if (name) {
+            html += encodeHTML$1(name);
+            if (value != null) {
+                html += ' : ';
+            }
+        }
+        if (value != null) {
+            html += encodeHTML$1(formattedValue);
+        }
+        return html;
+    },
+
+    getData: function () {
+        return this._data;
+    },
+
+    setData: function (data) {
+        this._data = data;
+    }
+});
+
+mixin(MarkerModel, dataFormatMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+MarkerModel.extend({
+
+    type: 'markPoint',
+
+    defaultOption: {
+        zlevel: 0,
+        z: 5,
+        symbol: 'pin',
+        symbolSize: 50,
+        //symbolRotate: 0,
+        //symbolOffset: [0, 0]
+        tooltip: {
+            trigger: 'item'
+        },
+        label: {
+            show: true,
+            position: 'inside'
+        },
+        itemStyle: {
+            borderWidth: 2
+        },
+        emphasis: {
+            label: {
+                show: true
+            }
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var indexOf$2 = indexOf;
+
+function hasXOrY(item) {
+    return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));
+}
+
+function hasXAndY(item) {
+    return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));
+}
+
+// Make it simple, do not visit all stacked value to count precision.
+// function getPrecision(data, valueAxisDim, dataIndex) {
+//     var precision = -1;
+//     var stackedDim = data.mapDimension(valueAxisDim);
+//     do {
+//         precision = Math.max(
+//             numberUtil.getPrecision(data.get(stackedDim, dataIndex)),
+//             precision
+//         );
+//         var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');
+//         if (stackedOnSeries) {
+//             var byValue = data.get(data.getCalculationInfo('stackedByDimension'), dataIndex);
+//             data = stackedOnSeries.getData();
+//             dataIndex = data.indexOf(data.getCalculationInfo('stackedByDimension'), byValue);
+//             stackedDim = data.getCalculationInfo('stackedDimension');
+//         }
+//         else {
+//             data = null;
+//         }
+//     } while (data);
+
+//     return precision;
+// }
+
+function markerTypeCalculatorWithExtent(
+    mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex
+) {
+    var coordArr = [];
+
+    var stacked = isDimensionStacked(data, targetDataDim /*, otherDataDim*/);
+    var calcDataDim = stacked
+        ? data.getCalculationInfo('stackResultDimension')
+        : targetDataDim;
+
+    var value = numCalculate(data, calcDataDim, mlType);
+
+    var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];
+    coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);
+    coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex);
+
+    // Make it simple, do not visit all stacked value to count precision.
+    var precision = getPrecision(data.get(targetDataDim, dataIndex));
+    precision = Math.min(precision, 20);
+    if (precision >= 0) {
+        coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);
+    }
+
+    return coordArr;
+}
+
+var curry$7 = curry;
+// TODO Specified percent
+var markerTypeCalculator = {
+    /**
+     * @method
+     * @param {module:echarts/data/List} data
+     * @param {string} baseAxisDim
+     * @param {string} valueAxisDim
+     */
+    min: curry$7(markerTypeCalculatorWithExtent, 'min'),
+    /**
+     * @method
+     * @param {module:echarts/data/List} data
+     * @param {string} baseAxisDim
+     * @param {string} valueAxisDim
+     */
+    max: curry$7(markerTypeCalculatorWithExtent, 'max'),
+
+    /**
+     * @method
+     * @param {module:echarts/data/List} data
+     * @param {string} baseAxisDim
+     * @param {string} valueAxisDim
+     */
+    average: curry$7(markerTypeCalculatorWithExtent, 'average')
+};
+
+/**
+ * Transform markPoint data item to format used in List by do the following
+ * 1. Calculate statistic like `max`, `min`, `average`
+ * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array
+ * @param  {module:echarts/model/Series} seriesModel
+ * @param  {module:echarts/coord/*} [coordSys]
+ * @param  {Object} item
+ * @return {Object}
+ */
+function dataTransform(seriesModel, item) {
+    var data = seriesModel.getData();
+    var coordSys = seriesModel.coordinateSystem;
+
+    // 1. If not specify the position with pixel directly
+    // 2. If `coord` is not a data array. Which uses `xAxis`,
+    // `yAxis` to specify the coord on each dimension
+
+    // parseFloat first because item.x and item.y can be percent string like '20%'
+    if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) {
+        var dims = coordSys.dimensions;
+        var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel);
+
+        // Clone the option
+        // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value
+        item = clone(item);
+
+        if (item.type
+            && markerTypeCalculator[item.type]
+            && axisInfo.baseAxis && axisInfo.valueAxis
+        ) {
+            var otherCoordIndex = indexOf$2(dims, axisInfo.baseAxis.dim);
+            var targetCoordIndex = indexOf$2(dims, axisInfo.valueAxis.dim);
+
+            item.coord = markerTypeCalculator[item.type](
+                data, axisInfo.baseDataDim, axisInfo.valueDataDim,
+                otherCoordIndex, targetCoordIndex
+            );
+            // Force to use the value of calculated value.
+            item.value = item.coord[targetCoordIndex];
+        }
+        else {
+            // FIXME Only has one of xAxis and yAxis.
+            var coord = [
+                item.xAxis != null ? item.xAxis : item.radiusAxis,
+                item.yAxis != null ? item.yAxis : item.angleAxis
+            ];
+            // Each coord support max, min, average
+            for (var i = 0; i < 2; i++) {
+                if (markerTypeCalculator[coord[i]]) {
+                    coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);
+                }
+            }
+            item.coord = coord;
+        }
+    }
+    return item;
+}
+
+function getAxisInfo$1(item, data, coordSys, seriesModel) {
+    var ret = {};
+
+    if (item.valueIndex != null || item.valueDim != null) {
+        ret.valueDataDim = item.valueIndex != null
+            ? data.getDimension(item.valueIndex) : item.valueDim;
+        ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim));
+        ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);
+        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
+    }
+    else {
+        ret.baseAxis = seriesModel.getBaseAxis();
+        ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);
+        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);
+        ret.valueDataDim = data.mapDimension(ret.valueAxis.dim);
+    }
+
+    return ret;
+}
+
+function dataDimToCoordDim(seriesModel, dataDim) {
+    var data = seriesModel.getData();
+    var dimensions = data.dimensions;
+    dataDim = data.getDimension(dataDim);
+    for (var i = 0; i < dimensions.length; i++) {
+        var dimItem = data.getDimensionInfo(dimensions[i]);
+        if (dimItem.name === dataDim) {
+            return dimItem.coordDim;
+        }
+    }
+}
+
+/**
+ * Filter data which is out of coordinateSystem range
+ * [dataFilter description]
+ * @param  {module:echarts/coord/*} [coordSys]
+ * @param  {Object} item
+ * @return {boolean}
+ */
+function dataFilter$1(coordSys, item) {
+    // Alwalys return true if there is no coordSys
+    return (coordSys && coordSys.containData && item.coord && !hasXOrY(item))
+        ? coordSys.containData(item.coord) : true;
+}
+
+function dimValueGetter(item, dimName, dataIndex, dimIndex) {
+    // x, y, radius, angle
+    if (dimIndex < 2) {
+        return item.coord && item.coord[dimIndex];
+    }
+    return item.value;
+}
+
+function numCalculate(data, valueDataDim, type) {
+    if (type === 'average') {
+        var sum = 0;
+        var count = 0;
+        data.each(valueDataDim, function (val, idx) {
+            if (!isNaN(val)) {
+                sum += val;
+                count++;
+            }
+        });
+        return sum / count;
+    }
+    else if (type === 'median') {
+        return data.getMedian(valueDataDim);
+    }
+    else {
+        // max & min
+        return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0];
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var MarkerView = extendComponentView({
+
+    type: 'marker',
+
+    init: function () {
+        /**
+         * Markline grouped by series
+         * @private
+         * @type {module:zrender/core/util.HashMap}
+         */
+        this.markerGroupMap = createHashMap();
+    },
+
+    render: function (markerModel, ecModel, api) {
+        var markerGroupMap = this.markerGroupMap;
+        markerGroupMap.each(function (item) {
+            item.__keep = false;
+        });
+
+        var markerModelKey = this.type + 'Model';
+        ecModel.eachSeries(function (seriesModel) {
+            var markerModel = seriesModel[markerModelKey];
+            markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api);
+        }, this);
+
+        markerGroupMap.each(function (item) {
+            !item.__keep && this.group.remove(item.group);
+        }, this);
+    },
+
+    renderSeries: function () {}
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+function updateMarkerLayout(mpData, seriesModel, api) {
+    var coordSys = seriesModel.coordinateSystem;
+    mpData.each(function (idx) {
+        var itemModel = mpData.getItemModel(idx);
+        var point;
+        var xPx = parsePercent$1(itemModel.get('x'), api.getWidth());
+        var yPx = parsePercent$1(itemModel.get('y'), api.getHeight());
+        if (!isNaN(xPx) && !isNaN(yPx)) {
+            point = [xPx, yPx];
+        }
+        // Chart like bar may have there own marker positioning logic
+        else if (seriesModel.getMarkerPosition) {
+            // Use the getMarkerPoisition
+            point = seriesModel.getMarkerPosition(
+                mpData.getValues(mpData.dimensions, idx)
+            );
+        }
+        else if (coordSys) {
+            var x = mpData.get(coordSys.dimensions[0], idx);
+            var y = mpData.get(coordSys.dimensions[1], idx);
+            point = coordSys.dataToPoint([x, y]);
+
+        }
+
+        // Use x, y if has any
+        if (!isNaN(xPx)) {
+            point[0] = xPx;
+        }
+        if (!isNaN(yPx)) {
+            point[1] = yPx;
+        }
+
+        mpData.setItemLayout(idx, point);
+    });
+}
+
+MarkerView.extend({
+
+    type: 'markPoint',
+
+    // updateLayout: function (markPointModel, ecModel, api) {
+    //     ecModel.eachSeries(function (seriesModel) {
+    //         var mpModel = seriesModel.markPointModel;
+    //         if (mpModel) {
+    //             updateMarkerLayout(mpModel.getData(), seriesModel, api);
+    //             this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);
+    //         }
+    //     }, this);
+    // },
+
+    updateTransform: function (markPointModel, ecModel, api) {
+        ecModel.eachSeries(function (seriesModel) {
+            var mpModel = seriesModel.markPointModel;
+            if (mpModel) {
+                updateMarkerLayout(mpModel.getData(), seriesModel, api);
+                this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);
+            }
+        }, this);
+    },
+
+    renderSeries: function (seriesModel, mpModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+        var seriesId = seriesModel.id;
+        var seriesData = seriesModel.getData();
+
+        var symbolDrawMap = this.markerGroupMap;
+        var symbolDraw = symbolDrawMap.get(seriesId)
+            || symbolDrawMap.set(seriesId, new SymbolDraw());
+
+        var mpData = createList$1(coordSys, seriesModel, mpModel);
+
+        // FIXME
+        mpModel.setData(mpData);
+
+        updateMarkerLayout(mpModel.getData(), seriesModel, api);
+
+        mpData.each(function (idx) {
+            var itemModel = mpData.getItemModel(idx);
+            var symbolSize = itemModel.getShallow('symbolSize');
+            if (typeof symbolSize === 'function') {
+                // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据?
+                symbolSize = symbolSize(
+                    mpModel.getRawValue(idx), mpModel.getDataParams(idx)
+                );
+            }
+            mpData.setItemVisual(idx, {
+                symbolSize: symbolSize,
+                color: itemModel.get('itemStyle.color')
+                    || seriesData.getVisual('color'),
+                symbol: itemModel.getShallow('symbol')
+            });
+        });
+
+        // TODO Text are wrong
+        symbolDraw.updateData(mpData);
+        this.group.add(symbolDraw.group);
+
+        // Set host model for tooltip
+        // FIXME
+        mpData.eachItemGraphicEl(function (el) {
+            el.traverse(function (child) {
+                child.dataModel = mpModel;
+            });
+        });
+
+        symbolDraw.__keep = true;
+
+        symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent');
+    }
+});
+
+/**
+ * @inner
+ * @param {module:echarts/coord/*} [coordSys]
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {module:echarts/model/Model} mpModel
+ */
+function createList$1(coordSys, seriesModel, mpModel) {
+    var coordDimsInfos;
+    if (coordSys) {
+        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {
+            var info = seriesModel.getData().getDimensionInfo(
+                seriesModel.getData().mapDimension(coordDim)
+            ) || {};
+            // In map series data don't have lng and lat dimension. Fallback to same with coordSys
+            return defaults({name: coordDim}, info);
+        });
+    }
+    else {
+        coordDimsInfos =[{
+            name: 'value',
+            type: 'float'
+        }];
+    }
+
+    var mpData = new List(coordDimsInfos, mpModel);
+    var dataOpt = map(mpModel.get('data'), curry(
+            dataTransform, seriesModel
+        ));
+    if (coordSys) {
+        dataOpt = filter(
+            dataOpt, curry(dataFilter$1, coordSys)
+        );
+    }
+
+    mpData.initData(dataOpt, null,
+        coordSys ? dimValueGetter : function (item) {
+            return item.value;
+        }
+    );
+
+    return mpData;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// HINT Markpoint can't be used too much
+registerPreprocessor(function (opt) {
+    // Make sure markPoint component is enabled
+    opt.markPoint = opt.markPoint || {};
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+MarkerModel.extend({
+
+    type: 'markLine',
+
+    defaultOption: {
+        zlevel: 0,
+        z: 5,
+
+        symbol: ['circle', 'arrow'],
+        symbolSize: [8, 16],
+
+        //symbolRotate: 0,
+
+        precision: 2,
+        tooltip: {
+            trigger: 'item'
+        },
+        label: {
+            show: true,
+            position: 'end'
+        },
+        lineStyle: {
+            type: 'dashed'
+        },
+        emphasis: {
+            label: {
+                show: true
+            },
+            lineStyle: {
+                width: 3
+            }
+        },
+        animationEasing: 'linear'
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var markLineTransform = function (seriesModel, coordSys, mlModel, item) {
+    var data = seriesModel.getData();
+    // Special type markLine like 'min', 'max', 'average', 'median'
+    var mlType = item.type;
+
+    if (!isArray(item)
+        && (
+            mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median'
+            // In case
+            // data: [{
+            //   yAxis: 10
+            // }]
+            || (item.xAxis != null || item.yAxis != null)
+        )
+    ) {
+        var valueAxis;
+        var valueDataDim;
+        var value;
+
+        if (item.yAxis != null || item.xAxis != null) {
+            valueDataDim = item.yAxis != null ? 'y' : 'x';
+            valueAxis = coordSys.getAxis(valueDataDim);
+
+            value = retrieve(item.yAxis, item.xAxis);
+        }
+        else {
+            var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel);
+            valueDataDim = axisInfo.valueDataDim;
+            valueAxis = axisInfo.valueAxis;
+            value = numCalculate(data, valueDataDim, mlType);
+        }
+        var valueIndex = valueDataDim === 'x' ? 0 : 1;
+        var baseIndex = 1 - valueIndex;
+
+        var mlFrom = clone(item);
+        var mlTo = {};
+
+        mlFrom.type = null;
+
+        mlFrom.coord = [];
+        mlTo.coord = [];
+        mlFrom.coord[baseIndex] = -Infinity;
+        mlTo.coord[baseIndex] = Infinity;
+
+        var precision = mlModel.get('precision');
+        if (precision >= 0 && typeof value === 'number') {
+            value = +value.toFixed(Math.min(precision, 20));
+        }
+
+        mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;
+
+        item = [mlFrom, mlTo, { // Extra option for tooltip and label
+            type: mlType,
+            valueIndex: item.valueIndex,
+            // Force to use the value of calculated value.
+            value: value
+        }];
+    }
+
+    item = [
+        dataTransform(seriesModel, item[0]),
+        dataTransform(seriesModel, item[1]),
+        extend({}, item[2])
+    ];
+
+    // Avoid line data type is extended by from(to) data type
+    item[2].type = item[2].type || '';
+
+    // Merge from option and to option into line option
+    merge(item[2], item[0]);
+    merge(item[2], item[1]);
+
+    return item;
+};
+
+function isInifinity(val) {
+    return !isNaN(val) && !isFinite(val);
+}
+
+// If a markLine has one dim
+function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {
+    var otherDimIndex = 1 - dimIndex;
+    var dimName = coordSys.dimensions[dimIndex];
+    return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex])
+        && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);
+}
+
+function markLineFilter(coordSys, item) {
+    if (coordSys.type === 'cartesian2d') {
+        var fromCoord = item[0].coord;
+        var toCoord = item[1].coord;
+        // In case
+        // {
+        //  markLine: {
+        //    data: [{ yAxis: 2 }]
+        //  }
+        // }
+        if (
+            fromCoord && toCoord &&
+            (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys)
+            || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))
+        ) {
+            return true;
+        }
+    }
+    return dataFilter$1(coordSys, item[0])
+        && dataFilter$1(coordSys, item[1]);
+}
+
+function updateSingleMarkerEndLayout(
+    data, idx, isFrom, seriesModel, api
+) {
+    var coordSys = seriesModel.coordinateSystem;
+    var itemModel = data.getItemModel(idx);
+
+    var point;
+    var xPx = parsePercent$1(itemModel.get('x'), api.getWidth());
+    var yPx = parsePercent$1(itemModel.get('y'), api.getHeight());
+    if (!isNaN(xPx) && !isNaN(yPx)) {
+        point = [xPx, yPx];
+    }
+    else {
+        // Chart like bar may have there own marker positioning logic
+        if (seriesModel.getMarkerPosition) {
+            // Use the getMarkerPoisition
+            point = seriesModel.getMarkerPosition(
+                data.getValues(data.dimensions, idx)
+            );
+        }
+        else {
+            var dims = coordSys.dimensions;
+            var x = data.get(dims[0], idx);
+            var y = data.get(dims[1], idx);
+            point = coordSys.dataToPoint([x, y]);
+        }
+        // Expand line to the edge of grid if value on one axis is Inifnity
+        // In case
+        //  markLine: {
+        //    data: [{
+        //      yAxis: 2
+        //      // or
+        //      type: 'average'
+        //    }]
+        //  }
+        if (coordSys.type === 'cartesian2d') {
+            var xAxis = coordSys.getAxis('x');
+            var yAxis = coordSys.getAxis('y');
+            var dims = coordSys.dimensions;
+            if (isInifinity(data.get(dims[0], idx))) {
+                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);
+            }
+            else if (isInifinity(data.get(dims[1], idx))) {
+                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);
+            }
+        }
+
+        // Use x, y if has any
+        if (!isNaN(xPx)) {
+            point[0] = xPx;
+        }
+        if (!isNaN(yPx)) {
+            point[1] = yPx;
+        }
+    }
+
+    data.setItemLayout(idx, point);
+}
+
+MarkerView.extend({
+
+    type: 'markLine',
+
+    // updateLayout: function (markLineModel, ecModel, api) {
+    //     ecModel.eachSeries(function (seriesModel) {
+    //         var mlModel = seriesModel.markLineModel;
+    //         if (mlModel) {
+    //             var mlData = mlModel.getData();
+    //             var fromData = mlModel.__from;
+    //             var toData = mlModel.__to;
+    //             // Update visual and layout of from symbol and to symbol
+    //             fromData.each(function (idx) {
+    //                 updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);
+    //                 updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);
+    //             });
+    //             // Update layout of line
+    //             mlData.each(function (idx) {
+    //                 mlData.setItemLayout(idx, [
+    //                     fromData.getItemLayout(idx),
+    //                     toData.getItemLayout(idx)
+    //                 ]);
+    //             });
+
+    //             this.markerGroupMap.get(seriesModel.id).updateLayout();
+
+    //         }
+    //     }, this);
+    // },
+
+    updateTransform: function (markLineModel, ecModel, api) {
+        ecModel.eachSeries(function (seriesModel) {
+            var mlModel = seriesModel.markLineModel;
+            if (mlModel) {
+                var mlData = mlModel.getData();
+                var fromData = mlModel.__from;
+                var toData = mlModel.__to;
+                // Update visual and layout of from symbol and to symbol
+                fromData.each(function (idx) {
+                    updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);
+                    updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);
+                });
+                // Update layout of line
+                mlData.each(function (idx) {
+                    mlData.setItemLayout(idx, [
+                        fromData.getItemLayout(idx),
+                        toData.getItemLayout(idx)
+                    ]);
+                });
+
+                this.markerGroupMap.get(seriesModel.id).updateLayout();
+
+            }
+        }, this);
+    },
+
+    renderSeries: function (seriesModel, mlModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+        var seriesId = seriesModel.id;
+        var seriesData = seriesModel.getData();
+
+        var lineDrawMap = this.markerGroupMap;
+        var lineDraw = lineDrawMap.get(seriesId)
+            || lineDrawMap.set(seriesId, new LineDraw());
+        this.group.add(lineDraw.group);
+
+        var mlData = createList$2(coordSys, seriesModel, mlModel);
+
+        var fromData = mlData.from;
+        var toData = mlData.to;
+        var lineData = mlData.line;
+
+        mlModel.__from = fromData;
+        mlModel.__to = toData;
+        // Line data for tooltip and formatter
+        mlModel.setData(lineData);
+
+        var symbolType = mlModel.get('symbol');
+        var symbolSize = mlModel.get('symbolSize');
+        if (!isArray(symbolType)) {
+            symbolType = [symbolType, symbolType];
+        }
+        if (typeof symbolSize === 'number') {
+            symbolSize = [symbolSize, symbolSize];
+        }
+
+        // Update visual and layout of from symbol and to symbol
+        mlData.from.each(function (idx) {
+            updateDataVisualAndLayout(fromData, idx, true);
+            updateDataVisualAndLayout(toData, idx, false);
+        });
+
+        // Update visual and layout of line
+        lineData.each(function (idx) {
+            var lineColor = lineData.getItemModel(idx).get('lineStyle.color');
+            lineData.setItemVisual(idx, {
+                color: lineColor || fromData.getItemVisual(idx, 'color')
+            });
+            lineData.setItemLayout(idx, [
+                fromData.getItemLayout(idx),
+                toData.getItemLayout(idx)
+            ]);
+
+            lineData.setItemVisual(idx, {
+                'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'),
+                'fromSymbol': fromData.getItemVisual(idx, 'symbol'),
+                'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'),
+                'toSymbol': toData.getItemVisual(idx, 'symbol')
+            });
+        });
+
+        lineDraw.updateData(lineData);
+
+        // Set host model for tooltip
+        // FIXME
+        mlData.line.eachItemGraphicEl(function (el, idx) {
+            el.traverse(function (child) {
+                child.dataModel = mlModel;
+            });
+        });
+
+        function updateDataVisualAndLayout(data, idx, isFrom) {
+            var itemModel = data.getItemModel(idx);
+
+            updateSingleMarkerEndLayout(
+                data, idx, isFrom, seriesModel, api
+            );
+
+            data.setItemVisual(idx, {
+                symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1],
+                symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1],
+                color: itemModel.get('itemStyle.color') || seriesData.getVisual('color')
+            });
+        }
+
+        lineDraw.__keep = true;
+
+        lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');
+    }
+});
+
+/**
+ * @inner
+ * @param {module:echarts/coord/*} coordSys
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {module:echarts/model/Model} mpModel
+ */
+function createList$2(coordSys, seriesModel, mlModel) {
+
+    var coordDimsInfos;
+    if (coordSys) {
+        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {
+            var info = seriesModel.getData().getDimensionInfo(
+                seriesModel.getData().mapDimension(coordDim)
+            ) || {};
+            // In map series data don't have lng and lat dimension. Fallback to same with coordSys
+            return defaults({name: coordDim}, info);
+        });
+    }
+    else {
+        coordDimsInfos =[{
+            name: 'value',
+            type: 'float'
+        }];
+    }
+
+    var fromData = new List(coordDimsInfos, mlModel);
+    var toData = new List(coordDimsInfos, mlModel);
+    // No dimensions
+    var lineData = new List([], mlModel);
+
+    var optData = map(mlModel.get('data'), curry(
+        markLineTransform, seriesModel, coordSys, mlModel
+    ));
+    if (coordSys) {
+        optData = filter(
+            optData, curry(markLineFilter, coordSys)
+        );
+    }
+    var dimValueGetter$$1 = coordSys ? dimValueGetter : function (item) {
+        return item.value;
+    };
+    fromData.initData(
+        map(optData, function (item) { return item[0]; }),
+        null, dimValueGetter$$1
+    );
+    toData.initData(
+        map(optData, function (item) { return item[1]; }),
+        null, dimValueGetter$$1
+    );
+    lineData.initData(
+        map(optData, function (item) { return item[2]; })
+    );
+    lineData.hasItemOption = true;
+
+    return {
+        from: fromData,
+        to: toData,
+        line: lineData
+    };
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerPreprocessor(function (opt) {
+    // Make sure markLine component is enabled
+    opt.markLine = opt.markLine || {};
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+MarkerModel.extend({
+
+    type: 'markArea',
+
+    defaultOption: {
+        zlevel: 0,
+        // PENDING
+        z: 1,
+        tooltip: {
+            trigger: 'item'
+        },
+        // markArea should fixed on the coordinate system
+        animation: false,
+        label: {
+            show: true,
+            position: 'top'
+        },
+        itemStyle: {
+            // color and borderColor default to use color from series
+            // color: 'auto'
+            // borderColor: 'auto'
+            borderWidth: 0
+        },
+
+        emphasis: {
+            label: {
+                show: true,
+                position: 'top'
+            }
+        }
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// TODO Better on polar
+
+var markAreaTransform = function (seriesModel, coordSys, maModel, item) {
+    var lt = dataTransform(seriesModel, item[0]);
+    var rb = dataTransform(seriesModel, item[1]);
+    var retrieve$$1 = retrieve;
+
+    // FIXME make sure lt is less than rb
+    var ltCoord = lt.coord;
+    var rbCoord = rb.coord;
+    ltCoord[0] = retrieve$$1(ltCoord[0], -Infinity);
+    ltCoord[1] = retrieve$$1(ltCoord[1], -Infinity);
+
+    rbCoord[0] = retrieve$$1(rbCoord[0], Infinity);
+    rbCoord[1] = retrieve$$1(rbCoord[1], Infinity);
+
+    // Merge option into one
+    var result = mergeAll([{}, lt, rb]);
+
+    result.coord = [
+        lt.coord, rb.coord
+    ];
+    result.x0 = lt.x;
+    result.y0 = lt.y;
+    result.x1 = rb.x;
+    result.y1 = rb.y;
+    return result;
+};
+
+function isInifinity$1(val) {
+    return !isNaN(val) && !isFinite(val);
+}
+
+// If a markArea has one dim
+function ifMarkLineHasOnlyDim$1(dimIndex, fromCoord, toCoord, coordSys) {
+    var otherDimIndex = 1 - dimIndex;
+    return isInifinity$1(fromCoord[otherDimIndex]) && isInifinity$1(toCoord[otherDimIndex]);
+}
+
+function markAreaFilter(coordSys, item) {
+    var fromCoord = item.coord[0];
+    var toCoord = item.coord[1];
+    if (coordSys.type === 'cartesian2d') {
+        // In case
+        // {
+        //  markArea: {
+        //    data: [{ yAxis: 2 }]
+        //  }
+        // }
+        if (
+            fromCoord && toCoord &&
+            (ifMarkLineHasOnlyDim$1(1, fromCoord, toCoord, coordSys)
+            || ifMarkLineHasOnlyDim$1(0, fromCoord, toCoord, coordSys))
+        ) {
+            return true;
+        }
+    }
+    return dataFilter$1(coordSys, {
+            coord: fromCoord,
+            x: item.x0,
+            y: item.y0
+        })
+        || dataFilter$1(coordSys, {
+            coord: toCoord,
+            x: item.x1,
+            y: item.y1
+        });
+}
+
+// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']
+function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {
+    var coordSys = seriesModel.coordinateSystem;
+    var itemModel = data.getItemModel(idx);
+
+    var point;
+    var xPx = parsePercent$1(itemModel.get(dims[0]), api.getWidth());
+    var yPx = parsePercent$1(itemModel.get(dims[1]), api.getHeight());
+    if (!isNaN(xPx) && !isNaN(yPx)) {
+        point = [xPx, yPx];
+    }
+    else {
+        // Chart like bar may have there own marker positioning logic
+        if (seriesModel.getMarkerPosition) {
+            // Use the getMarkerPoisition
+            point = seriesModel.getMarkerPosition(
+                data.getValues(dims, idx)
+            );
+        }
+        else {
+            var x = data.get(dims[0], idx);
+            var y = data.get(dims[1], idx);
+            var pt = [x, y];
+            coordSys.clampData && coordSys.clampData(pt, pt);
+            point = coordSys.dataToPoint(pt, true);
+        }
+        if (coordSys.type === 'cartesian2d') {
+            var xAxis = coordSys.getAxis('x');
+            var yAxis = coordSys.getAxis('y');
+            var x = data.get(dims[0], idx);
+            var y = data.get(dims[1], idx);
+            if (isInifinity$1(x)) {
+                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);
+            }
+            else if (isInifinity$1(y)) {
+                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);
+            }
+        }
+
+        // Use x, y if has any
+        if (!isNaN(xPx)) {
+            point[0] = xPx;
+        }
+        if (!isNaN(yPx)) {
+            point[1] = yPx;
+        }
+    }
+
+    return point;
+}
+
+var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];
+
+MarkerView.extend({
+
+    type: 'markArea',
+
+    // updateLayout: function (markAreaModel, ecModel, api) {
+    //     ecModel.eachSeries(function (seriesModel) {
+    //         var maModel = seriesModel.markAreaModel;
+    //         if (maModel) {
+    //             var areaData = maModel.getData();
+    //             areaData.each(function (idx) {
+    //                 var points = zrUtil.map(dimPermutations, function (dim) {
+    //                     return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);
+    //                 });
+    //                 // Layout
+    //                 areaData.setItemLayout(idx, points);
+    //                 var el = areaData.getItemGraphicEl(idx);
+    //                 el.setShape('points', points);
+    //             });
+    //         }
+    //     }, this);
+    // },
+
+    updateTransform: function (markAreaModel, ecModel, api) {
+        ecModel.eachSeries(function (seriesModel) {
+            var maModel = seriesModel.markAreaModel;
+            if (maModel) {
+                var areaData = maModel.getData();
+                areaData.each(function (idx) {
+                    var points = map(dimPermutations, function (dim) {
+                        return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);
+                    });
+                    // Layout
+                    areaData.setItemLayout(idx, points);
+                    var el = areaData.getItemGraphicEl(idx);
+                    el.setShape('points', points);
+                });
+            }
+        }, this);
+    },
+
+    renderSeries: function (seriesModel, maModel, ecModel, api) {
+        var coordSys = seriesModel.coordinateSystem;
+        var seriesId = seriesModel.id;
+        var seriesData = seriesModel.getData();
+
+        var areaGroupMap = this.markerGroupMap;
+        var polygonGroup = areaGroupMap.get(seriesId)
+            || areaGroupMap.set(seriesId, {group: new Group()});
+
+        this.group.add(polygonGroup.group);
+        polygonGroup.__keep = true;
+
+        var areaData = createList$3(coordSys, seriesModel, maModel);
+
+        // Line data for tooltip and formatter
+        maModel.setData(areaData);
+
+        // Update visual and layout of line
+        areaData.each(function (idx) {
+            // Layout
+            areaData.setItemLayout(idx, map(dimPermutations, function (dim) {
+                return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);
+            }));
+
+            // Visual
+            areaData.setItemVisual(idx, {
+                color: seriesData.getVisual('color')
+            });
+        });
+
+
+        areaData.diff(polygonGroup.__data)
+            .add(function (idx) {
+                var polygon = new Polygon({
+                    shape: {
+                        points: areaData.getItemLayout(idx)
+                    }
+                });
+                areaData.setItemGraphicEl(idx, polygon);
+                polygonGroup.group.add(polygon);
+            })
+            .update(function (newIdx, oldIdx) {
+                var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx);
+                updateProps(polygon, {
+                    shape: {
+                        points: areaData.getItemLayout(newIdx)
+                    }
+                }, maModel, newIdx);
+                polygonGroup.group.add(polygon);
+                areaData.setItemGraphicEl(newIdx, polygon);
+            })
+            .remove(function (idx) {
+                var polygon = polygonGroup.__data.getItemGraphicEl(idx);
+                polygonGroup.group.remove(polygon);
+            })
+            .execute();
+
+        areaData.eachItemGraphicEl(function (polygon, idx) {
+            var itemModel = areaData.getItemModel(idx);
+            var labelModel = itemModel.getModel('label');
+            var labelHoverModel = itemModel.getModel('emphasis.label');
+            var color = areaData.getItemVisual(idx, 'color');
+            polygon.useStyle(
+                defaults(
+                    itemModel.getModel('itemStyle').getItemStyle(),
+                    {
+                        fill: modifyAlpha(color, 0.4),
+                        stroke: color
+                    }
+                )
+            );
+
+            polygon.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();
+
+            setLabelStyle(
+                polygon.style, polygon.hoverStyle, labelModel, labelHoverModel,
+                {
+                    labelFetcher: maModel,
+                    labelDataIndex: idx,
+                    defaultText: areaData.getName(idx) || '',
+                    isRectText: true,
+                    autoColor: color
+                }
+            );
+
+            setHoverStyle(polygon, {});
+
+            polygon.dataModel = maModel;
+        });
+
+        polygonGroup.__data = areaData;
+
+        polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');
+    }
+});
+
+/**
+ * @inner
+ * @param {module:echarts/coord/*} coordSys
+ * @param {module:echarts/model/Series} seriesModel
+ * @param {module:echarts/model/Model} mpModel
+ */
+function createList$3(coordSys, seriesModel, maModel) {
+
+    var coordDimsInfos;
+    var areaData;
+    var dims = ['x0', 'y0', 'x1', 'y1'];
+    if (coordSys) {
+        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {
+            var data = seriesModel.getData();
+            var info = data.getDimensionInfo(
+                data.mapDimension(coordDim)
+            ) || {};
+            // In map series data don't have lng and lat dimension. Fallback to same with coordSys
+            return defaults({name: coordDim}, info);
+        });
+        areaData = new List(map(dims, function (dim, idx) {
+            return {
+                name: dim,
+                type: coordDimsInfos[idx % 2].type
+            };
+        }), maModel);
+    }
+    else {
+        coordDimsInfos =[{
+            name: 'value',
+            type: 'float'
+        }];
+        areaData = new List(coordDimsInfos, maModel);
+    }
+
+    var optData = map(maModel.get('data'), curry(
+        markAreaTransform, seriesModel, coordSys, maModel
+    ));
+    if (coordSys) {
+        optData = filter(
+            optData, curry(markAreaFilter, coordSys)
+        );
+    }
+
+    var dimValueGetter$$1 = coordSys ? function (item, dimName, dataIndex, dimIndex) {
+        return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];
+    } : function (item) {
+        return item.value;
+    };
+    areaData.initData(optData, null, dimValueGetter$$1);
+    areaData.hasItemOption = true;
+    return areaData;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerPreprocessor(function (opt) {
+    // Make sure markArea component is enabled
+    opt.markArea = opt.markArea || {};
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var preprocessor$3 = function (option) {
+    var timelineOpt = option && option.timeline;
+
+    if (!isArray(timelineOpt)) {
+        timelineOpt = timelineOpt ? [timelineOpt] : [];
+    }
+
+    each$1(timelineOpt, function (opt) {
+        if (!opt) {
+            return;
+        }
+
+        compatibleEC2(opt);
+    });
+};
+
+function compatibleEC2(opt) {
+    var type = opt.type;
+
+    var ec2Types = {'number': 'value', 'time': 'time'};
+
+    // Compatible with ec2
+    if (ec2Types[type]) {
+        opt.axisType = ec2Types[type];
+        delete opt.type;
+    }
+
+    transferItem(opt);
+
+    if (has$2(opt, 'controlPosition')) {
+        var controlStyle = opt.controlStyle || (opt.controlStyle = {});
+        if (!has$2(controlStyle, 'position')) {
+            controlStyle.position = opt.controlPosition;
+        }
+        if (controlStyle.position === 'none' && !has$2(controlStyle, 'show')) {
+            controlStyle.show = false;
+            delete controlStyle.position;
+        }
+        delete opt.controlPosition;
+    }
+
+    each$1(opt.data || [], function (dataItem) {
+        if (isObject$1(dataItem) && !isArray(dataItem)) {
+            if (!has$2(dataItem, 'value') && has$2(dataItem, 'name')) {
+                // In ec2, using name as value.
+                dataItem.value = dataItem.name;
+            }
+            transferItem(dataItem);
+        }
+    });
+}
+
+function transferItem(opt) {
+    var itemStyle = opt.itemStyle || (opt.itemStyle = {});
+
+    var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {});
+
+    // Transfer label out
+    var label = opt.label || (opt.label || {});
+    var labelNormal = label.normal || (label.normal = {});
+    var excludeLabelAttr = {normal: 1, emphasis: 1};
+
+    each$1(label, function (value, name) {
+        if (!excludeLabelAttr[name] && !has$2(labelNormal, name)) {
+            labelNormal[name] = value;
+        }
+    });
+
+    if (itemStyleEmphasis.label && !has$2(label, 'emphasis')) {
+        label.emphasis = itemStyleEmphasis.label;
+        delete itemStyleEmphasis.label;
+    }
+}
+
+function has$2(obj, attr) {
+    return obj.hasOwnProperty(attr);
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+ComponentModel.registerSubTypeDefaulter('timeline', function () {
+    // Only slider now.
+    return 'slider';
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+registerAction(
+
+    {type: 'timelineChange', event: 'timelineChanged', update: 'prepareAndUpdate'},
+
+    function (payload, ecModel) {
+
+        var timelineModel = ecModel.getComponent('timeline');
+        if (timelineModel && payload.currentIndex != null) {
+            timelineModel.setCurrentIndex(payload.currentIndex);
+
+            if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) {
+                timelineModel.setPlayState(false);
+            }
+        }
+
+        // Set normalized currentIndex to payload.
+        ecModel.resetOption('timeline');
+
+        return defaults({
+            currentIndex: timelineModel.option.currentIndex
+        }, payload);
+    }
+);
+
+registerAction(
+
+    {type: 'timelinePlayChange', event: 'timelinePlayChanged', update: 'update'},
+
+    function (payload, ecModel) {
+        var timelineModel = ecModel.getComponent('timeline');
+        if (timelineModel && payload.playState != null) {
+            timelineModel.setPlayState(payload.playState);
+        }
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var TimelineModel = ComponentModel.extend({
+
+    type: 'timeline',
+
+    layoutMode: 'box',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+
+        zlevel: 0,                  // 一级层叠
+        z: 4,                       // 二级层叠
+        show: true,
+
+        axisType: 'time',  // 模式是时间类型,支持 value, category
+
+        realtime: true,
+
+        left: '20%',
+        top: null,
+        right: '20%',
+        bottom: 0,
+        width: null,
+        height: 40,
+        padding: 5,
+
+        controlPosition: 'left',           // 'left' 'right' 'top' 'bottom' 'none'
+        autoPlay: false,
+        rewind: false,                     // 反向播放
+        loop: true,
+        playInterval: 2000,                // 播放时间间隔,单位ms
+
+        currentIndex: 0,
+
+        itemStyle: {},
+        label: {
+            color: '#000'
+        },
+
+        data: []
+    },
+
+    /**
+     * @override
+     */
+    init: function (option, parentModel, ecModel) {
+
+        /**
+         * @private
+         * @type {module:echarts/data/List}
+         */
+        this._data;
+
+        /**
+         * @private
+         * @type {Array.<string>}
+         */
+        this._names;
+
+        this.mergeDefaultAndTheme(option, ecModel);
+        this._initData();
+    },
+
+    /**
+     * @override
+     */
+    mergeOption: function (option) {
+        TimelineModel.superApply(this, 'mergeOption', arguments);
+        this._initData();
+    },
+
+    /**
+     * @param {number} [currentIndex]
+     */
+    setCurrentIndex: function (currentIndex) {
+        if (currentIndex == null) {
+            currentIndex = this.option.currentIndex;
+        }
+        var count = this._data.count();
+
+        if (this.option.loop) {
+            currentIndex = (currentIndex % count + count) % count;
+        }
+        else {
+            currentIndex >= count && (currentIndex = count - 1);
+            currentIndex < 0 && (currentIndex = 0);
+        }
+
+        this.option.currentIndex = currentIndex;
+    },
+
+    /**
+     * @return {number} currentIndex
+     */
+    getCurrentIndex: function () {
+        return this.option.currentIndex;
+    },
+
+    /**
+     * @return {boolean}
+     */
+    isIndexMax: function () {
+        return this.getCurrentIndex() >= this._data.count() - 1;
+    },
+
+    /**
+     * @param {boolean} state true: play, false: stop
+     */
+    setPlayState: function (state) {
+        this.option.autoPlay = !!state;
+    },
+
+    /**
+     * @return {boolean} true: play, false: stop
+     */
+    getPlayState: function () {
+        return !!this.option.autoPlay;
+    },
+
+    /**
+     * @private
+     */
+    _initData: function () {
+        var thisOption = this.option;
+        var dataArr = thisOption.data || [];
+        var axisType = thisOption.axisType;
+        var names = this._names = [];
+
+        if (axisType === 'category') {
+            var idxArr = [];
+            each$1(dataArr, function (item, index) {
+                var value = getDataItemValue(item);
+                var newItem;
+
+                if (isObject$1(item)) {
+                    newItem = clone(item);
+                    newItem.value = index;
+                }
+                else {
+                    newItem = index;
+                }
+
+                idxArr.push(newItem);
+
+                if (!isString(value) && (value == null || isNaN(value))) {
+                    value = '';
+                }
+
+                names.push(value + '');
+            });
+            dataArr = idxArr;
+        }
+
+        var dimType = ({category: 'ordinal', time: 'time'})[axisType] || 'number';
+
+        var data = this._data = new List([{name: 'value', type: dimType}], this);
+
+        data.initData(dataArr, names);
+    },
+
+    getData: function () {
+        return this._data;
+    },
+
+    /**
+     * @public
+     * @return {Array.<string>} categoreis
+     */
+    getCategories: function () {
+        if (this.get('axisType') === 'category') {
+            return this._names.slice();
+        }
+    }
+
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var SliderTimelineModel = TimelineModel.extend({
+
+    type: 'timeline.slider',
+
+    /**
+     * @protected
+     */
+    defaultOption: {
+
+        backgroundColor: 'rgba(0,0,0,0)',   // 时间轴背景颜色
+        borderColor: '#ccc',               // 时间轴边框颜色
+        borderWidth: 0,                    // 时间轴边框线宽,单位px,默认为0(无边框)
+
+        orient: 'horizontal',              // 'vertical'
+        inverse: false,
+
+        tooltip: {                          // boolean or Object
+            trigger: 'item'                 // data item may also have tootip attr.
+        },
+
+        symbol: 'emptyCircle',
+        symbolSize: 10,
+
+        lineStyle: {
+            show: true,
+            width: 2,
+            color: '#304654'
+        },
+        label: {                            // 文本标签
+            position: 'auto',           // auto left right top bottom
+                                        // When using number, label position is not
+                                        // restricted by viewRect.
+                                        // positive: right/bottom, negative: left/top
+            show: true,
+            interval: 'auto',
+            rotate: 0,
+            // formatter: null,
+            // 其余属性默认使用全局文本样式,详见TEXTSTYLE
+            color: '#304654'
+        },
+        itemStyle: {
+            color: '#304654',
+            borderWidth: 1
+        },
+
+        checkpointStyle: {
+            symbol: 'circle',
+            symbolSize: 13,
+            color: '#c23531',
+            borderWidth: 5,
+            borderColor: 'rgba(194,53,49, 0.5)',
+            animation: true,
+            animationDuration: 300,
+            animationEasing: 'quinticInOut'
+        },
+
+        controlStyle: {
+            show: true,
+            showPlayBtn: true,
+            showPrevBtn: true,
+            showNextBtn: true,
+            itemSize: 22,
+            itemGap: 12,
+            position: 'left',  // 'left' 'right' 'top' 'bottom'
+            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', // jshint ignore:line
+            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', // jshint ignore:line
+            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', // jshint ignore:line
+            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', // jshint ignore:line
+
+            color: '#304654',
+            borderColor: '#304654',
+            borderWidth: 1
+        },
+
+        emphasis: {
+            label: {
+                show: true,
+                // 其余属性默认使用全局文本样式,详见TEXTSTYLE
+                color: '#c23531'
+            },
+
+            itemStyle: {
+                color: '#c23531'
+            },
+
+            controlStyle: {
+                color: '#c23531',
+                borderColor: '#c23531',
+                borderWidth: 2
+            }
+        },
+        data: []
+    }
+
+});
+
+mixin(SliderTimelineModel, dataFormatMixin);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var TimelineView = Component.extend({
+    type: 'timeline'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * Extend axis 2d
+ * @constructor module:echarts/coord/cartesian/Axis2D
+ * @extends {module:echarts/coord/cartesian/Axis}
+ * @param {string} dim
+ * @param {*} scale
+ * @param {Array.<number>} coordExtent
+ * @param {string} axisType
+ * @param {string} position
+ */
+var TimelineAxis = function (dim, scale, coordExtent, axisType) {
+
+    Axis.call(this, dim, scale, coordExtent);
+
+    /**
+     * Axis type
+     *  - 'category'
+     *  - 'value'
+     *  - 'time'
+     *  - 'log'
+     * @type {string}
+     */
+    this.type = axisType || 'value';
+
+    /**
+     * Axis model
+     * @param {module:echarts/component/TimelineModel}
+     */
+    this.model = null;
+};
+
+TimelineAxis.prototype = {
+
+    constructor: TimelineAxis,
+
+    /**
+     * @override
+     */
+    getLabelModel: function () {
+        return this.model.getModel('label');
+    },
+
+    /**
+     * @override
+     */
+    isHorizontal: function () {
+        return this.model.get('orient') === 'horizontal';
+    }
+
+};
+
+inherits(TimelineAxis, Axis);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var bind$6 = bind;
+var each$27 = each$1;
+
+var PI$4 = Math.PI;
+
+TimelineView.extend({
+
+    type: 'timeline.slider',
+
+    init: function (ecModel, api) {
+
+        this.api = api;
+
+        /**
+         * @private
+         * @type {module:echarts/component/timeline/TimelineAxis}
+         */
+        this._axis;
+
+        /**
+         * @private
+         * @type {module:zrender/core/BoundingRect}
+         */
+        this._viewRect;
+
+        /**
+         * @type {number}
+         */
+        this._timer;
+
+        /**
+         * @type {module:zrender/Element}
+         */
+        this._currentPointer;
+
+        /**
+         * @type {module:zrender/container/Group}
+         */
+        this._mainGroup;
+
+        /**
+         * @type {module:zrender/container/Group}
+         */
+        this._labelGroup;
+    },
+
+    /**
+     * @override
+     */
+    render: function (timelineModel, ecModel, api, payload) {
+        this.model = timelineModel;
+        this.api = api;
+        this.ecModel = ecModel;
+
+        this.group.removeAll();
+
+        if (timelineModel.get('show', true)) {
+
+            var layoutInfo = this._layout(timelineModel, api);
+            var mainGroup = this._createGroup('mainGroup');
+            var labelGroup = this._createGroup('labelGroup');
+
+            /**
+             * @private
+             * @type {module:echarts/component/timeline/TimelineAxis}
+             */
+            var axis = this._axis = this._createAxis(layoutInfo, timelineModel);
+
+            timelineModel.formatTooltip = function (dataIndex) {
+                return encodeHTML(axis.scale.getLabel(dataIndex));
+            };
+
+            each$27(
+                ['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'],
+                function (name) {
+                    this['_render' + name](layoutInfo, mainGroup, axis, timelineModel);
+                },
+                this
+            );
+
+            this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel);
+            this._position(layoutInfo, timelineModel);
+        }
+
+        this._doPlayStop();
+    },
+
+    /**
+     * @override
+     */
+    remove: function () {
+        this._clearTimer();
+        this.group.removeAll();
+    },
+
+    /**
+     * @override
+     */
+    dispose: function () {
+        this._clearTimer();
+    },
+
+    _layout: function (timelineModel, api) {
+        var labelPosOpt = timelineModel.get('label.position');
+        var orient = timelineModel.get('orient');
+        var viewRect = getViewRect$4(timelineModel, api);
+        // Auto label offset.
+        if (labelPosOpt == null || labelPosOpt === 'auto') {
+            labelPosOpt = orient === 'horizontal'
+                ? ((viewRect.y + viewRect.height / 2) < api.getHeight() / 2 ? '-' : '+')
+                : ((viewRect.x + viewRect.width / 2) < api.getWidth() / 2 ? '+' : '-');
+        }
+        else if (isNaN(labelPosOpt)) {
+            labelPosOpt = ({
+                horizontal: {top: '-', bottom: '+'},
+                vertical: {left: '-', right: '+'}
+            })[orient][labelPosOpt];
+        }
+
+        var labelAlignMap = {
+            horizontal: 'center',
+            vertical: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'left' : 'right'
+        };
+
+        var labelBaselineMap = {
+            horizontal: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'top' : 'bottom',
+            vertical: 'middle'
+        };
+        var rotationMap = {
+            horizontal: 0,
+            vertical: PI$4 / 2
+        };
+
+        // Position
+        var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width;
+
+        var controlModel = timelineModel.getModel('controlStyle');
+        var showControl = controlModel.get('show', true);
+        var controlSize = showControl ? controlModel.get('itemSize') : 0;
+        var controlGap = showControl ? controlModel.get('itemGap') : 0;
+        var sizePlusGap = controlSize + controlGap;
+
+        // Special label rotate.
+        var labelRotation = timelineModel.get('label.rotate') || 0;
+        labelRotation = labelRotation * PI$4 / 180; // To radian.
+
+        var playPosition;
+        var prevBtnPosition;
+        var nextBtnPosition;
+        var axisExtent;
+        var controlPosition = controlModel.get('position', true);
+        var showPlayBtn = showControl && controlModel.get('showPlayBtn', true);
+        var showPrevBtn = showControl && controlModel.get('showPrevBtn', true);
+        var showNextBtn = showControl && controlModel.get('showNextBtn', true);
+        var xLeft = 0;
+        var xRight = mainLength;
+
+        // position[0] means left, position[1] means middle.
+        if (controlPosition === 'left' || controlPosition === 'bottom') {
+            showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap);
+            showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap);
+            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
+        }
+        else { // 'top' 'right'
+            showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
+            showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap);
+            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);
+        }
+        axisExtent = [xLeft, xRight];
+
+        if (timelineModel.get('inverse')) {
+            axisExtent.reverse();
+        }
+
+        return {
+            viewRect: viewRect,
+            mainLength: mainLength,
+            orient: orient,
+
+            rotation: rotationMap[orient],
+            labelRotation: labelRotation,
+            labelPosOpt: labelPosOpt,
+            labelAlign: timelineModel.get('label.align') || labelAlignMap[orient],
+            labelBaseline: timelineModel.get('label.verticalAlign')
+                || timelineModel.get('label.baseline')
+                || labelBaselineMap[orient],
+
+            // Based on mainGroup.
+            playPosition: playPosition,
+            prevBtnPosition: prevBtnPosition,
+            nextBtnPosition: nextBtnPosition,
+            axisExtent: axisExtent,
+
+            controlSize: controlSize,
+            controlGap: controlGap
+        };
+    },
+
+    _position: function (layoutInfo, timelineModel) {
+        // Position is be called finally, because bounding rect is needed for
+        // adapt content to fill viewRect (auto adapt offset).
+
+        // Timeline may be not all in the viewRect when 'offset' is specified
+        // as a number, because it is more appropriate that label aligns at
+        // 'offset' but not the other edge defined by viewRect.
+
+        var mainGroup = this._mainGroup;
+        var labelGroup = this._labelGroup;
+
+        var viewRect = layoutInfo.viewRect;
+        if (layoutInfo.orient === 'vertical') {
+            // transform to horizontal, inverse rotate by left-top point.
+            var m = create$1();
+            var rotateOriginX = viewRect.x;
+            var rotateOriginY = viewRect.y + viewRect.height;
+            translate(m, m, [-rotateOriginX, -rotateOriginY]);
+            rotate(m, m, -PI$4 / 2);
+            translate(m, m, [rotateOriginX, rotateOriginY]);
+            viewRect = viewRect.clone();
+            viewRect.applyTransform(m);
+        }
+
+        var viewBound = getBound(viewRect);
+        var mainBound = getBound(mainGroup.getBoundingRect());
+        var labelBound = getBound(labelGroup.getBoundingRect());
+
+        var mainPosition = mainGroup.position;
+        var labelsPosition = labelGroup.position;
+
+        labelsPosition[0] = mainPosition[0] = viewBound[0][0];
+
+        var labelPosOpt = layoutInfo.labelPosOpt;
+
+        if (isNaN(labelPosOpt)) { // '+' or '-'
+            var mainBoundIdx = labelPosOpt === '+' ? 0 : 1;
+            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);
+            toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);
+        }
+        else {
+            var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1;
+            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);
+            labelsPosition[1] = mainPosition[1] + labelPosOpt;
+        }
+
+        mainGroup.attr('position', mainPosition);
+        labelGroup.attr('position', labelsPosition);
+        mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;
+
+        setOrigin(mainGroup);
+        setOrigin(labelGroup);
+
+        function setOrigin(targetGroup) {
+            var pos = targetGroup.position;
+            targetGroup.origin = [
+                viewBound[0][0] - pos[0],
+                viewBound[1][0] - pos[1]
+            ];
+        }
+
+        function getBound(rect) {
+            // [[xmin, xmax], [ymin, ymax]]
+            return [
+                [rect.x, rect.x + rect.width],
+                [rect.y, rect.y + rect.height]
+            ];
+        }
+
+        function toBound(fromPos, from, to, dimIdx, boundIdx) {
+            fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];
+        }
+    },
+
+    _createAxis: function (layoutInfo, timelineModel) {
+        var data = timelineModel.getData();
+        var axisType = timelineModel.get('axisType');
+
+        var scale = createScaleByModel(timelineModel, axisType);
+
+        // Customize scale. The `tickValue` is `dataIndex`.
+        scale.getTicks = function () {
+            return data.mapArray(['value'], function (value) {
+                return value;
+            });
+        };
+
+        var dataExtent = data.getDataExtent('value');
+        scale.setExtent(dataExtent[0], dataExtent[1]);
+        scale.niceTicks();
+
+        var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);
+        axis.model = timelineModel;
+
+        return axis;
+    },
+
+    _createGroup: function (name) {
+        var newGroup = this['_' + name] = new Group();
+        this.group.add(newGroup);
+        return newGroup;
+    },
+
+    _renderAxisLine: function (layoutInfo, group, axis, timelineModel) {
+        var axisExtent = axis.getExtent();
+
+        if (!timelineModel.get('lineStyle.show')) {
+            return;
+        }
+
+        group.add(new Line({
+            shape: {
+                x1: axisExtent[0], y1: 0,
+                x2: axisExtent[1], y2: 0
+            },
+            style: extend(
+                {lineCap: 'round'},
+                timelineModel.getModel('lineStyle').getLineStyle()
+            ),
+            silent: true,
+            z2: 1
+        }));
+    },
+
+    /**
+     * @private
+     */
+    _renderAxisTick: function (layoutInfo, group, axis, timelineModel) {
+        var data = timelineModel.getData();
+        // Show all ticks, despite ignoring strategy.
+        var ticks = axis.scale.getTicks();
+
+        // The value is dataIndex, see the costomized scale.
+        each$27(ticks, function (value) {
+            var tickCoord = axis.dataToCoord(value);
+            var itemModel = data.getItemModel(value);
+            var itemStyleModel = itemModel.getModel('itemStyle');
+            var hoverStyleModel = itemModel.getModel('emphasis.itemStyle');
+            var symbolOpt = {
+                position: [tickCoord, 0],
+                onclick: bind$6(this._changeTimeline, this, value)
+            };
+            var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);
+            setHoverStyle(el, hoverStyleModel.getItemStyle());
+
+            if (itemModel.get('tooltip')) {
+                el.dataIndex = value;
+                el.dataModel = timelineModel;
+            }
+            else {
+                el.dataIndex = el.dataModel = null;
+            }
+
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) {
+        var labelModel = axis.getLabelModel();
+
+        if (!labelModel.get('show')) {
+            return;
+        }
+
+        var data = timelineModel.getData();
+        var labels = axis.getViewLabels();
+
+        each$27(labels, function (labelItem) {
+            // The tickValue is dataIndex, see the costomized scale.
+            var dataIndex = labelItem.tickValue;
+
+            var itemModel = data.getItemModel(dataIndex);
+            var normalLabelModel = itemModel.getModel('label');
+            var hoverLabelModel = itemModel.getModel('emphasis.label');
+            var tickCoord = axis.dataToCoord(labelItem.tickValue);
+            var textEl = new Text({
+                position: [tickCoord, 0],
+                rotation: layoutInfo.labelRotation - layoutInfo.rotation,
+                onclick: bind$6(this._changeTimeline, this, dataIndex),
+                silent: false
+            });
+            setTextStyle(textEl.style, normalLabelModel, {
+                text: labelItem.formattedLabel,
+                textAlign: layoutInfo.labelAlign,
+                textVerticalAlign: layoutInfo.labelBaseline
+            });
+
+            group.add(textEl);
+            setHoverStyle(
+                textEl, setTextStyle({}, hoverLabelModel)
+            );
+
+        }, this);
+    },
+
+    /**
+     * @private
+     */
+    _renderControl: function (layoutInfo, group, axis, timelineModel) {
+        var controlSize = layoutInfo.controlSize;
+        var rotation = layoutInfo.rotation;
+
+        var itemStyle = timelineModel.getModel('controlStyle').getItemStyle();
+        var hoverStyle = timelineModel.getModel('emphasis.controlStyle').getItemStyle();
+        var rect = [0, -controlSize / 2, controlSize, controlSize];
+        var playState = timelineModel.getPlayState();
+        var inverse = timelineModel.get('inverse', true);
+
+        makeBtn(
+            layoutInfo.nextBtnPosition,
+            'controlStyle.nextIcon',
+            bind$6(this._changeTimeline, this, inverse ? '-' : '+')
+        );
+        makeBtn(
+            layoutInfo.prevBtnPosition,
+            'controlStyle.prevIcon',
+            bind$6(this._changeTimeline, this, inverse ? '+' : '-')
+        );
+        makeBtn(
+            layoutInfo.playPosition,
+            'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'),
+            bind$6(this._handlePlayClick, this, !playState),
+            true
+        );
+
+        function makeBtn(position, iconPath, onclick, willRotate) {
+            if (!position) {
+                return;
+            }
+            var opt = {
+                position: position,
+                origin: [controlSize / 2, 0],
+                rotation: willRotate ? -rotation : 0,
+                rectHover: true,
+                style: itemStyle,
+                onclick: onclick
+            };
+            var btn = makeIcon(timelineModel, iconPath, rect, opt);
+            group.add(btn);
+            setHoverStyle(btn, hoverStyle);
+        }
+    },
+
+    _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) {
+        var data = timelineModel.getData();
+        var currentIndex = timelineModel.getCurrentIndex();
+        var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle');
+        var me = this;
+
+        var callback = {
+            onCreate: function (pointer) {
+                pointer.draggable = true;
+                pointer.drift = bind$6(me._handlePointerDrag, me);
+                pointer.ondragend = bind$6(me._handlePointerDragend, me);
+                pointerMoveTo(pointer, currentIndex, axis, timelineModel, true);
+            },
+            onUpdate: function (pointer) {
+                pointerMoveTo(pointer, currentIndex, axis, timelineModel);
+            }
+        };
+
+        // Reuse when exists, for animation and drag.
+        this._currentPointer = giveSymbol(
+            pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback
+        );
+    },
+
+    _handlePlayClick: function (nextState) {
+        this._clearTimer();
+        this.api.dispatchAction({
+            type: 'timelinePlayChange',
+            playState: nextState,
+            from: this.uid
+        });
+    },
+
+    _handlePointerDrag: function (dx, dy, e) {
+        this._clearTimer();
+        this._pointerChangeTimeline([e.offsetX, e.offsetY]);
+    },
+
+    _handlePointerDragend: function (e) {
+        this._pointerChangeTimeline([e.offsetX, e.offsetY], true);
+    },
+
+    _pointerChangeTimeline: function (mousePos, trigger) {
+        var toCoord = this._toAxisCoord(mousePos)[0];
+
+        var axis = this._axis;
+        var axisExtent = asc(axis.getExtent().slice());
+
+        toCoord > axisExtent[1] && (toCoord = axisExtent[1]);
+        toCoord < axisExtent[0] && (toCoord = axisExtent[0]);
+
+        this._currentPointer.position[0] = toCoord;
+        this._currentPointer.dirty();
+
+        var targetDataIndex = this._findNearestTick(toCoord);
+        var timelineModel = this.model;
+
+        if (trigger || (
+            targetDataIndex !== timelineModel.getCurrentIndex()
+            && timelineModel.get('realtime')
+        )) {
+            this._changeTimeline(targetDataIndex);
+        }
+    },
+
+    _doPlayStop: function () {
+        this._clearTimer();
+
+        if (this.model.getPlayState()) {
+            this._timer = setTimeout(
+                bind$6(handleFrame, this),
+                this.model.get('playInterval')
+            );
+        }
+
+        function handleFrame() {
+            // Do not cache
+            var timelineModel = this.model;
+            this._changeTimeline(
+                timelineModel.getCurrentIndex()
+                + (timelineModel.get('rewind', true) ? -1 : 1)
+            );
+        }
+    },
+
+    _toAxisCoord: function (vertex) {
+        var trans = this._mainGroup.getLocalTransform();
+        return applyTransform$1(vertex, trans, true);
+    },
+
+    _findNearestTick: function (axisCoord) {
+        var data = this.model.getData();
+        var dist = Infinity;
+        var targetDataIndex;
+        var axis = this._axis;
+
+        data.each(['value'], function (value, dataIndex) {
+            var coord = axis.dataToCoord(value);
+            var d = Math.abs(coord - axisCoord);
+            if (d < dist) {
+                dist = d;
+                targetDataIndex = dataIndex;
+            }
+        });
+
+        return targetDataIndex;
+    },
+
+    _clearTimer: function () {
+        if (this._timer) {
+            clearTimeout(this._timer);
+            this._timer = null;
+        }
+    },
+
+    _changeTimeline: function (nextIndex) {
+        var currentIndex = this.model.getCurrentIndex();
+
+        if (nextIndex === '+') {
+            nextIndex = currentIndex + 1;
+        }
+        else if (nextIndex === '-') {
+            nextIndex = currentIndex - 1;
+        }
+
+        this.api.dispatchAction({
+            type: 'timelineChange',
+            currentIndex: nextIndex,
+            from: this.uid
+        });
+    }
+
+});
+
+function getViewRect$4(model, api) {
+    return getLayoutRect(
+        model.getBoxLayoutParams(),
+        {
+            width: api.getWidth(),
+            height: api.getHeight()
+        },
+        model.get('padding')
+    );
+}
+
+function makeIcon(timelineModel, objPath, rect, opts) {
+    var icon = makePath(
+        timelineModel.get(objPath).replace(/^path:\/\//, ''),
+        clone(opts || {}),
+        new BoundingRect(rect[0], rect[1], rect[2], rect[3]),
+        'center'
+    );
+
+    return icon;
+}
+
+/**
+ * Create symbol or update symbol
+ * opt: basic position and event handlers
+ */
+function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) {
+    var color = itemStyleModel.get('color');
+
+    if (!symbol) {
+        var symbolType = hostModel.get('symbol');
+        symbol = createSymbol(symbolType, -1, -1, 2, 2, color);
+        symbol.setStyle('strokeNoScale', true);
+        group.add(symbol);
+        callback && callback.onCreate(symbol);
+    }
+    else {
+        symbol.setColor(color);
+        group.add(symbol); // Group may be new, also need to add.
+        callback && callback.onUpdate(symbol);
+    }
+
+    // Style
+    var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']);
+    symbol.setStyle(itemStyle);
+
+    // Transform and events.
+    opt = merge({
+        rectHover: true,
+        z2: 100
+    }, opt, true);
+
+    var symbolSize = hostModel.get('symbolSize');
+    symbolSize = symbolSize instanceof Array
+        ? symbolSize.slice()
+        : [+symbolSize, +symbolSize];
+    symbolSize[0] /= 2;
+    symbolSize[1] /= 2;
+    opt.scale = symbolSize;
+
+    var symbolOffset = hostModel.get('symbolOffset');
+    if (symbolOffset) {
+        var pos = opt.position = opt.position || [0, 0];
+        pos[0] += parsePercent$1(symbolOffset[0], symbolSize[0]);
+        pos[1] += parsePercent$1(symbolOffset[1], symbolSize[1]);
+    }
+
+    var symbolRotate = hostModel.get('symbolRotate');
+    opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;
+
+    symbol.attr(opt);
+
+    // FIXME
+    // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed,
+    // getBoundingRect will return wrong result.
+    // (This is supposed to be resolved in zrender, but it is a little difficult to
+    // leverage performance and auto updateTransform)
+    // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol.
+    symbol.updateTransform();
+
+    return symbol;
+}
+
+function pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) {
+    if (pointer.dragging) {
+        return;
+    }
+
+    var pointerModel = timelineModel.getModel('checkpointStyle');
+    var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex));
+
+    if (noAnimation || !pointerModel.get('animation', true)) {
+        pointer.attr({position: [toCoord, 0]});
+    }
+    else {
+        pointer.stopAnimation(true);
+        pointer.animateTo(
+            {position: [toCoord, 0]},
+            pointerModel.get('animationDuration', true),
+            pointerModel.get('animationEasing', true)
+        );
+    }
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * DataZoom component entry
+ */
+
+registerPreprocessor(preprocessor$3);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var ToolboxModel = extendComponentModel({
+
+    type: 'toolbox',
+
+    layoutMode: {
+        type: 'box',
+        ignoreSize: true
+    },
+
+    optionUpdated: function () {
+        ToolboxModel.superApply(this, 'optionUpdated', arguments);
+
+        each$1(this.option.feature, function (featureOpt, featureName) {
+            var Feature = get$1(featureName);
+            Feature && merge(featureOpt, Feature.defaultOption);
+        });
+    },
+
+    defaultOption: {
+
+        show: true,
+
+        z: 6,
+
+        zlevel: 0,
+
+        orient: 'horizontal',
+
+        left: 'right',
+
+        top: 'top',
+
+        // right
+        // bottom
+
+        backgroundColor: 'transparent',
+
+        borderColor: '#ccc',
+
+        borderRadius: 0,
+
+        borderWidth: 0,
+
+        padding: 5,
+
+        itemSize: 15,
+
+        itemGap: 8,
+
+        showTitle: true,
+
+        iconStyle: {
+            borderColor: '#666',
+            color: 'none'
+        },
+        emphasis: {
+            iconStyle: {
+                borderColor: '#3E98C5'
+            }
+        }
+        // textStyle: {},
+
+        // feature
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+extendComponentView({
+
+    type: 'toolbox',
+
+    render: function (toolboxModel, ecModel, api, payload) {
+        var group = this.group;
+        group.removeAll();
+
+        if (!toolboxModel.get('show')) {
+            return;
+        }
+
+        var itemSize = +toolboxModel.get('itemSize');
+        var featureOpts = toolboxModel.get('feature') || {};
+        var features = this._features || (this._features = {});
+
+        var featureNames = [];
+        each$1(featureOpts, function (opt, name) {
+            featureNames.push(name);
+        });
+
+        (new DataDiffer(this._featureNames || [], featureNames))
+            .add(processFeature)
+            .update(processFeature)
+            .remove(curry(processFeature, null))
+            .execute();
+
+        // Keep for diff.
+        this._featureNames = featureNames;
+
+        function processFeature(newIndex, oldIndex) {
+            var featureName = featureNames[newIndex];
+            var oldName = featureNames[oldIndex];
+            var featureOpt = featureOpts[featureName];
+            var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);
+            var feature;
+
+            if (featureName && !oldName) { // Create
+                if (isUserFeatureName(featureName)) {
+                    feature = {
+                        model: featureModel,
+                        onclick: featureModel.option.onclick,
+                        featureName: featureName
+                    };
+                }
+                else {
+                    var Feature = get$1(featureName);
+                    if (!Feature) {
+                        return;
+                    }
+                    feature = new Feature(featureModel, ecModel, api);
+                }
+                features[featureName] = feature;
+            }
+            else {
+                feature = features[oldName];
+                // If feature does not exsit.
+                if (!feature) {
+                    return;
+                }
+                feature.model = featureModel;
+                feature.ecModel = ecModel;
+                feature.api = api;
+            }
+
+            if (!featureName && oldName) {
+                feature.dispose && feature.dispose(ecModel, api);
+                return;
+            }
+
+            if (!featureModel.get('show') || feature.unusable) {
+                feature.remove && feature.remove(ecModel, api);
+                return;
+            }
+
+            createIconPaths(featureModel, feature, featureName);
+
+            featureModel.setIconStatus = function (iconName, status) {
+                var option = this.option;
+                var iconPaths = this.iconPaths;
+                option.iconStatus = option.iconStatus || {};
+                option.iconStatus[iconName] = status;
+                // FIXME
+                iconPaths[iconName] && iconPaths[iconName].trigger(status);
+            };
+
+            if (feature.render) {
+                feature.render(featureModel, ecModel, api, payload);
+            }
+        }
+
+        function createIconPaths(featureModel, feature, featureName) {
+            var iconStyleModel = featureModel.getModel('iconStyle');
+            var iconStyleEmphasisModel = featureModel.getModel('emphasis.iconStyle');
+
+            // If one feature has mutiple icon. they are orginaized as
+            // {
+            //     icon: {
+            //         foo: '',
+            //         bar: ''
+            //     },
+            //     title: {
+            //         foo: '',
+            //         bar: ''
+            //     }
+            // }
+            var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon');
+            var titles = featureModel.get('title') || {};
+            if (typeof icons === 'string') {
+                var icon = icons;
+                var title = titles;
+                icons = {};
+                titles = {};
+                icons[featureName] = icon;
+                titles[featureName] = title;
+            }
+            var iconPaths = featureModel.iconPaths = {};
+            each$1(icons, function (iconStr, iconName) {
+                var path = createIcon(
+                    iconStr,
+                    {},
+                    {
+                        x: -itemSize / 2,
+                        y: -itemSize / 2,
+                        width: itemSize,
+                        height: itemSize
+                    }
+                );
+                path.setStyle(iconStyleModel.getItemStyle());
+                path.hoverStyle = iconStyleEmphasisModel.getItemStyle();
+
+                setHoverStyle(path);
+
+                if (toolboxModel.get('showTitle')) {
+                    path.__title = titles[iconName];
+                    path.on('mouseover', function () {
+                            // Should not reuse above hoverStyle, which might be modified.
+                            var hoverStyle = iconStyleEmphasisModel.getItemStyle();
+                            path.setStyle({
+                                text: titles[iconName],
+                                textPosition: hoverStyle.textPosition || 'bottom',
+                                textFill: hoverStyle.fill || hoverStyle.stroke || '#000',
+                                textAlign: hoverStyle.textAlign || 'center'
+                            });
+                        })
+                        .on('mouseout', function () {
+                            path.setStyle({
+                                textFill: null
+                            });
+                        });
+                }
+                path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal');
+
+                group.add(path);
+                path.on('click', bind(
+                    feature.onclick, feature, ecModel, api, iconName
+                ));
+
+                iconPaths[iconName] = path;
+            });
+        }
+
+        layout$3(group, toolboxModel, api);
+        // Render background after group is layout
+        // FIXME
+        group.add(makeBackground(group.getBoundingRect(), toolboxModel));
+
+        // Adjust icon title positions to avoid them out of screen
+        group.eachChild(function (icon) {
+            var titleText = icon.__title;
+            var hoverStyle = icon.hoverStyle;
+            // May be background element
+            if (hoverStyle && titleText) {
+                var rect = getBoundingRect(
+                    titleText, makeFont(hoverStyle)
+                );
+                var offsetX = icon.position[0] + group.position[0];
+                var offsetY = icon.position[1] + group.position[1] + itemSize;
+
+                var needPutOnTop = false;
+                if (offsetY + rect.height > api.getHeight()) {
+                    hoverStyle.textPosition = 'top';
+                    needPutOnTop = true;
+                }
+                var topOffset = needPutOnTop ? (-5 - rect.height) : (itemSize + 8);
+                if (offsetX + rect.width /  2 > api.getWidth()) {
+                    hoverStyle.textPosition = ['100%', topOffset];
+                    hoverStyle.textAlign = 'right';
+                }
+                else if (offsetX - rect.width / 2 < 0) {
+                    hoverStyle.textPosition = [0, topOffset];
+                    hoverStyle.textAlign = 'left';
+                }
+            }
+        });
+    },
+
+    updateView: function (toolboxModel, ecModel, api, payload) {
+        each$1(this._features, function (feature) {
+            feature.updateView && feature.updateView(feature.model, ecModel, api, payload);
+        });
+    },
+
+    // updateLayout: function (toolboxModel, ecModel, api, payload) {
+    //     zrUtil.each(this._features, function (feature) {
+    //         feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);
+    //     });
+    // },
+
+    remove: function (ecModel, api) {
+        each$1(this._features, function (feature) {
+            feature.remove && feature.remove(ecModel, api);
+        });
+        this.group.removeAll();
+    },
+
+    dispose: function (ecModel, api) {
+        each$1(this._features, function (feature) {
+            feature.dispose && feature.dispose(ecModel, api);
+        });
+    }
+});
+
+function isUserFeatureName(featureName) {
+    return featureName.indexOf('my') === 0;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var saveAsImageLang = lang.toolbox.saveAsImage;
+
+function SaveAsImage(model) {
+    this.model = model;
+}
+
+SaveAsImage.defaultOption = {
+    show: true,
+    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: saveAsImageLang.title,
+    type: 'png',
+    // Default use option.backgroundColor
+    // backgroundColor: '#fff',
+    name: '',
+    excludeComponents: ['toolbox'],
+    pixelRatio: 1,
+    lang: saveAsImageLang.lang.slice()
+};
+
+SaveAsImage.prototype.unusable = !env$1.canvasSupported;
+
+var proto$4 = SaveAsImage.prototype;
+
+proto$4.onclick = function (ecModel, api) {
+    var model = this.model;
+    var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';
+    var $a = document.createElement('a');
+    var type = model.get('type', true) || 'png';
+    $a.download = title + '.' + type;
+    $a.target = '_blank';
+    var url = api.getConnectedDataURL({
+        type: type,
+        backgroundColor: model.get('backgroundColor', true)
+            || ecModel.get('backgroundColor') || '#fff',
+        excludeComponents: model.get('excludeComponents'),
+        pixelRatio: model.get('pixelRatio')
+    });
+    $a.href = url;
+    // Chrome and Firefox
+    if (typeof MouseEvent === 'function' && !env$1.browser.ie && !env$1.browser.edge) {
+        var evt = new MouseEvent('click', {
+            view: window,
+            bubbles: true,
+            cancelable: false
+        });
+        $a.dispatchEvent(evt);
+    }
+    // IE
+    else {
+        if (window.navigator.msSaveOrOpenBlob) {
+            var bstr = atob(url.split(',')[1]);
+            var n = bstr.length;
+            var u8arr = new Uint8Array(n);
+            while(n--) {
+                u8arr[n] = bstr.charCodeAt(n);
+            }
+            var blob = new Blob([u8arr]);
+            window.navigator.msSaveOrOpenBlob(blob, title + '.' + type);
+        }
+        else {
+            var lang$$1 = model.get('lang');
+            var html = '' +
+                '<body style="margin:0;">' +
+                '<img src="' + url + '" style="max-width:100%;" title="' + ((lang$$1 && lang$$1[0]) || '') + '" />' +
+                '</body>';
+            var tab = window.open();
+            tab.document.write(html);
+        }
+    }
+};
+
+register$1(
+    'saveAsImage', SaveAsImage
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var magicTypeLang = lang.toolbox.magicType;
+
+function MagicType(model) {
+    this.model = model;
+}
+
+MagicType.defaultOption = {
+    show: true,
+    type: [],
+    // Icon group
+    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', // jshint ignore:line
+        tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z'
+    },
+    // `line`, `bar`, `stack`, `tiled`
+    title: clone(magicTypeLang.title),
+    option: {},
+    seriesIndex: {}
+};
+
+var proto$5 = MagicType.prototype;
+
+proto$5.getIcons = function () {
+    var model = this.model;
+    var availableIcons = model.get('icon');
+    var icons = {};
+    each$1(model.get('type'), function (type) {
+        if (availableIcons[type]) {
+            icons[type] = availableIcons[type];
+        }
+    });
+    return icons;
+};
+
+var seriesOptGenreator = {
+    'line': function (seriesType, seriesId, seriesModel, model) {
+        if (seriesType === 'bar') {
+            return merge({
+                id: seriesId,
+                type: 'line',
+                // Preserve data related option
+                data: seriesModel.get('data'),
+                stack: seriesModel.get('stack'),
+                markPoint: seriesModel.get('markPoint'),
+                markLine: seriesModel.get('markLine')
+            }, model.get('option.line') || {}, true);
+        }
+    },
+    'bar': function (seriesType, seriesId, seriesModel, model) {
+        if (seriesType === 'line') {
+            return merge({
+                id: seriesId,
+                type: 'bar',
+                // Preserve data related option
+                data: seriesModel.get('data'),
+                stack: seriesModel.get('stack'),
+                markPoint: seriesModel.get('markPoint'),
+                markLine: seriesModel.get('markLine')
+            }, model.get('option.bar') || {}, true);
+        }
+    },
+    'stack': function (seriesType, seriesId, seriesModel, model) {
+        if (seriesType === 'line' || seriesType === 'bar') {
+            return merge({
+                id: seriesId,
+                stack: '__ec_magicType_stack__'
+            }, model.get('option.stack') || {}, true);
+        }
+    },
+    'tiled': function (seriesType, seriesId, seriesModel, model) {
+        if (seriesType === 'line' || seriesType === 'bar') {
+            return merge({
+                id: seriesId,
+                stack: ''
+            }, model.get('option.tiled') || {}, true);
+        }
+    }
+};
+
+var radioTypes = [
+    ['line', 'bar'],
+    ['stack', 'tiled']
+];
+
+proto$5.onclick = function (ecModel, api, type) {
+    var model = this.model;
+    var seriesIndex = model.get('seriesIndex.' + type);
+    // Not supported magicType
+    if (!seriesOptGenreator[type]) {
+        return;
+    }
+    var newOption = {
+        series: []
+    };
+    var generateNewSeriesTypes = function (seriesModel) {
+        var seriesType = seriesModel.subType;
+        var seriesId = seriesModel.id;
+        var newSeriesOpt = seriesOptGenreator[type](
+            seriesType, seriesId, seriesModel, model
+        );
+        if (newSeriesOpt) {
+            // PENDING If merge original option?
+            defaults(newSeriesOpt, seriesModel.option);
+            newOption.series.push(newSeriesOpt);
+        }
+        // Modify boundaryGap
+        var coordSys = seriesModel.coordinateSystem;
+        if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {
+            var categoryAxis = coordSys.getAxesByScale('ordinal')[0];
+            if (categoryAxis) {
+                var axisDim = categoryAxis.dim;
+                var axisType = axisDim + 'Axis';
+                var axisModel = ecModel.queryComponents({
+                    mainType: axisType,
+                    index: seriesModel.get(name + 'Index'),
+                    id: seriesModel.get(name + 'Id')
+                })[0];
+                var axisIndex = axisModel.componentIndex;
+
+                newOption[axisType] = newOption[axisType] || [];
+                for (var i = 0; i <= axisIndex; i++) {
+                    newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};
+                }
+                newOption[axisType][axisIndex].boundaryGap = type === 'bar' ? true : false;
+            }
+        }
+    };
+
+    each$1(radioTypes, function (radio) {
+        if (indexOf(radio, type) >= 0) {
+            each$1(radio, function (item) {
+                model.setIconStatus(item, 'normal');
+            });
+        }
+    });
+
+    model.setIconStatus(type, 'emphasis');
+
+    ecModel.eachComponent(
+        {
+            mainType: 'series',
+            query: seriesIndex == null ? null : {
+                seriesIndex: seriesIndex
+            }
+        }, generateNewSeriesTypes
+    );
+    api.dispatchAction({
+        type: 'changeMagicType',
+        currentType: type,
+        newOption: newOption
+    });
+};
+
+registerAction({
+    type: 'changeMagicType',
+    event: 'magicTypeChanged',
+    update: 'prepareAndUpdate'
+}, function (payload, ecModel) {
+    ecModel.mergeOption(payload.newOption);
+});
+
+register$1('magicType', MagicType);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var dataViewLang = lang.toolbox.dataView;
+
+var BLOCK_SPLITER = new Array(60).join('-');
+var ITEM_SPLITER = '\t';
+/**
+ * Group series into two types
+ *  1. on category axis, like line, bar
+ *  2. others, like scatter, pie
+ * @param {module:echarts/model/Global} ecModel
+ * @return {Object}
+ * @inner
+ */
+function groupSeries(ecModel) {
+    var seriesGroupByCategoryAxis = {};
+    var otherSeries = [];
+    var meta = [];
+    ecModel.eachRawSeries(function (seriesModel) {
+        var coordSys = seriesModel.coordinateSystem;
+
+        if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {
+            var baseAxis = coordSys.getBaseAxis();
+            if (baseAxis.type === 'category') {
+                var key = baseAxis.dim + '_' + baseAxis.index;
+                if (!seriesGroupByCategoryAxis[key]) {
+                    seriesGroupByCategoryAxis[key] = {
+                        categoryAxis: baseAxis,
+                        valueAxis: coordSys.getOtherAxis(baseAxis),
+                        series: []
+                    };
+                    meta.push({
+                        axisDim: baseAxis.dim,
+                        axisIndex: baseAxis.index
+                    });
+                }
+                seriesGroupByCategoryAxis[key].series.push(seriesModel);
+            }
+            else {
+                otherSeries.push(seriesModel);
+            }
+        }
+        else {
+            otherSeries.push(seriesModel);
+        }
+    });
+
+    return {
+        seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,
+        other: otherSeries,
+        meta: meta
+    };
+}
+
+/**
+ * Assemble content of series on cateogory axis
+ * @param {Array.<module:echarts/model/Series>} series
+ * @return {string}
+ * @inner
+ */
+function assembleSeriesWithCategoryAxis(series) {
+    var tables = [];
+    each$1(series, function (group, key) {
+        var categoryAxis = group.categoryAxis;
+        var valueAxis = group.valueAxis;
+        var valueAxisDim = valueAxis.dim;
+
+        var headers = [' '].concat(map(group.series, function (series) {
+            return series.name;
+        }));
+        var columns = [categoryAxis.model.getCategories()];
+        each$1(group.series, function (series) {
+            columns.push(series.getRawData().mapArray(valueAxisDim, function (val) {
+                return val;
+            }));
+        });
+        // Assemble table content
+        var lines = [headers.join(ITEM_SPLITER)];
+        for (var i = 0; i < columns[0].length; i++) {
+            var items = [];
+            for (var j = 0; j < columns.length; j++) {
+                items.push(columns[j][i]);
+            }
+            lines.push(items.join(ITEM_SPLITER));
+        }
+        tables.push(lines.join('\n'));
+    });
+    return tables.join('\n\n' +  BLOCK_SPLITER + '\n\n');
+}
+
+/**
+ * Assemble content of other series
+ * @param {Array.<module:echarts/model/Series>} series
+ * @return {string}
+ * @inner
+ */
+function assembleOtherSeries(series) {
+    return map(series, function (series) {
+        var data = series.getRawData();
+        var lines = [series.name];
+        var vals = [];
+        data.each(data.dimensions, function () {
+            var argLen = arguments.length;
+            var dataIndex = arguments[argLen - 1];
+            var name = data.getName(dataIndex);
+            for (var i = 0; i < argLen - 1; i++) {
+                vals[i] = arguments[i];
+            }
+            lines.push((name ? (name + ITEM_SPLITER) : '') + vals.join(ITEM_SPLITER));
+        });
+        return lines.join('\n');
+    }).join('\n\n' + BLOCK_SPLITER + '\n\n');
+}
+
+/**
+ * @param {module:echarts/model/Global}
+ * @return {Object}
+ * @inner
+ */
+function getContentFromModel(ecModel) {
+
+    var result = groupSeries(ecModel);
+
+    return {
+        value: filter([
+                assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis),
+                assembleOtherSeries(result.other)
+            ], function (str) {
+                return str.replace(/[\n\t\s]/g, '');
+            }).join('\n\n' + BLOCK_SPLITER + '\n\n'),
+
+        meta: result.meta
+    };
+}
+
+
+function trim$1(str) {
+    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+}
+/**
+ * If a block is tsv format
+ */
+function isTSVFormat(block) {
+    // Simple method to find out if a block is tsv format
+    var firstLine = block.slice(0, block.indexOf('\n'));
+    if (firstLine.indexOf(ITEM_SPLITER) >= 0) {
+        return true;
+    }
+}
+
+var itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');
+/**
+ * @param {string} tsv
+ * @return {Object}
+ */
+function parseTSVContents(tsv) {
+    var tsvLines = tsv.split(/\n+/g);
+    var headers = trim$1(tsvLines.shift()).split(itemSplitRegex);
+
+    var categories = [];
+    var series = map(headers, function (header) {
+        return {
+            name: header,
+            data: []
+        };
+    });
+    for (var i = 0; i < tsvLines.length; i++) {
+        var items = trim$1(tsvLines[i]).split(itemSplitRegex);
+        categories.push(items.shift());
+        for (var j = 0; j < items.length; j++) {
+            series[j] && (series[j].data[i] = items[j]);
+        }
+    }
+    return {
+        series: series,
+        categories: categories
+    };
+}
+
+/**
+ * @param {string} str
+ * @return {Array.<Object>}
+ * @inner
+ */
+function parseListContents(str) {
+    var lines = str.split(/\n+/g);
+    var seriesName = trim$1(lines.shift());
+
+    var data = [];
+    for (var i = 0; i < lines.length; i++) {
+        var items = trim$1(lines[i]).split(itemSplitRegex);
+        var name = '';
+        var value;
+        var hasName = false;
+        if (isNaN(items[0])) { // First item is name
+            hasName = true;
+            name = items[0];
+            items = items.slice(1);
+            data[i] = {
+                name: name,
+                value: []
+            };
+            value = data[i].value;
+        }
+        else {
+            value = data[i] = [];
+        }
+        for (var j = 0; j < items.length; j++) {
+            value.push(+items[j]);
+        }
+        if (value.length === 1) {
+            hasName ? (data[i].value = value[0]) : (data[i] = value[0]);
+        }
+    }
+
+    return {
+        name: seriesName,
+        data: data
+    };
+}
+
+/**
+ * @param {string} str
+ * @param {Array.<Object>} blockMetaList
+ * @return {Object}
+ * @inner
+ */
+function parseContents(str, blockMetaList) {
+    var blocks = str.split(new RegExp('\n*' + BLOCK_SPLITER + '\n*', 'g'));
+    var newOption = {
+        series: []
+    };
+    each$1(blocks, function (block, idx) {
+        if (isTSVFormat(block)) {
+            var result = parseTSVContents(block);
+            var blockMeta = blockMetaList[idx];
+            var axisKey = blockMeta.axisDim + 'Axis';
+
+            if (blockMeta) {
+                newOption[axisKey] = newOption[axisKey] || [];
+                newOption[axisKey][blockMeta.axisIndex] = {
+                    data: result.categories
+                };
+                newOption.series = newOption.series.concat(result.series);
+            }
+        }
+        else {
+            var result = parseListContents(block);
+            newOption.series.push(result);
+        }
+    });
+    return newOption;
+}
+
+/**
+ * @alias {module:echarts/component/toolbox/feature/DataView}
+ * @constructor
+ * @param {module:echarts/model/Model} model
+ */
+function DataView(model) {
+
+    this._dom = null;
+
+    this.model = model;
+}
+
+DataView.defaultOption = {
+    show: true,
+    readOnly: false,
+    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: clone(dataViewLang.title),
+    lang: clone(dataViewLang.lang),
+    backgroundColor: '#fff',
+    textColor: '#000',
+    textareaColor: '#fff',
+    textareaBorderColor: '#333',
+    buttonColor: '#c23531',
+    buttonTextColor: '#fff'
+};
+
+DataView.prototype.onclick = function (ecModel, api) {
+    var container = api.getDom();
+    var model = this.model;
+    if (this._dom) {
+        container.removeChild(this._dom);
+    }
+    var root = document.createElement('div');
+    root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;';
+    root.style.backgroundColor = model.get('backgroundColor') || '#fff';
+
+    // Create elements
+    var header = document.createElement('h4');
+    var lang$$1 = model.get('lang') || [];
+    header.innerHTML = lang$$1[0] || model.get('title');
+    header.style.cssText = 'margin: 10px 20px;';
+    header.style.color = model.get('textColor');
+
+    var viewMain = document.createElement('div');
+    var textarea = document.createElement('textarea');
+    viewMain.style.cssText = 'display:block;width:100%;overflow:auto;';
+
+    var optionToContent = model.get('optionToContent');
+    var contentToOption = model.get('contentToOption');
+    var result = getContentFromModel(ecModel);
+    if (typeof optionToContent === 'function') {
+        var htmlOrDom = optionToContent(api.getOption());
+        if (typeof htmlOrDom === 'string') {
+            viewMain.innerHTML = htmlOrDom;
+        }
+        else if (isDom(htmlOrDom)) {
+            viewMain.appendChild(htmlOrDom);
+        }
+    }
+    else {
+        // Use default textarea
+        viewMain.appendChild(textarea);
+        textarea.readOnly = model.get('readOnly');
+        textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;';
+        textarea.style.color = model.get('textColor');
+        textarea.style.borderColor = model.get('textareaBorderColor');
+        textarea.style.backgroundColor = model.get('textareaColor');
+        textarea.value = result.value;
+    }
+
+    var blockMetaList = result.meta;
+
+    var buttonContainer = document.createElement('div');
+    buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;';
+
+    var buttonStyle = 'float:right;margin-right:20px;border:none;'
+        + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';
+    var closeButton = document.createElement('div');
+    var refreshButton = document.createElement('div');
+
+    buttonStyle += ';background-color:' + model.get('buttonColor');
+    buttonStyle += ';color:' + model.get('buttonTextColor');
+
+    var self = this;
+
+    function close() {
+        container.removeChild(root);
+        self._dom = null;
+    }
+    addEventListener(closeButton, 'click', close);
+
+    addEventListener(refreshButton, 'click', function () {
+        var newOption;
+        try {
+            if (typeof contentToOption === 'function') {
+                newOption = contentToOption(viewMain, api.getOption());
+            }
+            else {
+                newOption = parseContents(textarea.value, blockMetaList);
+            }
+        }
+        catch (e) {
+            close();
+            throw new Error('Data view format error ' + e);
+        }
+        if (newOption) {
+            api.dispatchAction({
+                type: 'changeDataView',
+                newOption: newOption
+            });
+        }
+
+        close();
+    });
+
+    closeButton.innerHTML = lang$$1[1];
+    refreshButton.innerHTML = lang$$1[2];
+    refreshButton.style.cssText = buttonStyle;
+    closeButton.style.cssText = buttonStyle;
+
+    !model.get('readOnly') && buttonContainer.appendChild(refreshButton);
+    buttonContainer.appendChild(closeButton);
+
+    // http://stackoverflow.com/questions/6637341/use-tab-to-indent-in-textarea
+    addEventListener(textarea, 'keydown', function (e) {
+        if ((e.keyCode || e.which) === 9) {
+            // get caret position/selection
+            var val = this.value;
+            var start = this.selectionStart;
+            var end = this.selectionEnd;
+
+            // set textarea value to: text before caret + tab + text after caret
+            this.value = val.substring(0, start) + ITEM_SPLITER + val.substring(end);
+
+            // put caret at right position again
+            this.selectionStart = this.selectionEnd = start + 1;
+
+            // prevent the focus lose
+            stop(e);
+        }
+    });
+
+    root.appendChild(header);
+    root.appendChild(viewMain);
+    root.appendChild(buttonContainer);
+
+    viewMain.style.height = (container.clientHeight - 80) + 'px';
+
+    container.appendChild(root);
+    this._dom = root;
+};
+
+DataView.prototype.remove = function (ecModel, api) {
+    this._dom && api.getDom().removeChild(this._dom);
+};
+
+DataView.prototype.dispose = function (ecModel, api) {
+    this.remove(ecModel, api);
+};
+
+/**
+ * @inner
+ */
+function tryMergeDataOption(newData, originalData) {
+    return map(newData, function (newVal, idx) {
+        var original = originalData && originalData[idx];
+        if (isObject$1(original) && !isArray(original)) {
+            if (isObject$1(newVal) && !isArray(newVal)) {
+                newVal = newVal.value;
+            }
+            // Original data has option
+            return defaults({
+                value: newVal
+            }, original);
+        }
+        else {
+            return newVal;
+        }
+    });
+}
+
+register$1('dataView', DataView);
+
+registerAction({
+    type: 'changeDataView',
+    event: 'dataViewChanged',
+    update: 'prepareAndUpdate'
+}, function (payload, ecModel) {
+    var newSeriesOptList = [];
+    each$1(payload.newOption.series, function (seriesOpt) {
+        var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];
+        if (!seriesModel) {
+            // New created series
+            // Geuss the series type
+            newSeriesOptList.push(extend({
+                // Default is scatter
+                type: 'scatter'
+            }, seriesOpt));
+        }
+        else {
+            var originalData = seriesModel.get('data');
+            newSeriesOptList.push({
+                name: seriesOpt.name,
+                data: tryMergeDataOption(seriesOpt.data, originalData)
+            });
+        }
+    });
+
+    ecModel.mergeOption(defaults({
+        series: newSeriesOptList
+    }, payload.newOption));
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var each$29 = each$1;
+
+var ATTR$2 = '\0_ec_hist_store';
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]}
+ */
+function push(ecModel, newSnapshot) {
+    var store = giveStore$1(ecModel);
+
+    // If previous dataZoom can not be found,
+    // complete an range with current range.
+    each$29(newSnapshot, function (batchItem, dataZoomId) {
+        var i = store.length - 1;
+        for (; i >= 0; i--) {
+            var snapshot = store[i];
+            if (snapshot[dataZoomId]) {
+                break;
+            }
+        }
+        if (i < 0) {
+            // No origin range set, create one by current range.
+            var dataZoomModel = ecModel.queryComponents(
+                {mainType: 'dataZoom', subType: 'select', id: dataZoomId}
+            )[0];
+            if (dataZoomModel) {
+                var percentRange = dataZoomModel.getPercentRange();
+                store[0][dataZoomId] = {
+                    dataZoomId: dataZoomId,
+                    start: percentRange[0],
+                    end: percentRange[1]
+                };
+            }
+        }
+    });
+
+    store.push(newSnapshot);
+}
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ * @return {Object} snapshot
+ */
+function pop(ecModel) {
+    var store = giveStore$1(ecModel);
+    var head = store[store.length - 1];
+    store.length > 1 && store.pop();
+
+    // Find top for all dataZoom.
+    var snapshot = {};
+    each$29(head, function (batchItem, dataZoomId) {
+        for (var i = store.length - 1; i >= 0; i--) {
+            var batchItem = store[i][dataZoomId];
+            if (batchItem) {
+                snapshot[dataZoomId] = batchItem;
+                break;
+            }
+        }
+    });
+
+    return snapshot;
+}
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ */
+function clear$1(ecModel) {
+    ecModel[ATTR$2] = null;
+}
+
+/**
+ * @param {module:echarts/model/Global} ecModel
+ * @return {number} records. always >= 1.
+ */
+function count(ecModel) {
+    return giveStore$1(ecModel).length;
+}
+
+/**
+ * [{key: dataZoomId, value: {dataZoomId, range}}, ...]
+ * History length of each dataZoom may be different.
+ * this._history[0] is used to store origin range.
+ * @type {Array.<Object>}
+ */
+function giveStore$1(ecModel) {
+    var store = ecModel[ATTR$2];
+    if (!store) {
+        store = ecModel[ATTR$2] = [{}];
+    }
+    return store;
+}
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+DataZoomModel.extend({
+    type: 'dataZoom.select'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+DataZoomView.extend({
+    type: 'dataZoom.select'
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * DataZoom component entry
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Use dataZoomSelect
+var dataZoomLang = lang.toolbox.dataZoom;
+var each$28 = each$1;
+
+// Spectial component id start with \0ec\0, see echarts/model/Global.js~hasInnerId
+var DATA_ZOOM_ID_BASE = '\0_ec_\0toolbox-dataZoom_';
+
+function DataZoom(model, ecModel, api) {
+
+    /**
+     * @private
+     * @type {module:echarts/component/helper/BrushController}
+     */
+    (this._brushController = new BrushController(api.getZr()))
+        .on('brush', bind(this._onBrush, this))
+        .mount();
+
+    /**
+     * @private
+     * @type {boolean}
+     */
+    this._isZoomActive;
+}
+
+DataZoom.defaultOption = {
+    show: true,
+    // Icon group
+    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'
+    },
+    // `zoom`, `back`
+    title: clone(dataZoomLang.title)
+};
+
+var proto$6 = DataZoom.prototype;
+
+proto$6.render = function (featureModel, ecModel, api, payload) {
+    this.model = featureModel;
+    this.ecModel = ecModel;
+    this.api = api;
+
+    updateZoomBtnStatus(featureModel, ecModel, this, payload, api);
+    updateBackBtnStatus(featureModel, ecModel);
+};
+
+proto$6.onclick = function (ecModel, api, type) {
+    handlers$1[type].call(this);
+};
+
+proto$6.remove = function (ecModel, api) {
+    this._brushController.unmount();
+};
+
+proto$6.dispose = function (ecModel, api) {
+    this._brushController.dispose();
+};
+
+/**
+ * @private
+ */
+var handlers$1 = {
+
+    zoom: function () {
+        var nextActive = !this._isZoomActive;
+
+        this.api.dispatchAction({
+            type: 'takeGlobalCursor',
+            key: 'dataZoomSelect',
+            dataZoomSelectActive: nextActive
+        });
+    },
+
+    back: function () {
+        this._dispatchZoomAction(pop(this.ecModel));
+    }
+};
+
+/**
+ * @private
+ */
+proto$6._onBrush = function (areas, opt) {
+    if (!opt.isEnd || !areas.length) {
+        return;
+    }
+    var snapshot = {};
+    var ecModel = this.ecModel;
+
+    this._brushController.updateCovers([]); // remove cover
+
+    var brushTargetManager = new BrushTargetManager(
+        retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']}
+    );
+    brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {
+        if (coordSys.type !== 'cartesian2d') {
+            return;
+        }
+
+        var brushType = area.brushType;
+        if (brushType === 'rect') {
+            setBatch('x', coordSys, coordRange[0]);
+            setBatch('y', coordSys, coordRange[1]);
+        }
+        else {
+            setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange);
+        }
+    });
+
+    push(ecModel, snapshot);
+
+    this._dispatchZoomAction(snapshot);
+
+    function setBatch(dimName, coordSys, minMax) {
+        var axis = coordSys.getAxis(dimName);
+        var axisModel = axis.model;
+        var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);
+
+        // Restrict range.
+        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();
+        if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {
+            minMax = sliderMove(
+                0, minMax.slice(), axis.scale.getExtent(), 0,
+                minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan
+            );
+        }
+
+        dataZoomModel && (snapshot[dataZoomModel.id] = {
+            dataZoomId: dataZoomModel.id,
+            startValue: minMax[0],
+            endValue: minMax[1]
+        });
+    }
+
+    function findDataZoom(dimName, axisModel, ecModel) {
+        var found;
+        ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) {
+            var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);
+            has && (found = dzModel);
+        });
+        return found;
+    }
+};
+
+/**
+ * @private
+ */
+proto$6._dispatchZoomAction = function (snapshot) {
+    var batch = [];
+
+    // Convert from hash map to array.
+    each$28(snapshot, function (batchItem, dataZoomId) {
+        batch.push(clone(batchItem));
+    });
+
+    batch.length && this.api.dispatchAction({
+        type: 'dataZoom',
+        from: this.uid,
+        batch: batch
+    });
+};
+
+function retrieveAxisSetting(option) {
+    var setting = {};
+    // Compatible with previous setting: null => all axis, false => no axis.
+    each$1(['xAxisIndex', 'yAxisIndex'], function (name) {
+        setting[name] = option[name];
+        setting[name] == null && (setting[name] = 'all');
+        (setting[name] === false || setting[name] === 'none') && (setting[name] = []);
+    });
+    return setting;
+}
+
+function updateBackBtnStatus(featureModel, ecModel) {
+    featureModel.setIconStatus(
+        'back',
+        count(ecModel) > 1 ? 'emphasis' : 'normal'
+    );
+}
+
+function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {
+    var zoomActive = view._isZoomActive;
+
+    if (payload && payload.type === 'takeGlobalCursor') {
+        zoomActive = payload.key === 'dataZoomSelect'
+            ? payload.dataZoomSelectActive : false;
+    }
+
+    view._isZoomActive = zoomActive;
+
+    featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');
+
+    var brushTargetManager = new BrushTargetManager(
+        retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']}
+    );
+
+    view._brushController
+        .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) {
+            return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared)
+                ? 'lineX'
+                : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared)
+                ? 'lineY'
+                : 'rect';
+        }))
+        .enableBrush(
+            zoomActive
+            ? {
+                brushType: 'auto',
+                brushStyle: {
+                    // FIXME user customized?
+                    lineWidth: 0,
+                    fill: 'rgba(0,0,0,0.2)'
+                }
+            }
+            : false
+        );
+}
+
+
+register$1('dataZoom', DataZoom);
+
+
+// Create special dataZoom option for select
+// FIXME consider the case of merge option, where axes options are not exists.
+registerPreprocessor(function (option) {
+    if (!option) {
+        return;
+    }
+
+    var dataZoomOpts = option.dataZoom || (option.dataZoom = []);
+    if (!isArray(dataZoomOpts)) {
+        option.dataZoom = dataZoomOpts = [dataZoomOpts];
+    }
+
+    var toolboxOpt = option.toolbox;
+    if (toolboxOpt) {
+        // Assume there is only one toolbox
+        if (isArray(toolboxOpt)) {
+            toolboxOpt = toolboxOpt[0];
+        }
+
+        if (toolboxOpt && toolboxOpt.feature) {
+            var dataZoomOpt = toolboxOpt.feature.dataZoom;
+            // FIXME: If add dataZoom when setOption in merge mode,
+            // no axis info to be added. See `test/dataZoom-extreme.html`
+            addForAxis('xAxis', dataZoomOpt);
+            addForAxis('yAxis', dataZoomOpt);
+        }
+    }
+
+    function addForAxis(axisName, dataZoomOpt) {
+        if (!dataZoomOpt) {
+            return;
+        }
+
+        // Try not to modify model, because it is not merged yet.
+        var axisIndicesName = axisName + 'Index';
+        var givenAxisIndices = dataZoomOpt[axisIndicesName];
+        if (givenAxisIndices != null
+            && givenAxisIndices != 'all'
+            && !isArray(givenAxisIndices)
+        ) {
+            givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices];
+        }
+
+        forEachComponent(axisName, function (axisOpt, axisIndex) {
+            if (givenAxisIndices != null
+                && givenAxisIndices != 'all'
+                && indexOf(givenAxisIndices, axisIndex) === -1
+            ) {
+                return;
+            }
+            var newOpt = {
+                type: 'select',
+                $fromToolbox: true,
+                // Id for merge mapping.
+                id: DATA_ZOOM_ID_BASE + axisName + axisIndex
+            };
+            // FIXME
+            // Only support one axis now.
+            newOpt[axisIndicesName] = axisIndex;
+            dataZoomOpts.push(newOpt);
+        });
+    }
+
+    function forEachComponent(mainType, cb) {
+        var opts = option[mainType];
+        if (!isArray(opts)) {
+            opts = opts ? [opts] : [];
+        }
+        each$28(opts, cb);
+    }
+});
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var restoreLang = lang.toolbox.restore;
+
+function Restore(model) {
+    this.model = model;
+}
+
+Restore.defaultOption = {
+    show: true,
+    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: restoreLang.title
+};
+
+var proto$7 = Restore.prototype;
+
+proto$7.onclick = function (ecModel, api, type) {
+    clear$1(ecModel);
+
+    api.dispatchAction({
+        type: 'restore',
+        from: this.uid
+    });
+};
+
+register$1('restore', Restore);
+
+registerAction(
+    {type: 'restore', event: 'restore', update: 'prepareAndUpdate'},
+    function (payload, ecModel) {
+        ecModel.resetOption('recreate');
+    }
+);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+var urn = 'urn:schemas-microsoft-com:vml';
+var win = typeof window === 'undefined' ? null : window;
+
+var vmlInited = false;
+
+var doc = win && win.document;
+
+function createNode(tagName) {
+    return doCreateNode(tagName);
+}
+
+// Avoid assign to an exported variable, for transforming to cjs.
+var doCreateNode;
+
+if (doc && !env$1.canvasSupported) {
+    try {
+        !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);
+        doCreateNode = function (tagName) {
+            return doc.createElement('<zrvml:' + tagName + ' class="zrvml">');
+        };
+    }
+    catch (e) {
+        doCreateNode = function (tagName) {
+            return doc.createElement('<' + tagName + ' xmlns="' + urn + '" class="zrvml">');
+        };
+    }
+}
+
+// From raphael
+function initVML() {
+    if (vmlInited || !doc) {
+        return;
+    }
+    vmlInited = true;
+
+    var styleSheets = doc.styleSheets;
+    if (styleSheets.length < 31) {
+        doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');
+    }
+    else {
+        // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx
+        styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');
+    }
+}
+
+// http://www.w3.org/TR/NOTE-VML
+// TODO Use proxy like svg instead of overwrite brush methods
+
+var CMD$3 = PathProxy.CMD;
+var round$3 = Math.round;
+var sqrt = Math.sqrt;
+var abs$1 = Math.abs;
+var cos = Math.cos;
+var sin = Math.sin;
+var mathMax$8 = Math.max;
+
+if (!env$1.canvasSupported) {
+
+    var comma = ',';
+    var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';
+
+    var Z = 21600;
+    var Z2 = Z / 2;
+
+    var ZLEVEL_BASE = 100000;
+    var Z_BASE$1 = 1000;
+
+    var initRootElStyle = function (el) {
+        el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';
+        el.coordsize = Z + ','  + Z;
+        el.coordorigin = '0,0';
+    };
+
+    var encodeHtmlAttribute = function (s) {
+        return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
+    };
+
+    var rgb2Str = function (r, g, b) {
+        return 'rgb(' + [r, g, b].join(',') + ')';
+    };
+
+    var append = function (parent, child) {
+        if (child && parent && child.parentNode !== parent) {
+            parent.appendChild(child);
+        }
+    };
+
+    var remove = function (parent, child) {
+        if (child && parent && child.parentNode === parent) {
+            parent.removeChild(child);
+        }
+    };
+
+    var getZIndex = function (zlevel, z, z2) {
+        // z 的取值范围为 [0, 1000]
+        return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE$1 + z2;
+    };
+
+    var parsePercent$3 = function (value, maxValue) {
+        if (typeof value === 'string') {
+            if (value.lastIndexOf('%') >= 0) {
+                return parseFloat(value) / 100 * maxValue;
+            }
+            return parseFloat(value);
+        }
+        return value;
+    };
+
+    /***************************************************
+     * PATH
+     **************************************************/
+
+    var setColorAndOpacity = function (el, color, opacity) {
+        var colorArr = parse(color);
+        opacity = +opacity;
+        if (isNaN(opacity)) {
+            opacity = 1;
+        }
+        if (colorArr) {
+            el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);
+            el.opacity = opacity * colorArr[3];
+        }
+    };
+
+    var getColorAndAlpha = function (color) {
+        var colorArr = parse(color);
+        return [
+            rgb2Str(colorArr[0], colorArr[1], colorArr[2]),
+            colorArr[3]
+        ];
+    };
+
+    var updateFillNode = function (el, style, zrEl) {
+        // TODO pattern
+        var fill = style.fill;
+        if (fill != null) {
+            // Modified from excanvas
+            if (fill instanceof Gradient) {
+                var gradientType;
+                var angle = 0;
+                var focus = [0, 0];
+                // additional offset
+                var shift = 0;
+                // scale factor for offset
+                var expansion = 1;
+                var rect = zrEl.getBoundingRect();
+                var rectWidth = rect.width;
+                var rectHeight = rect.height;
+                if (fill.type === 'linear') {
+                    gradientType = 'gradient';
+                    var transform = zrEl.transform;
+                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];
+                    var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];
+                    if (transform) {
+                        applyTransform(p0, p0, transform);
+                        applyTransform(p1, p1, transform);
+                    }
+                    var dx = p1[0] - p0[0];
+                    var dy = p1[1] - p0[1];
+                    angle = Math.atan2(dx, dy) * 180 / Math.PI;
+                    // The angle should be a non-negative number.
+                    if (angle < 0) {
+                        angle += 360;
+                    }
+
+                    // Very small angles produce an unexpected result because they are
+                    // converted to a scientific notation string.
+                    if (angle < 1e-6) {
+                        angle = 0;
+                    }
+                }
+                else {
+                    gradientType = 'gradientradial';
+                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];
+                    var transform = zrEl.transform;
+                    var scale$$1 = zrEl.scale;
+                    var width = rectWidth;
+                    var height = rectHeight;
+                    focus = [
+                        // Percent in bounding rect
+                        (p0[0] - rect.x) / width,
+                        (p0[1] - rect.y) / height
+                    ];
+                    if (transform) {
+                        applyTransform(p0, p0, transform);
+                    }
+
+                    width /= scale$$1[0] * Z;
+                    height /= scale$$1[1] * Z;
+                    var dimension = mathMax$8(width, height);
+                    shift = 2 * 0 / dimension;
+                    expansion = 2 * fill.r / dimension - shift;
+                }
+
+                // We need to sort the color stops in ascending order by offset,
+                // otherwise IE won't interpret it correctly.
+                var stops = fill.colorStops.slice();
+                stops.sort(function(cs1, cs2) {
+                    return cs1.offset - cs2.offset;
+                });
+
+                var length$$1 = stops.length;
+                // Color and alpha list of first and last stop
+                var colorAndAlphaList = [];
+                var colors = [];
+                for (var i = 0; i < length$$1; i++) {
+                    var stop = stops[i];
+                    var colorAndAlpha = getColorAndAlpha(stop.color);
+                    colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);
+                    if (i === 0 || i === length$$1 - 1) {
+                        colorAndAlphaList.push(colorAndAlpha);
+                    }
+                }
+
+                if (length$$1 >= 2) {
+                    var color1 = colorAndAlphaList[0][0];
+                    var color2 = colorAndAlphaList[1][0];
+                    var opacity1 = colorAndAlphaList[0][1] * style.opacity;
+                    var opacity2 = colorAndAlphaList[1][1] * style.opacity;
+
+                    el.type = gradientType;
+                    el.method = 'none';
+                    el.focus = '100%';
+                    el.angle = angle;
+                    el.color = color1;
+                    el.color2 = color2;
+                    el.colors = colors.join(',');
+                    // When colors attribute is used, the meanings of opacity and o:opacity2
+                    // are reversed.
+                    el.opacity = opacity2;
+                    // FIXME g_o_:opacity ?
+                    el.opacity2 = opacity1;
+                }
+                if (gradientType === 'radial') {
+                    el.focusposition = focus.join(',');
+                }
+            }
+            else {
+                // FIXME Change from Gradient fill to color fill
+                setColorAndOpacity(el, fill, style.opacity);
+            }
+        }
+    };
+
+    var updateStrokeNode = function (el, style) {
+        // if (style.lineJoin != null) {
+        //     el.joinstyle = style.lineJoin;
+        // }
+        // if (style.miterLimit != null) {
+        //     el.miterlimit = style.miterLimit * Z;
+        // }
+        // if (style.lineCap != null) {
+        //     el.endcap = style.lineCap;
+        // }
+        if (style.lineDash != null) {
+            el.dashstyle = style.lineDash.join(' ');
+        }
+        if (style.stroke != null && !(style.stroke instanceof Gradient)) {
+            setColorAndOpacity(el, style.stroke, style.opacity);
+        }
+    };
+
+    var updateFillAndStroke = function (vmlEl, type, style, zrEl) {
+        var isFill = type == 'fill';
+        var el = vmlEl.getElementsByTagName(type)[0];
+        // Stroke must have lineWidth
+        if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) {
+            vmlEl[isFill ? 'filled' : 'stroked'] = 'true';
+            // FIXME Remove before updating, or set `colors` will throw error
+            if (style[type] instanceof Gradient) {
+                remove(vmlEl, el);
+            }
+            if (!el) {
+                el = createNode(type);
+            }
+
+            isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);
+            append(vmlEl, el);
+        }
+        else {
+            vmlEl[isFill ? 'filled' : 'stroked'] = 'false';
+            remove(vmlEl, el);
+        }
+    };
+
+    var points$3 = [[], [], []];
+    var pathDataToString = function (path, m) {
+        var M = CMD$3.M;
+        var C = CMD$3.C;
+        var L = CMD$3.L;
+        var A = CMD$3.A;
+        var Q = CMD$3.Q;
+
+        var str = [];
+        var nPoint;
+        var cmdStr;
+        var cmd;
+        var i;
+        var xi;
+        var yi;
+        var data = path.data;
+        var dataLength = path.len();
+        for (i = 0; i < dataLength;) {
+            cmd = data[i++];
+            cmdStr = '';
+            nPoint = 0;
+            switch (cmd) {
+                case M:
+                    cmdStr = ' m ';
+                    nPoint = 1;
+                    xi = data[i++];
+                    yi = data[i++];
+                    points$3[0][0] = xi;
+                    points$3[0][1] = yi;
+                    break;
+                case L:
+                    cmdStr = ' l ';
+                    nPoint = 1;
+                    xi = data[i++];
+                    yi = data[i++];
+                    points$3[0][0] = xi;
+                    points$3[0][1] = yi;
+                    break;
+                case Q:
+                case C:
+                    cmdStr = ' c ';
+                    nPoint = 3;
+                    var x1 = data[i++];
+                    var y1 = data[i++];
+                    var x2 = data[i++];
+                    var y2 = data[i++];
+                    var x3;
+                    var y3;
+                    if (cmd === Q) {
+                        // Convert quadratic to cubic using degree elevation
+                        x3 = x2;
+                        y3 = y2;
+                        x2 = (x2 + 2 * x1) / 3;
+                        y2 = (y2 + 2 * y1) / 3;
+                        x1 = (xi + 2 * x1) / 3;
+                        y1 = (yi + 2 * y1) / 3;
+                    }
+                    else {
+                        x3 = data[i++];
+                        y3 = data[i++];
+                    }
+                    points$3[0][0] = x1;
+                    points$3[0][1] = y1;
+                    points$3[1][0] = x2;
+                    points$3[1][1] = y2;
+                    points$3[2][0] = x3;
+                    points$3[2][1] = y3;
+
+                    xi = x3;
+                    yi = y3;
+                    break;
+                case A:
+                    var x = 0;
+                    var y = 0;
+                    var sx = 1;
+                    var sy = 1;
+                    var angle = 0;
+                    if (m) {
+                        // Extract SRT from matrix
+                        x = m[4];
+                        y = m[5];
+                        sx = sqrt(m[0] * m[0] + m[1] * m[1]);
+                        sy = sqrt(m[2] * m[2] + m[3] * m[3]);
+                        angle = Math.atan2(-m[1] / sy, m[0] / sx);
+                    }
+
+                    var cx = data[i++];
+                    var cy = data[i++];
+                    var rx = data[i++];
+                    var ry = data[i++];
+                    var startAngle = data[i++] + angle;
+                    var endAngle = data[i++] + startAngle + angle;
+                    // FIXME
+                    // var psi = data[i++];
+                    i++;
+                    var clockwise = data[i++];
+
+                    var x0 = cx + cos(startAngle) * rx;
+                    var y0 = cy + sin(startAngle) * ry;
+
+                    var x1 = cx + cos(endAngle) * rx;
+                    var y1 = cy + sin(endAngle) * ry;
+
+                    var type = clockwise ? ' wa ' : ' at ';
+                    if (Math.abs(x0 - x1) < 1e-4) {
+                        // IE won't render arches drawn counter clockwise if x0 == x1.
+                        if (Math.abs(endAngle - startAngle) > 1e-2) {
+                            // Offset x0 by 1/80 of a pixel. Use something
+                            // that can be represented in binary
+                            if (clockwise) {
+                                x0 += 270 / Z;
+                            }
+                        }
+                        else {
+                            // Avoid case draw full circle
+                            if (Math.abs(y0 - cy) < 1e-4) {
+                                if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) {
+                                    y1 -= 270 / Z;
+                                }
+                                else {
+                                    y1 += 270 / Z;
+                                }
+                            }
+                            else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) {
+                                x1 += 270 / Z;
+                            }
+                            else {
+                                x1 -= 270 / Z;
+                            }
+                        }
+                    }
+                    str.push(
+                        type,
+                        round$3(((cx - rx) * sx + x) * Z - Z2), comma,
+                        round$3(((cy - ry) * sy + y) * Z - Z2), comma,
+                        round$3(((cx + rx) * sx + x) * Z - Z2), comma,
+                        round$3(((cy + ry) * sy + y) * Z - Z2), comma,
+                        round$3((x0 * sx + x) * Z - Z2), comma,
+                        round$3((y0 * sy + y) * Z - Z2), comma,
+                        round$3((x1 * sx + x) * Z - Z2), comma,
+                        round$3((y1 * sy + y) * Z - Z2)
+                    );
+
+                    xi = x1;
+                    yi = y1;
+                    break;
+                case CMD$3.R:
+                    var p0 = points$3[0];
+                    var p1 = points$3[1];
+                    // x0, y0
+                    p0[0] = data[i++];
+                    p0[1] = data[i++];
+                    // x1, y1
+                    p1[0] = p0[0] + data[i++];
+                    p1[1] = p0[1] + data[i++];
+
+                    if (m) {
+                        applyTransform(p0, p0, m);
+                        applyTransform(p1, p1, m);
+                    }
+
+                    p0[0] = round$3(p0[0] * Z - Z2);
+                    p1[0] = round$3(p1[0] * Z - Z2);
+                    p0[1] = round$3(p0[1] * Z - Z2);
+                    p1[1] = round$3(p1[1] * Z - Z2);
+                    str.push(
+                        // x0, y0
+                        ' m ', p0[0], comma, p0[1],
+                        // x1, y0
+                        ' l ', p1[0], comma, p0[1],
+                        // x1, y1
+                        ' l ', p1[0], comma, p1[1],
+                        // x0, y1
+                        ' l ', p0[0], comma, p1[1]
+                    );
+                    break;
+                case CMD$3.Z:
+                    // FIXME Update xi, yi
+                    str.push(' x ');
+            }
+
+            if (nPoint > 0) {
+                str.push(cmdStr);
+                for (var k = 0; k < nPoint; k++) {
+                    var p = points$3[k];
+
+                    m && applyTransform(p, p, m);
+                    // 不 round 会非常慢
+                    str.push(
+                        round$3(p[0] * Z - Z2), comma, round$3(p[1] * Z - Z2),
+                        k < nPoint - 1 ? comma : ''
+                    );
+                }
+            }
+        }
+
+        return str.join('');
+    };
+
+    // Rewrite the original path method
+    Path.prototype.brushVML = function (vmlRoot) {
+        var style = this.style;
+
+        var vmlEl = this._vmlEl;
+        if (!vmlEl) {
+            vmlEl = createNode('shape');
+            initRootElStyle(vmlEl);
+
+            this._vmlEl = vmlEl;
+        }
+
+        updateFillAndStroke(vmlEl, 'fill', style, this);
+        updateFillAndStroke(vmlEl, 'stroke', style, this);
+
+        var m = this.transform;
+        var needTransform = m != null;
+        var strokeEl = vmlEl.getElementsByTagName('stroke')[0];
+        if (strokeEl) {
+            var lineWidth = style.lineWidth;
+            // Get the line scale.
+            // Determinant of this.m_ means how much the area is enlarged by the
+            // transformation. So its square root can be used as a scale factor
+            // for width.
+            if (needTransform && !style.strokeNoScale) {
+                var det = m[0] * m[3] - m[1] * m[2];
+                lineWidth *= sqrt(abs$1(det));
+            }
+            strokeEl.weight = lineWidth + 'px';
+        }
+
+        var path = this.path || (this.path = new PathProxy());
+        if (this.__dirtyPath) {
+            path.beginPath();
+            this.buildPath(path, this.shape);
+            path.toStatic();
+            this.__dirtyPath = false;
+        }
+
+        vmlEl.path = pathDataToString(path, this.transform);
+
+        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);
+
+        // Append to root
+        append(vmlRoot, vmlEl);
+
+        // Text
+        if (style.text != null) {
+            this.drawRectText(vmlRoot, this.getBoundingRect());
+        }
+        else {
+            this.removeRectText(vmlRoot);
+        }
+    };
+
+    Path.prototype.onRemove = function (vmlRoot) {
+        remove(vmlRoot, this._vmlEl);
+        this.removeRectText(vmlRoot);
+    };
+
+    Path.prototype.onAdd = function (vmlRoot) {
+        append(vmlRoot, this._vmlEl);
+        this.appendRectText(vmlRoot);
+    };
+
+    /***************************************************
+     * IMAGE
+     **************************************************/
+    var isImage = function (img) {
+        // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错
+        return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG';
+        // return img instanceof Image;
+    };
+
+    // Rewrite the original path method
+    ZImage.prototype.brushVML = function (vmlRoot) {
+        var style = this.style;
+        var image = style.image;
+
+        // Image original width, height
+        var ow;
+        var oh;
+
+        if (isImage(image)) {
+            var src = image.src;
+            if (src === this._imageSrc) {
+                ow = this._imageWidth;
+                oh = this._imageHeight;
+            }
+            else {
+                var imageRuntimeStyle = image.runtimeStyle;
+                var oldRuntimeWidth = imageRuntimeStyle.width;
+                var oldRuntimeHeight = imageRuntimeStyle.height;
+                imageRuntimeStyle.width = 'auto';
+                imageRuntimeStyle.height = 'auto';
+
+                // get the original size
+                ow = image.width;
+                oh = image.height;
+
+                // and remove overides
+                imageRuntimeStyle.width = oldRuntimeWidth;
+                imageRuntimeStyle.height = oldRuntimeHeight;
+
+                // Caching image original width, height and src
+                this._imageSrc = src;
+                this._imageWidth = ow;
+                this._imageHeight = oh;
+            }
+            image = src;
+        }
+        else {
+            if (image === this._imageSrc) {
+                ow = this._imageWidth;
+                oh = this._imageHeight;
+            }
+        }
+        if (!image) {
+            return;
+        }
+
+        var x = style.x || 0;
+        var y = style.y || 0;
+
+        var dw = style.width;
+        var dh = style.height;
+
+        var sw = style.sWidth;
+        var sh = style.sHeight;
+        var sx = style.sx || 0;
+        var sy = style.sy || 0;
+
+        var hasCrop = sw && sh;
+
+        var vmlEl = this._vmlEl;
+        if (!vmlEl) {
+            // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。
+            // vmlEl = vmlCore.createNode('group');
+            vmlEl = doc.createElement('div');
+            initRootElStyle(vmlEl);
+
+            this._vmlEl = vmlEl;
+        }
+
+        var vmlElStyle = vmlEl.style;
+        var hasRotation = false;
+        var m;
+        var scaleX = 1;
+        var scaleY = 1;
+        if (this.transform) {
+            m = this.transform;
+            scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);
+            scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);
+
+            hasRotation = m[1] || m[2];
+        }
+        if (hasRotation) {
+            // If filters are necessary (rotation exists), create them
+            // filters are bog-slow, so only create them if abbsolutely necessary
+            // The following check doesn't account for skews (which don't exist
+            // in the canvas spec (yet) anyway.
+            // From excanvas
+            var p0 = [x, y];
+            var p1 = [x + dw, y];
+            var p2 = [x, y + dh];
+            var p3 = [x + dw, y + dh];
+            applyTransform(p0, p0, m);
+            applyTransform(p1, p1, m);
+            applyTransform(p2, p2, m);
+            applyTransform(p3, p3, m);
+
+            var maxX = mathMax$8(p0[0], p1[0], p2[0], p3[0]);
+            var maxY = mathMax$8(p0[1], p1[1], p2[1], p3[1]);
+
+            var transformFilter = [];
+            transformFilter.push('M11=', m[0] / scaleX, comma,
+                        'M12=', m[2] / scaleY, comma,
+                        'M21=', m[1] / scaleX, comma,
+                        'M22=', m[3] / scaleY, comma,
+                        'Dx=', round$3(x * scaleX + m[4]), comma,
+                        'Dy=', round$3(y * scaleY + m[5]));
+
+            vmlElStyle.padding = '0 ' + round$3(maxX) + 'px ' + round$3(maxY) + 'px 0';
+            // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用
+            vmlElStyle.filter = imageTransformPrefix + '.Matrix('
+                + transformFilter.join('') + ', SizingMethod=clip)';
+
+        }
+        else {
+            if (m) {
+                x = x * scaleX + m[4];
+                y = y * scaleY + m[5];
+            }
+            vmlElStyle.filter = '';
+            vmlElStyle.left = round$3(x) + 'px';
+            vmlElStyle.top = round$3(y) + 'px';
+        }
+
+        var imageEl = this._imageEl;
+        var cropEl = this._cropEl;
+
+        if (!imageEl) {
+            imageEl = doc.createElement('div');
+            this._imageEl = imageEl;
+        }
+        var imageELStyle = imageEl.style;
+        if (hasCrop) {
+            // Needs know image original width and height
+            if (! (ow && oh)) {
+                var tmpImage = new Image();
+                var self = this;
+                tmpImage.onload = function () {
+                    tmpImage.onload = null;
+                    ow = tmpImage.width;
+                    oh = tmpImage.height;
+                    // Adjust image width and height to fit the ratio destinationSize / sourceSize
+                    imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px';
+                    imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px';
+
+                    // Caching image original width, height and src
+                    self._imageWidth = ow;
+                    self._imageHeight = oh;
+                    self._imageSrc = image;
+                };
+                tmpImage.src = image;
+            }
+            else {
+                imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px';
+                imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px';
+            }
+
+            if (! cropEl) {
+                cropEl = doc.createElement('div');
+                cropEl.style.overflow = 'hidden';
+                this._cropEl = cropEl;
+            }
+            var cropElStyle = cropEl.style;
+            cropElStyle.width = round$3((dw + sx * dw / sw) * scaleX);
+            cropElStyle.height = round$3((dh + sy * dh / sh) * scaleY);
+            cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx='
+                    + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')';
+
+            if (! cropEl.parentNode) {
+                vmlEl.appendChild(cropEl);
+            }
+            if (imageEl.parentNode != cropEl) {
+                cropEl.appendChild(imageEl);
+            }
+        }
+        else {
+            imageELStyle.width = round$3(scaleX * dw) + 'px';
+            imageELStyle.height = round$3(scaleY * dh) + 'px';
+
+            vmlEl.appendChild(imageEl);
+
+            if (cropEl && cropEl.parentNode) {
+                vmlEl.removeChild(cropEl);
+                this._cropEl = null;
+            }
+        }
+
+        var filterStr = '';
+        var alpha = style.opacity;
+        if (alpha < 1) {
+            filterStr += '.Alpha(opacity=' + round$3(alpha * 100) + ') ';
+        }
+        filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';
+
+        imageELStyle.filter = filterStr;
+
+        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);
+
+        // Append to root
+        append(vmlRoot, vmlEl);
+
+        // Text
+        if (style.text != null) {
+            this.drawRectText(vmlRoot, this.getBoundingRect());
+        }
+    };
+
+    ZImage.prototype.onRemove = function (vmlRoot) {
+        remove(vmlRoot, this._vmlEl);
+
+        this._vmlEl = null;
+        this._cropEl = null;
+        this._imageEl = null;
+
+        this.removeRectText(vmlRoot);
+    };
+
+    ZImage.prototype.onAdd = function (vmlRoot) {
+        append(vmlRoot, this._vmlEl);
+        this.appendRectText(vmlRoot);
+    };
+
+
+    /***************************************************
+     * TEXT
+     **************************************************/
+
+    var DEFAULT_STYLE_NORMAL = 'normal';
+
+    var fontStyleCache = {};
+    var fontStyleCacheCount = 0;
+    var MAX_FONT_CACHE_SIZE = 100;
+    var fontEl = document.createElement('div');
+
+    var getFontStyle = function (fontString) {
+        var fontStyle = fontStyleCache[fontString];
+        if (!fontStyle) {
+            // Clear cache
+            if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {
+                fontStyleCacheCount = 0;
+                fontStyleCache = {};
+            }
+
+            var style = fontEl.style;
+            var fontFamily;
+            try {
+                style.font = fontString;
+                fontFamily = style.fontFamily.split(',')[0];
+            }
+            catch (e) {
+            }
+
+            fontStyle = {
+                style: style.fontStyle || DEFAULT_STYLE_NORMAL,
+                variant: style.fontVariant || DEFAULT_STYLE_NORMAL,
+                weight: style.fontWeight || DEFAULT_STYLE_NORMAL,
+                size: parseFloat(style.fontSize || 12) | 0,
+                family: fontFamily || 'Microsoft YaHei'
+            };
+
+            fontStyleCache[fontString] = fontStyle;
+            fontStyleCacheCount++;
+        }
+        return fontStyle;
+    };
+
+    var textMeasureEl;
+    // Overwrite measure text method
+    $override$1('measureText', function (text, textFont) {
+        var doc$$1 = doc;
+        if (!textMeasureEl) {
+            textMeasureEl = doc$$1.createElement('div');
+            textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;'
+                + 'padding:0;margin:0;border:none;white-space:pre;';
+            doc.body.appendChild(textMeasureEl);
+        }
+
+        try {
+            textMeasureEl.style.font = textFont;
+        } catch (ex) {
+            // Ignore failures to set to invalid font.
+        }
+        textMeasureEl.innerHTML = '';
+        // Don't use innerHTML or innerText because they allow markup/whitespace.
+        textMeasureEl.appendChild(doc$$1.createTextNode(text));
+        return {
+            width: textMeasureEl.offsetWidth
+        };
+    });
+
+    var tmpRect$2 = new BoundingRect();
+
+    var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {
+
+        var style = this.style;
+
+        // Optimize, avoid normalize every time.
+        this.__dirty && normalizeTextStyle(style, true);
+
+        var text = style.text;
+        // Convert to string
+        text != null && (text += '');
+        if (!text) {
+            return;
+        }
+
+        // Convert rich text to plain text. Rich text is not supported in
+        // IE8-, but tags in rich text template will be removed.
+        if (style.rich) {
+            var contentBlock = parseRichText(text, style);
+            text = [];
+            for (var i = 0; i < contentBlock.lines.length; i++) {
+                var tokens = contentBlock.lines[i].tokens;
+                var textLine = [];
+                for (var j = 0; j < tokens.length; j++) {
+                    textLine.push(tokens[j].text);
+                }
+                text.push(textLine.join(''));
+            }
+            text = text.join('\n');
+        }
+
+        var x;
+        var y;
+        var align = style.textAlign;
+        var verticalAlign = style.textVerticalAlign;
+
+        var fontStyle = getFontStyle(style.font);
+        // FIXME encodeHtmlAttribute ?
+        var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' '
+            + fontStyle.size + 'px "' + fontStyle.family + '"';
+
+        textRect = textRect || getBoundingRect(text, font, align, verticalAlign);
+
+        // Transform rect to view space
+        var m = this.transform;
+        // Ignore transform for text in other element
+        if (m && !fromTextEl) {
+            tmpRect$2.copy(rect);
+            tmpRect$2.applyTransform(m);
+            rect = tmpRect$2;
+        }
+
+        if (!fromTextEl) {
+            var textPosition = style.textPosition;
+            var distance$$1 = style.textDistance;
+            // Text position represented by coord
+            if (textPosition instanceof Array) {
+                x = rect.x + parsePercent$3(textPosition[0], rect.width);
+                y = rect.y + parsePercent$3(textPosition[1], rect.height);
+
+                align = align || 'left';
+            }
+            else {
+                var res = adjustTextPositionOnRect(
+                    textPosition, rect, distance$$1
+                );
+                x = res.x;
+                y = res.y;
+
+                // Default align and baseline when has textPosition
+                align = align || res.textAlign;
+                verticalAlign = verticalAlign || res.textVerticalAlign;
+            }
+        }
+        else {
+            x = rect.x;
+            y = rect.y;
+        }
+
+        x = adjustTextX(x, textRect.width, align);
+        y = adjustTextY(y, textRect.height, verticalAlign);
+
+        // Force baseline 'middle'
+        y += textRect.height / 2;
+
+        // var fontSize = fontStyle.size;
+        // 1.75 is an arbitrary number, as there is no info about the text baseline
+        // switch (baseline) {
+            // case 'hanging':
+            // case 'top':
+            //     y += fontSize / 1.75;
+            //     break;
+        //     case 'middle':
+        //         break;
+        //     default:
+        //     // case null:
+        //     // case 'alphabetic':
+        //     // case 'ideographic':
+        //     // case 'bottom':
+        //         y -= fontSize / 2.25;
+        //         break;
+        // }
+
+        // switch (align) {
+        //     case 'left':
+        //         break;
+        //     case 'center':
+        //         x -= textRect.width / 2;
+        //         break;
+        //     case 'right':
+        //         x -= textRect.width;
+        //         break;
+            // case 'end':
+                // align = elementStyle.direction == 'ltr' ? 'right' : 'left';
+                // break;
+            // case 'start':
+                // align = elementStyle.direction == 'rtl' ? 'right' : 'left';
+                // break;
+            // default:
+            //     align = 'left';
+        // }
+
+        var createNode$$1 = createNode;
+
+        var textVmlEl = this._textVmlEl;
+        var pathEl;
+        var textPathEl;
+        var skewEl;
+        if (!textVmlEl) {
+            textVmlEl = createNode$$1('line');
+            pathEl = createNode$$1('path');
+            textPathEl = createNode$$1('textpath');
+            skewEl = createNode$$1('skew');
+
+            // FIXME Why here is not cammel case
+            // Align 'center' seems wrong
+            textPathEl.style['v-text-align'] = 'left';
+
+            initRootElStyle(textVmlEl);
+
+            pathEl.textpathok = true;
+            textPathEl.on = true;
+
+            textVmlEl.from = '0 0';
+            textVmlEl.to = '1000 0.05';
+
+            append(textVmlEl, skewEl);
+            append(textVmlEl, pathEl);
+            append(textVmlEl, textPathEl);
+
+            this._textVmlEl = textVmlEl;
+        }
+        else {
+            // 这里是在前面 appendChild 保证顺序的前提下
+            skewEl = textVmlEl.firstChild;
+            pathEl = skewEl.nextSibling;
+            textPathEl = pathEl.nextSibling;
+        }
+
+        var coords = [x, y];
+        var textVmlElStyle = textVmlEl.style;
+        // Ignore transform for text in other element
+        if (m && fromTextEl) {
+            applyTransform(coords, coords, m);
+
+            skewEl.on = true;
+
+            skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma +
+            m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0';
+
+            // Text position
+            skewEl.offset = (round$3(coords[0]) || 0) + ',' + (round$3(coords[1]) || 0);
+            // Left top point as origin
+            skewEl.origin = '0 0';
+
+            textVmlElStyle.left = '0px';
+            textVmlElStyle.top = '0px';
+        }
+        else {
+            skewEl.on = false;
+            textVmlElStyle.left = round$3(x) + 'px';
+            textVmlElStyle.top = round$3(y) + 'px';
+        }
+
+        textPathEl.string = encodeHtmlAttribute(text);
+        // TODO
+        try {
+            textPathEl.style.font = font;
+        }
+        // Error font format
+        catch (e) {}
+
+        updateFillAndStroke(textVmlEl, 'fill', {
+            fill: style.textFill,
+            opacity: style.opacity
+        }, this);
+        updateFillAndStroke(textVmlEl, 'stroke', {
+            stroke: style.textStroke,
+            opacity: style.opacity,
+            lineDash: style.lineDash
+        }, this);
+
+        textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);
+
+        // Attached to root
+        append(vmlRoot, textVmlEl);
+    };
+
+    var removeRectText = function (vmlRoot) {
+        remove(vmlRoot, this._textVmlEl);
+        this._textVmlEl = null;
+    };
+
+    var appendRectText = function (vmlRoot) {
+        append(vmlRoot, this._textVmlEl);
+    };
+
+    var list = [RectText, Displayable, ZImage, Path, Text];
+
+    // In case Displayable has been mixed in RectText
+    for (var i$3 = 0; i$3 < list.length; i$3++) {
+        var proto$8 = list[i$3].prototype;
+        proto$8.drawRectText = drawRectText;
+        proto$8.removeRectText = removeRectText;
+        proto$8.appendRectText = appendRectText;
+    }
+
+    Text.prototype.brushVML = function (vmlRoot) {
+        var style = this.style;
+        if (style.text != null) {
+            this.drawRectText(vmlRoot, {
+                x: style.x || 0, y: style.y || 0,
+                width: 0, height: 0
+            }, this.getBoundingRect(), true);
+        }
+        else {
+            this.removeRectText(vmlRoot);
+        }
+    };
+
+    Text.prototype.onRemove = function (vmlRoot) {
+        this.removeRectText(vmlRoot);
+    };
+
+    Text.prototype.onAdd = function (vmlRoot) {
+        this.appendRectText(vmlRoot);
+    };
+}
+
+/**
+ * VML Painter.
+ *
+ * @module zrender/vml/Painter
+ */
+
+function parseInt10$1(val) {
+    return parseInt(val, 10);
+}
+
+/**
+ * @alias module:zrender/vml/Painter
+ */
+function VMLPainter(root, storage) {
+
+    initVML();
+
+    this.root = root;
+
+    this.storage = storage;
+
+    var vmlViewport = document.createElement('div');
+
+    var vmlRoot = document.createElement('div');
+
+    vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';
+
+    vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';
+
+    root.appendChild(vmlViewport);
+
+    this._vmlRoot = vmlRoot;
+    this._vmlViewport = vmlViewport;
+
+    this.resize();
+
+    // Modify storage
+    var oldDelFromStorage = storage.delFromStorage;
+    var oldAddToStorage = storage.addToStorage;
+    storage.delFromStorage = function (el) {
+        oldDelFromStorage.call(storage, el);
+
+        if (el) {
+            el.onRemove && el.onRemove(vmlRoot);
+        }
+    };
+
+    storage.addToStorage = function (el) {
+        // Displayable already has a vml node
+        el.onAdd && el.onAdd(vmlRoot);
+
+        oldAddToStorage.call(storage, el);
+    };
+
+    this._firstPaint = true;
+}
+
+VMLPainter.prototype = {
+
+    constructor: VMLPainter,
+
+    getType: function () {
+        return 'vml';
+    },
+
+    /**
+     * @return {HTMLDivElement}
+     */
+    getViewportRoot: function () {
+        return this._vmlViewport;
+    },
+
+    getViewportRootOffset: function () {
+        var viewportRoot = this.getViewportRoot();
+        if (viewportRoot) {
+            return {
+                offsetLeft: viewportRoot.offsetLeft || 0,
+                offsetTop: viewportRoot.offsetTop || 0
+            };
+        }
+    },
+
+    /**
+     * 刷新
+     */
+    refresh: function () {
+
+        var list = this.storage.getDisplayList(true, true);
+
+        this._paintList(list);
+    },
+
+    _paintList: function (list) {
+        var vmlRoot = this._vmlRoot;
+        for (var i = 0; i < list.length; i++) {
+            var el = list[i];
+            if (el.invisible || el.ignore) {
+                if (!el.__alreadyNotVisible) {
+                    el.onRemove(vmlRoot);
+                }
+                // Set as already invisible
+                el.__alreadyNotVisible = true;
+            }
+            else {
+                if (el.__alreadyNotVisible) {
+                    el.onAdd(vmlRoot);
+                }
+                el.__alreadyNotVisible = false;
+                if (el.__dirty) {
+                    el.beforeBrush && el.beforeBrush();
+                    (el.brushVML || el.brush).call(el, vmlRoot);
+                    el.afterBrush && el.afterBrush();
+                }
+            }
+            el.__dirty = false;
+        }
+
+        if (this._firstPaint) {
+            // Detached from document at first time
+            // to avoid page refreshing too many times
+
+            // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变
+            this._vmlViewport.appendChild(vmlRoot);
+            this._firstPaint = false;
+        }
+    },
+
+    resize: function (width, height) {
+        var width = width == null ? this._getWidth() : width;
+        var height = height == null ? this._getHeight() : height;
+
+        if (this._width != width || this._height != height) {
+            this._width = width;
+            this._height = height;
+
+            var vmlViewportStyle = this._vmlViewport.style;
+            vmlViewportStyle.width = width + 'px';
+            vmlViewportStyle.height = height + '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 () {
+        if (this._vmlViewport) {
+            this.root.removeChild(this._vmlViewport);
+        }
+    },
+
+    _getWidth: function () {
+        var root = this.root;
+        var stl = root.currentStyle;
+
+        return ((root.clientWidth || parseInt10$1(stl.width))
+                - parseInt10$1(stl.paddingLeft)
+                - parseInt10$1(stl.paddingRight)) | 0;
+    },
+
+    _getHeight: function () {
+        var root = this.root;
+        var stl = root.currentStyle;
+
+        return ((root.clientHeight || parseInt10$1(stl.height))
+                - parseInt10$1(stl.paddingTop)
+                - parseInt10$1(stl.paddingBottom)) | 0;
+    }
+};
+
+// Not supported methods
+function createMethodNotSupport(method) {
+    return function () {
+        zrLog('In IE8.0 VML mode painter not support method "' + method + '"');
+    };
+}
+
+// Unsupported methods
+each$1([
+    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers',
+    'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'
+], function (name) {
+    VMLPainter.prototype[name] = createMethodNotSupport(name);
+});
+
+registerPainter('vml', VMLPainter);
+
+var svgURI = 'http://www.w3.org/2000/svg';
+
+function createElement(name) {
+    return document.createElementNS(svgURI, name);
+}
+
+// TODO
+// 1. shadow
+// 2. Image: sx, sy, sw, sh
+
+var CMD$4 = PathProxy.CMD;
+var arrayJoin = Array.prototype.join;
+
+var NONE = 'none';
+var mathRound = Math.round;
+var mathSin$3 = Math.sin;
+var mathCos$3 = Math.cos;
+var PI$5 = Math.PI;
+var PI2$7 = Math.PI * 2;
+var degree = 180 / PI$5;
+
+var EPSILON$4 = 1e-4;
+
+function round4(val) {
+    return mathRound(val * 1e4) / 1e4;
+}
+
+function isAroundZero$1(val) {
+    return val < EPSILON$4 && val > -EPSILON$4;
+}
+
+function pathHasFill(style, isText) {
+    var fill = isText ? style.textFill : style.fill;
+    return fill != null && fill !== NONE;
+}
+
+function pathHasStroke(style, isText) {
+    var stroke = isText ? style.textStroke : style.stroke;
+    return stroke != null && stroke !== NONE;
+}
+
+function setTransform(svgEl, m) {
+    if (m) {
+        attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');
+    }
+}
+
+function attr(el, key, val) {
+    if (!val || val.type !== 'linear' && val.type !== 'radial') {
+        // Don't set attribute for gradient, since it need new dom nodes
+        if (typeof val === 'string' && val.indexOf('NaN') > -1) {
+            console.log(val);
+        }
+        el.setAttribute(key, val);
+    }
+}
+
+function attrXLink(el, key, val) {
+    el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);
+}
+
+function bindStyle(svgEl, style, isText) {
+    if (pathHasFill(style, isText)) {
+        var fill = isText ? style.textFill : style.fill;
+        fill = fill === 'transparent' ? NONE : fill;
+
+        /**
+         * FIXME:
+         * This is a temporary fix for Chrome's clipping bug
+         * that happens when a clip-path is referring another one.
+         * This fix should be used before Chrome's bug is fixed.
+         * For an element that has clip-path, and fill is none,
+         * set it to be "rgba(0, 0, 0, 0.002)" will hide the element.
+         * Otherwise, it will show black fill color.
+         * 0.002 is used because this won't work for alpha values smaller
+         * than 0.002.
+         *
+         * See
+         * https://bugs.chromium.org/p/chromium/issues/detail?id=659790
+         * for more information.
+         */
+        if (svgEl.getAttribute('clip-path') !== 'none' && fill === NONE) {
+            fill = 'rgba(0, 0, 0, 0.002)';
+        }
+
+        attr(svgEl, 'fill', fill);
+        attr(svgEl, 'fill-opacity', style.opacity);
+    }
+    else {
+        attr(svgEl, 'fill', NONE);
+    }
+
+    if (pathHasStroke(style, isText)) {
+        var stroke = isText ? style.textStroke : style.stroke;
+        stroke = stroke === 'transparent' ? NONE : stroke;
+        attr(svgEl, 'stroke', stroke);
+        var strokeWidth = isText
+            ? style.textStrokeWidth
+            : style.lineWidth;
+        var strokeScale = !isText && style.strokeNoScale
+            ? style.host.getLineScale()
+            : 1;
+        attr(svgEl, 'stroke-width', strokeWidth / strokeScale);
+        // stroke then fill for text; fill then stroke for others
+        attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill');
+        attr(svgEl, 'stroke-opacity', style.opacity);
+        var lineDash = style.lineDash;
+        if (lineDash) {
+            attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));
+            attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));
+        }
+        else {
+            attr(svgEl, 'stroke-dasharray', '');
+        }
+
+        // PENDING
+        style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);
+        style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);
+        style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit);
+    }
+    else {
+        attr(svgEl, 'stroke', NONE);
+    }
+}
+
+/***************************************************
+ * PATH
+ **************************************************/
+function pathDataToString$1(path) {
+    var str = [];
+    var data = path.data;
+    var dataLength = path.len();
+    for (var i = 0; i < dataLength;) {
+        var cmd = data[i++];
+        var cmdStr = '';
+        var nData = 0;
+        switch (cmd) {
+            case CMD$4.M:
+                cmdStr = 'M';
+                nData = 2;
+                break;
+            case CMD$4.L:
+                cmdStr = 'L';
+                nData = 2;
+                break;
+            case CMD$4.Q:
+                cmdStr = 'Q';
+                nData = 4;
+                break;
+            case CMD$4.C:
+                cmdStr = 'C';
+                nData = 6;
+                break;
+            case CMD$4.A:
+                var cx = data[i++];
+                var cy = data[i++];
+                var rx = data[i++];
+                var ry = data[i++];
+                var theta = data[i++];
+                var dTheta = data[i++];
+                var psi = data[i++];
+                var clockwise = data[i++];
+
+                var dThetaPositive = Math.abs(dTheta);
+                var isCircle = isAroundZero$1(dThetaPositive - PI2$7)
+                    && !isAroundZero$1(dThetaPositive);
+
+                var large = false;
+                if (dThetaPositive >= PI2$7) {
+                    large = true;
+                }
+                else if (isAroundZero$1(dThetaPositive)) {
+                    large = false;
+                }
+                else {
+                    large = (dTheta > -PI$5 && dTheta < 0 || dTheta > PI$5)
+                        === !!clockwise;
+                }
+
+                var x0 = round4(cx + rx * mathCos$3(theta));
+                var y0 = round4(cy + ry * mathSin$3(theta));
+
+                // It will not draw if start point and end point are exactly the same
+                // We need to shift the end point with a small value
+                // FIXME A better way to draw circle ?
+                if (isCircle) {
+                    if (clockwise) {
+                        dTheta = PI2$7 - 1e-4;
+                    }
+                    else {
+                        dTheta = -PI2$7 + 1e-4;
+                    }
+
+                    large = true;
+
+                    if (i === 9) {
+                        // Move to (x0, y0) only when CMD.A comes at the
+                        // first position of a shape.
+                        // For instance, when drawing a ring, CMD.A comes
+                        // after CMD.M, so it's unnecessary to move to
+                        // (x0, y0).
+                        str.push('M', x0, y0);
+                    }
+                }
+
+                var x = round4(cx + rx * mathCos$3(theta + dTheta));
+                var y = round4(cy + ry * mathSin$3(theta + dTheta));
+
+                // FIXME Ellipse
+                str.push('A', round4(rx), round4(ry),
+                    mathRound(psi * degree), +large, +clockwise, x, y);
+                break;
+            case CMD$4.Z:
+                cmdStr = 'Z';
+                break;
+            case CMD$4.R:
+                var x = round4(data[i++]);
+                var y = round4(data[i++]);
+                var w = round4(data[i++]);
+                var h = round4(data[i++]);
+                str.push(
+                    'M', x, y,
+                    'L', x + w, y,
+                    'L', x + w, y + h,
+                    'L', x, y + h,
+                    'L', x, y
+                );
+                break;
+        }
+        cmdStr && str.push(cmdStr);
+        for (var j = 0; j < nData; j++) {
+            // PENDING With scale
+            str.push(round4(data[i++]));
+        }
+    }
+    return str.join(' ');
+}
+
+var svgPath = {};
+svgPath.brush = function (el) {
+    var style = el.style;
+
+    var svgEl = el.__svgEl;
+    if (!svgEl) {
+        svgEl = createElement('path');
+        el.__svgEl = svgEl;
+    }
+
+    if (!el.path) {
+        el.createPathProxy();
+    }
+    var path = el.path;
+
+    if (el.__dirtyPath) {
+        path.beginPath();
+        el.buildPath(path, el.shape);
+        el.__dirtyPath = false;
+
+        var pathStr = pathDataToString$1(path);
+        if (pathStr.indexOf('NaN') < 0) {
+            // Ignore illegal path, which may happen such in out-of-range
+            // data in Calendar series.
+            attr(svgEl, 'd', pathStr);
+        }
+    }
+
+    bindStyle(svgEl, style);
+    setTransform(svgEl, el.transform);
+
+    if (style.text != null) {
+        svgTextDrawRectText(el, el.getBoundingRect());
+    }
+};
+
+/***************************************************
+ * IMAGE
+ **************************************************/
+var svgImage = {};
+svgImage.brush = function (el) {
+    var style = el.style;
+    var image = style.image;
+
+    if (image instanceof HTMLImageElement) {
+        var src = image.src;
+        image = src;
+    }
+    if (! image) {
+        return;
+    }
+
+    var x = style.x || 0;
+    var y = style.y || 0;
+
+    var dw = style.width;
+    var dh = style.height;
+
+    var svgEl = el.__svgEl;
+    if (! svgEl) {
+        svgEl = createElement('image');
+        el.__svgEl = svgEl;
+    }
+
+    if (image !== el.__imageSrc) {
+        attrXLink(svgEl, 'href', image);
+        // Caching image src
+        el.__imageSrc = image;
+    }
+
+    attr(svgEl, 'width', dw);
+    attr(svgEl, 'height', dh);
+
+    attr(svgEl, 'x', x);
+    attr(svgEl, 'y', y);
+
+    setTransform(svgEl, el.transform);
+
+    if (style.text != null) {
+        svgTextDrawRectText(el, el.getBoundingRect());
+    }
+};
+
+/***************************************************
+ * TEXT
+ **************************************************/
+var svgText = {};
+var tmpRect$3 = new BoundingRect();
+
+var svgTextDrawRectText = function (el, rect, textRect) {
+    var style = el.style;
+
+    el.__dirty && normalizeTextStyle(style, true);
+
+    var text = style.text;
+    // Convert to string
+    if (text == null) {
+        // Draw no text only when text is set to null, but not ''
+        return;
+    }
+    else {
+        text += '';
+    }
+
+    var textSvgEl = el.__textSvgEl;
+    if (! textSvgEl) {
+        textSvgEl = createElement('text');
+        el.__textSvgEl = textSvgEl;
+    }
+
+    var x;
+    var y;
+    var textPosition = style.textPosition;
+    var distance = style.textDistance;
+    var align = style.textAlign || 'left';
+
+    if (typeof style.fontSize === 'number') {
+        style.fontSize += 'px';
+    }
+    var font = style.font
+        || [
+            style.fontStyle || '',
+            style.fontWeight || '',
+            style.fontSize || '',
+            style.fontFamily || ''
+        ].join(' ')
+        || DEFAULT_FONT;
+
+    var verticalAlign = getVerticalAlignForSvg(style.textVerticalAlign);
+
+    textRect = getBoundingRect(text, font, align,
+        verticalAlign);
+
+    var lineHeight = textRect.lineHeight;
+    // Text position represented by coord
+    if (textPosition instanceof Array) {
+        x = rect.x + textPosition[0];
+        y = rect.y + textPosition[1];
+    }
+    else {
+        var newPos = adjustTextPositionOnRect(
+            textPosition, rect, distance
+        );
+        x = newPos.x;
+        y = newPos.y;
+        verticalAlign = getVerticalAlignForSvg(newPos.textVerticalAlign);
+        align = newPos.textAlign;
+    }
+
+    attr(textSvgEl, 'alignment-baseline', verticalAlign);
+
+    if (font) {
+        textSvgEl.style.font = font;
+    }
+
+    var textPadding = style.textPadding;
+
+    // Make baseline top
+    attr(textSvgEl, 'x', x);
+    attr(textSvgEl, 'y', y);
+
+    bindStyle(textSvgEl, style, true);
+    if (el instanceof Text || el.style.transformText) {
+        // Transform text with element
+        setTransform(textSvgEl, el.transform);
+    }
+    else {
+        if (el.transform) {
+            tmpRect$3.copy(rect);
+            tmpRect$3.applyTransform(el.transform);
+            rect = tmpRect$3;
+        }
+        else {
+            var pos = el.transformCoordToGlobal(rect.x, rect.y);
+            rect.x = pos[0];
+            rect.y = pos[1];
+        }
+
+        // Text rotation, but no element transform
+        var origin = style.textOrigin;
+        if (origin === 'center') {
+            x = textRect.width / 2 + x;
+            y = textRect.height / 2 + y;
+        }
+        else if (origin) {
+            x = origin[0] + x;
+            y = origin[1] + y;
+        }
+        var rotate$$1 = -style.textRotation || 0;
+        var transform = create$1();
+        // Apply textRotate to element matrix
+        rotate(transform, el.transform, rotate$$1);
+        setTransform(textSvgEl, transform);
+    }
+
+    var textLines = text.split('\n');
+    var nTextLines = textLines.length;
+    var textAnchor = align;
+    // PENDING
+    if (textAnchor === 'left')  {
+        textAnchor = 'start';
+        textPadding && (x += textPadding[3]);
+    }
+    else if (textAnchor === 'right') {
+        textAnchor = 'end';
+        textPadding && (x -= textPadding[1]);
+    }
+    else if (textAnchor === 'center') {
+        textAnchor = 'middle';
+        textPadding && (x += (textPadding[3] - textPadding[1]) / 2);
+    }
+
+    var dy = 0;
+    if (verticalAlign === 'baseline') {
+        dy = -textRect.height + lineHeight;
+        textPadding && (dy -= textPadding[2]);
+    }
+    else if (verticalAlign === 'middle') {
+        dy = (-textRect.height + lineHeight) / 2;
+        textPadding && (y += (textPadding[0] - textPadding[2]) / 2);
+    }
+    else {
+        textPadding && (dy += textPadding[0]);
+    }
+
+    // Font may affect position of each tspan elements
+    if (el.__text !== text || el.__textFont !== font) {
+        var tspanList = el.__tspanList || [];
+        el.__tspanList = tspanList;
+        for (var i = 0; i < nTextLines; i++) {
+            // Using cached tspan elements
+            var tspan = tspanList[i];
+            if (! tspan) {
+                tspan = tspanList[i] = createElement('tspan');
+                textSvgEl.appendChild(tspan);
+                attr(tspan, 'alignment-baseline', verticalAlign);
+                attr(tspan, 'text-anchor', textAnchor);
+            }
+            else {
+                tspan.innerHTML = '';
+            }
+            attr(tspan, 'x', x);
+            attr(tspan, 'y', y + i * lineHeight + dy);
+            tspan.appendChild(document.createTextNode(textLines[i]));
+        }
+        // Remove unsed tspan elements
+        for (; i < tspanList.length; i++) {
+            textSvgEl.removeChild(tspanList[i]);
+        }
+        tspanList.length = nTextLines;
+
+        el.__text = text;
+        el.__textFont = font;
+    }
+    else if (el.__tspanList.length) {
+        // Update span x and y
+        var len = el.__tspanList.length;
+        for (var i = 0; i < len; ++i) {
+            var tspan = el.__tspanList[i];
+            if (tspan) {
+                attr(tspan, 'x', x);
+                attr(tspan, 'y', y + i * lineHeight + dy);
+            }
+        }
+    }
+};
+
+function getVerticalAlignForSvg(verticalAlign) {
+    if (verticalAlign === 'middle') {
+        return 'middle';
+    }
+    else if (verticalAlign === 'bottom') {
+        return 'baseline';
+    }
+    else {
+        return 'hanging';
+    }
+}
+
+svgText.drawRectText = svgTextDrawRectText;
+
+svgText.brush = function (el) {
+    var style = el.style;
+    if (style.text != null) {
+        // 强制设置 textPosition
+        style.textPosition = [0, 0];
+        svgTextDrawRectText(el, {
+            x: style.x || 0, y: style.y || 0,
+            width: 0, height: 0
+        }, el.getBoundingRect());
+    }
+};
+
+// Myers' Diff Algorithm
+// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js
+
+function Diff() {}
+
+Diff.prototype = {
+    diff: function (oldArr, newArr, equals) {
+        if (!equals) {
+            equals = function (a, b) {
+                return a === b;
+            };
+        }
+        this.equals = equals;
+
+        var self = this;
+
+        oldArr = oldArr.slice();
+        newArr = newArr.slice();
+        // Allow subclasses to massage the input prior to running
+        var newLen = newArr.length;
+        var oldLen = oldArr.length;
+        var editLength = 1;
+        var maxEditLength = newLen + oldLen;
+        var bestPath = [{ newPos: -1, components: [] }];
+
+        // Seed editLength = 0, i.e. the content starts with the same values
+        var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);
+        if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+            var indices = [];
+            for (var i = 0; i < newArr.length; i++) {
+                indices.push(i);
+            }
+            // Identity per the equality and tokenizer
+            return [{
+                indices: indices, count: newArr.length
+            }];
+        }
+
+        // Main worker method. checks all permutations of a given edit length for acceptance.
+        function execEditLength() {
+            for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+                var basePath;
+                var addPath = bestPath[diagonalPath - 1];
+                var removePath = bestPath[diagonalPath + 1];
+                var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
+                if (addPath) {
+                    // No one else is going to attempt to use this value, clear it
+                    bestPath[diagonalPath - 1] = undefined;
+                }
+
+                var canAdd = addPath && addPath.newPos + 1 < newLen;
+                var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;
+                if (!canAdd && !canRemove) {
+                    // If this path is a terminal then prune
+                    bestPath[diagonalPath] = undefined;
+                    continue;
+                }
+
+                // Select the diagonal that we want to branch from. We select the prior
+                // path whose position in the new string is the farthest from the origin
+                // and does not pass the bounds of the diff graph
+                if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {
+                    basePath = clonePath(removePath);
+                    self.pushComponent(basePath.components, undefined, true);
+                }
+                else {
+                    basePath = addPath;   // No need to clone, we've pulled it from the list
+                    basePath.newPos++;
+                    self.pushComponent(basePath.components, true, undefined);
+                }
+
+                oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath);
+
+                // If we have hit the end of both strings, then we are done
+                if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+                    return buildValues(self, basePath.components, newArr, oldArr);
+                }
+                else {
+                    // Otherwise track this path as a potential candidate and continue.
+                    bestPath[diagonalPath] = basePath;
+                }
+            }
+
+            editLength++;
+        }
+
+        while (editLength <= maxEditLength) {
+            var ret = execEditLength();
+            if (ret) {
+                return ret;
+            }
+        }
+    },
+
+    pushComponent: function (components, added, removed) {
+        var last = components[components.length - 1];
+        if (last && last.added === added && last.removed === removed) {
+            // We need to clone here as the component clone operation is just
+            // as shallow array clone
+            components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };
+        }
+        else {
+            components.push({count: 1, added: added, removed: removed });
+        }
+    },
+    extractCommon: function (basePath, newArr, oldArr, diagonalPath) {
+        var newLen = newArr.length;
+        var oldLen = oldArr.length;
+        var newPos = basePath.newPos;
+        var oldPos = newPos - diagonalPath;
+        var commonCount = 0;
+
+        while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {
+            newPos++;
+            oldPos++;
+            commonCount++;
+        }
+
+        if (commonCount) {
+            basePath.components.push({count: commonCount});
+        }
+
+        basePath.newPos = newPos;
+        return oldPos;
+    },
+    tokenize: function (value) {
+        return value.slice();
+    },
+    join: function (value) {
+        return value.slice();
+    }
+};
+
+function buildValues(diff, components, newArr, oldArr) {
+    var componentPos = 0;
+    var componentLen = components.length;
+    var newPos = 0;
+    var oldPos = 0;
+
+    for (; componentPos < componentLen; componentPos++) {
+        var component = components[componentPos];
+        if (!component.removed) {
+            var indices = [];
+            for (var i = newPos; i < newPos + component.count; i++) {
+                indices.push(i);
+            }
+            component.indices = indices;
+            newPos += component.count;
+            // Common case
+            if (!component.added) {
+                oldPos += component.count;
+            }
+        }
+        else {
+            var indices = [];
+            for (var i = oldPos; i < oldPos + component.count; i++) {
+                indices.push(i);
+            }
+            component.indices = indices;
+            oldPos += component.count;
+        }
+    }
+
+    return components;
+}
+
+function clonePath(path) {
+    return { newPos: path.newPos, components: path.components.slice(0) };
+}
+
+var arrayDiff = new Diff();
+
+var arrayDiff$1 = function (oldArr, newArr, callback) {
+    return arrayDiff.diff(oldArr, newArr, callback);
+};
+
+/**
+ * @file Manages elements that can be defined in <defs> in SVG,
+ *       e.g., gradients, clip path, etc.
+ * @author Zhang Wenli
+ */
+
+var MARK_UNUSED = '0';
+var MARK_USED = '1';
+
+/**
+ * Manages elements that can be defined in <defs> in SVG,
+ * e.g., gradients, clip path, etc.
+ *
+ * @class
+ * @param {number}          zrId      zrender instance id
+ * @param {SVGElement}      svgRoot   root of SVG document
+ * @param {string|string[]} tagNames  possible tag names
+ * @param {string}          markLabel label name to make if the element
+ *                                    is used
+ */
+function Definable(
+    zrId,
+    svgRoot,
+    tagNames,
+    markLabel,
+    domName
+) {
+    this._zrId = zrId;
+    this._svgRoot = svgRoot;
+    this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;
+    this._markLabel = markLabel;
+    this._domName = domName || '_dom';
+
+    this.nextId = 0;
+}
+
+
+Definable.prototype.createElement = createElement;
+
+
+/**
+ * Get the <defs> tag for svgRoot; optionally creates one if not exists.
+ *
+ * @param {boolean} isForceCreating if need to create when not exists
+ * @return {SVGDefsElement} SVG <defs> element, null if it doesn't
+ * exist and isForceCreating is false
+ */
+Definable.prototype.getDefs = function (isForceCreating) {
+    var svgRoot = this._svgRoot;
+    var defs = this._svgRoot.getElementsByTagName('defs');
+    if (defs.length === 0) {
+        // Not exist
+        if (isForceCreating) {
+            defs = svgRoot.insertBefore(
+                this.createElement('defs'), // Create new tag
+                svgRoot.firstChild // Insert in the front of svg
+            );
+            if (!defs.contains) {
+                // IE doesn't support contains method
+                defs.contains = function (el) {
+                    var children = defs.children;
+                    if (!children) {
+                        return false;
+                    }
+                    for (var i = children.length - 1; i >= 0; --i) {
+                        if (children[i] === el) {
+                            return true;
+                        }
+                    }
+                    return false;
+                };
+            }
+            return defs;
+        }
+        else {
+            return null;
+        }
+    }
+    else {
+        return defs[0];
+    }
+};
+
+
+/**
+ * Update DOM element if necessary.
+ *
+ * @param {Object|string} element style element. e.g., for gradient,
+ *                                it may be '#ccc' or {type: 'linear', ...}
+ * @param {Function|undefined} onUpdate update callback
+ */
+Definable.prototype.update = function (element, onUpdate) {
+    if (!element) {
+        return;
+    }
+
+    var defs = this.getDefs(false);
+    if (element[this._domName] && defs.contains(element[this._domName])) {
+        // Update DOM
+        if (typeof onUpdate === 'function') {
+            onUpdate(element);
+        }
+    }
+    else {
+        // No previous dom, create new
+        var dom = this.add(element);
+        if (dom) {
+            element[this._domName] = dom;
+        }
+    }
+};
+
+
+/**
+ * Add gradient dom to defs
+ *
+ * @param {SVGElement} dom DOM to be added to <defs>
+ */
+Definable.prototype.addDom = function (dom) {
+    var defs = this.getDefs(true);
+    defs.appendChild(dom);
+};
+
+
+/**
+ * Remove DOM of a given element.
+ *
+ * @param {SVGElement} element element to remove dom
+ */
+Definable.prototype.removeDom = function (element) {
+    var defs = this.getDefs(false);
+    if (defs && element[this._domName]) {
+        defs.removeChild(element[this._domName]);
+        element[this._domName] = null;
+    }
+};
+
+
+/**
+ * Get DOMs of this element.
+ *
+ * @return {HTMLDomElement} doms of this defineable elements in <defs>
+ */
+Definable.prototype.getDoms = function () {
+    var defs = this.getDefs(false);
+    if (!defs) {
+        // No dom when defs is not defined
+        return [];
+    }
+
+    var doms = [];
+    each$1(this._tagNames, function (tagName) {
+        var tags = defs.getElementsByTagName(tagName);
+        // Note that tags is HTMLCollection, which is array-like
+        // rather than real array.
+        // So `doms.concat(tags)` add tags as one object.
+        doms = doms.concat([].slice.call(tags));
+    });
+
+    return doms;
+};
+
+
+/**
+ * Mark DOMs to be unused before painting, and clear unused ones at the end
+ * of the painting.
+ */
+Definable.prototype.markAllUnused = function () {
+    var doms = this.getDoms();
+    var that = this;
+    each$1(doms, function (dom) {
+        dom[that._markLabel] = MARK_UNUSED;
+    });
+};
+
+
+/**
+ * Mark a single DOM to be used.
+ *
+ * @param {SVGElement} dom DOM to mark
+ */
+Definable.prototype.markUsed = function (dom) {
+    if (dom) {
+        dom[this._markLabel] = MARK_USED;
+    }
+};
+
+
+/**
+ * Remove unused DOMs defined in <defs>
+ */
+Definable.prototype.removeUnused = function () {
+    var defs = this.getDefs(false);
+    if (!defs) {
+        // Nothing to remove
+        return;
+    }
+
+    var doms = this.getDoms();
+    var that = this;
+    each$1(doms, function (dom) {
+        if (dom[that._markLabel] !== MARK_USED) {
+            // Remove gradient
+            defs.removeChild(dom);
+        }
+    });
+};
+
+
+/**
+ * Get SVG proxy.
+ *
+ * @param {Displayable} displayable displayable element
+ * @return {Path|Image|Text} svg proxy of given element
+ */
+Definable.prototype.getSvgProxy = function (displayable) {
+    if (displayable instanceof Path) {
+        return svgPath;
+    }
+    else if (displayable instanceof ZImage) {
+        return svgImage;
+    }
+    else if (displayable instanceof Text) {
+        return svgText;
+    }
+    else {
+        return svgPath;
+    }
+};
+
+
+/**
+ * Get text SVG element.
+ *
+ * @param {Displayable} displayable displayable element
+ * @return {SVGElement} SVG element of text
+ */
+Definable.prototype.getTextSvgElement = function (displayable) {
+    return displayable.__textSvgEl;
+};
+
+
+/**
+ * Get SVG element.
+ *
+ * @param {Displayable} displayable displayable element
+ * @return {SVGElement} SVG element
+ */
+Definable.prototype.getSvgElement = function (displayable) {
+    return displayable.__svgEl;
+};
+
+/**
+ * @file Manages SVG gradient elements.
+ * @author Zhang Wenli
+ */
+
+/**
+ * Manages SVG gradient elements.
+ *
+ * @class
+ * @extends Definable
+ * @param   {number}     zrId    zrender instance id
+ * @param   {SVGElement} svgRoot root of SVG document
+ */
+function GradientManager(zrId, svgRoot) {
+    Definable.call(
+        this,
+        zrId,
+        svgRoot,
+        ['linearGradient', 'radialGradient'],
+        '__gradient_in_use__'
+    );
+}
+
+
+inherits(GradientManager, Definable);
+
+
+/**
+ * Create new gradient DOM for fill or stroke if not exist,
+ * but will not update gradient if exists.
+ *
+ * @param {SvgElement}  svgElement   SVG element to paint
+ * @param {Displayable} displayable  zrender displayable element
+ */
+GradientManager.prototype.addWithoutUpdate = function (
+    svgElement,
+    displayable
+) {
+    if (displayable && displayable.style) {
+        var that = this;
+        each$1(['fill', 'stroke'], function (fillOrStroke) {
+            if (displayable.style[fillOrStroke]
+                && (displayable.style[fillOrStroke].type === 'linear'
+                || displayable.style[fillOrStroke].type === 'radial')
+            ) {
+                var gradient = displayable.style[fillOrStroke];
+                var defs = that.getDefs(true);
+
+                // Create dom in <defs> if not exists
+                var dom;
+                if (gradient._dom) {
+                    // Gradient exists
+                    dom = gradient._dom;
+                    if (!defs.contains(gradient._dom)) {
+                        // _dom is no longer in defs, recreate
+                        that.addDom(dom);
+                    }
+                }
+                else {
+                    // New dom
+                    dom = that.add(gradient);
+                }
+
+                that.markUsed(displayable);
+
+                var id = dom.getAttribute('id');
+                svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');
+            }
+        });
+    }
+};
+
+
+/**
+ * Add a new gradient tag in <defs>
+ *
+ * @param   {Gradient} gradient zr gradient instance
+ * @return {SVGLinearGradientElement | SVGRadialGradientElement}
+ *                            created DOM
+ */
+GradientManager.prototype.add = function (gradient) {
+    var dom;
+    if (gradient.type === 'linear') {
+        dom = this.createElement('linearGradient');
+    }
+    else if (gradient.type === 'radial') {
+        dom = this.createElement('radialGradient');
+    }
+    else {
+        zrLog('Illegal gradient type.');
+        return null;
+    }
+
+    // Set dom id with gradient id, since each gradient instance
+    // will have no more than one dom element.
+    // id may exists before for those dirty elements, in which case
+    // id should remain the same, and other attributes should be
+    // updated.
+    gradient.id = gradient.id || this.nextId++;
+    dom.setAttribute('id', 'zr' + this._zrId
+        + '-gradient-' + gradient.id);
+
+    this.updateDom(gradient, dom);
+    this.addDom(dom);
+
+    return dom;
+};
+
+
+/**
+ * Update gradient.
+ *
+ * @param {Gradient} gradient zr gradient instance
+ */
+GradientManager.prototype.update = function (gradient) {
+    var that = this;
+    Definable.prototype.update.call(this, gradient, function () {
+        var type = gradient.type;
+        var tagName = gradient._dom.tagName;
+        if (type === 'linear' && tagName === 'linearGradient'
+            || type === 'radial' && tagName === 'radialGradient'
+        ) {
+            // Gradient type is not changed, update gradient
+            that.updateDom(gradient, gradient._dom);
+        }
+        else {
+            // Remove and re-create if type is changed
+            that.removeDom(gradient);
+            that.add(gradient);
+        }
+    });
+};
+
+
+/**
+ * Update gradient dom
+ *
+ * @param {Gradient} gradient zr gradient instance
+ * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom
+ *                            DOM to update
+ */
+GradientManager.prototype.updateDom = function (gradient, dom) {
+    if (gradient.type === 'linear') {
+        dom.setAttribute('x1', gradient.x);
+        dom.setAttribute('y1', gradient.y);
+        dom.setAttribute('x2', gradient.x2);
+        dom.setAttribute('y2', gradient.y2);
+    }
+    else if (gradient.type === 'radial') {
+        dom.setAttribute('cx', gradient.x);
+        dom.setAttribute('cy', gradient.y);
+        dom.setAttribute('r', gradient.r);
+    }
+    else {
+        zrLog('Illegal gradient type.');
+        return;
+    }
+
+    if (gradient.global) {
+        // x1, x2, y1, y2 in range of 0 to canvas width or height
+        dom.setAttribute('gradientUnits', 'userSpaceOnUse');
+    }
+    else {
+        // x1, x2, y1, y2 in range of 0 to 1
+        dom.setAttribute('gradientUnits', 'objectBoundingBox');
+    }
+
+    // Remove color stops if exists
+    dom.innerHTML = '';
+
+    // Add color stops
+    var colors = gradient.colorStops;
+    for (var i = 0, len = colors.length; i < len; ++i) {
+        var stop = this.createElement('stop');
+        stop.setAttribute('offset', colors[i].offset * 100 + '%');
+        stop.setAttribute('stop-color', colors[i].color);
+        dom.appendChild(stop);
+    }
+
+    // Store dom element in gradient, to avoid creating multiple
+    // dom instances for the same gradient element
+    gradient._dom = dom;
+};
+
+/**
+ * Mark a single gradient to be used
+ *
+ * @param {Displayable} displayable displayable element
+ */
+GradientManager.prototype.markUsed = function (displayable) {
+    if (displayable.style) {
+        var gradient = displayable.style.fill;
+        if (gradient && gradient._dom) {
+            Definable.prototype.markUsed.call(this, gradient._dom);
+        }
+
+        gradient = displayable.style.stroke;
+        if (gradient && gradient._dom) {
+            Definable.prototype.markUsed.call(this, gradient._dom);
+        }
+    }
+};
+
+/**
+ * @file Manages SVG clipPath elements.
+ * @author Zhang Wenli
+ */
+
+/**
+ * Manages SVG clipPath elements.
+ *
+ * @class
+ * @extends Definable
+ * @param   {number}     zrId    zrender instance id
+ * @param   {SVGElement} svgRoot root of SVG document
+ */
+function ClippathManager(zrId, svgRoot) {
+    Definable.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__');
+}
+
+
+inherits(ClippathManager, Definable);
+
+
+/**
+ * Update clipPath.
+ *
+ * @param {Displayable} displayable displayable element
+ */
+ClippathManager.prototype.update = function (displayable) {
+    var svgEl = this.getSvgElement(displayable);
+    if (svgEl) {
+        this.updateDom(svgEl, displayable.__clipPaths, false);
+    }
+
+    var textEl = this.getTextSvgElement(displayable);
+    if (textEl) {
+        // Make another clipPath for text, since it's transform
+        // matrix is not the same with svgElement
+        this.updateDom(textEl, displayable.__clipPaths, true);
+    }
+
+    this.markUsed(displayable);
+};
+
+
+/**
+ * Create an SVGElement of displayable and create a <clipPath> of its
+ * clipPath
+ *
+ * @param {Displayable} parentEl  parent element
+ * @param {ClipPath[]}  clipPaths clipPaths of parent element
+ * @param {boolean}     isText    if parent element is Text
+ */
+ClippathManager.prototype.updateDom = function (
+    parentEl,
+    clipPaths,
+    isText
+) {
+    if (clipPaths && clipPaths.length > 0) {
+        // Has clipPath, create <clipPath> with the first clipPath
+        var defs = this.getDefs(true);
+        var clipPath = clipPaths[0];
+        var clipPathEl;
+        var id;
+
+        var dom = isText ? '_textDom' : '_dom';
+
+        if (clipPath[dom]) {
+            // Use a dom that is already in <defs>
+            id = clipPath[dom].getAttribute('id');
+            clipPathEl = clipPath[dom];
+
+            // Use a dom that is already in <defs>
+            if (!defs.contains(clipPathEl)) {
+                // This happens when set old clipPath that has
+                // been previously removed
+                defs.appendChild(clipPathEl);
+            }
+        }
+        else {
+            // New <clipPath>
+            id = 'zr' + this._zrId + '-clip-' + this.nextId;
+            ++this.nextId;
+            clipPathEl = this.createElement('clipPath');
+            clipPathEl.setAttribute('id', id);
+            defs.appendChild(clipPathEl);
+
+            clipPath[dom] = clipPathEl;
+        }
+
+        // Build path and add to <clipPath>
+        var svgProxy = this.getSvgProxy(clipPath);
+        if (clipPath.transform
+            && clipPath.parent.invTransform
+            && !isText
+        ) {
+            /**
+             * If a clipPath has a parent with transform, the transform
+             * of parent should not be considered when setting transform
+             * of clipPath. So we need to transform back from parent's
+             * transform, which is done by multiplying parent's inverse
+             * transform.
+             */
+            // Store old transform
+            var transform = Array.prototype.slice.call(
+                clipPath.transform
+            );
+
+            // Transform back from parent, and brush path
+            mul$1(
+                clipPath.transform,
+                clipPath.parent.invTransform,
+                clipPath.transform
+            );
+            svgProxy.brush(clipPath);
+
+            // Set back transform of clipPath
+            clipPath.transform = transform;
+        }
+        else {
+            svgProxy.brush(clipPath);
+        }
+
+        var pathEl = this.getSvgElement(clipPath);
+
+        clipPathEl.innerHTML = '';
+        /**
+         * Use `cloneNode()` here to appendChild to multiple parents,
+         * which may happend when Text and other shapes are using the same
+         * clipPath. Since Text will create an extra clipPath DOM due to
+         * different transform rules.
+         */
+        clipPathEl.appendChild(pathEl.cloneNode());
+
+        parentEl.setAttribute('clip-path', 'url(#' + id + ')');
+
+        if (clipPaths.length > 1) {
+            // Make the other clipPaths recursively
+            this.updateDom(clipPathEl, clipPaths.slice(1), isText);
+        }
+    }
+    else {
+        // No clipPath
+        if (parentEl) {
+            parentEl.setAttribute('clip-path', 'none');
+        }
+    }
+};
+
+/**
+ * Mark a single clipPath to be used
+ *
+ * @param {Displayable} displayable displayable element
+ */
+ClippathManager.prototype.markUsed = function (displayable) {
+    var that = this;
+    if (displayable.__clipPaths && displayable.__clipPaths.length > 0) {
+        each$1(displayable.__clipPaths, function (clipPath) {
+            if (clipPath._dom) {
+                Definable.prototype.markUsed.call(that, clipPath._dom);
+            }
+            if (clipPath._textDom) {
+                Definable.prototype.markUsed.call(that, clipPath._textDom);
+            }
+        });
+    }
+};
+
+/**
+ * @file Manages SVG shadow elements.
+ * @author Zhang Wenli
+ */
+
+/**
+ * Manages SVG shadow elements.
+ *
+ * @class
+ * @extends Definable
+ * @param   {number}     zrId    zrender instance id
+ * @param   {SVGElement} svgRoot root of SVG document
+ */
+function ShadowManager(zrId, svgRoot) {
+    Definable.call(
+        this,
+        zrId,
+        svgRoot,
+        ['filter'],
+        '__filter_in_use__',
+        '_shadowDom'
+    );
+}
+
+
+inherits(ShadowManager, Definable);
+
+
+/**
+ * Create new shadow DOM for fill or stroke if not exist,
+ * but will not update shadow if exists.
+ *
+ * @param {SvgElement}  svgElement   SVG element to paint
+ * @param {Displayable} displayable  zrender displayable element
+ */
+ShadowManager.prototype.addWithoutUpdate = function (
+    svgElement,
+    displayable
+) {
+    if (displayable && hasShadow(displayable.style)) {
+        var style = displayable.style;
+
+        // Create dom in <defs> if not exists
+        var dom;
+        if (style._shadowDom) {
+            // Gradient exists
+            dom = style._shadowDom;
+
+            var defs = this.getDefs(true);
+            if (!defs.contains(style._shadowDom)) {
+                // _shadowDom is no longer in defs, recreate
+                this.addDom(dom);
+            }
+        }
+        else {
+            // New dom
+            dom = this.add(displayable);
+        }
+
+        this.markUsed(displayable);
+
+        var id = dom.getAttribute('id');
+        svgElement.style.filter = 'url(#' + id + ')';
+    }
+};
+
+
+/**
+ * Add a new shadow tag in <defs>
+ *
+ * @param {Displayable} displayable  zrender displayable element
+ * @return {SVGFilterElement} created DOM
+ */
+ShadowManager.prototype.add = function (displayable) {
+    var dom = this.createElement('filter');
+    var style = displayable.style;
+
+    // Set dom id with shadow id, since each shadow instance
+    // will have no more than one dom element.
+    // id may exists before for those dirty elements, in which case
+    // id should remain the same, and other attributes should be
+    // updated.
+    style._shadowDomId = style._shadowDomId || this.nextId++;
+    dom.setAttribute('id', 'zr' + this._zrId
+        + '-shadow-' + style._shadowDomId);
+
+    this.updateDom(displayable, dom);
+    this.addDom(dom);
+
+    return dom;
+};
+
+
+/**
+ * Update shadow.
+ *
+ * @param {Displayable} displayable  zrender displayable element
+ */
+ShadowManager.prototype.update = function (svgElement, displayable) {
+    var style = displayable.style;
+    if (hasShadow(style)) {
+        var that = this;
+        Definable.prototype.update.call(this, displayable, function (style) {
+            that.updateDom(displayable, style._shadowDom);
+        });
+    }
+    else {
+        // Remove shadow
+        this.remove(svgElement, style);
+    }
+};
+
+
+/**
+ * Remove DOM and clear parent filter
+ */
+ShadowManager.prototype.remove = function (svgElement, style) {
+    if (style._shadowDomId != null) {
+        this.removeDom(style);
+        svgElement.style.filter = '';
+    }
+};
+
+
+/**
+ * Update shadow dom
+ *
+ * @param {Displayable} displayable  zrender displayable element
+ * @param {SVGFilterElement} dom DOM to update
+ */
+ShadowManager.prototype.updateDom = function (displayable, dom) {
+    var domChild = dom.getElementsByTagName('feDropShadow');
+    if (domChild.length === 0) {
+        domChild = this.createElement('feDropShadow');
+    }
+    else {
+        domChild = domChild[0];
+    }
+
+    var style = displayable.style;
+    var scaleX = displayable.scale ? (displayable.scale[0] || 1) : 1;
+    var scaleY = displayable.scale ? (displayable.scale[1] || 1) : 1;
+
+    // TODO: textBoxShadowBlur is not supported yet
+    var offsetX, offsetY, blur, color;
+    if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) {
+        offsetX = style.shadowOffsetX || 0;
+        offsetY = style.shadowOffsetY || 0;
+        blur = style.shadowBlur;
+        color = style.shadowColor;
+    }
+    else if (style.textShadowBlur) {
+        offsetX = style.textShadowOffsetX || 0;
+        offsetY = style.textShadowOffsetY || 0;
+        blur = style.textShadowBlur;
+        color = style.textShadowColor;
+    }
+    else {
+        // Remove shadow
+        this.removeDom(dom, style);
+        return;
+    }
+
+    domChild.setAttribute('dx', offsetX / scaleX);
+    domChild.setAttribute('dy', offsetY / scaleY);
+    domChild.setAttribute('flood-color', color);
+
+    // Divide by two here so that it looks the same as in canvas
+    // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur
+    var stdDx = blur / 2 / scaleX;
+    var stdDy = blur / 2 / scaleY;
+    var stdDeviation = stdDx + ' ' + stdDy;
+    domChild.setAttribute('stdDeviation', stdDeviation);
+
+    // Fix filter clipping problem
+    dom.setAttribute('x', '-100%');
+    dom.setAttribute('y', '-100%');
+    dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%');
+    dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%');
+
+    dom.appendChild(domChild);
+
+    // Store dom element in shadow, to avoid creating multiple
+    // dom instances for the same shadow element
+    style._shadowDom = dom;
+};
+
+/**
+ * Mark a single shadow to be used
+ *
+ * @param {Displayable} displayable displayable element
+ */
+ShadowManager.prototype.markUsed = function (displayable) {
+    var style = displayable.style;
+    if (style && style._shadowDom) {
+        Definable.prototype.markUsed.call(this, style._shadowDom);
+    }
+};
+
+function hasShadow(style) {
+    // TODO: textBoxShadowBlur is not supported yet
+    return style
+        && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY
+            || style.textShadowBlur || style.textShadowOffsetX
+            || style.textShadowOffsetY);
+}
+
+/**
+ * SVG Painter
+ * @module zrender/svg/Painter
+ */
+
+function parseInt10$2(val) {
+    return parseInt(val, 10);
+}
+
+function getSvgProxy(el) {
+    if (el instanceof Path) {
+        return svgPath;
+    }
+    else if (el instanceof ZImage) {
+        return svgImage;
+    }
+    else if (el instanceof Text) {
+        return svgText;
+    }
+    else {
+        return svgPath;
+    }
+}
+
+function checkParentAvailable(parent, child) {
+    return child && parent && child.parentNode !== parent;
+}
+
+function insertAfter(parent, child, prevSibling) {
+    if (checkParentAvailable(parent, child) && prevSibling) {
+        var nextSibling = prevSibling.nextSibling;
+        nextSibling ? parent.insertBefore(child, nextSibling)
+            : parent.appendChild(child);
+    }
+}
+
+function prepend(parent, child) {
+    if (checkParentAvailable(parent, child)) {
+        var firstChild = parent.firstChild;
+        firstChild ? parent.insertBefore(child, firstChild)
+            : parent.appendChild(child);
+    }
+}
+
+function remove$1(parent, child) {
+    if (child && parent && child.parentNode === parent) {
+        parent.removeChild(child);
+    }
+}
+
+function getTextSvgElement(displayable) {
+    return displayable.__textSvgEl;
+}
+
+function getSvgElement(displayable) {
+    return displayable.__svgEl;
+}
+
+/**
+ * @alias module:zrender/svg/Painter
+ * @constructor
+ * @param {HTMLElement} root 绘图容器
+ * @param {module:zrender/Storage} storage
+ * @param {Object} opts
+ */
+var SVGPainter = function (root, storage, opts, zrId) {
+
+    this.root = root;
+    this.storage = storage;
+    this._opts = opts = extend({}, opts || {});
+
+    var svgRoot = createElement('svg');
+    svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
+    svgRoot.setAttribute('version', '1.1');
+    svgRoot.setAttribute('baseProfile', 'full');
+    svgRoot.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';
+
+    this.gradientManager = new GradientManager(zrId, svgRoot);
+    this.clipPathManager = new ClippathManager(zrId, svgRoot);
+    this.shadowManager = new ShadowManager(zrId, svgRoot);
+
+    var viewport = document.createElement('div');
+    viewport.style.cssText = 'overflow:hidden;position:relative';
+
+    this._svgRoot = svgRoot;
+    this._viewport = viewport;
+
+    root.appendChild(viewport);
+    viewport.appendChild(svgRoot);
+
+    this.resize(opts.width, opts.height);
+
+    this._visibleList = [];
+};
+
+SVGPainter.prototype = {
+
+    constructor: SVGPainter,
+
+    getType: function () {
+        return 'svg';
+    },
+
+    getViewportRoot: function () {
+        return this._viewport;
+    },
+
+    getViewportRootOffset: function () {
+        var viewportRoot = this.getViewportRoot();
+        if (viewportRoot) {
+            return {
+                offsetLeft: viewportRoot.offsetLeft || 0,
+                offsetTop: viewportRoot.offsetTop || 0
+            };
+        }
+    },
+
+    refresh: function () {
+
+        var list = this.storage.getDisplayList(true);
+
+        this._paintList(list);
+    },
+
+    setBackgroundColor: function (backgroundColor) {
+        // TODO gradient
+        this._viewport.style.background = backgroundColor;
+    },
+
+    _paintList: function (list) {
+        this.gradientManager.markAllUnused();
+        this.clipPathManager.markAllUnused();
+        this.shadowManager.markAllUnused();
+
+        var svgRoot = this._svgRoot;
+        var visibleList = this._visibleList;
+        var listLen = list.length;
+
+        var newVisibleList = [];
+        var i;
+        for (i = 0; i < listLen; i++) {
+            var displayable = list[i];
+            var svgProxy = getSvgProxy(displayable);
+            var svgElement = getSvgElement(displayable)
+                || getTextSvgElement(displayable);
+            if (!displayable.invisible) {
+                if (displayable.__dirty) {
+                    svgProxy && svgProxy.brush(displayable);
+
+                    // Update clipPath
+                    this.clipPathManager.update(displayable);
+
+                    // Update gradient and shadow
+                    if (displayable.style) {
+                        this.gradientManager
+                            .update(displayable.style.fill);
+                        this.gradientManager
+                            .update(displayable.style.stroke);
+
+                        this.shadowManager
+                            .update(svgElement, displayable);
+                    }
+
+                    displayable.__dirty = false;
+                }
+                newVisibleList.push(displayable);
+            }
+        }
+
+        var diff = arrayDiff$1(visibleList, newVisibleList);
+        var prevSvgElement;
+
+        // First do remove, in case element moved to the head and do remove
+        // after add
+        for (i = 0; i < diff.length; i++) {
+            var item = diff[i];
+            if (item.removed) {
+                for (var k = 0; k < item.count; k++) {
+                    var displayable = visibleList[item.indices[k]];
+                    var svgElement = getSvgElement(displayable);
+                    var textSvgElement = getTextSvgElement(displayable);
+                    remove$1(svgRoot, svgElement);
+                    remove$1(svgRoot, textSvgElement);
+                }
+            }
+        }
+        for (i = 0; i < diff.length; i++) {
+            var item = diff[i];
+            if (item.added) {
+                for (var k = 0; k < item.count; k++) {
+                    var displayable = newVisibleList[item.indices[k]];
+                    var svgElement = getSvgElement(displayable);
+                    var textSvgElement = getTextSvgElement(displayable);
+                    prevSvgElement
+                        ? insertAfter(svgRoot, svgElement, prevSvgElement)
+                        : prepend(svgRoot, svgElement);
+                    if (svgElement) {
+                        insertAfter(svgRoot, textSvgElement, svgElement);
+                    }
+                    else if (prevSvgElement) {
+                        insertAfter(
+                            svgRoot, textSvgElement, prevSvgElement
+                        );
+                    }
+                    else {
+                        prepend(svgRoot, textSvgElement);
+                    }
+                    // Insert text
+                    insertAfter(svgRoot, textSvgElement, svgElement);
+                    prevSvgElement = textSvgElement || svgElement
+                        || prevSvgElement;
+
+                    this.gradientManager
+                        .addWithoutUpdate(svgElement, displayable);
+                    this.shadowManager
+                        .addWithoutUpdate(prevSvgElement, displayable);
+                    this.clipPathManager.markUsed(displayable);
+                }
+            }
+            else if (!item.removed) {
+                for (var k = 0; k < item.count; k++) {
+                    var displayable = newVisibleList[item.indices[k]];
+                    prevSvgElement
+                        = svgElement
+                        = getTextSvgElement(displayable)
+                        || getSvgElement(displayable)
+                        || prevSvgElement;
+
+                    this.gradientManager.markUsed(displayable);
+                    this.gradientManager
+                        .addWithoutUpdate(svgElement, displayable);
+
+                    this.shadowManager.markUsed(displayable);
+                    this.shadowManager
+                        .addWithoutUpdate(svgElement, displayable);
+
+                    this.clipPathManager.markUsed(displayable);
+                }
+            }
+        }
+
+        this.gradientManager.removeUnused();
+        this.clipPathManager.removeUnused();
+        this.shadowManager.removeUnused();
+
+        this._visibleList = newVisibleList;
+    },
+
+    _getDefs: function (isForceCreating) {
+        var svgRoot = this._svgRoot;
+        var defs = this._svgRoot.getElementsByTagName('defs');
+        if (defs.length === 0) {
+            // Not exist
+            if (isForceCreating) {
+                var defs = svgRoot.insertBefore(
+                    createElement('defs'), // Create new tag
+                    svgRoot.firstChild // Insert in the front of svg
+                );
+                if (!defs.contains) {
+                    // IE doesn't support contains method
+                    defs.contains = function (el) {
+                        var children = defs.children;
+                        if (!children) {
+                            return false;
+                        }
+                        for (var i = children.length - 1; i >= 0; --i) {
+                            if (children[i] === el) {
+                                return true;
+                            }
+                        }
+                        return false;
+                    };
+                }
+                return defs;
+            }
+            else {
+                return null;
+            }
+        }
+        else {
+            return defs[0];
+        }
+    },
+
+    resize: function (width, height) {
+        var viewport = this._viewport;
+        // FIXME Why ?
+        viewport.style.display = 'none';
+
+        // Save input w/h
+        var opts = this._opts;
+        width != null && (opts.width = width);
+        height != null && (opts.height = height);
+
+        width = this._getSize(0);
+        height = this._getSize(1);
+
+        viewport.style.display = '';
+
+        if (this._width !== width || this._height !== height) {
+            this._width = width;
+            this._height = height;
+
+            var viewportStyle = viewport.style;
+            viewportStyle.width = width + 'px';
+            viewportStyle.height = height + 'px';
+
+            var svgRoot = this._svgRoot;
+            // Set width by 'svgRoot.width = width' is invalid
+            svgRoot.setAttribute('width', width);
+            svgRoot.setAttribute('height', height);
+        }
+    },
+
+    /**
+     * 获取绘图区域宽度
+     */
+    getWidth: function () {
+        return this._width;
+    },
+
+    /**
+     * 获取绘图区域高度
+     */
+    getHeight: function () {
+        return this._height;
+    },
+
+    _getSize: function (whIdx) {
+        var opts = this._opts;
+        var wh = ['width', 'height'][whIdx];
+        var cwh = ['clientWidth', 'clientHeight'][whIdx];
+        var plt = ['paddingLeft', 'paddingTop'][whIdx];
+        var prb = ['paddingRight', 'paddingBottom'][whIdx];
+
+        if (opts[wh] != null && opts[wh] !== 'auto') {
+            return parseFloat(opts[wh]);
+        }
+
+        var root = this.root;
+        // IE8 does not support getComputedStyle, but it use VML.
+        var stl = document.defaultView.getComputedStyle(root);
+
+        return (
+            (root[cwh] || parseInt10$2(stl[wh]) || parseInt10$2(root.style[wh]))
+            - (parseInt10$2(stl[plt]) || 0)
+            - (parseInt10$2(stl[prb]) || 0)
+        ) | 0;
+    },
+
+    dispose: function () {
+        this.root.innerHTML = '';
+
+        this._svgRoot
+            = this._viewport
+            = this.storage
+            = null;
+    },
+
+    clear: function () {
+        if (this._viewport) {
+            this.root.removeChild(this._viewport);
+        }
+    },
+
+    pathToDataUrl: function () {
+        this.refresh();
+        var html = this._svgRoot.outerHTML;
+        return 'data:image/svg+xml;charset=UTF-8,' + html;
+    }
+};
+
+// Not supported methods
+function createMethodNotSupport$1(method) {
+    return function () {
+        zrLog('In SVG mode painter not support method "' + method + '"');
+    };
+}
+
+// Unsuppoted methods
+each$1([
+    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer',
+    'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer',
+    'toDataURL', 'pathToImage'
+], function (name) {
+    SVGPainter.prototype[name] = createMethodNotSupport$1(name);
+});
+
+registerPainter('svg', SVGPainter);
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// Import all charts and components
+
+exports.version = version;
+exports.dependencies = dependencies;
+exports.PRIORITY = PRIORITY;
+exports.init = init;
+exports.connect = connect;
+exports.disConnect = disConnect;
+exports.disconnect = disconnect;
+exports.dispose = dispose;
+exports.getInstanceByDom = getInstanceByDom;
+exports.getInstanceById = getInstanceById;
+exports.registerTheme = registerTheme;
+exports.registerPreprocessor = registerPreprocessor;
+exports.registerProcessor = registerProcessor;
+exports.registerPostUpdate = registerPostUpdate;
+exports.registerAction = registerAction;
+exports.registerCoordinateSystem = registerCoordinateSystem;
+exports.getCoordinateSystemDimensions = getCoordinateSystemDimensions;
+exports.registerLayout = registerLayout;
+exports.registerVisual = registerVisual;
+exports.registerLoading = registerLoading;
+exports.extendComponentModel = extendComponentModel;
+exports.extendComponentView = extendComponentView;
+exports.extendSeriesModel = extendSeriesModel;
+exports.extendChartView = extendChartView;
+exports.setCanvasCreator = setCanvasCreator;
+exports.registerMap = registerMap;
+exports.getMap = getMap;
+exports.dataTool = dataTool;
+exports.zrender = zrender;
+exports.graphic = graphic;
+exports.number = number;
+exports.format = format;
+exports.throttle = throttle;
+exports.helper = helper;
+exports.matrix = matrix;
+exports.vector = vector;
+exports.color = color;
+exports.parseGeoJSON = parseGeoJson$1;
+exports.parseGeoJson = parseGeoJson;
+exports.util = ecUtil;
+exports.List = List;
+exports.Model = Model;
+exports.Axis = Axis;
+exports.env = env$1;
+
+})));
+//# sourceMappingURL=echarts.js.map
+;
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+// This is CodeMirror (https://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+  // Kludges for bugs and behavior differences that can't be feature
+  // detected are enabled based on userAgent etc sniffing.
+  var userAgent = navigator.userAgent;
+  var platform = navigator.platform;
+
+  var gecko = /gecko\/\d/i.test(userAgent);
+  var ie_upto10 = /MSIE \d/.test(userAgent);
+  var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
+  var edge = /Edge\/(\d+)/.exec(userAgent);
+  var ie = ie_upto10 || ie_11up || edge;
+  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
+  var webkit = !edge && /WebKit\//.test(userAgent);
+  var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
+  var chrome = !edge && /Chrome\//.test(userAgent);
+  var presto = /Opera\//.test(userAgent);
+  var safari = /Apple Computer/.test(navigator.vendor);
+  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
+  var phantom = /PhantomJS/.test(userAgent);
+
+  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
+  var android = /Android/.test(userAgent);
+  // This is woefully incomplete. Suggestions for alternative methods welcome.
+  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
+  var mac = ios || /Mac/.test(platform);
+  var chromeOS = /\bCrOS\b/.test(userAgent);
+  var windows = /win/i.test(platform);
+
+  var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
+  if (presto_version) { presto_version = Number(presto_version[1]); }
+  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
+  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
+  var captureRightClick = gecko || (ie && ie_version >= 9);
+
+  function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+  var rmClass = function(node, cls) {
+    var current = node.className;
+    var match = classTest(cls).exec(current);
+    if (match) {
+      var after = current.slice(match.index + match[0].length);
+      node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
+    }
+  };
+
+  function removeChildren(e) {
+    for (var count = e.childNodes.length; count > 0; --count)
+      { e.removeChild(e.firstChild); }
+    return e
+  }
+
+  function removeChildrenAndAdd(parent, e) {
+    return removeChildren(parent).appendChild(e)
+  }
+
+  function elt(tag, content, className, style) {
+    var e = document.createElement(tag);
+    if (className) { e.className = className; }
+    if (style) { e.style.cssText = style; }
+    if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
+    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
+    return e
+  }
+  // wrapper for elt, which removes the elt from the accessibility tree
+  function eltP(tag, content, className, style) {
+    var e = elt(tag, content, className, style);
+    e.setAttribute("role", "presentation");
+    return e
+  }
+
+  var range;
+  if (document.createRange) { range = function(node, start, end, endNode) {
+    var r = document.createRange();
+    r.setEnd(endNode || node, end);
+    r.setStart(node, start);
+    return r
+  }; }
+  else { range = function(node, start, end) {
+    var r = document.body.createTextRange();
+    try { r.moveToElementText(node.parentNode); }
+    catch(e) { return r }
+    r.collapse(true);
+    r.moveEnd("character", end);
+    r.moveStart("character", start);
+    return r
+  }; }
+
+  function contains(parent, child) {
+    if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+      { child = child.parentNode; }
+    if (parent.contains)
+      { return parent.contains(child) }
+    do {
+      if (child.nodeType == 11) { child = child.host; }
+      if (child == parent) { return true }
+    } while (child = child.parentNode)
+  }
+
+  function activeElt() {
+    // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+    // IE < 10 will throw when accessed while the page is loading or in an iframe.
+    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+    var activeElement;
+    try {
+      activeElement = document.activeElement;
+    } catch(e) {
+      activeElement = document.body || null;
+    }
+    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+      { activeElement = activeElement.shadowRoot.activeElement; }
+    return activeElement
+  }
+
+  function addClass(node, cls) {
+    var current = node.className;
+    if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
+  }
+  function joinClasses(a, b) {
+    var as = a.split(" ");
+    for (var i = 0; i < as.length; i++)
+      { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
+    return b
+  }
+
+  var selectInput = function(node) { node.select(); };
+  if (ios) // Mobile Safari apparently has a bug where select() is broken.
+    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
+  else if (ie) // Suppress mysterious IE10 errors
+    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }
+
+  function bind(f) {
+    var args = Array.prototype.slice.call(arguments, 1);
+    return function(){return f.apply(null, args)}
+  }
+
+  function copyObj(obj, target, overwrite) {
+    if (!target) { target = {}; }
+    for (var prop in obj)
+      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+        { target[prop] = obj[prop]; } }
+    return target
+  }
+
+  // Counts the column offset in a string, taking tabs into account.
+  // Used mostly to find indentation.
+  function countColumn(string, end, tabSize, startIndex, startValue) {
+    if (end == null) {
+      end = string.search(/[^\s\u00a0]/);
+      if (end == -1) { end = string.length; }
+    }
+    for (var i = startIndex || 0, n = startValue || 0;;) {
+      var nextTab = string.indexOf("\t", i);
+      if (nextTab < 0 || nextTab >= end)
+        { return n + (end - i) }
+      n += nextTab - i;
+      n += tabSize - (n % tabSize);
+      i = nextTab + 1;
+    }
+  }
+
+  var Delayed = function() {this.id = null;};
+  Delayed.prototype.set = function (ms, f) {
+    clearTimeout(this.id);
+    this.id = setTimeout(f, ms);
+  };
+
+  function indexOf(array, elt) {
+    for (var i = 0; i < array.length; ++i)
+      { if (array[i] == elt) { return i } }
+    return -1
+  }
+
+  // Number of pixels added to scroller and sizer to hide scrollbar
+  var scrollerGap = 30;
+
+  // Returned or thrown by various protocols to signal 'I'm not
+  // handling this'.
+  var Pass = {toString: function(){return "CodeMirror.Pass"}};
+
+  // Reused option objects for setSelection & friends
+  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"};
+
+  // The inverse of countColumn -- find the offset that corresponds to
+  // a particular column.
+  function findColumn(string, goal, tabSize) {
+    for (var pos = 0, col = 0;;) {
+      var nextTab = string.indexOf("\t", pos);
+      if (nextTab == -1) { nextTab = string.length; }
+      var skipped = nextTab - pos;
+      if (nextTab == string.length || col + skipped >= goal)
+        { return pos + Math.min(skipped, goal - col) }
+      col += nextTab - pos;
+      col += tabSize - (col % tabSize);
+      pos = nextTab + 1;
+      if (col >= goal) { return pos }
+    }
+  }
+
+  var spaceStrs = [""];
+  function spaceStr(n) {
+    while (spaceStrs.length <= n)
+      { spaceStrs.push(lst(spaceStrs) + " "); }
+    return spaceStrs[n]
+  }
+
+  function lst(arr) { return arr[arr.length-1] }
+
+  function map(array, f) {
+    var out = [];
+    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
+    return out
+  }
+
+  function insertSorted(array, value, score) {
+    var pos = 0, priority = score(value);
+    while (pos < array.length && score(array[pos]) <= priority) { pos++; }
+    array.splice(pos, 0, value);
+  }
+
+  function nothing() {}
+
+  function createObj(base, props) {
+    var inst;
+    if (Object.create) {
+      inst = Object.create(base);
+    } else {
+      nothing.prototype = base;
+      inst = new nothing();
+    }
+    if (props) { copyObj(props, inst); }
+    return inst
+  }
+
+  var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
+  function isWordCharBasic(ch) {
+    return /\w/.test(ch) || ch > "\x80" &&
+      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+  }
+  function isWordChar(ch, helper) {
+    if (!helper) { return isWordCharBasic(ch) }
+    if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+    return helper.test(ch)
+  }
+
+  function isEmpty(obj) {
+    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+    return true
+  }
+
+  // Extending unicode characters. A series of a non-extending char +
+  // any number of extending chars is treated as a single unit as far
+  // as editing and measuring is concerned. This is not fully correct,
+  // since some scripts/fonts/browsers also treat other configurations
+  // of code points as a group.
+  var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+  function skipExtendingChars(str, pos, dir) {
+    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
+    return pos
+  }
+
+  // Returns the value from the range [`from`; `to`] that satisfies
+  // `pred` and is closest to `from`. Assumes that at least `to`
+  // satisfies `pred`. Supports `from` being greater than `to`.
+  function findFirst(pred, from, to) {
+    // At any point we are certain `to` satisfies `pred`, don't know
+    // whether `from` does.
+    var dir = from > to ? -1 : 1;
+    for (;;) {
+      if (from == to) { return from }
+      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
+      if (mid == from) { return pred(mid) ? from : to }
+      if (pred(mid)) { to = mid; }
+      else { from = mid + dir; }
+    }
+  }
+
+  // BIDI HELPERS
+
+  function iterateBidiSections(order, from, to, f) {
+    if (!order) { return f(from, to, "ltr", 0) }
+    var found = false;
+    for (var i = 0; i < order.length; ++i) {
+      var part = order[i];
+      if (part.from < to && part.to > from || from == to && part.to == from) {
+        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
+        found = true;
+      }
+    }
+    if (!found) { f(from, to, "ltr"); }
+  }
+
+  var bidiOther = null;
+  function getBidiPartAt(order, ch, sticky) {
+    var found;
+    bidiOther = null;
+    for (var i = 0; i < order.length; ++i) {
+      var cur = order[i];
+      if (cur.from < ch && cur.to > ch) { return i }
+      if (cur.to == ch) {
+        if (cur.from != cur.to && sticky == "before") { found = i; }
+        else { bidiOther = i; }
+      }
+      if (cur.from == ch) {
+        if (cur.from != cur.to && sticky != "before") { found = i; }
+        else { bidiOther = i; }
+      }
+    }
+    return found != null ? found : bidiOther
+  }
+
+  // Bidirectional ordering algorithm
+  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+  // that this (partially) implements.
+
+  // One-char codes used for character types:
+  // L (L):   Left-to-Right
+  // R (R):   Right-to-Left
+  // r (AL):  Right-to-Left Arabic
+  // 1 (EN):  European Number
+  // + (ES):  European Number Separator
+  // % (ET):  European Number Terminator
+  // n (AN):  Arabic Number
+  // , (CS):  Common Number Separator
+  // m (NSM): Non-Spacing Mark
+  // b (BN):  Boundary Neutral
+  // s (B):   Paragraph Separator
+  // t (S):   Segment Separator
+  // w (WS):  Whitespace
+  // N (ON):  Other Neutrals
+
+  // Returns null if characters are ordered as they appear
+  // (left-to-right), or an array of sections ({from, to, level}
+  // objects) in the order in which they occur visually.
+  var bidiOrdering = (function() {
+    // Character types for codepoints 0 to 0xff
+    var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
+    // Character types for codepoints 0x600 to 0x6f9
+    var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
+    function charType(code) {
+      if (code <= 0xf7) { return lowTypes.charAt(code) }
+      else if (0x590 <= code && code <= 0x5f4) { return "R" }
+      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+      else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+      else if (0x2000 <= code && code <= 0x200b) { return "w" }
+      else if (code == 0x200c) { return "b" }
+      else { return "L" }
+    }
+
+    var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
+    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
+
+    function BidiSpan(level, from, to) {
+      this.level = level;
+      this.from = from; this.to = to;
+    }
+
+    return function(str, direction) {
+      var outerType = direction == "ltr" ? "L" : "R";
+
+      if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+      var len = str.length, types = [];
+      for (var i = 0; i < len; ++i)
+        { types.push(charType(str.charCodeAt(i))); }
+
+      // W1. Examine each non-spacing mark (NSM) in the level run, and
+      // change the type of the NSM to the type of the previous
+      // character. If the NSM is at the start of the level run, it will
+      // get the type of sor.
+      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+        var type = types[i$1];
+        if (type == "m") { types[i$1] = prev; }
+        else { prev = type; }
+      }
+
+      // W2. Search backwards from each instance of a European number
+      // until the first strong type (R, L, AL, or sor) is found. If an
+      // AL is found, change the type of the European number to Arabic
+      // number.
+      // W3. Change all ALs to R.
+      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+        var type$1 = types[i$2];
+        if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
+        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
+      }
+
+      // W4. A single European separator between two European numbers
+      // changes to a European number. A single common separator between
+      // two numbers of the same type changes to that type.
+      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+        var type$2 = types[i$3];
+        if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
+        else if (type$2 == "," && prev$1 == types[i$3+1] &&
+                 (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
+        prev$1 = type$2;
+      }
+
+      // W5. A sequence of European terminators adjacent to European
+      // numbers changes to all European numbers.
+      // W6. Otherwise, separators and terminators change to Other
+      // Neutral.
+      for (var i$4 = 0; i$4 < len; ++i$4) {
+        var type$3 = types[i$4];
+        if (type$3 == ",") { types[i$4] = "N"; }
+        else if (type$3 == "%") {
+          var end = (void 0);
+          for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+          var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
+          for (var j = i$4; j < end; ++j) { types[j] = replace; }
+          i$4 = end - 1;
+        }
+      }
+
+      // W7. Search backwards from each instance of a European number
+      // until the first strong type (R, L, or sor) is found. If an L is
+      // found, then change the type of the European number to L.
+      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+        var type$4 = types[i$5];
+        if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
+        else if (isStrong.test(type$4)) { cur$1 = type$4; }
+      }
+
+      // N1. A sequence of neutrals takes the direction of the
+      // surrounding strong text if the text on both sides has the same
+      // direction. European and Arabic numbers act as if they were R in
+      // terms of their influence on neutrals. Start-of-level-run (sor)
+      // and end-of-level-run (eor) are used at level run boundaries.
+      // N2. Any remaining neutrals take the embedding direction.
+      for (var i$6 = 0; i$6 < len; ++i$6) {
+        if (isNeutral.test(types[i$6])) {
+          var end$1 = (void 0);
+          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+          var before = (i$6 ? types[i$6-1] : outerType) == "L";
+          var after = (end$1 < len ? types[end$1] : outerType) == "L";
+          var replace$1 = before == after ? (before ? "L" : "R") : outerType;
+          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
+          i$6 = end$1 - 1;
+        }
+      }
+
+      // Here we depart from the documented algorithm, in order to avoid
+      // building up an actual levels array. Since there are only three
+      // levels (0, 1, 2) in an implementation that doesn't take
+      // explicit embedding into account, we can build up the order on
+      // the fly, without following the level-based algorithm.
+      var order = [], m;
+      for (var i$7 = 0; i$7 < len;) {
+        if (countsAsLeft.test(types[i$7])) {
+          var start = i$7;
+          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+          order.push(new BidiSpan(0, start, i$7));
+        } else {
+          var pos = i$7, at = order.length;
+          for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+          for (var j$2 = pos; j$2 < i$7;) {
+            if (countsAsNum.test(types[j$2])) {
+              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }
+              var nstart = j$2;
+              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+              order.splice(at, 0, new BidiSpan(2, nstart, j$2));
+              pos = j$2;
+            } else { ++j$2; }
+          }
+          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
+        }
+      }
+      if (direction == "ltr") {
+        if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+          order[0].from = m[0].length;
+          order.unshift(new BidiSpan(0, 0, m[0].length));
+        }
+        if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+          lst(order).to -= m[0].length;
+          order.push(new BidiSpan(0, len - m[0].length, len));
+        }
+      }
+
+      return direction == "rtl" ? order.reverse() : order
+    }
+  })();
+
+  // Get the bidi ordering for the given line (and cache it). Returns
+  // false for lines that are fully left-to-right, and an array of
+  // BidiSpan objects otherwise.
+  function getOrder(line, direction) {
+    var order = line.order;
+    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
+    return order
+  }
+
+  // EVENT HANDLING
+
+  // Lightweight event framework. on/off also work on DOM nodes,
+  // registering native DOM handlers.
+
+  var noHandlers = [];
+
+  var on = function(emitter, type, f) {
+    if (emitter.addEventListener) {
+      emitter.addEventListener(type, f, false);
+    } else if (emitter.attachEvent) {
+      emitter.attachEvent("on" + type, f);
+    } else {
+      var map$$1 = emitter._handlers || (emitter._handlers = {});
+      map$$1[type] = (map$$1[type] || noHandlers).concat(f);
+    }
+  };
+
+  function getHandlers(emitter, type) {
+    return emitter._handlers && emitter._handlers[type] || noHandlers
+  }
+
+  function off(emitter, type, f) {
+    if (emitter.removeEventListener) {
+      emitter.removeEventListener(type, f, false);
+    } else if (emitter.detachEvent) {
+      emitter.detachEvent("on" + type, f);
+    } else {
+      var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];
+      if (arr) {
+        var index = indexOf(arr, f);
+        if (index > -1)
+          { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
+      }
+    }
+  }
+
+  function signal(emitter, type /*, values...*/) {
+    var handlers = getHandlers(emitter, type);
+    if (!handlers.length) { return }
+    var args = Array.prototype.slice.call(arguments, 2);
+    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
+  }
+
+  // The DOM events that CodeMirror handles can be overridden by
+  // registering a (non-DOM) handler on the editor for the event name,
+  // and preventDefault-ing the event in that handler.
+  function signalDOMEvent(cm, e, override) {
+    if (typeof e == "string")
+      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
+    signal(cm, override || e.type, cm, e);
+    return e_defaultPrevented(e) || e.codemirrorIgnore
+  }
+
+  function signalCursorActivity(cm) {
+    var arr = cm._handlers && cm._handlers.cursorActivity;
+    if (!arr) { return }
+    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
+    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+      { set.push(arr[i]); } }
+  }
+
+  function hasHandler(emitter, type) {
+    return getHandlers(emitter, type).length > 0
+  }
+
+  // Add on and off methods to a constructor's prototype, to make
+  // registering events on such objects more convenient.
+  function eventMixin(ctor) {
+    ctor.prototype.on = function(type, f) {on(this, type, f);};
+    ctor.prototype.off = function(type, f) {off(this, type, f);};
+  }
+
+  // Due to the fact that we still support jurassic IE versions, some
+  // compatibility wrappers are needed.
+
+  function e_preventDefault(e) {
+    if (e.preventDefault) { e.preventDefault(); }
+    else { e.returnValue = false; }
+  }
+  function e_stopPropagation(e) {
+    if (e.stopPropagation) { e.stopPropagation(); }
+    else { e.cancelBubble = true; }
+  }
+  function e_defaultPrevented(e) {
+    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+  }
+  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
+
+  function e_target(e) {return e.target || e.srcElement}
+  function e_button(e) {
+    var b = e.which;
+    if (b == null) {
+      if (e.button & 1) { b = 1; }
+      else if (e.button & 2) { b = 3; }
+      else if (e.button & 4) { b = 2; }
+    }
+    if (mac && e.ctrlKey && b == 1) { b = 3; }
+    return b
+  }
+
+  // Detect drag-and-drop
+  var dragAndDrop = function() {
+    // There is *some* kind of drag-and-drop support in IE6-8, but I
+    // couldn't get it to work yet.
+    if (ie && ie_version < 9) { return false }
+    var div = elt('div');
+    return "draggable" in div || "dragDrop" in div
+  }();
+
+  var zwspSupported;
+  function zeroWidthElement(measure) {
+    if (zwspSupported == null) {
+      var test = elt("span", "\u200b");
+      removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
+      if (measure.firstChild.offsetHeight != 0)
+        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
+    }
+    var node = zwspSupported ? elt("span", "\u200b") :
+      elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
+    node.setAttribute("cm-text", "");
+    return node
+  }
+
+  // Feature-detect IE's crummy client rect reporting for bidi text
+  var badBidiRects;
+  function hasBadBidiRects(measure) {
+    if (badBidiRects != null) { return badBidiRects }
+    var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
+    var r0 = range(txt, 0, 1).getBoundingClientRect();
+    var r1 = range(txt, 1, 2).getBoundingClientRect();
+    removeChildren(measure);
+    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+    return badBidiRects = (r1.right - r0.right < 3)
+  }
+
+  // See if "".split is the broken IE version, if so, provide an
+  // alternative way to split lines.
+  var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+    var pos = 0, result = [], l = string.length;
+    while (pos <= l) {
+      var nl = string.indexOf("\n", pos);
+      if (nl == -1) { nl = string.length; }
+      var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
+      var rt = line.indexOf("\r");
+      if (rt != -1) {
+        result.push(line.slice(0, rt));
+        pos += rt + 1;
+      } else {
+        result.push(line);
+        pos = nl + 1;
+      }
+    }
+    return result
+  } : function (string) { return string.split(/\r\n?|\n/); };
+
+  var hasSelection = window.getSelection ? function (te) {
+    try { return te.selectionStart != te.selectionEnd }
+    catch(e) { return false }
+  } : function (te) {
+    var range$$1;
+    try {range$$1 = te.ownerDocument.selection.createRange();}
+    catch(e) {}
+    if (!range$$1 || range$$1.parentElement() != te) { return false }
+    return range$$1.compareEndPoints("StartToEnd", range$$1) != 0
+  };
+
+  var hasCopyEvent = (function () {
+    var e = elt("div");
+    if ("oncopy" in e) { return true }
+    e.setAttribute("oncopy", "return;");
+    return typeof e.oncopy == "function"
+  })();
+
+  var badZoomedRects = null;
+  function hasBadZoomedRects(measure) {
+    if (badZoomedRects != null) { return badZoomedRects }
+    var node = removeChildrenAndAdd(measure, elt("span", "x"));
+    var normal = node.getBoundingClientRect();
+    var fromRange = range(node, 0, 1).getBoundingClientRect();
+    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+  }
+
+  // Known modes, by name and by MIME
+  var modes = {}, mimeModes = {};
+
+  // Extra arguments are stored as the mode's dependencies, which is
+  // used by (legacy) mechanisms like loadmode.js to automatically
+  // load a mode. (Preferred mechanism is the require/define calls.)
+  function defineMode(name, mode) {
+    if (arguments.length > 2)
+      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
+    modes[name] = mode;
+  }
+
+  function defineMIME(mime, spec) {
+    mimeModes[mime] = spec;
+  }
+
+  // Given a MIME type, a {name, ...options} config object, or a name
+  // string, return a mode config object.
+  function resolveMode(spec) {
+    if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+      spec = mimeModes[spec];
+    } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+      var found = mimeModes[spec.name];
+      if (typeof found == "string") { found = {name: found}; }
+      spec = createObj(found, spec);
+      spec.name = found.name;
+    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+      return resolveMode("application/xml")
+    } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+      return resolveMode("application/json")
+    }
+    if (typeof spec == "string") { return {name: spec} }
+    else { return spec || {name: "null"} }
+  }
+
+  // Given a mode spec (anything that resolveMode accepts), find and
+  // initialize an actual mode object.
+  function getMode(options, spec) {
+    spec = resolveMode(spec);
+    var mfactory = modes[spec.name];
+    if (!mfactory) { return getMode(options, "text/plain") }
+    var modeObj = mfactory(options, spec);
+    if (modeExtensions.hasOwnProperty(spec.name)) {
+      var exts = modeExtensions[spec.name];
+      for (var prop in exts) {
+        if (!exts.hasOwnProperty(prop)) { continue }
+        if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
+        modeObj[prop] = exts[prop];
+      }
+    }
+    modeObj.name = spec.name;
+    if (spec.helperType) { modeObj.helperType = spec.helperType; }
+    if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+      { modeObj[prop$1] = spec.modeProps[prop$1]; } }
+
+    return modeObj
+  }
+
+  // This can be used to attach properties to mode objects from
+  // outside the actual mode definition.
+  var modeExtensions = {};
+  function extendMode(mode, properties) {
+    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
+    copyObj(properties, exts);
+  }
+
+  function copyState(mode, state) {
+    if (state === true) { return state }
+    if (mode.copyState) { return mode.copyState(state) }
+    var nstate = {};
+    for (var n in state) {
+      var val = state[n];
+      if (val instanceof Array) { val = val.concat([]); }
+      nstate[n] = val;
+    }
+    return nstate
+  }
+
+  // Given a mode and a state (for that mode), find the inner mode and
+  // state at the position that the state refers to.
+  function innerMode(mode, state) {
+    var info;
+    while (mode.innerMode) {
+      info = mode.innerMode(state);
+      if (!info || info.mode == mode) { break }
+      state = info.state;
+      mode = info.mode;
+    }
+    return info || {mode: mode, state: state}
+  }
+
+  function startState(mode, a1, a2) {
+    return mode.startState ? mode.startState(a1, a2) : true
+  }
+
+  // STRING STREAM
+
+  // Fed to the mode parsers, provides helper functions to make
+  // parsers more succinct.
+
+  var StringStream = function(string, tabSize, lineOracle) {
+    this.pos = this.start = 0;
+    this.string = string;
+    this.tabSize = tabSize || 8;
+    this.lastColumnPos = this.lastColumnValue = 0;
+    this.lineStart = 0;
+    this.lineOracle = lineOracle;
+  };
+
+  StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+  StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+  StringStream.prototype.next = function () {
+    if (this.pos < this.string.length)
+      { return this.string.charAt(this.pos++) }
+  };
+  StringStream.prototype.eat = function (match) {
+    var ch = this.string.charAt(this.pos);
+    var ok;
+    if (typeof match == "string") { ok = ch == match; }
+    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
+    if (ok) {++this.pos; return ch}
+  };
+  StringStream.prototype.eatWhile = function (match) {
+    var start = this.pos;
+    while (this.eat(match)){}
+    return this.pos > start
+  };
+  StringStream.prototype.eatSpace = function () {
+      var this$1 = this;
+
+    var start = this.pos;
+    while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }
+    return this.pos > start
+  };
+  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
+  StringStream.prototype.skipTo = function (ch) {
+    var found = this.string.indexOf(ch, this.pos);
+    if (found > -1) {this.pos = found; return true}
+  };
+  StringStream.prototype.backUp = function (n) {this.pos -= n;};
+  StringStream.prototype.column = function () {
+    if (this.lastColumnPos < this.start) {
+      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
+      this.lastColumnPos = this.start;
+    }
+    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+  };
+  StringStream.prototype.indentation = function () {
+    return countColumn(this.string, null, this.tabSize) -
+      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+  };
+  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+    if (typeof pattern == "string") {
+      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
+      var substr = this.string.substr(this.pos, pattern.length);
+      if (cased(substr) == cased(pattern)) {
+        if (consume !== false) { this.pos += pattern.length; }
+        return true
+      }
+    } else {
+      var match = this.string.slice(this.pos).match(pattern);
+      if (match && match.index > 0) { return null }
+      if (match && consume !== false) { this.pos += match[0].length; }
+      return match
+    }
+  };
+  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+  StringStream.prototype.hideFirstChars = function (n, inner) {
+    this.lineStart += n;
+    try { return inner() }
+    finally { this.lineStart -= n; }
+  };
+  StringStream.prototype.lookAhead = function (n) {
+    var oracle = this.lineOracle;
+    return oracle && oracle.lookAhead(n)
+  };
+  StringStream.prototype.baseToken = function () {
+    var oracle = this.lineOracle;
+    return oracle && oracle.baseToken(this.pos)
+  };
+
+  // Find the line object corresponding to the given line number.
+  function getLine(doc, n) {
+    n -= doc.first;
+    if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+    var chunk = doc;
+    while (!chunk.lines) {
+      for (var i = 0;; ++i) {
+        var child = chunk.children[i], sz = child.chunkSize();
+        if (n < sz) { chunk = child; break }
+        n -= sz;
+      }
+    }
+    return chunk.lines[n]
+  }
+
+  // Get the part of a document between two positions, as an array of
+  // strings.
+  function getBetween(doc, start, end) {
+    var out = [], n = start.line;
+    doc.iter(start.line, end.line + 1, function (line) {
+      var text = line.text;
+      if (n == end.line) { text = text.slice(0, end.ch); }
+      if (n == start.line) { text = text.slice(start.ch); }
+      out.push(text);
+      ++n;
+    });
+    return out
+  }
+  // Get the lines between from and to, as array of strings.
+  function getLines(doc, from, to) {
+    var out = [];
+    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
+    return out
+  }
+
+  // Update the height of a line, propagating the height change
+  // upwards to parent nodes.
+  function updateLineHeight(line, height) {
+    var diff = height - line.height;
+    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
+  }
+
+  // Given a line object, find its line number by walking up through
+  // its parent links.
+  function lineNo(line) {
+    if (line.parent == null) { return null }
+    var cur = line.parent, no = indexOf(cur.lines, line);
+    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+      for (var i = 0;; ++i) {
+        if (chunk.children[i] == cur) { break }
+        no += chunk.children[i].chunkSize();
+      }
+    }
+    return no + cur.first
+  }
+
+  // Find the line at the given vertical position, using the height
+  // information in the document tree.
+  function lineAtHeight(chunk, h) {
+    var n = chunk.first;
+    outer: do {
+      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+        var child = chunk.children[i$1], ch = child.height;
+        if (h < ch) { chunk = child; continue outer }
+        h -= ch;
+        n += child.chunkSize();
+      }
+      return n
+    } while (!chunk.lines)
+    var i = 0;
+    for (; i < chunk.lines.length; ++i) {
+      var line = chunk.lines[i], lh = line.height;
+      if (h < lh) { break }
+      h -= lh;
+    }
+    return n + i
+  }
+
+  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+  function lineNumberFor(options, i) {
+    return String(options.lineNumberFormatter(i + options.firstLineNumber))
+  }
+
+  // A Pos instance represents a position within the text.
+  function Pos(line, ch, sticky) {
+    if ( sticky === void 0 ) sticky = null;
+
+    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+    this.line = line;
+    this.ch = ch;
+    this.sticky = sticky;
+  }
+
+  // Compare two positions, return 0 if they are the same, a negative
+  // number when a is less, and a positive number otherwise.
+  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+  function copyPos(x) {return Pos(x.line, x.ch)}
+  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+  // Most of the external API clips given positions to make sure they
+  // actually exist within the document.
+  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+  function clipPos(doc, pos) {
+    if (pos.line < doc.first) { return Pos(doc.first, 0) }
+    var last = doc.first + doc.size - 1;
+    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+    return clipToLen(pos, getLine(doc, pos.line).text.length)
+  }
+  function clipToLen(pos, linelen) {
+    var ch = pos.ch;
+    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+    else if (ch < 0) { return Pos(pos.line, 0) }
+    else { return pos }
+  }
+  function clipPosArray(doc, array) {
+    var out = [];
+    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
+    return out
+  }
+
+  var SavedContext = function(state, lookAhead) {
+    this.state = state;
+    this.lookAhead = lookAhead;
+  };
+
+  var Context = function(doc, state, line, lookAhead) {
+    this.state = state;
+    this.doc = doc;
+    this.line = line;
+    this.maxLookAhead = lookAhead || 0;
+    this.baseTokens = null;
+    this.baseTokenPos = 1;
+  };
+
+  Context.prototype.lookAhead = function (n) {
+    var line = this.doc.getLine(this.line + n);
+    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
+    return line
+  };
+
+  Context.prototype.baseToken = function (n) {
+      var this$1 = this;
+
+    if (!this.baseTokens) { return null }
+    while (this.baseTokens[this.baseTokenPos] <= n)
+      { this$1.baseTokenPos += 2; }
+    var type = this.baseTokens[this.baseTokenPos + 1];
+    return {type: type && type.replace(/( |^)overlay .*/, ""),
+            size: this.baseTokens[this.baseTokenPos] - n}
+  };
+
+  Context.prototype.nextLine = function () {
+    this.line++;
+    if (this.maxLookAhead > 0) { this.maxLookAhead--; }
+  };
+
+  Context.fromSaved = function (doc, saved, line) {
+    if (saved instanceof SavedContext)
+      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
+    else
+      { return new Context(doc, copyState(doc.mode, saved), line) }
+  };
+
+  Context.prototype.save = function (copy) {
+    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
+    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
+  };
+
+
+  // Compute a style array (an array starting with a mode generation
+  // -- for invalidation -- followed by pairs of end positions and
+  // style strings), which is used to highlight the tokens on the
+  // line.
+  function highlightLine(cm, line, context, forceToEnd) {
+    // A styles array always starts with a number identifying the
+    // mode/overlays that it is based on (for easy invalidation).
+    var st = [cm.state.modeGen], lineClasses = {};
+    // Compute the base array of styles
+    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
+            lineClasses, forceToEnd);
+    var state = context.state;
+
+    // Run overlays, adjust style array.
+    var loop = function ( o ) {
+      context.baseTokens = st;
+      var overlay = cm.state.overlays[o], i = 1, at = 0;
+      context.state = true;
+      runMode(cm, line.text, overlay.mode, context, function (end, style) {
+        var start = i;
+        // Ensure there's a token end at the current position, and that i points at it
+        while (at < end) {
+          var i_end = st[i];
+          if (i_end > end)
+            { st.splice(i, 1, end, st[i+1], i_end); }
+          i += 2;
+          at = Math.min(end, i_end);
+        }
+        if (!style) { return }
+        if (overlay.opaque) {
+          st.splice(start, i - start, end, "overlay " + style);
+          i = start + 2;
+        } else {
+          for (; start < i; start += 2) {
+            var cur = st[start+1];
+            st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
+          }
+        }
+      }, lineClasses);
+      context.state = state;
+      context.baseTokens = null;
+      context.baseTokenPos = 1;
+    };
+
+    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+  }
+
+  function getLineStyles(cm, line, updateFrontier) {
+    if (!line.styles || line.styles[0] != cm.state.modeGen) {
+      var context = getContextBefore(cm, lineNo(line));
+      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
+      var result = highlightLine(cm, line, context);
+      if (resetState) { context.state = resetState; }
+      line.stateAfter = context.save(!resetState);
+      line.styles = result.styles;
+      if (result.classes) { line.styleClasses = result.classes; }
+      else if (line.styleClasses) { line.styleClasses = null; }
+      if (updateFrontier === cm.doc.highlightFrontier)
+        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
+    }
+    return line.styles
+  }
+
+  function getContextBefore(cm, n, precise) {
+    var doc = cm.doc, display = cm.display;
+    if (!doc.mode.startState) { return new Context(doc, true, n) }
+    var start = findStartLine(cm, n, precise);
+    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
+    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);
+
+    doc.iter(start, n, function (line) {
+      processLine(cm, line.text, context);
+      var pos = context.line;
+      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
+      context.nextLine();
+    });
+    if (precise) { doc.modeFrontier = context.line; }
+    return context
+  }
+
+  // Lightweight form of highlight -- proceed over this line and
+  // update state, but don't save a style array. Used for lines that
+  // aren't currently visible.
+  function processLine(cm, text, context, startAt) {
+    var mode = cm.doc.mode;
+    var stream = new StringStream(text, cm.options.tabSize, context);
+    stream.start = stream.pos = startAt || 0;
+    if (text == "") { callBlankLine(mode, context.state); }
+    while (!stream.eol()) {
+      readToken(mode, stream, context.state);
+      stream.start = stream.pos;
+    }
+  }
+
+  function callBlankLine(mode, state) {
+    if (mode.blankLine) { return mode.blankLine(state) }
+    if (!mode.innerMode) { return }
+    var inner = innerMode(mode, state);
+    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+  }
+
+  function readToken(mode, stream, state, inner) {
+    for (var i = 0; i < 10; i++) {
+      if (inner) { inner[0] = innerMode(mode, state).mode; }
+      var style = mode.token(stream, state);
+      if (stream.pos > stream.start) { return style }
+    }
+    throw new Error("Mode " + mode.name + " failed to advance stream.")
+  }
+
+  var Token = function(stream, type, state) {
+    this.start = stream.start; this.end = stream.pos;
+    this.string = stream.current();
+    this.type = type || null;
+    this.state = state;
+  };
+
+  // Utility for getTokenAt and getLineTokens
+  function takeToken(cm, pos, precise, asArray) {
+    var doc = cm.doc, mode = doc.mode, style;
+    pos = clipPos(doc, pos);
+    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
+    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
+    if (asArray) { tokens = []; }
+    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+      stream.start = stream.pos;
+      style = readToken(mode, stream, context.state);
+      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
+    }
+    return asArray ? tokens : new Token(stream, style, context.state)
+  }
+
+  function extractLineClasses(type, output) {
+    if (type) { for (;;) {
+      var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
+      if (!lineClass) { break }
+      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
+      var prop = lineClass[1] ? "bgClass" : "textClass";
+      if (output[prop] == null)
+        { output[prop] = lineClass[2]; }
+      else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+        { output[prop] += " " + lineClass[2]; }
+    } }
+    return type
+  }
+
+  // Run the given mode's parser over a line, calling f for each token.
+  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
+    var flattenSpans = mode.flattenSpans;
+    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
+    var curStart = 0, curStyle = null;
+    var stream = new StringStream(text, cm.options.tabSize, context), style;
+    var inner = cm.options.addModeClass && [null];
+    if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
+    while (!stream.eol()) {
+      if (stream.pos > cm.options.maxHighlightLength) {
+        flattenSpans = false;
+        if (forceToEnd) { processLine(cm, text, context, stream.pos); }
+        stream.pos = text.length;
+        style = null;
+      } else {
+        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
+      }
+      if (inner) {
+        var mName = inner[0].name;
+        if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
+      }
+      if (!flattenSpans || curStyle != style) {
+        while (curStart < stream.start) {
+          curStart = Math.min(stream.start, curStart + 5000);
+          f(curStart, curStyle);
+        }
+        curStyle = style;
+      }
+      stream.start = stream.pos;
+    }
+    while (curStart < stream.pos) {
+      // Webkit seems to refuse to render text nodes longer than 57444
+      // characters, and returns inaccurate measurements in nodes
+      // starting around 5000 chars.
+      var pos = Math.min(stream.pos, curStart + 5000);
+      f(pos, curStyle);
+      curStart = pos;
+    }
+  }
+
+  // Finds the line to start with when starting a parse. Tries to
+  // find a line with a stateAfter, so that it can start with a
+  // valid state. If that fails, it returns the line with the
+  // smallest indentation, which tends to need the least context to
+  // parse correctly.
+  function findStartLine(cm, n, precise) {
+    var minindent, minline, doc = cm.doc;
+    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
+    for (var search = n; search > lim; --search) {
+      if (search <= doc.first) { return doc.first }
+      var line = getLine(doc, search - 1), after = line.stateAfter;
+      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
+        { return search }
+      var indented = countColumn(line.text, null, cm.options.tabSize);
+      if (minline == null || minindent > indented) {
+        minline = search - 1;
+        minindent = indented;
+      }
+    }
+    return minline
+  }
+
+  function retreatFrontier(doc, n) {
+    doc.modeFrontier = Math.min(doc.modeFrontier, n);
+    if (doc.highlightFrontier < n - 10) { return }
+    var start = doc.first;
+    for (var line = n - 1; line > start; line--) {
+      var saved = getLine(doc, line).stateAfter;
+      // change is on 3
+      // state on line 1 looked ahead 2 -- so saw 3
+      // test 1 + 2 < 3 should cover this
+      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
+        start = line + 1;
+        break
+      }
+    }
+    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
+  }
+
+  // Optimize some code when these features are not used.
+  var sawReadOnlySpans = false, sawCollapsedSpans = false;
+
+  function seeReadOnlySpans() {
+    sawReadOnlySpans = true;
+  }
+
+  function seeCollapsedSpans() {
+    sawCollapsedSpans = true;
+  }
+
+  // TEXTMARKER SPANS
+
+  function MarkedSpan(marker, from, to) {
+    this.marker = marker;
+    this.from = from; this.to = to;
+  }
+
+  // Search an array of spans for a span matching the given marker.
+  function getMarkedSpanFor(spans, marker) {
+    if (spans) { for (var i = 0; i < spans.length; ++i) {
+      var span = spans[i];
+      if (span.marker == marker) { return span }
+    } }
+  }
+  // Remove a span from an array, returning undefined if no spans are
+  // left (we don't store arrays for lines without spans).
+  function removeMarkedSpan(spans, span) {
+    var r;
+    for (var i = 0; i < spans.length; ++i)
+      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
+    return r
+  }
+  // Add a span to a line.
+  function addMarkedSpan(line, span) {
+    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
+    span.marker.attachLine(line);
+  }
+
+  // Used for the algorithm that adjusts markers for a change in the
+  // document. These functions cut an array of spans at a given
+  // character position, returning an array of remaining chunks (or
+  // undefined if nothing remains).
+  function markedSpansBefore(old, startCh, isInsert) {
+    var nw;
+    if (old) { for (var i = 0; i < old.length; ++i) {
+      var span = old[i], marker = span.marker;
+      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
+      if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)
+        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
+      }
+    } }
+    return nw
+  }
+  function markedSpansAfter(old, endCh, isInsert) {
+    var nw;
+    if (old) { for (var i = 0; i < old.length; ++i) {
+      var span = old[i], marker = span.marker;
+      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
+      if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)
+        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+                                              span.to == null ? null : span.to - endCh));
+      }
+    } }
+    return nw
+  }
+
+  // Given a change object, compute the new set of marker spans that
+  // cover the line in which the change took place. Removes spans
+  // entirely within the change, reconnects spans belonging to the
+  // same marker that appear on both sides of the change, and cuts off
+  // spans partially within the change. Returns an array of span
+  // arrays with one element for each line in (after) the change.
+  function stretchSpansOverChange(doc, change) {
+    if (change.full) { return null }
+    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
+    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
+    if (!oldFirst && !oldLast) { return null }
+
+    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
+    // Get the spans that 'stick out' on both sides
+    var first = markedSpansBefore(oldFirst, startCh, isInsert);
+    var last = markedSpansAfter(oldLast, endCh, isInsert);
+
+    // Next, merge those two ends
+    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
+    if (first) {
+      // Fix up .to properties of first
+      for (var i = 0; i < first.length; ++i) {
+        var span = first[i];
+        if (span.to == null) {
+          var found = getMarkedSpanFor(last, span.marker);
+          if (!found) { span.to = startCh; }
+          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
+        }
+      }
+    }
+    if (last) {
+      // Fix up .from in last (or move them into first in case of sameLine)
+      for (var i$1 = 0; i$1 < last.length; ++i$1) {
+        var span$1 = last[i$1];
+        if (span$1.to != null) { span$1.to += offset; }
+        if (span$1.from == null) {
+          var found$1 = getMarkedSpanFor(first, span$1.marker);
+          if (!found$1) {
+            span$1.from = offset;
+            if (sameLine) { (first || (first = [])).push(span$1); }
+          }
+        } else {
+          span$1.from += offset;
+          if (sameLine) { (first || (first = [])).push(span$1); }
+        }
+      }
+    }
+    // Make sure we didn't create any zero-length spans
+    if (first) { first = clearEmptySpans(first); }
+    if (last && last != first) { last = clearEmptySpans(last); }
+
+    var newMarkers = [first];
+    if (!sameLine) {
+      // Fill gap with whole-line-spans
+      var gap = change.text.length - 2, gapMarkers;
+      if (gap > 0 && first)
+        { for (var i$2 = 0; i$2 < first.length; ++i$2)
+          { if (first[i$2].to == null)
+            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
+      for (var i$3 = 0; i$3 < gap; ++i$3)
+        { newMarkers.push(gapMarkers); }
+      newMarkers.push(last);
+    }
+    return newMarkers
+  }
+
+  // Remove spans that are empty and don't have a clearWhenEmpty
+  // option of false.
+  function clearEmptySpans(spans) {
+    for (var i = 0; i < spans.length; ++i) {
+      var span = spans[i];
+      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+        { spans.splice(i--, 1); }
+    }
+    if (!spans.length) { return null }
+    return spans
+  }
+
+  // Used to 'clip' out readOnly ranges when making a change.
+  function removeReadOnlyRanges(doc, from, to) {
+    var markers = null;
+    doc.iter(from.line, to.line + 1, function (line) {
+      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+        var mark = line.markedSpans[i].marker;
+        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+          { (markers || (markers = [])).push(mark); }
+      } }
+    });
+    if (!markers) { return null }
+    var parts = [{from: from, to: to}];
+    for (var i = 0; i < markers.length; ++i) {
+      var mk = markers[i], m = mk.find(0);
+      for (var j = 0; j < parts.length; ++j) {
+        var p = parts[j];
+        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
+        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+          { newParts.push({from: p.from, to: m.from}); }
+        if (dto > 0 || !mk.inclusiveRight && !dto)
+          { newParts.push({from: m.to, to: p.to}); }
+        parts.splice.apply(parts, newParts);
+        j += newParts.length - 3;
+      }
+    }
+    return parts
+  }
+
+  // Connect or disconnect spans from a line.
+  function detachMarkedSpans(line) {
+    var spans = line.markedSpans;
+    if (!spans) { return }
+    for (var i = 0; i < spans.length; ++i)
+      { spans[i].marker.detachLine(line); }
+    line.markedSpans = null;
+  }
+  function attachMarkedSpans(line, spans) {
+    if (!spans) { return }
+    for (var i = 0; i < spans.length; ++i)
+      { spans[i].marker.attachLine(line); }
+    line.markedSpans = spans;
+  }
+
+  // Helpers used when computing which overlapping collapsed span
+  // counts as the larger one.
+  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+  // Returns a number indicating which of two overlapping collapsed
+  // spans is larger (and thus includes the other). Falls back to
+  // comparing ids when the spans cover exactly the same range.
+  function compareCollapsedMarkers(a, b) {
+    var lenDiff = a.lines.length - b.lines.length;
+    if (lenDiff != 0) { return lenDiff }
+    var aPos = a.find(), bPos = b.find();
+    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
+    if (fromCmp) { return -fromCmp }
+    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
+    if (toCmp) { return toCmp }
+    return b.id - a.id
+  }
+
+  // Find out whether a line ends or starts in a collapsed span. If
+  // so, return the marker for that span.
+  function collapsedSpanAtSide(line, start) {
+    var sps = sawCollapsedSpans && line.markedSpans, found;
+    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+      sp = sps[i];
+      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+          (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+        { found = sp.marker; }
+    } }
+    return found
+  }
+  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+  function collapsedSpanAround(line, ch) {
+    var sps = sawCollapsedSpans && line.markedSpans, found;
+    if (sps) { for (var i = 0; i < sps.length; ++i) {
+      var sp = sps[i];
+      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+    } }
+    return found
+  }
+
+  // Test whether there exists a collapsed span that partially
+  // overlaps (covers the start or end, but not both) of a new span.
+  // Such overlap is not allowed.
+  function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {
+    var line = getLine(doc, lineNo$$1);
+    var sps = sawCollapsedSpans && line.markedSpans;
+    if (sps) { for (var i = 0; i < sps.length; ++i) {
+      var sp = sps[i];
+      if (!sp.marker.collapsed) { continue }
+      var found = sp.marker.find(0);
+      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
+      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
+      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+        { return true }
+    } }
+  }
+
+  // A visual line is a line as drawn on the screen. Folding, for
+  // example, can cause multiple logical lines to appear on the same
+  // visual line. This finds the start of the visual line that the
+  // given line is part of (usually that is the line itself).
+  function visualLine(line) {
+    var merged;
+    while (merged = collapsedSpanAtStart(line))
+      { line = merged.find(-1, true).line; }
+    return line
+  }
+
+  function visualLineEnd(line) {
+    var merged;
+    while (merged = collapsedSpanAtEnd(line))
+      { line = merged.find(1, true).line; }
+    return line
+  }
+
+  // Returns an array of logical lines that continue the visual line
+  // started by the argument, or undefined if there are no such lines.
+  function visualLineContinued(line) {
+    var merged, lines;
+    while (merged = collapsedSpanAtEnd(line)) {
+      line = merged.find(1, true).line
+      ;(lines || (lines = [])).push(line);
+    }
+    return lines
+  }
+
+  // Get the line number of the start of the visual line that the
+  // given line number is part of.
+  function visualLineNo(doc, lineN) {
+    var line = getLine(doc, lineN), vis = visualLine(line);
+    if (line == vis) { return lineN }
+    return lineNo(vis)
+  }
+
+  // Get the line number of the start of the next visual line after
+  // the given line.
+  function visualLineEndNo(doc, lineN) {
+    if (lineN > doc.lastLine()) { return lineN }
+    var line = getLine(doc, lineN), merged;
+    if (!lineIsHidden(doc, line)) { return lineN }
+    while (merged = collapsedSpanAtEnd(line))
+      { line = merged.find(1, true).line; }
+    return lineNo(line) + 1
+  }
+
+  // Compute whether a line is hidden. Lines count as hidden when they
+  // are part of a visual line that starts with another line, or when
+  // they are entirely covered by collapsed, non-widget span.
+  function lineIsHidden(doc, line) {
+    var sps = sawCollapsedSpans && line.markedSpans;
+    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+      sp = sps[i];
+      if (!sp.marker.collapsed) { continue }
+      if (sp.from == null) { return true }
+      if (sp.marker.widgetNode) { continue }
+      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+        { return true }
+    } }
+  }
+  function lineIsHiddenInner(doc, line, span) {
+    if (span.to == null) {
+      var end = span.marker.find(1, true);
+      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+    }
+    if (span.marker.inclusiveRight && span.to == line.text.length)
+      { return true }
+    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+      sp = line.markedSpans[i];
+      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+          (sp.to == null || sp.to != span.from) &&
+          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+          lineIsHiddenInner(doc, line, sp)) { return true }
+    }
+  }
+
+  // Find the height above the given line.
+  function heightAtLine(lineObj) {
+    lineObj = visualLine(lineObj);
+
+    var h = 0, chunk = lineObj.parent;
+    for (var i = 0; i < chunk.lines.length; ++i) {
+      var line = chunk.lines[i];
+      if (line == lineObj) { break }
+      else { h += line.height; }
+    }
+    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+        var cur = p.children[i$1];
+        if (cur == chunk) { break }
+        else { h += cur.height; }
+      }
+    }
+    return h
+  }
+
+  // Compute the character length of a line, taking into account
+  // collapsed ranges (see markText) that might hide parts, and join
+  // other lines onto it.
+  function lineLength(line) {
+    if (line.height == 0) { return 0 }
+    var len = line.text.length, merged, cur = line;
+    while (merged = collapsedSpanAtStart(cur)) {
+      var found = merged.find(0, true);
+      cur = found.from.line;
+      len += found.from.ch - found.to.ch;
+    }
+    cur = line;
+    while (merged = collapsedSpanAtEnd(cur)) {
+      var found$1 = merged.find(0, true);
+      len -= cur.text.length - found$1.from.ch;
+      cur = found$1.to.line;
+      len += cur.text.length - found$1.to.ch;
+    }
+    return len
+  }
+
+  // Find the longest line in the document.
+  function findMaxLine(cm) {
+    var d = cm.display, doc = cm.doc;
+    d.maxLine = getLine(doc, doc.first);
+    d.maxLineLength = lineLength(d.maxLine);
+    d.maxLineChanged = true;
+    doc.iter(function (line) {
+      var len = lineLength(line);
+      if (len > d.maxLineLength) {
+        d.maxLineLength = len;
+        d.maxLine = line;
+      }
+    });
+  }
+
+  // LINE DATA STRUCTURE
+
+  // Line objects. These hold state related to a line, including
+  // highlighting info (the styles array).
+  var Line = function(text, markedSpans, estimateHeight) {
+    this.text = text;
+    attachMarkedSpans(this, markedSpans);
+    this.height = estimateHeight ? estimateHeight(this) : 1;
+  };
+
+  Line.prototype.lineNo = function () { return lineNo(this) };
+  eventMixin(Line);
+
+  // Change the content (text, markers) of a line. Automatically
+  // invalidates cached information and tries to re-estimate the
+  // line's height.
+  function updateLine(line, text, markedSpans, estimateHeight) {
+    line.text = text;
+    if (line.stateAfter) { line.stateAfter = null; }
+    if (line.styles) { line.styles = null; }
+    if (line.order != null) { line.order = null; }
+    detachMarkedSpans(line);
+    attachMarkedSpans(line, markedSpans);
+    var estHeight = estimateHeight ? estimateHeight(line) : 1;
+    if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+  }
+
+  // Detach a line from the document tree and its markers.
+  function cleanUpLine(line) {
+    line.parent = null;
+    detachMarkedSpans(line);
+  }
+
+  // Convert a style as returned by a mode (either null, or a string
+  // containing one or more styles) to a CSS style. This is cached,
+  // and also looks for line-wide styles.
+  var styleToClassCache = {}, styleToClassCacheWithMode = {};
+  function interpretTokenStyle(style, options) {
+    if (!style || /^\s*$/.test(style)) { return null }
+    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
+    return cache[style] ||
+      (cache[style] = style.replace(/\S+/g, "cm-$&"))
+  }
+
+  // Render the DOM representation of the text of a line. Also builds
+  // up a 'line map', which points at the DOM nodes that represent
+  // specific stretches of text, and is used by the measuring code.
+  // The returned object contains the DOM node, this map, and
+  // information about line-wide styles that were set by the mode.
+  function buildLineContent(cm, lineView) {
+    // The padding-right forces the element to have a 'border', which
+    // is needed on Webkit to be able to get line-level bounding
+    // rectangles for it (in measureChar).
+    var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
+    var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+                   col: 0, pos: 0, cm: cm,
+                   trailingSpace: false,
+                   splitSpaces: cm.getOption("lineWrapping")};
+    lineView.measure = {};
+
+    // Iterate over the logical lines that make up this visual line.
+    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
+      builder.pos = 0;
+      builder.addToken = buildToken;
+      // Optionally wire in some hacks into the token-rendering
+      // algorithm, to deal with browser quirks.
+      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
+      builder.map = [];
+      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
+      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
+      if (line.styleClasses) {
+        if (line.styleClasses.bgClass)
+          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
+        if (line.styleClasses.textClass)
+          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
+      }
+
+      // Ensure at least a single node is present, for measuring.
+      if (builder.map.length == 0)
+        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }
+
+      // Store the map and a cache object for the current logical line
+      if (i == 0) {
+        lineView.measure.map = builder.map;
+        lineView.measure.cache = {};
+      } else {
+  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
+      }
+    }
+
+    // See issue #2901
+    if (webkit) {
+      var last = builder.content.lastChild;
+      if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+        { builder.content.className = "cm-tab-wrap-hack"; }
+    }
+
+    signal(cm, "renderLine", cm, lineView.line, builder.pre);
+    if (builder.pre.className)
+      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }
+
+    return builder
+  }
+
+  function defaultSpecialCharPlaceholder(ch) {
+    var token = elt("span", "\u2022", "cm-invalidchar");
+    token.title = "\\u" + ch.charCodeAt(0).toString(16);
+    token.setAttribute("aria-label", token.title);
+    return token
+  }
+
+  // Build up the DOM representation for a single token, and add it to
+  // the line map. Takes care to render special characters separately.
+  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
+    if (!text) { return }
+    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
+    var special = builder.cm.state.specialChars, mustWrap = false;
+    var content;
+    if (!special.test(text)) {
+      builder.col += text.length;
+      content = document.createTextNode(displayText);
+      builder.map.push(builder.pos, builder.pos + text.length, content);
+      if (ie && ie_version < 9) { mustWrap = true; }
+      builder.pos += text.length;
+    } else {
+      content = document.createDocumentFragment();
+      var pos = 0;
+      while (true) {
+        special.lastIndex = pos;
+        var m = special.exec(text);
+        var skipped = m ? m.index - pos : text.length - pos;
+        if (skipped) {
+          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
+          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
+          else { content.appendChild(txt); }
+          builder.map.push(builder.pos, builder.pos + skipped, txt);
+          builder.col += skipped;
+          builder.pos += skipped;
+        }
+        if (!m) { break }
+        pos += skipped + 1;
+        var txt$1 = (void 0);
+        if (m[0] == "\t") {
+          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
+          txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
+          txt$1.setAttribute("role", "presentation");
+          txt$1.setAttribute("cm-text", "\t");
+          builder.col += tabWidth;
+        } else if (m[0] == "\r" || m[0] == "\n") {
+          txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
+          txt$1.setAttribute("cm-text", m[0]);
+          builder.col += 1;
+        } else {
+          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
+          txt$1.setAttribute("cm-text", m[0]);
+          if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
+          else { content.appendChild(txt$1); }
+          builder.col += 1;
+        }
+        builder.map.push(builder.pos, builder.pos + 1, txt$1);
+        builder.pos++;
+      }
+    }
+    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
+    if (style || startStyle || endStyle || mustWrap || css) {
+      var fullStyle = style || "";
+      if (startStyle) { fullStyle += startStyle; }
+      if (endStyle) { fullStyle += endStyle; }
+      var token = elt("span", [content], fullStyle, css);
+      if (attributes) {
+        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class")
+          { token.setAttribute(attr, attributes[attr]); } }
+      }
+      return builder.content.appendChild(token)
+    }
+    builder.content.appendChild(content);
+  }
+
+  // Change some spaces to NBSP to prevent the browser from collapsing
+  // trailing spaces at the end of a line when rendering text (issue #1362).
+  function splitSpaces(text, trailingBefore) {
+    if (text.length > 1 && !/  /.test(text)) { return text }
+    var spaceBefore = trailingBefore, result = "";
+    for (var i = 0; i < text.length; i++) {
+      var ch = text.charAt(i);
+      if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+        { ch = "\u00a0"; }
+      result += ch;
+      spaceBefore = ch == " ";
+    }
+    return result
+  }
+
+  // Work around nonsense dimensions being reported for stretches of
+  // right-to-left text.
+  function buildTokenBadBidi(inner, order) {
+    return function (builder, text, style, startStyle, endStyle, css, attributes) {
+      style = style ? style + " cm-force-border" : "cm-force-border";
+      var start = builder.pos, end = start + text.length;
+      for (;;) {
+        // Find the part that overlaps with the start of this text
+        var part = (void 0);
+        for (var i = 0; i < order.length; i++) {
+          part = order[i];
+          if (part.to > start && part.from <= start) { break }
+        }
+        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }
+        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
+        startStyle = null;
+        text = text.slice(part.to - start);
+        start = part.to;
+      }
+    }
+  }
+
+  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+    var widget = !ignoreWidget && marker.widgetNode;
+    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
+    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+      if (!widget)
+        { widget = builder.content.appendChild(document.createElement("span")); }
+      widget.setAttribute("cm-marker", marker.id);
+    }
+    if (widget) {
+      builder.cm.display.input.setUneditable(widget);
+      builder.content.appendChild(widget);
+    }
+    builder.pos += size;
+    builder.trailingSpace = false;
+  }
+
+  // Outputs a number of spans to make up a line, taking highlighting
+  // and marked text into account.
+  function insertLineContent(line, builder, styles) {
+    var spans = line.markedSpans, allText = line.text, at = 0;
+    if (!spans) {
+      for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
+      return
+    }
+
+    var len = allText.length, pos = 0, i = 1, text = "", style, css;
+    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
+    for (;;) {
+      if (nextChange == pos) { // Update current marker set
+        spanStyle = spanEndStyle = spanStartStyle = css = "";
+        attributes = null;
+        collapsed = null; nextChange = Infinity;
+        var foundBookmarks = [], endStyles = (void 0);
+        for (var j = 0; j < spans.length; ++j) {
+          var sp = spans[j], m = sp.marker;
+          if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+            foundBookmarks.push(m);
+          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+            if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+              nextChange = sp.to;
+              spanEndStyle = "";
+            }
+            if (m.className) { spanStyle += " " + m.className; }
+            if (m.css) { css = (css ? css + ";" : "") + m.css; }
+            if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
+            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
+            // support for the old title property
+            // https://github.com/codemirror/CodeMirror/pull/5673
+            if (m.title) { (attributes || (attributes = {})).title = m.title; }
+            if (m.attributes) {
+              for (var attr in m.attributes)
+                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }
+            }
+            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+              { collapsed = sp; }
+          } else if (sp.from > pos && nextChange > sp.from) {
+            nextChange = sp.from;
+          }
+        }
+        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }
+
+        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
+        if (collapsed && (collapsed.from || 0) == pos) {
+          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+                             collapsed.marker, collapsed.from == null);
+          if (collapsed.to == null) { return }
+          if (collapsed.to == pos) { collapsed = false; }
+        }
+      }
+      if (pos >= len) { break }
+
+      var upto = Math.min(len, nextChange);
+      while (true) {
+        if (text) {
+          var end = pos + text.length;
+          if (!collapsed) {
+            var tokenText = end > upto ? text.slice(0, upto - pos) : text;
+            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
+          }
+          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+          pos = end;
+          spanStartStyle = "";
+        }
+        text = allText.slice(at, at = styles[i++]);
+        style = interpretTokenStyle(styles[i++], builder.cm.options);
+      }
+    }
+  }
+
+
+  // These objects are used to represent the visible (currently drawn)
+  // part of the document. A LineView may correspond to multiple
+  // logical lines, if those are connected by collapsed ranges.
+  function LineView(doc, line, lineN) {
+    // The starting line
+    this.line = line;
+    // Continuing lines, if any
+    this.rest = visualLineContinued(line);
+    // Number of logical lines in this visual line
+    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
+    this.node = this.text = null;
+    this.hidden = lineIsHidden(doc, line);
+  }
+
+  // Create a range of LineView objects for the given lines.
+  function buildViewArray(cm, from, to) {
+    var array = [], nextPos;
+    for (var pos = from; pos < to; pos = nextPos) {
+      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
+      nextPos = pos + view.size;
+      array.push(view);
+    }
+    return array
+  }
+
+  var operationGroup = null;
+
+  function pushOperation(op) {
+    if (operationGroup) {
+      operationGroup.ops.push(op);
+    } else {
+      op.ownsGroup = operationGroup = {
+        ops: [op],
+        delayedCallbacks: []
+      };
+    }
+  }
+
+  function fireCallbacksForOps(group) {
+    // Calls delayed callbacks and cursorActivity handlers until no
+    // new ones appear
+    var callbacks = group.delayedCallbacks, i = 0;
+    do {
+      for (; i < callbacks.length; i++)
+        { callbacks[i].call(null); }
+      for (var j = 0; j < group.ops.length; j++) {
+        var op = group.ops[j];
+        if (op.cursorActivityHandlers)
+          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
+      }
+    } while (i < callbacks.length)
+  }
+
+  function finishOperation(op, endCb) {
+    var group = op.ownsGroup;
+    if (!group) { return }
+
+    try { fireCallbacksForOps(group); }
+    finally {
+      operationGroup = null;
+      endCb(group);
+    }
+  }
+
+  var orphanDelayedCallbacks = null;
+
+  // Often, we want to signal events at a point where we are in the
+  // middle of some work, but don't want the handler to start calling
+  // other methods on the editor, which might be in an inconsistent
+  // state or simply not expect any other events to happen.
+  // signalLater looks whether there are any handlers, and schedules
+  // them to be executed when the last operation ends, or, if no
+  // operation is active, when a timeout fires.
+  function signalLater(emitter, type /*, values...*/) {
+    var arr = getHandlers(emitter, type);
+    if (!arr.length) { return }
+    var args = Array.prototype.slice.call(arguments, 2), list;
+    if (operationGroup) {
+      list = operationGroup.delayedCallbacks;
+    } else if (orphanDelayedCallbacks) {
+      list = orphanDelayedCallbacks;
+    } else {
+      list = orphanDelayedCallbacks = [];
+      setTimeout(fireOrphanDelayed, 0);
+    }
+    var loop = function ( i ) {
+      list.push(function () { return arr[i].apply(null, args); });
+    };
+
+    for (var i = 0; i < arr.length; ++i)
+      loop( i );
+  }
+
+  function fireOrphanDelayed() {
+    var delayed = orphanDelayedCallbacks;
+    orphanDelayedCallbacks = null;
+    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
+  }
+
+  // When an aspect of a line changes, a string is added to
+  // lineView.changes. This updates the relevant part of the line's
+  // DOM structure.
+  function updateLineForChanges(cm, lineView, lineN, dims) {
+    for (var j = 0; j < lineView.changes.length; j++) {
+      var type = lineView.changes[j];
+      if (type == "text") { updateLineText(cm, lineView); }
+      else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
+      else if (type == "class") { updateLineClasses(cm, lineView); }
+      else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
+    }
+    lineView.changes = null;
+  }
+
+  // Lines with gutter elements, widgets or a background class need to
+  // be wrapped, and have the extra elements added to the wrapper div
+  function ensureLineWrapped(lineView) {
+    if (lineView.node == lineView.text) {
+      lineView.node = elt("div", null, null, "position: relative");
+      if (lineView.text.parentNode)
+        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
+      lineView.node.appendChild(lineView.text);
+      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
+    }
+    return lineView.node
+  }
+
+  function updateLineBackground(cm, lineView) {
+    var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
+    if (cls) { cls += " CodeMirror-linebackground"; }
+    if (lineView.background) {
+      if (cls) { lineView.background.className = cls; }
+      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
+    } else if (cls) {
+      var wrap = ensureLineWrapped(lineView);
+      lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
+      cm.display.input.setUneditable(lineView.background);
+    }
+  }
+
+  // Wrapper around buildLineContent which will reuse the structure
+  // in display.externalMeasured when possible.
+  function getLineContent(cm, lineView) {
+    var ext = cm.display.externalMeasured;
+    if (ext && ext.line == lineView.line) {
+      cm.display.externalMeasured = null;
+      lineView.measure = ext.measure;
+      return ext.built
+    }
+    return buildLineContent(cm, lineView)
+  }
+
+  // Redraw the line's text. Interacts with the background and text
+  // classes because the mode may output tokens that influence these
+  // classes.
+  function updateLineText(cm, lineView) {
+    var cls = lineView.text.className;
+    var built = getLineContent(cm, lineView);
+    if (lineView.text == lineView.node) { lineView.node = built.pre; }
+    lineView.text.parentNode.replaceChild(built.pre, lineView.text);
+    lineView.text = built.pre;
+    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+      lineView.bgClass = built.bgClass;
+      lineView.textClass = built.textClass;
+      updateLineClasses(cm, lineView);
+    } else if (cls) {
+      lineView.text.className = cls;
+    }
+  }
+
+  function updateLineClasses(cm, lineView) {
+    updateLineBackground(cm, lineView);
+    if (lineView.line.wrapClass)
+      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
+    else if (lineView.node != lineView.text)
+      { lineView.node.className = ""; }
+    var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
+    lineView.text.className = textClass || "";
+  }
+
+  function updateLineGutter(cm, lineView, lineN, dims) {
+    if (lineView.gutter) {
+      lineView.node.removeChild(lineView.gutter);
+      lineView.gutter = null;
+    }
+    if (lineView.gutterBackground) {
+      lineView.node.removeChild(lineView.gutterBackground);
+      lineView.gutterBackground = null;
+    }
+    if (lineView.line.gutterClass) {
+      var wrap = ensureLineWrapped(lineView);
+      lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+                                      ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
+      cm.display.input.setUneditable(lineView.gutterBackground);
+      wrap.insertBefore(lineView.gutterBackground, lineView.text);
+    }
+    var markers = lineView.line.gutterMarkers;
+    if (cm.options.lineNumbers || markers) {
+      var wrap$1 = ensureLineWrapped(lineView);
+      var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
+      cm.display.input.setUneditable(gutterWrap);
+      wrap$1.insertBefore(gutterWrap, lineView.text);
+      if (lineView.line.gutterClass)
+        { gutterWrap.className += " " + lineView.line.gutterClass; }
+      if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+        { lineView.lineNumber = gutterWrap.appendChild(
+          elt("div", lineNumberFor(cm.options, lineN),
+              "CodeMirror-linenumber CodeMirror-gutter-elt",
+              ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
+      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
+        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
+        if (found)
+          { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+                                     ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
+      } }
+    }
+  }
+
+  function updateLineWidgets(cm, lineView, dims) {
+    if (lineView.alignable) { lineView.alignable = null; }
+    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+      next = node.nextSibling;
+      if (node.className == "CodeMirror-linewidget")
+        { lineView.node.removeChild(node); }
+    }
+    insertLineWidgets(cm, lineView, dims);
+  }
+
+  // Build a line's DOM representation from scratch
+  function buildLineElement(cm, lineView, lineN, dims) {
+    var built = getLineContent(cm, lineView);
+    lineView.text = lineView.node = built.pre;
+    if (built.bgClass) { lineView.bgClass = built.bgClass; }
+    if (built.textClass) { lineView.textClass = built.textClass; }
+
+    updateLineClasses(cm, lineView);
+    updateLineGutter(cm, lineView, lineN, dims);
+    insertLineWidgets(cm, lineView, dims);
+    return lineView.node
+  }
+
+  // A lineView may contain multiple logical lines (when merged by
+  // collapsed spans). The widgets for all of them need to be drawn.
+  function insertLineWidgets(cm, lineView, dims) {
+    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
+    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
+  }
+
+  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+    if (!line.widgets) { return }
+    var wrap = ensureLineWrapped(lineView);
+    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+      var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
+      if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
+      positionLineWidget(widget, node, lineView, dims);
+      cm.display.input.setUneditable(node);
+      if (allowAbove && widget.above)
+        { wrap.insertBefore(node, lineView.gutter || lineView.text); }
+      else
+        { wrap.appendChild(node); }
+      signalLater(widget, "redraw");
+    }
+  }
+
+  function positionLineWidget(widget, node, lineView, dims) {
+    if (widget.noHScroll) {
+  (lineView.alignable || (lineView.alignable = [])).push(node);
+      var width = dims.wrapperWidth;
+      node.style.left = dims.fixedPos + "px";
+      if (!widget.coverGutter) {
+        width -= dims.gutterTotalWidth;
+        node.style.paddingLeft = dims.gutterTotalWidth + "px";
+      }
+      node.style.width = width + "px";
+    }
+    if (widget.coverGutter) {
+      node.style.zIndex = 5;
+      node.style.position = "relative";
+      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
+    }
+  }
+
+  function widgetHeight(widget) {
+    if (widget.height != null) { return widget.height }
+    var cm = widget.doc.cm;
+    if (!cm) { return 0 }
+    if (!contains(document.body, widget.node)) {
+      var parentStyle = "position: relative;";
+      if (widget.coverGutter)
+        { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
+      if (widget.noHScroll)
+        { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
+      removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
+    }
+    return widget.height = widget.node.parentNode.offsetHeight
+  }
+
+  // Return true when the given mouse event happened in a widget
+  function eventInWidget(display, e) {
+    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+      if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+          (n.parentNode == display.sizer && n != display.mover))
+        { return true }
+    }
+  }
+
+  // POSITION MEASUREMENT
+
+  function paddingTop(display) {return display.lineSpace.offsetTop}
+  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+  function paddingH(display) {
+    if (display.cachedPaddingH) { return display.cachedPaddingH }
+    var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like"));
+    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
+    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
+    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
+    return data
+  }
+
+  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+  function displayWidth(cm) {
+    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+  }
+  function displayHeight(cm) {
+    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+  }
+
+  // Ensure the lineView.wrapping.heights array is populated. This is
+  // an array of bottom offsets for the lines that make up a drawn
+  // line. When lineWrapping is on, there might be more than one
+  // height.
+  function ensureLineHeights(cm, lineView, rect) {
+    var wrapping = cm.options.lineWrapping;
+    var curWidth = wrapping && displayWidth(cm);
+    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+      var heights = lineView.measure.heights = [];
+      if (wrapping) {
+        lineView.measure.width = curWidth;
+        var rects = lineView.text.firstChild.getClientRects();
+        for (var i = 0; i < rects.length - 1; i++) {
+          var cur = rects[i], next = rects[i + 1];
+          if (Math.abs(cur.bottom - next.bottom) > 2)
+            { heights.push((cur.bottom + next.top) / 2 - rect.top); }
+        }
+      }
+      heights.push(rect.bottom - rect.top);
+    }
+  }
+
+  // Find a line map (mapping character offsets to text nodes) and a
+  // measurement cache for the given line number. (A line view might
+  // contain multiple lines when collapsed ranges are present.)
+  function mapFromLineView(lineView, line, lineN) {
+    if (lineView.line == line)
+      { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+    for (var i = 0; i < lineView.rest.length; i++)
+      { if (lineView.rest[i] == line)
+        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+      { if (lineNo(lineView.rest[i$1]) > lineN)
+        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+  }
+
+  // Render a line into the hidden node display.externalMeasured. Used
+  // when measurement is needed for a line that's not in the viewport.
+  function updateExternalMeasurement(cm, line) {
+    line = visualLine(line);
+    var lineN = lineNo(line);
+    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
+    view.lineN = lineN;
+    var built = view.built = buildLineContent(cm, view);
+    view.text = built.pre;
+    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
+    return view
+  }
+
+  // Get a {top, bottom, left, right} box (in line-local coordinates)
+  // for a given character.
+  function measureChar(cm, line, ch, bias) {
+    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+  }
+
+  // Find a line view that corresponds to the given line number.
+  function findViewForLine(cm, lineN) {
+    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+      { return cm.display.view[findViewIndex(cm, lineN)] }
+    var ext = cm.display.externalMeasured;
+    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+      { return ext }
+  }
+
+  // Measurement can be split in two steps, the set-up work that
+  // applies to the whole line, and the measurement of the actual
+  // character. Functions like coordsChar, that need to do a lot of
+  // measurements in a row, can thus ensure that the set-up work is
+  // only done once.
+  function prepareMeasureForLine(cm, line) {
+    var lineN = lineNo(line);
+    var view = findViewForLine(cm, lineN);
+    if (view && !view.text) {
+      view = null;
+    } else if (view && view.changes) {
+      updateLineForChanges(cm, view, lineN, getDimensions(cm));
+      cm.curOp.forceUpdate = true;
+    }
+    if (!view)
+      { view = updateExternalMeasurement(cm, line); }
+
+    var info = mapFromLineView(view, line, lineN);
+    return {
+      line: line, view: view, rect: null,
+      map: info.map, cache: info.cache, before: info.before,
+      hasHeights: false
+    }
+  }
+
+  // Given a prepared measurement object, measures the position of an
+  // actual character (or fetches it from the cache).
+  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+    if (prepared.before) { ch = -1; }
+    var key = ch + (bias || ""), found;
+    if (prepared.cache.hasOwnProperty(key)) {
+      found = prepared.cache[key];
+    } else {
+      if (!prepared.rect)
+        { prepared.rect = prepared.view.text.getBoundingClientRect(); }
+      if (!prepared.hasHeights) {
+        ensureLineHeights(cm, prepared.view, prepared.rect);
+        prepared.hasHeights = true;
+      }
+      found = measureCharInner(cm, prepared, ch, bias);
+      if (!found.bogus) { prepared.cache[key] = found; }
+    }
+    return {left: found.left, right: found.right,
+            top: varHeight ? found.rtop : found.top,
+            bottom: varHeight ? found.rbottom : found.bottom}
+  }
+
+  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
+
+  function nodeAndOffsetInLineMap(map$$1, ch, bias) {
+    var node, start, end, collapse, mStart, mEnd;
+    // First, search the line map for the text node corresponding to,
+    // or closest to, the target character.
+    for (var i = 0; i < map$$1.length; i += 3) {
+      mStart = map$$1[i];
+      mEnd = map$$1[i + 1];
+      if (ch < mStart) {
+        start = 0; end = 1;
+        collapse = "left";
+      } else if (ch < mEnd) {
+        start = ch - mStart;
+        end = start + 1;
+      } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {
+        end = mEnd - mStart;
+        start = end - 1;
+        if (ch >= mEnd) { collapse = "right"; }
+      }
+      if (start != null) {
+        node = map$$1[i + 2];
+        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+          { collapse = bias; }
+        if (bias == "left" && start == 0)
+          { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {
+            node = map$$1[(i -= 3) + 2];
+            collapse = "left";
+          } }
+        if (bias == "right" && start == mEnd - mStart)
+          { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {
+            node = map$$1[(i += 3) + 2];
+            collapse = "right";
+          } }
+        break
+      }
+    }
+    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+  }
+
+  function getUsefulRect(rects, bias) {
+    var rect = nullRect;
+    if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+      if ((rect = rects[i]).left != rect.right) { break }
+    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+      if ((rect = rects[i$1]).left != rect.right) { break }
+    } }
+    return rect
+  }
+
+  function measureCharInner(cm, prepared, ch, bias) {
+    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
+    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
+
+    var rect;
+    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
+        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
+        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+          { rect = node.parentNode.getBoundingClientRect(); }
+        else
+          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
+        if (rect.left || rect.right || start == 0) { break }
+        end = start;
+        start = start - 1;
+        collapse = "right";
+      }
+      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
+    } else { // If it is a widget, simply get the box for the whole widget.
+      if (start > 0) { collapse = bias = "right"; }
+      var rects;
+      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+        { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
+      else
+        { rect = node.getBoundingClientRect(); }
+    }
+    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+      var rSpan = node.parentNode.getClientRects()[0];
+      if (rSpan)
+        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
+      else
+        { rect = nullRect; }
+    }
+
+    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
+    var mid = (rtop + rbot) / 2;
+    var heights = prepared.view.measure.heights;
+    var i = 0;
+    for (; i < heights.length - 1; i++)
+      { if (mid < heights[i]) { break } }
+    var top = i ? heights[i - 1] : 0, bot = heights[i];
+    var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+                  right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+                  top: top, bottom: bot};
+    if (!rect.left && !rect.right) { result.bogus = true; }
+    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
+
+    return result
+  }
+
+  // Work around problem with bounding client rects on ranges being
+  // returned incorrectly when zoomed on IE10 and below.
+  function maybeUpdateRectForZooming(measure, rect) {
+    if (!window.screen || screen.logicalXDPI == null ||
+        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+      { return rect }
+    var scaleX = screen.logicalXDPI / screen.deviceXDPI;
+    var scaleY = screen.logicalYDPI / screen.deviceYDPI;
+    return {left: rect.left * scaleX, right: rect.right * scaleX,
+            top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+  }
+
+  function clearLineMeasurementCacheFor(lineView) {
+    if (lineView.measure) {
+      lineView.measure.cache = {};
+      lineView.measure.heights = null;
+      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+        { lineView.measure.caches[i] = {}; } }
+    }
+  }
+
+  function clearLineMeasurementCache(cm) {
+    cm.display.externalMeasure = null;
+    removeChildren(cm.display.lineMeasure);
+    for (var i = 0; i < cm.display.view.length; i++)
+      { clearLineMeasurementCacheFor(cm.display.view[i]); }
+  }
+
+  function clearCaches(cm) {
+    clearLineMeasurementCache(cm);
+    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
+    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
+    cm.display.lineNumChars = null;
+  }
+
+  function pageScrollX() {
+    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+    // which causes page_Offset and bounding client rects to use
+    // different reference viewports and invalidate our calculations.
+    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+    return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+  }
+  function pageScrollY() {
+    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+    return window.pageYOffset || (document.documentElement || document.body).scrollTop
+  }
+
+  function widgetTopHeight(lineObj) {
+    var height = 0;
+    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
+      { height += widgetHeight(lineObj.widgets[i]); } } }
+    return height
+  }
+
+  // Converts a {top, bottom, left, right} box from line-local
+  // coordinates into another coordinate system. Context may be one of
+  // "line", "div" (display.lineDiv), "local"./null (editor), "window",
+  // or "page".
+  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+    if (!includeWidgets) {
+      var height = widgetTopHeight(lineObj);
+      rect.top += height; rect.bottom += height;
+    }
+    if (context == "line") { return rect }
+    if (!context) { context = "local"; }
+    var yOff = heightAtLine(lineObj);
+    if (context == "local") { yOff += paddingTop(cm.display); }
+    else { yOff -= cm.display.viewOffset; }
+    if (context == "page" || context == "window") {
+      var lOff = cm.display.lineSpace.getBoundingClientRect();
+      yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
+      var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
+      rect.left += xOff; rect.right += xOff;
+    }
+    rect.top += yOff; rect.bottom += yOff;
+    return rect
+  }
+
+  // Coverts a box from "div" coords to another coordinate system.
+  // Context may be "window", "page", "div", or "local"./null.
+  function fromCoordSystem(cm, coords, context) {
+    if (context == "div") { return coords }
+    var left = coords.left, top = coords.top;
+    // First move into "page" coordinate system
+    if (context == "page") {
+      left -= pageScrollX();
+      top -= pageScrollY();
+    } else if (context == "local" || !context) {
+      var localBox = cm.display.sizer.getBoundingClientRect();
+      left += localBox.left;
+      top += localBox.top;
+    }
+
+    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
+    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+  }
+
+  function charCoords(cm, pos, context, lineObj, bias) {
+    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
+    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+  }
+
+  // Returns a box for a given cursor position, which may have an
+  // 'other' property containing the position of the secondary cursor
+  // on a bidi boundary.
+  // A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+  // and after `char - 1` in writing order of `char - 1`
+  // A cursor Pos(line, char, "after") is on the same visual line as `char`
+  // and before `char` in writing order of `char`
+  // Examples (upper-case letters are RTL, lower-case are LTR):
+  //     Pos(0, 1, ...)
+  //     before   after
+  // ab     a|b     a|b
+  // aB     a|B     aB|
+  // Ab     |Ab     A|b
+  // AB     B|A     B|A
+  // Every position after the last character on a line is considered to stick
+  // to the last character on the line.
+  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+    lineObj = lineObj || getLine(cm.doc, pos.line);
+    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+    function get(ch, right) {
+      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
+      if (right) { m.left = m.right; } else { m.right = m.left; }
+      return intoCoordSystem(cm, lineObj, m, context)
+    }
+    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
+    if (ch >= lineObj.text.length) {
+      ch = lineObj.text.length;
+      sticky = "before";
+    } else if (ch <= 0) {
+      ch = 0;
+      sticky = "after";
+    }
+    if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+    function getBidi(ch, partPos, invert) {
+      var part = order[partPos], right = part.level == 1;
+      return get(invert ? ch - 1 : ch, right != invert)
+    }
+    var partPos = getBidiPartAt(order, ch, sticky);
+    var other = bidiOther;
+    var val = getBidi(ch, partPos, sticky == "before");
+    if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
+    return val
+  }
+
+  // Used to cheaply estimate the coordinates for a position. Used for
+  // intermediate scroll updates.
+  function estimateCoords(cm, pos) {
+    var left = 0;
+    pos = clipPos(cm.doc, pos);
+    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
+    var lineObj = getLine(cm.doc, pos.line);
+    var top = heightAtLine(lineObj) + paddingTop(cm.display);
+    return {left: left, right: left, top: top, bottom: top + lineObj.height}
+  }
+
+  // Positions returned by coordsChar contain some extra information.
+  // xRel is the relative x position of the input coordinates compared
+  // to the found position (so xRel > 0 means the coordinates are to
+  // the right of the character position, for example). When outside
+  // is true, that means the coordinates lie outside the line's
+  // vertical range.
+  function PosWithInfo(line, ch, sticky, outside, xRel) {
+    var pos = Pos(line, ch, sticky);
+    pos.xRel = xRel;
+    if (outside) { pos.outside = outside; }
+    return pos
+  }
+
+  // Compute the character position closest to the given coordinates.
+  // Input must be lineSpace-local ("div" coordinate system).
+  function coordsChar(cm, x, y) {
+    var doc = cm.doc;
+    y += cm.display.viewOffset;
+    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }
+    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
+    if (lineN > last)
+      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }
+    if (x < 0) { x = 0; }
+
+    var lineObj = getLine(doc, lineN);
+    for (;;) {
+      var found = coordsCharInner(cm, lineObj, lineN, x, y);
+      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));
+      if (!collapsed) { return found }
+      var rangeEnd = collapsed.find(1);
+      if (rangeEnd.line == lineN) { return rangeEnd }
+      lineObj = getLine(doc, lineN = rangeEnd.line);
+    }
+  }
+
+  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+    y -= widgetTopHeight(lineObj);
+    var end = lineObj.text.length;
+    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
+    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
+    return {begin: begin, end: end}
+  }
+
+  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
+    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+  }
+
+  // Returns true if the given side of a box is after the given
+  // coordinates, in top-to-bottom, left-to-right order.
+  function boxIsAfter(box, x, y, left) {
+    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
+  }
+
+  function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {
+    // Move y into line-local coordinate space
+    y -= heightAtLine(lineObj);
+    var preparedMeasure = prepareMeasureForLine(cm, lineObj);
+    // When directly calling `measureCharPrepared`, we have to adjust
+    // for the widgets at this line.
+    var widgetHeight$$1 = widgetTopHeight(lineObj);
+    var begin = 0, end = lineObj.text.length, ltr = true;
+
+    var order = getOrder(lineObj, cm.doc.direction);
+    // If the line isn't plain left-to-right text, first figure out
+    // which bidi section the coordinates fall into.
+    if (order) {
+      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
+                   (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);
+      ltr = part.level != 1;
+      // The awkward -1 offsets are needed because findFirst (called
+      // on these below) will treat its first bound as inclusive,
+      // second as exclusive, but we want to actually address the
+      // characters in the part's range
+      begin = ltr ? part.from : part.to - 1;
+      end = ltr ? part.to : part.from - 1;
+    }
+
+    // A binary search to find the first character whose bounding box
+    // starts after the coordinates. If we run across any whose box wrap
+    // the coordinates, store that.
+    var chAround = null, boxAround = null;
+    var ch = findFirst(function (ch) {
+      var box = measureCharPrepared(cm, preparedMeasure, ch);
+      box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;
+      if (!boxIsAfter(box, x, y, false)) { return false }
+      if (box.top <= y && box.left <= x) {
+        chAround = ch;
+        boxAround = box;
+      }
+      return true
+    }, begin, end);
+
+    var baseX, sticky, outside = false;
+    // If a box around the coordinates was found, use that
+    if (boxAround) {
+      // Distinguish coordinates nearer to the left or right side of the box
+      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
+      ch = chAround + (atStart ? 0 : 1);
+      sticky = atStart ? "after" : "before";
+      baseX = atLeft ? boxAround.left : boxAround.right;
+    } else {
+      // (Adjust for extended bound, if necessary.)
+      if (!ltr && (ch == end || ch == begin)) { ch++; }
+      // To determine which side to associate with, get the box to the
+      // left of the character and compare it's vertical position to the
+      // coordinates
+      sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
+        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?
+        "after" : "before";
+      // Now get accurate coordinates for this place, in order to get a
+      // base X position
+      var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure);
+      baseX = coords.left;
+      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;
+    }
+
+    ch = skipExtendingChars(lineObj.text, ch, 1);
+    return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)
+  }
+
+  function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {
+    // Bidi parts are sorted left-to-right, and in a non-line-wrapping
+    // situation, we can take this ordering to correspond to the visual
+    // ordering. This finds the first part whose end is after the given
+    // coordinates.
+    var index = findFirst(function (i) {
+      var part = order[i], ltr = part.level != 1;
+      return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"),
+                                     "line", lineObj, preparedMeasure), x, y, true)
+    }, 0, order.length - 1);
+    var part = order[index];
+    // If this isn't the first part, the part's start is also after
+    // the coordinates, and the coordinates aren't on the same line as
+    // that start, move one part back.
+    if (index > 0) {
+      var ltr = part.level != 1;
+      var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"),
+                               "line", lineObj, preparedMeasure);
+      if (boxIsAfter(start, x, y, true) && start.top > y)
+        { part = order[index - 1]; }
+    }
+    return part
+  }
+
+  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
+    // In a wrapped line, rtl text on wrapping boundaries can do things
+    // that don't correspond to the ordering in our `order` array at
+    // all, so a binary search doesn't work, and we want to return a
+    // part that only spans one line so that the binary search in
+    // coordsCharInner is safe. As such, we first find the extent of the
+    // wrapped line, and then do a flat search in which we discard any
+    // spans that aren't on the line.
+    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
+    var begin = ref.begin;
+    var end = ref.end;
+    if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
+    var part = null, closestDist = null;
+    for (var i = 0; i < order.length; i++) {
+      var p = order[i];
+      if (p.from >= end || p.to <= begin) { continue }
+      var ltr = p.level != 1;
+      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
+      // Weigh against spans ending before this, so that they are only
+      // picked if nothing ends after
+      var dist = endX < x ? x - endX + 1e9 : endX - x;
+      if (!part || closestDist > dist) {
+        part = p;
+        closestDist = dist;
+      }
+    }
+    if (!part) { part = order[order.length - 1]; }
+    // Clip the part to the wrapped line.
+    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
+    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
+    return part
+  }
+
+  var measureText;
+  // Compute the default text height.
+  function textHeight(display) {
+    if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+    if (measureText == null) {
+      measureText = elt("pre", null, "CodeMirror-line-like");
+      // Measure a bunch of lines, for browsers that compute
+      // fractional heights.
+      for (var i = 0; i < 49; ++i) {
+        measureText.appendChild(document.createTextNode("x"));
+        measureText.appendChild(elt("br"));
+      }
+      measureText.appendChild(document.createTextNode("x"));
+    }
+    removeChildrenAndAdd(display.measure, measureText);
+    var height = measureText.offsetHeight / 50;
+    if (height > 3) { display.cachedTextHeight = height; }
+    removeChildren(display.measure);
+    return height || 1
+  }
+
+  // Compute the default character width.
+  function charWidth(display) {
+    if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+    var anchor = elt("span", "xxxxxxxxxx");
+    var pre = elt("pre", [anchor], "CodeMirror-line-like");
+    removeChildrenAndAdd(display.measure, pre);
+    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
+    if (width > 2) { display.cachedCharWidth = width; }
+    return width || 10
+  }
+
+  // Do a bulk-read of the DOM positions and sizes needed to draw the
+  // view, so that we don't interleave reading and writing to the DOM.
+  function getDimensions(cm) {
+    var d = cm.display, left = {}, width = {};
+    var gutterLeft = d.gutters.clientLeft;
+    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+      var id = cm.display.gutterSpecs[i].className;
+      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
+      width[id] = n.clientWidth;
+    }
+    return {fixedPos: compensateForHScroll(d),
+            gutterTotalWidth: d.gutters.offsetWidth,
+            gutterLeft: left,
+            gutterWidth: width,
+            wrapperWidth: d.wrapper.clientWidth}
+  }
+
+  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+  // but using getBoundingClientRect to get a sub-pixel-accurate
+  // result.
+  function compensateForHScroll(display) {
+    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+  }
+
+  // Returns a function that estimates the height of a line, to use as
+  // first approximation until the line becomes visible (and is thus
+  // properly measurable).
+  function estimateHeight(cm) {
+    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
+    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
+    return function (line) {
+      if (lineIsHidden(cm.doc, line)) { return 0 }
+
+      var widgetsHeight = 0;
+      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
+      } }
+
+      if (wrapping)
+        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+      else
+        { return widgetsHeight + th }
+    }
+  }
+
+  function estimateLineHeights(cm) {
+    var doc = cm.doc, est = estimateHeight(cm);
+    doc.iter(function (line) {
+      var estHeight = est(line);
+      if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+    });
+  }
+
+  // Given a mouse event, find the corresponding position. If liberal
+  // is false, it checks whether a gutter or scrollbar was clicked,
+  // and returns null if it was. forRect is used by rectangular
+  // selections, and tries to estimate a character position even for
+  // coordinates beyond the right of the text.
+  function posFromMouse(cm, e, liberal, forRect) {
+    var display = cm.display;
+    if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+    var x, y, space = display.lineSpace.getBoundingClientRect();
+    // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+    try { x = e.clientX - space.left; y = e.clientY - space.top; }
+    catch (e) { return null }
+    var coords = coordsChar(cm, x, y), line;
+    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
+      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
+    }
+    return coords
+  }
+
+  // Find the view element corresponding to a given line. Return null
+  // when the line isn't visible.
+  function findViewIndex(cm, n) {
+    if (n >= cm.display.viewTo) { return null }
+    n -= cm.display.viewFrom;
+    if (n < 0) { return null }
+    var view = cm.display.view;
+    for (var i = 0; i < view.length; i++) {
+      n -= view[i].size;
+      if (n < 0) { return i }
+    }
+  }
+
+  // Updates the display.view data structure for a given change to the
+  // document. From and to are in pre-change coordinates. Lendiff is
+  // the amount of lines added or subtracted by the change. This is
+  // used for changes that span multiple lines, or change the way
+  // lines are divided into visual lines. regLineChange (below)
+  // registers single-line changes.
+  function regChange(cm, from, to, lendiff) {
+    if (from == null) { from = cm.doc.first; }
+    if (to == null) { to = cm.doc.first + cm.doc.size; }
+    if (!lendiff) { lendiff = 0; }
+
+    var display = cm.display;
+    if (lendiff && to < display.viewTo &&
+        (display.updateLineNumbers == null || display.updateLineNumbers > from))
+      { display.updateLineNumbers = from; }
+
+    cm.curOp.viewChanged = true;
+
+    if (from >= display.viewTo) { // Change after
+      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+        { resetView(cm); }
+    } else if (to <= display.viewFrom) { // Change before
+      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+        resetView(cm);
+      } else {
+        display.viewFrom += lendiff;
+        display.viewTo += lendiff;
+      }
+    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+      resetView(cm);
+    } else if (from <= display.viewFrom) { // Top overlap
+      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
+      if (cut) {
+        display.view = display.view.slice(cut.index);
+        display.viewFrom = cut.lineN;
+        display.viewTo += lendiff;
+      } else {
+        resetView(cm);
+      }
+    } else if (to >= display.viewTo) { // Bottom overlap
+      var cut$1 = viewCuttingPoint(cm, from, from, -1);
+      if (cut$1) {
+        display.view = display.view.slice(0, cut$1.index);
+        display.viewTo = cut$1.lineN;
+      } else {
+        resetView(cm);
+      }
+    } else { // Gap in the middle
+      var cutTop = viewCuttingPoint(cm, from, from, -1);
+      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
+      if (cutTop && cutBot) {
+        display.view = display.view.slice(0, cutTop.index)
+          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+          .concat(display.view.slice(cutBot.index));
+        display.viewTo += lendiff;
+      } else {
+        resetView(cm);
+      }
+    }
+
+    var ext = display.externalMeasured;
+    if (ext) {
+      if (to < ext.lineN)
+        { ext.lineN += lendiff; }
+      else if (from < ext.lineN + ext.size)
+        { display.externalMeasured = null; }
+    }
+  }
+
+  // Register a change to a single line. Type must be one of "text",
+  // "gutter", "class", "widget"
+  function regLineChange(cm, line, type) {
+    cm.curOp.viewChanged = true;
+    var display = cm.display, ext = cm.display.externalMeasured;
+    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+      { display.externalMeasured = null; }
+
+    if (line < display.viewFrom || line >= display.viewTo) { return }
+    var lineView = display.view[findViewIndex(cm, line)];
+    if (lineView.node == null) { return }
+    var arr = lineView.changes || (lineView.changes = []);
+    if (indexOf(arr, type) == -1) { arr.push(type); }
+  }
+
+  // Clear the view.
+  function resetView(cm) {
+    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
+    cm.display.view = [];
+    cm.display.viewOffset = 0;
+  }
+
+  function viewCuttingPoint(cm, oldN, newN, dir) {
+    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
+    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+      { return {index: index, lineN: newN} }
+    var n = cm.display.viewFrom;
+    for (var i = 0; i < index; i++)
+      { n += view[i].size; }
+    if (n != oldN) {
+      if (dir > 0) {
+        if (index == view.length - 1) { return null }
+        diff = (n + view[index].size) - oldN;
+        index++;
+      } else {
+        diff = n - oldN;
+      }
+      oldN += diff; newN += diff;
+    }
+    while (visualLineNo(cm.doc, newN) != newN) {
+      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
+      index += dir;
+    }
+    return {index: index, lineN: newN}
+  }
+
+  // Force the view to cover a given range, adding empty view element
+  // or clipping off existing ones as needed.
+  function adjustView(cm, from, to) {
+    var display = cm.display, view = display.view;
+    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+      display.view = buildViewArray(cm, from, to);
+      display.viewFrom = from;
+    } else {
+      if (display.viewFrom > from)
+        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
+      else if (display.viewFrom < from)
+        { display.view = display.view.slice(findViewIndex(cm, from)); }
+      display.viewFrom = from;
+      if (display.viewTo < to)
+        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
+      else if (display.viewTo > to)
+        { display.view = display.view.slice(0, findViewIndex(cm, to)); }
+    }
+    display.viewTo = to;
+  }
+
+  // Count the number of lines in the view whose DOM representation is
+  // out of date (or nonexistent).
+  function countDirtyView(cm) {
+    var view = cm.display.view, dirty = 0;
+    for (var i = 0; i < view.length; i++) {
+      var lineView = view[i];
+      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
+    }
+    return dirty
+  }
+
+  function updateSelection(cm) {
+    cm.display.input.showSelection(cm.display.input.prepareSelection());
+  }
+
+  function prepareSelection(cm, primary) {
+    if ( primary === void 0 ) primary = true;
+
+    var doc = cm.doc, result = {};
+    var curFragment = result.cursors = document.createDocumentFragment();
+    var selFragment = result.selection = document.createDocumentFragment();
+
+    for (var i = 0; i < doc.sel.ranges.length; i++) {
+      if (!primary && i == doc.sel.primIndex) { continue }
+      var range$$1 = doc.sel.ranges[i];
+      if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }
+      var collapsed = range$$1.empty();
+      if (collapsed || cm.options.showCursorWhenSelecting)
+        { drawSelectionCursor(cm, range$$1.head, curFragment); }
+      if (!collapsed)
+        { drawSelectionRange(cm, range$$1, selFragment); }
+    }
+    return result
+  }
+
+  // Draws a cursor for the given range
+  function drawSelectionCursor(cm, head, output) {
+    var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
+
+    var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
+    cursor.style.left = pos.left + "px";
+    cursor.style.top = pos.top + "px";
+    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
+
+    if (pos.other) {
+      // Secondary cursor, shown when on a 'jump' in bi-directional text
+      var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
+      otherCursor.style.display = "";
+      otherCursor.style.left = pos.other.left + "px";
+      otherCursor.style.top = pos.other.top + "px";
+      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
+    }
+  }
+
+  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
+
+  // Draws the given range as a highlighted selection
+  function drawSelectionRange(cm, range$$1, output) {
+    var display = cm.display, doc = cm.doc;
+    var fragment = document.createDocumentFragment();
+    var padding = paddingH(cm.display), leftSide = padding.left;
+    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
+    var docLTR = doc.direction == "ltr";
+
+    function add(left, top, width, bottom) {
+      if (top < 0) { top = 0; }
+      top = Math.round(top);
+      bottom = Math.round(bottom);
+      fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px")));
+    }
+
+    function drawForLine(line, fromArg, toArg) {
+      var lineObj = getLine(doc, line);
+      var lineLen = lineObj.text.length;
+      var start, end;
+      function coords(ch, bias) {
+        return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+      }
+
+      function wrapX(pos, dir, side) {
+        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
+        var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
+        var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
+        return coords(ch, prop)[prop]
+      }
+
+      var order = getOrder(lineObj, doc.direction);
+      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
+        var ltr = dir == "ltr";
+        var fromPos = coords(from, ltr ? "left" : "right");
+        var toPos = coords(to - 1, ltr ? "right" : "left");
+
+        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
+        var first = i == 0, last = !order || i == order.length - 1;
+        if (toPos.top - fromPos.top <= 3) { // Single line
+          var openLeft = (docLTR ? openStart : openEnd) && first;
+          var openRight = (docLTR ? openEnd : openStart) && last;
+          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
+          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
+          add(left, fromPos.top, right - left, fromPos.bottom);
+        } else { // Multiple lines
+          var topLeft, topRight, botLeft, botRight;
+          if (ltr) {
+            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
+            topRight = docLTR ? rightSide : wrapX(from, dir, "before");
+            botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
+            botRight = docLTR && openEnd && last ? rightSide : toPos.right;
+          } else {
+            topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
+            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
+            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
+            botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
+          }
+          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
+          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
+          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
+        }
+
+        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
+        if (cmpCoords(toPos, start) < 0) { start = toPos; }
+        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
+        if (cmpCoords(toPos, end) < 0) { end = toPos; }
+      });
+      return {start: start, end: end}
+    }
+
+    var sFrom = range$$1.from(), sTo = range$$1.to();
+    if (sFrom.line == sTo.line) {
+      drawForLine(sFrom.line, sFrom.ch, sTo.ch);
+    } else {
+      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
+      var singleVLine = visualLine(fromLine) == visualLine(toLine);
+      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
+      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
+      if (singleVLine) {
+        if (leftEnd.top < rightStart.top - 2) {
+          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
+          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
+        } else {
+          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
+        }
+      }
+      if (leftEnd.bottom < rightStart.top)
+        { add(leftSide, leftEnd.bottom, null, rightStart.top); }
+    }
+
+    output.appendChild(fragment);
+  }
+
+  // Cursor-blinking
+  function restartBlink(cm) {
+    if (!cm.state.focused) { return }
+    var display = cm.display;
+    clearInterval(display.blinker);
+    var on = true;
+    display.cursorDiv.style.visibility = "";
+    if (cm.options.cursorBlinkRate > 0)
+      { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+        cm.options.cursorBlinkRate); }
+    else if (cm.options.cursorBlinkRate < 0)
+      { display.cursorDiv.style.visibility = "hidden"; }
+  }
+
+  function ensureFocus(cm) {
+    if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }
+  }
+
+  function delayBlurEvent(cm) {
+    cm.state.delayingBlurEvent = true;
+    setTimeout(function () { if (cm.state.delayingBlurEvent) {
+      cm.state.delayingBlurEvent = false;
+      onBlur(cm);
+    } }, 100);
+  }
+
+  function onFocus(cm, e) {
+    if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }
+
+    if (cm.options.readOnly == "nocursor") { return }
+    if (!cm.state.focused) {
+      signal(cm, "focus", cm, e);
+      cm.state.focused = true;
+      addClass(cm.display.wrapper, "CodeMirror-focused");
+      // This test prevents this from firing when a context
+      // menu is closed (since the input reset would kill the
+      // select-all detection hack)
+      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+        cm.display.input.reset();
+        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
+      }
+      cm.display.input.receivedFocus();
+    }
+    restartBlink(cm);
+  }
+  function onBlur(cm, e) {
+    if (cm.state.delayingBlurEvent) { return }
+
+    if (cm.state.focused) {
+      signal(cm, "blur", cm, e);
+      cm.state.focused = false;
+      rmClass(cm.display.wrapper, "CodeMirror-focused");
+    }
+    clearInterval(cm.display.blinker);
+    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
+  }
+
+  // Read the actual heights of the rendered lines, and update their
+  // stored heights to match.
+  function updateHeightsInViewport(cm) {
+    var display = cm.display;
+    var prevBottom = display.lineDiv.offsetTop;
+    for (var i = 0; i < display.view.length; i++) {
+      var cur = display.view[i], wrapping = cm.options.lineWrapping;
+      var height = (void 0), width = 0;
+      if (cur.hidden) { continue }
+      if (ie && ie_version < 8) {
+        var bot = cur.node.offsetTop + cur.node.offsetHeight;
+        height = bot - prevBottom;
+        prevBottom = bot;
+      } else {
+        var box = cur.node.getBoundingClientRect();
+        height = box.bottom - box.top;
+        // Check that lines don't extend past the right of the current
+        // editor width
+        if (!wrapping && cur.text.firstChild)
+          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }
+      }
+      var diff = cur.line.height - height;
+      if (diff > .005 || diff < -.005) {
+        updateLineHeight(cur.line, height);
+        updateWidgetHeight(cur.line);
+        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+          { updateWidgetHeight(cur.rest[j]); } }
+      }
+      if (width > cm.display.sizerWidth) {
+        var chWidth = Math.ceil(width / charWidth(cm.display));
+        if (chWidth > cm.display.maxLineLength) {
+          cm.display.maxLineLength = chWidth;
+          cm.display.maxLine = cur.line;
+          cm.display.maxLineChanged = true;
+        }
+      }
+    }
+  }
+
+  // Read and store the height of line widgets associated with the
+  // given line.
+  function updateWidgetHeight(line) {
+    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
+      var w = line.widgets[i], parent = w.node.parentNode;
+      if (parent) { w.height = parent.offsetHeight; }
+    } }
+  }
+
+  // Compute the lines that are visible in a given viewport (defaults
+  // the the current scroll position). viewport may contain top,
+  // height, and ensure (see op.scrollToPos) properties.
+  function visibleLines(display, doc, viewport) {
+    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
+    top = Math.floor(top - paddingTop(display));
+    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
+
+    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
+    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+    // forces those lines into the viewport (if possible).
+    if (viewport && viewport.ensure) {
+      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
+      if (ensureFrom < from) {
+        from = ensureFrom;
+        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
+      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
+        to = ensureTo;
+      }
+    }
+    return {from: from, to: Math.max(to, from + 1)}
+  }
+
+  // SCROLLING THINGS INTO VIEW
+
+  // If an editor sits on the top or bottom of the window, partially
+  // scrolled out of view, this ensures that the cursor is visible.
+  function maybeScrollWindow(cm, rect) {
+    if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
+    if (rect.top + box.top < 0) { doScroll = true; }
+    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
+    if (doScroll != null && !phantom) {
+      var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n                         top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
+      cm.display.lineSpace.appendChild(scrollNode);
+      scrollNode.scrollIntoView(doScroll);
+      cm.display.lineSpace.removeChild(scrollNode);
+    }
+  }
+
+  // Scroll a given position into view (immediately), verifying that
+  // it actually became visible (as line heights are accurately
+  // measured, the position of something may 'drift' during drawing).
+  function scrollPosIntoView(cm, pos, end, margin) {
+    if (margin == null) { margin = 0; }
+    var rect;
+    if (!cm.options.lineWrapping && pos == end) {
+      // Set pos and end to the cursor positions around the character pos sticks to
+      // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
+      // If pos == Pos(_, 0, "before"), pos and end are unchanged
+      pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
+      end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
+    }
+    for (var limit = 0; limit < 5; limit++) {
+      var changed = false;
+      var coords = cursorCoords(cm, pos);
+      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
+      rect = {left: Math.min(coords.left, endCoords.left),
+              top: Math.min(coords.top, endCoords.top) - margin,
+              right: Math.max(coords.left, endCoords.left),
+              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
+      var scrollPos = calculateScrollPos(cm, rect);
+      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
+      if (scrollPos.scrollTop != null) {
+        updateScrollTop(cm, scrollPos.scrollTop);
+        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
+      }
+      if (scrollPos.scrollLeft != null) {
+        setScrollLeft(cm, scrollPos.scrollLeft);
+        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
+      }
+      if (!changed) { break }
+    }
+    return rect
+  }
+
+  // Scroll a given set of coordinates into view (immediately).
+  function scrollIntoView(cm, rect) {
+    var scrollPos = calculateScrollPos(cm, rect);
+    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
+    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
+  }
+
+  // Calculate a new scroll position needed to scroll the given
+  // rectangle into view. Returns an object with scrollTop and
+  // scrollLeft properties. When these are undefined, the
+  // vertical/horizontal position does not need to be adjusted.
+  function calculateScrollPos(cm, rect) {
+    var display = cm.display, snapMargin = textHeight(cm.display);
+    if (rect.top < 0) { rect.top = 0; }
+    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
+    var screen = displayHeight(cm), result = {};
+    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
+    var docBottom = cm.doc.height + paddingVert(display);
+    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
+    if (rect.top < screentop) {
+      result.scrollTop = atTop ? 0 : rect.top;
+    } else if (rect.bottom > screentop + screen) {
+      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
+      if (newTop != screentop) { result.scrollTop = newTop; }
+    }
+
+    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;
+    var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);
+    var tooWide = rect.right - rect.left > screenw;
+    if (tooWide) { rect.right = rect.left + screenw; }
+    if (rect.left < 10)
+      { result.scrollLeft = 0; }
+    else if (rect.left < screenleft)
+      { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }
+    else if (rect.right > screenw + screenleft - 3)
+      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
+    return result
+  }
+
+  // Store a relative adjustment to the scroll position in the current
+  // operation (to be applied when the operation finishes).
+  function addToScrollTop(cm, top) {
+    if (top == null) { return }
+    resolveScrollToPos(cm);
+    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
+  }
+
+  // Make sure that at the end of the operation the current cursor is
+  // shown.
+  function ensureCursorVisible(cm) {
+    resolveScrollToPos(cm);
+    var cur = cm.getCursor();
+    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
+  }
+
+  function scrollToCoords(cm, x, y) {
+    if (x != null || y != null) { resolveScrollToPos(cm); }
+    if (x != null) { cm.curOp.scrollLeft = x; }
+    if (y != null) { cm.curOp.scrollTop = y; }
+  }
+
+  function scrollToRange(cm, range$$1) {
+    resolveScrollToPos(cm);
+    cm.curOp.scrollToPos = range$$1;
+  }
+
+  // When an operation has its scrollToPos property set, and another
+  // scroll action is applied before the end of the operation, this
+  // 'simulates' scrolling that position into view in a cheap way, so
+  // that the effect of intermediate scroll commands is not ignored.
+  function resolveScrollToPos(cm) {
+    var range$$1 = cm.curOp.scrollToPos;
+    if (range$$1) {
+      cm.curOp.scrollToPos = null;
+      var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);
+      scrollToCoordsRange(cm, from, to, range$$1.margin);
+    }
+  }
+
+  function scrollToCoordsRange(cm, from, to, margin) {
+    var sPos = calculateScrollPos(cm, {
+      left: Math.min(from.left, to.left),
+      top: Math.min(from.top, to.top) - margin,
+      right: Math.max(from.right, to.right),
+      bottom: Math.max(from.bottom, to.bottom) + margin
+    });
+    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
+  }
+
+  // Sync the scrollable area and scrollbars, ensure the viewport
+  // covers the visible area.
+  function updateScrollTop(cm, val) {
+    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+    if (!gecko) { updateDisplaySimple(cm, {top: val}); }
+    setScrollTop(cm, val, true);
+    if (gecko) { updateDisplaySimple(cm); }
+    startWorker(cm, 100);
+  }
+
+  function setScrollTop(cm, val, forceScroll) {
+    val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);
+    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
+    cm.doc.scrollTop = val;
+    cm.display.scrollbars.setScrollTop(val);
+    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
+  }
+
+  // Sync scroller and scrollbar, ensure the gutter elements are
+  // aligned.
+  function setScrollLeft(cm, val, isScroller, forceScroll) {
+    val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
+    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
+    cm.doc.scrollLeft = val;
+    alignHorizontally(cm);
+    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
+    cm.display.scrollbars.setScrollLeft(val);
+  }
+
+  // SCROLLBARS
+
+  // Prepare DOM reads needed to update the scrollbars. Done in one
+  // shot to minimize update/measure roundtrips.
+  function measureForScrollbars(cm) {
+    var d = cm.display, gutterW = d.gutters.offsetWidth;
+    var docH = Math.round(cm.doc.height + paddingVert(cm.display));
+    return {
+      clientHeight: d.scroller.clientHeight,
+      viewHeight: d.wrapper.clientHeight,
+      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+      viewWidth: d.wrapper.clientWidth,
+      barLeft: cm.options.fixedGutter ? gutterW : 0,
+      docHeight: docH,
+      scrollHeight: docH + scrollGap(cm) + d.barHeight,
+      nativeBarWidth: d.nativeBarWidth,
+      gutterWidth: gutterW
+    }
+  }
+
+  var NativeScrollbars = function(place, scroll, cm) {
+    this.cm = cm;
+    var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
+    var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
+    vert.tabIndex = horiz.tabIndex = -1;
+    place(vert); place(horiz);
+
+    on(vert, "scroll", function () {
+      if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
+    });
+    on(horiz, "scroll", function () {
+      if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
+    });
+
+    this.checkedZeroWidth = false;
+    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
+  };
+
+  NativeScrollbars.prototype.update = function (measure) {
+    var needsH = measure.scrollWidth > measure.clientWidth + 1;
+    var needsV = measure.scrollHeight > measure.clientHeight + 1;
+    var sWidth = measure.nativeBarWidth;
+
+    if (needsV) {
+      this.vert.style.display = "block";
+      this.vert.style.bottom = needsH ? sWidth + "px" : "0";
+      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
+      // A bug in IE8 can cause this value to be negative, so guard it.
+      this.vert.firstChild.style.height =
+        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
+    } else {
+      this.vert.style.display = "";
+      this.vert.firstChild.style.height = "0";
+    }
+
+    if (needsH) {
+      this.horiz.style.display = "block";
+      this.horiz.style.right = needsV ? sWidth + "px" : "0";
+      this.horiz.style.left = measure.barLeft + "px";
+      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
+      this.horiz.firstChild.style.width =
+        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
+    } else {
+      this.horiz.style.display = "";
+      this.horiz.firstChild.style.width = "0";
+    }
+
+    if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+      if (sWidth == 0) { this.zeroWidthHack(); }
+      this.checkedZeroWidth = true;
+    }
+
+    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+  };
+
+  NativeScrollbars.prototype.setScrollLeft = function (pos) {
+    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
+    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
+  };
+
+  NativeScrollbars.prototype.setScrollTop = function (pos) {
+    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
+    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
+  };
+
+  NativeScrollbars.prototype.zeroWidthHack = function () {
+    var w = mac && !mac_geMountainLion ? "12px" : "18px";
+    this.horiz.style.height = this.vert.style.width = w;
+    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
+    this.disableHoriz = new Delayed;
+    this.disableVert = new Delayed;
+  };
+
+  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+    bar.style.pointerEvents = "auto";
+    function maybeDisable() {
+      // To find out whether the scrollbar is still visible, we
+      // check whether the element under the pixel in the bottom
+      // right corner of the scrollbar box is the scrollbar box
+      // itself (when the bar is still visible) or its filler child
+      // (when the bar is hidden). If it is still visible, we keep
+      // it enabled, if it's hidden, we disable pointer events.
+      var box = bar.getBoundingClientRect();
+      var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
+      if (elt$$1 != bar) { bar.style.pointerEvents = "none"; }
+      else { delay.set(1000, maybeDisable); }
+    }
+    delay.set(1000, maybeDisable);
+  };
+
+  NativeScrollbars.prototype.clear = function () {
+    var parent = this.horiz.parentNode;
+    parent.removeChild(this.horiz);
+    parent.removeChild(this.vert);
+  };
+
+  var NullScrollbars = function () {};
+
+  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+  NullScrollbars.prototype.setScrollLeft = function () {};
+  NullScrollbars.prototype.setScrollTop = function () {};
+  NullScrollbars.prototype.clear = function () {};
+
+  function updateScrollbars(cm, measure) {
+    if (!measure) { measure = measureForScrollbars(cm); }
+    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
+    updateScrollbarsInner(cm, measure);
+    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+        { updateHeightsInViewport(cm); }
+      updateScrollbarsInner(cm, measureForScrollbars(cm));
+      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
+    }
+  }
+
+  // Re-synchronize the fake scrollbars with the actual size of the
+  // content.
+  function updateScrollbarsInner(cm, measure) {
+    var d = cm.display;
+    var sizes = d.scrollbars.update(measure);
+
+    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
+    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
+    d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";
+
+    if (sizes.right && sizes.bottom) {
+      d.scrollbarFiller.style.display = "block";
+      d.scrollbarFiller.style.height = sizes.bottom + "px";
+      d.scrollbarFiller.style.width = sizes.right + "px";
+    } else { d.scrollbarFiller.style.display = ""; }
+    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+      d.gutterFiller.style.display = "block";
+      d.gutterFiller.style.height = sizes.bottom + "px";
+      d.gutterFiller.style.width = measure.gutterWidth + "px";
+    } else { d.gutterFiller.style.display = ""; }
+  }
+
+  var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};
+
+  function initScrollbars(cm) {
+    if (cm.display.scrollbars) {
+      cm.display.scrollbars.clear();
+      if (cm.display.scrollbars.addClass)
+        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+    }
+
+    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
+      // Prevent clicks in the scrollbars from killing focus
+      on(node, "mousedown", function () {
+        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
+      });
+      node.setAttribute("cm-not-content", "true");
+    }, function (pos, axis) {
+      if (axis == "horizontal") { setScrollLeft(cm, pos); }
+      else { updateScrollTop(cm, pos); }
+    }, cm);
+    if (cm.display.scrollbars.addClass)
+      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+  }
+
+  // Operations are used to wrap a series of changes to the editor
+  // state in such a way that each change won't have to update the
+  // cursor and display (which would be awkward, slow, and
+  // error-prone). Instead, display updates are batched and then all
+  // combined and executed at once.
+
+  var nextOpId = 0;
+  // Start a new operation.
+  function startOperation(cm) {
+    cm.curOp = {
+      cm: cm,
+      viewChanged: false,      // Flag that indicates that lines might need to be redrawn
+      startHeight: cm.doc.height, // Used to detect need to update scrollbar
+      forceUpdate: false,      // Used to force a redraw
+      updateInput: 0,       // Whether to reset the input textarea
+      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)
+      changeObjs: null,        // Accumulated changes, for firing change events
+      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+      selectionChanged: false, // Whether the selection needs to be redrawn
+      updateMaxLine: false,    // Set when the widest line needs to be determined anew
+      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+      scrollToPos: null,       // Used to scroll to a specific position
+      focus: false,
+      id: ++nextOpId           // Unique ID
+    };
+    pushOperation(cm.curOp);
+  }
+
+  // Finish an operation, updating the display and signalling delayed events
+  function endOperation(cm) {
+    var op = cm.curOp;
+    if (op) { finishOperation(op, function (group) {
+      for (var i = 0; i < group.ops.length; i++)
+        { group.ops[i].cm.curOp = null; }
+      endOperations(group);
+    }); }
+  }
+
+  // The DOM updates done when an operation finishes are batched so
+  // that the minimum number of relayouts are required.
+  function endOperations(group) {
+    var ops = group.ops;
+    for (var i = 0; i < ops.length; i++) // Read DOM
+      { endOperation_R1(ops[i]); }
+    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+      { endOperation_W1(ops[i$1]); }
+    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+      { endOperation_R2(ops[i$2]); }
+    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+      { endOperation_W2(ops[i$3]); }
+    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+      { endOperation_finish(ops[i$4]); }
+  }
+
+  function endOperation_R1(op) {
+    var cm = op.cm, display = cm.display;
+    maybeClipScrollbars(cm);
+    if (op.updateMaxLine) { findMaxLine(cm); }
+
+    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+                         op.scrollToPos.to.line >= display.viewTo) ||
+      display.maxLineChanged && cm.options.lineWrapping;
+    op.update = op.mustUpdate &&
+      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
+  }
+
+  function endOperation_W1(op) {
+    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
+  }
+
+  function endOperation_R2(op) {
+    var cm = op.cm, display = cm.display;
+    if (op.updatedDisplay) { updateHeightsInViewport(cm); }
+
+    op.barMeasure = measureForScrollbars(cm);
+
+    // If the max line changed since it was last measured, measure it,
+    // and ensure the document's width matches it.
+    // updateDisplay_W2 will use these properties to do the actual resizing
+    if (display.maxLineChanged && !cm.options.lineWrapping) {
+      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
+      cm.display.sizerWidth = op.adjustWidthTo;
+      op.barMeasure.scrollWidth =
+        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
+      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
+    }
+
+    if (op.updatedDisplay || op.selectionChanged)
+      { op.preparedSelection = display.input.prepareSelection(); }
+  }
+
+  function endOperation_W2(op) {
+    var cm = op.cm;
+
+    if (op.adjustWidthTo != null) {
+      cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
+      if (op.maxScrollLeft < cm.doc.scrollLeft)
+        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
+      cm.display.maxLineChanged = false;
+    }
+
+    var takeFocus = op.focus && op.focus == activeElt();
+    if (op.preparedSelection)
+      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
+    if (op.updatedDisplay || op.startHeight != cm.doc.height)
+      { updateScrollbars(cm, op.barMeasure); }
+    if (op.updatedDisplay)
+      { setDocumentHeight(cm, op.barMeasure); }
+
+    if (op.selectionChanged) { restartBlink(cm); }
+
+    if (cm.state.focused && op.updateInput)
+      { cm.display.input.reset(op.typing); }
+    if (takeFocus) { ensureFocus(op.cm); }
+  }
+
+  function endOperation_finish(op) {
+    var cm = op.cm, display = cm.display, doc = cm.doc;
+
+    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }
+
+    // Abort mouse wheel delta measurement, when scrolling explicitly
+    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+      { display.wheelStartX = display.wheelStartY = null; }
+
+    // Propagate the scroll position to the actual DOM scroller
+    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }
+
+    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
+    // If we need to scroll a specific position into view, do so.
+    if (op.scrollToPos) {
+      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
+      maybeScrollWindow(cm, rect);
+    }
+
+    // Fire events for markers that are hidden/unidden by editing or
+    // undoing
+    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
+    if (hidden) { for (var i = 0; i < hidden.length; ++i)
+      { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
+    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }
+
+    if (display.wrapper.offsetHeight)
+      { doc.scrollTop = cm.display.scroller.scrollTop; }
+
+    // Fire change events, and delayed event handlers
+    if (op.changeObjs)
+      { signal(cm, "changes", cm, op.changeObjs); }
+    if (op.update)
+      { op.update.finish(); }
+  }
+
+  // Run the given function in an operation
+  function runInOp(cm, f) {
+    if (cm.curOp) { return f() }
+    startOperation(cm);
+    try { return f() }
+    finally { endOperation(cm); }
+  }
+  // Wraps a function in an operation. Returns the wrapped function.
+  function operation(cm, f) {
+    return function() {
+      if (cm.curOp) { return f.apply(cm, arguments) }
+      startOperation(cm);
+      try { return f.apply(cm, arguments) }
+      finally { endOperation(cm); }
+    }
+  }
+  // Used to add methods to editor and doc instances, wrapping them in
+  // operations.
+  function methodOp(f) {
+    return function() {
+      if (this.curOp) { return f.apply(this, arguments) }
+      startOperation(this);
+      try { return f.apply(this, arguments) }
+      finally { endOperation(this); }
+    }
+  }
+  function docMethodOp(f) {
+    return function() {
+      var cm = this.cm;
+      if (!cm || cm.curOp) { return f.apply(this, arguments) }
+      startOperation(cm);
+      try { return f.apply(this, arguments) }
+      finally { endOperation(cm); }
+    }
+  }
+
+  // HIGHLIGHT WORKER
+
+  function startWorker(cm, time) {
+    if (cm.doc.highlightFrontier < cm.display.viewTo)
+      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
+  }
+
+  function highlightWorker(cm) {
+    var doc = cm.doc;
+    if (doc.highlightFrontier >= cm.display.viewTo) { return }
+    var end = +new Date + cm.options.workTime;
+    var context = getContextBefore(cm, doc.highlightFrontier);
+    var changedLines = [];
+
+    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+      if (context.line >= cm.display.viewFrom) { // Visible
+        var oldStyles = line.styles;
+        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
+        var highlighted = highlightLine(cm, line, context, true);
+        if (resetState) { context.state = resetState; }
+        line.styles = highlighted.styles;
+        var oldCls = line.styleClasses, newCls = highlighted.classes;
+        if (newCls) { line.styleClasses = newCls; }
+        else if (oldCls) { line.styleClasses = null; }
+        var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
+        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
+        if (ischange) { changedLines.push(context.line); }
+        line.stateAfter = context.save();
+        context.nextLine();
+      } else {
+        if (line.text.length <= cm.options.maxHighlightLength)
+          { processLine(cm, line.text, context); }
+        line.stateAfter = context.line % 5 == 0 ? context.save() : null;
+        context.nextLine();
+      }
+      if (+new Date > end) {
+        startWorker(cm, cm.options.workDelay);
+        return true
+      }
+    });
+    doc.highlightFrontier = context.line;
+    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
+    if (changedLines.length) { runInOp(cm, function () {
+      for (var i = 0; i < changedLines.length; i++)
+        { regLineChange(cm, changedLines[i], "text"); }
+    }); }
+  }
+
+  // DISPLAY DRAWING
+
+  var DisplayUpdate = function(cm, viewport, force) {
+    var display = cm.display;
+
+    this.viewport = viewport;
+    // Store some values that we'll need later (but don't want to force a relayout for)
+    this.visible = visibleLines(display, cm.doc, viewport);
+    this.editorIsHidden = !display.wrapper.offsetWidth;
+    this.wrapperHeight = display.wrapper.clientHeight;
+    this.wrapperWidth = display.wrapper.clientWidth;
+    this.oldDisplayWidth = displayWidth(cm);
+    this.force = force;
+    this.dims = getDimensions(cm);
+    this.events = [];
+  };
+
+  DisplayUpdate.prototype.signal = function (emitter, type) {
+    if (hasHandler(emitter, type))
+      { this.events.push(arguments); }
+  };
+  DisplayUpdate.prototype.finish = function () {
+      var this$1 = this;
+
+    for (var i = 0; i < this.events.length; i++)
+      { signal.apply(null, this$1.events[i]); }
+  };
+
+  function maybeClipScrollbars(cm) {
+    var display = cm.display;
+    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
+      display.heightForcer.style.height = scrollGap(cm) + "px";
+      display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
+      display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
+      display.scrollbarsClipped = true;
+    }
+  }
+
+  function selectionSnapshot(cm) {
+    if (cm.hasFocus()) { return null }
+    var active = activeElt();
+    if (!active || !contains(cm.display.lineDiv, active)) { return null }
+    var result = {activeElt: active};
+    if (window.getSelection) {
+      var sel = window.getSelection();
+      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
+        result.anchorNode = sel.anchorNode;
+        result.anchorOffset = sel.anchorOffset;
+        result.focusNode = sel.focusNode;
+        result.focusOffset = sel.focusOffset;
+      }
+    }
+    return result
+  }
+
+  function restoreSelection(snapshot) {
+    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
+    snapshot.activeElt.focus();
+    if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
+      var sel = window.getSelection(), range$$1 = document.createRange();
+      range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
+      range$$1.collapse(false);
+      sel.removeAllRanges();
+      sel.addRange(range$$1);
+      sel.extend(snapshot.focusNode, snapshot.focusOffset);
+    }
+  }
+
+  // Does the actual updating of the line display. Bails out
+  // (returning false) when there is nothing to be done and forced is
+  // false.
+  function updateDisplayIfNeeded(cm, update) {
+    var display = cm.display, doc = cm.doc;
+
+    if (update.editorIsHidden) {
+      resetView(cm);
+      return false
+    }
+
+    // Bail out if the visible area is already rendered and nothing changed.
+    if (!update.force &&
+        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+        display.renderedView == display.view && countDirtyView(cm) == 0)
+      { return false }
+
+    if (maybeUpdateLineNumberWidth(cm)) {
+      resetView(cm);
+      update.dims = getDimensions(cm);
+    }
+
+    // Compute a suitable new viewport (from & to)
+    var end = doc.first + doc.size;
+    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
+    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
+    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
+    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
+    if (sawCollapsedSpans) {
+      from = visualLineNo(cm.doc, from);
+      to = visualLineEndNo(cm.doc, to);
+    }
+
+    var different = from != display.viewFrom || to != display.viewTo ||
+      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
+    adjustView(cm, from, to);
+
+    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
+    // Position the mover div to align with the current scroll position
+    cm.display.mover.style.top = display.viewOffset + "px";
+
+    var toUpdate = countDirtyView(cm);
+    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+      { return false }
+
+    // For big changes, we hide the enclosing element during the
+    // update, since that speeds up the operations on most browsers.
+    var selSnapshot = selectionSnapshot(cm);
+    if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
+    patchDisplay(cm, display.updateLineNumbers, update.dims);
+    if (toUpdate > 4) { display.lineDiv.style.display = ""; }
+    display.renderedView = display.view;
+    // There might have been a widget with a focused element that got
+    // hidden or updated, if so re-focus it.
+    restoreSelection(selSnapshot);
+
+    // Prevent selection and cursors from interfering with the scroll
+    // width and height.
+    removeChildren(display.cursorDiv);
+    removeChildren(display.selectionDiv);
+    display.gutters.style.height = display.sizer.style.minHeight = 0;
+
+    if (different) {
+      display.lastWrapHeight = update.wrapperHeight;
+      display.lastWrapWidth = update.wrapperWidth;
+      startWorker(cm, 400);
+    }
+
+    display.updateLineNumbers = null;
+
+    return true
+  }
+
+  function postUpdateDisplay(cm, update) {
+    var viewport = update.viewport;
+
+    for (var first = true;; first = false) {
+      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+        // Clip forced viewport to actual scrollable area.
+        if (viewport && viewport.top != null)
+          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
+        // Updated line heights might result in the drawn area not
+        // actually covering the viewport. Keep looping until it does.
+        update.visible = visibleLines(cm.display, cm.doc, viewport);
+        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+          { break }
+      }
+      if (!updateDisplayIfNeeded(cm, update)) { break }
+      updateHeightsInViewport(cm);
+      var barMeasure = measureForScrollbars(cm);
+      updateSelection(cm);
+      updateScrollbars(cm, barMeasure);
+      setDocumentHeight(cm, barMeasure);
+      update.force = false;
+    }
+
+    update.signal(cm, "update", cm);
+    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+      update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
+      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
+    }
+  }
+
+  function updateDisplaySimple(cm, viewport) {
+    var update = new DisplayUpdate(cm, viewport);
+    if (updateDisplayIfNeeded(cm, update)) {
+      updateHeightsInViewport(cm);
+      postUpdateDisplay(cm, update);
+      var barMeasure = measureForScrollbars(cm);
+      updateSelection(cm);
+      updateScrollbars(cm, barMeasure);
+      setDocumentHeight(cm, barMeasure);
+      update.finish();
+    }
+  }
+
+  // Sync the actual display DOM structure with display.view, removing
+  // nodes for lines that are no longer in view, and creating the ones
+  // that are not there yet, and updating the ones that are out of
+  // date.
+  function patchDisplay(cm, updateNumbersFrom, dims) {
+    var display = cm.display, lineNumbers = cm.options.lineNumbers;
+    var container = display.lineDiv, cur = container.firstChild;
+
+    function rm(node) {
+      var next = node.nextSibling;
+      // Works around a throw-scroll bug in OS X Webkit
+      if (webkit && mac && cm.display.currentWheelTarget == node)
+        { node.style.display = "none"; }
+      else
+        { node.parentNode.removeChild(node); }
+      return next
+    }
+
+    var view = display.view, lineN = display.viewFrom;
+    // Loop over the elements in the view, syncing cur (the DOM nodes
+    // in display.lineDiv) with the view as we go.
+    for (var i = 0; i < view.length; i++) {
+      var lineView = view[i];
+      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+        var node = buildLineElement(cm, lineView, lineN, dims);
+        container.insertBefore(node, cur);
+      } else { // Already drawn
+        while (cur != lineView.node) { cur = rm(cur); }
+        var updateNumber = lineNumbers && updateNumbersFrom != null &&
+          updateNumbersFrom <= lineN && lineView.lineNumber;
+        if (lineView.changes) {
+          if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
+          updateLineForChanges(cm, lineView, lineN, dims);
+        }
+        if (updateNumber) {
+          removeChildren(lineView.lineNumber);
+          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
+        }
+        cur = lineView.node.nextSibling;
+      }
+      lineN += lineView.size;
+    }
+    while (cur) { cur = rm(cur); }
+  }
+
+  function updateGutterSpace(display) {
+    var width = display.gutters.offsetWidth;
+    display.sizer.style.marginLeft = width + "px";
+  }
+
+  function setDocumentHeight(cm, measure) {
+    cm.display.sizer.style.minHeight = measure.docHeight + "px";
+    cm.display.heightForcer.style.top = measure.docHeight + "px";
+    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
+  }
+
+  // Re-align line numbers and gutter marks to compensate for
+  // horizontal scrolling.
+  function alignHorizontally(cm) {
+    var display = cm.display, view = display.view;
+    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
+    var gutterW = display.gutters.offsetWidth, left = comp + "px";
+    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+      if (cm.options.fixedGutter) {
+        if (view[i].gutter)
+          { view[i].gutter.style.left = left; }
+        if (view[i].gutterBackground)
+          { view[i].gutterBackground.style.left = left; }
+      }
+      var align = view[i].alignable;
+      if (align) { for (var j = 0; j < align.length; j++)
+        { align[j].style.left = left; } }
+    } }
+    if (cm.options.fixedGutter)
+      { display.gutters.style.left = (comp + gutterW) + "px"; }
+  }
+
+  // Used to ensure that the line number gutter is still the right
+  // size for the current document size. Returns true when an update
+  // is needed.
+  function maybeUpdateLineNumberWidth(cm) {
+    if (!cm.options.lineNumbers) { return false }
+    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
+    if (last.length != display.lineNumChars) {
+      var test = display.measure.appendChild(elt("div", [elt("div", last)],
+                                                 "CodeMirror-linenumber CodeMirror-gutter-elt"));
+      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
+      display.lineGutter.style.width = "";
+      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
+      display.lineNumWidth = display.lineNumInnerWidth + padding;
+      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
+      display.lineGutter.style.width = display.lineNumWidth + "px";
+      updateGutterSpace(cm.display);
+      return true
+    }
+    return false
+  }
+
+  function getGutters(gutters, lineNumbers) {
+    var result = [], sawLineNumbers = false;
+    for (var i = 0; i < gutters.length; i++) {
+      var name = gutters[i], style = null;
+      if (typeof name != "string") { style = name.style; name = name.className; }
+      if (name == "CodeMirror-linenumbers") {
+        if (!lineNumbers) { continue }
+        else { sawLineNumbers = true; }
+      }
+      result.push({className: name, style: style});
+    }
+    if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); }
+    return result
+  }
+
+  // Rebuild the gutter elements, ensure the margin to the left of the
+  // code matches their width.
+  function renderGutters(display) {
+    var gutters = display.gutters, specs = display.gutterSpecs;
+    removeChildren(gutters);
+    display.lineGutter = null;
+    for (var i = 0; i < specs.length; ++i) {
+      var ref = specs[i];
+      var className = ref.className;
+      var style = ref.style;
+      var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
+      if (style) { gElt.style.cssText = style; }
+      if (className == "CodeMirror-linenumbers") {
+        display.lineGutter = gElt;
+        gElt.style.width = (display.lineNumWidth || 1) + "px";
+      }
+    }
+    gutters.style.display = specs.length ? "" : "none";
+    updateGutterSpace(display);
+  }
+
+  function updateGutters(cm) {
+    renderGutters(cm.display);
+    regChange(cm);
+    alignHorizontally(cm);
+  }
+
+  // The display handles the DOM integration, both for input reading
+  // and content drawing. It holds references to DOM nodes and
+  // display-related state.
+
+  function Display(place, doc, input, options) {
+    var d = this;
+    this.input = input;
+
+    // Covers bottom-right square when both scrollbars are present.
+    d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
+    d.scrollbarFiller.setAttribute("cm-not-content", "true");
+    // Covers bottom of gutter when coverGutterNextToScrollbar is on
+    // and h scrollbar is present.
+    d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
+    d.gutterFiller.setAttribute("cm-not-content", "true");
+    // Will contain the actual code, positioned to cover the viewport.
+    d.lineDiv = eltP("div", null, "CodeMirror-code");
+    // Elements are added to these to represent selection and cursors.
+    d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
+    d.cursorDiv = elt("div", null, "CodeMirror-cursors");
+    // A visibility: hidden element used to find the size of things.
+    d.measure = elt("div", null, "CodeMirror-measure");
+    // When lines outside of the viewport are measured, they are drawn in this.
+    d.lineMeasure = elt("div", null, "CodeMirror-measure");
+    // Wraps everything that needs to exist inside the vertically-padded coordinate system
+    d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+                      null, "position: relative; outline: none");
+    var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
+    // Moved around its parent to cover visible view.
+    d.mover = elt("div", [lines], null, "position: relative");
+    // Set to the height of the document, allowing scrolling.
+    d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
+    d.sizerWidth = null;
+    // Behavior of elts with overflow: auto and padding is
+    // inconsistent across browsers. This is used to ensure the
+    // scrollable area is big enough.
+    d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
+    // Will contain the gutters, if any.
+    d.gutters = elt("div", null, "CodeMirror-gutters");
+    d.lineGutter = null;
+    // Actual scrollable element.
+    d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
+    d.scroller.setAttribute("tabIndex", "-1");
+    // The element in which the editor lives.
+    d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
+
+    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
+    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }
+
+    if (place) {
+      if (place.appendChild) { place.appendChild(d.wrapper); }
+      else { place(d.wrapper); }
+    }
+
+    // Current rendered range (may be bigger than the view window).
+    d.viewFrom = d.viewTo = doc.first;
+    d.reportedViewFrom = d.reportedViewTo = doc.first;
+    // Information about the rendered lines.
+    d.view = [];
+    d.renderedView = null;
+    // Holds info about a single rendered line when it was rendered
+    // for measurement, while not in view.
+    d.externalMeasured = null;
+    // Empty space (in pixels) above the view
+    d.viewOffset = 0;
+    d.lastWrapHeight = d.lastWrapWidth = 0;
+    d.updateLineNumbers = null;
+
+    d.nativeBarWidth = d.barHeight = d.barWidth = 0;
+    d.scrollbarsClipped = false;
+
+    // Used to only resize the line number gutter when necessary (when
+    // the amount of lines crosses a boundary that makes its width change)
+    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
+    // Set to true when a non-horizontal-scrolling line widget is
+    // added. As an optimization, line widget aligning is skipped when
+    // this is false.
+    d.alignWidgets = false;
+
+    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+
+    // Tracks the maximum line length so that the horizontal scrollbar
+    // can be kept static when scrolling.
+    d.maxLine = null;
+    d.maxLineLength = 0;
+    d.maxLineChanged = false;
+
+    // Used for measuring wheel scrolling granularity
+    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
+
+    // True when shift is held down.
+    d.shift = false;
+
+    // Used to track whether anything happened since the context menu
+    // was opened.
+    d.selForContextMenu = null;
+
+    d.activeTouch = null;
+
+    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
+    renderGutters(d);
+
+    input.init(d);
+  }
+
+  // Since the delta values reported on mouse wheel events are
+  // unstandardized between browsers and even browser versions, and
+  // generally horribly unpredictable, this code starts by measuring
+  // the scroll effect that the first few mouse wheel events have,
+  // and, from that, detects the way it can convert deltas to pixel
+  // offsets afterwards.
+  //
+  // The reason we want to know the amount a wheel event will scroll
+  // is that it gives us a chance to update the display before the
+  // actual scrolling happens, reducing flickering.
+
+  var wheelSamples = 0, wheelPixelsPerUnit = null;
+  // Fill in a browser-detected starting value on browsers where we
+  // know one. These don't have to be accurate -- the result of them
+  // being wrong would just be a slight flicker on the first wheel
+  // scroll (if it is large enough).
+  if (ie) { wheelPixelsPerUnit = -.53; }
+  else if (gecko) { wheelPixelsPerUnit = 15; }
+  else if (chrome) { wheelPixelsPerUnit = -.7; }
+  else if (safari) { wheelPixelsPerUnit = -1/3; }
+
+  function wheelEventDelta(e) {
+    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
+    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
+    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
+    else if (dy == null) { dy = e.wheelDelta; }
+    return {x: dx, y: dy}
+  }
+  function wheelEventPixels(e) {
+    var delta = wheelEventDelta(e);
+    delta.x *= wheelPixelsPerUnit;
+    delta.y *= wheelPixelsPerUnit;
+    return delta
+  }
+
+  function onScrollWheel(cm, e) {
+    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
+
+    var display = cm.display, scroll = display.scroller;
+    // Quit if there's nothing to scroll here
+    var canScrollX = scroll.scrollWidth > scroll.clientWidth;
+    var canScrollY = scroll.scrollHeight > scroll.clientHeight;
+    if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+    // Webkit browsers on OS X abort momentum scrolls when the target
+    // of the scroll event is removed from the scrollable element.
+    // This hack (see related code in patchDisplay) makes sure the
+    // element is kept around.
+    if (dy && mac && webkit) {
+      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+        for (var i = 0; i < view.length; i++) {
+          if (view[i].node == cur) {
+            cm.display.currentWheelTarget = cur;
+            break outer
+          }
+        }
+      }
+    }
+
+    // On some browsers, horizontal scrolling will cause redraws to
+    // happen before the gutter has been realigned, causing it to
+    // wriggle around in a most unseemly way. When we have an
+    // estimated pixels/delta value, we just handle horizontal
+    // scrolling entirely here. It'll be slightly off from native, but
+    // better than glitching out.
+    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+      if (dy && canScrollY)
+        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
+      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
+      // Only prevent default scrolling if vertical scrolling is
+      // actually possible. Otherwise, it causes vertical scroll
+      // jitter on OSX trackpads when deltaX is small and deltaY
+      // is large (issue #3579)
+      if (!dy || (dy && canScrollY))
+        { e_preventDefault(e); }
+      display.wheelStartX = null; // Abort measurement, if in progress
+      return
+    }
+
+    // 'Project' the visible viewport to cover the area that is being
+    // scrolled into view (if we know enough to estimate it).
+    if (dy && wheelPixelsPerUnit != null) {
+      var pixels = dy * wheelPixelsPerUnit;
+      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
+      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
+      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
+      updateDisplaySimple(cm, {top: top, bottom: bot});
+    }
+
+    if (wheelSamples < 20) {
+      if (display.wheelStartX == null) {
+        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
+        display.wheelDX = dx; display.wheelDY = dy;
+        setTimeout(function () {
+          if (display.wheelStartX == null) { return }
+          var movedX = scroll.scrollLeft - display.wheelStartX;
+          var movedY = scroll.scrollTop - display.wheelStartY;
+          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+            (movedX && display.wheelDX && movedX / display.wheelDX);
+          display.wheelStartX = display.wheelStartY = null;
+          if (!sample) { return }
+          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
+          ++wheelSamples;
+        }, 200);
+      } else {
+        display.wheelDX += dx; display.wheelDY += dy;
+      }
+    }
+  }
+
+  // Selection objects are immutable. A new one is created every time
+  // the selection changes. A selection is one or more non-overlapping
+  // (and non-touching) ranges, sorted, and an integer that indicates
+  // which one is the primary selection (the one that's scrolled into
+  // view, that getCursor returns, etc).
+  var Selection = function(ranges, primIndex) {
+    this.ranges = ranges;
+    this.primIndex = primIndex;
+  };
+
+  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+  Selection.prototype.equals = function (other) {
+      var this$1 = this;
+
+    if (other == this) { return true }
+    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+    for (var i = 0; i < this.ranges.length; i++) {
+      var here = this$1.ranges[i], there = other.ranges[i];
+      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+    }
+    return true
+  };
+
+  Selection.prototype.deepCopy = function () {
+      var this$1 = this;
+
+    var out = [];
+    for (var i = 0; i < this.ranges.length; i++)
+      { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }
+    return new Selection(out, this.primIndex)
+  };
+
+  Selection.prototype.somethingSelected = function () {
+      var this$1 = this;
+
+    for (var i = 0; i < this.ranges.length; i++)
+      { if (!this$1.ranges[i].empty()) { return true } }
+    return false
+  };
+
+  Selection.prototype.contains = function (pos, end) {
+      var this$1 = this;
+
+    if (!end) { end = pos; }
+    for (var i = 0; i < this.ranges.length; i++) {
+      var range = this$1.ranges[i];
+      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+        { return i }
+    }
+    return -1
+  };
+
+  var Range = function(anchor, head) {
+    this.anchor = anchor; this.head = head;
+  };
+
+  Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+  // Take an unsorted, potentially overlapping set of ranges, and
+  // build a selection out of it. 'Consumes' ranges array (modifying
+  // it).
+  function normalizeSelection(cm, ranges, primIndex) {
+    var mayTouch = cm && cm.options.selectionsMayTouch;
+    var prim = ranges[primIndex];
+    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
+    primIndex = indexOf(ranges, prim);
+    for (var i = 1; i < ranges.length; i++) {
+      var cur = ranges[i], prev = ranges[i - 1];
+      var diff = cmp(prev.to(), cur.from());
+      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
+        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
+        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
+        if (i <= primIndex) { --primIndex; }
+        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
+      }
+    }
+    return new Selection(ranges, primIndex)
+  }
+
+  function simpleSelection(anchor, head) {
+    return new Selection([new Range(anchor, head || anchor)], 0)
+  }
+
+  // Compute the position of the end of a change (its 'to' property
+  // refers to the pre-change end).
+  function changeEnd(change) {
+    if (!change.text) { return change.to }
+    return Pos(change.from.line + change.text.length - 1,
+               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+  }
+
+  // Adjust a position to refer to the post-change position of the
+  // same text, or the end of the change if the change covers it.
+  function adjustForChange(pos, change) {
+    if (cmp(pos, change.from) < 0) { return pos }
+    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
+    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
+    return Pos(line, ch)
+  }
+
+  function computeSelAfterChange(doc, change) {
+    var out = [];
+    for (var i = 0; i < doc.sel.ranges.length; i++) {
+      var range = doc.sel.ranges[i];
+      out.push(new Range(adjustForChange(range.anchor, change),
+                         adjustForChange(range.head, change)));
+    }
+    return normalizeSelection(doc.cm, out, doc.sel.primIndex)
+  }
+
+  function offsetPos(pos, old, nw) {
+    if (pos.line == old.line)
+      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+    else
+      { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+  }
+
+  // Used by replaceSelections to allow moving the selection to the
+  // start or around the replaced test. Hint may be "start" or "around".
+  function computeReplacedSel(doc, changes, hint) {
+    var out = [];
+    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
+    for (var i = 0; i < changes.length; i++) {
+      var change = changes[i];
+      var from = offsetPos(change.from, oldPrev, newPrev);
+      var to = offsetPos(changeEnd(change), oldPrev, newPrev);
+      oldPrev = change.to;
+      newPrev = to;
+      if (hint == "around") {
+        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
+        out[i] = new Range(inv ? to : from, inv ? from : to);
+      } else {
+        out[i] = new Range(from, from);
+      }
+    }
+    return new Selection(out, doc.sel.primIndex)
+  }
+
+  // Used to get the editor into a consistent state again when options change.
+
+  function loadMode(cm) {
+    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
+    resetModeState(cm);
+  }
+
+  function resetModeState(cm) {
+    cm.doc.iter(function (line) {
+      if (line.stateAfter) { line.stateAfter = null; }
+      if (line.styles) { line.styles = null; }
+    });
+    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
+    startWorker(cm, 100);
+    cm.state.modeGen++;
+    if (cm.curOp) { regChange(cm); }
+  }
+
+  // DOCUMENT DATA STRUCTURE
+
+  // By default, updates that start and end at the beginning of a line
+  // are treated specially, in order to make the association of line
+  // widgets and marker elements with the text behave more intuitive.
+  function isWholeLineUpdate(doc, change) {
+    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+  }
+
+  // Perform a change on the document data structure.
+  function updateDoc(doc, change, markedSpans, estimateHeight$$1) {
+    function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+    function update(line, text, spans) {
+      updateLine(line, text, spans, estimateHeight$$1);
+      signalLater(line, "change", line, change);
+    }
+    function linesFor(start, end) {
+      var result = [];
+      for (var i = start; i < end; ++i)
+        { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }
+      return result
+    }
+
+    var from = change.from, to = change.to, text = change.text;
+    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
+    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
+
+    // Adjust the line structure
+    if (change.full) {
+      doc.insert(0, linesFor(0, text.length));
+      doc.remove(text.length, doc.size - text.length);
+    } else if (isWholeLineUpdate(doc, change)) {
+      // This is a whole-line replace. Treated specially to make
+      // sure line objects move the way they are supposed to.
+      var added = linesFor(0, text.length - 1);
+      update(lastLine, lastLine.text, lastSpans);
+      if (nlines) { doc.remove(from.line, nlines); }
+      if (added.length) { doc.insert(from.line, added); }
+    } else if (firstLine == lastLine) {
+      if (text.length == 1) {
+        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
+      } else {
+        var added$1 = linesFor(1, text.length - 1);
+        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));
+        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+        doc.insert(from.line + 1, added$1);
+      }
+    } else if (text.length == 1) {
+      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
+      doc.remove(from.line + 1, nlines);
+    } else {
+      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
+      var added$2 = linesFor(1, text.length - 1);
+      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
+      doc.insert(from.line + 1, added$2);
+    }
+
+    signalLater(doc, "change", doc, change);
+  }
+
+  // Call f for all linked documents.
+  function linkedDocs(doc, f, sharedHistOnly) {
+    function propagate(doc, skip, sharedHist) {
+      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+        var rel = doc.linked[i];
+        if (rel.doc == skip) { continue }
+        var shared = sharedHist && rel.sharedHist;
+        if (sharedHistOnly && !shared) { continue }
+        f(rel.doc, shared);
+        propagate(rel.doc, doc, shared);
+      } }
+    }
+    propagate(doc, null, true);
+  }
+
+  // Attach a document to an editor.
+  function attachDoc(cm, doc) {
+    if (doc.cm) { throw new Error("This document is already in use.") }
+    cm.doc = doc;
+    doc.cm = cm;
+    estimateLineHeights(cm);
+    loadMode(cm);
+    setDirectionClass(cm);
+    if (!cm.options.lineWrapping) { findMaxLine(cm); }
+    cm.options.mode = doc.modeOption;
+    regChange(cm);
+  }
+
+  function setDirectionClass(cm) {
+  (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
+  }
+
+  function directionChanged(cm) {
+    runInOp(cm, function () {
+      setDirectionClass(cm);
+      regChange(cm);
+    });
+  }
+
+  function History(startGen) {
+    // Arrays of change events and selections. Doing something adds an
+    // event to done and clears undo. Undoing moves events from done
+    // to undone, redoing moves them in the other direction.
+    this.done = []; this.undone = [];
+    this.undoDepth = Infinity;
+    // Used to track when changes can be merged into a single undo
+    // event
+    this.lastModTime = this.lastSelTime = 0;
+    this.lastOp = this.lastSelOp = null;
+    this.lastOrigin = this.lastSelOrigin = null;
+    // Used by the isClean() method
+    this.generation = this.maxGeneration = startGen || 1;
+  }
+
+  // Create a history change event from an updateDoc-style change
+  // object.
+  function historyChangeFromChange(doc, change) {
+    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
+    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
+    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
+    return histChange
+  }
+
+  // Pop all selection events off the end of a history array. Stop at
+  // a change event.
+  function clearSelectionEvents(array) {
+    while (array.length) {
+      var last = lst(array);
+      if (last.ranges) { array.pop(); }
+      else { break }
+    }
+  }
+
+  // Find the top change event in the history. Pop off selection
+  // events that are in the way.
+  function lastChangeEvent(hist, force) {
+    if (force) {
+      clearSelectionEvents(hist.done);
+      return lst(hist.done)
+    } else if (hist.done.length && !lst(hist.done).ranges) {
+      return lst(hist.done)
+    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+      hist.done.pop();
+      return lst(hist.done)
+    }
+  }
+
+  // Register a change in the history. Merges changes that are within
+  // a single operation, or are close together with an origin that
+  // allows merging (starting with "+") into a single event.
+  function addChangeToHistory(doc, change, selAfter, opId) {
+    var hist = doc.history;
+    hist.undone.length = 0;
+    var time = +new Date, cur;
+    var last;
+
+    if ((hist.lastOp == opId ||
+         hist.lastOrigin == change.origin && change.origin &&
+         ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
+          change.origin.charAt(0) == "*")) &&
+        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+      // Merge this change into the last event
+      last = lst(cur.changes);
+      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+        // Optimized case for simple insertion -- don't want to add
+        // new changesets for every character typed
+        last.to = changeEnd(change);
+      } else {
+        // Add new sub-event
+        cur.changes.push(historyChangeFromChange(doc, change));
+      }
+    } else {
+      // Can not be merged, start a new event.
+      var before = lst(hist.done);
+      if (!before || !before.ranges)
+        { pushSelectionToHistory(doc.sel, hist.done); }
+      cur = {changes: [historyChangeFromChange(doc, change)],
+             generation: hist.generation};
+      hist.done.push(cur);
+      while (hist.done.length > hist.undoDepth) {
+        hist.done.shift();
+        if (!hist.done[0].ranges) { hist.done.shift(); }
+      }
+    }
+    hist.done.push(selAfter);
+    hist.generation = ++hist.maxGeneration;
+    hist.lastModTime = hist.lastSelTime = time;
+    hist.lastOp = hist.lastSelOp = opId;
+    hist.lastOrigin = hist.lastSelOrigin = change.origin;
+
+    if (!last) { signal(doc, "historyAdded"); }
+  }
+
+  function selectionEventCanBeMerged(doc, origin, prev, sel) {
+    var ch = origin.charAt(0);
+    return ch == "*" ||
+      ch == "+" &&
+      prev.ranges.length == sel.ranges.length &&
+      prev.somethingSelected() == sel.somethingSelected() &&
+      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+  }
+
+  // Called whenever the selection changes, sets the new selection as
+  // the pending selection in the history, and pushes the old pending
+  // selection into the 'done' array when it was significantly
+  // different (in number of selected ranges, emptiness, or time).
+  function addSelectionToHistory(doc, sel, opId, options) {
+    var hist = doc.history, origin = options && options.origin;
+
+    // A new event is started when the previous origin does not match
+    // the current, or the origins don't allow matching. Origins
+    // starting with * are always merged, those starting with + are
+    // merged when similar and close together in time.
+    if (opId == hist.lastSelOp ||
+        (origin && hist.lastSelOrigin == origin &&
+         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+      { hist.done[hist.done.length - 1] = sel; }
+    else
+      { pushSelectionToHistory(sel, hist.done); }
+
+    hist.lastSelTime = +new Date;
+    hist.lastSelOrigin = origin;
+    hist.lastSelOp = opId;
+    if (options && options.clearRedo !== false)
+      { clearSelectionEvents(hist.undone); }
+  }
+
+  function pushSelectionToHistory(sel, dest) {
+    var top = lst(dest);
+    if (!(top && top.ranges && top.equals(sel)))
+      { dest.push(sel); }
+  }
+
+  // Used to store marked span information in the history.
+  function attachLocalSpans(doc, change, from, to) {
+    var existing = change["spans_" + doc.id], n = 0;
+    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+      if (line.markedSpans)
+        { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
+      ++n;
+    });
+  }
+
+  // When un/re-doing restores text containing marked spans, those
+  // that have been explicitly cleared should not be restored.
+  function removeClearedSpans(spans) {
+    if (!spans) { return null }
+    var out;
+    for (var i = 0; i < spans.length; ++i) {
+      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
+      else if (out) { out.push(spans[i]); }
+    }
+    return !out ? spans : out.length ? out : null
+  }
+
+  // Retrieve and filter the old marked spans stored in a change event.
+  function getOldSpans(doc, change) {
+    var found = change["spans_" + doc.id];
+    if (!found) { return null }
+    var nw = [];
+    for (var i = 0; i < change.text.length; ++i)
+      { nw.push(removeClearedSpans(found[i])); }
+    return nw
+  }
+
+  // Used for un/re-doing changes from the history. Combines the
+  // result of computing the existing spans with the set of spans that
+  // existed in the history (so that deleting around a span and then
+  // undoing brings back the span).
+  function mergeOldSpans(doc, change) {
+    var old = getOldSpans(doc, change);
+    var stretched = stretchSpansOverChange(doc, change);
+    if (!old) { return stretched }
+    if (!stretched) { return old }
+
+    for (var i = 0; i < old.length; ++i) {
+      var oldCur = old[i], stretchCur = stretched[i];
+      if (oldCur && stretchCur) {
+        spans: for (var j = 0; j < stretchCur.length; ++j) {
+          var span = stretchCur[j];
+          for (var k = 0; k < oldCur.length; ++k)
+            { if (oldCur[k].marker == span.marker) { continue spans } }
+          oldCur.push(span);
+        }
+      } else if (stretchCur) {
+        old[i] = stretchCur;
+      }
+    }
+    return old
+  }
+
+  // Used both to provide a JSON-safe object in .getHistory, and, when
+  // detaching a document, to split the history in two
+  function copyHistoryArray(events, newGroup, instantiateSel) {
+    var copy = [];
+    for (var i = 0; i < events.length; ++i) {
+      var event = events[i];
+      if (event.ranges) {
+        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
+        continue
+      }
+      var changes = event.changes, newChanges = [];
+      copy.push({changes: newChanges});
+      for (var j = 0; j < changes.length; ++j) {
+        var change = changes[j], m = (void 0);
+        newChanges.push({from: change.from, to: change.to, text: change.text});
+        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+          if (indexOf(newGroup, Number(m[1])) > -1) {
+            lst(newChanges)[prop] = change[prop];
+            delete change[prop];
+          }
+        } } }
+      }
+    }
+    return copy
+  }
+
+  // The 'scroll' parameter given to many of these indicated whether
+  // the new cursor position should be scrolled into view after
+  // modifying the selection.
+
+  // If shift is held or the extend flag is set, extends a range to
+  // include a given position (and optionally a second position).
+  // Otherwise, simply returns the range between the given positions.
+  // Used for cursor motion and such.
+  function extendRange(range, head, other, extend) {
+    if (extend) {
+      var anchor = range.anchor;
+      if (other) {
+        var posBefore = cmp(head, anchor) < 0;
+        if (posBefore != (cmp(other, anchor) < 0)) {
+          anchor = head;
+          head = other;
+        } else if (posBefore != (cmp(head, other) < 0)) {
+          head = other;
+        }
+      }
+      return new Range(anchor, head)
+    } else {
+      return new Range(other || head, head)
+    }
+  }
+
+  // Extend the primary selection range, discard the rest.
+  function extendSelection(doc, head, other, options, extend) {
+    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
+    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
+  }
+
+  // Extend all selections (pos is an array of selections with length
+  // equal the number of selections)
+  function extendSelections(doc, heads, options) {
+    var out = [];
+    var extend = doc.cm && (doc.cm.display.shift || doc.extend);
+    for (var i = 0; i < doc.sel.ranges.length; i++)
+      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
+    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
+    setSelection(doc, newSel, options);
+  }
+
+  // Updates a single range in the selection.
+  function replaceOneSelection(doc, i, range, options) {
+    var ranges = doc.sel.ranges.slice(0);
+    ranges[i] = range;
+    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
+  }
+
+  // Reset the selection to a single range.
+  function setSimpleSelection(doc, anchor, head, options) {
+    setSelection(doc, simpleSelection(anchor, head), options);
+  }
+
+  // Give beforeSelectionChange handlers a change to influence a
+  // selection update.
+  function filterSelectionChange(doc, sel, options) {
+    var obj = {
+      ranges: sel.ranges,
+      update: function(ranges) {
+        var this$1 = this;
+
+        this.ranges = [];
+        for (var i = 0; i < ranges.length; i++)
+          { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+                                     clipPos(doc, ranges[i].head)); }
+      },
+      origin: options && options.origin
+    };
+    signal(doc, "beforeSelectionChange", doc, obj);
+    if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
+    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }
+    else { return sel }
+  }
+
+  function setSelectionReplaceHistory(doc, sel, options) {
+    var done = doc.history.done, last = lst(done);
+    if (last && last.ranges) {
+      done[done.length - 1] = sel;
+      setSelectionNoUndo(doc, sel, options);
+    } else {
+      setSelection(doc, sel, options);
+    }
+  }
+
+  // Set a new selection.
+  function setSelection(doc, sel, options) {
+    setSelectionNoUndo(doc, sel, options);
+    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
+  }
+
+  function setSelectionNoUndo(doc, sel, options) {
+    if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+      { sel = filterSelectionChange(doc, sel, options); }
+
+    var bias = options && options.bias ||
+      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
+    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
+
+    if (!(options && options.scroll === false) && doc.cm)
+      { ensureCursorVisible(doc.cm); }
+  }
+
+  function setSelectionInner(doc, sel) {
+    if (sel.equals(doc.sel)) { return }
+
+    doc.sel = sel;
+
+    if (doc.cm) {
+      doc.cm.curOp.updateInput = 1;
+      doc.cm.curOp.selectionChanged = true;
+      signalCursorActivity(doc.cm);
+    }
+    signalLater(doc, "cursorActivity", doc);
+  }
+
+  // Verify that the selection does not partially select any atomic
+  // marked ranges.
+  function reCheckSelection(doc) {
+    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
+  }
+
+  // Return a selection that does not partially select any atomic
+  // ranges.
+  function skipAtomicInSelection(doc, sel, bias, mayClear) {
+    var out;
+    for (var i = 0; i < sel.ranges.length; i++) {
+      var range = sel.ranges[i];
+      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
+      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
+      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
+      if (out || newAnchor != range.anchor || newHead != range.head) {
+        if (!out) { out = sel.ranges.slice(0, i); }
+        out[i] = new Range(newAnchor, newHead);
+      }
+    }
+    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel
+  }
+
+  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+    var line = getLine(doc, pos.line);
+    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+      var sp = line.markedSpans[i], m = sp.marker;
+
+      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker
+      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it
+      // is with selectLeft/Right
+      var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
+      var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;
+
+      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+        if (mayClear) {
+          signal(m, "beforeCursorEnter");
+          if (m.explicitlyCleared) {
+            if (!line.markedSpans) { break }
+            else {--i; continue}
+          }
+        }
+        if (!m.atomic) { continue }
+
+        if (oldPos) {
+          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
+          if (dir < 0 ? preventCursorRight : preventCursorLeft)
+            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
+          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+            { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+        }
+
+        var far = m.find(dir < 0 ? -1 : 1);
+        if (dir < 0 ? preventCursorLeft : preventCursorRight)
+          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
+        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+      }
+    } }
+    return pos
+  }
+
+  // Ensure a given position is not inside an atomic range.
+  function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+    var dir = bias || 1;
+    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
+    if (!found) {
+      doc.cantEdit = true;
+      return Pos(doc.first, 0)
+    }
+    return found
+  }
+
+  function movePos(doc, pos, dir, line) {
+    if (dir < 0 && pos.ch == 0) {
+      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+      else { return null }
+    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+      else { return null }
+    } else {
+      return new Pos(pos.line, pos.ch + dir)
+    }
+  }
+
+  function selectAll(cm) {
+    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
+  }
+
+  // UPDATING
+
+  // Allow "beforeChange" event handlers to influence a change
+  function filterChange(doc, change, update) {
+    var obj = {
+      canceled: false,
+      from: change.from,
+      to: change.to,
+      text: change.text,
+      origin: change.origin,
+      cancel: function () { return obj.canceled = true; }
+    };
+    if (update) { obj.update = function (from, to, text, origin) {
+      if (from) { obj.from = clipPos(doc, from); }
+      if (to) { obj.to = clipPos(doc, to); }
+      if (text) { obj.text = text; }
+      if (origin !== undefined) { obj.origin = origin; }
+    }; }
+    signal(doc, "beforeChange", doc, obj);
+    if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }
+
+    if (obj.canceled) {
+      if (doc.cm) { doc.cm.curOp.updateInput = 2; }
+      return null
+    }
+    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+  }
+
+  // Apply a change to a document, and add it to the document's
+  // history, and propagating it to all linked documents.
+  function makeChange(doc, change, ignoreReadOnly) {
+    if (doc.cm) {
+      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+      if (doc.cm.state.suppressEdits) { return }
+    }
+
+    if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+      change = filterChange(doc, change, true);
+      if (!change) { return }
+    }
+
+    // Possibly split or suppress the update based on the presence
+    // of read-only spans in its range.
+    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
+    if (split) {
+      for (var i = split.length - 1; i >= 0; --i)
+        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
+    } else {
+      makeChangeInner(doc, change);
+    }
+  }
+
+  function makeChangeInner(doc, change) {
+    if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+    var selAfter = computeSelAfterChange(doc, change);
+    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
+
+    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
+    var rebased = [];
+
+    linkedDocs(doc, function (doc, sharedHist) {
+      if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+        rebaseHist(doc.history, change);
+        rebased.push(doc.history);
+      }
+      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
+    });
+  }
+
+  // Revert a change stored in a document's history.
+  function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+    var suppress = doc.cm && doc.cm.state.suppressEdits;
+    if (suppress && !allowSelectionOnly) { return }
+
+    var hist = doc.history, event, selAfter = doc.sel;
+    var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
+
+    // Verify that there is a useable event (so that ctrl-z won't
+    // needlessly clear selection events)
+    var i = 0;
+    for (; i < source.length; i++) {
+      event = source[i];
+      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+        { break }
+    }
+    if (i == source.length) { return }
+    hist.lastOrigin = hist.lastSelOrigin = null;
+
+    for (;;) {
+      event = source.pop();
+      if (event.ranges) {
+        pushSelectionToHistory(event, dest);
+        if (allowSelectionOnly && !event.equals(doc.sel)) {
+          setSelection(doc, event, {clearRedo: false});
+          return
+        }
+        selAfter = event;
+      } else if (suppress) {
+        source.push(event);
+        return
+      } else { break }
+    }
+
+    // Build up a reverse change object to add to the opposite history
+    // stack (redo when undoing, and vice versa).
+    var antiChanges = [];
+    pushSelectionToHistory(selAfter, dest);
+    dest.push({changes: antiChanges, generation: hist.generation});
+    hist.generation = event.generation || ++hist.maxGeneration;
+
+    var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
+
+    var loop = function ( i ) {
+      var change = event.changes[i];
+      change.origin = type;
+      if (filter && !filterChange(doc, change, false)) {
+        source.length = 0;
+        return {}
+      }
+
+      antiChanges.push(historyChangeFromChange(doc, change));
+
+      var after = i ? computeSelAfterChange(doc, change) : lst(source);
+      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
+      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
+      var rebased = [];
+
+      // Propagate to the linked documents
+      linkedDocs(doc, function (doc, sharedHist) {
+        if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+          rebaseHist(doc.history, change);
+          rebased.push(doc.history);
+        }
+        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
+      });
+    };
+
+    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+      var returned = loop( i$1 );
+
+      if ( returned ) return returned.v;
+    }
+  }
+
+  // Sub-views need their line numbers shifted when text is added
+  // above or below them in the parent document.
+  function shiftDoc(doc, distance) {
+    if (distance == 0) { return }
+    doc.first += distance;
+    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+      Pos(range.anchor.line + distance, range.anchor.ch),
+      Pos(range.head.line + distance, range.head.ch)
+    ); }), doc.sel.primIndex);
+    if (doc.cm) {
+      regChange(doc.cm, doc.first, doc.first - distance, distance);
+      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+        { regLineChange(doc.cm, l, "gutter"); }
+    }
+  }
+
+  // More lower-level change function, handling only a single document
+  // (not linked ones).
+  function makeChangeSingleDoc(doc, change, selAfter, spans) {
+    if (doc.cm && !doc.cm.curOp)
+      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+    if (change.to.line < doc.first) {
+      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
+      return
+    }
+    if (change.from.line > doc.lastLine()) { return }
+
+    // Clip the change to the size of this doc
+    if (change.from.line < doc.first) {
+      var shift = change.text.length - 1 - (doc.first - change.from.line);
+      shiftDoc(doc, shift);
+      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+                text: [lst(change.text)], origin: change.origin};
+    }
+    var last = doc.lastLine();
+    if (change.to.line > last) {
+      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+                text: [change.text[0]], origin: change.origin};
+    }
+
+    change.removed = getBetween(doc, change.from, change.to);
+
+    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
+    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
+    else { updateDoc(doc, change, spans); }
+    setSelectionNoUndo(doc, selAfter, sel_dontScroll);
+
+    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))
+      { doc.cantEdit = false; }
+  }
+
+  // Handle the interaction of a change to a document with the editor
+  // that this document is part of.
+  function makeChangeSingleDocInEditor(cm, change, spans) {
+    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
+
+    var recomputeMaxLength = false, checkWidthStart = from.line;
+    if (!cm.options.lineWrapping) {
+      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
+      doc.iter(checkWidthStart, to.line + 1, function (line) {
+        if (line == display.maxLine) {
+          recomputeMaxLength = true;
+          return true
+        }
+      });
+    }
+
+    if (doc.sel.contains(change.from, change.to) > -1)
+      { signalCursorActivity(cm); }
+
+    updateDoc(doc, change, spans, estimateHeight(cm));
+
+    if (!cm.options.lineWrapping) {
+      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+        var len = lineLength(line);
+        if (len > display.maxLineLength) {
+          display.maxLine = line;
+          display.maxLineLength = len;
+          display.maxLineChanged = true;
+          recomputeMaxLength = false;
+        }
+      });
+      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
+    }
+
+    retreatFrontier(doc, from.line);
+    startWorker(cm, 400);
+
+    var lendiff = change.text.length - (to.line - from.line) - 1;
+    // Remember that these lines changed, for updating the display
+    if (change.full)
+      { regChange(cm); }
+    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+      { regLineChange(cm, from.line, "text"); }
+    else
+      { regChange(cm, from.line, to.line + 1, lendiff); }
+
+    var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
+    if (changeHandler || changesHandler) {
+      var obj = {
+        from: from, to: to,
+        text: change.text,
+        removed: change.removed,
+        origin: change.origin
+      };
+      if (changeHandler) { signalLater(cm, "change", cm, obj); }
+      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
+    }
+    cm.display.selForContextMenu = null;
+  }
+
+  function replaceRange(doc, code, from, to, origin) {
+    var assign;
+
+    if (!to) { to = from; }
+    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }
+    if (typeof code == "string") { code = doc.splitLines(code); }
+    makeChange(doc, {from: from, to: to, text: code, origin: origin});
+  }
+
+  // Rebasing/resetting history to deal with externally-sourced changes
+
+  function rebaseHistSelSingle(pos, from, to, diff) {
+    if (to < pos.line) {
+      pos.line += diff;
+    } else if (from < pos.line) {
+      pos.line = from;
+      pos.ch = 0;
+    }
+  }
+
+  // Tries to rebase an array of history events given a change in the
+  // document. If the change touches the same lines as the event, the
+  // event, and everything 'behind' it, is discarded. If the change is
+  // before the event, the event's positions are updated. Uses a
+  // copy-on-write scheme for the positions, to avoid having to
+  // reallocate them all on every rebase, but also avoid problems with
+  // shared position objects being unsafely updated.
+  function rebaseHistArray(array, from, to, diff) {
+    for (var i = 0; i < array.length; ++i) {
+      var sub = array[i], ok = true;
+      if (sub.ranges) {
+        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
+        for (var j = 0; j < sub.ranges.length; j++) {
+          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
+          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
+        }
+        continue
+      }
+      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+        var cur = sub.changes[j$1];
+        if (to < cur.from.line) {
+          cur.from = Pos(cur.from.line + diff, cur.from.ch);
+          cur.to = Pos(cur.to.line + diff, cur.to.ch);
+        } else if (from <= cur.to.line) {
+          ok = false;
+          break
+        }
+      }
+      if (!ok) {
+        array.splice(0, i + 1);
+        i = 0;
+      }
+    }
+  }
+
+  function rebaseHist(hist, change) {
+    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
+    rebaseHistArray(hist.done, from, to, diff);
+    rebaseHistArray(hist.undone, from, to, diff);
+  }
+
+  // Utility for applying a change to a line by handle or number,
+  // returning the number and optionally registering the line as
+  // changed.
+  function changeLine(doc, handle, changeType, op) {
+    var no = handle, line = handle;
+    if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
+    else { no = lineNo(handle); }
+    if (no == null) { return null }
+    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
+    return line
+  }
+
+  // The document is represented as a BTree consisting of leaves, with
+  // chunk of lines in them, and branches, with up to ten leaves or
+  // other branch nodes below them. The top node is always a branch
+  // node, and is the document object itself (meaning it has
+  // additional methods and properties).
+  //
+  // All nodes have parent links. The tree is used both to go from
+  // line numbers to line objects, and to go from objects to numbers.
+  // It also indexes by height, and is used to convert between height
+  // and line object, and to find the total height of the document.
+  //
+  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+  function LeafChunk(lines) {
+    var this$1 = this;
+
+    this.lines = lines;
+    this.parent = null;
+    var height = 0;
+    for (var i = 0; i < lines.length; ++i) {
+      lines[i].parent = this$1;
+      height += lines[i].height;
+    }
+    this.height = height;
+  }
+
+  LeafChunk.prototype = {
+    chunkSize: function() { return this.lines.length },
+
+    // Remove the n lines at offset 'at'.
+    removeInner: function(at, n) {
+      var this$1 = this;
+
+      for (var i = at, e = at + n; i < e; ++i) {
+        var line = this$1.lines[i];
+        this$1.height -= line.height;
+        cleanUpLine(line);
+        signalLater(line, "delete");
+      }
+      this.lines.splice(at, n);
+    },
+
+    // Helper used to collapse a small branch into a single leaf.
+    collapse: function(lines) {
+      lines.push.apply(lines, this.lines);
+    },
+
+    // Insert the given array of lines at offset 'at', count them as
+    // having the given height.
+    insertInner: function(at, lines, height) {
+      var this$1 = this;
+
+      this.height += height;
+      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
+      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }
+    },
+
+    // Used to iterate over a part of the tree.
+    iterN: function(at, n, op) {
+      var this$1 = this;
+
+      for (var e = at + n; at < e; ++at)
+        { if (op(this$1.lines[at])) { return true } }
+    }
+  };
+
+  function BranchChunk(children) {
+    var this$1 = this;
+
+    this.children = children;
+    var size = 0, height = 0;
+    for (var i = 0; i < children.length; ++i) {
+      var ch = children[i];
+      size += ch.chunkSize(); height += ch.height;
+      ch.parent = this$1;
+    }
+    this.size = size;
+    this.height = height;
+    this.parent = null;
+  }
+
+  BranchChunk.prototype = {
+    chunkSize: function() { return this.size },
+
+    removeInner: function(at, n) {
+      var this$1 = this;
+
+      this.size -= n;
+      for (var i = 0; i < this.children.length; ++i) {
+        var child = this$1.children[i], sz = child.chunkSize();
+        if (at < sz) {
+          var rm = Math.min(n, sz - at), oldHeight = child.height;
+          child.removeInner(at, rm);
+          this$1.height -= oldHeight - child.height;
+          if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }
+          if ((n -= rm) == 0) { break }
+          at = 0;
+        } else { at -= sz; }
+      }
+      // If the result is smaller than 25 lines, ensure that it is a
+      // single leaf node.
+      if (this.size - n < 25 &&
+          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+        var lines = [];
+        this.collapse(lines);
+        this.children = [new LeafChunk(lines)];
+        this.children[0].parent = this;
+      }
+    },
+
+    collapse: function(lines) {
+      var this$1 = this;
+
+      for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }
+    },
+
+    insertInner: function(at, lines, height) {
+      var this$1 = this;
+
+      this.size += lines.length;
+      this.height += height;
+      for (var i = 0; i < this.children.length; ++i) {
+        var child = this$1.children[i], sz = child.chunkSize();
+        if (at <= sz) {
+          child.insertInner(at, lines, height);
+          if (child.lines && child.lines.length > 50) {
+            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+            var remaining = child.lines.length % 25 + 25;
+            for (var pos = remaining; pos < child.lines.length;) {
+              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
+              child.height -= leaf.height;
+              this$1.children.splice(++i, 0, leaf);
+              leaf.parent = this$1;
+            }
+            child.lines = child.lines.slice(0, remaining);
+            this$1.maybeSpill();
+          }
+          break
+        }
+        at -= sz;
+      }
+    },
+
+    // When a node has grown, check whether it should be split.
+    maybeSpill: function() {
+      if (this.children.length <= 10) { return }
+      var me = this;
+      do {
+        var spilled = me.children.splice(me.children.length - 5, 5);
+        var sibling = new BranchChunk(spilled);
+        if (!me.parent) { // Become the parent node
+          var copy = new BranchChunk(me.children);
+          copy.parent = me;
+          me.children = [copy, sibling];
+          me = copy;
+       } else {
+          me.size -= sibling.size;
+          me.height -= sibling.height;
+          var myIndex = indexOf(me.parent.children, me);
+          me.parent.children.splice(myIndex + 1, 0, sibling);
+        }
+        sibling.parent = me.parent;
+      } while (me.children.length > 10)
+      me.parent.maybeSpill();
+    },
+
+    iterN: function(at, n, op) {
+      var this$1 = this;
+
+      for (var i = 0; i < this.children.length; ++i) {
+        var child = this$1.children[i], sz = child.chunkSize();
+        if (at < sz) {
+          var used = Math.min(n, sz - at);
+          if (child.iterN(at, used, op)) { return true }
+          if ((n -= used) == 0) { break }
+          at = 0;
+        } else { at -= sz; }
+      }
+    }
+  };
+
+  // Line widgets are block elements displayed above or below a line.
+
+  var LineWidget = function(doc, node, options) {
+    var this$1 = this;
+
+    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+      { this$1[opt] = options[opt]; } } }
+    this.doc = doc;
+    this.node = node;
+  };
+
+  LineWidget.prototype.clear = function () {
+      var this$1 = this;
+
+    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
+    if (no == null || !ws) { return }
+    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }
+    if (!ws.length) { line.widgets = null; }
+    var height = widgetHeight(this);
+    updateLineHeight(line, Math.max(0, line.height - height));
+    if (cm) {
+      runInOp(cm, function () {
+        adjustScrollWhenAboveVisible(cm, line, -height);
+        regLineChange(cm, no, "widget");
+      });
+      signalLater(cm, "lineWidgetCleared", cm, this, no);
+    }
+  };
+
+  LineWidget.prototype.changed = function () {
+      var this$1 = this;
+
+    var oldH = this.height, cm = this.doc.cm, line = this.line;
+    this.height = null;
+    var diff = widgetHeight(this) - oldH;
+    if (!diff) { return }
+    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
+    if (cm) {
+      runInOp(cm, function () {
+        cm.curOp.forceUpdate = true;
+        adjustScrollWhenAboveVisible(cm, line, diff);
+        signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
+      });
+    }
+  };
+  eventMixin(LineWidget);
+
+  function adjustScrollWhenAboveVisible(cm, line, diff) {
+    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+      { addToScrollTop(cm, diff); }
+  }
+
+  function addLineWidget(doc, handle, node, options) {
+    var widget = new LineWidget(doc, node, options);
+    var cm = doc.cm;
+    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
+    changeLine(doc, handle, "widget", function (line) {
+      var widgets = line.widgets || (line.widgets = []);
+      if (widget.insertAt == null) { widgets.push(widget); }
+      else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }
+      widget.line = line;
+      if (cm && !lineIsHidden(doc, line)) {
+        var aboveVisible = heightAtLine(line) < doc.scrollTop;
+        updateLineHeight(line, line.height + widgetHeight(widget));
+        if (aboveVisible) { addToScrollTop(cm, widget.height); }
+        cm.curOp.forceUpdate = true;
+      }
+      return true
+    });
+    if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
+    return widget
+  }
+
+  // TEXTMARKERS
+
+  // Created with markText and setBookmark methods. A TextMarker is a
+  // handle that can be used to clear or find a marked position in the
+  // document. Line objects hold arrays (markedSpans) containing
+  // {from, to, marker} object pointing to such marker objects, and
+  // indicating that such a marker is present on that line. Multiple
+  // lines may point to the same marker when it spans across lines.
+  // The spans will have null for their from/to properties when the
+  // marker continues beyond the start/end of the line. Markers have
+  // links back to the lines they currently touch.
+
+  // Collapsed markers have unique ids, in order to be able to order
+  // them, which is needed for uniquely determining an outer marker
+  // when they overlap (they may nest, but not partially overlap).
+  var nextMarkerId = 0;
+
+  var TextMarker = function(doc, type) {
+    this.lines = [];
+    this.type = type;
+    this.doc = doc;
+    this.id = ++nextMarkerId;
+  };
+
+  // Clear the marker.
+  TextMarker.prototype.clear = function () {
+      var this$1 = this;
+
+    if (this.explicitlyCleared) { return }
+    var cm = this.doc.cm, withOp = cm && !cm.curOp;
+    if (withOp) { startOperation(cm); }
+    if (hasHandler(this, "clear")) {
+      var found = this.find();
+      if (found) { signalLater(this, "clear", found.from, found.to); }
+    }
+    var min = null, max = null;
+    for (var i = 0; i < this.lines.length; ++i) {
+      var line = this$1.lines[i];
+      var span = getMarkedSpanFor(line.markedSpans, this$1);
+      if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); }
+      else if (cm) {
+        if (span.to != null) { max = lineNo(line); }
+        if (span.from != null) { min = lineNo(line); }
+      }
+      line.markedSpans = removeMarkedSpan(line.markedSpans, span);
+      if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+        { updateLineHeight(line, textHeight(cm.display)); }
+    }
+    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+      var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);
+      if (len > cm.display.maxLineLength) {
+        cm.display.maxLine = visual;
+        cm.display.maxLineLength = len;
+        cm.display.maxLineChanged = true;
+      }
+    } }
+
+    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
+    this.lines.length = 0;
+    this.explicitlyCleared = true;
+    if (this.atomic && this.doc.cantEdit) {
+      this.doc.cantEdit = false;
+      if (cm) { reCheckSelection(cm.doc); }
+    }
+    if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
+    if (withOp) { endOperation(cm); }
+    if (this.parent) { this.parent.clear(); }
+  };
+
+  // Find the position of the marker in the document. Returns a {from,
+  // to} object by default. Side can be passed to get a specific side
+  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+  // Pos objects returned contain a line object, rather than a line
+  // number (used to prevent looking up the same line twice).
+  TextMarker.prototype.find = function (side, lineObj) {
+      var this$1 = this;
+
+    if (side == null && this.type == "bookmark") { side = 1; }
+    var from, to;
+    for (var i = 0; i < this.lines.length; ++i) {
+      var line = this$1.lines[i];
+      var span = getMarkedSpanFor(line.markedSpans, this$1);
+      if (span.from != null) {
+        from = Pos(lineObj ? line : lineNo(line), span.from);
+        if (side == -1) { return from }
+      }
+      if (span.to != null) {
+        to = Pos(lineObj ? line : lineNo(line), span.to);
+        if (side == 1) { return to }
+      }
+    }
+    return from && {from: from, to: to}
+  };
+
+  // Signals that the marker's widget changed, and surrounding layout
+  // should be recomputed.
+  TextMarker.prototype.changed = function () {
+      var this$1 = this;
+
+    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
+    if (!pos || !cm) { return }
+    runInOp(cm, function () {
+      var line = pos.line, lineN = lineNo(pos.line);
+      var view = findViewForLine(cm, lineN);
+      if (view) {
+        clearLineMeasurementCacheFor(view);
+        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
+      }
+      cm.curOp.updateMaxLine = true;
+      if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+        var oldHeight = widget.height;
+        widget.height = null;
+        var dHeight = widgetHeight(widget) - oldHeight;
+        if (dHeight)
+          { updateLineHeight(line, line.height + dHeight); }
+      }
+      signalLater(cm, "markerChanged", cm, this$1);
+    });
+  };
+
+  TextMarker.prototype.attachLine = function (line) {
+    if (!this.lines.length && this.doc.cm) {
+      var op = this.doc.cm.curOp;
+      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
+    }
+    this.lines.push(line);
+  };
+
+  TextMarker.prototype.detachLine = function (line) {
+    this.lines.splice(indexOf(this.lines, line), 1);
+    if (!this.lines.length && this.doc.cm) {
+      var op = this.doc.cm.curOp
+      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
+    }
+  };
+  eventMixin(TextMarker);
+
+  // Create a marker, wire it up to the right lines, and
+  function markText(doc, from, to, options, type) {
+    // Shared markers (across linked documents) are handled separately
+    // (markTextShared will call out to this again, once per
+    // document).
+    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+    // Ensure we are in an operation.
+    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+    var marker = new TextMarker(doc, type), diff = cmp(from, to);
+    if (options) { copyObj(options, marker, false); }
+    // Don't connect empty markers unless clearWhenEmpty is false
+    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+      { return marker }
+    if (marker.replacedWith) {
+      // Showing up as a widget implies collapsed (widget replaces text)
+      marker.collapsed = true;
+      marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
+      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
+      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
+    }
+    if (marker.collapsed) {
+      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+        { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+      seeCollapsedSpans();
+    }
+
+    if (marker.addToHistory)
+      { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }
+
+    var curLine = from.line, cm = doc.cm, updateMaxLine;
+    doc.iter(curLine, to.line + 1, function (line) {
+      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+        { updateMaxLine = true; }
+      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
+      addMarkedSpan(line, new MarkedSpan(marker,
+                                         curLine == from.line ? from.ch : null,
+                                         curLine == to.line ? to.ch : null));
+      ++curLine;
+    });
+    // lineIsHidden depends on the presence of the spans, so needs a second pass
+    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
+    }); }
+
+    if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }
+
+    if (marker.readOnly) {
+      seeReadOnlySpans();
+      if (doc.history.done.length || doc.history.undone.length)
+        { doc.clearHistory(); }
+    }
+    if (marker.collapsed) {
+      marker.id = ++nextMarkerId;
+      marker.atomic = true;
+    }
+    if (cm) {
+      // Sync editor state
+      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
+      if (marker.collapsed)
+        { regChange(cm, from.line, to.line + 1); }
+      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||
+               marker.attributes || marker.title)
+        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
+      if (marker.atomic) { reCheckSelection(cm.doc); }
+      signalLater(cm, "markerAdded", cm, marker);
+    }
+    return marker
+  }
+
+  // SHARED TEXTMARKERS
+
+  // A shared marker spans multiple linked documents. It is
+  // implemented as a meta-marker-object controlling multiple normal
+  // markers.
+  var SharedTextMarker = function(markers, primary) {
+    var this$1 = this;
+
+    this.markers = markers;
+    this.primary = primary;
+    for (var i = 0; i < markers.length; ++i)
+      { markers[i].parent = this$1; }
+  };
+
+  SharedTextMarker.prototype.clear = function () {
+      var this$1 = this;
+
+    if (this.explicitlyCleared) { return }
+    this.explicitlyCleared = true;
+    for (var i = 0; i < this.markers.length; ++i)
+      { this$1.markers[i].clear(); }
+    signalLater(this, "clear");
+  };
+
+  SharedTextMarker.prototype.find = function (side, lineObj) {
+    return this.primary.find(side, lineObj)
+  };
+  eventMixin(SharedTextMarker);
+
+  function markTextShared(doc, from, to, options, type) {
+    options = copyObj(options);
+    options.shared = false;
+    var markers = [markText(doc, from, to, options, type)], primary = markers[0];
+    var widget = options.widgetNode;
+    linkedDocs(doc, function (doc) {
+      if (widget) { options.widgetNode = widget.cloneNode(true); }
+      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
+      for (var i = 0; i < doc.linked.length; ++i)
+        { if (doc.linked[i].isParent) { return } }
+      primary = lst(markers);
+    });
+    return new SharedTextMarker(markers, primary)
+  }
+
+  function findSharedMarkers(doc) {
+    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+  }
+
+  function copySharedMarkers(doc, markers) {
+    for (var i = 0; i < markers.length; i++) {
+      var marker = markers[i], pos = marker.find();
+      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
+      if (cmp(mFrom, mTo)) {
+        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
+        marker.markers.push(subMark);
+        subMark.parent = marker;
+      }
+    }
+  }
+
+  function detachSharedMarkers(markers) {
+    var loop = function ( i ) {
+      var marker = markers[i], linked = [marker.primary.doc];
+      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
+      for (var j = 0; j < marker.markers.length; j++) {
+        var subMarker = marker.markers[j];
+        if (indexOf(linked, subMarker.doc) == -1) {
+          subMarker.parent = null;
+          marker.markers.splice(j--, 1);
+        }
+      }
+    };
+
+    for (var i = 0; i < markers.length; i++) loop( i );
+  }
+
+  var nextDocId = 0;
+  var Doc = function(text, mode, firstLine, lineSep, direction) {
+    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+    if (firstLine == null) { firstLine = 0; }
+
+    BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
+    this.first = firstLine;
+    this.scrollTop = this.scrollLeft = 0;
+    this.cantEdit = false;
+    this.cleanGeneration = 1;
+    this.modeFrontier = this.highlightFrontier = firstLine;
+    var start = Pos(firstLine, 0);
+    this.sel = simpleSelection(start);
+    this.history = new History(null);
+    this.id = ++nextDocId;
+    this.modeOption = mode;
+    this.lineSep = lineSep;
+    this.direction = (direction == "rtl") ? "rtl" : "ltr";
+    this.extend = false;
+
+    if (typeof text == "string") { text = this.splitLines(text); }
+    updateDoc(this, {from: start, to: start, text: text});
+    setSelection(this, simpleSelection(start), sel_dontScroll);
+  };
+
+  Doc.prototype = createObj(BranchChunk.prototype, {
+    constructor: Doc,
+    // Iterate over the document. Supports two forms -- with only one
+    // argument, it calls that for each line in the document. With
+    // three, it iterates over the range given by the first two (with
+    // the second being non-inclusive).
+    iter: function(from, to, op) {
+      if (op) { this.iterN(from - this.first, to - from, op); }
+      else { this.iterN(this.first, this.first + this.size, from); }
+    },
+
+    // Non-public interface for adding and removing lines.
+    insert: function(at, lines) {
+      var height = 0;
+      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
+      this.insertInner(at - this.first, lines, height);
+    },
+    remove: function(at, n) { this.removeInner(at - this.first, n); },
+
+    // From here, the methods are part of the public interface. Most
+    // are also available from CodeMirror (editor) instances.
+
+    getValue: function(lineSep) {
+      var lines = getLines(this, this.first, this.first + this.size);
+      if (lineSep === false) { return lines }
+      return lines.join(lineSep || this.lineSeparator())
+    },
+    setValue: docMethodOp(function(code) {
+      var top = Pos(this.first, 0), last = this.first + this.size - 1;
+      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+                        text: this.splitLines(code), origin: "setValue", full: true}, true);
+      if (this.cm) { scrollToCoords(this.cm, 0, 0); }
+      setSelection(this, simpleSelection(top), sel_dontScroll);
+    }),
+    replaceRange: function(code, from, to, origin) {
+      from = clipPos(this, from);
+      to = to ? clipPos(this, to) : from;
+      replaceRange(this, code, from, to, origin);
+    },
+    getRange: function(from, to, lineSep) {
+      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
+      if (lineSep === false) { return lines }
+      return lines.join(lineSep || this.lineSeparator())
+    },
+
+    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+    getLineNumber: function(line) {return lineNo(line)},
+
+    getLineHandleVisualStart: function(line) {
+      if (typeof line == "number") { line = getLine(this, line); }
+      return visualLine(line)
+    },
+
+    lineCount: function() {return this.size},
+    firstLine: function() {return this.first},
+    lastLine: function() {return this.first + this.size - 1},
+
+    clipPos: function(pos) {return clipPos(this, pos)},
+
+    getCursor: function(start) {
+      var range$$1 = this.sel.primary(), pos;
+      if (start == null || start == "head") { pos = range$$1.head; }
+      else if (start == "anchor") { pos = range$$1.anchor; }
+      else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); }
+      else { pos = range$$1.from(); }
+      return pos
+    },
+    listSelections: function() { return this.sel.ranges },
+    somethingSelected: function() {return this.sel.somethingSelected()},
+
+    setCursor: docMethodOp(function(line, ch, options) {
+      setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
+    }),
+    setSelection: docMethodOp(function(anchor, head, options) {
+      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
+    }),
+    extendSelection: docMethodOp(function(head, other, options) {
+      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
+    }),
+    extendSelections: docMethodOp(function(heads, options) {
+      extendSelections(this, clipPosArray(this, heads), options);
+    }),
+    extendSelectionsBy: docMethodOp(function(f, options) {
+      var heads = map(this.sel.ranges, f);
+      extendSelections(this, clipPosArray(this, heads), options);
+    }),
+    setSelections: docMethodOp(function(ranges, primary, options) {
+      var this$1 = this;
+
+      if (!ranges.length) { return }
+      var out = [];
+      for (var i = 0; i < ranges.length; i++)
+        { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+                           clipPos(this$1, ranges[i].head)); }
+      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
+      setSelection(this, normalizeSelection(this.cm, out, primary), options);
+    }),
+    addSelection: docMethodOp(function(anchor, head, options) {
+      var ranges = this.sel.ranges.slice(0);
+      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
+      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
+    }),
+
+    getSelection: function(lineSep) {
+      var this$1 = this;
+
+      var ranges = this.sel.ranges, lines;
+      for (var i = 0; i < ranges.length; i++) {
+        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+        lines = lines ? lines.concat(sel) : sel;
+      }
+      if (lineSep === false) { return lines }
+      else { return lines.join(lineSep || this.lineSeparator()) }
+    },
+    getSelections: function(lineSep) {
+      var this$1 = this;
+
+      var parts = [], ranges = this.sel.ranges;
+      for (var i = 0; i < ranges.length; i++) {
+        var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+        if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }
+        parts[i] = sel;
+      }
+      return parts
+    },
+    replaceSelection: function(code, collapse, origin) {
+      var dup = [];
+      for (var i = 0; i < this.sel.ranges.length; i++)
+        { dup[i] = code; }
+      this.replaceSelections(dup, collapse, origin || "+input");
+    },
+    replaceSelections: docMethodOp(function(code, collapse, origin) {
+      var this$1 = this;
+
+      var changes = [], sel = this.sel;
+      for (var i = 0; i < sel.ranges.length; i++) {
+        var range$$1 = sel.ranges[i];
+        changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};
+      }
+      var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
+      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+        { makeChange(this$1, changes[i$1]); }
+      if (newSel) { setSelectionReplaceHistory(this, newSel); }
+      else if (this.cm) { ensureCursorVisible(this.cm); }
+    }),
+    undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
+    redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
+    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
+    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),
+
+    setExtending: function(val) {this.extend = val;},
+    getExtending: function() {return this.extend},
+
+    historySize: function() {
+      var hist = this.history, done = 0, undone = 0;
+      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
+      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
+      return {undo: done, redo: undone}
+    },
+    clearHistory: function() {this.history = new History(this.history.maxGeneration);},
+
+    markClean: function() {
+      this.cleanGeneration = this.changeGeneration(true);
+    },
+    changeGeneration: function(forceSplit) {
+      if (forceSplit)
+        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
+      return this.history.generation
+    },
+    isClean: function (gen) {
+      return this.history.generation == (gen || this.cleanGeneration)
+    },
+
+    getHistory: function() {
+      return {done: copyHistoryArray(this.history.done),
+              undone: copyHistoryArray(this.history.undone)}
+    },
+    setHistory: function(histData) {
+      var hist = this.history = new History(this.history.maxGeneration);
+      hist.done = copyHistoryArray(histData.done.slice(0), null, true);
+      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
+    },
+
+    setGutterMarker: docMethodOp(function(line, gutterID, value) {
+      return changeLine(this, line, "gutter", function (line) {
+        var markers = line.gutterMarkers || (line.gutterMarkers = {});
+        markers[gutterID] = value;
+        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
+        return true
+      })
+    }),
+
+    clearGutter: docMethodOp(function(gutterID) {
+      var this$1 = this;
+
+      this.iter(function (line) {
+        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+          changeLine(this$1, line, "gutter", function () {
+            line.gutterMarkers[gutterID] = null;
+            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
+            return true
+          });
+        }
+      });
+    }),
+
+    lineInfo: function(line) {
+      var n;
+      if (typeof line == "number") {
+        if (!isLine(this, line)) { return null }
+        n = line;
+        line = getLine(this, line);
+        if (!line) { return null }
+      } else {
+        n = lineNo(line);
+        if (n == null) { return null }
+      }
+      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+              widgets: line.widgets}
+    },
+
+    addLineClass: docMethodOp(function(handle, where, cls) {
+      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+        var prop = where == "text" ? "textClass"
+                 : where == "background" ? "bgClass"
+                 : where == "gutter" ? "gutterClass" : "wrapClass";
+        if (!line[prop]) { line[prop] = cls; }
+        else if (classTest(cls).test(line[prop])) { return false }
+        else { line[prop] += " " + cls; }
+        return true
+      })
+    }),
+    removeLineClass: docMethodOp(function(handle, where, cls) {
+      return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+        var prop = where == "text" ? "textClass"
+                 : where == "background" ? "bgClass"
+                 : where == "gutter" ? "gutterClass" : "wrapClass";
+        var cur = line[prop];
+        if (!cur) { return false }
+        else if (cls == null) { line[prop] = null; }
+        else {
+          var found = cur.match(classTest(cls));
+          if (!found) { return false }
+          var end = found.index + found[0].length;
+          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
+        }
+        return true
+      })
+    }),
+
+    addLineWidget: docMethodOp(function(handle, node, options) {
+      return addLineWidget(this, handle, node, options)
+    }),
+    removeLineWidget: function(widget) { widget.clear(); },
+
+    markText: function(from, to, options) {
+      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+    },
+    setBookmark: function(pos, options) {
+      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+                      insertLeft: options && options.insertLeft,
+                      clearWhenEmpty: false, shared: options && options.shared,
+                      handleMouseEvents: options && options.handleMouseEvents};
+      pos = clipPos(this, pos);
+      return markText(this, pos, pos, realOpts, "bookmark")
+    },
+    findMarksAt: function(pos) {
+      pos = clipPos(this, pos);
+      var markers = [], spans = getLine(this, pos.line).markedSpans;
+      if (spans) { for (var i = 0; i < spans.length; ++i) {
+        var span = spans[i];
+        if ((span.from == null || span.from <= pos.ch) &&
+            (span.to == null || span.to >= pos.ch))
+          { markers.push(span.marker.parent || span.marker); }
+      } }
+      return markers
+    },
+    findMarks: function(from, to, filter) {
+      from = clipPos(this, from); to = clipPos(this, to);
+      var found = [], lineNo$$1 = from.line;
+      this.iter(from.line, to.line + 1, function (line) {
+        var spans = line.markedSpans;
+        if (spans) { for (var i = 0; i < spans.length; i++) {
+          var span = spans[i];
+          if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||
+                span.from == null && lineNo$$1 != from.line ||
+                span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&
+              (!filter || filter(span.marker)))
+            { found.push(span.marker.parent || span.marker); }
+        } }
+        ++lineNo$$1;
+      });
+      return found
+    },
+    getAllMarks: function() {
+      var markers = [];
+      this.iter(function (line) {
+        var sps = line.markedSpans;
+        if (sps) { for (var i = 0; i < sps.length; ++i)
+          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
+      });
+      return markers
+    },
+
+    posFromIndex: function(off) {
+      var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;
+      this.iter(function (line) {
+        var sz = line.text.length + sepSize;
+        if (sz > off) { ch = off; return true }
+        off -= sz;
+        ++lineNo$$1;
+      });
+      return clipPos(this, Pos(lineNo$$1, ch))
+    },
+    indexFromPos: function (coords) {
+      coords = clipPos(this, coords);
+      var index = coords.ch;
+      if (coords.line < this.first || coords.ch < 0) { return 0 }
+      var sepSize = this.lineSeparator().length;
+      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+        index += line.text.length + sepSize;
+      });
+      return index
+    },
+
+    copy: function(copyHistory) {
+      var doc = new Doc(getLines(this, this.first, this.first + this.size),
+                        this.modeOption, this.first, this.lineSep, this.direction);
+      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
+      doc.sel = this.sel;
+      doc.extend = false;
+      if (copyHistory) {
+        doc.history.undoDepth = this.history.undoDepth;
+        doc.setHistory(this.getHistory());
+      }
+      return doc
+    },
+
+    linkedDoc: function(options) {
+      if (!options) { options = {}; }
+      var from = this.first, to = this.first + this.size;
+      if (options.from != null && options.from > from) { from = options.from; }
+      if (options.to != null && options.to < to) { to = options.to; }
+      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
+      if (options.sharedHist) { copy.history = this.history
+      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
+      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
+      copySharedMarkers(copy, findSharedMarkers(this));
+      return copy
+    },
+    unlinkDoc: function(other) {
+      var this$1 = this;
+
+      if (other instanceof CodeMirror) { other = other.doc; }
+      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+        var link = this$1.linked[i];
+        if (link.doc != other) { continue }
+        this$1.linked.splice(i, 1);
+        other.unlinkDoc(this$1);
+        detachSharedMarkers(findSharedMarkers(this$1));
+        break
+      } }
+      // If the histories were shared, split them again
+      if (other.history == this.history) {
+        var splitIds = [other.id];
+        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
+        other.history = new History(null);
+        other.history.done = copyHistoryArray(this.history.done, splitIds);
+        other.history.undone = copyHistoryArray(this.history.undone, splitIds);
+      }
+    },
+    iterLinkedDocs: function(f) {linkedDocs(this, f);},
+
+    getMode: function() {return this.mode},
+    getEditor: function() {return this.cm},
+
+    splitLines: function(str) {
+      if (this.lineSep) { return str.split(this.lineSep) }
+      return splitLinesAuto(str)
+    },
+    lineSeparator: function() { return this.lineSep || "\n" },
+
+    setDirection: docMethodOp(function (dir) {
+      if (dir != "rtl") { dir = "ltr"; }
+      if (dir == this.direction) { return }
+      this.direction = dir;
+      this.iter(function (line) { return line.order = null; });
+      if (this.cm) { directionChanged(this.cm); }
+    })
+  });
+
+  // Public alias.
+  Doc.prototype.eachLine = Doc.prototype.iter;
+
+  // Kludge to work around strange IE behavior where it'll sometimes
+  // re-fire a series of drag-related events right after the drop (#1551)
+  var lastDrop = 0;
+
+  function onDrop(e) {
+    var cm = this;
+    clearDragCursor(cm);
+    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+      { return }
+    e_preventDefault(e);
+    if (ie) { lastDrop = +new Date; }
+    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
+    if (!pos || cm.isReadOnly()) { return }
+    // Might be a file drop, in which case we simply extract the text
+    // and insert it.
+    if (files && files.length && window.FileReader && window.File) {
+      var n = files.length, text = Array(n), read = 0;
+      var loadFile = function (file, i) {
+        if (cm.options.allowDropFileTypes &&
+            indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+          { return }
+
+        var reader = new FileReader;
+        reader.onload = operation(cm, function () {
+          var content = reader.result;
+          if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; }
+          text[i] = content;
+          if (++read == n) {
+            pos = clipPos(cm.doc, pos);
+            var change = {from: pos, to: pos,
+                          text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+                          origin: "paste"};
+            makeChange(cm.doc, change);
+            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));
+          }
+        });
+        reader.readAsText(file);
+      };
+      for (var i = 0; i < n; ++i) { loadFile(files[i], i); }
+    } else { // Normal drop
+      // Don't do a replace if the drop happened inside of the selected text.
+      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+        cm.state.draggingText(e);
+        // Ensure the editor is re-focused
+        setTimeout(function () { return cm.display.input.focus(); }, 20);
+        return
+      }
+      try {
+        var text$1 = e.dataTransfer.getData("Text");
+        if (text$1) {
+          var selected;
+          if (cm.state.draggingText && !cm.state.draggingText.copy)
+            { selected = cm.listSelections(); }
+          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
+          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+            { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
+          cm.replaceSelection(text$1, "around", "paste");
+          cm.display.input.focus();
+        }
+      }
+      catch(e){}
+    }
+  }
+
+  function onDragStart(cm, e) {
+    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+    e.dataTransfer.setData("Text", cm.getSelection());
+    e.dataTransfer.effectAllowed = "copyMove";
+
+    // Use dummy image instead of default browsers image.
+    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+    if (e.dataTransfer.setDragImage && !safari) {
+      var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
+      img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
+      if (presto) {
+        img.width = img.height = 1;
+        cm.display.wrapper.appendChild(img);
+        // Force a relayout, or Opera won't use our image for some obscure reason
+        img._top = img.offsetTop;
+      }
+      e.dataTransfer.setDragImage(img, 0, 0);
+      if (presto) { img.parentNode.removeChild(img); }
+    }
+  }
+
+  function onDragOver(cm, e) {
+    var pos = posFromMouse(cm, e);
+    if (!pos) { return }
+    var frag = document.createDocumentFragment();
+    drawSelectionCursor(cm, pos, frag);
+    if (!cm.display.dragCursor) {
+      cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
+      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
+    }
+    removeChildrenAndAdd(cm.display.dragCursor, frag);
+  }
+
+  function clearDragCursor(cm) {
+    if (cm.display.dragCursor) {
+      cm.display.lineSpace.removeChild(cm.display.dragCursor);
+      cm.display.dragCursor = null;
+    }
+  }
+
+  // These must be handled carefully, because naively registering a
+  // handler for each editor will cause the editors to never be
+  // garbage collected.
+
+  function forEachCodeMirror(f) {
+    if (!document.getElementsByClassName) { return }
+    var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
+    for (var i = 0; i < byClass.length; i++) {
+      var cm = byClass[i].CodeMirror;
+      if (cm) { editors.push(cm); }
+    }
+    if (editors.length) { editors[0].operation(function () {
+      for (var i = 0; i < editors.length; i++) { f(editors[i]); }
+    }); }
+  }
+
+  var globalsRegistered = false;
+  function ensureGlobalHandlers() {
+    if (globalsRegistered) { return }
+    registerGlobalHandlers();
+    globalsRegistered = true;
+  }
+  function registerGlobalHandlers() {
+    // When the window resizes, we need to refresh active editors.
+    var resizeTimer;
+    on(window, "resize", function () {
+      if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+        resizeTimer = null;
+        forEachCodeMirror(onResize);
+      }, 100); }
+    });
+    // When the window loses focus, we want to show the editor as blurred
+    on(window, "blur", function () { return forEachCodeMirror(onBlur); });
+  }
+  // Called when the window resizes
+  function onResize(cm) {
+    var d = cm.display;
+    // Might be a text scaling operation, clear size caches.
+    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+    d.scrollbarsClipped = false;
+    cm.setSize();
+  }
+
+  var keyNames = {
+    3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+    19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+    36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+    46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+    106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
+    173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+    221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+    63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+  };
+
+  // Number keys
+  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
+  // Alphabetic keys
+  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
+  // Function keys
+  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }
+
+  var keyMap = {};
+
+  keyMap.basic = {
+    "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+    "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+    "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+    "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+    "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+    "Esc": "singleSelection"
+  };
+  // Note that the save and find-related commands aren't defined by
+  // default. User code or addons can define them. Unknown commands
+  // are simply ignored.
+  keyMap.pcDefault = {
+    "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+    "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+    "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+    "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+    "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+    "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+    "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+    "fallthrough": "basic"
+  };
+  // Very basic readline/emacs-style bindings, which are standard on Mac.
+  keyMap.emacsy = {
+    "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+    "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+    "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+    "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+    "Ctrl-O": "openLine"
+  };
+  keyMap.macDefault = {
+    "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+    "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+    "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+    "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+    "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+    "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+    "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+    "fallthrough": ["basic", "emacsy"]
+  };
+  keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
+
+  // KEYMAP DISPATCH
+
+  function normalizeKeyName(name) {
+    var parts = name.split(/-(?!$)/);
+    name = parts[parts.length - 1];
+    var alt, ctrl, shift, cmd;
+    for (var i = 0; i < parts.length - 1; i++) {
+      var mod = parts[i];
+      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
+      else if (/^a(lt)?$/i.test(mod)) { alt = true; }
+      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
+      else if (/^s(hift)?$/i.test(mod)) { shift = true; }
+      else { throw new Error("Unrecognized modifier name: " + mod) }
+    }
+    if (alt) { name = "Alt-" + name; }
+    if (ctrl) { name = "Ctrl-" + name; }
+    if (cmd) { name = "Cmd-" + name; }
+    if (shift) { name = "Shift-" + name; }
+    return name
+  }
+
+  // This is a kludge to keep keymaps mostly working as raw objects
+  // (backwards compatibility) while at the same time support features
+  // like normalization and multi-stroke key bindings. It compiles a
+  // new normalized keymap, and then updates the old object to reflect
+  // this.
+  function normalizeKeyMap(keymap) {
+    var copy = {};
+    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+      var value = keymap[keyname];
+      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+      if (value == "...") { delete keymap[keyname]; continue }
+
+      var keys = map(keyname.split(" "), normalizeKeyName);
+      for (var i = 0; i < keys.length; i++) {
+        var val = (void 0), name = (void 0);
+        if (i == keys.length - 1) {
+          name = keys.join(" ");
+          val = value;
+        } else {
+          name = keys.slice(0, i + 1).join(" ");
+          val = "...";
+        }
+        var prev = copy[name];
+        if (!prev) { copy[name] = val; }
+        else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+      }
+      delete keymap[keyname];
+    } }
+    for (var prop in copy) { keymap[prop] = copy[prop]; }
+    return keymap
+  }
+
+  function lookupKey(key, map$$1, handle, context) {
+    map$$1 = getKeyMap(map$$1);
+    var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];
+    if (found === false) { return "nothing" }
+    if (found === "...") { return "multi" }
+    if (found != null && handle(found)) { return "handled" }
+
+    if (map$$1.fallthrough) {
+      if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]")
+        { return lookupKey(key, map$$1.fallthrough, handle, context) }
+      for (var i = 0; i < map$$1.fallthrough.length; i++) {
+        var result = lookupKey(key, map$$1.fallthrough[i], handle, context);
+        if (result) { return result }
+      }
+    }
+  }
+
+  // Modifier key presses don't count as 'real' key presses for the
+  // purpose of keymap fallthrough.
+  function isModifierKey(value) {
+    var name = typeof value == "string" ? value : keyNames[value.keyCode];
+    return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+  }
+
+  function addModifierNames(name, event, noShift) {
+    var base = name;
+    if (event.altKey && base != "Alt") { name = "Alt-" + name; }
+    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
+    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; }
+    if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
+    return name
+  }
+
+  // Look up the name of a key as indicated by an event object.
+  function keyName(event, noShift) {
+    if (presto && event.keyCode == 34 && event["char"]) { return false }
+    var name = keyNames[event.keyCode];
+    if (name == null || event.altGraphKey) { return false }
+    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
+    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
+    if (event.keyCode == 3 && event.code) { name = event.code; }
+    return addModifierNames(name, event, noShift)
+  }
+
+  function getKeyMap(val) {
+    return typeof val == "string" ? keyMap[val] : val
+  }
+
+  // Helper for deleting text near the selection(s), used to implement
+  // backspace, delete, and similar functionality.
+  function deleteNearSelection(cm, compute) {
+    var ranges = cm.doc.sel.ranges, kill = [];
+    // Build up a set of ranges to kill first, merging overlapping
+    // ranges.
+    for (var i = 0; i < ranges.length; i++) {
+      var toKill = compute(ranges[i]);
+      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+        var replaced = kill.pop();
+        if (cmp(replaced.from, toKill.from) < 0) {
+          toKill.from = replaced.from;
+          break
+        }
+      }
+      kill.push(toKill);
+    }
+    // Next, remove those actual ranges.
+    runInOp(cm, function () {
+      for (var i = kill.length - 1; i >= 0; i--)
+        { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
+      ensureCursorVisible(cm);
+    });
+  }
+
+  function moveCharLogically(line, ch, dir) {
+    var target = skipExtendingChars(line.text, ch + dir, dir);
+    return target < 0 || target > line.text.length ? null : target
+  }
+
+  function moveLogically(line, start, dir) {
+    var ch = moveCharLogically(line, start.ch, dir);
+    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+  }
+
+  function endOfLine(visually, cm, lineObj, lineNo, dir) {
+    if (visually) {
+      var order = getOrder(lineObj, cm.doc.direction);
+      if (order) {
+        var part = dir < 0 ? lst(order) : order[0];
+        var moveInStorageOrder = (dir < 0) == (part.level == 1);
+        var sticky = moveInStorageOrder ? "after" : "before";
+        var ch;
+        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+        // it could be that the last bidi part is not on the last visual line,
+        // since visual lines contain content order-consecutive chunks.
+        // Thus, in rtl, we are looking for the first (content-order) character
+        // in the rtl chunk that is on the last line (that is, the same line
+        // as the last (content-order) character).
+        if (part.level > 0 || cm.doc.direction == "rtl") {
+          var prep = prepareMeasureForLine(cm, lineObj);
+          ch = dir < 0 ? lineObj.text.length - 1 : 0;
+          var targetTop = measureCharPrepared(cm, prep, ch).top;
+          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
+          if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
+        } else { ch = dir < 0 ? part.to : part.from; }
+        return new Pos(lineNo, ch, sticky)
+      }
+    }
+    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+  }
+
+  function moveVisually(cm, line, start, dir) {
+    var bidi = getOrder(line, cm.doc.direction);
+    if (!bidi) { return moveLogically(line, start, dir) }
+    if (start.ch >= line.text.length) {
+      start.ch = line.text.length;
+      start.sticky = "before";
+    } else if (start.ch <= 0) {
+      start.ch = 0;
+      start.sticky = "after";
+    }
+    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
+    if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+      // nothing interesting happens.
+      return moveLogically(line, start, dir)
+    }
+
+    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
+    var prep;
+    var getWrappedLineExtent = function (ch) {
+      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+      prep = prep || prepareMeasureForLine(cm, line);
+      return wrappedLineExtentChar(cm, line, prep, ch)
+    };
+    var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);
+
+    if (cm.doc.direction == "rtl" || part.level == 1) {
+      var moveInStorageOrder = (part.level == 1) == (dir < 0);
+      var ch = mv(start, moveInStorageOrder ? 1 : -1);
+      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+        // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+        var sticky = moveInStorageOrder ? "before" : "after";
+        return new Pos(start.line, ch, sticky)
+      }
+    }
+
+    // Case 3: Could not move within this bidi part in this visual line, so leave
+    // the current bidi part
+
+    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+        ? new Pos(start.line, mv(ch, 1), "before")
+        : new Pos(start.line, ch, "after"); };
+
+      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+        var part = bidi[partPos];
+        var moveInStorageOrder = (dir > 0) == (part.level != 1);
+        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
+        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+        ch = moveInStorageOrder ? part.from : mv(part.to, -1);
+        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+      }
+    };
+
+    // Case 3a: Look for other bidi parts on the same visual line
+    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
+    if (res) { return res }
+
+    // Case 3b: Look for other bidi parts on the next visual line
+    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
+    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
+      if (res) { return res }
+    }
+
+    // Case 4: Nowhere to move
+    return null
+  }
+
+  // Commands are parameter-less actions that can be performed on an
+  // editor, mostly used for keybindings.
+  var commands = {
+    selectAll: selectAll,
+    singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+    killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+      if (range.empty()) {
+        var len = getLine(cm.doc, range.head.line).text.length;
+        if (range.head.ch == len && range.head.line < cm.lastLine())
+          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+        else
+          { return {from: range.head, to: Pos(range.head.line, len)} }
+      } else {
+        return {from: range.from(), to: range.to()}
+      }
+    }); },
+    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+      from: Pos(range.from().line, 0),
+      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+    }); }); },
+    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+      from: Pos(range.from().line, 0), to: range.from()
+    }); }); },
+    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+      var top = cm.charCoords(range.head, "div").top + 5;
+      var leftPos = cm.coordsChar({left: 0, top: top}, "div");
+      return {from: leftPos, to: range.from()}
+    }); },
+    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+      var top = cm.charCoords(range.head, "div").top + 5;
+      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
+      return {from: range.from(), to: rightPos }
+    }); },
+    undo: function (cm) { return cm.undo(); },
+    redo: function (cm) { return cm.redo(); },
+    undoSelection: function (cm) { return cm.undoSelection(); },
+    redoSelection: function (cm) { return cm.redoSelection(); },
+    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+      {origin: "+move", bias: 1}
+    ); },
+    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+      {origin: "+move", bias: 1}
+    ); },
+    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+      {origin: "+move", bias: -1}
+    ); },
+    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+      var top = cm.cursorCoords(range.head, "div").top + 5;
+      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+    }, sel_move); },
+    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+      var top = cm.cursorCoords(range.head, "div").top + 5;
+      return cm.coordsChar({left: 0, top: top}, "div")
+    }, sel_move); },
+    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+      var top = cm.cursorCoords(range.head, "div").top + 5;
+      var pos = cm.coordsChar({left: 0, top: top}, "div");
+      if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+      return pos
+    }, sel_move); },
+    goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+    goLineDown: function (cm) { return cm.moveV(1, "line"); },
+    goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+    goPageDown: function (cm) { return cm.moveV(1, "page"); },
+    goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+    goCharRight: function (cm) { return cm.moveH(1, "char"); },
+    goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+    goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+    goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+    goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+    goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+    goWordRight: function (cm) { return cm.moveH(1, "word"); },
+    delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+    delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+    delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+    delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+    delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+    delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+    indentAuto: function (cm) { return cm.indentSelection("smart"); },
+    indentMore: function (cm) { return cm.indentSelection("add"); },
+    indentLess: function (cm) { return cm.indentSelection("subtract"); },
+    insertTab: function (cm) { return cm.replaceSelection("\t"); },
+    insertSoftTab: function (cm) {
+      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
+      for (var i = 0; i < ranges.length; i++) {
+        var pos = ranges[i].from();
+        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
+        spaces.push(spaceStr(tabSize - col % tabSize));
+      }
+      cm.replaceSelections(spaces);
+    },
+    defaultTab: function (cm) {
+      if (cm.somethingSelected()) { cm.indentSelection("add"); }
+      else { cm.execCommand("insertTab"); }
+    },
+    // Swap the two chars left and right of each selection's head.
+    // Move cursor behind the two swapped characters afterwards.
+    //
+    // Doesn't consider line feeds a character.
+    // Doesn't scan more than one line above to find a character.
+    // Doesn't do anything on an empty line.
+    // Doesn't do anything with non-empty selections.
+    transposeChars: function (cm) { return runInOp(cm, function () {
+      var ranges = cm.listSelections(), newSel = [];
+      for (var i = 0; i < ranges.length; i++) {
+        if (!ranges[i].empty()) { continue }
+        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
+        if (line) {
+          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
+          if (cur.ch > 0) {
+            cur = new Pos(cur.line, cur.ch + 1);
+            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+                            Pos(cur.line, cur.ch - 2), cur, "+transpose");
+          } else if (cur.line > cm.doc.first) {
+            var prev = getLine(cm.doc, cur.line - 1).text;
+            if (prev) {
+              cur = new Pos(cur.line, 1);
+              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+                              prev.charAt(prev.length - 1),
+                              Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
+            }
+          }
+        }
+        newSel.push(new Range(cur, cur));
+      }
+      cm.setSelections(newSel);
+    }); },
+    newlineAndIndent: function (cm) { return runInOp(cm, function () {
+      var sels = cm.listSelections();
+      for (var i = sels.length - 1; i >= 0; i--)
+        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
+      sels = cm.listSelections();
+      for (var i$1 = 0; i$1 < sels.length; i$1++)
+        { cm.indentLine(sels[i$1].from().line, null, true); }
+      ensureCursorVisible(cm);
+    }); },
+    openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+  };
+
+
+  function lineStart(cm, lineN) {
+    var line = getLine(cm.doc, lineN);
+    var visual = visualLine(line);
+    if (visual != line) { lineN = lineNo(visual); }
+    return endOfLine(true, cm, visual, lineN, 1)
+  }
+  function lineEnd(cm, lineN) {
+    var line = getLine(cm.doc, lineN);
+    var visual = visualLineEnd(line);
+    if (visual != line) { lineN = lineNo(visual); }
+    return endOfLine(true, cm, line, lineN, -1)
+  }
+  function lineStartSmart(cm, pos) {
+    var start = lineStart(cm, pos.line);
+    var line = getLine(cm.doc, start.line);
+    var order = getOrder(line, cm.doc.direction);
+    if (!order || order[0].level == 0) {
+      var firstNonWS = Math.max(0, line.text.search(/\S/));
+      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
+      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+    }
+    return start
+  }
+
+  // Run a handler that was bound to a key.
+  function doHandleBinding(cm, bound, dropShift) {
+    if (typeof bound == "string") {
+      bound = commands[bound];
+      if (!bound) { return false }
+    }
+    // Ensure previous input has been read, so that the handler sees a
+    // consistent view of the document
+    cm.display.input.ensurePolled();
+    var prevShift = cm.display.shift, done = false;
+    try {
+      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+      if (dropShift) { cm.display.shift = false; }
+      done = bound(cm) != Pass;
+    } finally {
+      cm.display.shift = prevShift;
+      cm.state.suppressEdits = false;
+    }
+    return done
+  }
+
+  function lookupKeyForEditor(cm, name, handle) {
+    for (var i = 0; i < cm.state.keyMaps.length; i++) {
+      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
+      if (result) { return result }
+    }
+    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+      || lookupKey(name, cm.options.keyMap, handle, cm)
+  }
+
+  // Note that, despite the name, this function is also used to check
+  // for bound mouse clicks.
+
+  var stopSeq = new Delayed;
+
+  function dispatchKey(cm, name, e, handle) {
+    var seq = cm.state.keySeq;
+    if (seq) {
+      if (isModifierKey(name)) { return "handled" }
+      if (/\'$/.test(name))
+        { cm.state.keySeq = null; }
+      else
+        { stopSeq.set(50, function () {
+          if (cm.state.keySeq == seq) {
+            cm.state.keySeq = null;
+            cm.display.input.reset();
+          }
+        }); }
+      if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
+    }
+    return dispatchKeyInner(cm, name, e, handle)
+  }
+
+  function dispatchKeyInner(cm, name, e, handle) {
+    var result = lookupKeyForEditor(cm, name, handle);
+
+    if (result == "multi")
+      { cm.state.keySeq = name; }
+    if (result == "handled")
+      { signalLater(cm, "keyHandled", cm, name, e); }
+
+    if (result == "handled" || result == "multi") {
+      e_preventDefault(e);
+      restartBlink(cm);
+    }
+
+    return !!result
+  }
+
+  // Handle a key from the keydown event.
+  function handleKeyBinding(cm, e) {
+    var name = keyName(e, true);
+    if (!name) { return false }
+
+    if (e.shiftKey && !cm.state.keySeq) {
+      // First try to resolve full name (including 'Shift-'). Failing
+      // that, see if there is a cursor-motion command (starting with
+      // 'go') bound to the keyname without 'Shift-'.
+      return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+          || dispatchKey(cm, name, e, function (b) {
+               if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+                 { return doHandleBinding(cm, b) }
+             })
+    } else {
+      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+    }
+  }
+
+  // Handle a key from the keypress event
+  function handleCharBinding(cm, e, ch) {
+    return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+  }
+
+  var lastStoppedKey = null;
+  function onKeyDown(e) {
+    var cm = this;
+    cm.curOp.focus = activeElt();
+    if (signalDOMEvent(cm, e)) { return }
+    // IE does strange things with escape.
+    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
+    var code = e.keyCode;
+    cm.display.shift = code == 16 || e.shiftKey;
+    var handled = handleKeyBinding(cm, e);
+    if (presto) {
+      lastStoppedKey = handled ? code : null;
+      // Opera has no cut event... we try to at least catch the key combo
+      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+        { cm.replaceSelection("", null, "cut"); }
+    }
+
+    // Turn mouse into crosshair when Alt is held on Mac.
+    if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+      { showCrossHair(cm); }
+  }
+
+  function showCrossHair(cm) {
+    var lineDiv = cm.display.lineDiv;
+    addClass(lineDiv, "CodeMirror-crosshair");
+
+    function up(e) {
+      if (e.keyCode == 18 || !e.altKey) {
+        rmClass(lineDiv, "CodeMirror-crosshair");
+        off(document, "keyup", up);
+        off(document, "mouseover", up);
+      }
+    }
+    on(document, "keyup", up);
+    on(document, "mouseover", up);
+  }
+
+  function onKeyUp(e) {
+    if (e.keyCode == 16) { this.doc.sel.shift = false; }
+    signalDOMEvent(this, e);
+  }
+
+  function onKeyPress(e) {
+    var cm = this;
+    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+    var keyCode = e.keyCode, charCode = e.charCode;
+    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
+    // Some browsers fire keypress events for backspace
+    if (ch == "\x08") { return }
+    if (handleCharBinding(cm, e, ch)) { return }
+    cm.display.input.onKeyPress(e);
+  }
+
+  var DOUBLECLICK_DELAY = 400;
+
+  var PastClick = function(time, pos, button) {
+    this.time = time;
+    this.pos = pos;
+    this.button = button;
+  };
+
+  PastClick.prototype.compare = function (time, pos, button) {
+    return this.time + DOUBLECLICK_DELAY > time &&
+      cmp(pos, this.pos) == 0 && button == this.button
+  };
+
+  var lastClick, lastDoubleClick;
+  function clickRepeat(pos, button) {
+    var now = +new Date;
+    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
+      lastClick = lastDoubleClick = null;
+      return "triple"
+    } else if (lastClick && lastClick.compare(now, pos, button)) {
+      lastDoubleClick = new PastClick(now, pos, button);
+      lastClick = null;
+      return "double"
+    } else {
+      lastClick = new PastClick(now, pos, button);
+      lastDoubleClick = null;
+      return "single"
+    }
+  }
+
+  // A mouse down can be a single click, double click, triple click,
+  // start of selection drag, start of text drag, new cursor
+  // (ctrl-click), rectangle drag (alt-drag), or xwin
+  // middle-click-paste. Or it might be a click on something we should
+  // not interfere with, such as a scrollbar or widget.
+  function onMouseDown(e) {
+    var cm = this, display = cm.display;
+    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+    display.input.ensurePolled();
+    display.shift = e.shiftKey;
+
+    if (eventInWidget(display, e)) {
+      if (!webkit) {
+        // Briefly turn off draggability, to allow widgets to do
+        // normal dragging things.
+        display.scroller.draggable = false;
+        setTimeout(function () { return display.scroller.draggable = true; }, 100);
+      }
+      return
+    }
+    if (clickInGutter(cm, e)) { return }
+    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
+    window.focus();
+
+    // #3261: make sure, that we're not starting a second selection
+    if (button == 1 && cm.state.selectingText)
+      { cm.state.selectingText(e); }
+
+    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }
+
+    if (button == 1) {
+      if (pos) { leftButtonDown(cm, pos, repeat, e); }
+      else if (e_target(e) == display.scroller) { e_preventDefault(e); }
+    } else if (button == 2) {
+      if (pos) { extendSelection(cm.doc, pos); }
+      setTimeout(function () { return display.input.focus(); }, 20);
+    } else if (button == 3) {
+      if (captureRightClick) { cm.display.input.onContextMenu(e); }
+      else { delayBlurEvent(cm); }
+    }
+  }
+
+  function handleMappedButton(cm, button, pos, repeat, event) {
+    var name = "Click";
+    if (repeat == "double") { name = "Double" + name; }
+    else if (repeat == "triple") { name = "Triple" + name; }
+    name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;
+
+    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {
+      if (typeof bound == "string") { bound = commands[bound]; }
+      if (!bound) { return false }
+      var done = false;
+      try {
+        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+        done = bound(cm, pos) != Pass;
+      } finally {
+        cm.state.suppressEdits = false;
+      }
+      return done
+    })
+  }
+
+  function configureMouse(cm, repeat, event) {
+    var option = cm.getOption("configureMouse");
+    var value = option ? option(cm, repeat, event) : {};
+    if (value.unit == null) {
+      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
+      value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
+    }
+    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
+    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
+    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
+    return value
+  }
+
+  function leftButtonDown(cm, pos, repeat, event) {
+    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
+    else { cm.curOp.focus = activeElt(); }
+
+    var behavior = configureMouse(cm, repeat, event);
+
+    var sel = cm.doc.sel, contained;
+    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+        repeat == "single" && (contained = sel.contains(pos)) > -1 &&
+        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
+        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
+      { leftButtonStartDrag(cm, event, pos, behavior); }
+    else
+      { leftButtonSelect(cm, event, pos, behavior); }
+  }
+
+  // Start a text drag. When it ends, see if any dragging actually
+  // happen, and treat as a click if it didn't.
+  function leftButtonStartDrag(cm, event, pos, behavior) {
+    var display = cm.display, moved = false;
+    var dragEnd = operation(cm, function (e) {
+      if (webkit) { display.scroller.draggable = false; }
+      cm.state.draggingText = false;
+      off(display.wrapper.ownerDocument, "mouseup", dragEnd);
+      off(display.wrapper.ownerDocument, "mousemove", mouseMove);
+      off(display.scroller, "dragstart", dragStart);
+      off(display.scroller, "drop", dragEnd);
+      if (!moved) {
+        e_preventDefault(e);
+        if (!behavior.addNew)
+          { extendSelection(cm.doc, pos, null, null, behavior.extend); }
+        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+        if (webkit || ie && ie_version == 9)
+          { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }
+        else
+          { display.input.focus(); }
+      }
+    });
+    var mouseMove = function(e2) {
+      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
+    };
+    var dragStart = function () { return moved = true; };
+    // Let the drag handler handle this.
+    if (webkit) { display.scroller.draggable = true; }
+    cm.state.draggingText = dragEnd;
+    dragEnd.copy = !behavior.moveOnDrag;
+    // IE's approach to draggable
+    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
+    on(display.wrapper.ownerDocument, "mouseup", dragEnd);
+    on(display.wrapper.ownerDocument, "mousemove", mouseMove);
+    on(display.scroller, "dragstart", dragStart);
+    on(display.scroller, "drop", dragEnd);
+
+    delayBlurEvent(cm);
+    setTimeout(function () { return display.input.focus(); }, 20);
+  }
+
+  function rangeForUnit(cm, pos, unit) {
+    if (unit == "char") { return new Range(pos, pos) }
+    if (unit == "word") { return cm.findWordAt(pos) }
+    if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+    var result = unit(cm, pos);
+    return new Range(result.from, result.to)
+  }
+
+  // Normal selection, as opposed to text dragging.
+  function leftButtonSelect(cm, event, start, behavior) {
+    var display = cm.display, doc = cm.doc;
+    e_preventDefault(event);
+
+    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
+    if (behavior.addNew && !behavior.extend) {
+      ourIndex = doc.sel.contains(start);
+      if (ourIndex > -1)
+        { ourRange = ranges[ourIndex]; }
+      else
+        { ourRange = new Range(start, start); }
+    } else {
+      ourRange = doc.sel.primary();
+      ourIndex = doc.sel.primIndex;
+    }
+
+    if (behavior.unit == "rectangle") {
+      if (!behavior.addNew) { ourRange = new Range(start, start); }
+      start = posFromMouse(cm, event, true, true);
+      ourIndex = -1;
+    } else {
+      var range$$1 = rangeForUnit(cm, start, behavior.unit);
+      if (behavior.extend)
+        { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }
+      else
+        { ourRange = range$$1; }
+    }
+
+    if (!behavior.addNew) {
+      ourIndex = 0;
+      setSelection(doc, new Selection([ourRange], 0), sel_mouse);
+      startSel = doc.sel;
+    } else if (ourIndex == -1) {
+      ourIndex = ranges.length;
+      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),
+                   {scroll: false, origin: "*mouse"});
+    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+                   {scroll: false, origin: "*mouse"});
+      startSel = doc.sel;
+    } else {
+      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
+    }
+
+    var lastPos = start;
+    function extendTo(pos) {
+      if (cmp(lastPos, pos) == 0) { return }
+      lastPos = pos;
+
+      if (behavior.unit == "rectangle") {
+        var ranges = [], tabSize = cm.options.tabSize;
+        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
+        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
+        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
+        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+             line <= end; line++) {
+          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
+          if (left == right)
+            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
+          else if (text.length > leftPos)
+            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
+        }
+        if (!ranges.length) { ranges.push(new Range(start, start)); }
+        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+                     {origin: "*mouse", scroll: false});
+        cm.scrollIntoView(pos);
+      } else {
+        var oldRange = ourRange;
+        var range$$1 = rangeForUnit(cm, pos, behavior.unit);
+        var anchor = oldRange.anchor, head;
+        if (cmp(range$$1.anchor, anchor) > 0) {
+          head = range$$1.head;
+          anchor = minPos(oldRange.from(), range$$1.anchor);
+        } else {
+          head = range$$1.anchor;
+          anchor = maxPos(oldRange.to(), range$$1.head);
+        }
+        var ranges$1 = startSel.ranges.slice(0);
+        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
+        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
+      }
+    }
+
+    var editorSize = display.wrapper.getBoundingClientRect();
+    // Used to ensure timeout re-tries don't fire when another extend
+    // happened in the meantime (clearTimeout isn't reliable -- at
+    // least on Chrome, the timeouts still happen even when cleared,
+    // if the clear happens after their scheduled firing time).
+    var counter = 0;
+
+    function extend(e) {
+      var curCount = ++counter;
+      var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
+      if (!cur) { return }
+      if (cmp(cur, lastPos) != 0) {
+        cm.curOp.focus = activeElt();
+        extendTo(cur);
+        var visible = visibleLines(display, doc);
+        if (cur.line >= visible.to || cur.line < visible.from)
+          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
+      } else {
+        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
+        if (outside) { setTimeout(operation(cm, function () {
+          if (counter != curCount) { return }
+          display.scroller.scrollTop += outside;
+          extend(e);
+        }), 50); }
+      }
+    }
+
+    function done(e) {
+      cm.state.selectingText = false;
+      counter = Infinity;
+      // If e is null or undefined we interpret this as someone trying
+      // to explicitly cancel the selection rather than the user
+      // letting go of the mouse button.
+      if (e) {
+        e_preventDefault(e);
+        display.input.focus();
+      }
+      off(display.wrapper.ownerDocument, "mousemove", move);
+      off(display.wrapper.ownerDocument, "mouseup", up);
+      doc.history.lastSelOrigin = null;
+    }
+
+    var move = operation(cm, function (e) {
+      if (e.buttons === 0 || !e_button(e)) { done(e); }
+      else { extend(e); }
+    });
+    var up = operation(cm, done);
+    cm.state.selectingText = up;
+    on(display.wrapper.ownerDocument, "mousemove", move);
+    on(display.wrapper.ownerDocument, "mouseup", up);
+  }
+
+  // Used when mouse-selecting to adjust the anchor to the proper side
+  // of a bidi jump depending on the visual position of the head.
+  function bidiSimplify(cm, range$$1) {
+    var anchor = range$$1.anchor;
+    var head = range$$1.head;
+    var anchorLine = getLine(cm.doc, anchor.line);
+    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }
+    var order = getOrder(anchorLine);
+    if (!order) { return range$$1 }
+    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
+    if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }
+    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
+    if (boundary == 0 || boundary == order.length) { return range$$1 }
+
+    // Compute the relative visual position of the head compared to the
+    // anchor (<0 is to the left, >0 to the right)
+    var leftSide;
+    if (head.line != anchor.line) {
+      leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
+    } else {
+      var headIndex = getBidiPartAt(order, head.ch, head.sticky);
+      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
+      if (headIndex == boundary - 1 || headIndex == boundary)
+        { leftSide = dir < 0; }
+      else
+        { leftSide = dir > 0; }
+    }
+
+    var usePart = order[boundary + (leftSide ? -1 : 0)];
+    var from = leftSide == (usePart.level == 1);
+    var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
+    return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)
+  }
+
+
+  // Determines whether an event happened in the gutter, and fires the
+  // handlers for the corresponding event.
+  function gutterEvent(cm, e, type, prevent) {
+    var mX, mY;
+    if (e.touches) {
+      mX = e.touches[0].clientX;
+      mY = e.touches[0].clientY;
+    } else {
+      try { mX = e.clientX; mY = e.clientY; }
+      catch(e) { return false }
+    }
+    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+    if (prevent) { e_preventDefault(e); }
+
+    var display = cm.display;
+    var lineBox = display.lineDiv.getBoundingClientRect();
+
+    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+    mY -= lineBox.top - display.viewOffset;
+
+    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
+      var g = display.gutters.childNodes[i];
+      if (g && g.getBoundingClientRect().right >= mX) {
+        var line = lineAtHeight(cm.doc, mY);
+        var gutter = cm.display.gutterSpecs[i];
+        signal(cm, type, cm, line, gutter.className, e);
+        return e_defaultPrevented(e)
+      }
+    }
+  }
+
+  function clickInGutter(cm, e) {
+    return gutterEvent(cm, e, "gutterClick", true)
+  }
+
+  // CONTEXT MENU HANDLING
+
+  // To make the context menu work, we need to briefly unhide the
+  // textarea (making it as unobtrusive as possible) to let the
+  // right-click take effect on it.
+  function onContextMenu(cm, e) {
+    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+    if (signalDOMEvent(cm, e, "contextmenu")) { return }
+    if (!captureRightClick) { cm.display.input.onContextMenu(e); }
+  }
+
+  function contextMenuInGutter(cm, e) {
+    if (!hasHandler(cm, "gutterContextMenu")) { return false }
+    return gutterEvent(cm, e, "gutterContextMenu", false)
+  }
+
+  function themeChanged(cm) {
+    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+      cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
+    clearCaches(cm);
+  }
+
+  var Init = {toString: function(){return "CodeMirror.Init"}};
+
+  var defaults = {};
+  var optionHandlers = {};
+
+  function defineOptions(CodeMirror) {
+    var optionHandlers = CodeMirror.optionHandlers;
+
+    function option(name, deflt, handle, notOnInit) {
+      CodeMirror.defaults[name] = deflt;
+      if (handle) { optionHandlers[name] =
+        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
+    }
+
+    CodeMirror.defineOption = option;
+
+    // Passed to option handlers when there is no old value.
+    CodeMirror.Init = Init;
+
+    // These two are, on init, called from the constructor because they
+    // have to be initialized before the editor can start at all.
+    option("value", "", function (cm, val) { return cm.setValue(val); }, true);
+    option("mode", null, function (cm, val) {
+      cm.doc.modeOption = val;
+      loadMode(cm);
+    }, true);
+
+    option("indentUnit", 2, loadMode, true);
+    option("indentWithTabs", false);
+    option("smartIndent", true);
+    option("tabSize", 4, function (cm) {
+      resetModeState(cm);
+      clearCaches(cm);
+      regChange(cm);
+    }, true);
+
+    option("lineSeparator", null, function (cm, val) {
+      cm.doc.lineSep = val;
+      if (!val) { return }
+      var newBreaks = [], lineNo = cm.doc.first;
+      cm.doc.iter(function (line) {
+        for (var pos = 0;;) {
+          var found = line.text.indexOf(val, pos);
+          if (found == -1) { break }
+          pos = found + val.length;
+          newBreaks.push(Pos(lineNo, found));
+        }
+        lineNo++;
+      });
+      for (var i = newBreaks.length - 1; i >= 0; i--)
+        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
+    });
+    option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
+      cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
+      if (old != Init) { cm.refresh(); }
+    });
+    option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
+    option("electricChars", true);
+    option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+      throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+    }, true);
+    option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
+    option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);
+    option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);
+    option("rtlMoveVisually", !windows);
+    option("wholeLineUpdateBefore", true);
+
+    option("theme", "default", function (cm) {
+      themeChanged(cm);
+      updateGutters(cm);
+    }, true);
+    option("keyMap", "default", function (cm, val, old) {
+      var next = getKeyMap(val);
+      var prev = old != Init && getKeyMap(old);
+      if (prev && prev.detach) { prev.detach(cm, next); }
+      if (next.attach) { next.attach(cm, prev || null); }
+    });
+    option("extraKeys", null);
+    option("configureMouse", null);
+
+    option("lineWrapping", false, wrappingChanged, true);
+    option("gutters", [], function (cm, val) {
+      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
+      updateGutters(cm);
+    }, true);
+    option("fixedGutter", true, function (cm, val) {
+      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
+      cm.refresh();
+    }, true);
+    option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
+    option("scrollbarStyle", "native", function (cm) {
+      initScrollbars(cm);
+      updateScrollbars(cm);
+      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
+      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
+    }, true);
+    option("lineNumbers", false, function (cm, val) {
+      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
+      updateGutters(cm);
+    }, true);
+    option("firstLineNumber", 1, updateGutters, true);
+    option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true);
+    option("showCursorWhenSelecting", false, updateSelection, true);
+
+    option("resetSelectionOnContextMenu", true);
+    option("lineWiseCopyCut", true);
+    option("pasteLinesPerSelection", true);
+    option("selectionsMayTouch", false);
+
+    option("readOnly", false, function (cm, val) {
+      if (val == "nocursor") {
+        onBlur(cm);
+        cm.display.input.blur();
+      }
+      cm.display.input.readOnlyChanged(val);
+    });
+    option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
+    option("dragDrop", true, dragDropChanged);
+    option("allowDropFileTypes", null);
+
+    option("cursorBlinkRate", 530);
+    option("cursorScrollMargin", 0);
+    option("cursorHeight", 1, updateSelection, true);
+    option("singleCursorHeightPerLine", true, updateSelection, true);
+    option("workTime", 100);
+    option("workDelay", 100);
+    option("flattenSpans", true, resetModeState, true);
+    option("addModeClass", false, resetModeState, true);
+    option("pollInterval", 100);
+    option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
+    option("historyEventDelay", 1250);
+    option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
+    option("maxHighlightLength", 10000, resetModeState, true);
+    option("moveInputWithCursor", true, function (cm, val) {
+      if (!val) { cm.display.input.resetPosition(); }
+    });
+
+    option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
+    option("autofocus", null);
+    option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
+    option("phrases", null);
+  }
+
+  function dragDropChanged(cm, value, old) {
+    var wasOn = old && old != Init;
+    if (!value != !wasOn) {
+      var funcs = cm.display.dragFunctions;
+      var toggle = value ? on : off;
+      toggle(cm.display.scroller, "dragstart", funcs.start);
+      toggle(cm.display.scroller, "dragenter", funcs.enter);
+      toggle(cm.display.scroller, "dragover", funcs.over);
+      toggle(cm.display.scroller, "dragleave", funcs.leave);
+      toggle(cm.display.scroller, "drop", funcs.drop);
+    }
+  }
+
+  function wrappingChanged(cm) {
+    if (cm.options.lineWrapping) {
+      addClass(cm.display.wrapper, "CodeMirror-wrap");
+      cm.display.sizer.style.minWidth = "";
+      cm.display.sizerWidth = null;
+    } else {
+      rmClass(cm.display.wrapper, "CodeMirror-wrap");
+      findMaxLine(cm);
+    }
+    estimateLineHeights(cm);
+    regChange(cm);
+    clearCaches(cm);
+    setTimeout(function () { return updateScrollbars(cm); }, 100);
+  }
+
+  // A CodeMirror instance represents an editor. This is the object
+  // that user code is usually dealing with.
+
+  function CodeMirror(place, options) {
+    var this$1 = this;
+
+    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }
+
+    this.options = options = options ? copyObj(options) : {};
+    // Determine effective options based on given values and defaults.
+    copyObj(defaults, options, false);
+
+    var doc = options.value;
+    if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
+    else if (options.mode) { doc.modeOption = options.mode; }
+    this.doc = doc;
+
+    var input = new CodeMirror.inputStyles[options.inputStyle](this);
+    var display = this.display = new Display(place, doc, input, options);
+    display.wrapper.CodeMirror = this;
+    themeChanged(this);
+    if (options.lineWrapping)
+      { this.display.wrapper.className += " CodeMirror-wrap"; }
+    initScrollbars(this);
+
+    this.state = {
+      keyMaps: [],  // stores maps added by addKeyMap
+      overlays: [], // highlighting overlays, as added by addOverlay
+      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info
+      overwrite: false,
+      delayingBlurEvent: false,
+      focused: false,
+      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll
+      selectingText: false,
+      draggingText: false,
+      highlight: new Delayed(), // stores highlight worker timeout
+      keySeq: null,  // Unfinished key sequence
+      specialChars: null
+    };
+
+    if (options.autofocus && !mobile) { display.input.focus(); }
+
+    // Override magic textarea content restore that IE sometimes does
+    // on our hidden textarea on reload
+    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }
+
+    registerEventHandlers(this);
+    ensureGlobalHandlers();
+
+    startOperation(this);
+    this.curOp.forceUpdate = true;
+    attachDoc(this, doc);
+
+    if ((options.autofocus && !mobile) || this.hasFocus())
+      { setTimeout(bind(onFocus, this), 20); }
+    else
+      { onBlur(this); }
+
+    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+      { optionHandlers[opt](this$1, options[opt], Init); } }
+    maybeUpdateLineNumberWidth(this);
+    if (options.finishInit) { options.finishInit(this); }
+    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }
+    endOperation(this);
+    // Suppress optimizelegibility in Webkit, since it breaks text
+    // measuring on line wrapping boundaries.
+    if (webkit && options.lineWrapping &&
+        getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+      { display.lineDiv.style.textRendering = "auto"; }
+  }
+
+  // The default configuration options.
+  CodeMirror.defaults = defaults;
+  // Functions to run when options are changed.
+  CodeMirror.optionHandlers = optionHandlers;
+
+  // Attach the necessary event handlers when initializing the editor
+  function registerEventHandlers(cm) {
+    var d = cm.display;
+    on(d.scroller, "mousedown", operation(cm, onMouseDown));
+    // Older IE's will not fire a second mousedown for a double click
+    if (ie && ie_version < 11)
+      { on(d.scroller, "dblclick", operation(cm, function (e) {
+        if (signalDOMEvent(cm, e)) { return }
+        var pos = posFromMouse(cm, e);
+        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+        e_preventDefault(e);
+        var word = cm.findWordAt(pos);
+        extendSelection(cm.doc, word.anchor, word.head);
+      })); }
+    else
+      { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
+    // Some browsers fire contextmenu *after* opening the menu, at
+    // which point we can't mess with it anymore. Context menu is
+    // handled in onMouseDown for these browsers.
+    on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); });
+
+    // Used to suppress mouse event handling when a touch happens
+    var touchFinished, prevTouch = {end: 0};
+    function finishTouch() {
+      if (d.activeTouch) {
+        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
+        prevTouch = d.activeTouch;
+        prevTouch.end = +new Date;
+      }
+    }
+    function isMouseLikeTouchEvent(e) {
+      if (e.touches.length != 1) { return false }
+      var touch = e.touches[0];
+      return touch.radiusX <= 1 && touch.radiusY <= 1
+    }
+    function farAway(touch, other) {
+      if (other.left == null) { return true }
+      var dx = other.left - touch.left, dy = other.top - touch.top;
+      return dx * dx + dy * dy > 20 * 20
+    }
+    on(d.scroller, "touchstart", function (e) {
+      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
+        d.input.ensurePolled();
+        clearTimeout(touchFinished);
+        var now = +new Date;
+        d.activeTouch = {start: now, moved: false,
+                         prev: now - prevTouch.end <= 300 ? prevTouch : null};
+        if (e.touches.length == 1) {
+          d.activeTouch.left = e.touches[0].pageX;
+          d.activeTouch.top = e.touches[0].pageY;
+        }
+      }
+    });
+    on(d.scroller, "touchmove", function () {
+      if (d.activeTouch) { d.activeTouch.moved = true; }
+    });
+    on(d.scroller, "touchend", function (e) {
+      var touch = d.activeTouch;
+      if (touch && !eventInWidget(d, e) && touch.left != null &&
+          !touch.moved && new Date - touch.start < 300) {
+        var pos = cm.coordsChar(d.activeTouch, "page"), range;
+        if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+          { range = new Range(pos, pos); }
+        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+          { range = cm.findWordAt(pos); }
+        else // Triple tap
+          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
+        cm.setSelection(range.anchor, range.head);
+        cm.focus();
+        e_preventDefault(e);
+      }
+      finishTouch();
+    });
+    on(d.scroller, "touchcancel", finishTouch);
+
+    // Sync scrolling between fake scrollbars and real scrollable
+    // area, ensure viewport is updated when scrolling.
+    on(d.scroller, "scroll", function () {
+      if (d.scroller.clientHeight) {
+        updateScrollTop(cm, d.scroller.scrollTop);
+        setScrollLeft(cm, d.scroller.scrollLeft, true);
+        signal(cm, "scroll", cm);
+      }
+    });
+
+    // Listen to wheel events in order to try and update the viewport on time.
+    on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
+    on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });
+
+    // Prevent wrapper from ever scrolling
+    on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
+
+    d.dragFunctions = {
+      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
+      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
+      start: function (e) { return onDragStart(cm, e); },
+      drop: operation(cm, onDrop),
+      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
+    };
+
+    var inp = d.input.getField();
+    on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
+    on(inp, "keydown", operation(cm, onKeyDown));
+    on(inp, "keypress", operation(cm, onKeyPress));
+    on(inp, "focus", function (e) { return onFocus(cm, e); });
+    on(inp, "blur", function (e) { return onBlur(cm, e); });
+  }
+
+  var initHooks = [];
+  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };
+
+  // Indent the given line. The how parameter can be "smart",
+  // "add"/null, "subtract", or "prev". When aggressive is false
+  // (typically set to true for forced single-line indents), empty
+  // lines are not indented, and places where the mode returns Pass
+  // are left alone.
+  function indentLine(cm, n, how, aggressive) {
+    var doc = cm.doc, state;
+    if (how == null) { how = "add"; }
+    if (how == "smart") {
+      // Fall back to "prev" when the mode doesn't have an indentation
+      // method.
+      if (!doc.mode.indent) { how = "prev"; }
+      else { state = getContextBefore(cm, n).state; }
+    }
+
+    var tabSize = cm.options.tabSize;
+    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
+    if (line.stateAfter) { line.stateAfter = null; }
+    var curSpaceString = line.text.match(/^\s*/)[0], indentation;
+    if (!aggressive && !/\S/.test(line.text)) {
+      indentation = 0;
+      how = "not";
+    } else if (how == "smart") {
+      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
+      if (indentation == Pass || indentation > 150) {
+        if (!aggressive) { return }
+        how = "prev";
+      }
+    }
+    if (how == "prev") {
+      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
+      else { indentation = 0; }
+    } else if (how == "add") {
+      indentation = curSpace + cm.options.indentUnit;
+    } else if (how == "subtract") {
+      indentation = curSpace - cm.options.indentUnit;
+    } else if (typeof how == "number") {
+      indentation = curSpace + how;
+    }
+    indentation = Math.max(0, indentation);
+
+    var indentString = "", pos = 0;
+    if (cm.options.indentWithTabs)
+      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
+    if (pos < indentation) { indentString += spaceStr(indentation - pos); }
+
+    if (indentString != curSpaceString) {
+      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
+      line.stateAfter = null;
+      return true
+    } else {
+      // Ensure that, if the cursor was in the whitespace at the start
+      // of the line, it is moved to the end of that space.
+      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+        var range = doc.sel.ranges[i$1];
+        if (range.head.line == n && range.head.ch < curSpaceString.length) {
+          var pos$1 = Pos(n, curSpaceString.length);
+          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
+          break
+        }
+      }
+    }
+  }
+
+  // This will be set to a {lineWise: bool, text: [string]} object, so
+  // that, when pasting, we know what kind of selections the copied
+  // text was made out of.
+  var lastCopied = null;
+
+  function setLastCopied(newLastCopied) {
+    lastCopied = newLastCopied;
+  }
+
+  function applyTextInput(cm, inserted, deleted, sel, origin) {
+    var doc = cm.doc;
+    cm.display.shift = false;
+    if (!sel) { sel = doc.sel; }
+
+    var recent = +new Date - 200;
+    var paste = origin == "paste" || cm.state.pasteIncoming > recent;
+    var textLines = splitLinesAuto(inserted), multiPaste = null;
+    // When pasting N lines into N selections, insert one line per selection
+    if (paste && sel.ranges.length > 1) {
+      if (lastCopied && lastCopied.text.join("\n") == inserted) {
+        if (sel.ranges.length % lastCopied.text.length == 0) {
+          multiPaste = [];
+          for (var i = 0; i < lastCopied.text.length; i++)
+            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
+        }
+      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
+        multiPaste = map(textLines, function (l) { return [l]; });
+      }
+    }
+
+    var updateInput = cm.curOp.updateInput;
+    // Normal behavior is to insert the new text into every selection
+    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+      var range$$1 = sel.ranges[i$1];
+      var from = range$$1.from(), to = range$$1.to();
+      if (range$$1.empty()) {
+        if (deleted && deleted > 0) // Handle deletion
+          { from = Pos(from.line, from.ch - deleted); }
+        else if (cm.state.overwrite && !paste) // Handle overwrite
+          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
+        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+          { from = to = Pos(from.line, 0); }
+      }
+      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+                         origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")};
+      makeChange(cm.doc, changeEvent);
+      signalLater(cm, "inputRead", cm, changeEvent);
+    }
+    if (inserted && !paste)
+      { triggerElectric(cm, inserted); }
+
+    ensureCursorVisible(cm);
+    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }
+    cm.curOp.typing = true;
+    cm.state.pasteIncoming = cm.state.cutIncoming = -1;
+  }
+
+  function handlePaste(e, cm) {
+    var pasted = e.clipboardData && e.clipboardData.getData("Text");
+    if (pasted) {
+      e.preventDefault();
+      if (!cm.isReadOnly() && !cm.options.disableInput)
+        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
+      return true
+    }
+  }
+
+  function triggerElectric(cm, inserted) {
+    // When an 'electric' character is inserted, immediately trigger a reindent
+    if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+    var sel = cm.doc.sel;
+
+    for (var i = sel.ranges.length - 1; i >= 0; i--) {
+      var range$$1 = sel.ranges[i];
+      if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }
+      var mode = cm.getModeAt(range$$1.head);
+      var indented = false;
+      if (mode.electricChars) {
+        for (var j = 0; j < mode.electricChars.length; j++)
+          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+            indented = indentLine(cm, range$$1.head.line, "smart");
+            break
+          } }
+      } else if (mode.electricInput) {
+        if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))
+          { indented = indentLine(cm, range$$1.head.line, "smart"); }
+      }
+      if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); }
+    }
+  }
+
+  function copyableRanges(cm) {
+    var text = [], ranges = [];
+    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+      var line = cm.doc.sel.ranges[i].head.line;
+      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
+      ranges.push(lineRange);
+      text.push(cm.getRange(lineRange.anchor, lineRange.head));
+    }
+    return {text: text, ranges: ranges}
+  }
+
+  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
+    field.setAttribute("autocorrect", autocorrect ? "" : "off");
+    field.setAttribute("autocapitalize", autocapitalize ? "" : "off");
+    field.setAttribute("spellcheck", !!spellcheck);
+  }
+
+  function hiddenTextarea() {
+    var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
+    var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
+    // The textarea is kept positioned near the cursor to prevent the
+    // fact that it'll be scrolled into view on input from scrolling
+    // our fake cursor out of view. On webkit, when wrap=off, paste is
+    // very slow. So make the area wide instead.
+    if (webkit) { te.style.width = "1000px"; }
+    else { te.setAttribute("wrap", "off"); }
+    // If border: 0; -- iOS fails to open keyboard (issue #1287)
+    if (ios) { te.style.border = "1px solid black"; }
+    disableBrowserMagic(te);
+    return div
+  }
+
+  // The publicly visible API. Note that methodOp(f) means
+  // 'wrap f in an operation, performed on its `this` parameter'.
+
+  // This is not the complete set of editor methods. Most of the
+  // methods defined on the Doc type are also injected into
+  // CodeMirror.prototype, for backwards compatibility and
+  // convenience.
+
+  function addEditorMethods(CodeMirror) {
+    var optionHandlers = CodeMirror.optionHandlers;
+
+    var helpers = CodeMirror.helpers = {};
+
+    CodeMirror.prototype = {
+      constructor: CodeMirror,
+      focus: function(){window.focus(); this.display.input.focus();},
+
+      setOption: function(option, value) {
+        var options = this.options, old = options[option];
+        if (options[option] == value && option != "mode") { return }
+        options[option] = value;
+        if (optionHandlers.hasOwnProperty(option))
+          { operation(this, optionHandlers[option])(this, value, old); }
+        signal(this, "optionChange", this, option);
+      },
+
+      getOption: function(option) {return this.options[option]},
+      getDoc: function() {return this.doc},
+
+      addKeyMap: function(map$$1, bottom) {
+        this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1));
+      },
+      removeKeyMap: function(map$$1) {
+        var maps = this.state.keyMaps;
+        for (var i = 0; i < maps.length; ++i)
+          { if (maps[i] == map$$1 || maps[i].name == map$$1) {
+            maps.splice(i, 1);
+            return true
+          } }
+      },
+
+      addOverlay: methodOp(function(spec, options) {
+        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
+        if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+        insertSorted(this.state.overlays,
+                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+                      priority: (options && options.priority) || 0},
+                     function (overlay) { return overlay.priority; });
+        this.state.modeGen++;
+        regChange(this);
+      }),
+      removeOverlay: methodOp(function(spec) {
+        var this$1 = this;
+
+        var overlays = this.state.overlays;
+        for (var i = 0; i < overlays.length; ++i) {
+          var cur = overlays[i].modeSpec;
+          if (cur == spec || typeof spec == "string" && cur.name == spec) {
+            overlays.splice(i, 1);
+            this$1.state.modeGen++;
+            regChange(this$1);
+            return
+          }
+        }
+      }),
+
+      indentLine: methodOp(function(n, dir, aggressive) {
+        if (typeof dir != "string" && typeof dir != "number") {
+          if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
+          else { dir = dir ? "add" : "subtract"; }
+        }
+        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
+      }),
+      indentSelection: methodOp(function(how) {
+        var this$1 = this;
+
+        var ranges = this.doc.sel.ranges, end = -1;
+        for (var i = 0; i < ranges.length; i++) {
+          var range$$1 = ranges[i];
+          if (!range$$1.empty()) {
+            var from = range$$1.from(), to = range$$1.to();
+            var start = Math.max(end, from.line);
+            end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
+            for (var j = start; j < end; ++j)
+              { indentLine(this$1, j, how); }
+            var newRanges = this$1.doc.sel.ranges;
+            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+              { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
+          } else if (range$$1.head.line > end) {
+            indentLine(this$1, range$$1.head.line, how, true);
+            end = range$$1.head.line;
+            if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }
+          }
+        }
+      }),
+
+      // Fetch the parser token for a given character. Useful for hacks
+      // that want to inspect the mode state (say, for completion).
+      getTokenAt: function(pos, precise) {
+        return takeToken(this, pos, precise)
+      },
+
+      getLineTokens: function(line, precise) {
+        return takeToken(this, Pos(line), precise, true)
+      },
+
+      getTokenTypeAt: function(pos) {
+        pos = clipPos(this.doc, pos);
+        var styles = getLineStyles(this, getLine(this.doc, pos.line));
+        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
+        var type;
+        if (ch == 0) { type = styles[2]; }
+        else { for (;;) {
+          var mid = (before + after) >> 1;
+          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
+          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
+          else { type = styles[mid * 2 + 2]; break }
+        } }
+        var cut = type ? type.indexOf("overlay ") : -1;
+        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+      },
+
+      getModeAt: function(pos) {
+        var mode = this.doc.mode;
+        if (!mode.innerMode) { return mode }
+        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+      },
+
+      getHelper: function(pos, type) {
+        return this.getHelpers(pos, type)[0]
+      },
+
+      getHelpers: function(pos, type) {
+        var this$1 = this;
+
+        var found = [];
+        if (!helpers.hasOwnProperty(type)) { return found }
+        var help = helpers[type], mode = this.getModeAt(pos);
+        if (typeof mode[type] == "string") {
+          if (help[mode[type]]) { found.push(help[mode[type]]); }
+        } else if (mode[type]) {
+          for (var i = 0; i < mode[type].length; i++) {
+            var val = help[mode[type][i]];
+            if (val) { found.push(val); }
+          }
+        } else if (mode.helperType && help[mode.helperType]) {
+          found.push(help[mode.helperType]);
+        } else if (help[mode.name]) {
+          found.push(help[mode.name]);
+        }
+        for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+          var cur = help._global[i$1];
+          if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+            { found.push(cur.val); }
+        }
+        return found
+      },
+
+      getStateAfter: function(line, precise) {
+        var doc = this.doc;
+        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
+        return getContextBefore(this, line + 1, precise).state
+      },
+
+      cursorCoords: function(start, mode) {
+        var pos, range$$1 = this.doc.sel.primary();
+        if (start == null) { pos = range$$1.head; }
+        else if (typeof start == "object") { pos = clipPos(this.doc, start); }
+        else { pos = start ? range$$1.from() : range$$1.to(); }
+        return cursorCoords(this, pos, mode || "page")
+      },
+
+      charCoords: function(pos, mode) {
+        return charCoords(this, clipPos(this.doc, pos), mode || "page")
+      },
+
+      coordsChar: function(coords, mode) {
+        coords = fromCoordSystem(this, coords, mode || "page");
+        return coordsChar(this, coords.left, coords.top)
+      },
+
+      lineAtHeight: function(height, mode) {
+        height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
+        return lineAtHeight(this.doc, height + this.display.viewOffset)
+      },
+      heightAtLine: function(line, mode, includeWidgets) {
+        var end = false, lineObj;
+        if (typeof line == "number") {
+          var last = this.doc.first + this.doc.size - 1;
+          if (line < this.doc.first) { line = this.doc.first; }
+          else if (line > last) { line = last; end = true; }
+          lineObj = getLine(this.doc, line);
+        } else {
+          lineObj = line;
+        }
+        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+          (end ? this.doc.height - heightAtLine(lineObj) : 0)
+      },
+
+      defaultTextHeight: function() { return textHeight(this.display) },
+      defaultCharWidth: function() { return charWidth(this.display) },
+
+      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+      addWidget: function(pos, node, scroll, vert, horiz) {
+        var display = this.display;
+        pos = cursorCoords(this, clipPos(this.doc, pos));
+        var top = pos.bottom, left = pos.left;
+        node.style.position = "absolute";
+        node.setAttribute("cm-ignore-events", "true");
+        this.display.input.setUneditable(node);
+        display.sizer.appendChild(node);
+        if (vert == "over") {
+          top = pos.top;
+        } else if (vert == "above" || vert == "near") {
+          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
+          // Default to positioning above (if specified and possible); otherwise default to positioning below
+          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+            { top = pos.top - node.offsetHeight; }
+          else if (pos.bottom + node.offsetHeight <= vspace)
+            { top = pos.bottom; }
+          if (left + node.offsetWidth > hspace)
+            { left = hspace - node.offsetWidth; }
+        }
+        node.style.top = top + "px";
+        node.style.left = node.style.right = "";
+        if (horiz == "right") {
+          left = display.sizer.clientWidth - node.offsetWidth;
+          node.style.right = "0px";
+        } else {
+          if (horiz == "left") { left = 0; }
+          else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
+          node.style.left = left + "px";
+        }
+        if (scroll)
+          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
+      },
+
+      triggerOnKeyDown: methodOp(onKeyDown),
+      triggerOnKeyPress: methodOp(onKeyPress),
+      triggerOnKeyUp: onKeyUp,
+      triggerOnMouseDown: methodOp(onMouseDown),
+
+      execCommand: function(cmd) {
+        if (commands.hasOwnProperty(cmd))
+          { return commands[cmd].call(null, this) }
+      },
+
+      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
+
+      findPosH: function(from, amount, unit, visually) {
+        var this$1 = this;
+
+        var dir = 1;
+        if (amount < 0) { dir = -1; amount = -amount; }
+        var cur = clipPos(this.doc, from);
+        for (var i = 0; i < amount; ++i) {
+          cur = findPosH(this$1.doc, cur, dir, unit, visually);
+          if (cur.hitSide) { break }
+        }
+        return cur
+      },
+
+      moveH: methodOp(function(dir, unit) {
+        var this$1 = this;
+
+        this.extendSelectionsBy(function (range$$1) {
+          if (this$1.display.shift || this$1.doc.extend || range$$1.empty())
+            { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }
+          else
+            { return dir < 0 ? range$$1.from() : range$$1.to() }
+        }, sel_move);
+      }),
+
+      deleteH: methodOp(function(dir, unit) {
+        var sel = this.doc.sel, doc = this.doc;
+        if (sel.somethingSelected())
+          { doc.replaceSelection("", null, "+delete"); }
+        else
+          { deleteNearSelection(this, function (range$$1) {
+            var other = findPosH(doc, range$$1.head, dir, unit, false);
+            return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}
+          }); }
+      }),
+
+      findPosV: function(from, amount, unit, goalColumn) {
+        var this$1 = this;
+
+        var dir = 1, x = goalColumn;
+        if (amount < 0) { dir = -1; amount = -amount; }
+        var cur = clipPos(this.doc, from);
+        for (var i = 0; i < amount; ++i) {
+          var coords = cursorCoords(this$1, cur, "div");
+          if (x == null) { x = coords.left; }
+          else { coords.left = x; }
+          cur = findPosV(this$1, coords, dir, unit);
+          if (cur.hitSide) { break }
+        }
+        return cur
+      },
+
+      moveV: methodOp(function(dir, unit) {
+        var this$1 = this;
+
+        var doc = this.doc, goals = [];
+        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
+        doc.extendSelectionsBy(function (range$$1) {
+          if (collapse)
+            { return dir < 0 ? range$$1.from() : range$$1.to() }
+          var headPos = cursorCoords(this$1, range$$1.head, "div");
+          if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }
+          goals.push(headPos.left);
+          var pos = findPosV(this$1, headPos, dir, unit);
+          if (unit == "page" && range$$1 == doc.sel.primary())
+            { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
+          return pos
+        }, sel_move);
+        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+          { doc.sel.ranges[i].goalColumn = goals[i]; } }
+      }),
+
+      // Find the word at the given position (as returned by coordsChar).
+      findWordAt: function(pos) {
+        var doc = this.doc, line = getLine(doc, pos.line).text;
+        var start = pos.ch, end = pos.ch;
+        if (line) {
+          var helper = this.getHelper(pos, "wordChars");
+          if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
+          var startChar = line.charAt(start);
+          var check = isWordChar(startChar, helper)
+            ? function (ch) { return isWordChar(ch, helper); }
+            : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+            : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
+          while (start > 0 && check(line.charAt(start - 1))) { --start; }
+          while (end < line.length && check(line.charAt(end))) { ++end; }
+        }
+        return new Range(Pos(pos.line, start), Pos(pos.line, end))
+      },
+
+      toggleOverwrite: function(value) {
+        if (value != null && value == this.state.overwrite) { return }
+        if (this.state.overwrite = !this.state.overwrite)
+          { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+        else
+          { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+
+        signal(this, "overwriteToggle", this, this.state.overwrite);
+      },
+      hasFocus: function() { return this.display.input.getField() == activeElt() },
+      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
+      getScrollInfo: function() {
+        var scroller = this.display.scroller;
+        return {left: scroller.scrollLeft, top: scroller.scrollTop,
+                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+      },
+
+      scrollIntoView: methodOp(function(range$$1, margin) {
+        if (range$$1 == null) {
+          range$$1 = {from: this.doc.sel.primary().head, to: null};
+          if (margin == null) { margin = this.options.cursorScrollMargin; }
+        } else if (typeof range$$1 == "number") {
+          range$$1 = {from: Pos(range$$1, 0), to: null};
+        } else if (range$$1.from == null) {
+          range$$1 = {from: range$$1, to: null};
+        }
+        if (!range$$1.to) { range$$1.to = range$$1.from; }
+        range$$1.margin = margin || 0;
+
+        if (range$$1.from.line != null) {
+          scrollToRange(this, range$$1);
+        } else {
+          scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);
+        }
+      }),
+
+      setSize: methodOp(function(width, height) {
+        var this$1 = this;
+
+        var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
+        if (width != null) { this.display.wrapper.style.width = interpret(width); }
+        if (height != null) { this.display.wrapper.style.height = interpret(height); }
+        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
+        var lineNo$$1 = this.display.viewFrom;
+        this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {
+          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } }
+          ++lineNo$$1;
+        });
+        this.curOp.forceUpdate = true;
+        signal(this, "refresh", this);
+      }),
+
+      operation: function(f){return runInOp(this, f)},
+      startOperation: function(){return startOperation(this)},
+      endOperation: function(){return endOperation(this)},
+
+      refresh: methodOp(function() {
+        var oldHeight = this.display.cachedTextHeight;
+        regChange(this);
+        this.curOp.forceUpdate = true;
+        clearCaches(this);
+        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
+        updateGutterSpace(this.display);
+        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+          { estimateLineHeights(this); }
+        signal(this, "refresh", this);
+      }),
+
+      swapDoc: methodOp(function(doc) {
+        var old = this.doc;
+        old.cm = null;
+        // Cancel the current text selection if any (#5821)
+        if (this.state.selectingText) { this.state.selectingText(); }
+        attachDoc(this, doc);
+        clearCaches(this);
+        this.display.input.reset();
+        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
+        this.curOp.forceScroll = true;
+        signalLater(this, "swapDoc", this, old);
+        return old
+      }),
+
+      phrase: function(phraseText) {
+        var phrases = this.options.phrases;
+        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
+      },
+
+      getInputField: function(){return this.display.input.getField()},
+      getWrapperElement: function(){return this.display.wrapper},
+      getScrollerElement: function(){return this.display.scroller},
+      getGutterElement: function(){return this.display.gutters}
+    };
+    eventMixin(CodeMirror);
+
+    CodeMirror.registerHelper = function(type, name, value) {
+      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
+      helpers[type][name] = value;
+    };
+    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+      CodeMirror.registerHelper(type, name, value);
+      helpers[type]._global.push({pred: predicate, val: value});
+    };
+  }
+
+  // Used for horizontal relative motion. Dir is -1 or 1 (left or
+  // right), unit can be "char", "column" (like char, but doesn't
+  // cross line boundaries), "word" (across next word), or "group" (to
+  // the start of next group of word or non-word-non-whitespace
+  // chars). The visually param controls whether, in right-to-left
+  // text, direction 1 means to move towards the next index in the
+  // string, or towards the character to the right of the current
+  // position. The resulting position will have a hitSide=true
+  // property if it reached the end of the document.
+  function findPosH(doc, pos, dir, unit, visually) {
+    var oldPos = pos;
+    var origDir = dir;
+    var lineObj = getLine(doc, pos.line);
+    function findNextLine() {
+      var l = pos.line + dir;
+      if (l < doc.first || l >= doc.first + doc.size) { return false }
+      pos = new Pos(l, pos.ch, pos.sticky);
+      return lineObj = getLine(doc, l)
+    }
+    function moveOnce(boundToLine) {
+      var next;
+      if (visually) {
+        next = moveVisually(doc.cm, lineObj, pos, dir);
+      } else {
+        next = moveLogically(lineObj, pos, dir);
+      }
+      if (next == null) {
+        if (!boundToLine && findNextLine())
+          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }
+        else
+          { return false }
+      } else {
+        pos = next;
+      }
+      return true
+    }
+
+    if (unit == "char") {
+      moveOnce();
+    } else if (unit == "column") {
+      moveOnce(true);
+    } else if (unit == "word" || unit == "group") {
+      var sawType = null, group = unit == "group";
+      var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
+      for (var first = true;; first = false) {
+        if (dir < 0 && !moveOnce(!first)) { break }
+        var cur = lineObj.text.charAt(pos.ch) || "\n";
+        var type = isWordChar(cur, helper) ? "w"
+          : group && cur == "\n" ? "n"
+          : !group || /\s/.test(cur) ? null
+          : "p";
+        if (group && !first && !type) { type = "s"; }
+        if (sawType && sawType != type) {
+          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
+          break
+        }
+
+        if (type) { sawType = type; }
+        if (dir > 0 && !moveOnce(!first)) { break }
+      }
+    }
+    var result = skipAtomic(doc, pos, oldPos, origDir, true);
+    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
+    return result
+  }
+
+  // For relative vertical movement. Dir may be -1 or 1. Unit can be
+  // "page" or "line". The resulting position will have a hitSide=true
+  // property if it reached the end of the document.
+  function findPosV(cm, pos, dir, unit) {
+    var doc = cm.doc, x = pos.left, y;
+    if (unit == "page") {
+      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
+      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
+      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;
+
+    } else if (unit == "line") {
+      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
+    }
+    var target;
+    for (;;) {
+      target = coordsChar(cm, x, y);
+      if (!target.outside) { break }
+      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+      y += dir * 5;
+    }
+    return target
+  }
+
+  // CONTENTEDITABLE INPUT STYLE
+
+  var ContentEditableInput = function(cm) {
+    this.cm = cm;
+    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
+    this.polling = new Delayed();
+    this.composing = null;
+    this.gracePeriod = false;
+    this.readDOMTimeout = null;
+  };
+
+  ContentEditableInput.prototype.init = function (display) {
+      var this$1 = this;
+
+    var input = this, cm = input.cm;
+    var div = input.div = display.lineDiv;
+    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
+
+    on(div, "paste", function (e) {
+      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+      // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
+    });
+
+    on(div, "compositionstart", function (e) {
+      this$1.composing = {data: e.data, done: false};
+    });
+    on(div, "compositionupdate", function (e) {
+      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
+    });
+    on(div, "compositionend", function (e) {
+      if (this$1.composing) {
+        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
+        this$1.composing.done = true;
+      }
+    });
+
+    on(div, "touchstart", function () { return input.forceCompositionEnd(); });
+
+    on(div, "input", function () {
+      if (!this$1.composing) { this$1.readFromDOMSoon(); }
+    });
+
+    function onCopyCut(e) {
+      if (signalDOMEvent(cm, e)) { return }
+      if (cm.somethingSelected()) {
+        setLastCopied({lineWise: false, text: cm.getSelections()});
+        if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
+      } else if (!cm.options.lineWiseCopyCut) {
+        return
+      } else {
+        var ranges = copyableRanges(cm);
+        setLastCopied({lineWise: true, text: ranges.text});
+        if (e.type == "cut") {
+          cm.operation(function () {
+            cm.setSelections(ranges.ranges, 0, sel_dontScroll);
+            cm.replaceSelection("", null, "cut");
+          });
+        }
+      }
+      if (e.clipboardData) {
+        e.clipboardData.clearData();
+        var content = lastCopied.text.join("\n");
+        // iOS exposes the clipboard API, but seems to discard content inserted into it
+        e.clipboardData.setData("Text", content);
+        if (e.clipboardData.getData("Text") == content) {
+          e.preventDefault();
+          return
+        }
+      }
+      // Old-fashioned briefly-focus-a-textarea hack
+      var kludge = hiddenTextarea(), te = kludge.firstChild;
+      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
+      te.value = lastCopied.text.join("\n");
+      var hadFocus = document.activeElement;
+      selectInput(te);
+      setTimeout(function () {
+        cm.display.lineSpace.removeChild(kludge);
+        hadFocus.focus();
+        if (hadFocus == div) { input.showPrimarySelection(); }
+      }, 50);
+    }
+    on(div, "copy", onCopyCut);
+    on(div, "cut", onCopyCut);
+  };
+
+  ContentEditableInput.prototype.prepareSelection = function () {
+    var result = prepareSelection(this.cm, false);
+    result.focus = this.cm.state.focused;
+    return result
+  };
+
+  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+    if (!info || !this.cm.display.view.length) { return }
+    if (info.focus || takeFocus) { this.showPrimarySelection(); }
+    this.showMultipleSelections(info);
+  };
+
+  ContentEditableInput.prototype.getSelection = function () {
+    return this.cm.display.wrapper.ownerDocument.getSelection()
+  };
+
+  ContentEditableInput.prototype.showPrimarySelection = function () {
+    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
+    var from = prim.from(), to = prim.to();
+
+    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+      sel.removeAllRanges();
+      return
+    }
+
+    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
+    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+        cmp(minPos(curAnchor, curFocus), from) == 0 &&
+        cmp(maxPos(curAnchor, curFocus), to) == 0)
+      { return }
+
+    var view = cm.display.view;
+    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+        {node: view[0].measure.map[2], offset: 0};
+    var end = to.line < cm.display.viewTo && posToDOM(cm, to);
+    if (!end) {
+      var measure = view[view.length - 1].measure;
+      var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
+      end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};
+    }
+
+    if (!start || !end) {
+      sel.removeAllRanges();
+      return
+    }
+
+    var old = sel.rangeCount && sel.getRangeAt(0), rng;
+    try { rng = range(start.node, start.offset, end.offset, end.node); }
+    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+    if (rng) {
+      if (!gecko && cm.state.focused) {
+        sel.collapse(start.node, start.offset);
+        if (!rng.collapsed) {
+          sel.removeAllRanges();
+          sel.addRange(rng);
+        }
+      } else {
+        sel.removeAllRanges();
+        sel.addRange(rng);
+      }
+      if (old && sel.anchorNode == null) { sel.addRange(old); }
+      else if (gecko) { this.startGracePeriod(); }
+    }
+    this.rememberSelection();
+  };
+
+  ContentEditableInput.prototype.startGracePeriod = function () {
+      var this$1 = this;
+
+    clearTimeout(this.gracePeriod);
+    this.gracePeriod = setTimeout(function () {
+      this$1.gracePeriod = false;
+      if (this$1.selectionChanged())
+        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
+    }, 20);
+  };
+
+  ContentEditableInput.prototype.showMultipleSelections = function (info) {
+    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
+    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
+  };
+
+  ContentEditableInput.prototype.rememberSelection = function () {
+    var sel = this.getSelection();
+    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
+    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
+  };
+
+  ContentEditableInput.prototype.selectionInEditor = function () {
+    var sel = this.getSelection();
+    if (!sel.rangeCount) { return false }
+    var node = sel.getRangeAt(0).commonAncestorContainer;
+    return contains(this.div, node)
+  };
+
+  ContentEditableInput.prototype.focus = function () {
+    if (this.cm.options.readOnly != "nocursor") {
+      if (!this.selectionInEditor())
+        { this.showSelection(this.prepareSelection(), true); }
+      this.div.focus();
+    }
+  };
+  ContentEditableInput.prototype.blur = function () { this.div.blur(); };
+  ContentEditableInput.prototype.getField = function () { return this.div };
+
+  ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+  ContentEditableInput.prototype.receivedFocus = function () {
+    var input = this;
+    if (this.selectionInEditor())
+      { this.pollSelection(); }
+    else
+      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }
+
+    function poll() {
+      if (input.cm.state.focused) {
+        input.pollSelection();
+        input.polling.set(input.cm.options.pollInterval, poll);
+      }
+    }
+    this.polling.set(this.cm.options.pollInterval, poll);
+  };
+
+  ContentEditableInput.prototype.selectionChanged = function () {
+    var sel = this.getSelection();
+    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+  };
+
+  ContentEditableInput.prototype.pollSelection = function () {
+    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+    var sel = this.getSelection(), cm = this.cm;
+    // On Android Chrome (version 56, at least), backspacing into an
+    // uneditable block element will put the cursor in that element,
+    // and then, because it's not editable, hide the virtual keyboard.
+    // Because Android doesn't allow us to actually detect backspace
+    // presses in a sane way, this code checks for when that happens
+    // and simulates a backspace press in this case.
+    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
+      this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
+      this.blur();
+      this.focus();
+      return
+    }
+    if (this.composing) { return }
+    this.rememberSelection();
+    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+    var head = domToPos(cm, sel.focusNode, sel.focusOffset);
+    if (anchor && head) { runInOp(cm, function () {
+      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
+      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
+    }); }
+  };
+
+  ContentEditableInput.prototype.pollContent = function () {
+    if (this.readDOMTimeout != null) {
+      clearTimeout(this.readDOMTimeout);
+      this.readDOMTimeout = null;
+    }
+
+    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
+    var from = sel.from(), to = sel.to();
+    if (from.ch == 0 && from.line > cm.firstLine())
+      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
+    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+      { to = Pos(to.line + 1, 0); }
+    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+    var fromIndex, fromLine, fromNode;
+    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+      fromLine = lineNo(display.view[0].line);
+      fromNode = display.view[0].node;
+    } else {
+      fromLine = lineNo(display.view[fromIndex].line);
+      fromNode = display.view[fromIndex - 1].node.nextSibling;
+    }
+    var toIndex = findViewIndex(cm, to.line);
+    var toLine, toNode;
+    if (toIndex == display.view.length - 1) {
+      toLine = display.viewTo - 1;
+      toNode = display.lineDiv.lastChild;
+    } else {
+      toLine = lineNo(display.view[toIndex + 1].line) - 1;
+      toNode = display.view[toIndex + 1].node.previousSibling;
+    }
+
+    if (!fromNode) { return false }
+    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
+    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
+    while (newText.length > 1 && oldText.length > 1) {
+      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
+      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
+      else { break }
+    }
+
+    var cutFront = 0, cutEnd = 0;
+    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
+    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+      { ++cutFront; }
+    var newBot = lst(newText), oldBot = lst(oldText);
+    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+                             oldBot.length - (oldText.length == 1 ? cutFront : 0));
+    while (cutEnd < maxCutEnd &&
+           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+      { ++cutEnd; }
+    // Try to move start of change to start of selection if ambiguous
+    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+      while (cutFront && cutFront > from.ch &&
+             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+        cutFront--;
+        cutEnd++;
+      }
+    }
+
+    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
+    newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");
+
+    var chFrom = Pos(fromLine, cutFront);
+    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
+    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+      replaceRange(cm.doc, newText, chFrom, chTo, "+input");
+      return true
+    }
+  };
+
+  ContentEditableInput.prototype.ensurePolled = function () {
+    this.forceCompositionEnd();
+  };
+  ContentEditableInput.prototype.reset = function () {
+    this.forceCompositionEnd();
+  };
+  ContentEditableInput.prototype.forceCompositionEnd = function () {
+    if (!this.composing) { return }
+    clearTimeout(this.readDOMTimeout);
+    this.composing = null;
+    this.updateFromDOM();
+    this.div.blur();
+    this.div.focus();
+  };
+  ContentEditableInput.prototype.readFromDOMSoon = function () {
+      var this$1 = this;
+
+    if (this.readDOMTimeout != null) { return }
+    this.readDOMTimeout = setTimeout(function () {
+      this$1.readDOMTimeout = null;
+      if (this$1.composing) {
+        if (this$1.composing.done) { this$1.composing = null; }
+        else { return }
+      }
+      this$1.updateFromDOM();
+    }, 80);
+  };
+
+  ContentEditableInput.prototype.updateFromDOM = function () {
+      var this$1 = this;
+
+    if (this.cm.isReadOnly() || !this.pollContent())
+      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
+  };
+
+  ContentEditableInput.prototype.setUneditable = function (node) {
+    node.contentEditable = "false";
+  };
+
+  ContentEditableInput.prototype.onKeyPress = function (e) {
+    if (e.charCode == 0 || this.composing) { return }
+    e.preventDefault();
+    if (!this.cm.isReadOnly())
+      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
+  };
+
+  ContentEditableInput.prototype.readOnlyChanged = function (val) {
+    this.div.contentEditable = String(val != "nocursor");
+  };
+
+  ContentEditableInput.prototype.onContextMenu = function () {};
+  ContentEditableInput.prototype.resetPosition = function () {};
+
+  ContentEditableInput.prototype.needsContentAttribute = true;
+
+  function posToDOM(cm, pos) {
+    var view = findViewForLine(cm, pos.line);
+    if (!view || view.hidden) { return null }
+    var line = getLine(cm.doc, pos.line);
+    var info = mapFromLineView(view, line, pos.line);
+
+    var order = getOrder(line, cm.doc.direction), side = "left";
+    if (order) {
+      var partPos = getBidiPartAt(order, pos.ch);
+      side = partPos % 2 ? "right" : "left";
+    }
+    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
+    result.offset = result.collapse == "right" ? result.end : result.start;
+    return result
+  }
+
+  function isInGutter(node) {
+    for (var scan = node; scan; scan = scan.parentNode)
+      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+    return false
+  }
+
+  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+  function domTextBetween(cm, from, to, fromLine, toLine) {
+    var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
+    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+    function close() {
+      if (closing) {
+        text += lineSep;
+        if (extraLinebreak) { text += lineSep; }
+        closing = extraLinebreak = false;
+      }
+    }
+    function addText(str) {
+      if (str) {
+        close();
+        text += str;
+      }
+    }
+    function walk(node) {
+      if (node.nodeType == 1) {
+        var cmText = node.getAttribute("cm-text");
+        if (cmText) {
+          addText(cmText);
+          return
+        }
+        var markerID = node.getAttribute("cm-marker"), range$$1;
+        if (markerID) {
+          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
+          if (found.length && (range$$1 = found[0].find(0)))
+            { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }
+          return
+        }
+        if (node.getAttribute("contenteditable") == "false") { return }
+        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
+        if (isBlock) { close(); }
+        for (var i = 0; i < node.childNodes.length; i++)
+          { walk(node.childNodes[i]); }
+
+        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
+        if (isBlock) { closing = true; }
+      } else if (node.nodeType == 3) {
+        addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
+      }
+    }
+    for (;;) {
+      walk(from);
+      if (from == to) { break }
+      from = from.nextSibling;
+      extraLinebreak = false;
+    }
+    return text
+  }
+
+  function domToPos(cm, node, offset) {
+    var lineNode;
+    if (node == cm.display.lineDiv) {
+      lineNode = cm.display.lineDiv.childNodes[offset];
+      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+      node = null; offset = 0;
+    } else {
+      for (lineNode = node;; lineNode = lineNode.parentNode) {
+        if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+      }
+    }
+    for (var i = 0; i < cm.display.view.length; i++) {
+      var lineView = cm.display.view[i];
+      if (lineView.node == lineNode)
+        { return locateNodeInLineView(lineView, node, offset) }
+    }
+  }
+
+  function locateNodeInLineView(lineView, node, offset) {
+    var wrapper = lineView.text.firstChild, bad = false;
+    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+    if (node == wrapper) {
+      bad = true;
+      node = wrapper.childNodes[offset];
+      offset = 0;
+      if (!node) {
+        var line = lineView.rest ? lst(lineView.rest) : lineView.line;
+        return badPos(Pos(lineNo(line), line.text.length), bad)
+      }
+    }
+
+    var textNode = node.nodeType == 3 ? node : null, topNode = node;
+    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+      textNode = node.firstChild;
+      if (offset) { offset = textNode.nodeValue.length; }
+    }
+    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
+    var measure = lineView.measure, maps = measure.maps;
+
+    function find(textNode, topNode, offset) {
+      for (var i = -1; i < (maps ? maps.length : 0); i++) {
+        var map$$1 = i < 0 ? measure.map : maps[i];
+        for (var j = 0; j < map$$1.length; j += 3) {
+          var curNode = map$$1[j + 2];
+          if (curNode == textNode || curNode == topNode) {
+            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
+            var ch = map$$1[j] + offset;
+            if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }
+            return Pos(line, ch)
+          }
+        }
+      }
+    }
+    var found = find(textNode, topNode, offset);
+    if (found) { return badPos(found, bad) }
+
+    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+      found = find(after, after.firstChild, 0);
+      if (found)
+        { return badPos(Pos(found.line, found.ch - dist), bad) }
+      else
+        { dist += after.textContent.length; }
+    }
+    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+      found = find(before, before.firstChild, -1);
+      if (found)
+        { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+      else
+        { dist$1 += before.textContent.length; }
+    }
+  }
+
+  // TEXTAREA INPUT STYLE
+
+  var TextareaInput = function(cm) {
+    this.cm = cm;
+    // See input.poll and input.reset
+    this.prevInput = "";
+
+    // Flag that indicates whether we expect input to appear real soon
+    // now (after some event like 'keypress' or 'input') and are
+    // polling intensively.
+    this.pollingFast = false;
+    // Self-resetting timeout for the poller
+    this.polling = new Delayed();
+    // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+    this.hasSelection = false;
+    this.composing = null;
+  };
+
+  TextareaInput.prototype.init = function (display) {
+      var this$1 = this;
+
+    var input = this, cm = this.cm;
+    this.createField(display);
+    var te = this.textarea;
+
+    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
+
+    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+    if (ios) { te.style.width = "0px"; }
+
+    on(te, "input", function () {
+      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
+      input.poll();
+    });
+
+    on(te, "paste", function (e) {
+      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+      cm.state.pasteIncoming = +new Date;
+      input.fastPoll();
+    });
+
+    function prepareCopyCut(e) {
+      if (signalDOMEvent(cm, e)) { return }
+      if (cm.somethingSelected()) {
+        setLastCopied({lineWise: false, text: cm.getSelections()});
+      } else if (!cm.options.lineWiseCopyCut) {
+        return
+      } else {
+        var ranges = copyableRanges(cm);
+        setLastCopied({lineWise: true, text: ranges.text});
+        if (e.type == "cut") {
+          cm.setSelections(ranges.ranges, null, sel_dontScroll);
+        } else {
+          input.prevInput = "";
+          te.value = ranges.text.join("\n");
+          selectInput(te);
+        }
+      }
+      if (e.type == "cut") { cm.state.cutIncoming = +new Date; }
+    }
+    on(te, "cut", prepareCopyCut);
+    on(te, "copy", prepareCopyCut);
+
+    on(display.scroller, "paste", function (e) {
+      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+      if (!te.dispatchEvent) {
+        cm.state.pasteIncoming = +new Date;
+        input.focus();
+        return
+      }
+
+      // Pass the `paste` event to the textarea so it's handled by its event listener.
+      var event = new Event("paste");
+      event.clipboardData = e.clipboardData;
+      te.dispatchEvent(event);
+    });
+
+    // Prevent normal selection in the editor (we handle our own)
+    on(display.lineSpace, "selectstart", function (e) {
+      if (!eventInWidget(display, e)) { e_preventDefault(e); }
+    });
+
+    on(te, "compositionstart", function () {
+      var start = cm.getCursor("from");
+      if (input.composing) { input.composing.range.clear(); }
+      input.composing = {
+        start: start,
+        range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+      };
+    });
+    on(te, "compositionend", function () {
+      if (input.composing) {
+        input.poll();
+        input.composing.range.clear();
+        input.composing = null;
+      }
+    });
+  };
+
+  TextareaInput.prototype.createField = function (_display) {
+    // Wraps and hides input textarea
+    this.wrapper = hiddenTextarea();
+    // The semihidden textarea that is focused when the editor is
+    // focused, and receives input.
+    this.textarea = this.wrapper.firstChild;
+  };
+
+  TextareaInput.prototype.prepareSelection = function () {
+    // Redraw the selection and/or cursor
+    var cm = this.cm, display = cm.display, doc = cm.doc;
+    var result = prepareSelection(cm);
+
+    // Move the hidden textarea near the cursor to prevent scrolling artifacts
+    if (cm.options.moveInputWithCursor) {
+      var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
+      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
+      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+                                          headPos.top + lineOff.top - wrapOff.top));
+      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+                                           headPos.left + lineOff.left - wrapOff.left));
+    }
+
+    return result
+  };
+
+  TextareaInput.prototype.showSelection = function (drawn) {
+    var cm = this.cm, display = cm.display;
+    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
+    removeChildrenAndAdd(display.selectionDiv, drawn.selection);
+    if (drawn.teTop != null) {
+      this.wrapper.style.top = drawn.teTop + "px";
+      this.wrapper.style.left = drawn.teLeft + "px";
+    }
+  };
+
+  // Reset the input to correspond to the selection (or to be empty,
+  // when not typing and nothing is selected)
+  TextareaInput.prototype.reset = function (typing) {
+    if (this.contextMenuPending || this.composing) { return }
+    var cm = this.cm;
+    if (cm.somethingSelected()) {
+      this.prevInput = "";
+      var content = cm.getSelection();
+      this.textarea.value = content;
+      if (cm.state.focused) { selectInput(this.textarea); }
+      if (ie && ie_version >= 9) { this.hasSelection = content; }
+    } else if (!typing) {
+      this.prevInput = this.textarea.value = "";
+      if (ie && ie_version >= 9) { this.hasSelection = null; }
+    }
+  };
+
+  TextareaInput.prototype.getField = function () { return this.textarea };
+
+  TextareaInput.prototype.supportsTouch = function () { return false };
+
+  TextareaInput.prototype.focus = function () {
+    if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+      try { this.textarea.focus(); }
+      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+    }
+  };
+
+  TextareaInput.prototype.blur = function () { this.textarea.blur(); };
+
+  TextareaInput.prototype.resetPosition = function () {
+    this.wrapper.style.top = this.wrapper.style.left = 0;
+  };
+
+  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };
+
+  // Poll for input changes, using the normal rate of polling. This
+  // runs as long as the editor is focused.
+  TextareaInput.prototype.slowPoll = function () {
+      var this$1 = this;
+
+    if (this.pollingFast) { return }
+    this.polling.set(this.cm.options.pollInterval, function () {
+      this$1.poll();
+      if (this$1.cm.state.focused) { this$1.slowPoll(); }
+    });
+  };
+
+  // When an event has just come in that is likely to add or change
+  // something in the input textarea, we poll faster, to ensure that
+  // the change appears on the screen quickly.
+  TextareaInput.prototype.fastPoll = function () {
+    var missed = false, input = this;
+    input.pollingFast = true;
+    function p() {
+      var changed = input.poll();
+      if (!changed && !missed) {missed = true; input.polling.set(60, p);}
+      else {input.pollingFast = false; input.slowPoll();}
+    }
+    input.polling.set(20, p);
+  };
+
+  // Read input from the textarea, and update the document to match.
+  // When something is selected, it is present in the textarea, and
+  // selected (unless it is huge, in which case a placeholder is
+  // used). When nothing is selected, the cursor sits after previously
+  // seen text (can be empty), which is stored in prevInput (we must
+  // not reset the textarea when typing, because that breaks IME).
+  TextareaInput.prototype.poll = function () {
+      var this$1 = this;
+
+    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
+    // Since this is called a *lot*, try to bail out as cheaply as
+    // possible when it is clear that nothing happened. hasSelection
+    // will be the case when there is a lot of text in the textarea,
+    // in which case reading its value would be expensive.
+    if (this.contextMenuPending || !cm.state.focused ||
+        (hasSelection(input) && !prevInput && !this.composing) ||
+        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+      { return false }
+
+    var text = input.value;
+    // If nothing changed, bail.
+    if (text == prevInput && !cm.somethingSelected()) { return false }
+    // Work around nonsensical selection resetting in IE9/10, and
+    // inexplicable appearance of private area unicode characters on
+    // some key combos in Mac (#2689).
+    if (ie && ie_version >= 9 && this.hasSelection === text ||
+        mac && /[\uf700-\uf7ff]/.test(text)) {
+      cm.display.input.reset();
+      return false
+    }
+
+    if (cm.doc.sel == cm.display.selForContextMenu) {
+      var first = text.charCodeAt(0);
+      if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
+      if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+    }
+    // Find the part of the input that is actually new
+    var same = 0, l = Math.min(prevInput.length, text.length);
+    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }
+
+    runInOp(cm, function () {
+      applyTextInput(cm, text.slice(same), prevInput.length - same,
+                     null, this$1.composing ? "*compose" : null);
+
+      // Don't leave long text in the textarea, since it makes further polling slow
+      if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
+      else { this$1.prevInput = text; }
+
+      if (this$1.composing) {
+        this$1.composing.range.clear();
+        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+                                           {className: "CodeMirror-composing"});
+      }
+    });
+    return true
+  };
+
+  TextareaInput.prototype.ensurePolled = function () {
+    if (this.pollingFast && this.poll()) { this.pollingFast = false; }
+  };
+
+  TextareaInput.prototype.onKeyPress = function () {
+    if (ie && ie_version >= 9) { this.hasSelection = null; }
+    this.fastPoll();
+  };
+
+  TextareaInput.prototype.onContextMenu = function (e) {
+    var input = this, cm = input.cm, display = cm.display, te = input.textarea;
+    if (input.contextMenuPending) { input.contextMenuPending(); }
+    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
+    if (!pos || presto) { return } // Opera is difficult.
+
+    // Reset the current text selection only if the click is done outside of the selection
+    // and 'resetSelectionOnContextMenu' option is true.
+    var reset = cm.options.resetSelectionOnContextMenu;
+    if (reset && cm.doc.sel.contains(pos) == -1)
+      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }
+
+    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
+    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
+    input.wrapper.style.cssText = "position: static";
+    te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
+    var oldScrollY;
+    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
+    display.input.focus();
+    if (webkit) { window.scrollTo(null, oldScrollY); }
+    display.input.reset();
+    // Adds "Select all" to context menu in FF
+    if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
+    input.contextMenuPending = rehide;
+    display.selForContextMenu = cm.doc.sel;
+    clearTimeout(display.detectingSelectAll);
+
+    // Select-all will be greyed out if there's nothing to select, so
+    // this adds a zero-width space so that we can later check whether
+    // it got selected.
+    function prepareSelectAllHack() {
+      if (te.selectionStart != null) {
+        var selected = cm.somethingSelected();
+        var extval = "\u200b" + (selected ? te.value : "");
+        te.value = "\u21da"; // Used to catch context-menu undo
+        te.value = extval;
+        input.prevInput = selected ? "" : "\u200b";
+        te.selectionStart = 1; te.selectionEnd = extval.length;
+        // Re-set this, in case some other handler touched the
+        // selection in the meantime.
+        display.selForContextMenu = cm.doc.sel;
+      }
+    }
+    function rehide() {
+      if (input.contextMenuPending != rehide) { return }
+      input.contextMenuPending = false;
+      input.wrapper.style.cssText = oldWrapperCSS;
+      te.style.cssText = oldCSS;
+      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }
+
+      // Try to detect the user choosing select-all
+      if (te.selectionStart != null) {
+        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
+        var i = 0, poll = function () {
+          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+              te.selectionEnd > 0 && input.prevInput == "\u200b") {
+            operation(cm, selectAll)(cm);
+          } else if (i++ < 10) {
+            display.detectingSelectAll = setTimeout(poll, 500);
+          } else {
+            display.selForContextMenu = null;
+            display.input.reset();
+          }
+        };
+        display.detectingSelectAll = setTimeout(poll, 200);
+      }
+    }
+
+    if (ie && ie_version >= 9) { prepareSelectAllHack(); }
+    if (captureRightClick) {
+      e_stop(e);
+      var mouseup = function () {
+        off(window, "mouseup", mouseup);
+        setTimeout(rehide, 20);
+      };
+      on(window, "mouseup", mouseup);
+    } else {
+      setTimeout(rehide, 50);
+    }
+  };
+
+  TextareaInput.prototype.readOnlyChanged = function (val) {
+    if (!val) { this.reset(); }
+    this.textarea.disabled = val == "nocursor";
+  };
+
+  TextareaInput.prototype.setUneditable = function () {};
+
+  TextareaInput.prototype.needsContentAttribute = false;
+
+  function fromTextArea(textarea, options) {
+    options = options ? copyObj(options) : {};
+    options.value = textarea.value;
+    if (!options.tabindex && textarea.tabIndex)
+      { options.tabindex = textarea.tabIndex; }
+    if (!options.placeholder && textarea.placeholder)
+      { options.placeholder = textarea.placeholder; }
+    // Set autofocus to true if this textarea is focused, or if it has
+    // autofocus and no other element is focused.
+    if (options.autofocus == null) {
+      var hasFocus = activeElt();
+      options.autofocus = hasFocus == textarea ||
+        textarea.getAttribute("autofocus") != null && hasFocus == document.body;
+    }
+
+    function save() {textarea.value = cm.getValue();}
+
+    var realSubmit;
+    if (textarea.form) {
+      on(textarea.form, "submit", save);
+      // Deplorable hack to make the submit method do the right thing.
+      if (!options.leaveSubmitMethodAlone) {
+        var form = textarea.form;
+        realSubmit = form.submit;
+        try {
+          var wrappedSubmit = form.submit = function () {
+            save();
+            form.submit = realSubmit;
+            form.submit();
+            form.submit = wrappedSubmit;
+          };
+        } catch(e) {}
+      }
+    }
+
+    options.finishInit = function (cm) {
+      cm.save = save;
+      cm.getTextArea = function () { return textarea; };
+      cm.toTextArea = function () {
+        cm.toTextArea = isNaN; // Prevent this from being ran twice
+        save();
+        textarea.parentNode.removeChild(cm.getWrapperElement());
+        textarea.style.display = "";
+        if (textarea.form) {
+          off(textarea.form, "submit", save);
+          if (typeof textarea.form.submit == "function")
+            { textarea.form.submit = realSubmit; }
+        }
+      };
+    };
+
+    textarea.style.display = "none";
+    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+      options);
+    return cm
+  }
+
+  function addLegacyProps(CodeMirror) {
+    CodeMirror.off = off;
+    CodeMirror.on = on;
+    CodeMirror.wheelEventPixels = wheelEventPixels;
+    CodeMirror.Doc = Doc;
+    CodeMirror.splitLines = splitLinesAuto;
+    CodeMirror.countColumn = countColumn;
+    CodeMirror.findColumn = findColumn;
+    CodeMirror.isWordChar = isWordCharBasic;
+    CodeMirror.Pass = Pass;
+    CodeMirror.signal = signal;
+    CodeMirror.Line = Line;
+    CodeMirror.changeEnd = changeEnd;
+    CodeMirror.scrollbarModel = scrollbarModel;
+    CodeMirror.Pos = Pos;
+    CodeMirror.cmpPos = cmp;
+    CodeMirror.modes = modes;
+    CodeMirror.mimeModes = mimeModes;
+    CodeMirror.resolveMode = resolveMode;
+    CodeMirror.getMode = getMode;
+    CodeMirror.modeExtensions = modeExtensions;
+    CodeMirror.extendMode = extendMode;
+    CodeMirror.copyState = copyState;
+    CodeMirror.startState = startState;
+    CodeMirror.innerMode = innerMode;
+    CodeMirror.commands = commands;
+    CodeMirror.keyMap = keyMap;
+    CodeMirror.keyName = keyName;
+    CodeMirror.isModifierKey = isModifierKey;
+    CodeMirror.lookupKey = lookupKey;
+    CodeMirror.normalizeKeyMap = normalizeKeyMap;
+    CodeMirror.StringStream = StringStream;
+    CodeMirror.SharedTextMarker = SharedTextMarker;
+    CodeMirror.TextMarker = TextMarker;
+    CodeMirror.LineWidget = LineWidget;
+    CodeMirror.e_preventDefault = e_preventDefault;
+    CodeMirror.e_stopPropagation = e_stopPropagation;
+    CodeMirror.e_stop = e_stop;
+    CodeMirror.addClass = addClass;
+    CodeMirror.contains = contains;
+    CodeMirror.rmClass = rmClass;
+    CodeMirror.keyNames = keyNames;
+  }
+
+  // EDITOR CONSTRUCTOR
+
+  defineOptions(CodeMirror);
+
+  addEditorMethods(CodeMirror);
+
+  // Set up methods on CodeMirror's prototype to redirect to the editor's document.
+  var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
+  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+    { CodeMirror.prototype[prop] = (function(method) {
+      return function() {return method.apply(this.doc, arguments)}
+    })(Doc.prototype[prop]); } }
+
+  eventMixin(Doc);
+  CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
+
+  // Extra arguments are stored as the mode's dependencies, which is
+  // used by (legacy) mechanisms like loadmode.js to automatically
+  // load a mode. (Preferred mechanism is the require/define calls.)
+  CodeMirror.defineMode = function(name/*, mode, …*/) {
+    if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; }
+    defineMode.apply(this, arguments);
+  };
+
+  CodeMirror.defineMIME = defineMIME;
+
+  // Minimal default mode.
+  CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
+  CodeMirror.defineMIME("text/plain", "null");
+
+  // EXTENSIONS
+
+  CodeMirror.defineExtension = function (name, func) {
+    CodeMirror.prototype[name] = func;
+  };
+  CodeMirror.defineDocExtension = function (name, func) {
+    Doc.prototype[name] = func;
+  };
+
+  CodeMirror.fromTextArea = fromTextArea;
+
+  addLegacyProps(CodeMirror);
+
+  CodeMirror.version = "5.48.4";
+
+  return CodeMirror;
+
+})));
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: https://codemirror.net/LICENSE
+
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode('shell', function() {
+
+  var words = {};
+  function define(style, dict) {
+    for(var i = 0; i < dict.length; i++) {
+      words[dict[i]] = style;
+    }
+  };
+
+  var commonAtoms = ["true", "false"];
+  var commonKeywords = ["if", "then", "do", "else", "elif", "while", "until", "for", "in", "esac", "fi",
+    "fin", "fil", "done", "exit", "set", "unset", "export", "function"];
+  var commonCommands = ["ab", "awk", "bash", "beep", "cat", "cc", "cd", "chown", "chmod", "chroot", "clear",
+    "cp", "curl", "cut", "diff", "echo", "find", "gawk", "gcc", "get", "git", "grep", "hg", "kill", "killall",
+    "ln", "ls", "make", "mkdir", "openssl", "mv", "nc", "nl", "node", "npm", "ping", "ps", "restart", "rm",
+    "rmdir", "sed", "service", "sh", "shopt", "shred", "source", "sort", "sleep", "ssh", "start", "stop",
+    "su", "sudo", "svn", "tee", "telnet", "top", "touch", "vi", "vim", "wall", "wc", "wget", "who", "write",
+    "yes", "zsh"];
+
+  CodeMirror.registerHelper("hintWords", "shell", commonAtoms.concat(commonKeywords, commonCommands));
+
+  define('atom', commonAtoms);
+  define('keyword', commonKeywords);
+  define('builtin', commonCommands);
+
+  function tokenBase(stream, state) {
+    if (stream.eatSpace()) return null;
+
+    var sol = stream.sol();
+    var ch = stream.next();
+
+    if (ch === '\\') {
+      stream.next();
+      return null;
+    }
+    if (ch === '\'' || ch === '"' || ch === '`') {
+      state.tokens.unshift(tokenString(ch, ch === "`" ? "quote" : "string"));
+      return tokenize(stream, state);
+    }
+    if (ch === '#') {
+      if (sol && stream.eat('!')) {
+        stream.skipToEnd();
+        return 'meta'; // 'comment'?
+      }
+      stream.skipToEnd();
+      return 'comment';
+    }
+    if (ch === '$') {
+      state.tokens.unshift(tokenDollar);
+      return tokenize(stream, state);
+    }
+    if (ch === '+' || ch === '=') {
+      return 'operator';
+    }
+    if (ch === '-') {
+      stream.eat('-');
+      stream.eatWhile(/\w/);
+      return 'attribute';
+    }
+    if (/\d/.test(ch)) {
+      stream.eatWhile(/\d/);
+      if(stream.eol() || !/\w/.test(stream.peek())) {
+        return 'number';
+      }
+    }
+    stream.eatWhile(/[\w-]/);
+    var cur = stream.current();
+    if (stream.peek() === '=' && /\w+/.test(cur)) return 'def';
+    return words.hasOwnProperty(cur) ? words[cur] : null;
+  }
+
+  function tokenString(quote, style) {
+    var close = quote == "(" ? ")" : quote == "{" ? "}" : quote
+    return function(stream, state) {
+      var next, escaped = false;
+      while ((next = stream.next()) != null) {
+        if (next === close && !escaped) {
+          state.tokens.shift();
+          break;
+        } else if (next === '$' && !escaped && quote !== "'" && stream.peek() != close) {
+          escaped = true;
+          stream.backUp(1);
+          state.tokens.unshift(tokenDollar);
+          break;
+        } else if (!escaped && quote !== close && next === quote) {
+          state.tokens.unshift(tokenString(quote, style))
+          return tokenize(stream, state)
+        } else if (!escaped && /['"]/.test(next) && !/['"]/.test(quote)) {
+          state.tokens.unshift(tokenStringStart(next, "string"));
+          stream.backUp(1);
+          break;
+        }
+        escaped = !escaped && next === '\\';
+      }
+      return style;
+    };
+  };
+
+  function tokenStringStart(quote, style) {
+    return function(stream, state) {
+      state.tokens[0] = tokenString(quote, style)
+      stream.next()
+      return tokenize(stream, state)
+    }
+  }
+
+  var tokenDollar = function(stream, state) {
+    if (state.tokens.length > 1) stream.eat('$');
+    var ch = stream.next()
+    if (/['"({]/.test(ch)) {
+      state.tokens[0] = tokenString(ch, ch == "(" ? "quote" : ch == "{" ? "def" : "string");
+      return tokenize(stream, state);
+    }
+    if (!/\d/.test(ch)) stream.eatWhile(/\w/);
+    state.tokens.shift();
+    return 'def';
+  };
+
+  function tokenize(stream, state) {
+    return (state.tokens[0] || tokenBase) (stream, state);
+  };
+
+  return {
+    startState: function() {return {tokens:[]};},
+    token: function(stream, state) {
+      return tokenize(stream, state);
+    },
+    closeBrackets: "()[]{}''\"\"``",
+    lineComment: '#',
+    fold: "brace"
+  };
+});
+
+CodeMirror.defineMIME('text/x-sh', 'shell');
+// Apache uses a slightly different Media Type for Shell scripts
+// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+CodeMirror.defineMIME('application/x-sh', 'shell');
+
+});
+/*
+ * Editor.md
+ *
+ * @file        editormd.js 
+ * @version     v1.5.0 
+ * @description Open source online markdown editor.
+ * @license     MIT License
+ * @author      Pandao
+ * {@link       https://github.com/pandao/editor.md}
+ * @updateTime  2015-06-09
+ */
+
+
+;(function(factory) {
+    "use strict";
+    
+	// CommonJS/Node.js
+	if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
+    { 
+        module.exports = factory;
+    }
+	else if (typeof define === "function")  // AMD/CMD/Sea.js
+	{
+        if (define.amd) // for Require.js
+        {
+            /* Require.js define replace */
+        } 
+        else 
+        {
+		    define(["jquery"], factory);  // for Sea.js
+        }
+	} 
+	else
+	{ 
+        window.editormd = factory();
+	}
+    
+}(function() {    
+
+    /* Require.js assignment replace */
+    
+    "use strict";
+    
+    var $ = (typeof (jQuery) !== "undefined") ? jQuery : Zepto;
+
+	if (typeof ($) === "undefined") {
+		return ;
+	}
+    
+    /**
+     * editormd
+     * 
+     * @param   {String} id           编辑器的ID
+     * @param   {Object} options      配置选项 Key/Value
+     * @returns {Object} editormd     返回editormd对象
+     */
+    
+    var editormd         = function (id, options) {
+        return new editormd.fn.init(id, options);
+    };
+    
+    editormd.title        = editormd.$name = "Editor.md";
+    editormd.version      = "1.5.0";
+    editormd.homePage     = "https://pandao.github.io/editor.md/";
+    editormd.classPrefix  = "editormd-";
+    
+    editormd.toolbarModes = {
+        full : [
+            "undo", "redo", "|", 
+            "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", 
+            "h1", "h2", "h3", "h4", "h5", "h6", "|", 
+            "list-ul", "list-ol", "hr", "|",
+            "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|",
+            "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|",
+            "help", "info"
+        ],
+        simple : [
+            "undo", "redo", "|", 
+            "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", 
+            "h1", "h2", "h3", "h4", "h5", "h6", "|", 
+            "list-ul", "list-ol", "hr", "|",
+            "watch", "preview", "fullscreen", "|",
+            "help", "info"
+        ],
+        mini : [
+            "undo", "redo", "|",
+            "watch", "preview", "|",
+            "help", "info"
+        ]
+    };
+    
+    editormd.defaults     = {
+        mode                 : "gfm",          //gfm or markdown
+        name                 : "",             // Form element name
+        value                : "",             // value for CodeMirror, if mode not gfm/markdown
+        theme                : "",             // Editor.md self themes, before v1.5.0 is CodeMirror theme, default empty
+        editorTheme          : "default",      // Editor area, this is CodeMirror theme at v1.5.0
+        previewTheme         : "",             // Preview area theme, default empty
+        markdown             : "",             // Markdown source code
+        appendMarkdown       : "",             // if in init textarea value not empty, append markdown to textarea
+        width                : "100%",
+        height               : "100%",
+        path                 : "./lib/",       // Dependents module file directory
+        pluginPath           : "",             // If this empty, default use settings.path + "../plugins/"
+        delay                : 300,            // Delay parse markdown to html, Uint : ms
+        autoLoadModules      : true,           // Automatic load dependent module files
+        watch                : true,
+        placeholder          : "Enjoy Markdown! coding now...",
+        gotoLine             : true,
+        codeFold             : false,
+        autoHeight           : false,
+		autoFocus            : true,
+        autoCloseTags        : true,
+        searchReplace        : true,
+        syncScrolling        : true,           // true | false | "single", default true
+        readOnly             : false,
+        tabSize              : 4,
+		indentUnit           : 4,
+        lineNumbers          : true,
+		lineWrapping         : true,
+		autoCloseBrackets    : true,
+		showTrailingSpace    : true,
+		matchBrackets        : true,
+		indentWithTabs       : true,
+		styleSelectedText    : true,
+        matchWordHighlight   : true,           // options: true, false, "onselected"
+        styleActiveLine      : true,           // Highlight the current line
+        dialogLockScreen     : true,
+        dialogShowMask       : true,
+        dialogDraggable      : true,
+        dialogMaskBgColor    : "#fff",
+        dialogMaskOpacity    : 0.1,
+        fontSize             : "13px",
+        saveHTMLToTextarea   : false,
+        disabledKeyMaps      : [],
+        
+        onload               : function() {},
+        onresize             : function() {},
+        onchange             : function() {},
+        onwatch              : null,
+        onunwatch            : null,
+        onpreviewing         : function() {},
+        onpreviewed          : function() {},
+        onfullscreen         : function() {},
+        onfullscreenExit     : function() {},
+        onscroll             : function() {},
+        onpreviewscroll      : function() {},
+        
+        imageUpload          : false,
+        imageFormats         : ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
+        imageUploadURL       : "",
+        crossDomainUpload    : false,
+        uploadCallbackURL    : "",
+        
+        toc                  : true,           // Table of contents
+        tocm                 : false,           // Using [TOCM], auto create ToC dropdown menu
+        tocTitle             : "",             // for ToC dropdown menu btn
+        tocDropdown          : false,
+        tocContainer         : "",
+        tocStartLevel        : 1,              // Said from H1 to create ToC
+        htmlDecode           : false,          // Open the HTML tag identification 
+        pageBreak            : true,           // Enable parse page break [========]
+        atLink               : true,           // for @link
+        emailLink            : true,           // for email address auto link
+        taskList             : false,          // Enable Github Flavored Markdown task lists
+        emoji                : false,          // :emoji: , Support Github emoji, Twitter Emoji (Twemoji);
+                                               // Support FontAwesome icon emoji :fa-xxx: > Using fontAwesome icon web fonts;
+                                               // Support Editor.md logo icon emoji :editormd-logo: :editormd-logo-1x: > 1~8x;
+        tex                  : false,          // TeX(LaTeX), based on KaTeX
+        flowChart            : false,          // flowChart.js only support IE9+
+        sequenceDiagram      : false,          // sequenceDiagram.js only support IE9+
+        previewCodeHighlight : true,
+                
+        toolbar              : true,           // show/hide toolbar
+        toolbarAutoFixed     : true,           // on window scroll auto fixed position
+        toolbarIcons         : "full",
+        toolbarTitles        : {},
+        toolbarHandlers      : {
+            ucwords : function() {
+                return editormd.toolbarHandlers.ucwords;
+            },
+            lowercase : function() {
+                return editormd.toolbarHandlers.lowercase;
+            }
+        },
+        toolbarCustomIcons   : {               // using html tag create toolbar icon, unused default <a> tag.
+            lowercase        : "<a href=\"javascript:;\" title=\"Lowercase\" unselectable=\"on\"><i class=\"fa\" name=\"lowercase\" style=\"font-size:24px;margin-top: -10px;\">a</i></a>",
+            "ucwords"        : "<a href=\"javascript:;\" title=\"ucwords\" unselectable=\"on\"><i class=\"fa\" name=\"ucwords\" style=\"font-size:20px;margin-top: -3px;\">Aa</i></a>"
+        }, 
+        toolbarIconsClass    : {
+            undo             : "fa-undo",
+            redo             : "fa-repeat",
+            bold             : "fa-bold",
+            del              : "fa-strikethrough",
+            italic           : "fa-italic",
+            quote            : "fa-quote-left",
+            uppercase        : "fa-font",
+            h1               : editormd.classPrefix + "bold",
+            h2               : editormd.classPrefix + "bold",
+            h3               : editormd.classPrefix + "bold",
+            h4               : editormd.classPrefix + "bold",
+            h5               : editormd.classPrefix + "bold",
+            h6               : editormd.classPrefix + "bold",
+            "list-ul"        : "fa-list-ul",
+            "list-ol"        : "fa-list-ol",
+            hr               : "fa-minus",
+            link             : "fa-link",
+            "reference-link" : "fa-anchor",
+            image            : "fa-picture-o",
+            code             : "fa-code",
+            "preformatted-text" : "fa-file-code-o",
+            "code-block"     : "fa-file-code-o",
+            table            : "fa-table",
+            datetime         : "fa-clock-o",
+            emoji            : "fa-smile-o",
+            "html-entities"  : "fa-copyright",
+            pagebreak        : "fa-newspaper-o",
+            "goto-line"      : "fa-terminal", // fa-crosshairs
+            watch            : "fa-eye-slash",
+            unwatch          : "fa-eye",
+            preview          : "fa-desktop",
+            search           : "fa-search",
+            fullscreen       : "fa-arrows-alt",
+            clear            : "fa-eraser",
+            help             : "fa-question-circle",
+            info             : "fa-info-circle"
+        },        
+        toolbarIconTexts     : {},
+        
+        lang : {
+            name        : "zh-cn",
+            description : "开源在线Markdown编辑器<br/>Open source online Markdown editor.",
+            tocTitle    : "目录",
+            toolbar     : {
+                undo             : "撤销(Ctrl+Z)",
+                redo             : "重做(Ctrl+Y)",
+                bold             : "粗体",
+                del              : "删除线",
+                italic           : "斜体",
+                quote            : "引用",
+                ucwords          : "将每个单词首字母转成大写",
+                uppercase        : "将所选转换成大写",
+                lowercase        : "将所选转换成小写",
+                h1               : "标题1",
+                h2               : "标题2",
+                h3               : "标题3",
+                h4               : "标题4",
+                h5               : "标题5",
+                h6               : "标题6",
+                "list-ul"        : "无序列表",
+                "list-ol"        : "有序列表",
+                hr               : "横线",
+                link             : "链接",
+                "reference-link" : "引用链接",
+                image            : "添加图片",
+                code             : "行内代码",
+                "preformatted-text" : "预格式文本 / 代码块(缩进风格)",
+                "code-block"     : "代码块(多语言风格)",
+                table            : "添加表格",
+                datetime         : "日期时间",
+                emoji            : "Emoji表情",
+                "html-entities"  : "HTML实体字符",
+                pagebreak        : "插入分页符",
+                "goto-line"      : "跳转到行",
+                watch            : "关闭实时预览",
+                unwatch          : "开启实时预览",
+                preview          : "全窗口预览HTML(按 Shift + ESC还原)",
+                fullscreen       : "全屏(按ESC还原)",
+                clear            : "清空",
+                search           : "搜索",
+                help             : "使用帮助",
+                info             : "关于" + editormd.title
+            },
+            buttons : {
+                enter  : "确定",
+                cancel : "取消",
+                close  : "关闭"
+            },
+            dialog : {
+                link : {
+                    title    : "添加链接",
+                    url      : "链接地址",
+                    urlTitle : "链接标题",
+                    urlEmpty : "错误:请填写链接地址。"
+                },
+                referenceLink : {
+                    title    : "添加引用链接",
+                    name     : "引用名称",
+                    url      : "链接地址",
+                    urlId    : "链接ID",
+                    urlTitle : "链接标题",
+                    nameEmpty: "错误:引用链接的名称不能为空。",
+                    idEmpty  : "错误:请填写引用链接的ID。",
+                    urlEmpty : "错误:请填写引用链接的URL地址。"
+                },
+                image : {
+                    title    : "添加图片",
+                    url      : "图片地址",
+                    link     : "图片链接",
+                    alt      : "图片描述",
+                    uploadButton     : "本地上传",
+                    imageURLEmpty    : "错误:图片地址不能为空。",
+                    uploadFileEmpty  : "错误:上传的图片不能为空。",
+                    formatNotAllowed : "错误:只允许上传图片文件,允许上传的图片文件格式有:"
+                },
+                preformattedText : {
+                    title             : "添加预格式文本或代码块", 
+                    emptyAlert        : "错误:请填写预格式文本或代码的内容。"
+                },
+                codeBlock : {
+                    title             : "添加代码块",                    
+                    selectLabel       : "代码语言:",
+                    selectDefaultText : "请选择代码语言",
+                    otherLanguage     : "其他语言",
+                    unselectedLanguageAlert : "错误:请选择代码所属的语言类型。",
+                    codeEmptyAlert    : "错误:请填写代码内容。"
+                },
+                htmlEntities : {
+                    title : "HTML 实体字符"
+                },
+                help : {
+                    title : "使用帮助"
+                }
+            }
+        }
+    };
+    
+    editormd.classNames  = {
+        tex : editormd.classPrefix + "tex"
+    };
+
+    editormd.dialogZindex = 99999;
+    
+    editormd.$katex       = null;
+    editormd.$marked      = null;
+    editormd.$CodeMirror  = null;
+    editormd.$prettyPrint = null;
+    
+    var timer, flowchartTimer;
+
+    editormd.prototype    = editormd.fn = {
+        state : {
+            watching   : false,
+            loaded     : false,
+            preview    : false,
+            fullscreen : false
+        },
+        
+        /**
+         * 构造函数/实例初始化
+         * Constructor / instance initialization
+         * 
+         * @param   {String}   id            编辑器的ID
+         * @param   {Object}   [options={}]  配置选项 Key/Value
+         * @returns {editormd}               返回editormd的实例对象
+         */
+        
+        init : function (id, options) {
+            
+            options              = options || {};
+            
+            if (typeof id === "object")
+            {
+                options = id;
+            }
+            
+            var _this            = this;
+            var classPrefix      = this.classPrefix  = editormd.classPrefix; 
+            var settings         = this.settings     = $.extend(true, editormd.defaults, options);
+            
+            id                   = (typeof id === "object") ? settings.id : id;
+            
+            var editor           = this.editor       = $("#" + id);
+            
+            this.id              = id;
+            this.lang            = settings.lang;
+            
+            var classNames       = this.classNames   = {
+                textarea : {
+                    html     : classPrefix + "html-textarea",
+                    markdown : classPrefix + "markdown-textarea"
+                }
+            };
+            
+            settings.pluginPath = (settings.pluginPath === "") ? settings.path + "../plugins/" : settings.pluginPath; 
+            
+            this.state.watching = (settings.watch) ? true : false;
+            
+            if ( !editor.hasClass("editormd") ) {
+                editor.addClass("editormd");
+            }
+            
+            editor.css({
+                width  : (typeof settings.width  === "number") ? settings.width  + "px" : settings.width,
+                height : (typeof settings.height === "number") ? settings.height + "px" : settings.height
+            });
+            
+            if (settings.autoHeight)
+            {
+                editor.css("height", "auto");
+            }
+                        
+            var markdownTextarea = this.markdownTextarea = editor.children("textarea");
+            
+            if (markdownTextarea.length < 1)
+            {
+                editor.append("<textarea></textarea>");
+                markdownTextarea = this.markdownTextarea = editor.children("textarea");
+            }
+            
+            markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder);
+            
+            if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "")
+            {
+                markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc");
+            }
+            
+            var appendElements = [
+                (!settings.readOnly) ? "<a href=\"javascript:;\" class=\"fa fa-close " + classPrefix + "preview-close-btn\"></a>" : "",
+                ( (settings.saveHTMLToTextarea) ? "<textarea class=\"" + classNames.textarea.html + "\" name=\"" + id + "-html-code\"></textarea>" : "" ),
+                "<div class=\"" + classPrefix + "preview\"><div class=\"markdown-body " + classPrefix + "preview-container\"></div></div>",
+                "<div class=\"" + classPrefix + "container-mask\" style=\"display:block;\"></div>",
+                "<div class=\"" + classPrefix + "mask\"></div>"
+            ].join("\n");
+            
+            editor.append(appendElements).addClass(classPrefix + "vertical");
+            
+            if (settings.theme !== "") 
+            {
+                editor.addClass(classPrefix + "theme-" + settings.theme);
+            }
+            
+            this.mask          = editor.children("." + classPrefix + "mask");    
+            this.containerMask = editor.children("." + classPrefix  + "container-mask");
+            
+            if (settings.markdown !== "")
+            {
+                markdownTextarea.val(settings.markdown);
+            }
+            
+            if (settings.appendMarkdown !== "")
+            {
+                markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown);
+            }
+            
+            this.htmlTextarea     = editor.children("." + classNames.textarea.html);            
+            this.preview          = editor.children("." + classPrefix + "preview");
+            this.previewContainer = this.preview.children("." + classPrefix + "preview-container");
+            
+            if (settings.previewTheme !== "") 
+            {
+                this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme);
+            }
+            
+            if (typeof define === "function" && define.amd)
+            {
+                if (typeof katex !== "undefined") 
+                {
+                    editormd.$katex = katex;
+                }
+                
+                if (settings.searchReplace && !settings.readOnly) 
+                {
+                    editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog");
+                    editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar");
+                }
+            }
+            
+            if ((typeof define === "function" && define.amd) || !settings.autoLoadModules)
+            {
+                if (typeof CodeMirror !== "undefined") {
+                    editormd.$CodeMirror = CodeMirror;
+                }
+                
+                if (typeof marked     !== "undefined") {
+                    editormd.$marked     = marked;
+                }
+                
+                this.setCodeMirror().setToolbar().loadedDisplay();
+            } 
+            else 
+            {
+                this.loadQueues();
+            }
+
+            return this;
+        },
+        
+        /**
+         * 所需组件加载队列
+         * Required components loading queue
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        loadQueues : function() {
+            var _this        = this;
+            var settings     = this.settings;
+            var loadPath     = settings.path;
+                                
+            var loadFlowChartOrSequenceDiagram = function() {
+                
+                if (editormd.isIE8) 
+                {
+                    _this.loadedDisplay();
+                    
+                    return ;
+                }
+
+                if (settings.flowChart || settings.sequenceDiagram) 
+                {
+                    editormd.loadScript(loadPath + "raphael.min", function() {
+
+                        editormd.loadScript(loadPath + "underscore.min", function() {  
+
+                            if (!settings.flowChart && settings.sequenceDiagram) 
+                            {
+                                editormd.loadScript(loadPath + "sequence-diagram.min", function() {
+                                    _this.loadedDisplay();
+                                });
+                            }
+                            else if (settings.flowChart && !settings.sequenceDiagram) 
+                            {      
+                                editormd.loadScript(loadPath + "flowchart.min", function() {  
+                                    editormd.loadScript(loadPath + "jquery.flowchart.min", function() {
+                                        _this.loadedDisplay();
+                                    });
+                                });
+                            }
+                            else if (settings.flowChart && settings.sequenceDiagram) 
+                            {  
+                                editormd.loadScript(loadPath + "flowchart.min", function() {  
+                                    editormd.loadScript(loadPath + "jquery.flowchart.min", function() {
+                                        editormd.loadScript(loadPath + "sequence-diagram.min", function() {
+                                            _this.loadedDisplay();
+                                        });
+                                    });
+                                });
+                            }
+                        });
+
+                    });
+                } 
+                else
+                {
+                    _this.loadedDisplay();
+                }
+            }; 
+
+            editormd.loadCSS(loadPath + "codemirror/codemirror.min");
+            
+            if (settings.searchReplace && !settings.readOnly)
+            {
+                editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog");
+                editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar");
+            }
+            
+            if (settings.codeFold)
+            {
+                editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter");            
+            }
+            
+            editormd.loadScript(loadPath + "codemirror/codemirror.min", function() {
+                editormd.$CodeMirror = CodeMirror;
+                
+                editormd.loadScript(loadPath + "codemirror/modes.min", function() {
+                    
+                    editormd.loadScript(loadPath + "codemirror/addons.min", function() {
+                        
+                        _this.setCodeMirror();
+                        
+                        if (settings.mode !== "gfm" && settings.mode !== "markdown") 
+                        {
+                            _this.loadedDisplay();
+                            
+                            return false;
+                        }
+                        
+                        _this.setToolbar();
+
+                        editormd.loadScript(loadPath + "marked.min", function() {
+
+                            editormd.$marked = marked;
+                                
+                            if (settings.previewCodeHighlight) 
+                            {
+                                editormd.loadScript(loadPath + "prettify.min", function() {
+                                    loadFlowChartOrSequenceDiagram();
+                                });
+                            } 
+                            else
+                            {                  
+                                loadFlowChartOrSequenceDiagram();
+                            }
+                        });
+                        
+                    });
+                    
+                });
+                
+            });
+
+            return this;
+        },
+        
+        /**
+         * 设置 Editor.md 的整体主题,主要是工具栏
+         * Setting Editor.md theme
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setTheme : function(theme) {
+            var editor      = this.editor;
+            var oldTheme    = this.settings.theme;
+            var themePrefix = this.classPrefix + "theme-";
+            
+            editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme);
+            
+            this.settings.theme = theme;
+            
+            return this;
+        },
+        
+        /**
+         * 设置 CodeMirror(编辑区)的主题
+         * Setting CodeMirror (Editor area) theme
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setEditorTheme : function(theme) {  
+            var settings   = this.settings;  
+            settings.editorTheme = theme;  
+            
+            if (theme !== "default")
+            {
+                editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme);
+            }
+            
+            this.cm.setOption("theme", theme);
+            
+            return this;
+        },
+        
+        /**
+         * setEditorTheme() 的别名
+         * setEditorTheme() alias
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setCodeMirrorTheme : function (theme) {            
+            this.setEditorTheme(theme);
+            
+            return this;
+        },
+        
+        /**
+         * 设置 Editor.md 的主题
+         * Setting Editor.md theme
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setPreviewTheme : function(theme) {  
+            var preview     = this.preview;
+            var oldTheme    = this.settings.previewTheme;
+            var themePrefix = this.classPrefix + "preview-theme-";
+            
+            preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme);
+            
+            this.settings.previewTheme = theme;
+            
+            return this;
+        },
+        
+        /**
+         * 配置和初始化CodeMirror组件
+         * CodeMirror initialization
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setCodeMirror : function() { 
+            var settings         = this.settings;
+            var editor           = this.editor;
+            
+            if (settings.editorTheme !== "default")
+            {
+                editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme);
+            }
+            
+            var codeMirrorConfig = {
+                mode                      : settings.mode,
+                theme                     : settings.editorTheme,
+                tabSize                   : settings.tabSize,
+                dragDrop                  : false,
+                autofocus                 : settings.autoFocus,
+                autoCloseTags             : settings.autoCloseTags,
+                readOnly                  : (settings.readOnly) ? "nocursor" : false,
+                indentUnit                : settings.indentUnit,
+                lineNumbers               : settings.lineNumbers,
+                lineWrapping              : settings.lineWrapping,
+                extraKeys                 : {
+                                                "Ctrl-Q": function(cm) { 
+                                                    cm.foldCode(cm.getCursor()); 
+                                                }
+                                            },
+                foldGutter                : settings.codeFold,
+                gutters                   : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
+                matchBrackets             : settings.matchBrackets,
+                indentWithTabs            : settings.indentWithTabs,
+                styleActiveLine           : settings.styleActiveLine,
+                styleSelectedText         : settings.styleSelectedText,
+                autoCloseBrackets         : settings.autoCloseBrackets,
+                showTrailingSpace         : settings.showTrailingSpace,
+                highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } )
+            };
+            
+            this.codeEditor = this.cm        = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig);
+            this.codeMirror = this.cmElement = editor.children(".CodeMirror");
+            
+            if (settings.value !== "")
+            {
+                this.cm.setValue(settings.value);
+            }
+
+            this.codeMirror.css({
+                fontSize : settings.fontSize,
+                width    : (!settings.watch) ? "100%" : "50%"
+            });
+            
+            if (settings.autoHeight)
+            {
+                this.codeMirror.css("height", "auto");
+                this.cm.setOption("viewportMargin", Infinity);
+            }
+            
+            if (!settings.lineNumbers)
+            {
+                this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none");
+            }
+
+            return this;
+        },
+        
+        /**
+         * 获取CodeMirror的配置选项
+         * Get CodeMirror setting options
+         * 
+         * @returns {Mixed}                  return CodeMirror setting option value
+         */
+        
+        getCodeMirrorOption : function(key) {            
+            return this.cm.getOption(key);
+        },
+        
+        /**
+         * 配置和重配置CodeMirror的选项
+         * CodeMirror setting options / resettings
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setCodeMirrorOption : function(key, value) {
+            
+            this.cm.setOption(key, value);
+            
+            return this;
+        },
+        
+        /**
+         * 添加 CodeMirror 键盘快捷键
+         * Add CodeMirror keyboard shortcuts key map
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        addKeyMap : function(map, bottom) {
+            this.cm.addKeyMap(map, bottom);
+            
+            return this;
+        },
+        
+        /**
+         * 移除 CodeMirror 键盘快捷键
+         * Remove CodeMirror keyboard shortcuts key map
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        removeKeyMap : function(map) {
+            this.cm.removeKeyMap(map);
+            
+            return this;
+        },
+        
+        /**
+         * 跳转到指定的行
+         * Goto CodeMirror line
+         * 
+         * @param   {String|Intiger}   line      line number or "first"|"last"
+         * @returns {editormd}                   返回editormd的实例对象
+         */
+        
+        gotoLine : function (line) {
+            
+            var settings = this.settings;
+            
+            if (!settings.gotoLine)
+            {
+                return this;
+            }
+            
+            var cm       = this.cm;
+            var editor   = this.editor;
+            var count    = cm.lineCount();
+            var preview  = this.preview;
+            
+            if (typeof line === "string")
+            {
+                if(line === "last")
+                {
+                    line = count;
+                }
+            
+                if (line === "first")
+                {
+                    line = 1;
+                }
+            }
+            
+            if (typeof line !== "number") 
+            {  
+                alert("Error: The line number must be an integer.");
+                return this;
+            }
+            
+            line  = parseInt(line) - 1;
+            
+            if (line > count)
+            {
+                alert("Error: The line number range 1-" + count);
+                
+                return this;
+            }
+            
+            cm.setCursor( {line : line, ch : 0} );
+            
+            var scrollInfo   = cm.getScrollInfo();
+            var clientHeight = scrollInfo.clientHeight; 
+            var coords       = cm.charCoords({line : line, ch : 0}, "local");
+            
+            cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2);
+            
+            if (settings.watch)
+            {            
+                var cmScroll  = this.codeMirror.find(".CodeMirror-scroll")[0];
+                var height    = $(cmScroll).height(); 
+                var scrollTop = cmScroll.scrollTop;         
+                var percent   = (scrollTop / cmScroll.scrollHeight);
+
+                if (scrollTop === 0)
+                {
+                    preview.scrollTop(0);
+                } 
+                else if (scrollTop + height >= cmScroll.scrollHeight - 16)
+                { 
+                    preview.scrollTop(preview[0].scrollHeight);                    
+                } 
+                else
+                {                    
+                    preview.scrollTop(preview[0].scrollHeight * percent);
+                }
+            }
+
+            cm.focus();
+            
+            return this;
+        },
+        
+        /**
+         * 扩展当前实例对象,可同时设置多个或者只设置一个
+         * Extend editormd instance object, can mutil setting.
+         * 
+         * @returns {editormd}                  this(editormd instance object.)
+         */
+        
+        extend : function() {
+            if (typeof arguments[1] !== "undefined")
+            {
+                if (typeof arguments[1] === "function")
+                {
+                    arguments[1] = $.proxy(arguments[1], this);
+                }
+
+                this[arguments[0]] = arguments[1];
+            }
+            
+            if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined")
+            {
+                $.extend(true, this, arguments[0]);
+            }
+
+            return this;
+        },
+        
+        /**
+         * 设置或扩展当前实例对象,单个设置
+         * Extend editormd instance object, one by one
+         * 
+         * @param   {String|Object}   key       option key
+         * @param   {String|Object}   value     option value
+         * @returns {editormd}                  this(editormd instance object.)
+         */
+        
+        set : function (key, value) {
+            
+            if (typeof value !== "undefined" && typeof value === "function")
+            {
+                value = $.proxy(value, this);
+            }
+            
+            this[key] = value;
+
+            return this;
+        },
+        
+        /**
+         * 重新配置
+         * Resetting editor options
+         * 
+         * @param   {String|Object}   key       option key
+         * @param   {String|Object}   value     option value
+         * @returns {editormd}                  this(editormd instance object.)
+         */
+        
+        config : function(key, value) {
+            var settings = this.settings;
+            
+            if (typeof key === "object")
+            {
+                settings = $.extend(true, settings, key);
+            }
+            
+            if (typeof key === "string")
+            {
+                settings[key] = value;
+            }
+            
+            this.settings = settings;
+            this.recreate();
+            
+            return this;
+        },
+        
+        /**
+         * 注册事件处理方法
+         * Bind editor event handle
+         * 
+         * @param   {String}     eventType      event type
+         * @param   {Function}   callback       回调函数
+         * @returns {editormd}                  this(editormd instance object.)
+         */
+        
+        on : function(eventType, callback) {
+            var settings = this.settings;
+            
+            if (typeof settings["on" + eventType] !== "undefined") 
+            {                
+                settings["on" + eventType] = $.proxy(callback, this);      
+            }
+
+            return this;
+        },
+        
+        /**
+         * 解除事件处理方法
+         * Unbind editor event handle
+         * 
+         * @param   {String}   eventType          event type
+         * @returns {editormd}                    this(editormd instance object.)
+         */
+        
+        off : function(eventType) {
+            var settings = this.settings;
+            
+            if (typeof settings["on" + eventType] !== "undefined") 
+            {
+                settings["on" + eventType] = function(){};
+            }
+            
+            return this;
+        },
+        
+        /**
+         * 显示工具栏
+         * Display toolbar
+         * 
+         * @param   {Function} [callback=function(){}] 回调函数
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        showToolbar : function(callback) {
+            var settings = this.settings;
+            
+            if(settings.readOnly) {
+                return this;
+            }
+            
+            if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") )
+            {
+                this.setToolbar();
+            }
+            
+            settings.toolbar = true; 
+            
+            this.toolbar.show();
+            this.resize();
+            
+            $.proxy(callback || function(){}, this)();
+
+            return this;
+        },
+        
+        /**
+         * 隐藏工具栏
+         * Hide toolbar
+         * 
+         * @param   {Function} [callback=function(){}] 回调函数
+         * @returns {editormd}                         this(editormd instance object.)
+         */
+        
+        hideToolbar : function(callback) { 
+            var settings = this.settings;
+            
+            settings.toolbar = false;  
+            this.toolbar.hide();
+            this.resize();
+            
+            $.proxy(callback || function(){}, this)();
+
+            return this;
+        },
+        
+        /**
+         * 页面滚动时工具栏的固定定位
+         * Set toolbar in window scroll auto fixed position
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setToolbarAutoFixed : function(fixed) {
+            
+            var state    = this.state;
+            var editor   = this.editor;
+            var toolbar  = this.toolbar;
+            var settings = this.settings;
+            
+            if (typeof fixed !== "undefined")
+            {
+                settings.toolbarAutoFixed = fixed;
+            }
+            
+            var autoFixedHandle = function(){
+                var $window = $(window);
+                var top     = $window.scrollTop();
+                
+                if (!settings.toolbarAutoFixed)
+                {
+                    return false;
+                }
+
+                if (top - editor.offset().top > 10 && top < editor.height())
+                {
+                    toolbar.css({
+                        position : "fixed",
+                        width    : editor.width() + "px",
+                        left     : ($window.width() - editor.width()) / 2 + "px"
+                    });
+                }
+                else
+                {
+                    toolbar.css({
+                        position : "absolute",
+                        width    : "100%",
+                        left     : 0
+                    });
+                }
+            };
+            
+            if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed)
+            {
+                $(window).bind("scroll", autoFixedHandle);
+            }
+
+            return this;
+        },
+        
+        /**
+         * 配置和初始化工具栏
+         * Set toolbar and Initialization
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setToolbar : function() {
+            var settings    = this.settings;  
+            
+            if(settings.readOnly) {
+                return this;
+            }
+            
+            var editor      = this.editor;
+            var preview     = this.preview;
+            var classPrefix = this.classPrefix;
+            
+            var toolbar     = this.toolbar = editor.children("." + classPrefix + "toolbar");
+            
+            if (settings.toolbar && toolbar.length < 1)
+            {            
+                var toolbarHTML = "<div class=\"" + classPrefix + "toolbar\"><div class=\"" + classPrefix + "toolbar-container\"><ul class=\"" + classPrefix + "menu\"></ul></div></div>";
+                
+                editor.append(toolbarHTML);
+                toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar");
+            }
+            
+            if (!settings.toolbar) 
+            {
+                toolbar.hide();
+                
+                return this;
+            }
+            
+            toolbar.show();
+            
+            var icons       = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() 
+                            : ((typeof settings.toolbarIcons === "string")  ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons);
+            
+            var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = "";
+            var pullRight   = false;
+            
+            for (var i = 0, len = icons.length; i < len; i++)
+            {
+                var name = icons[i];
+
+                if (name === "||") 
+                { 
+                    pullRight = true;
+                } 
+                else if (name === "|")
+                {
+                    menu += "<li class=\"divider\" unselectable=\"on\">|</li>";
+                }
+                else
+                {
+                    var isHeader = (/h(\d)/.test(name));
+                    var index    = name;
+                    
+                    if (name === "watch" && !settings.watch) {
+                        index = "unwatch";
+                    }
+                    
+                    var title     = settings.lang.toolbar[index];
+                    var iconTexts = settings.toolbarIconTexts[index];
+                    var iconClass = settings.toolbarIconsClass[index];
+                    
+                    title     = (typeof title     === "undefined") ? "" : title;
+                    iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts;
+                    iconClass = (typeof iconClass === "undefined") ? "" : iconClass;
+
+                    var menuItem = pullRight ? "<li class=\"pull-right\">" : "<li>";
+                    
+                    if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function")
+                    {
+                        menuItem += settings.toolbarCustomIcons[name];
+                    }
+                    else 
+                    {
+                        menuItem += "<a href=\"javascript:;\" title=\"" + title + "\" unselectable=\"on\">";
+                        menuItem += "<i class=\"fa " + iconClass + "\" name=\""+name+"\" unselectable=\"on\">"+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + "</i>";
+                        menuItem += "</a>";
+                    }
+
+                    menuItem += "</li>";
+
+                    menu = pullRight ? menuItem + menu : menu + menuItem;
+                }
+            }
+
+            toolbarMenu.html(menu);
+            
+            toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase);
+            toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords);
+            
+            this.setToolbarHandler();
+            this.setToolbarAutoFixed();
+
+            return this;
+        },
+        
+        /**
+         * 工具栏图标事件处理对象序列
+         * Get toolbar icons event handlers
+         * 
+         * @param   {Object}   cm    CodeMirror的实例对象
+         * @param   {String}   name  要获取的事件处理器名称
+         * @returns {Object}         返回处理对象序列
+         */
+            
+        dialogLockScreen : function() {
+            $.proxy(editormd.dialogLockScreen, this)();
+            
+            return this;
+        },
+
+        dialogShowMask : function(dialog) {
+            $.proxy(editormd.dialogShowMask, this)(dialog);
+            
+            return this;
+        },
+        
+        getToolbarHandles : function(name) {  
+            var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers;
+            
+            return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers;
+        },
+        
+        /**
+         * 工具栏图标事件处理器
+         * Bind toolbar icons event handle
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        setToolbarHandler : function() {
+            var _this               = this;
+            var settings            = this.settings;
+            
+            if (!settings.toolbar || settings.readOnly) {
+                return this;
+            }
+            
+            var toolbar             = this.toolbar;
+            var cm                  = this.cm;
+            var classPrefix         = this.classPrefix;           
+            var toolbarIcons        = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a");  
+            var toolbarIconHandlers = this.getToolbarHandles();  
+                
+            toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) {
+
+                var icon                = $(this).children(".fa");
+                var name                = icon.attr("name");
+                var cursor              = cm.getCursor();
+                var selection           = cm.getSelection();
+
+                if (name === "") {
+                    return ;
+                }
+                
+                _this.activeIcon = icon;
+
+                if (typeof toolbarIconHandlers[name] !== "undefined") 
+                {
+                    $.proxy(toolbarIconHandlers[name], _this)(cm);
+                }
+                else 
+                {
+                    if (typeof settings.toolbarHandlers[name] !== "undefined") 
+                    {
+                        $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection);
+                    }
+                }
+                
+                if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && 
+                    name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") 
+                {
+                    cm.focus();
+                }
+
+                return false;
+
+            });
+
+            return this;
+        },
+        
+        /**
+         * 动态创建对话框
+         * Creating custom dialogs
+         * 
+         * @param   {Object} options  配置项键值对 Key/Value
+         * @returns {dialog}          返回创建的dialog的jQuery实例对象
+         */
+        
+        createDialog : function(options) {            
+            return $.proxy(editormd.createDialog, this)(options);
+        },
+        
+        /**
+         * 创建关于Editor.md的对话框
+         * Create about Editor.md dialog
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        createInfoDialog : function() {
+            var _this        = this;
+			var editor       = this.editor;
+            var classPrefix  = this.classPrefix;  
+            
+            var infoDialogHTML = [
+                "<div class=\"" + classPrefix + "dialog " + classPrefix + "dialog-info\" style=\"\">",
+                "<div class=\"" + classPrefix + "dialog-container\">",
+                "<h1><i class=\"editormd-logo editormd-logo-lg editormd-logo-color\"></i> " + editormd.title + "<small>v" + editormd.version + "</small></h1>",
+                "<p>" + this.lang.description + "</p>",
+                "<p style=\"margin: 10px 0 20px 0;\"><a href=\"" + editormd.homePage + "\" target=\"_blank\">" + editormd.homePage + " <i class=\"fa fa-external-link\"></i></a></p>",
+                "<p style=\"font-size: 0.85em;\">Copyright &copy; 2015 <a href=\"https://github.com/pandao\" target=\"_blank\" class=\"hover-link\">Pandao</a>, The <a href=\"https://github.com/pandao/editor.md/blob/master/LICENSE\" target=\"_blank\" class=\"hover-link\">MIT</a> License.</p>",
+                "</div>",
+                "<a href=\"javascript:;\" class=\"fa fa-close " + classPrefix + "dialog-close\"></a>",
+                "</div>"
+            ].join("\n");
+
+            editor.append(infoDialogHTML);
+            
+            var infoDialog  = this.infoDialog = editor.children("." + classPrefix + "dialog-info");
+
+            infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() {
+                _this.hideInfoDialog();
+            });
+            
+            infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show();
+            
+            this.infoDialogPosition();
+
+            return this;
+        },
+        
+        /**
+         * 关于Editor.md对话居中定位
+         * Editor.md dialog position handle
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        infoDialogPosition : function() {
+            var infoDialog = this.infoDialog;
+            
+			var _infoDialogPosition = function() {
+				infoDialog.css({
+					top  : ($(window).height() - infoDialog.height()) / 2 + "px",
+					left : ($(window).width()  - infoDialog.width()) / 2  + "px"
+				});
+			};
+
+			_infoDialogPosition();
+
+			$(window).resize(_infoDialogPosition);
+            
+            return this;
+        },
+        
+        /**
+         * 显示关于Editor.md
+         * Display about Editor.md dialog
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        showInfoDialog : function() {
+
+            $("html,body").css("overflow-x", "hidden");
+            
+            var _this       = this;
+			var editor      = this.editor;
+            var settings    = this.settings;         
+			var infoDialog  = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info");
+            
+            if (infoDialog.length < 1)
+            {
+                this.createInfoDialog();
+            }
+            
+            this.lockScreen(true);
+            
+            this.mask.css({
+						opacity         : settings.dialogMaskOpacity,
+						backgroundColor : settings.dialogMaskBgColor
+					}).show();
+
+			infoDialog.css("z-index", editormd.dialogZindex).show();
+
+			this.infoDialogPosition();
+
+            return this;
+        },
+        
+        /**
+         * 隐藏关于Editor.md
+         * Hide about Editor.md dialog
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        hideInfoDialog : function() {            
+            $("html,body").css("overflow-x", "");
+            this.infoDialog.hide();
+            this.mask.hide();
+            this.lockScreen(false);
+
+            return this;
+        },
+        
+        /**
+         * 锁屏
+         * lock screen
+         * 
+         * @param   {Boolean}    lock    Boolean 布尔值,是否锁屏
+         * @returns {editormd}           返回editormd的实例对象
+         */
+        
+        lockScreen : function(lock) {
+            editormd.lockScreen(lock);
+            this.resize();
+
+            return this;
+        },
+        
+        /**
+         * 编辑器界面重建,用于动态语言包或模块加载等
+         * Recreate editor
+         * 
+         * @returns {editormd}  返回editormd的实例对象
+         */
+        
+        recreate : function() {
+            var _this            = this;
+            var editor           = this.editor;
+            var settings         = this.settings;
+            
+            this.codeMirror.remove();
+            
+            this.setCodeMirror();
+
+            if (!settings.readOnly) 
+            {
+                if (editor.find(".editormd-dialog").length > 0) {
+                    editor.find(".editormd-dialog").remove();
+                }
+                
+                if (settings.toolbar) 
+                {  
+                    this.getToolbarHandles();                  
+                    this.setToolbar();
+                }
+            }
+            
+            this.loadedDisplay(true);
+
+            return this;
+        },
+        
+        /**
+         * 高亮预览HTML的pre代码部分
+         * highlight of preview codes
+         * 
+         * @returns {editormd}             返回editormd的实例对象
+         */
+        
+        previewCodeHighlight : function() {    
+            var settings         = this.settings;
+            var previewContainer = this.previewContainer;
+            
+            if (settings.previewCodeHighlight) 
+            {
+                previewContainer.find("pre").addClass("prettyprint linenums");
+                
+                if (typeof prettyPrint !== "undefined")
+                {                    
+                    prettyPrint();
+                }
+            }
+
+            return this;
+        },
+        
+        /**
+         * 解析TeX(KaTeX)科学公式
+         * TeX(KaTeX) Renderer
+         * 
+         * @returns {editormd}             返回editormd的实例对象
+         */
+        
+        katexRender : function() {
+            
+            if (timer === null)
+            {
+                return this;
+            }
+            
+            this.previewContainer.find("." + editormd.classNames.tex).each(function(){
+                var tex  = $(this);
+                editormd.$katex.render(tex.text(), tex[0]);
+                
+                tex.find(".katex").css("font-size", "1.6em");
+            });   
+
+            return this;
+        },
+        
+        /**
+         * 解析和渲染流程图及时序图
+         * FlowChart and SequenceDiagram Renderer
+         * 
+         * @returns {editormd}             返回editormd的实例对象
+         */
+        
+        flowChartAndSequenceDiagramRender : function() {
+            var $this            = this;
+            var settings         = this.settings;
+            var previewContainer = this.previewContainer;
+            
+            if (editormd.isIE8) {
+                return this;
+            }
+
+            if (settings.flowChart) {
+                if (flowchartTimer === null) {
+                    return this;
+                }
+                
+                previewContainer.find(".flowchart").flowChart(); 
+            }
+
+            if (settings.sequenceDiagram) {
+                previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"});
+            }
+                    
+            var preview    = $this.preview;
+            var codeMirror = $this.codeMirror;
+            var codeView   = codeMirror.find(".CodeMirror-scroll");
+
+            var height    = codeView.height();
+            var scrollTop = codeView.scrollTop();                    
+            var percent   = (scrollTop / codeView[0].scrollHeight);
+            var tocHeight = 0;
+
+            preview.find(".markdown-toc-list").each(function(){
+                tocHeight += $(this).height();
+            });
+
+            var tocMenuHeight = preview.find(".editormd-toc-menu").height(); 
+            tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight;
+
+            if (scrollTop === 0) 
+            {
+                preview.scrollTop(0);
+            } 
+            else if (scrollTop + height >= codeView[0].scrollHeight - 16)
+            { 
+                preview.scrollTop(preview[0].scrollHeight);                        
+            } 
+            else
+            {                  
+                preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent);
+            }
+
+            return this;
+        },
+        
+        /**
+         * 注册键盘快捷键处理
+         * Register CodeMirror keyMaps (keyboard shortcuts).
+         * 
+         * @param   {Object}    keyMap      KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}}
+         * @returns {editormd}              return this
+         */
+        
+        registerKeyMaps : function(keyMap) {
+            
+            var _this           = this;
+            var cm              = this.cm;
+            var settings        = this.settings;
+            var toolbarHandlers = editormd.toolbarHandlers;
+            var disabledKeyMaps = settings.disabledKeyMaps;
+            
+            keyMap              = keyMap || null;
+            
+            if (keyMap)
+            {
+                for (var i in keyMap)
+                {
+                    if ($.inArray(i, disabledKeyMaps) < 0)
+                    {
+                        var map = {};
+                        map[i]  = keyMap[i];
+
+                        cm.addKeyMap(keyMap);
+                    }
+                }
+            }
+            else
+            {
+                for (var k in editormd.keyMaps)
+                {
+                    var _keyMap = editormd.keyMaps[k];
+                    var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this);
+                    
+                    if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0)
+                    {
+                        var _map = {};
+                        _map[k] = handle;
+
+                        cm.addKeyMap(_map);
+                    }
+                }
+                
+                $(window).keydown(function(event) {
+                    
+                    var keymaps = {
+                        "120" : "F9",
+                        "121" : "F10",
+                        "122" : "F11"
+                    };
+                    
+                    if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 )
+                    {
+                        switch (event.keyCode)
+                        {
+                            case 120:
+                                    $.proxy(toolbarHandlers["watch"], _this)();
+                                    return false;
+                                break;
+                                
+                            case 121:
+                                    $.proxy(toolbarHandlers["preview"], _this)();
+                                    return false;
+                                break;
+                                
+                            case 122:
+                                    $.proxy(toolbarHandlers["fullscreen"], _this)();                        
+                                    return false;
+                                break;
+                                
+                            default:
+                                break;
+                        }
+                    }
+                });
+            }
+
+            return this;
+        },
+        
+        /**
+         * 绑定同步滚动
+         * 
+         * @returns {editormd} return this
+         */
+        
+        bindScrollEvent : function() {
+            
+            var _this            = this;
+            var preview          = this.preview;
+            var settings         = this.settings;
+            var codeMirror       = this.codeMirror;
+            var mouseOrTouch     = editormd.mouseOrTouch;
+            
+            if (!settings.syncScrolling) {
+                return this;
+            }
+                
+            var cmBindScroll = function() {    
+                codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) {
+                    var height    = $(this).height();
+                    var scrollTop = $(this).scrollTop();                    
+                    var percent   = (scrollTop / $(this)[0].scrollHeight);
+                    
+                    var tocHeight = 0;
+                    
+                    preview.find(".markdown-toc-list").each(function(){
+                        tocHeight += $(this).height();
+                    });
+                    
+                    var tocMenuHeight = preview.find(".editormd-toc-menu").height();
+                    tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight;
+
+                    if (scrollTop === 0) 
+                    {
+                        preview.scrollTop(0);
+                    } 
+                    else if (scrollTop + height >= $(this)[0].scrollHeight - 16)
+                    { 
+                        preview.scrollTop(preview[0].scrollHeight);                        
+                    } 
+                    else
+                    {
+                        preview.scrollTop((preview[0].scrollHeight  + tocHeight + tocMenuHeight) * percent);
+                    }
+                    
+                    $.proxy(settings.onscroll, _this)(event);
+                });
+            };
+
+            var cmUnbindScroll = function() {
+                codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove"));
+            };
+
+            var previewBindScroll = function() {
+                
+                preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) {
+                    var height    = $(this).height();
+                    var scrollTop = $(this).scrollTop();         
+                    var percent   = (scrollTop / $(this)[0].scrollHeight);
+                    var codeView  = codeMirror.find(".CodeMirror-scroll");
+
+                    if(scrollTop === 0) 
+                    {
+                        codeView.scrollTop(0);
+                    }
+                    else if (scrollTop + height >= $(this)[0].scrollHeight)
+                    {
+                        codeView.scrollTop(codeView[0].scrollHeight);                        
+                    }
+                    else 
+                    {
+                        codeView.scrollTop(codeView[0].scrollHeight * percent);
+                    }
+                    
+                    $.proxy(settings.onpreviewscroll, _this)(event);
+                });
+
+            };
+
+            var previewUnbindScroll = function() {
+                preview.unbind(mouseOrTouch("scroll", "touchmove"));
+            }; 
+
+			codeMirror.bind({
+				mouseover  : cmBindScroll,
+				mouseout   : cmUnbindScroll,
+				touchstart : cmBindScroll,
+				touchend   : cmUnbindScroll
+			});
+            
+            if (settings.syncScrolling === "single") {
+                return this;
+            }
+            
+			preview.bind({
+				mouseover  : previewBindScroll,
+				mouseout   : previewUnbindScroll,
+				touchstart : previewBindScroll,
+				touchend   : previewUnbindScroll
+			});
+
+            return this;
+        },
+        
+        bindChangeEvent : function() {
+            
+            var _this            = this;
+            var cm               = this.cm;
+            var settings         = this.settings;
+            
+            if (!settings.syncScrolling) {
+                return this;
+            }
+            
+            cm.on("change", function(_cm, changeObj) {
+                
+                if (settings.watch)
+                {
+                    _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px");
+                }
+                
+                timer = setTimeout(function() {
+                    clearTimeout(timer);
+                    _this.save();
+                    timer = null;
+                }, settings.delay);
+            });
+
+            return this;
+        },
+        
+        /**
+         * 加载队列完成之后的显示处理
+         * Display handle of the module queues loaded after.
+         * 
+         * @param   {Boolean}   recreate   是否为重建编辑器
+         * @returns {editormd}             返回editormd的实例对象
+         */
+        
+        loadedDisplay : function(recreate) {
+            
+            recreate             = recreate || false;
+            
+            var _this            = this;
+            var editor           = this.editor;
+            var preview          = this.preview;
+            var settings         = this.settings;
+            
+            this.containerMask.hide();
+            
+            this.save();
+            
+            if (settings.watch) {
+                preview.show();
+            }
+            
+            editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto
+            
+            this.resize();
+            this.registerKeyMaps();
+            
+            $(window).resize(function(){
+                _this.resize();
+            });
+            
+            this.bindScrollEvent().bindChangeEvent();
+            
+            if (!recreate)
+            {
+                $.proxy(settings.onload, this)();
+            }
+            
+            this.state.loaded = true;
+
+            return this;
+        },
+        
+        /**
+         * 设置编辑器的宽度
+         * Set editor width
+         * 
+         * @param   {Number|String} width  编辑器宽度值
+         * @returns {editormd}             返回editormd的实例对象
+         */
+        
+        width : function(width) {
+                
+            this.editor.css("width", (typeof width === "number") ? width  + "px" : width);            
+            this.resize();
+            
+            return this;
+        },
+        
+        /**
+         * 设置编辑器的高度
+         * Set editor height
+         * 
+         * @param   {Number|String} height  编辑器高度值
+         * @returns {editormd}              返回editormd的实例对象
+         */
+        
+        height : function(height) {
+                
+            this.editor.css("height", (typeof height === "number")  ? height  + "px" : height);            
+            this.resize();
+            
+            return this;
+        },
+        
+        /**
+         * 调整编辑器的尺寸和布局
+         * Resize editor layout
+         * 
+         * @param   {Number|String} [width=null]  编辑器宽度值
+         * @param   {Number|String} [height=null] 编辑器高度值
+         * @returns {editormd}                    返回editormd的实例对象
+         */
+        
+        resize : function(width, height) {
+            
+            width  = width  || null;
+            height = height || null;
+            
+            var state      = this.state;
+            var editor     = this.editor;
+            var preview    = this.preview;
+            var toolbar    = this.toolbar;
+            var settings   = this.settings;
+            var codeMirror = this.codeMirror;
+            
+            if (width)
+            {
+                editor.css("width", (typeof width  === "number") ? width  + "px" : width);
+            }
+            
+            if (settings.autoHeight && !state.fullscreen && !state.preview)
+            {
+                editor.css("height", "auto");
+                codeMirror.css("height", "auto");
+            } 
+            else 
+            {
+                if (height) 
+                {
+                    editor.css("height", (typeof height === "number") ? height + "px" : height);
+                }
+                
+                if (state.fullscreen)
+                {
+                    editor.height($(window).height());
+                }
+
+                if (settings.toolbar && !settings.readOnly) 
+                {
+                    codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height());
+                } 
+                else
+                {
+                    codeMirror.css("margin-top", 0).height(editor.height());
+                }
+            }
+            
+            if(settings.watch) 
+            {
+                codeMirror.width(editor.width() / 2);
+                preview.width((!state.preview) ? editor.width() / 2 : editor.width());
+                
+                this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px");
+                
+                if (settings.toolbar && !settings.readOnly) 
+                {
+                    preview.css("top", toolbar.height() + 1);
+                } 
+                else 
+                {
+                    preview.css("top", 0);
+                }
+                
+                if (settings.autoHeight && !state.fullscreen && !state.preview)
+                {
+                    preview.height("");
+                }
+                else
+                {                
+                    var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height();
+                    
+                    preview.height(previewHeight);
+                }
+            } 
+            else 
+            {
+                codeMirror.width(editor.width());
+                preview.hide();
+            }
+            
+            if (state.loaded) 
+            {
+                $.proxy(settings.onresize, this)();
+            }
+
+            return this;
+        },
+        
+        /**
+         * 解析和保存Markdown代码
+         * Parse & Saving Markdown source code
+         * 
+         * @returns {editormd}     返回editormd的实例对象
+         */
+        
+        save : function() {
+            
+            if (timer === null)
+            {
+                return this;
+            }
+            
+            var _this            = this;
+            var state            = this.state;
+            var settings         = this.settings;
+            var cm               = this.cm;            
+            var cmValue          = cm.getValue();
+            var previewContainer = this.previewContainer;
+
+            if (settings.mode !== "gfm" && settings.mode !== "markdown") 
+            {
+                this.markdownTextarea.val(cmValue);
+                
+                return this;
+            }
+            
+            var marked          = editormd.$marked;
+            var markdownToC     = this.markdownToC = [];            
+            var rendererOptions = this.markedRendererOptions = {  
+                toc                  : settings.toc,
+                tocm                 : settings.tocm,
+                tocStartLevel        : settings.tocStartLevel,
+                pageBreak            : settings.pageBreak,
+                taskList             : settings.taskList,
+                emoji                : settings.emoji,
+                tex                  : settings.tex,
+                atLink               : settings.atLink,           // for @link
+                emailLink            : settings.emailLink,        // for mail address auto link
+                flowChart            : settings.flowChart,
+                sequenceDiagram      : settings.sequenceDiagram,
+                previewCodeHighlight : settings.previewCodeHighlight,
+            };
+            
+            var markedOptions = this.markedOptions = {
+                renderer    : editormd.markedRenderer(markdownToC, rendererOptions),
+                gfm         : true,
+                tables      : true,
+                breaks      : true,
+                pedantic    : false,
+                sanitize    : (settings.htmlDecode) ? false : true,  // 关闭忽略HTML标签,即开启识别HTML标签,默认为false
+                smartLists  : true,
+                smartypants : true
+            };
+            
+            marked.setOptions(markedOptions);
+                    
+            var newMarkdownDoc = editormd.$marked(cmValue, markedOptions);
+            
+            //console.info("cmValue", cmValue, newMarkdownDoc);
+            
+            newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode);
+            
+            //console.error("cmValue", cmValue, newMarkdownDoc);
+            
+            this.markdownTextarea.text(cmValue);
+            
+            cm.save();
+            
+            if (settings.saveHTMLToTextarea) 
+            {
+                this.htmlTextarea.text(newMarkdownDoc);
+            }
+            
+            if(settings.watch || (!settings.watch && state.preview))
+            {
+                previewContainer.html(newMarkdownDoc);
+
+                this.previewCodeHighlight();
+                
+                if (settings.toc) 
+                {
+                    var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer);
+                    var tocMenu      = tocContainer.find("." + this.classPrefix + "toc-menu");
+                    
+                    tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false");
+                    
+                    if (settings.tocContainer !== "" && tocMenu.length > 0)
+                    {
+                        tocMenu.remove();
+                    }
+                    
+                    editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel);
+            
+                    if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0)
+                    {
+                        editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle);
+                    }
+            
+                    if (settings.tocContainer !== "")
+                    {
+                        previewContainer.find(".markdown-toc").css("border", "none");
+                    }
+                }
+                
+                if (settings.tex)
+                {
+                    if (!editormd.kaTeXLoaded && settings.autoLoadModules) 
+                    {
+                        editormd.loadKaTeX(function() {
+                            editormd.$katex = katex;
+                            editormd.kaTeXLoaded = true;
+                            _this.katexRender();
+                        });
+                    } 
+                    else 
+                    {
+                        editormd.$katex = katex;
+                        this.katexRender();
+                    }
+                }                
+                
+                if (settings.flowChart || settings.sequenceDiagram)
+                {
+                    flowchartTimer = setTimeout(function(){
+                        clearTimeout(flowchartTimer);
+                        _this.flowChartAndSequenceDiagramRender();
+                        flowchartTimer = null;
+                    }, 10);
+                }
+
+                if (state.loaded) 
+                {
+                    $.proxy(settings.onchange, this)();
+                }
+            }
+
+            return this;
+        },
+        
+        /**
+         * 聚焦光标位置
+         * Focusing the cursor position
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        focus : function() {
+            this.cm.focus();
+
+            return this;
+        },
+        
+        /**
+         * 设置光标的位置
+         * Set cursor position
+         * 
+         * @param   {Object}    cursor 要设置的光标位置键值对象,例:{line:1, ch:0}
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        setCursor : function(cursor) {
+            this.cm.setCursor(cursor);
+
+            return this;
+        },
+        
+        /**
+         * 获取当前光标的位置
+         * Get the current position of the cursor
+         * 
+         * @returns {Cursor}         返回一个光标Cursor对象
+         */
+        
+        getCursor : function() {
+            return this.cm.getCursor();
+        },
+        
+        /**
+         * 设置光标选中的范围
+         * Set cursor selected ranges
+         * 
+         * @param   {Object}    from   开始位置的光标键值对象,例:{line:1, ch:0}
+         * @param   {Object}    to     结束位置的光标键值对象,例:{line:1, ch:0}
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        setSelection : function(from, to) {
+        
+            this.cm.setSelection(from, to);
+        
+            return this;
+        },
+        
+        /**
+         * 获取光标选中的文本
+         * Get the texts from cursor selected
+         * 
+         * @returns {String}         返回选中文本的字符串形式
+         */
+        
+        getSelection : function() {
+            return this.cm.getSelection();
+        },
+        
+        /**
+         * 设置光标选中的文本范围
+         * Set the cursor selection ranges
+         * 
+         * @param   {Array}    ranges  cursor selection ranges array
+         * @returns {Array}            return this
+         */
+        
+        setSelections : function(ranges) {
+            this.cm.setSelections(ranges);
+            
+            return this;
+        },
+        
+        /**
+         * 获取光标选中的文本范围
+         * Get the cursor selection ranges
+         * 
+         * @returns {Array}         return selection ranges array
+         */
+        
+        getSelections : function() {
+            return this.cm.getSelections();
+        },
+        
+        /**
+         * 替换当前光标选中的文本或在当前光标处插入新字符
+         * Replace the text at the current cursor selected or insert a new character at the current cursor position
+         * 
+         * @param   {String}    value  要插入的字符值
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        replaceSelection : function(value) {
+            this.cm.replaceSelection(value);
+
+            return this;
+        },
+        
+        /**
+         * 在当前光标处插入新字符
+         * Insert a new character at the current cursor position
+         *
+         * 同replaceSelection()方法
+         * With the replaceSelection() method
+         * 
+         * @param   {String}    value  要插入的字符值
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        insertValue : function(value) {
+            this.replaceSelection(value);
+
+            return this;
+        },
+        
+        /**
+         * 追加markdown
+         * append Markdown to editor
+         * 
+         * @param   {String}    md     要追加的markdown源文档
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        appendMarkdown : function(md) {
+            var settings = this.settings;
+            var cm       = this.cm;
+            
+            cm.setValue(cm.getValue() + md);
+            
+            return this;
+        },
+        
+        /**
+         * 设置和传入编辑器的markdown源文档
+         * Set Markdown source document
+         * 
+         * @param   {String}    md     要传入的markdown源文档
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        setMarkdown : function(md) {
+            this.cm.setValue(md || this.settings.markdown);
+            
+            return this;
+        },
+        
+        /**
+         * 获取编辑器的markdown源文档
+         * Set Editor.md markdown/CodeMirror value
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        getMarkdown : function() {
+            return this.cm.getValue();
+        },
+        
+        /**
+         * 获取编辑器的源文档
+         * Get CodeMirror value
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        getValue : function() {
+            return this.cm.getValue();
+        },
+        
+        /**
+         * 设置编辑器的源文档
+         * Set CodeMirror value
+         * 
+         * @param   {String}     value   set code/value/string/text
+         * @returns {editormd}           返回editormd的实例对象
+         */
+        
+        setValue : function(value) {
+            this.cm.setValue(value);
+            
+            return this;
+        },
+        
+        /**
+         * 清空编辑器
+         * Empty CodeMirror editor container
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        clear : function() {
+            this.cm.setValue("");
+            
+            return this;
+        },
+        
+        /**
+         * 获取解析后存放在Textarea的HTML源码
+         * Get parsed html code from Textarea
+         * 
+         * @returns {String}               返回HTML源码
+         */
+        
+        getHTML : function() {
+            if (!this.settings.saveHTMLToTextarea)
+            {
+                alert("Error: settings.saveHTMLToTextarea == false");
+
+                return false;
+            }
+            
+            return this.htmlTextarea.val();
+        },
+        
+        /**
+         * getHTML()的别名
+         * getHTML (alias)
+         * 
+         * @returns {String}           Return html code 返回HTML源码
+         */
+        
+        getTextareaSavedHTML : function() {
+            return this.getHTML();
+        },
+        
+        /**
+         * 获取预览窗口的HTML源码
+         * Get html from preview container
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        getPreviewedHTML : function() {
+            if (!this.settings.watch)
+            {
+                alert("Error: settings.watch == false");
+
+                return false;
+            }
+            
+            return this.previewContainer.html();
+        },
+        
+        /**
+         * 开启实时预览
+         * Enable real-time watching
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        watch : function(callback) {     
+            var settings        = this.settings;
+            
+            if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0)
+            {
+                return this;
+            }
+            
+            this.state.watching = settings.watch = true;
+            this.preview.show();
+            
+            if (this.toolbar)
+            {
+                var watchIcon   = settings.toolbarIconsClass.watch;
+                var unWatchIcon = settings.toolbarIconsClass.unwatch;
+                
+                var icon        = this.toolbar.find(".fa[name=watch]");
+                icon.parent().attr("title", settings.lang.toolbar.watch);
+                icon.removeClass(unWatchIcon).addClass(watchIcon);
+            }
+            
+            this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); 
+            
+            timer = 0;
+            
+            this.save().resize();
+            
+            if (!settings.onwatch)
+            {
+                settings.onwatch = callback || function() {};
+            }
+            
+            $.proxy(settings.onwatch, this)();
+            
+            return this;
+        },
+        
+        /**
+         * 关闭实时预览
+         * Disable real-time watching
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        unwatch : function(callback) {
+            var settings        = this.settings;
+            this.state.watching = settings.watch = false;
+            this.preview.hide();
+            
+            if (this.toolbar) 
+            {
+                var watchIcon   = settings.toolbarIconsClass.watch;
+                var unWatchIcon = settings.toolbarIconsClass.unwatch;
+                
+                var icon    = this.toolbar.find(".fa[name=watch]");
+                icon.parent().attr("title", settings.lang.toolbar.unwatch);
+                icon.removeClass(watchIcon).addClass(unWatchIcon);
+            }
+            
+            this.codeMirror.css("border-right", "none").width(this.editor.width());
+            
+            this.resize();
+            
+            if (!settings.onunwatch)
+            {
+                settings.onunwatch = callback || function() {};
+            }
+            
+            $.proxy(settings.onunwatch, this)();
+            
+            return this;
+        },
+        
+        /**
+         * 显示编辑器
+         * Show editor
+         * 
+         * @param   {Function} [callback=function()] 回调函数
+         * @returns {editormd}                       返回editormd的实例对象
+         */
+        
+        show : function(callback) {
+            callback  = callback || function() {};
+            
+            var _this = this;
+            this.editor.show(0, function() {
+                $.proxy(callback, _this)();
+            });
+            
+            return this;
+        },
+        
+        /**
+         * 隐藏编辑器
+         * Hide editor
+         * 
+         * @param   {Function} [callback=function()] 回调函数
+         * @returns {editormd}                       返回editormd的实例对象
+         */
+        
+        hide : function(callback) {
+            callback  = callback || function() {};
+            
+            var _this = this;
+            this.editor.hide(0, function() {
+                $.proxy(callback, _this)();
+            });
+            
+            return this;
+        },
+        
+        /**
+         * 隐藏编辑器部分,只预览HTML
+         * Enter preview html state
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        previewing : function() {
+            
+            var _this            = this;
+            var editor           = this.editor;
+            var preview          = this.preview;
+            var toolbar          = this.toolbar;
+            var settings         = this.settings;
+            var codeMirror       = this.codeMirror;
+            var previewContainer = this.previewContainer;
+            
+            if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) {
+                return this;
+            }
+            
+            if (settings.toolbar && toolbar) {
+                toolbar.toggle();
+                toolbar.find(".fa[name=preview]").toggleClass("active");
+            }
+            
+            codeMirror.toggle();
+            
+            var escHandle = function(event) {
+                if (event.shiftKey && event.keyCode === 27) {
+                    _this.previewed();
+                }
+            };
+
+            if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden")
+            {
+                this.state.preview = true;
+
+                if (this.state.fullscreen) {
+                    preview.css("background", "#fff");
+                }
+                
+                editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){
+                    _this.previewed();
+                });
+            
+                if (!settings.watch)
+                {
+                    this.save();
+                } 
+                else 
+                {
+                    previewContainer.css("padding", "");
+                }
+                
+                previewContainer.addClass(this.classPrefix + "preview-active");
+
+                preview.show().css({
+                    position  : "",
+                    top       : 0,
+                    width     : editor.width(),
+                    height    : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height()
+                });
+                
+                if (this.state.loaded)
+                {
+                    $.proxy(settings.onpreviewing, this)();
+                }
+
+                $(window).bind("keyup", escHandle);
+            } 
+            else 
+            {
+                $(window).unbind("keyup", escHandle);
+                this.previewed();
+            }
+        },
+        
+        /**
+         * 显示编辑器部分,退出只预览HTML
+         * Exit preview html state
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        previewed : function() {
+            
+            var editor           = this.editor;
+            var preview          = this.preview;
+            var toolbar          = this.toolbar;
+            var settings         = this.settings;
+            var previewContainer = this.previewContainer;
+            var previewCloseBtn  = editor.find("." + this.classPrefix + "preview-close-btn");
+
+            this.state.preview   = false;
+            
+            this.codeMirror.show();
+            
+            if (settings.toolbar) {
+                toolbar.show();
+            }
+            
+            preview[(settings.watch) ? "show" : "hide"]();
+            
+            previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend"));
+                
+            previewContainer.removeClass(this.classPrefix + "preview-active");
+                
+            if (settings.watch)
+            {
+                previewContainer.css("padding", "20px");
+            }
+            
+            preview.css({ 
+                background : null,
+                position   : "absolute",
+                width      : editor.width() / 2,
+                height     : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(),
+                top        : (settings.toolbar)    ? toolbar.height() : 0
+            });
+
+            if (this.state.loaded)
+            {
+                $.proxy(settings.onpreviewed, this)();
+            }
+            
+            return this;
+        },
+        
+        /**
+         * 编辑器全屏显示
+         * Fullscreen show
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        fullscreen : function() {
+            
+            var _this            = this;
+            var state            = this.state;
+            var editor           = this.editor;
+            var preview          = this.preview;
+            var toolbar          = this.toolbar;
+            var settings         = this.settings;
+            var fullscreenClass  = this.classPrefix + "fullscreen";
+            
+            if (toolbar) {
+                toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); 
+            }
+            
+            var escHandle = function(event) {
+                if (!event.shiftKey && event.keyCode === 27) 
+                {
+                    if (state.fullscreen)
+                    {
+                        _this.fullscreenExit();
+                    }
+                }
+            };
+
+            if (!editor.hasClass(fullscreenClass)) 
+            {
+                state.fullscreen = true;
+
+                $("html,body").css("overflow", "hidden");
+                
+                editor.css({
+                    width    : $(window).width(),
+                    height   : $(window).height()
+                }).addClass(fullscreenClass);
+
+                this.resize();
+    
+                $.proxy(settings.onfullscreen, this)();
+
+                $(window).bind("keyup", escHandle);
+            }
+            else
+            {           
+                $(window).unbind("keyup", escHandle); 
+                this.fullscreenExit();
+            }
+
+            return this;
+        },
+        
+        /**
+         * 编辑器退出全屏显示
+         * Exit fullscreen state
+         * 
+         * @returns {editormd}         返回editormd的实例对象
+         */
+        
+        fullscreenExit : function() {
+            
+            var editor            = this.editor;
+            var settings          = this.settings;
+            var toolbar           = this.toolbar;
+            var fullscreenClass   = this.classPrefix + "fullscreen";  
+            
+            this.state.fullscreen = false;
+            
+            if (toolbar) {
+                toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); 
+            }
+
+            $("html,body").css("overflow", "");
+
+            editor.css({
+                width    : editor.data("oldWidth"),
+                height   : editor.data("oldHeight")
+            }).removeClass(fullscreenClass);
+
+            this.resize();
+            
+            $.proxy(settings.onfullscreenExit, this)();
+
+            return this;
+        },
+        
+        /**
+         * 加载并执行插件
+         * Load and execute the plugin
+         * 
+         * @param   {String}     name    plugin name / function name
+         * @param   {String}     path    plugin load path
+         * @returns {editormd}           返回editormd的实例对象
+         */
+        
+        executePlugin : function(name, path) {
+            
+            var _this    = this;
+            var cm       = this.cm;
+            var settings = this.settings;
+            
+            path = settings.pluginPath + path;
+            
+            if (typeof define === "function") 
+            {            
+                if (typeof this[name] === "undefined")
+                {
+                    alert("Error: " + name + " plugin is not found, you are not load this plugin.");
+                    
+                    return this;
+                }
+                
+                this[name](cm);
+                
+                return this;
+            }
+            
+            if ($.inArray(path, editormd.loadFiles.plugin) < 0)
+            {
+                editormd.loadPlugin(path, function() {
+                    editormd.loadPlugins[name] = _this[name];
+                    _this[name](cm);
+                });
+            }
+            else
+            {
+                $.proxy(editormd.loadPlugins[name], this)(cm);
+            }
+            
+            return this;
+        },
+                
+        /**
+         * 搜索替换
+         * Search & replace
+         * 
+         * @param   {String}     command    CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll"
+         * @returns {editormd}              return this
+         */
+        
+        search : function(command) {
+            var settings = this.settings;
+            
+            if (!settings.searchReplace)
+            {
+                alert("Error: settings.searchReplace == false");
+                return this;
+            }
+            
+            if (!settings.readOnly)
+            {
+                this.cm.execCommand(command || "find");
+            }
+            
+            return this;
+        },
+        
+        searchReplace : function() {            
+            this.search("replace");
+            
+            return this;
+        },
+        
+        searchReplaceAll : function() {          
+            this.search("replaceAll");
+            
+            return this;
+        }
+    };
+    
+    editormd.fn.init.prototype = editormd.fn; 
+   
+    /**
+     * 锁屏
+     * lock screen when dialog opening
+     * 
+     * @returns {void}
+     */
+
+    editormd.dialogLockScreen = function() {
+        var settings = this.settings || {dialogLockScreen : true};
+        
+        if (settings.dialogLockScreen) 
+        {            
+            $("html,body").css("overflow", "hidden");
+            this.resize();
+        }
+    };
+   
+    /**
+     * 显示透明背景层
+     * Display mask layer when dialog opening
+     * 
+     * @param   {Object}     dialog    dialog jQuery object
+     * @returns {void}
+     */
+    
+    editormd.dialogShowMask = function(dialog) {
+        var editor   = this.editor;
+        var settings = this.settings || {dialogShowMask : true};
+        
+        dialog.css({
+            top  : ($(window).height() - dialog.height()) / 2 + "px",
+            left : ($(window).width()  - dialog.width())  / 2 + "px"
+        });
+
+        if (settings.dialogShowMask) {
+            editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show();
+        }
+    };
+
+    editormd.toolbarHandlers = {
+        undo : function() {
+            this.cm.undo();
+        },
+        
+        redo : function() {
+            this.cm.redo();
+        },
+        
+        bold : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("**" + selection + "**");
+
+            if(selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 2);
+            }
+        },
+        
+        del : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("~~" + selection + "~~");
+
+            if(selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 2);
+            }
+        },
+
+        italic : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("*" + selection + "*");
+
+            if(selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 1);
+            }
+        },
+
+        quote : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("> " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 2);
+            }
+            else
+            {
+                cm.replaceSelection("> " + selection);
+            }
+
+            //cm.replaceSelection("> " + selection);
+            //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2);
+        },
+        
+        ucfirst : function() {
+            var cm         = this.cm;
+            var selection  = cm.getSelection();
+            var selections = cm.listSelections();
+
+            cm.replaceSelection(editormd.firstUpperCase(selection));
+            cm.setSelections(selections);
+        },
+        
+        ucwords : function() {
+            var cm         = this.cm;
+            var selection  = cm.getSelection();
+            var selections = cm.listSelections();
+
+            cm.replaceSelection(editormd.wordsFirstUpperCase(selection));
+            cm.setSelections(selections);
+        },
+        
+        uppercase : function() {
+            var cm         = this.cm;
+            var selection  = cm.getSelection();
+            var selections = cm.listSelections();
+
+            cm.replaceSelection(selection.toUpperCase());
+            cm.setSelections(selections);
+        },
+        
+        lowercase : function() {
+            var cm         = this.cm;
+            var cursor     = cm.getCursor();
+            var selection  = cm.getSelection();
+            var selections = cm.listSelections();
+            
+            cm.replaceSelection(selection.toLowerCase());
+            cm.setSelections(selections);
+        },
+
+        h1 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("# " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 2);
+            }
+            else
+            {
+                cm.replaceSelection("# " + selection);
+            }
+        },
+
+        h2 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("## " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 3);
+            }
+            else
+            {
+                cm.replaceSelection("## " + selection);
+            }
+        },
+
+        h3 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("### " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 4);
+            }
+            else
+            {
+                cm.replaceSelection("### " + selection);
+            }
+        },
+
+        h4 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("#### " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 5);
+            }
+            else
+            {
+                cm.replaceSelection("#### " + selection);
+            }
+        },
+
+        h5 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("##### " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 6);
+            }
+            else
+            {
+                cm.replaceSelection("##### " + selection);
+            }
+        },
+
+        h6 : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (cursor.ch !== 0)
+            {
+                cm.setCursor(cursor.line, 0);
+                cm.replaceSelection("###### " + selection);
+                cm.setCursor(cursor.line, cursor.ch + 7);
+            }
+            else
+            {
+                cm.replaceSelection("###### " + selection);
+            }
+        },
+
+        "list-ul" : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if (selection === "") 
+            {
+                cm.replaceSelection("- " + selection);
+            } 
+            else 
+            {
+                var selectionText = selection.split("\n");
+
+                for (var i = 0, len = selectionText.length; i < len; i++) 
+                {
+                    selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i];
+                }
+
+                cm.replaceSelection(selectionText.join("\n"));
+            }
+        },
+
+        "list-ol" : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            if(selection === "") 
+            {
+                cm.replaceSelection("1. " + selection);
+            }
+            else
+            {
+                var selectionText = selection.split("\n");
+
+                for (var i = 0, len = selectionText.length; i < len; i++) 
+                {
+                    selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i];
+                }
+
+                cm.replaceSelection(selectionText.join("\n"));
+            }
+        },
+
+        hr : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n");
+        },
+
+        tex : function() {
+            if (!this.settings.tex)
+            {
+                alert("settings.tex === false");
+                return this;
+            }
+            
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("$$" + selection + "$$");
+
+            if(selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 2);
+            }
+        },
+
+        link : function() {
+            this.executePlugin("linkDialog", "link-dialog/link-dialog");
+        },
+
+        "reference-link" : function() {
+            this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog");
+        },
+
+        pagebreak : function() {
+            if (!this.settings.pageBreak)
+            {
+                alert("settings.pageBreak === false");
+                return this;
+            }
+            
+            var cm        = this.cm;
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("\r\n[========]\r\n");
+        },
+
+        image : function() {
+            this.executePlugin("imageDialog", "image-dialog/image-dialog");
+        },
+        
+        code : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+
+            cm.replaceSelection("`" + selection + "`");
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 1);
+            }
+        },
+
+        "code-block" : function() {
+            this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog");            
+        },
+
+        "preformatted-text" : function() {
+            this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog");
+        },
+        
+        table : function() {
+            this.executePlugin("tableDialog", "table-dialog/table-dialog");         
+        },
+        
+        datetime : function() {
+            var cm        = this.cm;
+            var selection = cm.getSelection();
+            var date      = new Date();
+            var langName  = this.settings.lang.name;
+            var datefmt   = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day");
+
+            cm.replaceSelection(datefmt);
+        },
+        
+        emoji : function() {
+            this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog");
+        },
+                
+        "html-entities" : function() {
+            this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog");
+        },
+                
+        "goto-line" : function() {
+            this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog");
+        },
+
+        watch : function() {    
+            this[this.settings.watch ? "unwatch" : "watch"]();
+        },
+
+        preview : function() {
+            this.previewing();
+        },
+
+        fullscreen : function() {
+            this.fullscreen();
+        },
+
+        clear : function() {
+            this.clear();
+        },
+        
+        search : function() {
+            this.search();
+        },
+
+        help : function() {
+            this.executePlugin("helpDialog", "help-dialog/help-dialog");
+        },
+
+        info : function() {
+            this.showInfoDialog();
+        }
+    };
+    
+    editormd.keyMaps = {
+        "Ctrl-1"       : "h1",
+        "Ctrl-2"       : "h2",
+        "Ctrl-3"       : "h3",
+        "Ctrl-4"       : "h4",
+        "Ctrl-5"       : "h5",
+        "Ctrl-6"       : "h6",
+        "Ctrl-B"       : "bold",  // if this is string ==  editormd.toolbarHandlers.xxxx
+        "Ctrl-D"       : "datetime",
+        
+        "Ctrl-E"       : function() { // emoji
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+            
+            if (!this.settings.emoji)
+            {
+                alert("Error: settings.emoji == false");
+                return ;
+            }
+
+            cm.replaceSelection(":" + selection + ":");
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 1);
+            }
+        },
+        "Ctrl-Alt-G"   : "goto-line",
+        "Ctrl-H"       : "hr",
+        "Ctrl-I"       : "italic",
+        "Ctrl-K"       : "code",
+        
+        "Ctrl-L"        : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+            
+            var title = (selection === "") ? "" : " \""+selection+"\"";
+
+            cm.replaceSelection("[" + selection + "]("+title+")");
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 1);
+            }
+        },
+        "Ctrl-U"         : "list-ul",
+        
+        "Shift-Ctrl-A"   : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+            
+            if (!this.settings.atLink)
+            {
+                alert("Error: settings.atLink == false");
+                return ;
+            }
+
+            cm.replaceSelection("@" + selection);
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 1);
+            }
+        },
+        
+        "Shift-Ctrl-C"     : "code",
+        "Shift-Ctrl-Q"     : "quote",
+        "Shift-Ctrl-S"     : "del",
+        "Shift-Ctrl-K"     : "tex",  // KaTeX
+        
+        "Shift-Alt-C"      : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+            
+            cm.replaceSelection(["```", selection, "```"].join("\n"));
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 3);
+            } 
+        },
+        
+        "Shift-Ctrl-Alt-C" : "code-block",
+        "Shift-Ctrl-H"     : "html-entities",
+        "Shift-Alt-H"      : "help",
+        "Shift-Ctrl-E"     : "emoji",
+        "Shift-Ctrl-U"     : "uppercase",
+        "Shift-Alt-U"      : "ucwords",
+        "Shift-Ctrl-Alt-U" : "ucfirst",
+        "Shift-Alt-L"      : "lowercase",
+        
+        "Shift-Ctrl-I"     : function() {
+            var cm        = this.cm;
+            var cursor    = cm.getCursor();
+            var selection = cm.getSelection();
+            
+            var title = (selection === "") ? "" : " \""+selection+"\"";
+
+            cm.replaceSelection("![" + selection + "]("+title+")");
+
+            if (selection === "") {
+                cm.setCursor(cursor.line, cursor.ch + 4);
+            }
+        },
+        
+        "Shift-Ctrl-Alt-I" : "image",
+        "Shift-Ctrl-L"     : "link",
+        "Shift-Ctrl-O"     : "list-ol",
+        "Shift-Ctrl-P"     : "preformatted-text",
+        "Shift-Ctrl-T"     : "table",
+        "Shift-Alt-P"      : "pagebreak",
+        "F9"               : "watch",
+        "F10"              : "preview",
+        "F11"              : "fullscreen",
+    };
+    
+    /**
+     * 清除字符串两边的空格
+     * Clear the space of strings both sides.
+     * 
+     * @param   {String}    str            string
+     * @returns {String}                   trimed string    
+     */
+    
+    var trim = function(str) {
+        return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim();
+    };
+    
+    editormd.trim = trim;
+    
+    /**
+     * 所有单词首字母大写
+     * Words first to uppercase
+     * 
+     * @param   {String}    str            string
+     * @returns {String}                   string
+     */
+    
+    var ucwords = function (str) {
+        return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) {  
+            return $1.toUpperCase();
+        });
+    };
+    
+    editormd.ucwords = editormd.wordsFirstUpperCase = ucwords;
+    
+    /**
+     * 字符串首字母大写
+     * Only string first char to uppercase
+     * 
+     * @param   {String}    str            string
+     * @returns {String}                   string
+     */
+    
+    var firstUpperCase = function(str) {        
+        return str.toLowerCase().replace(/\b(\w)/, function($1){
+            return $1.toUpperCase();
+        });
+    };
+    
+    var ucfirst = firstUpperCase;
+    
+    editormd.firstUpperCase = editormd.ucfirst = firstUpperCase;
+    
+    editormd.urls = {
+        atLinkBase : "https://github.com/"
+    };
+    
+    editormd.regexs = {
+        atLink        : /@(\w+)/g,
+        email         : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g,
+        emailLink     : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g,
+        emoji         : /:([\w\+-]+):/g,
+        emojiDatetime : /(\d{2}:\d{2}:\d{2})/g,
+        twemoji       : /:(tw-([\w]+)-?(\w+)?):/g,
+        fontAwesome   : /:(fa-([\w]+)(-(\w+)){0,}):/g,
+        editormdLogo  : /:(editormd-logo-?(\w+)?):/g,
+        pageBreak     : /^\[[=]{8,}\]$/
+    };
+
+    // Emoji graphics files url path
+    editormd.emoji     = {
+        path  : "http://www.emoji-cheat-sheet.com/graphics/emojis/",
+        ext   : ".png"
+    };
+
+    // Twitter Emoji (Twemoji)  graphics files url path    
+    editormd.twemoji = {
+        path : "http://twemoji.maxcdn.com/36x36/",
+        ext  : ".png"
+    };
+
+    /**
+     * 自定义marked的解析器
+     * Custom Marked renderer rules
+     * 
+     * @param   {Array}    markdownToC     传入用于接收TOC的数组
+     * @returns {Renderer} markedRenderer  返回marked的Renderer自定义对象
+     */
+
+    editormd.markedRenderer = function(markdownToC, options) {
+        var defaults = {
+            toc                  : true,           // Table of contents
+            tocm                 : false,
+            tocStartLevel        : 1,              // Said from H1 to create ToC  
+            pageBreak            : true,
+            atLink               : true,           // for @link
+            emailLink            : true,           // for mail address auto link
+            taskList             : false,          // Enable Github Flavored Markdown task lists
+            emoji                : false,          // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis.
+            tex                  : false,          // TeX(LaTeX), based on KaTeX
+            flowChart            : false,          // flowChart.js only support IE9+
+            sequenceDiagram      : false,          // sequenceDiagram.js only support IE9+
+        };
+        
+        var settings        = $.extend(defaults, options || {});    
+        var marked          = editormd.$marked;
+        var markedRenderer  = new marked.Renderer();
+        markdownToC         = markdownToC || [];        
+            
+        var regexs          = editormd.regexs;
+        var atLinkReg       = regexs.atLink;
+        var emojiReg        = regexs.emoji;
+        var emailReg        = regexs.email;
+        var emailLinkReg    = regexs.emailLink;
+        var twemojiReg      = regexs.twemoji;
+        var faIconReg       = regexs.fontAwesome;
+        var editormdLogoReg = regexs.editormdLogo;
+        var pageBreakReg    = regexs.pageBreak;
+
+        markedRenderer.emoji = function(text) {
+            
+            text = text.replace(editormd.regexs.emojiDatetime, function($1) {           
+                return $1.replace(/:/g, "&#58;");
+            });
+            
+            var matchs = text.match(emojiReg);
+
+            if (!matchs || !settings.emoji) {
+                return text;
+            }
+
+            for (var i = 0, len = matchs.length; i < len; i++)
+            {            
+                if (matchs[i] === ":+1:") {
+                    matchs[i] = ":\\+1:";
+                }
+
+                text = text.replace(new RegExp(matchs[i]), function($1, $2){
+                    var faMatchs = $1.match(faIconReg);
+                    var name     = $1.replace(/:/g, "");
+
+                    if (faMatchs)
+                    {                        
+                        for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++)
+                        {
+                            var faName = faMatchs[fa].replace(/:/g, "");
+                            
+                            return "<i class=\"fa " + faName + " fa-emoji\" title=\"" + faName.replace("fa-", "") + "\"></i>";
+                        }
+                    }
+                    else
+                    {
+                        var emdlogoMathcs = $1.match(editormdLogoReg);
+                        var twemojiMatchs = $1.match(twemojiReg);
+
+                        if (emdlogoMathcs)                                        
+                        {                            
+                            for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++)
+                            {
+                                var logoName = emdlogoMathcs[x].replace(/:/g, "");
+                                return "<i class=\"" + logoName + "\" title=\"Editor.md logo (" + logoName + ")\"></i>";
+                            }
+                        }
+                        else if (twemojiMatchs) 
+                        {
+                            for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++)
+                            {
+                                var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", "");
+                                return "<img src=\"" + editormd.twemoji.path + twe + editormd.twemoji.ext + "\" title=\"twemoji-" + twe + "\" alt=\"twemoji-" + twe + "\" class=\"emoji twemoji\" />";
+                            }
+                        }
+                        else
+                        {
+                            var src = (name === "+1") ? "plus1" : name;
+                            src     = (src === "black_large_square") ? "black_square" : src;
+                            src     = (src === "moon") ? "waxing_gibbous_moon" : src;
+
+                            return "<img src=\"" + editormd.emoji.path + src + editormd.emoji.ext + "\" class=\"emoji\" title=\"&#58;" + name + "&#58;\" alt=\"&#58;" + name + "&#58;\" />";
+                        }
+                    }
+                });
+            }
+
+            return text;
+        };
+
+        markedRenderer.atLink = function(text) {
+
+            if (atLinkReg.test(text))
+            { 
+                if (settings.atLink) 
+                {
+                    text = text.replace(emailReg, function($1, $2, $3, $4) {
+                        return $1.replace(/@/g, "_#_&#64;_#_");
+                    });
+
+                    text = text.replace(atLinkReg, function($1, $2) {
+                        return "<a href=\"" + editormd.urls.atLinkBase + "" + $2 + "\" title=\"&#64;" + $2 + "\" class=\"at-link\">" + $1 + "</a>";
+                    }).replace(/_#_&#64;_#_/g, "@");
+                }
+                
+                if (settings.emailLink)
+                {
+                    text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) {
+                        return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? "<a href=\"mailto:" + $1 + "\">"+$1+"</a>" : $1;
+                    });
+                }
+
+                return text;
+            }
+
+            return text;
+        };
+                
+        markedRenderer.link = function (href, title, text) {
+
+            if (this.options.sanitize) {
+                try {
+                    var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase();
+                } catch(e) {
+                    return "";
+                }
+
+                if (prot.indexOf("javascript:") === 0) {
+                    return "";
+                }
+            }
+
+            var out = "<a href=\"" + href + "\"";
+            
+            if (atLinkReg.test(title) || atLinkReg.test(text))
+            {
+                if (title)
+                {
+                    out += " title=\"" + title.replace(/@/g, "&#64;");
+                }
+                
+                return out + "\">" + text.replace(/@/g, "&#64;") + "</a>";
+            }
+
+            if (title) {
+                out += " title=\"" + title + "\"";
+            }
+
+            out += ">" + text + "</a>";
+
+            return out;
+        };
+        
+        markedRenderer.heading = function(text, level, raw) {
+                    
+            var linkText       = text;
+            var hasLinkReg     = /\s*\<a\s*href\=\"(.*)\"\s*([^\>]*)\>(.*)\<\/a\>\s*/;
+            var getLinkTextReg = /\s*\<a\s*([^\>]+)\>([^\>]*)\<\/a\>\s*/g;
+
+            if (hasLinkReg.test(text)) 
+            {
+                var tempText = [];
+                text         = text.split(/\<a\s*([^\>]+)\>([^\>]*)\<\/a\>/);
+
+                for (var i = 0, len = text.length; i < len; i++)
+                {
+                    tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, ""));
+                }
+
+                text = tempText.join(" ");
+            }
+            
+            text = trim(text);
+            
+            var escapedText    = text.toLowerCase().replace(/[^\w]+/g, "-");
+            var toc = {
+                text  : text,
+                level : level,
+                slug  : escapedText
+            };
+            
+            var isChinese = /^[\u4e00-\u9fa5]+$/.test(text);
+            var id        = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-");
+
+            markdownToC.push(toc);
+            
+            var headingHTML = "<h" + level + " id=\"h"+ level + "-" + this.options.headerPrefix + id +"\">";
+            
+            headingHTML    += "<a name=\"" + text + "\" class=\"reference-link\"></a>";
+            headingHTML    += "<span class=\"header-link octicon octicon-link\"></span>";
+            headingHTML    += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text));
+            headingHTML    += "</h" + level + ">";
+
+            return headingHTML;
+        };
+        
+        markedRenderer.pageBreak = function(text) {
+            if (pageBreakReg.test(text) && settings.pageBreak)
+            {
+                text = "<hr style=\"page-break-after:always;\" class=\"page-break editormd-page-break\" />";
+            }
+            
+            return text;
+        };
+
+        markedRenderer.paragraph = function(text) {
+            var isTeXInline     = /\$\$(.*)\$\$/g.test(text);
+            var isTeXLine       = /^\$\$(.*)\$\$$/.test(text);
+            var isTeXAddClass   = (isTeXLine)     ? " class=\"" + editormd.classNames.tex + "\"" : "";
+            var isToC           = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text);
+            var isToCMenu       = /^\[TOCM\]$/.test(text);
+            
+            if (!isTeXLine && isTeXInline) 
+            {
+                text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) {
+                    return "<span class=\"" + editormd.classNames.tex + "\">" + $2.replace(/\$/g, "") + "</span>";
+                });
+            } 
+            else 
+            {
+                text = (isTeXLine) ? text.replace(/\$/g, "") : text;
+            }
+            
+            var tocHTML = "<div class=\"markdown-toc editormd-markdown-toc\">" + text + "</div>";
+            
+            return (isToC) ? ( (isToCMenu) ? "<div class=\"editormd-toc-menu\">" + tocHTML + "</div><br/>" : tocHTML )
+                           : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "<p" + isTeXAddClass + ">" + this.atLink(this.emoji(text)) + "</p>\n" );
+        };
+
+        markedRenderer.code = function (code, lang, escaped) { 
+
+            if (lang === "seq" || lang === "sequence")
+            {
+                return "<div class=\"sequence-diagram\">" + code + "</div>";
+            } 
+            else if ( lang === "flow")
+            {
+                return "<div class=\"flowchart\">" + code + "</div>";
+            } 
+            else if ( lang === "math" || lang === "latex" || lang === "katex")
+            {
+                return "<p class=\"" + editormd.classNames.tex + "\">" + code + "</p>";
+            } 
+            else 
+            {
+
+                return marked.Renderer.prototype.code.apply(this, arguments);
+            }
+        };
+
+        markedRenderer.tablecell = function(content, flags) {
+            var type = (flags.header) ? "th" : "td";
+            var tag  = (flags.align)  ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">";
+            
+            return tag + this.atLink(this.emoji(content)) + "</" + type + ">\n";
+        };
+
+        markedRenderer.listitem = function(text) {
+            if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) 
+            {
+                text = text.replace(/^\s*\[\s\]\s*/, "<input type=\"checkbox\" class=\"task-list-item-checkbox\" /> ")
+                           .replace(/^\s*\[x\]\s*/,  "<input type=\"checkbox\" class=\"task-list-item-checkbox\" checked disabled /> ");
+
+                return "<li style=\"list-style: none;\">" + this.atLink(this.emoji(text)) + "</li>";
+            }
+            else 
+            {
+                return "<li>" + this.atLink(this.emoji(text)) + "</li>";
+            }
+        };
+        
+        return markedRenderer;
+    };
+    
+    /**
+     *
+     * 生成TOC(Table of Contents)
+     * Creating ToC (Table of Contents)
+     * 
+     * @param   {Array}    toc             从marked获取的TOC数组列表
+     * @param   {Element}  container       插入TOC的容器元素
+     * @param   {Integer}  startLevel      Hx 起始层级
+     * @returns {Object}   tocContainer    返回ToC列表容器层的jQuery对象元素
+     */
+    
+    editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) {
+        
+        var html        = "";    
+        var lastLevel   = 0;
+        var classPrefix = this.classPrefix;
+        
+        startLevel      = startLevel  || 1;
+        
+        for (var i = 0, len = toc.length; i < len; i++) 
+        {
+            var text  = toc[i].text;
+            var level = toc[i].level;
+            
+            if (level < startLevel) {
+                continue;
+            }
+            
+            if (level > lastLevel) 
+            {
+                html += "";
+            }
+            else if (level < lastLevel) 
+            {
+                html += (new Array(lastLevel - level + 2)).join("</ul></li>");
+            } 
+            else 
+            {
+                html += "</ul></li>";
+            }
+
+            html += "<li><a class=\"toc-level-" + level + "\" href=\"#" + text + "\" level=\"" + level + "\">" + text + "</a><ul>";
+            lastLevel = level;
+        }
+        
+        var tocContainer = container.find(".markdown-toc");
+        
+        if ((tocContainer.length < 1 && container.attr("previewContainer") === "false"))
+        {
+            var tocHTML = "<div class=\"markdown-toc " + classPrefix + "markdown-toc\"></div>";
+            
+            tocHTML = (tocDropdown) ? "<div class=\"" + classPrefix + "toc-menu\">" + tocHTML + "</div>" : tocHTML;
+            
+            container.html(tocHTML);
+            
+            tocContainer = container.find(".markdown-toc");
+        }
+        
+        if (tocDropdown)
+        {
+            tocContainer.wrap("<div class=\"" + classPrefix + "toc-menu\"></div><br/>");
+        }
+        
+        tocContainer.html("<ul class=\"markdown-toc-list\"></ul>").children(".markdown-toc-list").html(html.replace(/\r?\n?\<ul\>\<\/ul\>/g, ""));
+        
+        return tocContainer;
+    };
+    
+    /**
+     *
+     * 生成TOC下拉菜单
+     * Creating ToC dropdown menu
+     * 
+     * @param   {Object}   container       插入TOC的容器jQuery对象元素
+     * @param   {String}   tocTitle        ToC title
+     * @returns {Object}                   return toc-menu object
+     */
+    
+    editormd.tocDropdownMenu = function(container, tocTitle) {
+        
+        tocTitle      = tocTitle || "Table of Contents";
+        
+        var zindex    = 400;
+        var tocMenus  = container.find("." + this.classPrefix + "toc-menu");
+
+        tocMenus.each(function() {
+            var $this  = $(this);
+            var toc    = $this.children(".markdown-toc");
+            var icon   = "<i class=\"fa fa-angle-down\"></i>";
+            var btn    = "<a href=\"javascript:;\" class=\"toc-menu-btn\">" + icon + tocTitle + "</a>";
+            var menu   = toc.children("ul");            
+            var list   = menu.find("li");
+            
+            toc.append(btn);
+            
+            list.first().before("<li><h1>" + tocTitle + " " + icon + "</h1></li>");
+            
+            $this.mouseover(function(){
+                menu.show();
+
+                list.each(function(){
+                    var li = $(this);
+                    var ul = li.children("ul");
+
+                    if (ul.html() === "")
+                    {
+                        ul.remove();
+                    }
+
+                    if (ul.length > 0 && ul.html() !== "")
+                    {
+                        var firstA = li.children("a").first();
+
+                        if (firstA.children(".fa").length < 1)
+                        {
+                            firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) );
+                        }
+                    }
+
+                    li.mouseover(function(){
+                        ul.css("z-index", zindex).show();
+                        zindex += 1;
+                    }).mouseleave(function(){
+                        ul.hide();
+                    });
+                });
+            }).mouseleave(function(){
+                menu.hide();
+            }); 
+        });       
+        
+        return tocMenus;
+    };
+    
+    /**
+     * 简单地过滤指定的HTML标签
+     * Filter custom html tags
+     * 
+     * @param   {String}   html          要过滤HTML
+     * @param   {String}   filters       要过滤的标签
+     * @returns {String}   html          返回过滤的HTML
+     */
+    
+    editormd.filterHTMLTags = function(html, filters) {
+        
+        if (typeof html !== "string") {
+            html = new String(html);
+        }
+            
+        if (typeof filters !== "string") {
+            return html;
+        }
+
+        var expression = filters.split("|");
+        var filterTags = expression[0].split(",");
+        var attrs      = expression[1];
+
+        for (var i = 0, len = filterTags.length; i < len; i++)
+        {
+            var tag = filterTags[i];
+
+            html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), "");
+        }
+        
+        //return html;
+
+        if (typeof attrs !== "undefined")
+        {
+            var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig;
+
+            if (attrs === "*")
+            {
+                html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) {
+                    return "<" + $2 + ">" + $4 + "</" + $5 + ">";
+                });         
+            }
+            else if (attrs === "on*")
+            {
+                html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) {
+                    var el = $("<" + $2 + ">" + $4 + "</" + $5 + ">");
+                    var _attrs = $($1)[0].attributes;
+                    var $attrs = {};
+                    
+                    $.each(_attrs, function(i, e) {
+                        if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue;
+                    });
+                    
+                    $.each($attrs, function(i) {                        
+                        if (i.indexOf("on") === 0) {
+                            delete $attrs[i];
+                        }
+                    });
+                    
+                    el.attr($attrs);
+                    
+                    var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : "";
+
+                    return el[0].outerHTML + text;
+                });
+            }
+            else
+            {
+                html = html.replace(htmlTagRegex, function($1, $2, $3, $4) {
+                    var filterAttrs = attrs.split(",");
+                    var el = $($1);
+                    el.html($4);
+
+                    $.each(filterAttrs, function(i) {
+                        el.attr(filterAttrs[i], null);
+                    });
+
+                    return el[0].outerHTML;
+                });
+            }
+        }
+        
+        return html;
+    };
+    
+    /**
+     * 将Markdown文档解析为HTML用于前台显示
+     * Parse Markdown to HTML for Font-end preview.
+     * 
+     * @param   {String}   id            用于显示HTML的对象ID
+     * @param   {Object}   [options={}]  配置选项,可选
+     * @returns {Object}   div           返回jQuery对象元素
+     */
+    
+    editormd.markdownToHTML = function(id, options) {
+        var defaults = {
+            gfm                  : true,
+            toc                  : true,
+            tocm                 : false,
+            tocStartLevel        : 1,
+            tocTitle             : "目录",
+            tocDropdown          : false,
+            tocContainer         : "",
+            markdown             : "",
+            markdownSourceCode   : false,
+            htmlDecode           : false,
+            autoLoadKaTeX        : true,
+            pageBreak            : true,
+            atLink               : true,    // for @link
+            emailLink            : true,    // for mail address auto link
+            tex                  : false,
+            taskList             : false,   // Github Flavored Markdown task lists
+            emoji                : false,
+            flowChart            : false,
+            sequenceDiagram      : false,
+            previewCodeHighlight : true
+        };
+        
+        editormd.$marked  = marked;
+
+        var div           = $("#" + id);
+        var settings      = div.settings = $.extend(true, defaults, options || {});
+        var saveTo        = div.find("textarea");
+        
+        if (saveTo.length < 1)
+        {
+            div.append("<textarea></textarea>");
+            saveTo        = div.find("textarea");
+        }        
+        
+        var markdownDoc   = (settings.markdown === "") ? saveTo.val() : settings.markdown; 
+        var markdownToC   = [];
+
+        var rendererOptions = {  
+            toc                  : settings.toc,
+            tocm                 : settings.tocm,
+            tocStartLevel        : settings.tocStartLevel,
+            taskList             : settings.taskList,
+            emoji                : settings.emoji,
+            tex                  : settings.tex,
+            pageBreak            : settings.pageBreak,
+            atLink               : settings.atLink,           // for @link
+            emailLink            : settings.emailLink,        // for mail address auto link
+            flowChart            : settings.flowChart,
+            sequenceDiagram      : settings.sequenceDiagram,
+            previewCodeHighlight : settings.previewCodeHighlight,
+        };
+
+        var markedOptions = {
+            renderer    : editormd.markedRenderer(markdownToC, rendererOptions),
+            gfm         : settings.gfm,
+            tables      : true,
+            breaks      : true,
+            pedantic    : false,
+            sanitize    : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启
+            smartLists  : true,
+            smartypants : true
+        };
+        
+		markdownDoc = new String(markdownDoc);
+        
+        var markdownParsed = marked(markdownDoc, markedOptions);
+        
+        markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode);
+        
+        if (settings.markdownSourceCode) {
+            saveTo.text(markdownDoc);
+        } else {
+            saveTo.remove();
+        }
+        
+        div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed);
+        
+        var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div;
+        
+        if (settings.tocContainer !== "")
+        {
+            tocContainer.attr("previewContainer", false);
+        }
+         
+        if (settings.toc) 
+        {
+            div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel);
+            
+            if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0)
+            {
+                this.tocDropdownMenu(div, settings.tocTitle);
+            }
+            
+            if (settings.tocContainer !== "")
+            {
+                div.find(".editormd-toc-menu, .editormd-markdown-toc").remove();
+            }
+        }
+            
+        if (settings.previewCodeHighlight) 
+        {
+            div.find("pre").addClass("prettyprint linenums");
+            prettyPrint();
+        }
+        
+        if (!editormd.isIE8) 
+        {
+            if (settings.flowChart) {
+                div.find(".flowchart").flowChart(); 
+            }
+
+            if (settings.sequenceDiagram) {
+                div.find(".sequence-diagram").sequenceDiagram({theme: "simple"});
+            }
+        }
+
+        if (settings.tex)
+        {
+            var katexHandle = function() {
+                div.find("." + editormd.classNames.tex).each(function(){
+                    var tex  = $(this);                    
+                    katex.render(tex.html().replace(/&lt;/g, "<").replace(/&gt;/g, ">"), tex[0]);                    
+                    tex.find(".katex").css("font-size", "1.6em");
+                });
+            };
+            
+            if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded)
+            {
+                this.loadKaTeX(function() {
+                    editormd.$katex      = katex;
+                    editormd.kaTeXLoaded = true;
+                    katexHandle();
+                });
+            }
+            else
+            {
+                katexHandle();
+            }
+        }
+        
+        div.getMarkdown = function() {            
+            return saveTo.val();
+        };
+        
+        return div;
+    };
+    
+    // Editor.md themes, change toolbar themes etc.
+    // added @1.5.0
+    editormd.themes        = ["default", "dark"];
+    
+    // Preview area themes
+    // added @1.5.0
+    editormd.previewThemes = ["default", "dark"];
+    
+    // CodeMirror / editor area themes
+    // @1.5.0 rename -> editorThemes, old version -> themes
+    editormd.editorThemes = [
+        "default", "3024-day", "3024-night",
+        "ambiance", "ambiance-mobile",
+        "base16-dark", "base16-light", "blackboard",
+        "cobalt",
+        "eclipse", "elegant", "erlang-dark",
+        "lesser-dark",
+        "mbo", "mdn-like", "midnight", "monokai",
+        "neat", "neo", "night",
+        "paraiso-dark", "paraiso-light", "pastel-on-dark",
+        "rubyblue",
+        "solarized",
+        "the-matrix", "tomorrow-night-eighties", "twilight",
+        "vibrant-ink",
+        "xq-dark", "xq-light"
+    ];
+
+    editormd.loadPlugins = {};
+    
+    editormd.loadFiles = {
+        js     : [],
+        css    : [],
+        plugin : []
+    };
+    
+    /**
+     * 动态加载Editor.md插件,但不立即执行
+     * Load editor.md plugins
+     * 
+     * @param {String}   fileName              插件文件路径
+     * @param {Function} [callback=function()] 加载成功后执行的回调函数
+     * @param {String}   [into="head"]         嵌入页面的位置
+     */
+    
+    editormd.loadPlugin = function(fileName, callback, into) {
+        callback   = callback || function() {};
+        
+        this.loadScript(fileName, function() {
+            editormd.loadFiles.plugin.push(fileName);
+            callback();
+        }, into);
+    };
+    
+    /**
+     * 动态加载CSS文件的方法
+     * Load css file method
+     * 
+     * @param {String}   fileName              CSS文件名
+     * @param {Function} [callback=function()] 加载成功后执行的回调函数
+     * @param {String}   [into="head"]         嵌入页面的位置
+     */
+    
+    editormd.loadCSS   = function(fileName, callback, into) {
+        into       = into     || "head";        
+        callback   = callback || function() {};
+        
+        var css    = document.createElement("link");
+        css.type   = "text/css";
+        css.rel    = "stylesheet";
+        css.onload = css.onreadystatechange = function() {
+            editormd.loadFiles.css.push(fileName);
+            callback();
+        };
+
+        css.href   = fileName + ".css";
+
+        if(into === "head") {
+            document.getElementsByTagName("head")[0].appendChild(css);
+        } else {
+            document.body.appendChild(css);
+        }
+    };
+    
+    editormd.isIE    = (navigator.appName == "Microsoft Internet Explorer");
+    editormd.isIE8   = (editormd.isIE && navigator.appVersion.match(/8./i) == "8.");
+
+    /**
+     * 动态加载JS文件的方法
+     * Load javascript file method
+     * 
+     * @param {String}   fileName              JS文件名
+     * @param {Function} [callback=function()] 加载成功后执行的回调函数
+     * @param {String}   [into="head"]         嵌入页面的位置
+     */
+
+    editormd.loadScript = function(fileName, callback, into) {
+        
+        into          = into     || "head";
+        callback      = callback || function() {};
+        
+        var script    = null; 
+        script        = document.createElement("script");
+        script.id     = fileName.replace(/[\./]+/g, "-");
+        script.type   = "text/javascript";        
+        script.src    = fileName + ".js";
+        
+        if (editormd.isIE8) 
+        {            
+            script.onreadystatechange = function() {
+                if(script.readyState) 
+                {
+                    if (script.readyState === "loaded" || script.readyState === "complete") 
+                    {
+                        script.onreadystatechange = null; 
+                        editormd.loadFiles.js.push(fileName);
+                        callback();
+                    }
+                } 
+            };
+        }
+        else
+        {
+            script.onload = function() {
+                editormd.loadFiles.js.push(fileName);
+                callback();
+            };
+        }
+
+        if (into === "head") {
+            document.getElementsByTagName("head")[0].appendChild(script);
+        } else {
+            document.body.appendChild(script);
+        }
+    };
+    
+    // 使用国外的CDN,加载速度有时会很慢,或者自定义URL
+    // You can custom KaTeX load url.
+    editormd.katexURL  = {
+        css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min",
+        js  : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min"
+    };
+    
+    editormd.kaTeXLoaded = false;
+    
+    /**
+     * 加载KaTeX文件
+     * load KaTeX files
+     * 
+     * @param {Function} [callback=function()]  加载成功后执行的回调函数
+     */
+    
+    editormd.loadKaTeX = function (callback) {
+        editormd.loadCSS(editormd.katexURL.css, function(){
+            editormd.loadScript(editormd.katexURL.js, callback || function(){});
+        });
+    };
+        
+    /**
+     * 锁屏
+     * lock screen
+     * 
+     * @param   {Boolean}   lock   Boolean 布尔值,是否锁屏
+     * @returns {void}
+     */
+    
+    editormd.lockScreen = function(lock) {
+        $("html,body").css("overflow", (lock) ? "hidden" : "");
+    };
+        
+    /**
+     * 动态创建对话框
+     * Creating custom dialogs
+     * 
+     * @param   {Object} options 配置项键值对 Key/Value
+     * @returns {dialog} 返回创建的dialog的jQuery实例对象
+     */
+
+    editormd.createDialog = function(options) {
+        var defaults = {
+            name : "",
+            width : 420,
+            height: 240,
+            title : "",
+            drag  : true,
+            closed : true,
+            content : "",
+            mask : true,
+            maskStyle : {
+                backgroundColor : "#fff",
+                opacity : 0.1
+            },
+            lockScreen : true,
+            footer : true,
+            buttons : false
+        };
+
+        options          = $.extend(true, defaults, options);
+        
+        var $this        = this;
+        var editor       = this.editor;
+        var classPrefix  = editormd.classPrefix;
+        var guid         = (new Date()).getTime();
+        var dialogName   = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name);
+        var mouseOrTouch = editormd.mouseOrTouch;
+
+        var html         = "<div class=\"" + classPrefix + "dialog " + dialogName + "\">";
+
+        if (options.title !== "")
+        {
+            html += "<div class=\"" + classPrefix + "dialog-header\"" + ( (options.drag) ? " style=\"cursor: move;\"" : "" ) + ">";
+            html += "<strong class=\"" + classPrefix + "dialog-title\">" + options.title + "</strong>";
+            html += "</div>";
+        }
+
+        if (options.closed)
+        {
+            html += "<a href=\"javascript:;\" class=\"fa fa-close " + classPrefix + "dialog-close\"></a>";
+        }
+
+        html += "<div class=\"" + classPrefix + "dialog-container\">" + options.content;                    
+
+        if (options.footer || typeof options.footer === "string") 
+        {
+            html += "<div class=\"" + classPrefix + "dialog-footer\">" + ( (typeof options.footer === "boolean") ? "" : options.footer) + "</div>";
+        }
+
+        html += "</div>";
+
+        html += "<div class=\"" + classPrefix + "dialog-mask " + classPrefix + "dialog-mask-bg\"></div>";
+        html += "<div class=\"" + classPrefix + "dialog-mask " + classPrefix + "dialog-mask-con\"></div>";
+        html += "</div>";
+
+        editor.append(html);
+
+        var dialog = editor.find("." + dialogName);
+
+        dialog.lockScreen = function(lock) {
+            if (options.lockScreen)
+            {                
+                $("html,body").css("overflow", (lock) ? "hidden" : "");
+                $this.resize();
+            }
+
+            return dialog;
+        };
+
+        dialog.showMask = function() {
+            if (options.mask)
+            {
+                editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show();
+            }
+            return dialog;
+        };
+
+        dialog.hideMask = function() {
+            if (options.mask)
+            {
+                editor.find("." + classPrefix + "mask").hide();
+            }
+
+            return dialog;
+        };
+
+        dialog.loading = function(show) {                        
+            var loading = dialog.find("." + classPrefix + "dialog-mask");
+            loading[(show) ? "show" : "hide"]();
+
+            return dialog;
+        };
+
+        dialog.lockScreen(true).showMask();
+
+        dialog.show().css({
+            zIndex : editormd.dialogZindex,
+            border : (editormd.isIE8) ? "1px solid #ddd" : "",
+            width  : (typeof options.width  === "number") ? options.width + "px"  : options.width,
+            height : (typeof options.height === "number") ? options.height + "px" : options.height
+        });
+
+        var dialogPosition = function(){
+            dialog.css({
+                top    : ($(window).height() - dialog.height()) / 2 + "px",
+                left   : ($(window).width() - dialog.width()) / 2 + "px"
+            });
+        };
+
+        dialogPosition();
+
+        $(window).resize(dialogPosition);
+
+        dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() {
+            dialog.hide().lockScreen(false).hideMask();
+        });
+
+        if (typeof options.buttons === "object")
+        {
+            var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer");
+
+            for (var key in options.buttons)
+            {
+                var btn = options.buttons[key];
+                var btnClassName = classPrefix + key + "-btn";
+
+                footer.append("<button class=\"" + classPrefix + "btn " + btnClassName + "\">" + btn[0] + "</button>");
+                btn[1] = $.proxy(btn[1], dialog);
+                footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]);
+            }
+        }
+
+        if (options.title !== "" && options.drag)
+        {                        
+            var posX, posY;
+            var dialogHeader = dialog.children("." + classPrefix + "dialog-header");
+
+            if (!options.mask) {
+                dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){
+                    editormd.dialogZindex += 2;
+                    dialog.css("z-index", editormd.dialogZindex);
+                });
+            }
+
+            dialogHeader.mousedown(function(e) {
+                e = e || window.event;  //IE
+                posX = e.clientX - parseInt(dialog[0].style.left);
+                posY = e.clientY - parseInt(dialog[0].style.top);
+
+                document.onmousemove = moveAction;                   
+            });
+
+            var userCanSelect = function (obj) {
+                obj.removeClass(classPrefix + "user-unselect").off("selectstart");
+            };
+
+            var userUnselect = function (obj) {
+                obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE                        
+                    return false;
+                });
+            };
+
+            var moveAction = function (e) {
+                e = e || window.event;  //IE
+
+                var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top);
+
+                if( nowLeft >= 0 ) {
+                    if( nowLeft + dialog.width() <= $(window).width()) {
+                        left = e.clientX - posX;
+                    } else {	
+                        left = $(window).width() - dialog.width();
+                        document.onmousemove = null;
+                    }
+                } else {
+                    left = 0;
+                    document.onmousemove = null;
+                }
+
+                if( nowTop >= 0 ) {
+                    top = e.clientY - posY;
+                } else {
+                    top = 0;
+                    document.onmousemove = null;
+                }
+
+
+                document.onselectstart = function() {
+                    return false;
+                };
+
+                userUnselect($("body"));
+                userUnselect(dialog);
+                dialog[0].style.left = left + "px";
+                dialog[0].style.top  = top + "px";
+            };
+
+            document.onmouseup = function() {                            
+                userCanSelect($("body"));
+                userCanSelect(dialog);
+
+                document.onselectstart = null;         
+                document.onmousemove = null;
+            };
+
+            dialogHeader.touchDraggable = function() {
+                var offset = null;
+                var start  = function(e) {
+                    var orig = e.originalEvent; 
+                    var pos  = $(this).parent().position();
+
+                    offset = {
+                        x : orig.changedTouches[0].pageX - pos.left,
+                        y : orig.changedTouches[0].pageY - pos.top
+                    };
+                };
+
+                var move = function(e) {
+                    e.preventDefault();
+                    var orig = e.originalEvent;
+
+                    $(this).parent().css({
+                        top  : orig.changedTouches[0].pageY - offset.y,
+                        left : orig.changedTouches[0].pageX - offset.x
+                    });
+                };
+
+                this.bind("touchstart", start).bind("touchmove", move);
+            };
+
+            dialogHeader.touchDraggable();
+        }
+
+        editormd.dialogZindex += 2;
+
+        return dialog;
+    };
+    
+    /**
+     * 鼠标和触摸事件的判断/选择方法
+     * MouseEvent or TouchEvent type switch
+     * 
+     * @param   {String} [mouseEventType="click"]    供选择的鼠标事件
+     * @param   {String} [touchEventType="touchend"] 供选择的触摸事件
+     * @returns {String} EventType                   返回事件类型名称
+     */
+    
+    editormd.mouseOrTouch = function(mouseEventType, touchEventType) {
+        mouseEventType = mouseEventType || "click";
+        touchEventType = touchEventType || "touchend";
+        
+        var eventType  = mouseEventType;
+
+        try {
+            document.createEvent("TouchEvent");
+            eventType = touchEventType;
+        } catch(e) {}
+
+        return eventType;
+    };
+    
+    /**
+     * 日期时间的格式化方法
+     * Datetime format method
+     * 
+     * @param   {String}   [format=""]  日期时间的格式,类似PHP的格式
+     * @returns {String}   datefmt      返回格式化后的日期时间字符串
+     */
+    
+    editormd.dateFormat = function(format) {                
+        format      = format || "";
+
+        var addZero = function(d) {
+            return (d < 10) ? "0" + d : d;
+        };
+
+        var date    = new Date(); 
+        var year    = date.getFullYear();
+        var year2   = year.toString().slice(2, 4);
+        var month   = addZero(date.getMonth() + 1);
+        var day     = addZero(date.getDate());
+        var weekDay = date.getDay();
+        var hour    = addZero(date.getHours());
+        var min     = addZero(date.getMinutes());
+        var second  = addZero(date.getSeconds());
+        var ms      = addZero(date.getMilliseconds()); 
+        var datefmt = "";
+
+        var ymd     = year2 + "-" + month + "-" + day;
+        var fymd    = year  + "-" + month + "-" + day;
+        var hms     = hour  + ":" + min   + ":" + second;
+
+        switch (format) 
+        {
+            case "UNIX Time" :
+                    datefmt = date.getTime();
+                break;
+
+            case "UTC" :
+                    datefmt = date.toUTCString();
+                break;	
+
+            case "yy" :
+                    datefmt = year2;
+                break;	
+
+            case "year" :
+            case "yyyy" :
+                    datefmt = year;
+                break;
+
+            case "month" :
+            case "mm" :
+                    datefmt = month;
+                break;                        
+
+            case "cn-week-day" :
+            case "cn-wd" :
+                    var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"];
+                    datefmt = "星期" + cnWeekDays[weekDay];
+                break;
+
+            case "week-day" :
+            case "wd" :
+                    var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+                    datefmt = weekDays[weekDay];
+                break;
+
+            case "day" :
+            case "dd" :
+                    datefmt = day;
+                break;
+
+            case "hour" :
+            case "hh" :
+                    datefmt = hour;
+                break;
+
+            case "min" :
+            case "ii" :
+                    datefmt = min;
+                break;
+
+            case "second" :
+            case "ss" :
+                    datefmt = second;
+                break;
+
+            case "ms" :
+                    datefmt = ms;
+                break;
+
+            case "yy-mm-dd" :
+                    datefmt = ymd;
+                break;
+
+            case "yyyy-mm-dd" :
+                    datefmt = fymd;
+                break;
+
+            case "yyyy-mm-dd h:i:s ms" :
+            case "full + ms" : 
+                    datefmt = fymd + " " + hms + " " + ms;
+                break;
+
+            case "full" :
+            case "yyyy-mm-dd h:i:s" :
+                default:
+                    datefmt = fymd + " " + hms;
+                break;
+        }
+
+        return datefmt;
+    };
+
+    return editormd;
+
+}));
+(function(){
+    var factory = function (exports) {
+        var lang = {
+            name : "zh-tw",
+            description : "開源在線Markdown編輯器<br/>Open source online Markdown editor.",
+            tocTitle    : "目錄",
+            toolbar     : {
+                undo             : "撤銷(Ctrl+Z)",
+                redo             : "重做(Ctrl+Y)",
+                bold             : "粗體",
+                del              : "刪除線",
+                italic           : "斜體",
+                quote            : "引用",
+                ucwords          : "將所選的每個單詞首字母轉成大寫",
+                uppercase        : "將所選文本轉成大寫",
+                lowercase        : "將所選文本轉成小寫",
+                h1               : "標題1",
+                h2               : "標題2",
+                h3               : "標題3",
+                h4               : "標題4",
+                h5               : "標題5",
+                h6               : "標題6",
+                "list-ul"        : "無序列表",
+                "list-ol"        : "有序列表",
+                hr               : "横线",
+                link             : "链接",
+                "reference-link" : "引用鏈接",
+                image            : "圖片",
+                code             : "行內代碼",
+                "preformatted-text" : "預格式文本 / 代碼塊(縮進風格)",
+                "code-block"     : "代碼塊(多語言風格)",
+                table            : "添加表格",
+                datetime         : "日期時間",
+                emoji            : "Emoji 表情",
+                "html-entities"  : "HTML 實體字符",
+                pagebreak        : "插入分頁符",
+                watch            : "關閉實時預覽",
+                unwatch          : "開啟實時預覽",
+                preview          : "全窗口預覽HTML(按 Shift + ESC 退出)",
+                fullscreen       : "全屏(按 ESC 退出)",
+                clear            : "清空",
+                search           : "搜尋",
+                help             : "使用幫助",
+                info             : "關於" + exports.title
+            },
+            buttons : {
+                enter  : "確定",
+                cancel : "取消",
+                close  : "關閉"
+            },
+            dialog : {
+                link   : {
+                    title    : "添加鏈接",
+                    url      : "鏈接地址",
+                    urlTitle : "鏈接標題",
+                    urlEmpty : "錯誤:請填寫鏈接地址。"
+                },
+                referenceLink : {
+                    title    : "添加引用鏈接",
+                    name     : "引用名稱",
+                    url      : "鏈接地址",
+                    urlId    : "鏈接ID",
+                    urlTitle : "鏈接標題",
+                    nameEmpty: "錯誤:引用鏈接的名稱不能為空。",
+                    idEmpty  : "錯誤:請填寫引用鏈接的ID。",
+                    urlEmpty : "錯誤:請填寫引用鏈接的URL地址。"
+                },
+                image  : {
+                    title    : "添加圖片",
+                    url      : "圖片地址",
+                    link     : "圖片鏈接",
+                    alt      : "圖片描述",
+                    uploadButton     : "本地上傳",
+                    imageURLEmpty    : "錯誤:圖片地址不能為空。",
+                    uploadFileEmpty  : "錯誤:上傳的圖片不能為空!",
+                    formatNotAllowed : "錯誤:只允許上傳圖片文件,允許上傳的圖片文件格式有:"
+                },
+                preformattedText : {
+                    title             : "添加預格式文本或代碼塊", 
+                    emptyAlert        : "錯誤:請填寫預格式文本或代碼的內容。"
+                },
+                codeBlock : {
+                    title             : "添加代碼塊",                 
+                    selectLabel       : "代碼語言:",
+                    selectDefaultText : "請語言代碼語言",
+                    otherLanguage     : "其他語言",
+                    unselectedLanguageAlert : "錯誤:請選擇代碼所屬的語言類型。",
+                    codeEmptyAlert    : "錯誤:請填寫代碼內容。"
+                },
+                htmlEntities : {
+                    title : "HTML實體字符"
+                },
+                help : {
+                    title : "使用幫助"
+                }
+            }
+        };
+        
+        exports.defaults.lang = lang;
+    };
+    
+	// CommonJS/Node.js
+	if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
+    { 
+        module.exports = factory;
+    }
+	else if (typeof define === "function")  // AMD/CMD/Sea.js
+    {
+		if (define.amd) { // for Require.js
+
+			define(["editormd"], function(editormd) {
+                factory(editormd);
+            });
+
+		} else { // for Sea.js
+			define(function(require) {
+                var editormd = require("../editormd");
+                factory(editormd);
+            });
+		}
+	} 
+	else
+	{
+        factory(window.editormd);
+	}
+    
+})();
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.dragula = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+'use strict';
+
+var cache = {};
+var start = '(?:^|\\s)';
+var end = '(?:\\s|$)';
+
+function lookupClass (className) {
+  var cached = cache[className];
+  if (cached) {
+    cached.lastIndex = 0;
+  } else {
+    cache[className] = cached = new RegExp(start + className + end, 'g');
+  }
+  return cached;
+}
+
+function addClass (el, className) {
+  var current = el.className;
+  if (!current.length) {
+    el.className = className;
+  } else if (!lookupClass(className).test(current)) {
+    el.className += ' ' + className;
+  }
+}
+
+function rmClass (el, className) {
+  el.className = el.className.replace(lookupClass(className), ' ').trim();
+}
+
+module.exports = {
+  add: addClass,
+  rm: rmClass
+};
+
+},{}],2:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var emitter = require('contra/emitter');
+var crossvent = require('crossvent');
+var classes = require('./classes');
+var doc = document;
+var documentElement = doc.documentElement;
+
+function dragula (initialContainers, options) {
+  var len = arguments.length;
+  if (len === 1 && Array.isArray(initialContainers) === false) {
+    options = initialContainers;
+    initialContainers = [];
+  }
+  var _mirror; // mirror image
+  var _source; // source container
+  var _item; // item being dragged
+  var _offsetX; // reference x
+  var _offsetY; // reference y
+  var _moveX; // reference move x
+  var _moveY; // reference move y
+  var _initialSibling; // reference sibling when grabbed
+  var _currentSibling; // reference sibling now
+  var _copy; // item used for copying
+  var _renderTimer; // timer for setTimeout renderMirrorImage
+  var _lastDropTarget = null; // last container item was over
+  var _grabbed; // holds mousedown context until first mousemove
+
+  var o = options || {};
+  if (o.moves === void 0) { o.moves = always; }
+  if (o.accepts === void 0) { o.accepts = always; }
+  if (o.invalid === void 0) { o.invalid = invalidTarget; }
+  if (o.containers === void 0) { o.containers = initialContainers || []; }
+  if (o.isContainer === void 0) { o.isContainer = never; }
+  if (o.copy === void 0) { o.copy = false; }
+  if (o.copySortSource === void 0) { o.copySortSource = false; }
+  if (o.revertOnSpill === void 0) { o.revertOnSpill = false; }
+  if (o.removeOnSpill === void 0) { o.removeOnSpill = false; }
+  if (o.direction === void 0) { o.direction = 'vertical'; }
+  if (o.ignoreInputTextSelection === void 0) { o.ignoreInputTextSelection = true; }
+  if (o.mirrorContainer === void 0) { o.mirrorContainer = doc.body; }
+
+  var drake = emitter({
+    containers: o.containers,
+    start: manualStart,
+    end: end,
+    cancel: cancel,
+    remove: remove,
+    destroy: destroy,
+    canMove: canMove,
+    dragging: false
+  });
+
+  if (o.removeOnSpill === true) {
+    drake.on('over', spillOver).on('out', spillOut);
+  }
+
+  events();
+
+  return drake;
+
+  function isContainer (el) {
+    return drake.containers.indexOf(el) !== -1 || o.isContainer(el);
+  }
+
+  function events (remove) {
+    var op = remove ? 'remove' : 'add';
+    touchy(documentElement, op, 'mousedown', grab);
+    touchy(documentElement, op, 'mouseup', release);
+  }
+
+  function eventualMovements (remove) {
+    var op = remove ? 'remove' : 'add';
+    touchy(documentElement, op, 'mousemove', startBecauseMouseMoved);
+  }
+
+  function movements (remove) {
+    var op = remove ? 'remove' : 'add';
+    crossvent[op](documentElement, 'selectstart', preventGrabbed); // IE8
+    crossvent[op](documentElement, 'click', preventGrabbed);
+  }
+
+  function destroy () {
+    events(true);
+    release({});
+  }
+
+  function preventGrabbed (e) {
+    if (_grabbed) {
+      e.preventDefault();
+    }
+  }
+
+  function grab (e) {
+    _moveX = e.clientX;
+    _moveY = e.clientY;
+
+    var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;
+    if (ignore) {
+      return; // we only care about honest-to-god left clicks and touch events
+    }
+    var item = e.target;
+    var context = canStart(item);
+    if (!context) {
+      return;
+    }
+    _grabbed = context;
+    eventualMovements();
+    if (e.type === 'mousedown') {
+      if (isInput(item)) { // see also: https://github.com/bevacqua/dragula/issues/208
+        item.focus(); // fixes https://github.com/bevacqua/dragula/issues/176
+      } else {
+        e.preventDefault(); // fixes https://github.com/bevacqua/dragula/issues/155
+      }
+    }
+  }
+
+  function startBecauseMouseMoved (e) {
+    if (!_grabbed) {
+      return;
+    }
+    if (whichMouseButton(e) === 0) {
+      release({});
+      return; // when text is selected on an input and then dragged, mouseup doesn't fire. this is our only hope
+    }
+    // truthy check fixes #239, equality fixes #207
+    if (e.clientX !== void 0 && e.clientX === _moveX && e.clientY !== void 0 && e.clientY === _moveY) {
+      return;
+    }
+    if (o.ignoreInputTextSelection) {
+      var clientX = getCoord('clientX', e);
+      var clientY = getCoord('clientY', e);
+      var elementBehindCursor = doc.elementFromPoint(clientX, clientY);
+      if (isInput(elementBehindCursor)) {
+        return;
+      }
+    }
+
+    var grabbed = _grabbed; // call to end() unsets _grabbed
+    eventualMovements(true);
+    movements();
+    end();
+    start(grabbed);
+
+    var offset = getOffset(_item);
+    _offsetX = getCoord('pageX', e) - offset.left;
+    _offsetY = getCoord('pageY', e) - offset.top;
+
+    classes.add(_copy || _item, 'gu-transit');
+    renderMirrorImage();
+    drag(e);
+  }
+
+  function canStart (item) {
+    if (drake.dragging && _mirror) {
+      return;
+    }
+    if (isContainer(item)) {
+      return; // don't drag container itself
+    }
+    var handle = item;
+    while (getParent(item) && isContainer(getParent(item)) === false) {
+      if (o.invalid(item, handle)) {
+        return;
+      }
+      item = getParent(item); // drag target should be a top element
+      if (!item) {
+        return;
+      }
+    }
+    var source = getParent(item);
+    if (!source) {
+      return;
+    }
+    if (o.invalid(item, handle)) {
+      return;
+    }
+
+    var movable = o.moves(item, source, handle, nextEl(item));
+    if (!movable) {
+      return;
+    }
+
+    return {
+      item: item,
+      source: source
+    };
+  }
+
+  function canMove (item) {
+    return !!canStart(item);
+  }
+
+  function manualStart (item) {
+    var context = canStart(item);
+    if (context) {
+      start(context);
+    }
+  }
+
+  function start (context) {
+    if (isCopy(context.item, context.source)) {
+      _copy = context.item.cloneNode(true);
+      drake.emit('cloned', _copy, context.item, 'copy');
+    }
+
+    _source = context.source;
+    _item = context.item;
+    _initialSibling = _currentSibling = nextEl(context.item);
+
+    drake.dragging = true;
+    drake.emit('drag', _item, _source);
+  }
+
+  function invalidTarget () {
+    return false;
+  }
+
+  function end () {
+    if (!drake.dragging) {
+      return;
+    }
+    var item = _copy || _item;
+    drop(item, getParent(item));
+  }
+
+  function ungrab () {
+    _grabbed = false;
+    eventualMovements(true);
+    movements(true);
+  }
+
+  function release (e) {
+    ungrab();
+
+    if (!drake.dragging) {
+      return;
+    }
+    var item = _copy || _item;
+    var clientX = getCoord('clientX', e);
+    var clientY = getCoord('clientY', e);
+    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);
+    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);
+    if (dropTarget && ((_copy && o.copySortSource) || (!_copy || dropTarget !== _source))) {
+      drop(item, dropTarget);
+    } else if (o.removeOnSpill) {
+      remove();
+    } else {
+      cancel();
+    }
+  }
+
+  function drop (item, target) {
+    var parent = getParent(item);
+    if (_copy && o.copySortSource && target === _source) {
+      parent.removeChild(_item);
+    }
+    if (isInitialPlacement(target)) {
+      drake.emit('cancel', item, _source, _source);
+    } else {
+      drake.emit('drop', item, target, _source, _currentSibling);
+    }
+    cleanup();
+  }
+
+  function remove () {
+    if (!drake.dragging) {
+      return;
+    }
+    var item = _copy || _item;
+    var parent = getParent(item);
+    if (parent) {
+      parent.removeChild(item);
+    }
+    drake.emit(_copy ? 'cancel' : 'remove', item, parent, _source);
+    cleanup();
+  }
+
+  function cancel (revert) {
+    if (!drake.dragging) {
+      return;
+    }
+    var reverts = arguments.length > 0 ? revert : o.revertOnSpill;
+    var item = _copy || _item;
+    var parent = getParent(item);
+    var initial = isInitialPlacement(parent);
+    if (initial === false && reverts) {
+      if (_copy) {
+        if (parent) {
+          parent.removeChild(_copy);
+        }
+      } else {
+        _source.insertBefore(item, _initialSibling);
+      }
+    }
+    if (initial || reverts) {
+      drake.emit('cancel', item, _source, _source);
+    } else {
+      drake.emit('drop', item, parent, _source, _currentSibling);
+    }
+    cleanup();
+  }
+
+  function cleanup () {
+    var item = _copy || _item;
+    ungrab();
+    removeMirrorImage();
+    if (item) {
+      classes.rm(item, 'gu-transit');
+    }
+    if (_renderTimer) {
+      clearTimeout(_renderTimer);
+    }
+    drake.dragging = false;
+    if (_lastDropTarget) {
+      drake.emit('out', item, _lastDropTarget, _source);
+    }
+    drake.emit('dragend', item);
+    _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;
+  }
+
+  function isInitialPlacement (target, s) {
+    var sibling;
+    if (s !== void 0) {
+      sibling = s;
+    } else if (_mirror) {
+      sibling = _currentSibling;
+    } else {
+      sibling = nextEl(_copy || _item);
+    }
+    return target === _source && sibling === _initialSibling;
+  }
+
+  function findDropTarget (elementBehindCursor, clientX, clientY) {
+    var target = elementBehindCursor;
+    while (target && !accepted()) {
+      target = getParent(target);
+    }
+    return target;
+
+    function accepted () {
+      var droppable = isContainer(target);
+      if (droppable === false) {
+        return false;
+      }
+
+      var immediate = getImmediateChild(target, elementBehindCursor);
+      var reference = getReference(target, immediate, clientX, clientY);
+      var initial = isInitialPlacement(target, reference);
+      if (initial) {
+        return true; // should always be able to drop it right back where it was
+      }
+      return o.accepts(_item, target, _source, reference);
+    }
+  }
+
+  function drag (e) {
+    if (!_mirror) {
+      return;
+    }
+    e.preventDefault();
+
+    var clientX = getCoord('clientX', e);
+    var clientY = getCoord('clientY', e);
+    var x = clientX - _offsetX;
+    var y = clientY - _offsetY;
+
+    _mirror.style.left = x + 'px';
+    _mirror.style.top = y + 'px';
+
+    var item = _copy || _item;
+    var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);
+    var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);
+    var changed = dropTarget !== null && dropTarget !== _lastDropTarget;
+    if (changed || dropTarget === null) {
+      out();
+      _lastDropTarget = dropTarget;
+      over();
+    }
+    var parent = getParent(item);
+    if (dropTarget === _source && _copy && !o.copySortSource) {
+      if (parent) {
+        parent.removeChild(item);
+      }
+      return;
+    }
+    var reference;
+    var immediate = getImmediateChild(dropTarget, elementBehindCursor);
+    if (immediate !== null) {
+      reference = getReference(dropTarget, immediate, clientX, clientY);
+    } else if (o.revertOnSpill === true && !_copy) {
+      reference = _initialSibling;
+      dropTarget = _source;
+    } else {
+      if (_copy && parent) {
+        parent.removeChild(item);
+      }
+      return;
+    }
+    if (
+      (reference === null && changed) ||
+      reference !== item &&
+      reference !== nextEl(item)
+    ) {
+      _currentSibling = reference;
+      dropTarget.insertBefore(item, reference);
+      drake.emit('shadow', item, dropTarget, _source);
+    }
+    function moved (type) { drake.emit(type, item, _lastDropTarget, _source); }
+    function over () { if (changed) { moved('over'); } }
+    function out () { if (_lastDropTarget) { moved('out'); } }
+  }
+
+  function spillOver (el) {
+    classes.rm(el, 'gu-hide');
+  }
+
+  function spillOut (el) {
+    if (drake.dragging) { classes.add(el, 'gu-hide'); }
+  }
+
+  function renderMirrorImage () {
+    if (_mirror) {
+      return;
+    }
+    var rect = _item.getBoundingClientRect();
+    _mirror = _item.cloneNode(true);
+    _mirror.style.width = getRectWidth(rect) + 'px';
+    _mirror.style.height = getRectHeight(rect) + 'px';
+    classes.rm(_mirror, 'gu-transit');
+    classes.add(_mirror, 'gu-mirror');
+    o.mirrorContainer.appendChild(_mirror);
+    touchy(documentElement, 'add', 'mousemove', drag);
+    classes.add(o.mirrorContainer, 'gu-unselectable');
+    drake.emit('cloned', _mirror, _item, 'mirror');
+  }
+
+  function removeMirrorImage () {
+    if (_mirror) {
+      classes.rm(o.mirrorContainer, 'gu-unselectable');
+      touchy(documentElement, 'remove', 'mousemove', drag);
+      getParent(_mirror).removeChild(_mirror);
+      _mirror = null;
+    }
+  }
+
+  function getImmediateChild (dropTarget, target) {
+    var immediate = target;
+    while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {
+      immediate = getParent(immediate);
+    }
+    if (immediate === documentElement) {
+      return null;
+    }
+    return immediate;
+  }
+
+  function getReference (dropTarget, target, x, y) {
+    var horizontal = o.direction === 'horizontal';
+    var reference = target !== dropTarget ? inside() : outside();
+    return reference;
+
+    function outside () { // slower, but able to figure out any position
+      var len = dropTarget.children.length;
+      var i;
+      var el;
+      var rect;
+      for (i = 0; i < len; i++) {
+        el = dropTarget.children[i];
+        rect = el.getBoundingClientRect();
+        if (horizontal && (rect.left + rect.width / 2) > x) { return el; }
+        if (!horizontal && (rect.top + rect.height / 2) > y) { return el; }
+      }
+      return null;
+    }
+
+    function inside () { // faster, but only available if dropped inside a child element
+      var rect = target.getBoundingClientRect();
+      if (horizontal) {
+        return resolve(x > rect.left + getRectWidth(rect) / 2);
+      }
+      return resolve(y > rect.top + getRectHeight(rect) / 2);
+    }
+
+    function resolve (after) {
+      return after ? nextEl(target) : target;
+    }
+  }
+
+  function isCopy (item, container) {
+    return typeof o.copy === 'boolean' ? o.copy : o.copy(item, container);
+  }
+}
+
+function touchy (el, op, type, fn) {
+  var touch = {
+    mouseup: 'touchend',
+    mousedown: 'touchstart',
+    mousemove: 'touchmove'
+  };
+  var pointers = {
+    mouseup: 'pointerup',
+    mousedown: 'pointerdown',
+    mousemove: 'pointermove'
+  };
+  var microsoft = {
+    mouseup: 'MSPointerUp',
+    mousedown: 'MSPointerDown',
+    mousemove: 'MSPointerMove'
+  };
+  if (global.navigator.pointerEnabled) {
+    crossvent[op](el, pointers[type], fn);
+  } else if (global.navigator.msPointerEnabled) {
+    crossvent[op](el, microsoft[type], fn);
+  } else {
+    crossvent[op](el, touch[type], fn);
+    crossvent[op](el, type, fn);
+  }
+}
+
+function whichMouseButton (e) {
+  if (e.touches !== void 0) { return e.touches.length; }
+  if (e.which !== void 0 && e.which !== 0) { return e.which; } // see https://github.com/bevacqua/dragula/issues/261
+  if (e.buttons !== void 0) { return e.buttons; }
+  var button = e.button;
+  if (button !== void 0) { // see https://github.com/jquery/jquery/blob/99e8ff1baa7ae341e94bb89c3e84570c7c3ad9ea/src/event.js#L573-L575
+    return button & 1 ? 1 : button & 2 ? 3 : (button & 4 ? 2 : 0);
+  }
+}
+
+function getOffset (el) {
+  var rect = el.getBoundingClientRect();
+  return {
+    left: rect.left + getScroll('scrollLeft', 'pageXOffset'),
+    top: rect.top + getScroll('scrollTop', 'pageYOffset')
+  };
+}
+
+function getScroll (scrollProp, offsetProp) {
+  if (typeof global[offsetProp] !== 'undefined') {
+    return global[offsetProp];
+  }
+  if (documentElement.clientHeight) {
+    return documentElement[scrollProp];
+  }
+  return doc.body[scrollProp];
+}
+
+function getElementBehindPoint (point, x, y) {
+  var p = point || {};
+  var state = p.className;
+  var el;
+  p.className += ' gu-hide';
+  el = doc.elementFromPoint(x, y);
+  p.className = state;
+  return el;
+}
+
+function never () { return false; }
+function always () { return true; }
+function getRectWidth (rect) { return rect.width || (rect.right - rect.left); }
+function getRectHeight (rect) { return rect.height || (rect.bottom - rect.top); }
+function getParent (el) { return el.parentNode === doc ? null : el.parentNode; }
+function isInput (el) { return el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.tagName === 'SELECT' || isEditable(el); }
+function isEditable (el) {
+  if (!el) { return false; } // no parents were editable
+  if (el.contentEditable === 'false') { return false; } // stop the lookup
+  if (el.contentEditable === 'true') { return true; } // found a contentEditable element in the chain
+  return isEditable(getParent(el)); // contentEditable is set to 'inherit'
+}
+
+function nextEl (el) {
+  return el.nextElementSibling || manually();
+  function manually () {
+    var sibling = el;
+    do {
+      sibling = sibling.nextSibling;
+    } while (sibling && sibling.nodeType !== 1);
+    return sibling;
+  }
+}
+
+function getEventHost (e) {
+  // on touchend event, we have to use `e.changedTouches`
+  // see http://stackoverflow.com/questions/7192563/touchend-event-properties
+  // see https://github.com/bevacqua/dragula/issues/34
+  if (e.targetTouches && e.targetTouches.length) {
+    return e.targetTouches[0];
+  }
+  if (e.changedTouches && e.changedTouches.length) {
+    return e.changedTouches[0];
+  }
+  return e;
+}
+
+function getCoord (coord, e) {
+  var host = getEventHost(e);
+  var missMap = {
+    pageX: 'clientX', // IE8
+    pageY: 'clientY' // IE8
+  };
+  if (coord in missMap && !(coord in host) && missMap[coord] in host) {
+    coord = missMap[coord];
+  }
+  return host[coord];
+}
+
+module.exports = dragula;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./classes":1,"contra/emitter":5,"crossvent":6}],3:[function(require,module,exports){
+module.exports = function atoa (a, n) { return Array.prototype.slice.call(a, n); }
+
+},{}],4:[function(require,module,exports){
+'use strict';
+
+var ticky = require('ticky');
+
+module.exports = function debounce (fn, args, ctx) {
+  if (!fn) { return; }
+  ticky(function run () {
+    fn.apply(ctx || null, args || []);
+  });
+};
+
+},{"ticky":9}],5:[function(require,module,exports){
+'use strict';
+
+var atoa = require('atoa');
+var debounce = require('./debounce');
+
+module.exports = function emitter (thing, options) {
+  var opts = options || {};
+  var evt = {};
+  if (thing === undefined) { thing = {}; }
+  thing.on = function (type, fn) {
+    if (!evt[type]) {
+      evt[type] = [fn];
+    } else {
+      evt[type].push(fn);
+    }
+    return thing;
+  };
+  thing.once = function (type, fn) {
+    fn._once = true; // thing.off(fn) still works!
+    thing.on(type, fn);
+    return thing;
+  };
+  thing.off = function (type, fn) {
+    var c = arguments.length;
+    if (c === 1) {
+      delete evt[type];
+    } else if (c === 0) {
+      evt = {};
+    } else {
+      var et = evt[type];
+      if (!et) { return thing; }
+      et.splice(et.indexOf(fn), 1);
+    }
+    return thing;
+  };
+  thing.emit = function () {
+    var args = atoa(arguments);
+    return thing.emitterSnapshot(args.shift()).apply(this, args);
+  };
+  thing.emitterSnapshot = function (type) {
+    var et = (evt[type] || []).slice(0);
+    return function () {
+      var args = atoa(arguments);
+      var ctx = this || thing;
+      if (type === 'error' && opts.throws !== false && !et.length) { throw args.length === 1 ? args[0] : args; }
+      et.forEach(function emitter (listen) {
+        if (opts.async) { debounce(listen, args, ctx); } else { listen.apply(ctx, args); }
+        if (listen._once) { thing.off(type, listen); }
+      });
+      return thing;
+    };
+  };
+  return thing;
+};
+
+},{"./debounce":4,"atoa":3}],6:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var customEvent = require('custom-event');
+var eventmap = require('./eventmap');
+var doc = global.document;
+var addEvent = addEventEasy;
+var removeEvent = removeEventEasy;
+var hardCache = [];
+
+if (!global.addEventListener) {
+  addEvent = addEventHard;
+  removeEvent = removeEventHard;
+}
+
+module.exports = {
+  add: addEvent,
+  remove: removeEvent,
+  fabricate: fabricateEvent
+};
+
+function addEventEasy (el, type, fn, capturing) {
+  return el.addEventListener(type, fn, capturing);
+}
+
+function addEventHard (el, type, fn) {
+  return el.attachEvent('on' + type, wrap(el, type, fn));
+}
+
+function removeEventEasy (el, type, fn, capturing) {
+  return el.removeEventListener(type, fn, capturing);
+}
+
+function removeEventHard (el, type, fn) {
+  var listener = unwrap(el, type, fn);
+  if (listener) {
+    return el.detachEvent('on' + type, listener);
+  }
+}
+
+function fabricateEvent (el, type, model) {
+  var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();
+  if (el.dispatchEvent) {
+    el.dispatchEvent(e);
+  } else {
+    el.fireEvent('on' + type, e);
+  }
+  function makeClassicEvent () {
+    var e;
+    if (doc.createEvent) {
+      e = doc.createEvent('Event');
+      e.initEvent(type, true, true);
+    } else if (doc.createEventObject) {
+      e = doc.createEventObject();
+    }
+    return e;
+  }
+  function makeCustomEvent () {
+    return new customEvent(type, { detail: model });
+  }
+}
+
+function wrapperFactory (el, type, fn) {
+  return function wrapper (originalEvent) {
+    var e = originalEvent || global.event;
+    e.target = e.target || e.srcElement;
+    e.preventDefault = e.preventDefault || function preventDefault () { e.returnValue = false; };
+    e.stopPropagation = e.stopPropagation || function stopPropagation () { e.cancelBubble = true; };
+    e.which = e.which || e.keyCode;
+    fn.call(el, e);
+  };
+}
+
+function wrap (el, type, fn) {
+  var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);
+  hardCache.push({
+    wrapper: wrapper,
+    element: el,
+    type: type,
+    fn: fn
+  });
+  return wrapper;
+}
+
+function unwrap (el, type, fn) {
+  var i = find(el, type, fn);
+  if (i) {
+    var wrapper = hardCache[i].wrapper;
+    hardCache.splice(i, 1); // free up a tad of memory
+    return wrapper;
+  }
+}
+
+function find (el, type, fn) {
+  var i, item;
+  for (i = 0; i < hardCache.length; i++) {
+    item = hardCache[i];
+    if (item.element === el && item.type === type && item.fn === fn) {
+      return i;
+    }
+  }
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./eventmap":7,"custom-event":8}],7:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var eventmap = [];
+var eventname = '';
+var ron = /^on/;
+
+for (eventname in global) {
+  if (ron.test(eventname)) {
+    eventmap.push(eventname.slice(2));
+  }
+}
+
+module.exports = eventmap;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{}],8:[function(require,module,exports){
+(function (global){
+
+var NativeCustomEvent = global.CustomEvent;
+
+function useNative () {
+  try {
+    var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } });
+    return  'cat' === p.type && 'bar' === p.detail.foo;
+  } catch (e) {
+  }
+  return false;
+}
+
+/**
+ * Cross-browser `CustomEvent` constructor.
+ *
+ * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent
+ *
+ * @public
+ */
+
+module.exports = useNative() ? NativeCustomEvent :
+
+// IE >= 9
+'function' === typeof document.createEvent ? function CustomEvent (type, params) {
+  var e = document.createEvent('CustomEvent');
+  if (params) {
+    e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);
+  } else {
+    e.initCustomEvent(type, false, false, void 0);
+  }
+  return e;
+} :
+
+// IE <= 8
+function CustomEvent (type, params) {
+  var e = document.createEventObject();
+  e.type = type;
+  if (params) {
+    e.bubbles = Boolean(params.bubbles);
+    e.cancelable = Boolean(params.cancelable);
+    e.detail = params.detail;
+  } else {
+    e.bubbles = false;
+    e.cancelable = false;
+    e.detail = void 0;
+  }
+  return e;
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{}],9:[function(require,module,exports){
+var si = typeof setImmediate === 'function', tick;
+if (si) {
+  tick = function (fn) { setImmediate(fn); };
+} else {
+  tick = function (fn) { setTimeout(fn, 0); };
+}
+
+module.exports = tick;
+},{}]},{},[2])(2)
+});
+//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJjbGFzc2VzLmpzIiwiZHJhZ3VsYS5qcyIsIm5vZGVfbW9kdWxlcy9hdG9hL2F0b2EuanMiLCJub2RlX21vZHVsZXMvY29udHJhL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvbnRyYS9lbWl0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nyb3NzdmVudC9zcmMvY3Jvc3N2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2Nyb3NzdmVudC9zcmMvZXZlbnRtYXAuanMiLCJub2RlX21vZHVsZXMvY3VzdG9tLWV2ZW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpY2t5L3RpY2t5LWJyb3dzZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2htQkE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FjaGUgPSB7fTtcbnZhciBzdGFydCA9ICcoPzpefFxcXFxzKSc7XG52YXIgZW5kID0gJyg/OlxcXFxzfCQpJztcblxuZnVuY3Rpb24gbG9va3VwQ2xhc3MgKGNsYXNzTmFtZSkge1xuICB2YXIgY2FjaGVkID0gY2FjaGVbY2xhc3NOYW1lXTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIGNhY2hlZC5sYXN0SW5kZXggPSAwO1xuICB9IGVsc2Uge1xuICAgIGNhY2hlW2NsYXNzTmFtZV0gPSBjYWNoZWQgPSBuZXcgUmVnRXhwKHN0YXJ0ICsgY2xhc3NOYW1lICsgZW5kLCAnZycpO1xuICB9XG4gIHJldHVybiBjYWNoZWQ7XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzIChlbCwgY2xhc3NOYW1lKSB7XG4gIHZhciBjdXJyZW50ID0gZWwuY2xhc3NOYW1lO1xuICBpZiAoIWN1cnJlbnQubGVuZ3RoKSB7XG4gICAgZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICB9IGVsc2UgaWYgKCFsb29rdXBDbGFzcyhjbGFzc05hbWUpLnRlc3QoY3VycmVudCkpIHtcbiAgICBlbC5jbGFzc05hbWUgKz0gJyAnICsgY2xhc3NOYW1lO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJtQ2xhc3MgKGVsLCBjbGFzc05hbWUpIHtcbiAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lLnJlcGxhY2UobG9va3VwQ2xhc3MoY2xhc3NOYW1lKSwgJyAnKS50cmltKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGQ6IGFkZENsYXNzLFxuICBybTogcm1DbGFzc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVtaXR0ZXIgPSByZXF1aXJlKCdjb250cmEvZW1pdHRlcicpO1xudmFyIGNyb3NzdmVudCA9IHJlcXVpcmUoJ2Nyb3NzdmVudCcpO1xudmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL2NsYXNzZXMnKTtcbnZhciBkb2MgPSBkb2N1bWVudDtcbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXG5mdW5jdGlvbiBkcmFndWxhIChpbml0aWFsQ29udGFpbmVycywgb3B0aW9ucykge1xuICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGluaXRpYWxDb250YWluZXJzKSA9PT0gZmFsc2UpIHtcbiAgICBvcHRpb25zID0gaW5pdGlhbENvbnRhaW5lcnM7XG4gICAgaW5pdGlhbENvbnRhaW5lcnMgPSBbXTtcbiAgfVxuICB2YXIgX21pcnJvcjsgLy8gbWlycm9yIGltYWdlXG4gIHZhciBfc291cmNlOyAvLyBzb3VyY2UgY29udGFpbmVyXG4gIHZhciBfaXRlbTsgLy8gaXRlbSBiZWluZyBkcmFnZ2VkXG4gIHZhciBfb2Zmc2V0WDsgLy8gcmVmZXJlbmNlIHhcbiAgdmFyIF9vZmZzZXRZOyAvLyByZWZlcmVuY2UgeVxuICB2YXIgX21vdmVYOyAvLyByZWZlcmVuY2UgbW92ZSB4XG4gIHZhciBfbW92ZVk7IC8vIHJlZmVyZW5jZSBtb3ZlIHlcbiAgdmFyIF9pbml0aWFsU2libGluZzsgLy8gcmVmZXJlbmNlIHNpYmxpbmcgd2hlbiBncmFiYmVkXG4gIHZhciBfY3VycmVudFNpYmxpbmc7IC8vIHJlZmVyZW5jZSBzaWJsaW5nIG5vd1xuICB2YXIgX2NvcHk7IC8vIGl0ZW0gdXNlZCBmb3IgY29weWluZ1xuICB2YXIgX3JlbmRlclRpbWVyOyAvLyB0aW1lciBmb3Igc2V0VGltZW91dCByZW5kZXJNaXJyb3JJbWFnZVxuICB2YXIgX2xhc3REcm9wVGFyZ2V0ID0gbnVsbDsgLy8gbGFzdCBjb250YWluZXIgaXRlbSB3YXMgb3ZlclxuICB2YXIgX2dyYWJiZWQ7IC8vIGhvbGRzIG1vdXNlZG93biBjb250ZXh0IHVudGlsIGZpcnN0IG1vdXNlbW92ZVxuXG4gIHZhciBvID0gb3B0aW9ucyB8fCB7fTtcbiAgaWYgKG8ubW92ZXMgPT09IHZvaWQgMCkgeyBvLm1vdmVzID0gYWx3YXlzOyB9XG4gIGlmIChvLmFjY2VwdHMgPT09IHZvaWQgMCkgeyBvLmFjY2VwdHMgPSBhbHdheXM7IH1cbiAgaWYgKG8uaW52YWxpZCA9PT0gdm9pZCAwKSB7IG8uaW52YWxpZCA9IGludmFsaWRUYXJnZXQ7IH1cbiAgaWYgKG8uY29udGFpbmVycyA9PT0gdm9pZCAwKSB7IG8uY29udGFpbmVycyA9IGluaXRpYWxDb250YWluZXJzIHx8IFtdOyB9XG4gIGlmIChvLmlzQ29udGFpbmVyID09PSB2b2lkIDApIHsgby5pc0NvbnRhaW5lciA9IG5ldmVyOyB9XG4gIGlmIChvLmNvcHkgPT09IHZvaWQgMCkgeyBvLmNvcHkgPSBmYWxzZTsgfVxuICBpZiAoby5jb3B5U29ydFNvdXJjZSA9PT0gdm9pZCAwKSB7IG8uY29weVNvcnRTb3VyY2UgPSBmYWxzZTsgfVxuICBpZiAoby5yZXZlcnRPblNwaWxsID09PSB2b2lkIDApIHsgby5yZXZlcnRPblNwaWxsID0gZmFsc2U7IH1cbiAgaWYgKG8ucmVtb3ZlT25TcGlsbCA9PT0gdm9pZCAwKSB7IG8ucmVtb3ZlT25TcGlsbCA9IGZhbHNlOyB9XG4gIGlmIChvLmRpcmVjdGlvbiA9PT0gdm9pZCAwKSB7IG8uZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJzsgfVxuICBpZiAoby5pZ25vcmVJbnB1dFRleHRTZWxlY3Rpb24gPT09IHZvaWQgMCkgeyBvLmlnbm9yZUlucHV0VGV4dFNlbGVjdGlvbiA9IHRydWU7IH1cbiAgaWYgKG8ubWlycm9yQ29udGFpbmVyID09PSB2b2lkIDApIHsgby5taXJyb3JDb250YWluZXIgPSBkb2MuYm9keTsgfVxuXG4gIHZhciBkcmFrZSA9IGVtaXR0ZXIoe1xuICAgIGNvbnRhaW5lcnM6IG8uY29udGFpbmVycyxcbiAgICBzdGFydDogbWFudWFsU3RhcnQsXG4gICAgZW5kOiBlbmQsXG4gICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgcmVtb3ZlOiByZW1vdmUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBjYW5Nb3ZlOiBjYW5Nb3ZlLFxuICAgIGRyYWdnaW5nOiBmYWxzZVxuICB9KTtcblxuICBpZiAoby5yZW1vdmVPblNwaWxsID09PSB0cnVlKSB7XG4gICAgZHJha2Uub24oJ292ZXInLCBzcGlsbE92ZXIpLm9uKCdvdXQnLCBzcGlsbE91dCk7XG4gIH1cblxuICBldmVudHMoKTtcblxuICByZXR1cm4gZHJha2U7XG5cbiAgZnVuY3Rpb24gaXNDb250YWluZXIgKGVsKSB7XG4gICAgcmV0dXJuIGRyYWtlLmNvbnRhaW5lcnMuaW5kZXhPZihlbCkgIT09IC0xIHx8IG8uaXNDb250YWluZXIoZWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZXZlbnRzIChyZW1vdmUpIHtcbiAgICB2YXIgb3AgPSByZW1vdmUgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIHRvdWNoeShkb2N1bWVudEVsZW1lbnQsIG9wLCAnbW91c2Vkb3duJywgZ3JhYik7XG4gICAgdG91Y2h5KGRvY3VtZW50RWxlbWVudCwgb3AsICdtb3VzZXVwJywgcmVsZWFzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBldmVudHVhbE1vdmVtZW50cyAocmVtb3ZlKSB7XG4gICAgdmFyIG9wID0gcmVtb3ZlID8gJ3JlbW92ZScgOiAnYWRkJztcbiAgICB0b3VjaHkoZG9jdW1lbnRFbGVtZW50LCBvcCwgJ21vdXNlbW92ZScsIHN0YXJ0QmVjYXVzZU1vdXNlTW92ZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZW1lbnRzIChyZW1vdmUpIHtcbiAgICB2YXIgb3AgPSByZW1vdmUgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGNyb3NzdmVudFtvcF0oZG9jdW1lbnRFbGVtZW50LCAnc2VsZWN0c3RhcnQnLCBwcmV2ZW50R3JhYmJlZCk7IC8vIElFOFxuICAgIGNyb3NzdmVudFtvcF0oZG9jdW1lbnRFbGVtZW50LCAnY2xpY2snLCBwcmV2ZW50R3JhYmJlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95ICgpIHtcbiAgICBldmVudHModHJ1ZSk7XG4gICAgcmVsZWFzZSh7fSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2ZW50R3JhYmJlZCAoZSkge1xuICAgIGlmIChfZ3JhYmJlZCkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdyYWIgKGUpIHtcbiAgICBfbW92ZVggPSBlLmNsaWVudFg7XG4gICAgX21vdmVZID0gZS5jbGllbnRZO1xuXG4gICAgdmFyIGlnbm9yZSA9IHdoaWNoTW91c2VCdXR0b24oZSkgIT09IDEgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleTtcbiAgICBpZiAoaWdub3JlKSB7XG4gICAgICByZXR1cm47IC8vIHdlIG9ubHkgY2FyZSBhYm91dCBob25lc3QtdG8tZ29kIGxlZnQgY2xpY2tzIGFuZCB0b3VjaCBldmVudHNcbiAgICB9XG4gICAgdmFyIGl0ZW0gPSBlLnRhcmdldDtcbiAgICB2YXIgY29udGV4dCA9IGNhblN0YXJ0KGl0ZW0pO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfZ3JhYmJlZCA9IGNvbnRleHQ7XG4gICAgZXZlbnR1YWxNb3ZlbWVudHMoKTtcbiAgICBpZiAoZS50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgaWYgKGlzSW5wdXQoaXRlbSkpIHsgLy8gc2VlIGFsc286IGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8yMDhcbiAgICAgICAgaXRlbS5mb2N1cygpOyAvLyBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vYmV2YWNxdWEvZHJhZ3VsYS9pc3N1ZXMvMTc2XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7IC8vIGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8xNTVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydEJlY2F1c2VNb3VzZU1vdmVkIChlKSB7XG4gICAgaWYgKCFfZ3JhYmJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAod2hpY2hNb3VzZUJ1dHRvbihlKSA9PT0gMCkge1xuICAgICAgcmVsZWFzZSh7fSk7XG4gICAgICByZXR1cm47IC8vIHdoZW4gdGV4dCBpcyBzZWxlY3RlZCBvbiBhbiBpbnB1dCBhbmQgdGhlbiBkcmFnZ2VkLCBtb3VzZXVwIGRvZXNuJ3QgZmlyZS4gdGhpcyBpcyBvdXIgb25seSBob3BlXG4gICAgfVxuICAgIC8vIHRydXRoeSBjaGVjayBmaXhlcyAjMjM5LCBlcXVhbGl0eSBmaXhlcyAjMjA3XG4gICAgaWYgKGUuY2xpZW50WCAhPT0gdm9pZCAwICYmIGUuY2xpZW50WCA9PT0gX21vdmVYICYmIGUuY2xpZW50WSAhPT0gdm9pZCAwICYmIGUuY2xpZW50WSA9PT0gX21vdmVZKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvLmlnbm9yZUlucHV0VGV4dFNlbGVjdGlvbikge1xuICAgICAgdmFyIGNsaWVudFggPSBnZXRDb29yZCgnY2xpZW50WCcsIGUpO1xuICAgICAgdmFyIGNsaWVudFkgPSBnZXRDb29yZCgnY2xpZW50WScsIGUpO1xuICAgICAgdmFyIGVsZW1lbnRCZWhpbmRDdXJzb3IgPSBkb2MuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICAgIGlmIChpc0lucHV0KGVsZW1lbnRCZWhpbmRDdXJzb3IpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZ3JhYmJlZCA9IF9ncmFiYmVkOyAvLyBjYWxsIHRvIGVuZCgpIHVuc2V0cyBfZ3JhYmJlZFxuICAgIGV2ZW50dWFsTW92ZW1lbnRzKHRydWUpO1xuICAgIG1vdmVtZW50cygpO1xuICAgIGVuZCgpO1xuICAgIHN0YXJ0KGdyYWJiZWQpO1xuXG4gICAgdmFyIG9mZnNldCA9IGdldE9mZnNldChfaXRlbSk7XG4gICAgX29mZnNldFggPSBnZXRDb29yZCgncGFnZVgnLCBlKSAtIG9mZnNldC5sZWZ0O1xuICAgIF9vZmZzZXRZID0gZ2V0Q29vcmQoJ3BhZ2VZJywgZSkgLSBvZmZzZXQudG9wO1xuXG4gICAgY2xhc3Nlcy5hZGQoX2NvcHkgfHwgX2l0ZW0sICdndS10cmFuc2l0Jyk7XG4gICAgcmVuZGVyTWlycm9ySW1hZ2UoKTtcbiAgICBkcmFnKGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuU3RhcnQgKGl0ZW0pIHtcbiAgICBpZiAoZHJha2UuZHJhZ2dpbmcgJiYgX21pcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNDb250YWluZXIoaXRlbSkpIHtcbiAgICAgIHJldHVybjsgLy8gZG9uJ3QgZHJhZyBjb250YWluZXIgaXRzZWxmXG4gICAgfVxuICAgIHZhciBoYW5kbGUgPSBpdGVtO1xuICAgIHdoaWxlIChnZXRQYXJlbnQoaXRlbSkgJiYgaXNDb250YWluZXIoZ2V0UGFyZW50KGl0ZW0pKSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChvLmludmFsaWQoaXRlbSwgaGFuZGxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtID0gZ2V0UGFyZW50KGl0ZW0pOyAvLyBkcmFnIHRhcmdldCBzaG91bGQgYmUgYSB0b3AgZWxlbWVudFxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHNvdXJjZSA9IGdldFBhcmVudChpdGVtKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoby5pbnZhbGlkKGl0ZW0sIGhhbmRsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbW92YWJsZSA9IG8ubW92ZXMoaXRlbSwgc291cmNlLCBoYW5kbGUsIG5leHRFbChpdGVtKSk7XG4gICAgaWYgKCFtb3ZhYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICBzb3VyY2U6IHNvdXJjZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Nb3ZlIChpdGVtKSB7XG4gICAgcmV0dXJuICEhY2FuU3RhcnQoaXRlbSk7XG4gIH1cblxuICBmdW5jdGlvbiBtYW51YWxTdGFydCAoaXRlbSkge1xuICAgIHZhciBjb250ZXh0ID0gY2FuU3RhcnQoaXRlbSk7XG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIHN0YXJ0KGNvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0IChjb250ZXh0KSB7XG4gICAgaWYgKGlzQ29weShjb250ZXh0Lml0ZW0sIGNvbnRleHQuc291cmNlKSkge1xuICAgICAgX2NvcHkgPSBjb250ZXh0Lml0ZW0uY2xvbmVOb2RlKHRydWUpO1xuICAgICAgZHJha2UuZW1pdCgnY2xvbmVkJywgX2NvcHksIGNvbnRleHQuaXRlbSwgJ2NvcHknKTtcbiAgICB9XG5cbiAgICBfc291cmNlID0gY29udGV4dC5zb3VyY2U7XG4gICAgX2l0ZW0gPSBjb250ZXh0Lml0ZW07XG4gICAgX2luaXRpYWxTaWJsaW5nID0gX2N1cnJlbnRTaWJsaW5nID0gbmV4dEVsKGNvbnRleHQuaXRlbSk7XG5cbiAgICBkcmFrZS5kcmFnZ2luZyA9IHRydWU7XG4gICAgZHJha2UuZW1pdCgnZHJhZycsIF9pdGVtLCBfc291cmNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRUYXJnZXQgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZCAoKSB7XG4gICAgaWYgKCFkcmFrZS5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaXRlbSA9IF9jb3B5IHx8IF9pdGVtO1xuICAgIGRyb3AoaXRlbSwgZ2V0UGFyZW50KGl0ZW0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZ3JhYiAoKSB7XG4gICAgX2dyYWJiZWQgPSBmYWxzZTtcbiAgICBldmVudHVhbE1vdmVtZW50cyh0cnVlKTtcbiAgICBtb3ZlbWVudHModHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWxlYXNlIChlKSB7XG4gICAgdW5ncmFiKCk7XG5cbiAgICBpZiAoIWRyYWtlLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpdGVtID0gX2NvcHkgfHwgX2l0ZW07XG4gICAgdmFyIGNsaWVudFggPSBnZXRDb29yZCgnY2xpZW50WCcsIGUpO1xuICAgIHZhciBjbGllbnRZID0gZ2V0Q29vcmQoJ2NsaWVudFknLCBlKTtcbiAgICB2YXIgZWxlbWVudEJlaGluZEN1cnNvciA9IGdldEVsZW1lbnRCZWhpbmRQb2ludChfbWlycm9yLCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICB2YXIgZHJvcFRhcmdldCA9IGZpbmREcm9wVGFyZ2V0KGVsZW1lbnRCZWhpbmRDdXJzb3IsIGNsaWVudFgsIGNsaWVudFkpO1xuICAgIGlmIChkcm9wVGFyZ2V0ICYmICgoX2NvcHkgJiYgby5jb3B5U29ydFNvdXJjZSkgfHwgKCFfY29weSB8fCBkcm9wVGFyZ2V0ICE9PSBfc291cmNlKSkpIHtcbiAgICAgIGRyb3AoaXRlbSwgZHJvcFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChvLnJlbW92ZU9uU3BpbGwpIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcm9wIChpdGVtLCB0YXJnZXQpIHtcbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGl0ZW0pO1xuICAgIGlmIChfY29weSAmJiBvLmNvcHlTb3J0U291cmNlICYmIHRhcmdldCA9PT0gX3NvdXJjZSkge1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKF9pdGVtKTtcbiAgICB9XG4gICAgaWYgKGlzSW5pdGlhbFBsYWNlbWVudCh0YXJnZXQpKSB7XG4gICAgICBkcmFrZS5lbWl0KCdjYW5jZWwnLCBpdGVtLCBfc291cmNlLCBfc291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJha2UuZW1pdCgnZHJvcCcsIGl0ZW0sIHRhcmdldCwgX3NvdXJjZSwgX2N1cnJlbnRTaWJsaW5nKTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlICgpIHtcbiAgICBpZiAoIWRyYWtlLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpdGVtID0gX2NvcHkgfHwgX2l0ZW07XG4gICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChpdGVtKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoaXRlbSk7XG4gICAgfVxuICAgIGRyYWtlLmVtaXQoX2NvcHkgPyAnY2FuY2VsJyA6ICdyZW1vdmUnLCBpdGVtLCBwYXJlbnQsIF9zb3VyY2UpO1xuICAgIGNsZWFudXAoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCAocmV2ZXJ0KSB7XG4gICAgaWYgKCFkcmFrZS5kcmFnZ2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcmV2ZXJ0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gcmV2ZXJ0IDogby5yZXZlcnRPblNwaWxsO1xuICAgIHZhciBpdGVtID0gX2NvcHkgfHwgX2l0ZW07XG4gICAgdmFyIHBhcmVudCA9IGdldFBhcmVudChpdGVtKTtcbiAgICB2YXIgaW5pdGlhbCA9IGlzSW5pdGlhbFBsYWNlbWVudChwYXJlbnQpO1xuICAgIGlmIChpbml0aWFsID09PSBmYWxzZSAmJiByZXZlcnRzKSB7XG4gICAgICBpZiAoX2NvcHkpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChfY29weSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9zb3VyY2UuaW5zZXJ0QmVmb3JlKGl0ZW0sIF9pbml0aWFsU2libGluZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpbml0aWFsIHx8IHJldmVydHMpIHtcbiAgICAgIGRyYWtlLmVtaXQoJ2NhbmNlbCcsIGl0ZW0sIF9zb3VyY2UsIF9zb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcmFrZS5lbWl0KCdkcm9wJywgaXRlbSwgcGFyZW50LCBfc291cmNlLCBfY3VycmVudFNpYmxpbmcpO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwICgpIHtcbiAgICB2YXIgaXRlbSA9IF9jb3B5IHx8IF9pdGVtO1xuICAgIHVuZ3JhYigpO1xuICAgIHJlbW92ZU1pcnJvckltYWdlKCk7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGNsYXNzZXMucm0oaXRlbSwgJ2d1LXRyYW5zaXQnKTtcbiAgICB9XG4gICAgaWYgKF9yZW5kZXJUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KF9yZW5kZXJUaW1lcik7XG4gICAgfVxuICAgIGRyYWtlLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgaWYgKF9sYXN0RHJvcFRhcmdldCkge1xuICAgICAgZHJha2UuZW1pdCgnb3V0JywgaXRlbSwgX2xhc3REcm9wVGFyZ2V0LCBfc291cmNlKTtcbiAgICB9XG4gICAgZHJha2UuZW1pdCgnZHJhZ2VuZCcsIGl0ZW0pO1xuICAgIF9zb3VyY2UgPSBfaXRlbSA9IF9jb3B5ID0gX2luaXRpYWxTaWJsaW5nID0gX2N1cnJlbnRTaWJsaW5nID0gX3JlbmRlclRpbWVyID0gX2xhc3REcm9wVGFyZ2V0ID0gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSW5pdGlhbFBsYWNlbWVudCAodGFyZ2V0LCBzKSB7XG4gICAgdmFyIHNpYmxpbmc7XG4gICAgaWYgKHMgIT09IHZvaWQgMCkge1xuICAgICAgc2libGluZyA9IHM7XG4gICAgfSBlbHNlIGlmIChfbWlycm9yKSB7XG4gICAgICBzaWJsaW5nID0gX2N1cnJlbnRTaWJsaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWJsaW5nID0gbmV4dEVsKF9jb3B5IHx8IF9pdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldCA9PT0gX3NvdXJjZSAmJiBzaWJsaW5nID09PSBfaW5pdGlhbFNpYmxpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kRHJvcFRhcmdldCAoZWxlbWVudEJlaGluZEN1cnNvciwgY2xpZW50WCwgY2xpZW50WSkge1xuICAgIHZhciB0YXJnZXQgPSBlbGVtZW50QmVoaW5kQ3Vyc29yO1xuICAgIHdoaWxlICh0YXJnZXQgJiYgIWFjY2VwdGVkKCkpIHtcbiAgICAgIHRhcmdldCA9IGdldFBhcmVudCh0YXJnZXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuXG4gICAgZnVuY3Rpb24gYWNjZXB0ZWQgKCkge1xuICAgICAgdmFyIGRyb3BwYWJsZSA9IGlzQ29udGFpbmVyKHRhcmdldCk7XG4gICAgICBpZiAoZHJvcHBhYmxlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbW1lZGlhdGUgPSBnZXRJbW1lZGlhdGVDaGlsZCh0YXJnZXQsIGVsZW1lbnRCZWhpbmRDdXJzb3IpO1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IGdldFJlZmVyZW5jZSh0YXJnZXQsIGltbWVkaWF0ZSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgICB2YXIgaW5pdGlhbCA9IGlzSW5pdGlhbFBsYWNlbWVudCh0YXJnZXQsIHJlZmVyZW5jZSk7XG4gICAgICBpZiAoaW5pdGlhbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gc2hvdWxkIGFsd2F5cyBiZSBhYmxlIHRvIGRyb3AgaXQgcmlnaHQgYmFjayB3aGVyZSBpdCB3YXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBvLmFjY2VwdHMoX2l0ZW0sIHRhcmdldCwgX3NvdXJjZSwgcmVmZXJlbmNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcmFnIChlKSB7XG4gICAgaWYgKCFfbWlycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIHZhciBjbGllbnRYID0gZ2V0Q29vcmQoJ2NsaWVudFgnLCBlKTtcbiAgICB2YXIgY2xpZW50WSA9IGdldENvb3JkKCdjbGllbnRZJywgZSk7XG4gICAgdmFyIHggPSBjbGllbnRYIC0gX29mZnNldFg7XG4gICAgdmFyIHkgPSBjbGllbnRZIC0gX29mZnNldFk7XG5cbiAgICBfbWlycm9yLnN0eWxlLmxlZnQgPSB4ICsgJ3B4JztcbiAgICBfbWlycm9yLnN0eWxlLnRvcCA9IHkgKyAncHgnO1xuXG4gICAgdmFyIGl0ZW0gPSBfY29weSB8fCBfaXRlbTtcbiAgICB2YXIgZWxlbWVudEJlaGluZEN1cnNvciA9IGdldEVsZW1lbnRCZWhpbmRQb2ludChfbWlycm9yLCBjbGllbnRYLCBjbGllbnRZKTtcbiAgICB2YXIgZHJvcFRhcmdldCA9IGZpbmREcm9wVGFyZ2V0KGVsZW1lbnRCZWhpbmRDdXJzb3IsIGNsaWVudFgsIGNsaWVudFkpO1xuICAgIHZhciBjaGFuZ2VkID0gZHJvcFRhcmdldCAhPT0gbnVsbCAmJiBkcm9wVGFyZ2V0ICE9PSBfbGFzdERyb3BUYXJnZXQ7XG4gICAgaWYgKGNoYW5nZWQgfHwgZHJvcFRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgb3V0KCk7XG4gICAgICBfbGFzdERyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0O1xuICAgICAgb3ZlcigpO1xuICAgIH1cbiAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50KGl0ZW0pO1xuICAgIGlmIChkcm9wVGFyZ2V0ID09PSBfc291cmNlICYmIF9jb3B5ICYmICFvLmNvcHlTb3J0U291cmNlKSB7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlZmVyZW5jZTtcbiAgICB2YXIgaW1tZWRpYXRlID0gZ2V0SW1tZWRpYXRlQ2hpbGQoZHJvcFRhcmdldCwgZWxlbWVudEJlaGluZEN1cnNvcik7XG4gICAgaWYgKGltbWVkaWF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlKGRyb3BUYXJnZXQsIGltbWVkaWF0ZSwgY2xpZW50WCwgY2xpZW50WSk7XG4gICAgfSBlbHNlIGlmIChvLnJldmVydE9uU3BpbGwgPT09IHRydWUgJiYgIV9jb3B5KSB7XG4gICAgICByZWZlcmVuY2UgPSBfaW5pdGlhbFNpYmxpbmc7XG4gICAgICBkcm9wVGFyZ2V0ID0gX3NvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKF9jb3B5ICYmIHBhcmVudCkge1xuICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChyZWZlcmVuY2UgPT09IG51bGwgJiYgY2hhbmdlZCkgfHxcbiAgICAgIHJlZmVyZW5jZSAhPT0gaXRlbSAmJlxuICAgICAgcmVmZXJlbmNlICE9PSBuZXh0RWwoaXRlbSlcbiAgICApIHtcbiAgICAgIF9jdXJyZW50U2libGluZyA9IHJlZmVyZW5jZTtcbiAgICAgIGRyb3BUYXJnZXQuaW5zZXJ0QmVmb3JlKGl0ZW0sIHJlZmVyZW5jZSk7XG4gICAgICBkcmFrZS5lbWl0KCdzaGFkb3cnLCBpdGVtLCBkcm9wVGFyZ2V0LCBfc291cmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW92ZWQgKHR5cGUpIHsgZHJha2UuZW1pdCh0eXBlLCBpdGVtLCBfbGFzdERyb3BUYXJnZXQsIF9zb3VyY2UpOyB9XG4gICAgZnVuY3Rpb24gb3ZlciAoKSB7IGlmIChjaGFuZ2VkKSB7IG1vdmVkKCdvdmVyJyk7IH0gfVxuICAgIGZ1bmN0aW9uIG91dCAoKSB7IGlmIChfbGFzdERyb3BUYXJnZXQpIHsgbW92ZWQoJ291dCcpOyB9IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNwaWxsT3ZlciAoZWwpIHtcbiAgICBjbGFzc2VzLnJtKGVsLCAnZ3UtaGlkZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3BpbGxPdXQgKGVsKSB7XG4gICAgaWYgKGRyYWtlLmRyYWdnaW5nKSB7IGNsYXNzZXMuYWRkKGVsLCAnZ3UtaGlkZScpOyB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJNaXJyb3JJbWFnZSAoKSB7XG4gICAgaWYgKF9taXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlY3QgPSBfaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBfbWlycm9yID0gX2l0ZW0uY2xvbmVOb2RlKHRydWUpO1xuICAgIF9taXJyb3Iuc3R5bGUud2lkdGggPSBnZXRSZWN0V2lkdGgocmVjdCkgKyAncHgnO1xuICAgIF9taXJyb3Iuc3R5bGUuaGVpZ2h0ID0gZ2V0UmVjdEhlaWdodChyZWN0KSArICdweCc7XG4gICAgY2xhc3Nlcy5ybShfbWlycm9yLCAnZ3UtdHJhbnNpdCcpO1xuICAgIGNsYXNzZXMuYWRkKF9taXJyb3IsICdndS1taXJyb3InKTtcbiAgICBvLm1pcnJvckNvbnRhaW5lci5hcHBlbmRDaGlsZChfbWlycm9yKTtcbiAgICB0b3VjaHkoZG9jdW1lbnRFbGVtZW50LCAnYWRkJywgJ21vdXNlbW92ZScsIGRyYWcpO1xuICAgIGNsYXNzZXMuYWRkKG8ubWlycm9yQ29udGFpbmVyLCAnZ3UtdW5zZWxlY3RhYmxlJyk7XG4gICAgZHJha2UuZW1pdCgnY2xvbmVkJywgX21pcnJvciwgX2l0ZW0sICdtaXJyb3InKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZU1pcnJvckltYWdlICgpIHtcbiAgICBpZiAoX21pcnJvcikge1xuICAgICAgY2xhc3Nlcy5ybShvLm1pcnJvckNvbnRhaW5lciwgJ2d1LXVuc2VsZWN0YWJsZScpO1xuICAgICAgdG91Y2h5KGRvY3VtZW50RWxlbWVudCwgJ3JlbW92ZScsICdtb3VzZW1vdmUnLCBkcmFnKTtcbiAgICAgIGdldFBhcmVudChfbWlycm9yKS5yZW1vdmVDaGlsZChfbWlycm9yKTtcbiAgICAgIF9taXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEltbWVkaWF0ZUNoaWxkIChkcm9wVGFyZ2V0LCB0YXJnZXQpIHtcbiAgICB2YXIgaW1tZWRpYXRlID0gdGFyZ2V0O1xuICAgIHdoaWxlIChpbW1lZGlhdGUgIT09IGRyb3BUYXJnZXQgJiYgZ2V0UGFyZW50KGltbWVkaWF0ZSkgIT09IGRyb3BUYXJnZXQpIHtcbiAgICAgIGltbWVkaWF0ZSA9IGdldFBhcmVudChpbW1lZGlhdGUpO1xuICAgIH1cbiAgICBpZiAoaW1tZWRpYXRlID09PSBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW1tZWRpYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlIChkcm9wVGFyZ2V0LCB0YXJnZXQsIHgsIHkpIHtcbiAgICB2YXIgaG9yaXpvbnRhbCA9IG8uZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHJlZmVyZW5jZSA9IHRhcmdldCAhPT0gZHJvcFRhcmdldCA/IGluc2lkZSgpIDogb3V0c2lkZSgpO1xuICAgIHJldHVybiByZWZlcmVuY2U7XG5cbiAgICBmdW5jdGlvbiBvdXRzaWRlICgpIHsgLy8gc2xvd2VyLCBidXQgYWJsZSB0byBmaWd1cmUgb3V0IGFueSBwb3NpdGlvblxuICAgICAgdmFyIGxlbiA9IGRyb3BUYXJnZXQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgZWw7XG4gICAgICB2YXIgcmVjdDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBlbCA9IGRyb3BUYXJnZXQuY2hpbGRyZW5baV07XG4gICAgICAgIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGhvcml6b250YWwgJiYgKHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyKSA+IHgpIHsgcmV0dXJuIGVsOyB9XG4gICAgICAgIGlmICghaG9yaXpvbnRhbCAmJiAocmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDIpID4geSkgeyByZXR1cm4gZWw7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc2lkZSAoKSB7IC8vIGZhc3RlciwgYnV0IG9ubHkgYXZhaWxhYmxlIGlmIGRyb3BwZWQgaW5zaWRlIGEgY2hpbGQgZWxlbWVudFxuICAgICAgdmFyIHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoaG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh4ID4gcmVjdC5sZWZ0ICsgZ2V0UmVjdFdpZHRoKHJlY3QpIC8gMik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZSh5ID4gcmVjdC50b3AgKyBnZXRSZWN0SGVpZ2h0KHJlY3QpIC8gMik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZSAoYWZ0ZXIpIHtcbiAgICAgIHJldHVybiBhZnRlciA/IG5leHRFbCh0YXJnZXQpIDogdGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ29weSAoaXRlbSwgY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvLmNvcHkgPT09ICdib29sZWFuJyA/IG8uY29weSA6IG8uY29weShpdGVtLCBjb250YWluZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvdWNoeSAoZWwsIG9wLCB0eXBlLCBmbikge1xuICB2YXIgdG91Y2ggPSB7XG4gICAgbW91c2V1cDogJ3RvdWNoZW5kJyxcbiAgICBtb3VzZWRvd246ICd0b3VjaHN0YXJ0JyxcbiAgICBtb3VzZW1vdmU6ICd0b3VjaG1vdmUnXG4gIH07XG4gIHZhciBwb2ludGVycyA9IHtcbiAgICBtb3VzZXVwOiAncG9pbnRlcnVwJyxcbiAgICBtb3VzZWRvd246ICdwb2ludGVyZG93bicsXG4gICAgbW91c2Vtb3ZlOiAncG9pbnRlcm1vdmUnXG4gIH07XG4gIHZhciBtaWNyb3NvZnQgPSB7XG4gICAgbW91c2V1cDogJ01TUG9pbnRlclVwJyxcbiAgICBtb3VzZWRvd246ICdNU1BvaW50ZXJEb3duJyxcbiAgICBtb3VzZW1vdmU6ICdNU1BvaW50ZXJNb3ZlJ1xuICB9O1xuICBpZiAoZ2xvYmFsLm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZCkge1xuICAgIGNyb3NzdmVudFtvcF0oZWwsIHBvaW50ZXJzW3R5cGVdLCBmbik7XG4gIH0gZWxzZSBpZiAoZ2xvYmFsLm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKSB7XG4gICAgY3Jvc3N2ZW50W29wXShlbCwgbWljcm9zb2Z0W3R5cGVdLCBmbik7XG4gIH0gZWxzZSB7XG4gICAgY3Jvc3N2ZW50W29wXShlbCwgdG91Y2hbdHlwZV0sIGZuKTtcbiAgICBjcm9zc3ZlbnRbb3BdKGVsLCB0eXBlLCBmbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2hpY2hNb3VzZUJ1dHRvbiAoZSkge1xuICBpZiAoZS50b3VjaGVzICE9PSB2b2lkIDApIHsgcmV0dXJuIGUudG91Y2hlcy5sZW5ndGg7IH1cbiAgaWYgKGUud2hpY2ggIT09IHZvaWQgMCAmJiBlLndoaWNoICE9PSAwKSB7IHJldHVybiBlLndoaWNoOyB9IC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYmV2YWNxdWEvZHJhZ3VsYS9pc3N1ZXMvMjYxXG4gIGlmIChlLmJ1dHRvbnMgIT09IHZvaWQgMCkgeyByZXR1cm4gZS5idXR0b25zOyB9XG4gIHZhciBidXR0b24gPSBlLmJ1dHRvbjtcbiAgaWYgKGJ1dHRvbiAhPT0gdm9pZCAwKSB7IC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzk5ZThmZjFiYWE3YWUzNDFlOTRiYjg5YzNlODQ1NzBjN2MzYWQ5ZWEvc3JjL2V2ZW50LmpzI0w1NzMtTDU3NVxuICAgIHJldHVybiBidXR0b24gJiAxID8gMSA6IGJ1dHRvbiAmIDIgPyAzIDogKGJ1dHRvbiAmIDQgPyAyIDogMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0IChlbCkge1xuICB2YXIgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IHJlY3QubGVmdCArIGdldFNjcm9sbCgnc2Nyb2xsTGVmdCcsICdwYWdlWE9mZnNldCcpLFxuICAgIHRvcDogcmVjdC50b3AgKyBnZXRTY3JvbGwoJ3Njcm9sbFRvcCcsICdwYWdlWU9mZnNldCcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFNjcm9sbCAoc2Nyb2xsUHJvcCwgb2Zmc2V0UHJvcCkge1xuICBpZiAodHlwZW9mIGdsb2JhbFtvZmZzZXRQcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZ2xvYmFsW29mZnNldFByb3BdO1xuICB9XG4gIGlmIChkb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudFtzY3JvbGxQcm9wXTtcbiAgfVxuICByZXR1cm4gZG9jLmJvZHlbc2Nyb2xsUHJvcF07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCZWhpbmRQb2ludCAocG9pbnQsIHgsIHkpIHtcbiAgdmFyIHAgPSBwb2ludCB8fCB7fTtcbiAgdmFyIHN0YXRlID0gcC5jbGFzc05hbWU7XG4gIHZhciBlbDtcbiAgcC5jbGFzc05hbWUgKz0gJyBndS1oaWRlJztcbiAgZWwgPSBkb2MuZWxlbWVudEZyb21Qb2ludCh4LCB5KTtcbiAgcC5jbGFzc05hbWUgPSBzdGF0ZTtcbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBuZXZlciAoKSB7IHJldHVybiBmYWxzZTsgfVxuZnVuY3Rpb24gYWx3YXlzICgpIHsgcmV0dXJuIHRydWU7IH1cbmZ1bmN0aW9uIGdldFJlY3RXaWR0aCAocmVjdCkgeyByZXR1cm4gcmVjdC53aWR0aCB8fCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCk7IH1cbmZ1bmN0aW9uIGdldFJlY3RIZWlnaHQgKHJlY3QpIHsgcmV0dXJuIHJlY3QuaGVpZ2h0IHx8IChyZWN0LmJvdHRvbSAtIHJlY3QudG9wKTsgfVxuZnVuY3Rpb24gZ2V0UGFyZW50IChlbCkgeyByZXR1cm4gZWwucGFyZW50Tm9kZSA9PT0gZG9jID8gbnVsbCA6IGVsLnBhcmVudE5vZGU7IH1cbmZ1bmN0aW9uIGlzSW5wdXQgKGVsKSB7IHJldHVybiBlbC50YWdOYW1lID09PSAnSU5QVVQnIHx8IGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgZWwudGFnTmFtZSA9PT0gJ1NFTEVDVCcgfHwgaXNFZGl0YWJsZShlbCk7IH1cbmZ1bmN0aW9uIGlzRWRpdGFibGUgKGVsKSB7XG4gIGlmICghZWwpIHsgcmV0dXJuIGZhbHNlOyB9IC8vIG5vIHBhcmVudHMgd2VyZSBlZGl0YWJsZVxuICBpZiAoZWwuY29udGVudEVkaXRhYmxlID09PSAnZmFsc2UnKSB7IHJldHVybiBmYWxzZTsgfSAvLyBzdG9wIHRoZSBsb29rdXBcbiAgaWYgKGVsLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7IHJldHVybiB0cnVlOyB9IC8vIGZvdW5kIGEgY29udGVudEVkaXRhYmxlIGVsZW1lbnQgaW4gdGhlIGNoYWluXG4gIHJldHVybiBpc0VkaXRhYmxlKGdldFBhcmVudChlbCkpOyAvLyBjb250ZW50RWRpdGFibGUgaXMgc2V0IHRvICdpbmhlcml0J1xufVxuXG5mdW5jdGlvbiBuZXh0RWwgKGVsKSB7XG4gIHJldHVybiBlbC5uZXh0RWxlbWVudFNpYmxpbmcgfHwgbWFudWFsbHkoKTtcbiAgZnVuY3Rpb24gbWFudWFsbHkgKCkge1xuICAgIHZhciBzaWJsaW5nID0gZWw7XG4gICAgZG8ge1xuICAgICAgc2libGluZyA9IHNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgfSB3aGlsZSAoc2libGluZyAmJiBzaWJsaW5nLm5vZGVUeXBlICE9PSAxKTtcbiAgICByZXR1cm4gc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFdmVudEhvc3QgKGUpIHtcbiAgLy8gb24gdG91Y2hlbmQgZXZlbnQsIHdlIGhhdmUgdG8gdXNlIGBlLmNoYW5nZWRUb3VjaGVzYFxuICAvLyBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MTkyNTYzL3RvdWNoZW5kLWV2ZW50LXByb3BlcnRpZXNcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXZhY3F1YS9kcmFndWxhL2lzc3Vlcy8zNFxuICBpZiAoZS50YXJnZXRUb3VjaGVzICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZS50YXJnZXRUb3VjaGVzWzBdO1xuICB9XG4gIGlmIChlLmNoYW5nZWRUb3VjaGVzICYmIGUuY2hhbmdlZFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGUuY2hhbmdlZFRvdWNoZXNbMF07XG4gIH1cbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGdldENvb3JkIChjb29yZCwgZSkge1xuICB2YXIgaG9zdCA9IGdldEV2ZW50SG9zdChlKTtcbiAgdmFyIG1pc3NNYXAgPSB7XG4gICAgcGFnZVg6ICdjbGllbnRYJywgLy8gSUU4XG4gICAgcGFnZVk6ICdjbGllbnRZJyAvLyBJRThcbiAgfTtcbiAgaWYgKGNvb3JkIGluIG1pc3NNYXAgJiYgIShjb29yZCBpbiBob3N0KSAmJiBtaXNzTWFwW2Nvb3JkXSBpbiBob3N0KSB7XG4gICAgY29vcmQgPSBtaXNzTWFwW2Nvb3JkXTtcbiAgfVxuICByZXR1cm4gaG9zdFtjb29yZF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZHJhZ3VsYTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXRvYSAoYSwgbikgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwgbik7IH1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRpY2t5ID0gcmVxdWlyZSgndGlja3knKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWJvdW5jZSAoZm4sIGFyZ3MsIGN0eCkge1xuICBpZiAoIWZuKSB7IHJldHVybjsgfVxuICB0aWNreShmdW5jdGlvbiBydW4gKCkge1xuICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBhcmdzIHx8IFtdKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXRvYSA9IHJlcXVpcmUoJ2F0b2EnKTtcbnZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJy4vZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbWl0dGVyICh0aGluZywgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBldnQgPSB7fTtcbiAgaWYgKHRoaW5nID09PSB1bmRlZmluZWQpIHsgdGhpbmcgPSB7fTsgfVxuICB0aGluZy5vbiA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICAgIGlmICghZXZ0W3R5cGVdKSB7XG4gICAgICBldnRbdHlwZV0gPSBbZm5dO1xuICAgIH0gZWxzZSB7XG4gICAgICBldnRbdHlwZV0ucHVzaChmbik7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbiAgfTtcbiAgdGhpbmcub25jZSA9IGZ1bmN0aW9uICh0eXBlLCBmbikge1xuICAgIGZuLl9vbmNlID0gdHJ1ZTsgLy8gdGhpbmcub2ZmKGZuKSBzdGlsbCB3b3JrcyFcbiAgICB0aGluZy5vbih0eXBlLCBmbik7XG4gICAgcmV0dXJuIHRoaW5nO1xuICB9O1xuICB0aGluZy5vZmYgPSBmdW5jdGlvbiAodHlwZSwgZm4pIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGMgPT09IDEpIHtcbiAgICAgIGRlbGV0ZSBldnRbdHlwZV07XG4gICAgfSBlbHNlIGlmIChjID09PSAwKSB7XG4gICAgICBldnQgPSB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGV0ID0gZXZ0W3R5cGVdO1xuICAgICAgaWYgKCFldCkgeyByZXR1cm4gdGhpbmc7IH1cbiAgICAgIGV0LnNwbGljZShldC5pbmRleE9mKGZuKSwgMSk7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbiAgfTtcbiAgdGhpbmcuZW1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGF0b2EoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdGhpbmcuZW1pdHRlclNuYXBzaG90KGFyZ3Muc2hpZnQoKSkuYXBwbHkodGhpcywgYXJncyk7XG4gIH07XG4gIHRoaW5nLmVtaXR0ZXJTbmFwc2hvdCA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdmFyIGV0ID0gKGV2dFt0eXBlXSB8fCBbXSkuc2xpY2UoMCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gYXRvYShhcmd1bWVudHMpO1xuICAgICAgdmFyIGN0eCA9IHRoaXMgfHwgdGhpbmc7XG4gICAgICBpZiAodHlwZSA9PT0gJ2Vycm9yJyAmJiBvcHRzLnRocm93cyAhPT0gZmFsc2UgJiYgIWV0Lmxlbmd0aCkgeyB0aHJvdyBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBhcmdzOyB9XG4gICAgICBldC5mb3JFYWNoKGZ1bmN0aW9uIGVtaXR0ZXIgKGxpc3Rlbikge1xuICAgICAgICBpZiAob3B0cy5hc3luYykgeyBkZWJvdW5jZShsaXN0ZW4sIGFyZ3MsIGN0eCk7IH0gZWxzZSB7IGxpc3Rlbi5hcHBseShjdHgsIGFyZ3MpOyB9XG4gICAgICAgIGlmIChsaXN0ZW4uX29uY2UpIHsgdGhpbmcub2ZmKHR5cGUsIGxpc3Rlbik7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaW5nO1xuICAgIH07XG4gIH07XG4gIHJldHVybiB0aGluZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjdXN0b21FdmVudCA9IHJlcXVpcmUoJ2N1c3RvbS1ldmVudCcpO1xudmFyIGV2ZW50bWFwID0gcmVxdWlyZSgnLi9ldmVudG1hcCcpO1xudmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBhZGRFdmVudCA9IGFkZEV2ZW50RWFzeTtcbnZhciByZW1vdmVFdmVudCA9IHJlbW92ZUV2ZW50RWFzeTtcbnZhciBoYXJkQ2FjaGUgPSBbXTtcblxuaWYgKCFnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcikge1xuICBhZGRFdmVudCA9IGFkZEV2ZW50SGFyZDtcbiAgcmVtb3ZlRXZlbnQgPSByZW1vdmVFdmVudEhhcmQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGQ6IGFkZEV2ZW50LFxuICByZW1vdmU6IHJlbW92ZUV2ZW50LFxuICBmYWJyaWNhdGU6IGZhYnJpY2F0ZUV2ZW50XG59O1xuXG5mdW5jdGlvbiBhZGRFdmVudEVhc3kgKGVsLCB0eXBlLCBmbiwgY2FwdHVyaW5nKSB7XG4gIHJldHVybiBlbC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBjYXB0dXJpbmcpO1xufVxuXG5mdW5jdGlvbiBhZGRFdmVudEhhcmQgKGVsLCB0eXBlLCBmbikge1xuICByZXR1cm4gZWwuYXR0YWNoRXZlbnQoJ29uJyArIHR5cGUsIHdyYXAoZWwsIHR5cGUsIGZuKSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50RWFzeSAoZWwsIHR5cGUsIGZuLCBjYXB0dXJpbmcpIHtcbiAgcmV0dXJuIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZm4sIGNhcHR1cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50SGFyZCAoZWwsIHR5cGUsIGZuKSB7XG4gIHZhciBsaXN0ZW5lciA9IHVud3JhcChlbCwgdHlwZSwgZm4pO1xuICBpZiAobGlzdGVuZXIpIHtcbiAgICByZXR1cm4gZWwuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmYWJyaWNhdGVFdmVudCAoZWwsIHR5cGUsIG1vZGVsKSB7XG4gIHZhciBlID0gZXZlbnRtYXAuaW5kZXhPZih0eXBlKSA9PT0gLTEgPyBtYWtlQ3VzdG9tRXZlbnQoKSA6IG1ha2VDbGFzc2ljRXZlbnQoKTtcbiAgaWYgKGVsLmRpc3BhdGNoRXZlbnQpIHtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9IGVsc2Uge1xuICAgIGVsLmZpcmVFdmVudCgnb24nICsgdHlwZSwgZSk7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUNsYXNzaWNFdmVudCAoKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKGRvYy5jcmVhdGVFdmVudCkge1xuICAgICAgZSA9IGRvYy5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KSB7XG4gICAgICBlID0gZG9jLmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VDdXN0b21FdmVudCAoKSB7XG4gICAgcmV0dXJuIG5ldyBjdXN0b21FdmVudCh0eXBlLCB7IGRldGFpbDogbW9kZWwgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcHBlckZhY3RvcnkgKGVsLCB0eXBlLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlciAob3JpZ2luYWxFdmVudCkge1xuICAgIHZhciBlID0gb3JpZ2luYWxFdmVudCB8fCBnbG9iYWwuZXZlbnQ7XG4gICAgZS50YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCA9IGUucHJldmVudERlZmF1bHQgfHwgZnVuY3Rpb24gcHJldmVudERlZmF1bHQgKCkgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH07XG4gICAgZS5zdG9wUHJvcGFnYXRpb24gPSBlLnN0b3BQcm9wYWdhdGlvbiB8fCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24gKCkgeyBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7IH07XG4gICAgZS53aGljaCA9IGUud2hpY2ggfHwgZS5rZXlDb2RlO1xuICAgIGZuLmNhbGwoZWwsIGUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB3cmFwIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIHdyYXBwZXIgPSB1bndyYXAoZWwsIHR5cGUsIGZuKSB8fCB3cmFwcGVyRmFjdG9yeShlbCwgdHlwZSwgZm4pO1xuICBoYXJkQ2FjaGUucHVzaCh7XG4gICAgd3JhcHBlcjogd3JhcHBlcixcbiAgICBlbGVtZW50OiBlbCxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGZuOiBmblxuICB9KTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbmZ1bmN0aW9uIHVud3JhcCAoZWwsIHR5cGUsIGZuKSB7XG4gIHZhciBpID0gZmluZChlbCwgdHlwZSwgZm4pO1xuICBpZiAoaSkge1xuICAgIHZhciB3cmFwcGVyID0gaGFyZENhY2hlW2ldLndyYXBwZXI7XG4gICAgaGFyZENhY2hlLnNwbGljZShpLCAxKTsgLy8gZnJlZSB1cCBhIHRhZCBvZiBtZW1vcnlcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kIChlbCwgdHlwZSwgZm4pIHtcbiAgdmFyIGksIGl0ZW07XG4gIGZvciAoaSA9IDA7IGkgPCBoYXJkQ2FjaGUubGVuZ3RoOyBpKyspIHtcbiAgICBpdGVtID0gaGFyZENhY2hlW2ldO1xuICAgIGlmIChpdGVtLmVsZW1lbnQgPT09IGVsICYmIGl0ZW0udHlwZSA9PT0gdHlwZSAmJiBpdGVtLmZuID09PSBmbikge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBldmVudG1hcCA9IFtdO1xudmFyIGV2ZW50bmFtZSA9ICcnO1xudmFyIHJvbiA9IC9eb24vO1xuXG5mb3IgKGV2ZW50bmFtZSBpbiBnbG9iYWwpIHtcbiAgaWYgKHJvbi50ZXN0KGV2ZW50bmFtZSkpIHtcbiAgICBldmVudG1hcC5wdXNoKGV2ZW50bmFtZS5zbGljZSgyKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBldmVudG1hcDtcbiIsIlxudmFyIE5hdGl2ZUN1c3RvbUV2ZW50ID0gZ2xvYmFsLkN1c3RvbUV2ZW50O1xuXG5mdW5jdGlvbiB1c2VOYXRpdmUgKCkge1xuICB0cnkge1xuICAgIHZhciBwID0gbmV3IE5hdGl2ZUN1c3RvbUV2ZW50KCdjYXQnLCB7IGRldGFpbDogeyBmb286ICdiYXInIH0gfSk7XG4gICAgcmV0dXJuICAnY2F0JyA9PT0gcC50eXBlICYmICdiYXInID09PSBwLmRldGFpbC5mb287XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ3Jvc3MtYnJvd3NlciBgQ3VzdG9tRXZlbnRgIGNvbnN0cnVjdG9yLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FdmVudC5DdXN0b21FdmVudFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVzZU5hdGl2ZSgpID8gTmF0aXZlQ3VzdG9tRXZlbnQgOlxuXG4vLyBJRSA+PSA5XG4nZnVuY3Rpb24nID09PSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPyBmdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBlLmluaXRDdXN0b21FdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUsIHBhcmFtcy5kZXRhaWwpO1xuICB9IGVsc2Uge1xuICAgIGUuaW5pdEN1c3RvbUV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSwgdm9pZCAwKTtcbiAgfVxuICByZXR1cm4gZTtcbn0gOlxuXG4vLyBJRSA8PSA4XG5mdW5jdGlvbiBDdXN0b21FdmVudCAodHlwZSwgcGFyYW1zKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgZS50eXBlID0gdHlwZTtcbiAgaWYgKHBhcmFtcykge1xuICAgIGUuYnViYmxlcyA9IEJvb2xlYW4ocGFyYW1zLmJ1YmJsZXMpO1xuICAgIGUuY2FuY2VsYWJsZSA9IEJvb2xlYW4ocGFyYW1zLmNhbmNlbGFibGUpO1xuICAgIGUuZGV0YWlsID0gcGFyYW1zLmRldGFpbDtcbiAgfSBlbHNlIHtcbiAgICBlLmJ1YmJsZXMgPSBmYWxzZTtcbiAgICBlLmNhbmNlbGFibGUgPSBmYWxzZTtcbiAgICBlLmRldGFpbCA9IHZvaWQgMDtcbiAgfVxuICByZXR1cm4gZTtcbn1cbiIsInZhciBzaSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsIHRpY2s7XG5pZiAoc2kpIHtcbiAgdGljayA9IGZ1bmN0aW9uIChmbikgeyBzZXRJbW1lZGlhdGUoZm4pOyB9O1xufSBlbHNlIHtcbiAgdGljayA9IGZ1bmN0aW9uIChmbikgeyBzZXRUaW1lb3V0KGZuLCAwKTsgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0aWNrOyJdfQ==
+;
+!function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",monthsTitle:"选择月份",clear:"清除",format:"yyyy-mm-dd",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery);
+/**
+ * Simplified Chinese translation for bootstrap-datetimepicker
+ * Yuan Cheung <advanimal@gmail.com>
+ */
+
+;(function($){
+	$.fn.datetimepicker.dates['zh-CN'] = {
+			days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
+			daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
+			daysMin:  ["日", "一", "二", "三", "四", "五", "六", "日"],
+			months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+			monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+			today: "今天",
+			suffix: [],
+			meridiem: ["上午", "下午"]
+	};
+}(jQuery));
+(function( factory ) {
+  if ( typeof define === "function" && define.amd ) {
+    define( ["jquery", "../jquery.validate"], factory );
+  } else {
+    factory( jQuery );
+  }
+}(function( $ ) {
+
+  /*
+   * Translated default messages for the jQuery validation plugin.
+   * Locale: ZH (Chinese, 中文 (Zhōngwén), 汉语, 漢語)
+   */
+  $.extend($.validator.messages, {
+    required: "这是必填字段",
+    remote: "请修正此字段",
+    email: "请输入有效的电子邮件地址",
+    url: "请输入有效的网址",
+    date: "请输入有效的日期",
+    dateISO: "请输入有效的日期 (YYYY-MM-DD)",
+    number: "请输入有效的数字",
+    digits: "只能输入数字",
+    creditcard: "请输入有效的信用卡号码",
+    equalTo: "你的输入不相同",
+    extension: "请输入有效的后缀",
+    maxlength: $.validator.format("最多可以输入 {0} 个字符"),
+    minlength: $.validator.format("最少要输入 {0} 个字符"),
+    rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
+    range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
+    max: $.validator.format("请输入不大于 {0} 的数值"),
+    min: $.validator.format("请输入不小于 {0} 的数值")
+  });
+
+}));
+/*! Select2 4.0.8 | https://github.com/select2/select2/blob/master/LICENSE.md */
+
+
+!function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}();
+$(document).on('turbolinks:load', function() {
+  if ($('body.cooperative-carousels-index-page').length > 0) {
+    var resetNo = function(){
+      $('#carousels-container .custom-carousel-item-no').each(function(index, ele){
+        $(ele).html(index + 1);
+      })
+    }
+    // 删除后
+    $(document).on('delete_success', resetNo);
+    // ------------ 保存链接 -----------
+    $('.carousels-card').on('click', '.save-data-btn', function(){
+      var $link = $(this);
+      var id = $link.data('id');
+      var link = $('.custom-carousel-item-' + id).find('.link-input').val();
+      var name = $('.custom-carousel-item-' + id).find('.name-input').val();
+      if(!name || name.length == 0){
+        $.notify({ message: '名称不能为空' },{ type: 'danger' });
+        return;
+      }
+      $link.attr('disabled', true);
+
+      $.ajax({
+        url: '/cooperative/carousels/' + id,
+        method: 'PATCH',
+        dataType: 'json',
+        data: { link: link, name: name },
+        success: function(data){
+          $.notify({ message: '操作成功' });
+        },
+        error: ajaxErrorNotifyHandler,
+        complete: function(){
+          $link.removeAttr('disabled');
+        }
+      })
+    });
+    // -------------- 是否在首页展示 --------------
+    $('.carousels-card').on('change', '.online-check-box', function(){
+      var $checkbox = $(this);
+      var id = $checkbox.data('id');
+      var checked = $checkbox.is(':checked');
+      $checkbox.attr('disabled', true);
+
+      $.ajax({
+        url: '/cooperative/carousels/' + id,
+        method: 'PATCH',
+        dataType: 'json',
+        data: { status: checked },
+        success: function(data){
+          $.notify({ message: '保存成功' });
+          var box = $('.custom-carousel-item-' + id).find('.drag');
+          if(checked){
+            box.removeClass('not_active');
+          }else{
+            box.addClass('not_active');
+          }
+        },
+        error: ajaxErrorNotifyHandler,
+        complete: function(){
+          $checkbox.removeAttr('disabled');
+        }
+      })
+    });
+
+    // ------------ 拖拽 -------------
+    var onDropFunc = function(el, _target, _source, sibling){
+      var moveId = $(el).data('id');
+      var insertId = $(sibling).data('id') || '';
+
+      $.ajax({
+        url: '/cooperative/carousels/drag',
+        method: 'POST',
+        dataType: 'json',
+        data: { move_id: moveId, after_id: insertId },
+        success: function(data){
+          resetNo();
+        },
+        error: function(res){
+          var data = res.responseJSON;
+          $.notify({message: '移动失败,原因:' + data.message}, {type: 'danger'});
+        }
+      })
+    };
+    var ele1 = document.getElementById('carousels-container');
+    dragula([ele1], { mirrorContainer: ele1 }).on('drop', onDropFunc);
+
+
+    // ----------- 新增 --------------
+    var $createModal = $('.modal.cooperative-add-carousel-modal');
+    var $createForm = $createModal.find('form.cooperative-add-carousel-form');
+
+    $createForm.validate({
+      errorElement: 'span',
+      errorClass: 'danger text-danger',
+      rules: {
+        "portal_image[image]": {
+          required: true
+        },
+        "portal_image[name]": {
+          required: true
+        },
+      }
+    });
+
+    $createModal.on('show.bs.modal', function(event){
+      resetFileInputFunc($createModal.find('.img-file-input'));
+      $createModal.find('.file-names').html('选择文件');
+    });
+
+    $createModal.on('click', '.submit-btn', function() {
+      $createForm.find('.error').html('');
+
+      if ($createForm.valid()) {
+        $createForm.submit();
+      } else {
+        $createForm.find('.error').html('请选择图片');
+      }
+    });
+    $createModal.on('change', '.img-file-input', function(){
+      var file = $(this)[0].files[0];
+      $createModal.find('.file-names').html(file ? file.name : '请选择文件');
+    })
+
+    // -------------- 重新上传图片 --------------
+    //replace_image_url
+    $('.modal.cooperative-upload-file-modal').on('upload:success', function(e, data){
+      var $carouselItem = $('.custom-carousel-item-' + data.source_id);
+      $carouselItem.find('.custom-carousel-item-img img').attr('src', data.url);
+    })
+  }
+})
+;
+$(document).on('turbolinks:load', function() {
+  if ($('body.cooperative-laboratory-settings-edit-page, body.cooperative-laboratory-settings-update-page').length > 0) {
+    var $container = $('.edit-laboratory-setting-container');
+    var $form = $container.find('.edit_laboratory');
+
+    $('.logo-item-left').on("change", 'input[type="file"]', function () {
+      var $fileInput = $(this);
+      var file = this.files[0];
+      var imageType = /image.*/;
+      if (file && file.type.match(imageType)) {
+        var reader = new FileReader();
+        reader.onload = function () {
+          var $box = $fileInput.parent();
+          $box.find('img').attr('src', reader.result).css('display', 'block');
+          $box.addClass('has-img');
+        };
+        reader.readAsDataURL(file);
+      } else {
+      }
+    });
+
+    createMDEditor('laboratory-footer-editor', { height: 200, placeholder: '请输入备案信息' });
+
+    $form.validate({
+      errorElement: 'span',
+      errorClass: 'danger text-danger',
+      errorPlacement:function(error,element){
+        if(element.parent().hasClass("input-group")){
+          element.parent().after(error);
+        }else{
+          element.after(error)
+        }
+      },
+      rules: {
+        identifier: {
+          required: true,
+          checkSite: true
+        },
+        name: {
+          required: true
+        }
+      }
+    });
+    $.validator.addMethod("checkSite",function(value,element,params){
+      var checkSite = /^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$/;
+      return this.optional(element)||(checkSite.test(value + '.educoder.com'));
+    },"域名不合法!");
+
+    $form.on('click', '.submit-btn', function(){
+      $form.find('.submit-btn').attr('disabled', 'disabled');
+      $form.find('.error').html('');
+      var valid = $form.valid();
+
+      $('input[name="navbar[][name]"]').each(function(_, e){
+        var $ele = $(e);
+        if($ele.val() === undefined || $ele.val().length === 0){
+          $ele.addClass('danger text-danger');
+          valid = false;
+        } else {
+          $ele.removeClass('danger text-danger');
+        }
+      });
+
+      if(!valid) return;
+      $.ajax({
+        method: 'PATCH',
+        dataType: 'json',
+        url: $form.attr('action'),
+        data: new FormData($form[0]),
+        processData: false,
+        contentType: false,
+        success: function(data){
+          $.notify({ message: '保存成功' });
+          window.location.reload();
+        },
+        error: function(res){
+          var data = res.responseJSON;
+          $form.find('.error').html(data.message);
+        },
+        complete: function(){
+          $form.find('.submit-btn').attr('disabled', false);
+        }
+      });
+    })
+  }
+});
+$(document).on('turbolinks:load', function() {
+  if ($('body.cooperative-laboratory-users-index-page').length > 0) {
+    // ============= 添加管理员 ==============
+    var $addMemberModal = $('.cooperative-add-laboratory-user-modal');
+    var $addMemberForm = $addMemberModal.find('.cooperative-add-laboratory-user-form');
+    var $memberSelect = $addMemberModal.find('.laboratory-user-select');
+
+    $addMemberModal.on('show.bs.modal', function(event){
+      $memberSelect.select2('val', ' ');
+    });
+
+    $memberSelect.select2({
+      theme: 'bootstrap4',
+      placeholder: '请输入要添加的管理员姓名',
+      multiple: true,
+      minimumInputLength: 1,
+      ajax: {
+        delay: 500,
+        url: '/cooperative/users',
+        dataType: 'json',
+        data: function(params){
+          return { name: params.term };
+        },
+        processResults: function(data){
+          return { results: data.users }
+        }
+      },
+      templateResult: function (item) {
+        if(!item.id || item.id === '') return item.text;
+        return $("<span>" + item.real_name + " <span class='font-12'>" + item.school_name + ' ' + item.hidden_phone + "</span></span>");
+      },
+      templateSelection: function(item){
+        if (item.id) {
+        }
+        return item.real_name || item.text;
+      }
+    });
+
+    $addMemberModal.on('click', '.submit-btn', function(){
+      $addMemberForm.find('.error').html('');
+
+      var memberIds = $memberSelect.val();
+      if (memberIds && memberIds.length > 0) {
+        $.ajax({
+          method: 'POST',
+          dataType: 'json',
+          url: '/cooperative/laboratory_users',
+          data: { user_ids: memberIds },
+          success: function(data){
+            if(data && data.status == 0){
+              show_success_flash();
+              $addMemberModal.modal('hide');
+              window.location.reload();
+            }
+          }
+        });
+      } else {
+        $addMemberModal.modal('hide');
+      }
+    });
+  }
+});
+$(document).on('turbolinks:load', function() {
+  var $modal = $('.modal.cooperative-upload-file-modal');
+  if ($modal.length > 0) {
+    var $form = $modal.find('form.cooperative-upload-file-form')
+    var $sourceIdInput = $modal.find('input[name="source_id"]');
+    var $sourceTypeInput = $modal.find('input[name="source_type"]');
+
+    $modal.on('show.bs.modal', function(event){
+      var $link = $(event.relatedTarget);
+      var sourceId = $link.data('sourceId');
+      var sourceType = $link.data('sourceType');
+
+      $sourceIdInput.val(sourceId);
+      $sourceTypeInput.val(sourceType);
+
+      $modal.find('.upload-file-input').trigger('click');
+    });
+
+    $modal.find('.upload-file-input').on('change', function(e){
+      var file = $(this)[0].files[0];
+
+      if(file){
+        $modal.find('.file-names').html(file.name);
+        $modal.find('.submit-btn').trigger('click');
+      }
+    })
+
+    var formValid = function(){
+      if($form.find('input[name="file"]').val() == undefined || $form.find('input[name="file"]').val().length == 0){
+        $form.find('.error').html('请选择文件');
+        return false;
+      }
+
+      return true;
+    };
+
+    $modal.on('click', '.submit-btn', function(){
+      $form.find('.error').html('');
+
+      if (formValid()) {
+        var formDataString = $form.serialize();
+        $.ajax({
+          method: 'POST',
+          dataType: 'json',
+          url: '/cooperatives/files?' + formDataString,
+          data: new FormData($form[0]),
+          processData: false,
+          contentType: false,
+          success: function(data){
+            $.notify({ message: '上传成功' });
+            $modal.trigger('upload:success', data);
+            $modal.modal('hide');
+          },
+          error: function(res){
+            var data = res.responseJSON;
+            $form.find('.error').html(data.message);
+          }
+        });
+      }
+    });
+  }
+});
+$(document).on('turbolinks:load', function(){
+  $('#sidebarCollapse').on('click', function () {
+    $(this).toggleClass('active');
+    $('#sidebar').toggleClass('active');
+    $.cookie('cooperative_sidebar_collapse', $(this).hasClass('active'), {path: '/cooperative'});
+  });
+
+  var sidebarController = $('#sidebar').data('current-controller');
+  if (sidebarController.length > 0) {
+    $('#sidebar a.active').removeClass('active');
+    $('#sidebar ul.collapse.show').removeClass('show');
+    var activeLi = $('#sidebar a[data-controller="' + sidebarController + '"]');
+    activeLi.addClass('active');
+    activeLi.parent().parent('ul.collapse').addClass('show');
+  }
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+$.ajaxSetup({
+  beforeSend: function(xhr) {
+    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
+  }
+});
+
+// ******** select2 global config ********
+$.fn.select2.defaults.set('theme', 'bootstrap4');
+$.fn.select2.defaults.set('language', 'zh-CN');
+
+Turbolinks.setProgressBarDelay(200);
+
+$.notifyDefaults({
+  type: 'success',
+  z_index: 9999,
+  delay: 2000
+});
+
+$(document).on('turbolinks:load', function(){
+  $('[data-toggle="tooltip"]').tooltip({ trigger : 'hover' });
+  $('[data-toggle="popover"]').popover();
+
+  // 图片查看大图
+  $('img.preview-image').bootstrapViewer();
+
+  // flash alert提示框自动关闭
+  if($('.cooperative-alert-container .alert').length > 0){
+    setTimeout(function(){
+      $('.cooperative-alert-container .alert:not(.alert-danger)').alert('close');
+    }, 2000);
+    setTimeout(function(){
+      $('.cooperative-alert-container .alert.alert-danger').alert('close');
+    }, 5000);
+  }
+});
+
+$(document).on("turbolinks:before-cache", function () {
+  $('[data-toggle="tooltip"]').tooltip('hide');
+  $('[data-toggle="popover"]').popover('hide');
+});
+// var progressBar = new Turbolinks.ProgressBar();
+
+// $(document).on('ajax:send', function(event){
+//   console.log('ajax send', event);
+//   progressBar.setValue(0)
+//   progressBar.show()
+// });
+//
+// $(document).on('ajax:complete', function(event){
+//   console.log('ajax complete', event);
+//   progressBar.setValue(1)
+//   progressBar.hide() // 分页时不触发,奇怪
+// });
+// $(document).on('ajax:success', function(event){
+//   console.log('ajax success', event);
+// });
+// $(document).on('ajax:error', function(event){
+//   console.log('ajax error', event);
+// });
+
+$(function () {
+});
diff --git a/public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js.gz b/public/assets/cooperative-a309d245cd0b0b9c653db471c53ec090e49ba7ad885879ffa02a11b6efd79d74.js.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f14d1eb96f265c73d355b4e18387bc7ce8bd5202
GIT binary patch
literal 966858
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%0Dx(
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%0An1
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%0DegOB_L<={X(i+mn8#%X
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%0D@)s<f8f)f^`qEAx2H_$as@7>U)SA;5
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

literal 0
HcmV?d00001