+ * @see https://codeigniter.com/user_guide/general/urls.html
+ */
+ public function index()
+ {
+ $this->load->view('login');
+ }
+ public function dashboard()
+ {
+ $this->load->view('dashboard');
+ }
+ public function admin_login()
+ {
+
+ $username=$this->input->post('username');
+ $password=$this->input->post('password');
+
+ $check=$this->Common_model->get_login_detail($username,$password);
+
+ if($check->num_rows()>0)
+ {
+
+ $ch =$check->row();
+ //$usertype=$ch->user_type;
+ //$this->session->set_userdata('user_type',$ch->user_type);
+ $this->session->set_userdata('username',$ch->username);
+ $this->session->set_userdata('id',$ch->id);
+ $this->session->set_userdata('suc',' Successfully Logged in..!');
+ if($usertype!=2){
+ redirect('dashboard');}
+ else{
+ redirect('dashboard');}
+ }
+ else
+ {
+ $this->session->set_userdata('err','The username or password is incorrect.');
+ redirect('dashboard');
+ }
+
+ }
+
+}
diff --git a/application/views/errors/index.html b/admin/application/controllers/index.html
similarity index 100%
rename from application/views/errors/index.html
rename to admin/application/controllers/index.html
diff --git a/application/controllers/zSemester.php b/admin/application/controllers/zSemester.php
similarity index 100%
rename from application/controllers/zSemester.php
rename to admin/application/controllers/zSemester.php
diff --git a/application/views/index.html b/admin/application/core/index.html
similarity index 100%
rename from application/views/index.html
rename to admin/application/core/index.html
diff --git a/fonts/fontawesome-webfont3e6e.eot b/admin/application/fonts/fontawesome-webfont3e6e.eot
similarity index 100%
rename from fonts/fontawesome-webfont3e6e.eot
rename to admin/application/fonts/fontawesome-webfont3e6e.eot
diff --git a/fonts/fontawesome-webfont3e6e.svg b/admin/application/fonts/fontawesome-webfont3e6e.svg
similarity index 100%
rename from fonts/fontawesome-webfont3e6e.svg
rename to admin/application/fonts/fontawesome-webfont3e6e.svg
diff --git a/fonts/fontawesome-webfont3e6e.ttf b/admin/application/fonts/fontawesome-webfont3e6e.ttf
similarity index 100%
rename from fonts/fontawesome-webfont3e6e.ttf
rename to admin/application/fonts/fontawesome-webfont3e6e.ttf
diff --git a/fonts/fontawesome-webfont3e6e.woff b/admin/application/fonts/fontawesome-webfont3e6e.woff
similarity index 100%
rename from fonts/fontawesome-webfont3e6e.woff
rename to admin/application/fonts/fontawesome-webfont3e6e.woff
diff --git a/fonts/fontawesome-webfont3e6e.woff2 b/admin/application/fonts/fontawesome-webfont3e6e.woff2
similarity index 100%
rename from fonts/fontawesome-webfont3e6e.woff2
rename to admin/application/fonts/fontawesome-webfont3e6e.woff2
diff --git a/fonts/fontawesome-webfontd41d.eot b/admin/application/fonts/fontawesome-webfontd41d.eot
similarity index 100%
rename from fonts/fontawesome-webfontd41d.eot
rename to admin/application/fonts/fontawesome-webfontd41d.eot
diff --git a/admin/application/helpers/index.html b/admin/application/helpers/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/helpers/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/hooks/index.html b/admin/application/hooks/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/hooks/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/index.html b/admin/application/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/language/english/index.html b/admin/application/language/english/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/language/english/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/language/index.html b/admin/application/language/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/language/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/libraries/index.html b/admin/application/libraries/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/libraries/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/models/Common_model.php b/admin/application/models/Common_model.php
new file mode 100644
index 0000000..0ddf672
--- /dev/null
+++ b/admin/application/models/Common_model.php
@@ -0,0 +1,127 @@
+
+ * @version 0.0.0
+ */
+if (!defined('BASEPATH'))
+ exit('No direct script access allowed');
+
+class Common_model extends CI_Model {
+
+ public function __construct() {
+ parent::__construct();
+ }
+
+ /*
+ * Add a new user to the system
+ * $tableName -> Name of the table
+ * $tableData -> Array -> Table data
+ */
+
+ function insert_table($tableName, $tableData = array()) {
+ // Insert the user record
+ if (isset($tableData) && count($tableData) > 0) {
+ $this->db->insert($tableName, $tableData);
+ return $this->db->insert_id();
+ //echo $this->db->last_query(); exit;
+ }
+ return false;
+ }
+
+ /* get the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $showField -> Array -> what are the fields need to show
+ * */
+
+ public function selectTable($tableName, $whereData = array(), $showField = array('*'), $orWhereData = array(), $group = array(), $order = '', $having = '', $limit = array(), $result_way = 'all', $echo = 0,$inWhereData = array(),$notInWhereData = array()) {
+
+ $this->db->select($showField);
+ $this->db->from($tableName);
+ if (!empty($whereData) > 0) {
+ $this->db->where($whereData);
+ }
+ if (isset($orWhereData) && !empty($orWhereData)) {
+ $this->db->or_where($orWhereData);
+ }
+ if (isset($inWhereData) && !empty($inWhereData)) {
+ $this->db->where_in($inWhereData[0],$inWhereData[1]);
+ }
+ if (isset($notInWhereData) && !empty($notInWhereData)) {
+ $this->db->where_not_in($notInWhereData[0],$notInWhereData[1]);
+ }
+ if (!empty($group)) {
+ $this->db->group_by($group);
+ }
+ if ($order != '') {
+ $this->db->order_by($order,"DESC");
+ }
+ /*if (count($limit>0)) {
+ //$this->db->limit($limit[0],$limit[1]);//example $limit[0] = "0,10" where 0 is for offset and 10 for limit
+ }*/
+ $query = $this->db->get();
+
+ return $query;
+ }
+
+
+ /* update the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $updateData -> Array -> updated fields and data
+ * */
+
+ public function updateTable($tableName, $whereData = array(), $updateData = array()) {
+ $this->db->where($whereData);
+ $this->db->update($tableName, $updateData);
+ $return = $this->db->affected_rows() > 0;
+ return $return;
+ //$query->result_array();
+ //$query->num_rows();
+ }
+
+ /* update the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $updateData -> Array -> updated fields and data
+ * */
+
+ public function deleteTableData($tableName, $whereData = array()) {
+ // Insert the user record
+ if (isset($whereData) && count($whereData) > 0) {
+ $insert_id = $this->db->delete($tableName, $whereData);
+ return true;
+ }
+ return false;
+ }
+
+
+public function get_login_detail($username,$password)
+{
+ $this->db->select('*');
+ $this->db->from('user');
+ $this->db->where('username',$username);
+ $this->db->where(array('password'=>md5($password),'status'=>1));
+ $query = $this->db->get();
+ return $query;
+
+}
+
+
+ /*
+ * get a chat user to the system
+ */
+
+
+
+
+
+}
+
+/* End of file user_groups.php */
+/* Location: ./application/models/user_groups.php */
\ No newline at end of file
diff --git a/admin/application/models/Commonsql_model.php b/admin/application/models/Commonsql_model.php
new file mode 100644
index 0000000..386dc17
--- /dev/null
+++ b/admin/application/models/Commonsql_model.php
@@ -0,0 +1,76 @@
+ 0) {
+ $this->db->insert($tableName, $tableData);
+ return $this->db->insert_id();
+ }
+ return false;
+ }
+
+ /* get the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $showField -> Array -> what are the fields need to show
+ * */
+
+ public function selectTable($tableName, $whereData = array(), $showField = array('*'), $order = '') {
+
+ $this->db->select($showField);
+ $this->db->from($tableName);
+ if (!empty($whereData) > 0) {
+ $this->db->where($whereData);
+ }
+ if ($order != '') {
+ $this->db->order_by($order,"DESC");
+ }
+ /*if (count($limit>0)) {
+ //$this->db->limit($limit[0],$limit[1]);//example $limit[0] = "0,10" where 0 is for offset and 10 for limit
+ }*/
+ $query = $this->db->get();
+
+ return $query;
+ }
+
+
+ /* update the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $updateData -> Array -> updated fields and data
+ * */
+
+ public function updateTable($tableName, $whereData = array(), $updateData = array()) {
+ $this->db->where($whereData);
+ $this->db->update($tableName, $updateData);
+ $return = $this->db->affected_rows() > 0;
+ return $return;
+ //$query->result_array();
+ //$query->num_rows();
+ }
+
+ /* update the data to table
+ * $tableName -> Name of the table
+ * $whereData -> Array -> where fields
+ * $updateData -> Array -> updated fields and data
+ * */
+
+ public function deleteTableData($tableName, $whereData = array()) {
+ // Insert the user record
+ if (isset($whereData) && count($whereData) > 0) {
+ $insert_id = $this->db->delete($tableName, $whereData);
+ return true;
+ }
+ return false;
+ }
+
+
+}
diff --git a/admin/application/models/Department_model.php b/admin/application/models/Department_model.php
new file mode 100644
index 0000000..da3a074
--- /dev/null
+++ b/admin/application/models/Department_model.php
@@ -0,0 +1,21 @@
+db->select('*');
+ $this->db->from('department');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Employee_model.php b/admin/application/models/Employee_model.php
new file mode 100644
index 0000000..cbf9031
--- /dev/null
+++ b/admin/application/models/Employee_model.php
@@ -0,0 +1,30 @@
+db->select('*');
+ $this->db->from('employee');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+ function get_emp($id)
+ {
+ $this->db->select('*');
+ $this->db->from('employee');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Faculty.php b/admin/application/models/Faculty.php
new file mode 100644
index 0000000..4e548ef
--- /dev/null
+++ b/admin/application/models/Faculty.php
@@ -0,0 +1,31 @@
+db->select('*');
+ $this->db->from('Semester');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_sem($id)
+ {
+ $this->db->select('*');
+ $this->db->from('semester');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Faculty_model.php b/admin/application/models/Faculty_model.php
new file mode 100644
index 0000000..1de75b8
--- /dev/null
+++ b/admin/application/models/Faculty_model.php
@@ -0,0 +1,31 @@
+db->select('*');
+ $this->db->from('faculty');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_fac($id)
+ {
+ $this->db->select('*');
+ $this->db->from('faculty');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Project_model.php b/admin/application/models/Project_model.php
new file mode 100644
index 0000000..8d39234
--- /dev/null
+++ b/admin/application/models/Project_model.php
@@ -0,0 +1,63 @@
+db->select('p.*,d.name as deptname,s.name as studentName,f.name as facultyName');
+ $this->db->from('project as p');
+ $this->db->join('department as d','d.id=p.department','left' );
+ $this->db->join('student as s','s.id=p.student','left' );
+ $this->db->join('faculty as f','f.id=p.faculty','left' );
+ $this->db->where(array('p.status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_pro($id)
+ {
+ $this->db->select('*');
+ $this->db->from('project');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_dep()
+ {
+ $this->db->select('*');
+ $this->db->from('department');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_stu()
+ {
+ $this->db->select('*');
+ $this->db->from('student');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+ function get_fac()
+ {
+ $this->db->select('*');
+ $this->db->from('faculty');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Role.php b/admin/application/models/Role.php
new file mode 100644
index 0000000..83f6689
--- /dev/null
+++ b/admin/application/models/Role.php
@@ -0,0 +1,21 @@
+db->select('*');
+ $this->db->from('role');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Role_model.php b/admin/application/models/Role_model.php
new file mode 100644
index 0000000..cae9510
--- /dev/null
+++ b/admin/application/models/Role_model.php
@@ -0,0 +1,21 @@
+db->select('*');
+ $this->db->from('role');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Semester_model.php b/admin/application/models/Semester_model.php
new file mode 100644
index 0000000..4e548ef
--- /dev/null
+++ b/admin/application/models/Semester_model.php
@@ -0,0 +1,31 @@
+db->select('*');
+ $this->db->from('Semester');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_sem($id)
+ {
+ $this->db->select('*');
+ $this->db->from('semester');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Student_model.php b/admin/application/models/Student_model.php
new file mode 100644
index 0000000..ad6ebff
--- /dev/null
+++ b/admin/application/models/Student_model.php
@@ -0,0 +1,42 @@
+db->select('s.*,d.name as deptname');
+ $this->db->from('student as s');
+ $this->db->join('department as d','d.id=s.department','left' );
+ $this->db->where(array('s.status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_stu($id)
+ {
+ $this->db->select('*');
+ $this->db->from('student');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_dep()
+ {
+ $this->db->select('*');
+ $this->db->from('department');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/Subject_model.php b/admin/application/models/Subject_model.php
new file mode 100644
index 0000000..55c8d63
--- /dev/null
+++ b/admin/application/models/Subject_model.php
@@ -0,0 +1,31 @@
+db->select('*');
+ $this->db->from('subject');
+ $this->db->where(array('status'=>1));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+ function get_sub($id)
+ {
+ $this->db->select('*');
+ $this->db->from('subject');
+ $this->db->where(array('status'=>1,'id'=>$id));
+ $query = $this->db->get();
+ //echo $this->db->last_query();exit;
+ return $query;
+ }
+
+}
diff --git a/admin/application/models/index.html b/admin/application/models/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/models/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/third_party/index.html b/admin/application/third_party/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/third_party/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/application/views/add_emplayee/add.php b/admin/application/views/add_emplayee/add.php
similarity index 100%
rename from application/views/add_emplayee/add.php
rename to admin/application/views/add_emplayee/add.php
diff --git a/application/views/add_emplayee/edit.php b/admin/application/views/add_emplayee/edit.php
similarity index 100%
rename from application/views/add_emplayee/edit.php
rename to admin/application/views/add_emplayee/edit.php
diff --git a/application/views/dashboard.php b/admin/application/views/dashboard.php
similarity index 100%
rename from application/views/dashboard.php
rename to admin/application/views/dashboard.php
diff --git a/admin/application/views/department/add_department.php b/admin/application/views/department/add_department.php
new file mode 100644
index 0000000..97d88bd
--- /dev/null
+++ b/admin/application/views/department/add_department.php
@@ -0,0 +1,138 @@
+
+
+
+load->view('includes/header');?>
+
+
+ load->view('includes/sidebar');?>
+
+
+
+
+
+
+
+ - Home
+
+ - Department
+
+
+
+
+
+
+
+
+
+
+
+
+
+ load->view('includes/footer');?>
+
+
diff --git a/application/views/department/department_list.php b/admin/application/views/department/department_list.php
similarity index 100%
rename from application/views/department/department_list.php
rename to admin/application/views/department/department_list.php
diff --git a/application/views/department/zdepartment_list.php b/admin/application/views/department/zdepartment_list.php
similarity index 100%
rename from application/views/department/zdepartment_list.php
rename to admin/application/views/department/zdepartment_list.php
diff --git a/application/views/employee/employee.php b/admin/application/views/employee/employee.php
similarity index 100%
rename from application/views/employee/employee.php
rename to admin/application/views/employee/employee.php
diff --git a/application/views/errors/cli/error_404.php b/admin/application/views/errors/cli/error_404.php
similarity index 100%
rename from application/views/errors/cli/error_404.php
rename to admin/application/views/errors/cli/error_404.php
diff --git a/application/views/errors/cli/error_db.php b/admin/application/views/errors/cli/error_db.php
similarity index 100%
rename from application/views/errors/cli/error_db.php
rename to admin/application/views/errors/cli/error_db.php
diff --git a/application/views/errors/cli/error_exception.php b/admin/application/views/errors/cli/error_exception.php
similarity index 100%
rename from application/views/errors/cli/error_exception.php
rename to admin/application/views/errors/cli/error_exception.php
diff --git a/application/views/errors/cli/error_general.php b/admin/application/views/errors/cli/error_general.php
similarity index 100%
rename from application/views/errors/cli/error_general.php
rename to admin/application/views/errors/cli/error_general.php
diff --git a/application/views/errors/cli/error_php.php b/admin/application/views/errors/cli/error_php.php
similarity index 100%
rename from application/views/errors/cli/error_php.php
rename to admin/application/views/errors/cli/error_php.php
diff --git a/admin/application/views/errors/cli/index.html b/admin/application/views/errors/cli/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/views/errors/cli/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/application/views/errors/html/error_404.php b/admin/application/views/errors/html/error_404.php
similarity index 100%
rename from application/views/errors/html/error_404.php
rename to admin/application/views/errors/html/error_404.php
diff --git a/application/views/errors/html/error_db.php b/admin/application/views/errors/html/error_db.php
similarity index 100%
rename from application/views/errors/html/error_db.php
rename to admin/application/views/errors/html/error_db.php
diff --git a/application/views/errors/html/error_exception.php b/admin/application/views/errors/html/error_exception.php
similarity index 100%
rename from application/views/errors/html/error_exception.php
rename to admin/application/views/errors/html/error_exception.php
diff --git a/application/views/errors/html/error_general.php b/admin/application/views/errors/html/error_general.php
similarity index 100%
rename from application/views/errors/html/error_general.php
rename to admin/application/views/errors/html/error_general.php
diff --git a/application/views/errors/html/error_php.php b/admin/application/views/errors/html/error_php.php
similarity index 100%
rename from application/views/errors/html/error_php.php
rename to admin/application/views/errors/html/error_php.php
diff --git a/admin/application/views/errors/html/index.html b/admin/application/views/errors/html/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/views/errors/html/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/admin/application/views/errors/index.html b/admin/application/views/errors/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/views/errors/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/application/views/faculty/add_faculty.php b/admin/application/views/faculty/add_faculty.php
similarity index 100%
rename from application/views/faculty/add_faculty.php
rename to admin/application/views/faculty/add_faculty.php
diff --git a/application/views/faculty/edit_faculty.php b/admin/application/views/faculty/edit_faculty.php
similarity index 100%
rename from application/views/faculty/edit_faculty.php
rename to admin/application/views/faculty/edit_faculty.php
diff --git a/application/views/faculty/faculty_list.php b/admin/application/views/faculty/faculty_list.php
similarity index 100%
rename from application/views/faculty/faculty_list.php
rename to admin/application/views/faculty/faculty_list.php
diff --git a/application/views/includes/footer.php b/admin/application/views/includes/footer.php
similarity index 100%
rename from application/views/includes/footer.php
rename to admin/application/views/includes/footer.php
diff --git a/application/views/includes/header.php b/admin/application/views/includes/header.php
similarity index 100%
rename from application/views/includes/header.php
rename to admin/application/views/includes/header.php
diff --git a/application/views/includes/msg.php b/admin/application/views/includes/msg.php
similarity index 100%
rename from application/views/includes/msg.php
rename to admin/application/views/includes/msg.php
diff --git a/application/views/includes/sidebar.php b/admin/application/views/includes/sidebar.php
similarity index 100%
rename from application/views/includes/sidebar.php
rename to admin/application/views/includes/sidebar.php
diff --git a/admin/application/views/index.html b/admin/application/views/index.html
new file mode 100644
index 0000000..b702fbc
--- /dev/null
+++ b/admin/application/views/index.html
@@ -0,0 +1,11 @@
+
+
+
+ 403 Forbidden
+
+
+
+Directory access is forbidden.
+
+
+
diff --git a/application/views/login.php b/admin/application/views/login.php
similarity index 100%
rename from application/views/login.php
rename to admin/application/views/login.php
diff --git a/application/views/profile.php b/admin/application/views/profile.php
similarity index 100%
rename from application/views/profile.php
rename to admin/application/views/profile.php
diff --git a/application/views/project/add_project.php b/admin/application/views/project/add_project.php
similarity index 100%
rename from application/views/project/add_project.php
rename to admin/application/views/project/add_project.php
diff --git a/application/views/project/edit_project.php b/admin/application/views/project/edit_project.php
similarity index 100%
rename from application/views/project/edit_project.php
rename to admin/application/views/project/edit_project.php
diff --git a/application/views/project/project_list.php b/admin/application/views/project/project_list.php
similarity index 100%
rename from application/views/project/project_list.php
rename to admin/application/views/project/project_list.php
diff --git a/application/views/roles/role_list.php b/admin/application/views/roles/role_list.php
similarity index 100%
rename from application/views/roles/role_list.php
rename to admin/application/views/roles/role_list.php
diff --git a/application/views/semester/semester_list.php b/admin/application/views/semester/semester_list.php
similarity index 100%
rename from application/views/semester/semester_list.php
rename to admin/application/views/semester/semester_list.php
diff --git a/application/views/semester/zadd_semester.php b/admin/application/views/semester/zadd_semester.php
similarity index 100%
rename from application/views/semester/zadd_semester.php
rename to admin/application/views/semester/zadd_semester.php
diff --git a/application/views/semester/zedit_semester.php b/admin/application/views/semester/zedit_semester.php
similarity index 100%
rename from application/views/semester/zedit_semester.php
rename to admin/application/views/semester/zedit_semester.php
diff --git a/application/views/semester/zsemester_list.php b/admin/application/views/semester/zsemester_list.php
similarity index 100%
rename from application/views/semester/zsemester_list.php
rename to admin/application/views/semester/zsemester_list.php
diff --git a/application/views/student/add_student.php b/admin/application/views/student/add_student.php
similarity index 100%
rename from application/views/student/add_student.php
rename to admin/application/views/student/add_student.php
diff --git a/application/views/student/edit_student.php b/admin/application/views/student/edit_student.php
similarity index 100%
rename from application/views/student/edit_student.php
rename to admin/application/views/student/edit_student.php
diff --git a/application/views/student/student_list.php b/admin/application/views/student/student_list.php
similarity index 100%
rename from application/views/student/student_list.php
rename to admin/application/views/student/student_list.php
diff --git a/application/views/subject/add_subject.php b/admin/application/views/subject/add_subject.php
similarity index 100%
rename from application/views/subject/add_subject.php
rename to admin/application/views/subject/add_subject.php
diff --git a/application/views/subject/edit_subject.php b/admin/application/views/subject/edit_subject.php
similarity index 100%
rename from application/views/subject/edit_subject.php
rename to admin/application/views/subject/edit_subject.php
diff --git a/application/views/subject/subject_list.php b/admin/application/views/subject/subject_list.php
similarity index 100%
rename from application/views/subject/subject_list.php
rename to admin/application/views/subject/subject_list.php
diff --git a/application/views/welcome_message.php b/admin/application/views/welcome_message.php
similarity index 100%
rename from application/views/welcome_message.php
rename to admin/application/views/welcome_message.php
diff --git a/admin/assets/app.js b/admin/assets/app.js
new file mode 100644
index 0000000..a75572a
--- /dev/null
+++ b/admin/assets/app.js
@@ -0,0 +1,757 @@
+/**
+ * Document : app.js
+ * Author : redstar
+ * Description: Core script to handle the entire theme and core functions
+ *
+ **/
+var App = function() {
+
+ // IE mode
+ var isIE8 = false;
+ var isIE9 = false;
+ var isIE10 = false;
+
+ var resizeHandlers = [];
+
+ var assetsPath = '';
+
+ var globalImgPath = 'img/';
+
+ var globalPluginsPath = 'global/plugins/';
+
+ var globalCssPath = 'css/';
+
+ /************* Setting for IE ****************/
+ var handleInit = function() {
+
+
+ isIE8 = !!navigator.userAgent.match(/MSIE 8.0/);
+ isIE9 = !!navigator.userAgent.match(/MSIE 9.0/);
+ isIE10 = !!navigator.userAgent.match(/MSIE 10.0/);
+
+ if (isIE10) {
+ $('html').addClass('ie10'); // detect IE10 version
+ }
+
+ if (isIE10 || isIE9 || isIE8) {
+ $('html').addClass('ie'); // detect IE10 version
+ }
+ };
+
+ /*************** Change theme color *************/
+ var handleColorSetting = function() {
+
+ $(document).on('click', '.control-sidebar-btn', function () {
+ jQuery( ".quick-setting" ).toggle( "slide");
+ });
+
+ };
+
+ /*************** Change Language *************/
+ var handleLanguage = function() {
+
+ $(document).on('click', '.language-switch .dropdown-menu li a', function () {
+ $(".language-switch>a").html($(this).html()+'');
+ $(".language-switch>a img").addClass("position-left");
+ });
+
+ };
+ /*************** Hover Sidemenu *************/
+ var handleHoverSidemenu = function() {
+ $(".sidemenu-hover-submenu").parent().parent().css("position","relative");
+ };
+
+ /************* Handle theme layout ****************/
+ var handleTheme = function() {
+
+ var panel = $('.chatpane');
+
+ if ($('body').hasClass('page-boxed') === false) {
+ $('.layout-option', panel).val("fluid");
+ }
+
+ $('.sidebar-option', panel).val("default");
+ $('.page-header-option', panel).val("fixed");
+ $('.page-footer-option', panel).val("default");
+ if ($('.sidebar-pos-option').attr("disabled") === false) {
+ $('.sidebar-pos-option', panel).val('left');
+ }
+ var lastSelectedLayout = '';
+
+ var setLayout = function() {
+
+ var layoutOption = $('.layout-option', panel).val();
+ var sidebarOption = $('.sidebar-option', panel).val();
+ var headerOption = $('.page-header-option', panel).val();
+ var footerOption = $('.page-footer-option', panel).val();
+ var sidebarPosOption = $('.sidebar-pos-option', panel).val();
+ var sidebarStyleOption = $('.sidebar-style-option', panel).val();
+ var sidebarMenuOption = $('.sidebar-menu-option', panel).val();
+ var headerTopDropdownStyle = $('.page-header-top-dropdown-style-option', panel).val();
+
+ if (sidebarOption == "fixed" && headerOption == "default") {
+ alert('Default Header with Fixed Sidebar option is not supported. Proceed with Fixed Header with Fixed Sidebar.');
+ $('.page-header-option', panel).val("fixed");
+ $('.sidebar-option', panel).val("fixed");
+ sidebarOption = 'fixed';
+ headerOption = 'fixed';
+ }
+
+ resetLayout(); // reset layout to default state
+
+ if (layoutOption === "boxed") {
+ $("body").addClass("page-boxed");
+
+ // set header
+ $('.page-header > .page-header-inner').addClass("container");
+ var cont = $('body > .clearfix').after('');
+
+ // set content
+ $('.page-container').appendTo('body > .container');
+
+ // set footer
+ if (footerOption === 'fixed') {
+ $('.page-footer').html('' + $('.page-footer').html() + '
');
+ } else {
+ $('.page-footer').appendTo('body > .container');
+ }
+ }
+
+ if (lastSelectedLayout != layoutOption) {
+ //layout changed, run responsive handler:
+ App.runResizeHandlers();
+ }
+ lastSelectedLayout = layoutOption;
+
+ /************ header ******************/
+ if (headerOption === 'fixed') {
+ $("body").addClass("page-header-fixed");
+ $(".page-header").removeClass("navbar-static-top").addClass("navbar-fixed-top");
+ } else {
+ $("body").removeClass("page-header-fixed");
+ $(".page-header").removeClass("navbar-fixed-top").addClass("navbar-static-top");
+ }
+
+ /************ sidebar *****************/
+ if ($('body').hasClass('page-full-width') === false) {
+ if (sidebarOption === 'fixed') {
+ $("body").addClass("sidemenu-container-fixed");
+ $("sidemenu").addClass("sidemenu-fixed");
+ $("sidemenu").removeClass("page-sidebar-menu-default");
+ Layout.initFixedSidebarHoverEffect();
+ } else {
+ $("body").removeClass("sidemenu-container-fixed");
+ $("page-sidebar-menu").addClass("page-sidebar-menu-default");
+ $("page-sidebar-menu").removeClass("sidemenu-default");
+ $('.sidemenu').unbind('mouseenter').unbind('mouseleave');
+ }
+ }
+
+ /********* top dropdown style ************/
+ if (headerTopDropdownStyle === 'dark') {
+ $(".top-menu > .navbar-nav > li.dropdown").addClass("dropdown-dark");
+ } else {
+ $(".top-menu > .navbar-nav > li.dropdown").removeClass("dropdown-dark");
+ }
+
+ /************* footer ****************/
+ if (footerOption === 'fixed') {
+ $("body").addClass("page-footer-fixed");
+ } else {
+ $("body").removeClass("page-footer-fixed");
+ }
+
+ /*********** sidebar style ***************/
+ if (sidebarStyleOption === 'light') {
+ $(".page-sidebar-menu").addClass("page-sidebar-menu-light");
+ } else {
+ $(".page-sidebar-menu").removeClass("page-sidebar-menu-light");
+ }
+
+ /********* sidebar menu ***********************/
+ if (sidebarMenuOption === 'hover') {
+ if (sidebarOption == 'fixed') {
+ $('.sidebar-menu-option', panel).val("accordion");
+ alert("Hover Sidebar Menu is not compatible with Fixed Sidebar Mode. Select Default Sidebar Mode Instead.");
+ } else {
+ $(".sidemenu").addClass("sidemenu-hover-submenu");
+ }
+ } else {
+ $(".sidemenu").removeClass("sidemenu-hover-submenu");
+ }
+
+ /**************** sidebar left right position setting **************/
+ if (sidebarPosOption === 'right') {
+ $("body").addClass("sidemenu-container-reversed");
+ $('#frontend-link').tooltip('destroy').tooltip({
+ placement: 'left'
+ });
+ } else {
+ $("body").removeClass("sidemenu-container-reversed");
+ $('#frontend-link').tooltip('destroy').tooltip({
+ placement: 'right'
+ });
+ }
+
+ Layout.fixContentHeight(); // fix content height
+ Layout.initFixedSidebar(); // reinitialize fixed sidebar
+ };
+
+ $(document).on('click', '.toggler', panel, function() {
+ $('.toggler').hide();
+ $('.toggler-close').show();
+ $('.chatpane > .theme-options').show();
+ });
+
+ $(document).on('click', '.toggler-close', panel, function() {
+ $('.toggler').show();
+ $('.toggler-close').hide();
+ $('.chatpane > .theme-options').hide();
+ });
+
+ /*************** spinner button ******************/
+ $(document).on('click', '.spinner button', function() {
+ var btn = $(this);
+ var input = btn.closest('.spinner').find('input');
+ var step = 1;
+ if (input.attr('step') != undefined) {
+ step = parseInt(input.attr('step'),10);
+ }
+ if (btn.attr('data-dir') == 'up') {
+ if (input.attr('max') == undefined || parseInt(input.val(),10) < parseInt(input.attr('max'),10)) {
+ input.val(parseInt(input.val(), 10) + step);
+ } else {
+ btn.next("disabled", true);
+ }
+ } else {
+ if (input.attr('min') == undefined || parseInt(input.val(),10) > parseInt(input.attr('min'),10)) {
+ input.val(parseInt(input.val(), 10) - step);
+ } else {
+ btn.prev("disabled", true);
+ }
+ }
+ });
+
+ /*************** TO DO **********************/
+ $(document).on('click', '.todo-check label', function() {
+ $(this).parents('li').children('.todo-title').toggleClass('line-through');
+ });
+ $(document).on('click', '.todo-remove', function() {
+ $(this).closest("li").remove();
+ return false;
+ });
+
+ $(document).on('click', '.panel .tools .fa-times', function() {
+ $(this).parents(".panel").parent().remove();
+ });
+ $('.tooltips').tooltip();
+
+ // clickable row for email
+ $(document).on('click', '.clickable-row', function() {
+ window.document.location = $(this).data("link");
+ });
+
+
+ /************* collapse button in panel***************8*/
+ $(document).on('click', '.card .tools .t-collapse', function() {
+ var el = $(this).parents(".card").children(".card-body");
+ if ($(this).hasClass("fa-chevron-down")) {
+ $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up");
+ el.slideUp(200);
+ } else {
+ $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down");
+ el.slideDown(200);
+ }
+ });
+
+ /**************** close button in panel *****************/
+ $(document).on('click', '.card .tools .t-close', function() {
+ $(this).parents(".card").parent().remove();
+ });
+
+ /****************** refresh button in panel *****************/
+ $('.box-refresh').on('click', function(br) {
+ br.preventDefault();
+ $("
").appendTo($(this).parents('.tools').parents('.card-head').parents('.card'));
+ setTimeout(function() {
+ $('.refresh-block').remove();
+ }, 1000);
+ });
+
+ /***************** set default theme options **************************/
+
+ if ($("body").hasClass("page-boxed")) {
+ $('.layout-option', panel).val("boxed");
+ }
+
+ if ($("body").hasClass("sidemenu-container-fixed")) {
+ $('.sidebar-option', panel).val("fixed");
+ }
+
+ if ($("body").hasClass("page-header-fixed")) {
+ $('.page-header-option', panel).val("fixed");
+ }
+
+ if ($("body").hasClass("page-footer-fixed")) {
+ $('.page-footer-option', panel).val("fixed");
+ }
+
+ if ($("body").hasClass("sidemenu-container-reversed")) {
+ $('.sidebar-pos-option', panel).val("right");
+ }
+
+ if ($(".page-sidebar-menu").hasClass("page-sidebar-menu-light")) {
+ $('.sidebar-style-option', panel).val("light");
+ }
+
+ if ($(".page-sidebar-menu").hasClass("page-sidebar-menu-hover-submenu")) {
+ $('.sidebar-menu-option', panel).val("hover");
+ }
+
+ var sidebarOption = $('.sidebar-option', panel).val();
+ var headerOption = $('.page-header-option', panel).val();
+ var footerOption = $('.page-footer-option', panel).val();
+ var sidebarPosOption = $('.sidebar-pos-option', panel).val();
+ var sidebarStyleOption = $('.sidebar-style-option', panel).val();
+ var sidebarMenuOption = $('.sidebar-menu-option', panel).val();
+
+ $('.layout-option, .page-header-option, .page-header-top-dropdown-style-option, .sidebar-option, .page-footer-option, .sidebar-pos-option, .sidebar-style-option, .sidebar-menu-option', panel).change(setLayout);
+ };
+
+ /************ Reset theme layout ********************/
+ var resetLayout = function() {
+ $("body").
+ removeClass("page-boxed").
+ removeClass("page-footer-fixed").
+ removeClass("sidemenu-container-fixed").
+ removeClass("page-header-fixed").
+ removeClass("sidemenu-container-reversed");
+
+ $('.page-header > .page-header-inner').removeClass("container");
+
+ if ($('.page-container').parent(".container").length === 1) {
+ $('.page-container').insertAfter('body > .clearfix');
+ }
+
+ if ($('.page-footer > .container').length === 1) {
+ $('.page-footer').html($('.page-footer > .container').html());
+ } else if ($('.page-footer').parent(".container").length === 1) {
+ $('.page-footer').insertAfter('.page-container');
+ $('.scroll-to-top').insertAfter('.page-footer');
+ }
+
+ $(".top-menu > .navbar-nav > li.dropdown").removeClass("dropdown-dark");
+
+ $('body > .container').remove();
+ };
+
+
+ // runs callback functions set by App.addResponsiveHandler().
+ var _runResizeHandlers = function() {
+ // reinitialize other subscribed elements
+ for (var i = 0; i < resizeHandlers.length; i++) {
+ var each = resizeHandlers[i];
+ each.call();
+ }
+ };
+
+ /********** handle the layout reinitialization on window resize ***********/
+ var handleOnResize = function() {
+ var resize;
+ if (isIE8) {
+ var currheight;
+ $(window).resize(function() {
+ if (currheight == document.documentElement.clientHeight) {
+ return; //quite event since only body resized not window.
+ }
+ if (resize) {
+ clearTimeout(resize);
+ }
+ resize = setTimeout(function() {
+ _runResizeHandlers();
+ }, 50); // wait 50ms until window resize finishes.
+ currheight = document.documentElement.clientHeight; // store last body client height
+ });
+ } else {
+ $(window).resize(function() {
+ if (resize) {
+ clearTimeout(resize);
+ }
+ resize = setTimeout(function() {
+ _runResizeHandlers();
+ }, 50); // wait 50ms until window resize finishes.
+ });
+ }
+ };
+
+ /*************** Handles Bootstrap switches in setting panel ********/
+ var handleBootstrapSwitch = function() {
+ if (!$().bootstrapSwitch) {
+ return;
+ }
+ $('.make-switch').bootstrapSwitch();
+ };
+
+ /*************** Handles Bootstrap Tabs **********************/
+ var handleTabs = function() {
+ //activate tab if tab id provided in the URL
+ if (encodeURI(location.hash)) {
+ var tabid = encodeURI(location.hash.substr(1));
+ $('a[href="#' + tabid + '"]').parents('.tab-pane:hidden').each(function() {
+ var tabid = $(this).attr("id");
+ $('a[href="#' + tabid + '"]').click();
+ });
+ $('a[href="#' + tabid + '"]').click();
+ }
+
+ if ($().tabdrop) {
+ $('.tabbable-tabdrop .nav-pills, .tabbable-tabdrop .nav-tabs').tabdrop({
+ text: ' '
+ });
+ }
+ };
+
+ /************* Handles Bootstrap Dropdowns ********************/
+ var handleDropdowns = function() {
+ /*
+ Hold dropdown on click
+ */
+ $('body').on('click', '.dropdown-menu.hold-on-click', function(e) {
+ e.stopPropagation();
+ });
+ };
+
+ /************** Handles counterup plugin wrapper ****************/
+ var handleCounterup = function() {
+ if (!$().counterUp) {
+ return;
+ }
+
+ $("[data-counter='counterup']").counterUp({
+ delay: 10,
+ time: 1000
+ });
+ };
+
+ // Fix input placeholder issue for IE8 and IE9
+ var handleFixInputPlaceholderForIE = function() {
+ //fix html5 placeholder attribute for ie7 & ie8
+ if (isIE8 || isIE9) { // ie8 & ie9
+ // this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need this for password fields)
+ $('input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)').each(function() {
+ var input = $(this);
+
+ if (input.val() === '' && input.attr("placeholder") !== '') {
+ input.addClass("placeholder").val(input.attr('placeholder'));
+ }
+
+ input.focus(function() {
+ if (input.val() == input.attr('placeholder')) {
+ input.val('');
+ }
+ });
+
+ input.blur(function() {
+ if (input.val() === '' || input.val() == input.attr('placeholder')) {
+ input.val(input.attr('placeholder'));
+ }
+ });
+ });
+ }
+ };
+
+ // Handle Select2 Dropdowns
+ var handleSelect2 = function() {
+ if ($().select2) {
+ $.fn.select2.defaults.set("theme", "bootstrap");
+ $('.select2me').select2({
+ placeholder: "Select",
+ width: 'auto',
+ allowClear: true
+ });
+ }
+ };
+
+ // handle group element heights
+ var handleHeight = function() {
+ $('[data-auto-height]').each(function() {
+ var parent = $(this);
+ var items = $('[data-height]', parent);
+ var height = 0;
+ var mode = parent.attr('data-mode');
+ var data_offset = parent.attr('data-offset') ? parent.attr('data-offset') : 0;
+ var offset = parseInt(data_offset,10);
+
+ items.each(function() {
+ if ($(this).attr('data-height') == "height") {
+ $(this).css('height', '');
+ } else {
+ $(this).css('min-height', '');
+ }
+
+ var height_ = (mode == 'base-height' ? $(this).outerHeight() : $(this).outerHeight(true));
+ if (height_ > height) {
+ height = height_;
+ }
+ });
+
+ height = height + offset;
+
+ items.each(function() {
+ if ($(this).attr('data-height') == "height") {
+ $(this).css('height', height);
+ } else {
+ $(this).css('min-height', height);
+ }
+ });
+
+ if (parent.attr('data-related')) {
+ $(parent.attr('data-related')).css('height', parent.height());
+ }
+ });
+ }
+
+ // Handles quick sidebar toggler
+ var handleQuickSidebarToggler = function() {
+ // close sidebar using button click
+ $(document).on('click', '.dropdown-quick-sidebar-toggler a', function(e) {
+ $('body').toggleClass('chat-sidebar-open');
+ });
+ // close sidebar when click outside box
+ $(document).on('click', '.page-content', function(e) {
+ if($("body").hasClass("chat-sidebar-open")){
+ $('body').toggleClass('chat-sidebar-open');
+ }
+ });
+ // close sidebar using esc key
+ $( document ).on( 'keydown', function ( e ) {
+ if ( e.keyCode === 27 && $("body").hasClass("chat-sidebar-open")) { // ESC
+ $('body').toggleClass('chat-sidebar-open');
+ }
+ });
+ };
+
+ /********Sidebar slim-menu*********/
+ var handleslimscroll_menu = function() {
+ $(".slimscroll-style").slimscroll({
+ height: $( window ).height() - 90,
+ position: "right",
+ size: "5px",
+ color: "#9ea5ab",
+ wheelStep: 5
+ });
+ $(".small-slimscroll-style").slimscroll({
+ height: "260px",
+ position: "right",
+ size: "5px",
+ color: "#9ea5ab",
+ wheelStep: 5
+ });
+ };
+
+ handleChatScrollbar = function() {
+ var t = $(".chat-sidebar-chat"),
+ i = function() {
+ var i, a = t.find(".chat-sidebar-item"),
+ e = $(".chat-sidebar-chat-users").attr("data-height");
+ i = $(".chat-sidebar-chat-users").attr("data-height") - 80 - t.find(".nav-justified > .nav-tabs").outerHeight(), a.attr("data-height", i), a.css("height", e + "px"), a.css("overflow-y", "auto")
+ };
+ i(), App.addResizeHandler(i)
+ };
+
+ // Handles quick sidebar settings
+ var handleQuickSidebarSettings = function() {
+ var wrapper = $('.chat-sidebar-container');
+
+ var initSettingsSlimScroll = function() {
+ var settingsList = wrapper.find('.chat-sidebar-settings-list');
+ var settingsListHeight;
+
+ settingsListHeight = wrapper.height() - 80 - wrapper.find('.nav-justified > .nav-tabs').outerHeight();
+
+ // alerts list
+ settingsList.attr("data-height", settingsListHeight);
+ settingsList.css("height", wrapper.height() + "px");
+ settingsList.css("overflow-y", "auto");
+ };
+
+ initSettingsSlimScroll();
+ App.addResizeHandler(initSettingsSlimScroll); // reinitialize on window resize
+ };
+
+
+
+ //* END:CORE HANDLERS *//
+
+ return {
+
+ //main function to initiate the theme
+ init: function() {
+
+ //Core handlers
+ handleInit(); // initialize core variables
+ handleTheme();
+ handleOnResize(); // set and handle responsive
+ handleColorSetting();
+ handleLanguage();
+ handleHoverSidemenu();
+
+ //UI Component handlers
+ handleBootstrapSwitch(); // handle bootstrap switch plugin
+ handleSelect2(); // handle custom Select2 dropdowns
+ handleDropdowns(); // handle dropdowns
+ handleTabs(); // handle tabs
+ handleCounterup(); // handle counterup instances
+
+ handleQuickSidebarToggler(); // handles quick sidebar's toggler
+ handleQuickSidebarSettings(); // handles quick sidebar's setting
+ handleChatScrollbar();
+
+ handleslimscroll_menu();
+
+ //Handle group element heights
+ this.addResizeHandler(handleHeight); // handle auto calculating height on window resize
+
+ handleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix
+ },
+
+ //public function to add callback a function which will be called on window resize
+ addResizeHandler: function(func) {
+ resizeHandlers.push(func);
+ },
+
+ //public functon to call _runresizeHandlers
+ runResizeHandlers: function() {
+ _runResizeHandlers();
+ },
+
+ // wrApper function to scroll(focus) to an element
+ scrollTo: function(el, offeset) {
+ var pos = (el && el.length > 0) ? el.offset().top : 0;
+
+ if (el) {
+ if ($('body').hasClass('page-header-fixed')) {
+ pos = pos - $('.page-header').height();
+ } else if ($('body').hasClass('page-header-top-fixed')) {
+ pos = pos - $('.page-header-top').height();
+ } else if ($('body').hasClass('page-header-menu-fixed')) {
+ pos = pos - $('.page-header-menu').height();
+ }
+ pos = pos + (offeset ? offeset : -1 * el.height());
+ }
+
+ $('html,body').animate({
+ scrollTop: pos
+ }, 'slow');
+ },
+ // function to scroll to the top
+ scrollTop: function() {
+ App.scrollTo();
+ },
+
+ startPageLoading: function(options) {
+ if (options && options.animate) {
+ $('.page-spinner-bar').remove();
+ $('body').append('');
+ } else {
+ $('.page-loading').remove();
+ $('body').append(' ' + (options && options.message ? options.message : 'Loading...') + ' ');
+ }
+ },
+
+ stopPageLoading: function() {
+ $('.page-loading, .page-spinner-bar').remove();
+ },
+
+ //public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported)
+ getActualVal: function(el) {
+ el = $(el);
+ if (el.val() === el.attr("placeholder")) {
+ return "";
+ }
+ return el.val();
+ },
+
+ //public function to get a paremeter by name from URL
+ getURLParameter: function(paramName) {
+ var searchString = window.location.search.substring(1),
+ i, val, params = searchString.split("&");
+
+ for (i = 0; i < params.length; i++) {
+ val = params[i].split("=");
+ if (val[0] == paramName) {
+ return unescape(val[1]);
+ }
+ }
+ return null;
+ },
+
+ getViewPort: function() {
+ var e = window,
+ a = 'inner';
+ if (!('innerWidth' in window)) {
+ a = 'client';
+ e = document.documentElement || document.body;
+ }
+
+ return {
+ width: e[a + 'Width'],
+ height: e[a + 'Height']
+ };
+ },
+
+ getUniqueID: function(prefix) {
+ return 'prefix_' + Math.floor(Math.random() * (new Date()).getTime());
+ },
+
+ // check IE8 mode
+ isIE8: function() {
+ return isIE8;
+ },
+
+ // check IE9 mode
+ isIE9: function() {
+ return isIE9;
+ },
+
+ getAssetsPath: function() {
+ return assetsPath;
+ },
+
+ setAssetsPath: function(path) {
+ assetsPath = path;
+ },
+
+ setGlobalImgPath: function(path) {
+ globalImgPath = path;
+ },
+
+ getGlobalImgPath: function() {
+ return assetsPath + globalImgPath;
+ },
+
+ getGlobalCssPath: function() {
+ return assetsPath + globalCssPath;
+ },
+
+ getResponsiveBreakpoint: function(size) {
+ // bootstrap responsive breakpoints
+ var sizes = {
+ 'xs': 480, // extra small
+ 'sm': 768, // small
+ 'md': 992, // medium
+ 'lg': 1200 // large
+ };
+
+ return sizes[size] ? sizes[size] : 0;
+ }
+ };
+
+}();
+
+jQuery(document).ready(function() {
+ App.init(); // init core componets
+ $(".chat-sidebar-chat-user-messages").animate({
+ scrollTop: $(document).height()
+ }, 1000);
+});
\ No newline at end of file
diff --git a/admin/assets/bootstrap-colorpicker/css/bootstrap-colorpicker.css b/admin/assets/bootstrap-colorpicker/css/bootstrap-colorpicker.css
new file mode 100644
index 0000000..c446ef8
--- /dev/null
+++ b/admin/assets/bootstrap-colorpicker/css/bootstrap-colorpicker.css
@@ -0,0 +1,222 @@
+/*!
+ * Bootstrap Colorpicker v2.3.6
+ * https://itsjavi.com/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */
+.colorpicker-saturation {
+ width: 100px;
+ height: 100px;
+ background-image: url("../img/bootstrap-colorpicker/saturation.png");
+ cursor: crosshair;
+ float: left;
+}
+.colorpicker-saturation i {
+ display: block;
+ height: 5px;
+ width: 5px;
+ border: 1px solid #000;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: -4px 0 0 -4px;
+}
+.colorpicker-saturation i b {
+ display: block;
+ height: 5px;
+ width: 5px;
+ border: 1px solid #fff;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.colorpicker-hue,
+.colorpicker-alpha {
+ width: 15px;
+ height: 100px;
+ float: left;
+ cursor: row-resize;
+ margin-left: 4px;
+ margin-bottom: 4px;
+}
+.colorpicker-hue i,
+.colorpicker-alpha i {
+ display: block;
+ height: 1px;
+ background: #000;
+ border-top: 1px solid #fff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ margin-top: -1px;
+}
+.colorpicker-hue {
+ background-image: url("../img/bootstrap-colorpicker/hue.png");
+}
+.colorpicker-alpha {
+ background-image: url("../img/bootstrap-colorpicker/alpha.png");
+ display: none;
+}
+.colorpicker-saturation,
+.colorpicker-hue,
+.colorpicker-alpha {
+ background-size: contain;
+}
+.colorpicker {
+ padding: 4px;
+ min-width: 130px;
+ margin-top: 1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ z-index: 2500;
+}
+.colorpicker:before,
+.colorpicker:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.colorpicker:after {
+ clear: both;
+}
+.colorpicker:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+ top: -7px;
+ left: 6px;
+}
+.colorpicker:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ position: absolute;
+ top: -6px;
+ left: 7px;
+}
+.colorpicker div {
+ position: relative;
+}
+.colorpicker.colorpicker-with-alpha {
+ min-width: 140px;
+}
+.colorpicker.colorpicker-with-alpha .colorpicker-alpha {
+ display: block;
+}
+.colorpicker-color {
+ height: 10px;
+ margin-top: 5px;
+ clear: both;
+ background-image: url("../img/bootstrap-colorpicker/alpha.png");
+ background-position: 0 100%;
+}
+.colorpicker-color div {
+ height: 10px;
+}
+.colorpicker-selectors {
+ display: none;
+ height: 10px;
+ margin-top: 5px;
+ clear: both;
+}
+.colorpicker-selectors i {
+ cursor: pointer;
+ float: left;
+ height: 10px;
+ width: 10px;
+}
+.colorpicker-selectors i + i {
+ margin-left: 3px;
+}
+.colorpicker-element .input-group-addon i,
+.colorpicker-element .add-on i {
+ display: inline-block;
+ cursor: pointer;
+ height: 16px;
+ vertical-align: text-top;
+ width: 16px;
+}
+.colorpicker.colorpicker-inline {
+ position: relative;
+ display: inline-block;
+ float: none;
+ z-index: auto;
+}
+.colorpicker.colorpicker-horizontal {
+ width: 110px;
+ min-width: 110px;
+ height: auto;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-saturation {
+ margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-color {
+ width: 100px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+ width: 100px;
+ height: 15px;
+ float: left;
+ cursor: col-resize;
+ margin-left: 0px;
+ margin-bottom: 4px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue i,
+.colorpicker.colorpicker-horizontal .colorpicker-alpha i {
+ display: block;
+ height: 15px;
+ background: #ffffff;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 1px;
+ border: none;
+ margin-top: 0px;
+}
+.colorpicker.colorpicker-horizontal .colorpicker-hue {
+ background-image: url("../img/bootstrap-colorpicker/hue-horizontal.png");
+}
+.colorpicker.colorpicker-horizontal .colorpicker-alpha {
+ background-image: url("../img/bootstrap-colorpicker/alpha-horizontal.png");
+}
+.colorpicker.colorpicker-hidden {
+ display: none;
+}
+.colorpicker.colorpicker-visible {
+ display: block;
+}
+.colorpicker-inline.colorpicker-visible {
+ display: inline-block;
+}
+.colorpicker-right:before {
+ left: auto;
+ right: 6px;
+}
+.colorpicker-right:after {
+ left: auto;
+ right: 7px;
+}
+.colorpicker-no-arrow:before {
+ border-right: 0;
+ border-left: 0;
+}
+.colorpicker-no-arrow:after {
+ border-right: 0;
+ border-left: 0;
+}
+/*# sourceMappingURL=bootstrap-colorpicker.css.map */
\ No newline at end of file
diff --git a/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png
new file mode 100644
index 0000000..f831889
Binary files /dev/null and b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha-horizontal.png differ
diff --git a/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png
new file mode 100644
index 0000000..2e53a30
Binary files /dev/null and b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/alpha.png differ
diff --git a/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png
new file mode 100644
index 0000000..3dcd594
Binary files /dev/null and b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue-horizontal.png differ
diff --git a/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png
new file mode 100644
index 0000000..6f5ec2e
Binary files /dev/null and b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/hue.png differ
diff --git a/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png
new file mode 100644
index 0000000..170841c
Binary files /dev/null and b/admin/assets/bootstrap-colorpicker/img/bootstrap-colorpicker/saturation.png differ
diff --git a/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker-init.js b/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker-init.js
new file mode 100644
index 0000000..eed6bdb
--- /dev/null
+++ b/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker-init.js
@@ -0,0 +1,3 @@
+$(function() { $('#colorinput1').colorpicker({ color: "", format: "hex" }); });
+$(function() { $('#colorinput2').colorpicker({ color: "#AA3399", format: "rgba"}); });
+$(function() { $('#cp1').colorpicker(); });
\ No newline at end of file
diff --git a/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker.js b/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker.js
new file mode 100644
index 0000000..0fa68ba
--- /dev/null
+++ b/admin/assets/bootstrap-colorpicker/js/bootstrap-colorpicker.js
@@ -0,0 +1,1322 @@
+/*!
+ * Bootstrap Colorpicker v2.5.2
+ * https://itsjavi.com/bootstrap-colorpicker/
+ *
+ * Originally written by (c) 2012 Stefan Petre
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0.txt
+ *
+ */
+
+(function(root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module unless amdModuleId is set
+ define(["jquery"], function(jq) {
+ return (factory(jq));
+ });
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory(require("jquery"));
+ } else if (jQuery && !jQuery.fn.colorpicker) {
+ factory(jQuery);
+ }
+}(this, function($) {
+ 'use strict';
+ /**
+ * Color manipulation helper class
+ *
+ * @param {Object|String} [val]
+ * @param {Object} [predefinedColors]
+ * @param {String|null} [fallbackColor]
+ * @param {String|null} [fallbackFormat]
+ * @param {Boolean} [hexNumberSignPrefix]
+ * @constructor
+ */
+ var Color = function(
+ val, predefinedColors, fallbackColor, fallbackFormat, hexNumberSignPrefix) {
+ this.fallbackValue = fallbackColor ?
+ (
+ (typeof fallbackColor === 'string') ?
+ this.parse(fallbackColor) :
+ fallbackColor
+ ) :
+ null;
+
+ this.fallbackFormat = fallbackFormat ? fallbackFormat : 'rgba';
+
+ this.hexNumberSignPrefix = hexNumberSignPrefix === true;
+
+ this.value = this.fallbackValue;
+
+ this.origFormat = null; // original string format
+
+ this.predefinedColors = predefinedColors ? predefinedColors : {};
+
+ // We don't want to share aliases across instances so we extend new object
+ this.colors = $.extend({}, Color.webColors, this.predefinedColors);
+
+ if (val) {
+ if (typeof val.h !== 'undefined') {
+ this.value = val;
+ } else {
+ this.setColor(String(val));
+ }
+ }
+
+ if (!this.value) {
+ // Initial value is always black if no arguments are passed or val is empty
+ this.value = {
+ h: 0,
+ s: 0,
+ b: 0,
+ a: 1
+ };
+ }
+ };
+
+ Color.webColors = { // 140 predefined colors from the HTML Colors spec
+ "aliceblue": "f0f8ff",
+ "antiquewhite": "faebd7",
+ "aqua": "00ffff",
+ "aquamarine": "7fffd4",
+ "azure": "f0ffff",
+ "beige": "f5f5dc",
+ "bisque": "ffe4c4",
+ "black": "000000",
+ "blanchedalmond": "ffebcd",
+ "blue": "0000ff",
+ "blueviolet": "8a2be2",
+ "brown": "a52a2a",
+ "burlywood": "deb887",
+ "cadetblue": "5f9ea0",
+ "chartreuse": "7fff00",
+ "chocolate": "d2691e",
+ "coral": "ff7f50",
+ "cornflowerblue": "6495ed",
+ "cornsilk": "fff8dc",
+ "crimson": "dc143c",
+ "cyan": "00ffff",
+ "darkblue": "00008b",
+ "darkcyan": "008b8b",
+ "darkgoldenrod": "b8860b",
+ "darkgray": "a9a9a9",
+ "darkgreen": "006400",
+ "darkkhaki": "bdb76b",
+ "darkmagenta": "8b008b",
+ "darkolivegreen": "556b2f",
+ "darkorange": "ff8c00",
+ "darkorchid": "9932cc",
+ "darkred": "8b0000",
+ "darksalmon": "e9967a",
+ "darkseagreen": "8fbc8f",
+ "darkslateblue": "483d8b",
+ "darkslategray": "2f4f4f",
+ "darkturquoise": "00ced1",
+ "darkviolet": "9400d3",
+ "deeppink": "ff1493",
+ "deepskyblue": "00bfff",
+ "dimgray": "696969",
+ "dodgerblue": "1e90ff",
+ "firebrick": "b22222",
+ "floralwhite": "fffaf0",
+ "forestgreen": "228b22",
+ "fuchsia": "ff00ff",
+ "gainsboro": "dcdcdc",
+ "ghostwhite": "f8f8ff",
+ "gold": "ffd700",
+ "goldenrod": "daa520",
+ "gray": "808080",
+ "green": "008000",
+ "greenyellow": "adff2f",
+ "honeydew": "f0fff0",
+ "hotpink": "ff69b4",
+ "indianred": "cd5c5c",
+ "indigo": "4b0082",
+ "ivory": "fffff0",
+ "khaki": "f0e68c",
+ "lavender": "e6e6fa",
+ "lavenderblush": "fff0f5",
+ "lawngreen": "7cfc00",
+ "lemonchiffon": "fffacd",
+ "lightblue": "add8e6",
+ "lightcoral": "f08080",
+ "lightcyan": "e0ffff",
+ "lightgoldenrodyellow": "fafad2",
+ "lightgrey": "d3d3d3",
+ "lightgreen": "90ee90",
+ "lightpink": "ffb6c1",
+ "lightsalmon": "ffa07a",
+ "lightseagreen": "20b2aa",
+ "lightskyblue": "87cefa",
+ "lightslategray": "778899",
+ "lightsteelblue": "b0c4de",
+ "lightyellow": "ffffe0",
+ "lime": "00ff00",
+ "limegreen": "32cd32",
+ "linen": "faf0e6",
+ "magenta": "ff00ff",
+ "maroon": "800000",
+ "mediumaquamarine": "66cdaa",
+ "mediumblue": "0000cd",
+ "mediumorchid": "ba55d3",
+ "mediumpurple": "9370d8",
+ "mediumseagreen": "3cb371",
+ "mediumslateblue": "7b68ee",
+ "mediumspringgreen": "00fa9a",
+ "mediumturquoise": "48d1cc",
+ "mediumvioletred": "c71585",
+ "midnightblue": "191970",
+ "mintcream": "f5fffa",
+ "mistyrose": "ffe4e1",
+ "moccasin": "ffe4b5",
+ "navajowhite": "ffdead",
+ "navy": "000080",
+ "oldlace": "fdf5e6",
+ "olive": "808000",
+ "olivedrab": "6b8e23",
+ "orange": "ffa500",
+ "orangered": "ff4500",
+ "orchid": "da70d6",
+ "palegoldenrod": "eee8aa",
+ "palegreen": "98fb98",
+ "paleturquoise": "afeeee",
+ "palevioletred": "d87093",
+ "papayawhip": "ffefd5",
+ "peachpuff": "ffdab9",
+ "peru": "cd853f",
+ "pink": "ffc0cb",
+ "plum": "dda0dd",
+ "powderblue": "b0e0e6",
+ "purple": "800080",
+ "red": "ff0000",
+ "rosybrown": "bc8f8f",
+ "royalblue": "4169e1",
+ "saddlebrown": "8b4513",
+ "salmon": "fa8072",
+ "sandybrown": "f4a460",
+ "seagreen": "2e8b57",
+ "seashell": "fff5ee",
+ "sienna": "a0522d",
+ "silver": "c0c0c0",
+ "skyblue": "87ceeb",
+ "slateblue": "6a5acd",
+ "slategray": "708090",
+ "snow": "fffafa",
+ "springgreen": "00ff7f",
+ "steelblue": "4682b4",
+ "tan": "d2b48c",
+ "teal": "008080",
+ "thistle": "d8bfd8",
+ "tomato": "ff6347",
+ "turquoise": "40e0d0",
+ "violet": "ee82ee",
+ "wheat": "f5deb3",
+ "white": "ffffff",
+ "whitesmoke": "f5f5f5",
+ "yellow": "ffff00",
+ "yellowgreen": "9acd32",
+ "transparent": "transparent"
+ };
+
+ Color.prototype = {
+ constructor: Color,
+ colors: {}, // merged web and predefined colors
+ predefinedColors: {},
+ /**
+ * @return {Object}
+ */
+ getValue: function() {
+ return this.value;
+ },
+ /**
+ * @param {Object} val
+ */
+ setValue: function(val) {
+ this.value = val;
+ },
+ _sanitizeNumber: function(val) {
+ if (typeof val === 'number') {
+ return val;
+ }
+ if (isNaN(val) || (val === null) || (val === '') || (val === undefined)) {
+ return 1;
+ }
+ if (val === '') {
+ return 0;
+ }
+ if (typeof val.toLowerCase !== 'undefined') {
+ if (val.match(/^\./)) {
+ val = "0" + val;
+ }
+ return Math.ceil(parseFloat(val) * 100) / 100;
+ }
+ return 1;
+ },
+ isTransparent: function(strVal) {
+ if (!strVal || !(typeof strVal === 'string' || strVal instanceof String)) {
+ return false;
+ }
+ strVal = strVal.toLowerCase().trim();
+ return (strVal === 'transparent') || (strVal.match(/#?00000000/)) || (strVal.match(/(rgba|hsla)\(0,0,0,0?\.?0\)/));
+ },
+ rgbaIsTransparent: function(rgba) {
+ return ((rgba.r === 0) && (rgba.g === 0) && (rgba.b === 0) && (rgba.a === 0));
+ },
+ // parse a string to HSB
+ /**
+ * @protected
+ * @param {String} strVal
+ * @returns {boolean} Returns true if it could be parsed, false otherwise
+ */
+ setColor: function(strVal) {
+ strVal = strVal.toLowerCase().trim();
+ if (strVal) {
+ if (this.isTransparent(strVal)) {
+ this.value = {
+ h: 0,
+ s: 0,
+ b: 0,
+ a: 0
+ };
+ return true;
+ } else {
+ var parsedColor = this.parse(strVal);
+ if (parsedColor) {
+ this.value = this.value = {
+ h: parsedColor.h,
+ s: parsedColor.s,
+ b: parsedColor.b,
+ a: parsedColor.a
+ };
+ if (!this.origFormat) {
+ this.origFormat = parsedColor.format;
+ }
+ } else if (this.fallbackValue) {
+ // if parser fails, defaults to fallbackValue if defined, otherwise the value won't be changed
+ this.value = this.fallbackValue;
+ }
+ }
+ }
+ return false;
+ },
+ setHue: function(h) {
+ this.value.h = 1 - h;
+ },
+ setSaturation: function(s) {
+ this.value.s = s;
+ },
+ setBrightness: function(b) {
+ this.value.b = 1 - b;
+ },
+ setAlpha: function(a) {
+ this.value.a = Math.round((parseInt((1 - a) * 100, 10) / 100) * 100) / 100;
+ },
+ toRGB: function(h, s, b, a) {
+ if (arguments.length === 0) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ h *= 360;
+ var R, G, B, X, C;
+ h = (h % 360) / 60;
+ C = b * s;
+ X = C * (1 - Math.abs(h % 2 - 1));
+ R = G = B = b - C;
+
+ h = ~~h;
+ R += [C, X, 0, 0, X, C][h];
+ G += [X, C, C, X, 0, 0][h];
+ B += [0, 0, X, C, C, X][h];
+
+ return {
+ r: Math.round(R * 255),
+ g: Math.round(G * 255),
+ b: Math.round(B * 255),
+ a: a
+ };
+ },
+ toHex: function(ignoreFormat, h, s, b, a) {
+ if (arguments.length <= 1) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ var prefix = '#';
+ var rgb = this.toRGB(h, s, b, a);
+
+ if (this.rgbaIsTransparent(rgb)) {
+ return 'transparent';
+ }
+
+ if (!ignoreFormat) {
+ prefix = (this.hexNumberSignPrefix ? '#' : '');
+ }
+
+ var hexStr = prefix + (
+ (1 << 24) +
+ (parseInt(rgb.r) << 16) +
+ (parseInt(rgb.g) << 8) +
+ parseInt(rgb.b))
+ .toString(16)
+ .slice(1);
+
+ return hexStr;
+ },
+ toHSL: function(h, s, b, a) {
+ if (arguments.length === 0) {
+ h = this.value.h;
+ s = this.value.s;
+ b = this.value.b;
+ a = this.value.a;
+ }
+
+ var H = h,
+ L = (2 - s) * b,
+ S = s * b;
+ if (L > 0 && L <= 1) {
+ S /= L;
+ } else {
+ S /= 2 - L;
+ }
+ L /= 2;
+ if (S > 1) {
+ S = 1;
+ }
+ return {
+ h: isNaN(H) ? 0 : H,
+ s: isNaN(S) ? 0 : S,
+ l: isNaN(L) ? 0 : L,
+ a: isNaN(a) ? 0 : a
+ };
+ },
+ toAlias: function(r, g, b, a) {
+ var c, rgb = (arguments.length === 0) ? this.toHex(true) : this.toHex(true, r, g, b, a);
+
+ // support predef. colors in non-hex format too, as defined in the alias itself
+ var original = this.origFormat === 'alias' ? rgb : this.toString(false, this.origFormat);
+
+ for (var alias in this.colors) {
+ c = this.colors[alias].toLowerCase().trim();
+ if ((c === rgb) || (c === original)) {
+ return alias;
+ }
+ }
+ return false;
+ },
+ RGBtoHSB: function(r, g, b, a) {
+ r /= 255;
+ g /= 255;
+ b /= 255;
+
+ var H, S, V, C;
+ V = Math.max(r, g, b);
+ C = V - Math.min(r, g, b);
+ H = (C === 0 ? null :
+ V === r ? (g - b) / C :
+ V === g ? (b - r) / C + 2 :
+ (r - g) / C + 4
+ );
+ H = ((H + 360) % 6) * 60 / 360;
+ S = C === 0 ? 0 : C / V;
+ return {
+ h: this._sanitizeNumber(H),
+ s: S,
+ b: V,
+ a: this._sanitizeNumber(a)
+ };
+ },
+ HueToRGB: function(p, q, h) {
+ if (h < 0) {
+ h += 1;
+ } else if (h > 1) {
+ h -= 1;
+ }
+ if ((h * 6) < 1) {
+ return p + (q - p) * h * 6;
+ } else if ((h * 2) < 1) {
+ return q;
+ } else if ((h * 3) < 2) {
+ return p + (q - p) * ((2 / 3) - h) * 6;
+ } else {
+ return p;
+ }
+ },
+ HSLtoRGB: function(h, s, l, a) {
+ if (s < 0) {
+ s = 0;
+ }
+ var q;
+ if (l <= 0.5) {
+ q = l * (1 + s);
+ } else {
+ q = l + s - (l * s);
+ }
+
+ var p = 2 * l - q;
+
+ var tr = h + (1 / 3);
+ var tg = h;
+ var tb = h - (1 / 3);
+
+ var r = Math.round(this.HueToRGB(p, q, tr) * 255);
+ var g = Math.round(this.HueToRGB(p, q, tg) * 255);
+ var b = Math.round(this.HueToRGB(p, q, tb) * 255);
+ return [r, g, b, this._sanitizeNumber(a)];
+ },
+ /**
+ * @param {String} strVal
+ * @returns {Object} Object containing h,s,b,a,format properties or FALSE if failed to parse
+ */
+ parse: function(strVal) {
+ if (typeof strVal !== 'string') {
+ return this.fallbackValue;
+ }
+ if (arguments.length === 0) {
+ return false;
+ }
+
+ var that = this,
+ result = false,
+ isAlias = (typeof this.colors[strVal] !== 'undefined'),
+ values, format;
+
+ if (isAlias) {
+ strVal = this.colors[strVal].toLowerCase().trim();
+ }
+
+ $.each(this.stringParsers, function(i, parser) {
+ var match = parser.re.exec(strVal);
+ values = match && parser.parse.apply(that, [match]);
+ if (values) {
+ result = {};
+ format = (isAlias ? 'alias' : (parser.format ? parser.format : that.getValidFallbackFormat()));
+ if (format.match(/hsla?/)) {
+ result = that.RGBtoHSB.apply(that, that.HSLtoRGB.apply(that, values));
+ } else {
+ result = that.RGBtoHSB.apply(that, values);
+ }
+ if (result instanceof Object) {
+ result.format = format;
+ }
+ return false; // stop iterating
+ }
+ return true;
+ });
+ return result;
+ },
+ getValidFallbackFormat: function() {
+ var formats = [
+ 'rgba', 'rgb', 'hex', 'hsla', 'hsl'
+ ];
+ if (this.origFormat && (formats.indexOf(this.origFormat) !== -1)) {
+ return this.origFormat;
+ }
+ if (this.fallbackFormat && (formats.indexOf(this.fallbackFormat) !== -1)) {
+ return this.fallbackFormat;
+ }
+
+ return 'rgba'; // By default, return a format that will not lose the alpha info
+ },
+ /**
+ *
+ * @param {string} [format] (default: rgba)
+ * @param {boolean} [translateAlias] Return real color for pre-defined (non-standard) aliases (default: false)
+ * @param {boolean} [forceRawValue] Forces hashtag prefix when getting hex color (default: false)
+ * @returns {String}
+ */
+ toString: function(forceRawValue, format, translateAlias) {
+ format = format || this.origFormat || this.fallbackFormat;
+ translateAlias = translateAlias || false;
+
+ var c = false;
+
+ switch (format) {
+ case 'rgb':
+ {
+ c = this.toRGB();
+ if (this.rgbaIsTransparent(c)) {
+ return 'transparent';
+ }
+ return 'rgb(' + c.r + ',' + c.g + ',' + c.b + ')';
+ }
+ break;
+ case 'rgba':
+ {
+ c = this.toRGB();
+ return 'rgba(' + c.r + ',' + c.g + ',' + c.b + ',' + c.a + ')';
+ }
+ break;
+ case 'hsl':
+ {
+ c = this.toHSL();
+ return 'hsl(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%)';
+ }
+ break;
+ case 'hsla':
+ {
+ c = this.toHSL();
+ return 'hsla(' + Math.round(c.h * 360) + ',' + Math.round(c.s * 100) + '%,' + Math.round(c.l * 100) + '%,' + c.a + ')';
+ }
+ break;
+ case 'hex':
+ {
+ return this.toHex(forceRawValue);
+ }
+ break;
+ case 'alias':
+ {
+ c = this.toAlias();
+
+ if (c === false) {
+ return this.toString(forceRawValue, this.getValidFallbackFormat());
+ }
+
+ if (translateAlias && !(c in Color.webColors) && (c in this.predefinedColors)) {
+ return this.predefinedColors[c];
+ }
+
+ return c;
+ }
+ default:
+ {
+ return c;
+ }
+ break;
+ }
+ },
+ // a set of RE's that can match strings and generate color tuples.
+ // from John Resig color plugin
+ // https://github.com/jquery/jquery-color/
+ stringParsers: [{
+ re: /rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*?\)/,
+ format: 'rgb',
+ parse: function(execResult) {
+ return [
+ execResult[1],
+ execResult[2],
+ execResult[3],
+ 1
+ ];
+ }
+ }, {
+ re: /rgb\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,
+ format: 'rgb',
+ parse: function(execResult) {
+ return [
+ 2.55 * execResult[1],
+ 2.55 * execResult[2],
+ 2.55 * execResult[3],
+ 1
+ ];
+ }
+ }, {
+ re: /rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'rgba',
+ parse: function(execResult) {
+ return [
+ execResult[1],
+ execResult[2],
+ execResult[3],
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /rgba\(\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'rgba',
+ parse: function(execResult) {
+ return [
+ 2.55 * execResult[1],
+ 2.55 * execResult[2],
+ 2.55 * execResult[3],
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /hsl\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*?\)/,
+ format: 'hsl',
+ parse: function(execResult) {
+ return [
+ execResult[1] / 360,
+ execResult[2] / 100,
+ execResult[3] / 100,
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /hsla\(\s*(\d*(?:\.\d+)?)\s*,\s*(\d*(?:\.\d+)?)\%\s*,\s*(\d*(?:\.\d+)?)\%\s*(?:,\s*(\d*(?:\.\d+)?)\s*)?\)/,
+ format: 'hsla',
+ parse: function(execResult) {
+ return [
+ execResult[1] / 360,
+ execResult[2] / 100,
+ execResult[3] / 100,
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
+ format: 'hex',
+ parse: function(execResult) {
+ return [
+ parseInt(execResult[1], 16),
+ parseInt(execResult[2], 16),
+ parseInt(execResult[3], 16),
+ 1
+ ];
+ }
+ }, {
+ re: /#?([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
+ format: 'hex',
+ parse: function(execResult) {
+ return [
+ parseInt(execResult[1] + execResult[1], 16),
+ parseInt(execResult[2] + execResult[2], 16),
+ parseInt(execResult[3] + execResult[3], 16),
+ 1
+ ];
+ }
+ }],
+ colorNameToHex: function(name) {
+ if (typeof this.colors[name.toLowerCase()] !== 'undefined') {
+ return this.colors[name.toLowerCase()];
+ }
+ return false;
+ }
+ };
+
+ /*
+ * Default plugin options
+ */
+ var defaults = {
+ horizontal: false, // horizontal mode layout ?
+ inline: false, //forces to show the colorpicker as an inline element
+ color: false, //forces a color
+ format: false, //forces a format
+ input: 'input', // children input selector
+ container: false, // container selector
+ component: '.add-on, .input-group-addon', // children component selector
+ fallbackColor: false, // fallback color value. null = keeps current color.
+ fallbackFormat: 'hex', // fallback color format
+ hexNumberSignPrefix: true, // put a '#' (number sign) before hex strings
+ sliders: {
+ saturation: {
+ maxLeft: 100,
+ maxTop: 100,
+ callLeft: 'setSaturation',
+ callTop: 'setBrightness'
+ },
+ hue: {
+ maxLeft: 0,
+ maxTop: 100,
+ callLeft: false,
+ callTop: 'setHue'
+ },
+ alpha: {
+ maxLeft: 0,
+ maxTop: 100,
+ callLeft: false,
+ callTop: 'setAlpha'
+ }
+ },
+ slidersHorz: {
+ saturation: {
+ maxLeft: 100,
+ maxTop: 100,
+ callLeft: 'setSaturation',
+ callTop: 'setBrightness'
+ },
+ hue: {
+ maxLeft: 100,
+ maxTop: 0,
+ callLeft: 'setHue',
+ callTop: false
+ },
+ alpha: {
+ maxLeft: 100,
+ maxTop: 0,
+ callLeft: 'setAlpha',
+ callTop: false
+ }
+ },
+ template: '',
+ align: 'right',
+ customClass: null, // custom class added to the colorpicker element
+ colorSelectors: null // custom color aliases
+ };
+
+ /**
+ * Colorpicker component class
+ *
+ * @param {Object|String} element
+ * @param {Object} options
+ * @constructor
+ */
+ var Colorpicker = function(element, options) {
+ this.element = $(element).addClass('colorpicker-element');
+ this.options = $.extend(true, {}, defaults, this.element.data(), options);
+ this.component = this.options.component;
+ this.component = (this.component !== false) ? this.element.find(this.component) : false;
+ if (this.component && (this.component.length === 0)) {
+ this.component = false;
+ }
+ this.container = (this.options.container === true) ? this.element : this.options.container;
+ this.container = (this.container !== false) ? $(this.container) : false;
+
+ // Is the element an input? Should we search inside for any input?
+ this.input = this.element.is('input') ? this.element : (this.options.input ?
+ this.element.find(this.options.input) : false);
+ if (this.input && (this.input.length === 0)) {
+ this.input = false;
+ }
+ // Set HSB color
+ this.color = this.createColor(this.options.color !== false ? this.options.color : this.getValue());
+
+ this.format = this.options.format !== false ? this.options.format : this.color.origFormat;
+
+ if (this.options.color !== false) {
+ this.updateInput(this.color);
+ this.updateData(this.color);
+ }
+
+ this.disabled = false;
+
+ // Setup picker
+ var $picker = this.picker = $(this.options.template);
+ if (this.options.customClass) {
+ $picker.addClass(this.options.customClass);
+ }
+ if (this.options.inline) {
+ $picker.addClass('colorpicker-inline colorpicker-visible');
+ } else {
+ $picker.addClass('colorpicker-hidden');
+ }
+ if (this.options.horizontal) {
+ $picker.addClass('colorpicker-horizontal');
+ }
+ if (
+ (['rgba', 'hsla', 'alias'].indexOf(this.format) !== -1) ||
+ this.options.format === false ||
+ this.getValue() === 'transparent'
+ ) {
+ $picker.addClass('colorpicker-with-alpha');
+ }
+ if (this.options.align === 'right') {
+ $picker.addClass('colorpicker-right');
+ }
+ if (this.options.inline === true) {
+ $picker.addClass('colorpicker-no-arrow');
+ }
+ if (this.options.colorSelectors) {
+ var colorpicker = this,
+ selectorsContainer = colorpicker.picker.find('.colorpicker-selectors');
+
+ if (selectorsContainer.length > 0) {
+ $.each(this.options.colorSelectors, function(name, color) {
+ var $btn = $('')
+ .addClass('colorpicker-selectors-color')
+ .css('background-color', color)
+ .data('class', name).data('alias', name);
+
+ $btn.on('mousedown.colorpicker touchstart.colorpicker', function(event) {
+ event.preventDefault();
+ colorpicker.setValue(
+ colorpicker.format === 'alias' ? $(this).data('alias') : $(this).css('background-color')
+ );
+ });
+ selectorsContainer.append($btn);
+ });
+ selectorsContainer.show().addClass('colorpicker-visible');
+ }
+ }
+
+ // Prevent closing the colorpicker when clicking on itself
+ $picker.on('mousedown.colorpicker touchstart.colorpicker', $.proxy(function(e) {
+ if (e.target === e.currentTarget) {
+ e.preventDefault();
+ }
+ }, this));
+
+ // Bind click/tap events on the sliders
+ $picker.find('.colorpicker-saturation, .colorpicker-hue, .colorpicker-alpha')
+ .on('mousedown.colorpicker touchstart.colorpicker', $.proxy(this.mousedown, this));
+
+ $picker.appendTo(this.container ? this.container : $('body'));
+
+ // Bind other events
+ if (this.input !== false) {
+ this.input.on({
+ 'keyup.colorpicker': $.proxy(this.keyup, this)
+ });
+ this.input.on({
+ 'change.colorpicker': $.proxy(this.change, this)
+ });
+ if (this.component === false) {
+ this.element.on({
+ 'focus.colorpicker': $.proxy(this.show, this)
+ });
+ }
+ if (this.options.inline === false) {
+ this.element.on({
+ 'focusout.colorpicker': $.proxy(this.hide, this)
+ });
+ }
+ }
+
+ if (this.component !== false) {
+ this.component.on({
+ 'click.colorpicker': $.proxy(this.show, this)
+ });
+ }
+
+ if ((this.input === false) && (this.component === false)) {
+ this.element.on({
+ 'click.colorpicker': $.proxy(this.show, this)
+ });
+ }
+
+ // for HTML5 input[type='color']
+ if ((this.input !== false) && (this.component !== false) && (this.input.attr('type') === 'color')) {
+
+ this.input.on({
+ 'click.colorpicker': $.proxy(this.show, this),
+ 'focus.colorpicker': $.proxy(this.show, this)
+ });
+ }
+ this.update();
+
+ $($.proxy(function() {
+ this.element.trigger('create');
+ }, this));
+ };
+
+ Colorpicker.Color = Color;
+
+ Colorpicker.prototype = {
+ constructor: Colorpicker,
+ destroy: function() {
+ this.picker.remove();
+ this.element.removeData('colorpicker', 'color').off('.colorpicker');
+ if (this.input !== false) {
+ this.input.off('.colorpicker');
+ }
+ if (this.component !== false) {
+ this.component.off('.colorpicker');
+ }
+ this.element.removeClass('colorpicker-element');
+ this.element.trigger({
+ type: 'destroy'
+ });
+ },
+ reposition: function() {
+ if (this.options.inline !== false || this.options.container) {
+ return false;
+ }
+ var type = this.container && this.container[0] !== window.document.body ? 'position' : 'offset';
+ var element = this.component || this.element;
+ var offset = element[type]();
+ if (this.options.align === 'right') {
+ offset.left -= this.picker.outerWidth() - element.outerWidth();
+ }
+ this.picker.css({
+ top: offset.top + element.outerHeight(),
+ left: offset.left
+ });
+ },
+ show: function(e) {
+ if (this.isDisabled()) {
+ // Don't show the widget if it's disabled (the input)
+ return;
+ }
+ this.picker.addClass('colorpicker-visible').removeClass('colorpicker-hidden');
+ this.reposition();
+ $(window).on('resize.colorpicker', $.proxy(this.reposition, this));
+ if (e && (!this.hasInput() || this.input.attr('type') === 'color')) {
+ if (e.stopPropagation && e.preventDefault) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ }
+ if ((this.component || !this.input) && (this.options.inline === false)) {
+ $(window.document).on({
+ 'mousedown.colorpicker': $.proxy(this.hide, this)
+ });
+ }
+ this.element.trigger({
+ type: 'showPicker',
+ color: this.color
+ });
+ },
+ hide: function(e) {
+ if ((typeof e !== 'undefined') && e.target) {
+ // Prevent hide if triggered by an event and an element inside the colorpicker has been clicked/touched
+ if (
+ $(e.currentTarget).parents('.colorpicker').length > 0 ||
+ $(e.target).parents('.colorpicker').length > 0
+ ) {
+ return false;
+ }
+ }
+ this.picker.addClass('colorpicker-hidden').removeClass('colorpicker-visible');
+ $(window).off('resize.colorpicker', this.reposition);
+ $(window.document).off({
+ 'mousedown.colorpicker': this.hide
+ });
+ this.update();
+ this.element.trigger({
+ type: 'hidePicker',
+ color: this.color
+ });
+ },
+ updateData: function(val) {
+ val = val || this.color.toString(false, this.format);
+ this.element.data('color', val);
+ return val;
+ },
+ updateInput: function(val) {
+ val = val || this.color.toString(false, this.format);
+ if (this.input !== false) {
+ this.input.prop('value', val);
+ this.input.trigger('change');
+ }
+ return val;
+ },
+ updatePicker: function(val) {
+ if (typeof val !== 'undefined') {
+ this.color = this.createColor(val);
+ }
+ var sl = (this.options.horizontal === false) ? this.options.sliders : this.options.slidersHorz;
+ var icns = this.picker.find('i');
+ if (icns.length === 0) {
+ return;
+ }
+ if (this.options.horizontal === false) {
+ sl = this.options.sliders;
+ icns.eq(1).css('top', sl.hue.maxTop * (1 - this.color.value.h)).end()
+ .eq(2).css('top', sl.alpha.maxTop * (1 - this.color.value.a));
+ } else {
+ sl = this.options.slidersHorz;
+ icns.eq(1).css('left', sl.hue.maxLeft * (1 - this.color.value.h)).end()
+ .eq(2).css('left', sl.alpha.maxLeft * (1 - this.color.value.a));
+ }
+ icns.eq(0).css({
+ 'top': sl.saturation.maxTop - this.color.value.b * sl.saturation.maxTop,
+ 'left': this.color.value.s * sl.saturation.maxLeft
+ });
+
+ this.picker.find('.colorpicker-saturation')
+ .css('backgroundColor', this.color.toHex(true, this.color.value.h, 1, 1, 1));
+
+ this.picker.find('.colorpicker-alpha')
+ .css('backgroundColor', this.color.toHex(true));
+
+ this.picker.find('.colorpicker-color, .colorpicker-color div')
+ .css('backgroundColor', this.color.toString(true, this.format));
+
+ return val;
+ },
+ updateComponent: function(val) {
+ var color;
+
+ if (typeof val !== 'undefined') {
+ color = this.createColor(val);
+ } else {
+ color = this.color;
+ }
+
+ if (this.component !== false) {
+ var icn = this.component.find('i').eq(0);
+ if (icn.length > 0) {
+ icn.css({
+ 'backgroundColor': color.toString(true, this.format)
+ });
+ } else {
+ this.component.css({
+ 'backgroundColor': color.toString(true, this.format)
+ });
+ }
+ }
+
+ return color.toString(false, this.format);
+ },
+ update: function(force) {
+ var val;
+ if ((this.getValue(false) !== false) || (force === true)) {
+ // Update input/data only if the current value is not empty
+ val = this.updateComponent();
+ this.updateInput(val);
+ this.updateData(val);
+ this.updatePicker(); // only update picker if value is not empty
+ }
+ return val;
+
+ },
+ setValue: function(val) { // set color manually
+ this.color = this.createColor(val);
+ this.update(true);
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color,
+ value: val
+ });
+ },
+ /**
+ * Creates a new color using the instance options
+ * @protected
+ * @param {String} val
+ * @returns {Color}
+ */
+ createColor: function(val) {
+ return new Color(
+ val ? val : null,
+ this.options.colorSelectors,
+ this.options.fallbackColor ? this.options.fallbackColor : this.color,
+ this.options.fallbackFormat,
+ this.options.hexNumberSignPrefix
+ );
+ },
+ getValue: function(defaultValue) {
+ defaultValue = (typeof defaultValue === 'undefined') ? this.options.fallbackColor : defaultValue;
+ var val;
+ if (this.hasInput()) {
+ val = this.input.val();
+ } else {
+ val = this.element.data('color');
+ }
+ if ((val === undefined) || (val === '') || (val === null)) {
+ // if not defined or empty, return default
+ val = defaultValue;
+ }
+ return val;
+ },
+ hasInput: function() {
+ return (this.input !== false);
+ },
+ isDisabled: function() {
+ return this.disabled;
+ },
+ disable: function() {
+ if (this.hasInput()) {
+ this.input.prop('disabled', true);
+ }
+ this.disabled = true;
+ this.element.trigger({
+ type: 'disable',
+ color: this.color,
+ value: this.getValue()
+ });
+ return true;
+ },
+ enable: function() {
+ if (this.hasInput()) {
+ this.input.prop('disabled', false);
+ }
+ this.disabled = false;
+ this.element.trigger({
+ type: 'enable',
+ color: this.color,
+ value: this.getValue()
+ });
+ return true;
+ },
+ currentSlider: null,
+ mousePointer: {
+ left: 0,
+ top: 0
+ },
+ mousedown: function(e) {
+ if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {
+ e.pageX = e.originalEvent.touches[0].pageX;
+ e.pageY = e.originalEvent.touches[0].pageY;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+
+ var target = $(e.target);
+
+ //detect the slider and set the limits and callbacks
+ var zone = target.closest('div');
+ var sl = this.options.horizontal ? this.options.slidersHorz : this.options.sliders;
+ if (!zone.is('.colorpicker')) {
+ if (zone.is('.colorpicker-saturation')) {
+ this.currentSlider = $.extend({}, sl.saturation);
+ } else if (zone.is('.colorpicker-hue')) {
+ this.currentSlider = $.extend({}, sl.hue);
+ } else if (zone.is('.colorpicker-alpha')) {
+ this.currentSlider = $.extend({}, sl.alpha);
+ } else {
+ return false;
+ }
+ var offset = zone.offset();
+ //reference to guide's style
+ this.currentSlider.guide = zone.find('i')[0].style;
+ this.currentSlider.left = e.pageX - offset.left;
+ this.currentSlider.top = e.pageY - offset.top;
+ this.mousePointer = {
+ left: e.pageX,
+ top: e.pageY
+ };
+ //trigger mousemove to move the guide to the current position
+ $(window.document).on({
+ 'mousemove.colorpicker': $.proxy(this.mousemove, this),
+ 'touchmove.colorpicker': $.proxy(this.mousemove, this),
+ 'mouseup.colorpicker': $.proxy(this.mouseup, this),
+ 'touchend.colorpicker': $.proxy(this.mouseup, this)
+ }).trigger('mousemove');
+ }
+ return false;
+ },
+ mousemove: function(e) {
+ if (!e.pageX && !e.pageY && e.originalEvent && e.originalEvent.touches) {
+ e.pageX = e.originalEvent.touches[0].pageX;
+ e.pageY = e.originalEvent.touches[0].pageY;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+ var left = Math.max(
+ 0,
+ Math.min(
+ this.currentSlider.maxLeft,
+ this.currentSlider.left + ((e.pageX || this.mousePointer.left) - this.mousePointer.left)
+ )
+ );
+ var top = Math.max(
+ 0,
+ Math.min(
+ this.currentSlider.maxTop,
+ this.currentSlider.top + ((e.pageY || this.mousePointer.top) - this.mousePointer.top)
+ )
+ );
+ this.currentSlider.guide.left = left + 'px';
+ this.currentSlider.guide.top = top + 'px';
+ if (this.currentSlider.callLeft) {
+ this.color[this.currentSlider.callLeft].call(this.color, left / this.currentSlider.maxLeft);
+ }
+ if (this.currentSlider.callTop) {
+ this.color[this.currentSlider.callTop].call(this.color, top / this.currentSlider.maxTop);
+ }
+ // Change format dynamically
+ // Only occurs if user choose the dynamic format by
+ // setting option format to false
+ if (
+ this.options.format === false &&
+ (this.currentSlider.callTop === 'setAlpha' ||
+ this.currentSlider.callLeft === 'setAlpha')
+ ) {
+
+ // Converting from hex / rgb to rgba
+ if (this.color.value.a !== 1) {
+ this.format = 'rgba';
+ this.color.origFormat = 'rgba';
+ }
+
+ // Converting from rgba to hex
+ else {
+ this.format = 'hex';
+ this.color.origFormat = 'hex';
+ }
+ }
+ this.update(true);
+
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color
+ });
+ return false;
+ },
+ mouseup: function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ $(window.document).off({
+ 'mousemove.colorpicker': this.mousemove,
+ 'touchmove.colorpicker': this.mousemove,
+ 'mouseup.colorpicker': this.mouseup,
+ 'touchend.colorpicker': this.mouseup
+ });
+ return false;
+ },
+ change: function(e) {
+ this.keyup(e);
+ },
+ keyup: function(e) {
+ if ((e.keyCode === 38)) {
+ if (this.color.value.a < 1) {
+ this.color.value.a = Math.round((this.color.value.a + 0.01) * 100) / 100;
+ }
+ this.update(true);
+ } else if ((e.keyCode === 40)) {
+ if (this.color.value.a > 0) {
+ this.color.value.a = Math.round((this.color.value.a - 0.01) * 100) / 100;
+ }
+ this.update(true);
+ } else {
+ this.color = this.createColor(this.input.val());
+ // Change format dynamically
+ // Only occurs if user choose the dynamic format by
+ // setting option format to false
+ if (this.color.origFormat && this.options.format === false) {
+ this.format = this.color.origFormat;
+ }
+ if (this.getValue(false) !== false) {
+ this.updateData();
+ this.updateComponent();
+ this.updatePicker();
+ }
+ }
+ this.element.trigger({
+ type: 'changeColor',
+ color: this.color,
+ value: this.input.val()
+ });
+ }
+ };
+
+ $.colorpicker = Colorpicker;
+
+ $.fn.colorpicker = function(option) {
+ var apiArgs = Array.prototype.slice.call(arguments, 1),
+ isSingleElement = (this.length === 1),
+ returnValue = null;
+
+ var $jq = this.each(function() {
+ var $this = $(this),
+ inst = $this.data('colorpicker'),
+ options = ((typeof option === 'object') ? option : {});
+
+ if (!inst) {
+ inst = new Colorpicker(this, options);
+ $this.data('colorpicker', inst);
+ }
+
+ if (typeof option === 'string') {
+ if ($.isFunction(inst[option])) {
+ returnValue = inst[option].apply(inst, apiArgs);
+ } else { // its a property ?
+ if (apiArgs.length) {
+ // set property
+ inst[option] = apiArgs[0];
+ }
+ returnValue = inst[option];
+ }
+ } else {
+ returnValue = $this;
+ }
+ });
+ return isSingleElement ? returnValue : $jq;
+ };
+
+ $.fn.colorpicker.constructor = Colorpicker;
+
+}));
diff --git a/admin/assets/bootstrap-datepicker/bootstrap-datepicker.js b/admin/assets/bootstrap-datepicker/bootstrap-datepicker.js
new file mode 100644
index 0000000..b9fc641
--- /dev/null
+++ b/admin/assets/bootstrap-datepicker/bootstrap-datepicker.js
@@ -0,0 +1,417 @@
+/*! =========================================================
+ * bootstrap-datepicker.js
+ * Original Idea: http://www.eyecon.ro/bootstrap-datepicker (Copyright 2012 Stefan Petre)
+ * Updated by AymKdn (http://kodono.info - https://github.com/Aymkdn/Datepicker-for-Bootstrap)
+ * =========================================================
+ *
+ * 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( $ ) {
+
+ // Picker object
+
+ var Datepicker = function(element, options){
+ this.element = $(element);
+ this.format = DPGlobal.parseFormat(options.format||this.element.data('date-format')||'mm/dd/yyyy');
+ this.picker = $(DPGlobal.template).appendTo('body').hide().on('mousedown.Datepicker',$.proxy(this.mousedown, this)).on('click.Datepicker',$.proxy(this.click, this));
+
+ this.isInput = this.element.is('input') || this.element.is('textarea');
+ this.component = this.element.is('.date') ? this.element.find('.add-on') : false;
+
+ if (this.isInput) {
+ this.element.on({
+ "focus.Datepicker": $.proxy(this.show, this),
+ "click.Datepicker": $.proxy(this.show, this),
+ "blur.Datepicker": $.proxy(this.blur, this),
+ "keyup.Datepicker": $.proxy(this.update, this),
+ "keydown.Datepicker": $.proxy(this.keydown, this)
+ });
+ } else {
+ if (this.component){
+ this.component.on('click.Datepicker', $.proxy(this.show, this));
+ } else {
+ this.element.on('click.Datepicker', $.proxy(this.show, this));
+ }
+ }
+
+ this.viewMode = 0;
+ this.weekStart = options.weekStart||this.element.data('date-weekstart')||0;
+ this.scroll = (options.scroll != undefined ? options.scroll : true);
+ this.weekEnd = this.weekStart == 0 ? 6 : this.weekStart - 1;
+ this.fillDow();
+ this.fillMonths();
+ this.update();
+ this.showMode();
+ };
+
+ Datepicker.prototype = {
+ constructor: Datepicker,
+
+ show: function(e) {
+ $('div.datepicker.dropdown-menu').hide(); //make sure to hide all other calendars
+ this.picker.show();
+ this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
+ this.place();
+ $(window).on('resize.Datepicker', $.proxy(this.place, this));
+ $('body').on('click.Datepicker', $.proxy(this.hide, this));
+ if (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ }
+ if (!this.isInput) {
+ $(document).on('mousedown.Datepicker', $.proxy(this.hide, this));
+ }
+ this.element.trigger({
+ type: 'show',
+ date: this.date
+ });
+ // make sure we see the datepicker
+ var elem = this.picker;
+ var docScrollTop = $(document).scrollTop();
+ var winHeight = $(window).height();
+ var elemTop = elem.position().top;
+ var elemHeight = elem.height();
+ if (this.scroll && docScrollTop+winHeight'+DPGlobal.dates.daysMin[(dowCnt++)%7]+'';
+ }
+ html += '';
+ this.picker.find('.datepicker-days thead').append(html);
+ },
+
+ fillMonths: function(){
+ var html = '';
+ var i = 0
+ while (i < 12) {
+ html += ''+DPGlobal.dates.monthsShort[i++]+'';
+ }
+ this.picker.find('.datepicker-months td').append(html);
+ },
+
+ fill: function() {
+ var d = new Date(this.viewDate),
+ year = d.getFullYear(),
+ month = d.getMonth(),
+ currentDate = this.date.valueOf();
+ this.picker.find('.datepicker-days th:eq(1)')
+ .text(DPGlobal.dates.months[month]+' '+year);
+ var prevMonth = new Date(year, month-1, 28,0,0,0,0),
+ day = DPGlobal.getDaysInMonth(prevMonth.getFullYear(), prevMonth.getMonth());
+ prevMonth.setDate(day);
+ prevMonth.setDate(day - (prevMonth.getDay() - this.weekStart + 7)%7);
+ var nextMonth = new Date(prevMonth);
+ nextMonth.setDate(nextMonth.getDate() + 42);
+ nextMonth = nextMonth.valueOf();
+ html = [];
+ var clsName;
+ while(prevMonth.valueOf() < nextMonth) {
+ if (prevMonth.getDay() == this.weekStart) {
+ html.push('');
+ }
+ clsName = '';
+ if (prevMonth.getMonth() < month) {
+ clsName += ' old';
+ } else if (prevMonth.getMonth() > month) {
+ clsName += ' new';
+ }
+ if (prevMonth.valueOf() == currentDate) {
+ clsName += ' active';
+ }
+ html.push(''+prevMonth.getDate() + ' | ');
+ if (prevMonth.getDay() == this.weekEnd) {
+ html.push('
');
+ }
+ prevMonth.setDate(prevMonth.getDate()+1);
+ }
+ this.picker.find('.datepicker-days tbody').empty().append(html.join(''));
+ var currentYear = this.date.getFullYear();
+
+ var months = this.picker.find('.datepicker-months')
+ .find('th:eq(1)')
+ .text(year)
+ .end()
+ .find('span').removeClass('active');
+ if (currentYear == year) {
+ months.eq(this.date.getMonth()).addClass('active');
+ }
+
+ html = '';
+ year = parseInt(year/10, 10) * 10;
+ var yearCont = this.picker.find('.datepicker-years')
+ .find('th:eq(1)')
+ .text(year + '-' + (year + 9))
+ .end()
+ .find('td');
+ year -= 1;
+ for (var i = -1; i < 11; i++) {
+ html += ''+year+'';
+ year += 1;
+ }
+ yearCont.html(html);
+ },
+
+ blur:function(e) {
+ },
+
+ hide: function(e){
+ this.picker.hide();
+ $(window).off('resize.Datepicker', this.place);
+ this.viewMode = 0;
+ this.showMode();
+ if (!this.isInput) {
+ $(document).off('mousedown.Datepicker', this.hide);
+ }
+ $('body').off('click.Datepicker',$.proxy(this.click, this));
+ },
+ click:function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ },
+ mousedown: function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ var target = $(e.target).closest('span, td, th');
+ if (target.length == 1) {
+ switch(target[0].nodeName.toLowerCase()) {
+ case 'th':
+ switch(target[0].className) {
+ case 'switch':
+ this.showMode(1);
+ break;
+ case 'prev':
+ case 'next':
+ this.viewDate['set'+DPGlobal.modes[this.viewMode].navFnc].call(
+ this.viewDate,
+ this.viewDate['get'+DPGlobal.modes[this.viewMode].navFnc].call(this.viewDate) +
+ DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1)
+ );
+ this.fill();
+ break;
+ }
+ break;
+ case 'span':
+ if (target.is('.month')) {
+ var month = target.parent().find('span').index(target);
+ this.viewDate.setMonth(month);
+ } else {
+ var year = parseInt(target.text(), 10)||0;
+ this.viewDate.setFullYear(year);
+ }
+ this.showMode(-1);
+ this.fill();
+ break;
+ case 'td':
+ if (target.is('.day')){
+ var day = parseInt(target.text(), 10)||1;
+ var month = this.viewDate.getMonth();
+ if (target.is('.old')) {
+ month -= 1;
+ } else if (target.is('.new')) {
+ month += 1;
+ }
+ var year = this.viewDate.getFullYear();
+ this.date = new Date(year, month, day,0,0,0,0);
+ this.viewDate = new Date(year, month, day,0,0,0,0);
+ this.fill();
+ this.setValue();
+ this.element.trigger({
+ type: 'changeDate',
+ date: this.date
+ });
+ this.hide();
+ }
+ break;
+ }
+ }
+ },
+ keydown:function(e) {
+ var keyCode = e.keyCode || e.which;
+ if (keyCode == 9) this.hide(); // when hiting TAB, for accessibility
+ },
+
+ showMode: function(dir) {
+ if (dir) {
+ this.viewMode = Math.max(0, Math.min(2, this.viewMode + dir));
+ }
+ this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
+ },
+
+ destroy: function() { this.element.removeData("datepicker").off(".Datepicker"); this.picker.remove() }
+ };
+
+ $.fn.datepicker = function ( option ) {
+ return this.each(function () {
+ var $this = $(this),
+ data = $this.data('datepicker'),
+ options = typeof option == 'object' && option;
+ if (!data) {
+ $this.data('datepicker', (data = new Datepicker(this, $.extend({}, $.fn.datepicker.defaults,options))));
+ }
+ if (typeof option == 'string') data[option]();
+ });
+ };
+
+ $.fn.datepicker.defaults = {
+ };
+ $.fn.datepicker.Constructor = Datepicker;
+
+ var DPGlobal = {
+ modes: [
+ {
+ clsName: 'days',
+ navFnc: 'Month',
+ navStep: 1
+ },
+ {
+ clsName: 'months',
+ navFnc: 'FullYear',
+ navStep: 1
+ },
+ {
+ clsName: 'years',
+ navFnc: 'FullYear',
+ navStep: 10
+ }],
+ dates:{
+ 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"]
+ },
+ 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]
+ },
+ parseFormat: function(format){
+ var separator = format.match(/[.\/-].*?/),
+ parts = format.split(/\W+/);
+ if (!separator || !parts || parts.length == 0){
+ throw new Error("Invalid date format.");
+ }
+ return {separator: separator, parts: parts};
+ },
+ parseDate: function(date, format) {
+ var today=new Date();
+ if (!date) date="";
+ var parts = date.split(format.separator),
+ date = new Date(today.getFullYear(),today.getMonth(),today.getDate(),0,0,0),
+ val;
+ if (parts.length == format.parts.length) {
+ for (var i=0, cnt = format.parts.length; i < cnt; i++) {
+ val = parseInt(parts[i], 10)||1;
+ switch(format.parts[i]) {
+ case 'dd':
+ case 'd':
+ date.setDate(val);
+ break;
+ case 'mm':
+ case 'm':
+ date.setMonth(val - 1);
+ break;
+ case 'yy':
+ date.setFullYear(2000 + val);
+ break;
+ case 'yyyy':
+ date.setFullYear(val);
+ break;
+ }
+ }
+ }
+ return date;
+ },
+ formatDate: function(date, format){
+ var val = {
+ d: date.getDate(),
+ m: date.getMonth() + 1,
+ yy: date.getFullYear().toString().substring(2),
+ yyyy: date.getFullYear()
+ };
+ val.dd = (val.d < 10 ? '0' : '') + val.d;
+ val.mm = (val.m < 10 ? '0' : '') + val.m;
+ var date = [];
+ for (var i=0, cnt = format.parts.length; i < cnt; i++) {
+ date.push(val[format.parts[i]]);
+ }
+ return date.join(format.separator);
+ },
+ headTemplate: ''+
+ ''+
+ ' | '+
+ ' | '+
+ ' | '+
+ '
'+
+ '',
+ contTemplate: ' |
'
+ };
+ DPGlobal.template = '';
+
+}( window.jQuery )
\ No newline at end of file
diff --git a/admin/assets/bootstrap-datepicker/datepicker-init.js b/admin/assets/bootstrap-datepicker/datepicker-init.js
new file mode 100644
index 0000000..6ba0329
--- /dev/null
+++ b/admin/assets/bootstrap-datepicker/datepicker-init.js
@@ -0,0 +1,11 @@
+$(function () {
+ $('#dp1').datepicker({
+ format: 'mm-dd-yyyy'
+ });
+ $('#dp2').datepicker({
+ format: 'mm-dd-yyyy'
+ });
+ $('#dp3').datepicker();
+});
+
+
diff --git a/admin/assets/bootstrap-datepicker/datepicker.css b/admin/assets/bootstrap-datepicker/datepicker.css
new file mode 100644
index 0000000..f9cf497
--- /dev/null
+++ b/admin/assets/bootstrap-datepicker/datepicker.css
@@ -0,0 +1,158 @@
+/*!
+* Datepicker for Bootstrap
+*
+* Original Idea: http://www.eyecon.ro/bootstrap-datepicker (Copyright 2012 Stefan Petre)
+* Updated by AymKdn (http://kodono.info - https://github.com/Aymkdn/Datepicker-for-Bootstrap)
+* Licensed under the Apache License v2.0
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+*/
+.datepicker {
+top: 0;
+left: 0;
+padding: 4px;
+margin-top: 1px;
+-webkit-border-radius: 4px;
+-moz-border-radius: 4px;
+border-radius: 4px;
+/*.dow {
+border-top: 1px solid #ddd !important;
+}*/
+}
+.datepicker:before {
+content: '';
+display: inline-block;
+border-left: 7px solid transparent;
+border-right: 7px solid transparent;
+border-bottom: 7px solid #ccc;
+border-bottom-color: rgba(0, 0, 0, 0.2);
+position: absolute;
+top: -7px;
+left: 6px;
+}
+.datepicker:after {
+content: '';
+display: inline-block;
+border-left: 6px solid transparent;
+border-right: 6px solid transparent;
+border-bottom: 6px solid #ffffff;
+position: absolute;
+top: -6px;
+left: 7px;
+}
+.datepicker > div {
+display: none;
+}
+.datepicker table {
+width: 100%;
+margin: 0;
+}
+.datepicker td, .datepicker th {
+text-align: center;
+width: 20px;
+height: 20px;
+-webkit-border-radius: 4px;
+-moz-border-radius: 4px;
+border-radius: 4px;
+}
+.datepicker td.day:hover {
+background: #eeeeee;
+cursor: pointer;
+}
+.datepicker td.old, .datepicker td.new {
+color: #999999;
+}
+.datepicker td.active, .datepicker td.active:hover {
+background-color: #006dcc;
+background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+background-image: linear-gradient(top, #0088cc, #0044cc);
+background-repeat: repeat-x;
+filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+border-color: #0044cc #0044cc #002a80;
+border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+color: #fff;
+text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker td.active:hover,
+.datepicker td.active:hover:hover,
+.datepicker td.active:active,
+.datepicker td.active:hover:active,
+.datepicker td.active.active,
+.datepicker td.active:hover.active,
+.datepicker td.active.disabled,
+.datepicker td.active:hover.disabled,
+.datepicker td.active[disabled],
+.datepicker td.active:hover[disabled] {
+background-color: #0044cc;
+}
+.datepicker td.active:active,
+.datepicker td.active:hover:active,
+.datepicker td.active.active,
+.datepicker td.active:hover.active {
+background-color: #003399 \9;
+}
+.datepicker td span {
+display: block;
+width: 47px;
+height: 54px;
+line-height: 54px;
+float: left;
+margin: 2px;
+cursor: pointer;
+-webkit-border-radius: 4px;
+-moz-border-radius: 4px;
+border-radius: 4px;
+}
+.datepicker td span:hover {
+background: #eeeeee;
+}
+.datepicker td span.active {
+background-color: #006dcc;
+background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+background-image: linear-gradient(top, #0088cc, #0044cc);
+background-repeat: repeat-x;
+filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+border-color: #0044cc #0044cc #002a80;
+border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+color: #fff;
+text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker td span.active:hover,
+.datepicker td span.active:active,
+.datepicker td span.active.active,
+.datepicker td span.active.disabled,
+.datepicker td span.active[disabled] {
+background-color: #0044cc;
+}
+.datepicker td span.active:active, .datepicker td span.active.active {
+background-color: #003399 \9;
+}
+.datepicker td span.old {
+color: #999999;
+}
+.datepicker th.switch {
+width: 145px;
+}
+.datepicker thead tr:first-child th {
+cursor: pointer;
+}
+.datepicker thead tr:first-child th:hover {
+background: #eeeeee;
+}
+.input-append.date .add-on i, .input-prepend.date .add-on i {
+display: block;
+cursor: pointer;
+width: 16px;
+height: 16px;
+}
+.dropdown-menu.datepicker { max-width:220px }
\ No newline at end of file
diff --git a/admin/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.html b/admin/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.html
new file mode 100644
index 0000000..f297f3d
--- /dev/null
+++ b/admin/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.html
@@ -0,0 +1,9 @@
+
+
+404 Not Found
+
+Not Found
+The requested URL /templates/admin/redstar/source/assets/bootstrap-datepicker/js/bootstrap-datepicker.min.js was not found on this server.
+Additionally, a 404 Not Found
+error was encountered while trying to use an ErrorDocument to handle the request.
+
diff --git a/admin/assets/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css b/admin/assets/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
new file mode 100644
index 0000000..78485fe
--- /dev/null
+++ b/admin/assets/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Datetimepicker for Bootstrap
+ *
+ * Copyright 2012 Stefan Petre
+ * Improvements by Andrew Rowls
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */.datetimepicker{padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datetimepicker-inline{width:220px}.datetimepicker.datetimepicker-rtl{direction:rtl}.datetimepicker.datetimepicker-rtl table tr td span{float:right}.datetimepicker-dropdown,.datetimepicker-dropdown-left{top:0;left:0}[class*=" datetimepicker-dropdown"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute}[class*=" datetimepicker-dropdown"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute}[class*=" datetimepicker-dropdown-top"]:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0}[class*=" datetimepicker-dropdown-top"]:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;border-bottom:0}.datetimepicker-dropdown-bottom-left:before{top:-7px;right:6px}.datetimepicker-dropdown-bottom-left:after{top:-6px;right:7px}.datetimepicker-dropdown-bottom-right:before{top:-7px;left:6px}.datetimepicker-dropdown-bottom-right:after{top:-6px;left:7px}.datetimepicker-dropdown-top-left:before{bottom:-7px;right:6px}.datetimepicker-dropdown-top-left:after{bottom:-6px;right:7px}.datetimepicker-dropdown-top-right:before{bottom:-7px;left:6px}.datetimepicker-dropdown-top-right:after{bottom:-6px;left:7px}.datetimepicker>div{display:none}.datetimepicker.minutes div.datetimepicker-minutes{display:block}.datetimepicker.hours div.datetimepicker-hours{display:block}.datetimepicker.days div.datetimepicker-days{display:block}.datetimepicker.months div.datetimepicker-months{display:block}.datetimepicker.years div.datetimepicker-years{display:block}.datetimepicker table{margin:0}.datetimepicker td,.datetimepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:0}.table-striped .datetimepicker table tr td,.table-striped .datetimepicker table tr th{background-color:transparent}.datetimepicker table tr td.minute:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.hour:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.day:hover{background:#eee;cursor:pointer}.datetimepicker table tr td.old,.datetimepicker table tr td.new{color:#999}.datetimepicker table tr td.disabled,.datetimepicker table tr td.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td.today,.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today.disabled:hover{background-color:#fde19a;background-image:-moz-linear-gradient(top,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(top,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(top,#fdd49a,#fdf59a);background-image:-o-linear-gradient(top,#fdd49a,#fdf59a);background-image:linear-gradient(to bottom,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a',endColorstr='#fdf59a',GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.datetimepicker table tr td.today:hover,.datetimepicker table tr td.today:hover:hover,.datetimepicker table tr td.today.disabled:hover,.datetimepicker table tr td.today.disabled:hover:hover,.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active,.datetimepicker table tr td.today.disabled,.datetimepicker table tr td.today:hover.disabled,.datetimepicker table tr td.today.disabled.disabled,.datetimepicker table tr td.today.disabled:hover.disabled,.datetimepicker table tr td.today[disabled],.datetimepicker table tr td.today:hover[disabled],.datetimepicker table tr td.today.disabled[disabled],.datetimepicker table tr td.today.disabled:hover[disabled]{background-color:#fdf59a}.datetimepicker table tr td.today:active,.datetimepicker table tr td.today:hover:active,.datetimepicker table tr td.today.disabled:active,.datetimepicker table tr td.today.disabled:hover:active,.datetimepicker table tr td.today.active,.datetimepicker table tr td.today:hover.active,.datetimepicker table tr td.today.disabled.active,.datetimepicker table tr td.today.disabled:hover.active{background-color:#fbf069}.datetimepicker table tr td.active,.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td.active:hover,.datetimepicker table tr td.active:hover:hover,.datetimepicker table tr td.active.disabled:hover,.datetimepicker table tr td.active.disabled:hover:hover,.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active,.datetimepicker table tr td.active.disabled,.datetimepicker table tr td.active:hover.disabled,.datetimepicker table tr td.active.disabled.disabled,.datetimepicker table tr td.active.disabled:hover.disabled,.datetimepicker table tr td.active[disabled],.datetimepicker table tr td.active:hover[disabled],.datetimepicker table tr td.active.disabled[disabled],.datetimepicker table tr td.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td.active:active,.datetimepicker table tr td.active:hover:active,.datetimepicker table tr td.active.disabled:active,.datetimepicker table tr td.active.disabled:hover:active,.datetimepicker table tr td.active.active,.datetimepicker table tr td.active:hover.active,.datetimepicker table tr td.active.disabled.active,.datetimepicker table tr td.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datetimepicker .datetimepicker-hours span{height:26px;line-height:26px}.datetimepicker .datetimepicker-hours table tr td span.hour_am,.datetimepicker .datetimepicker-hours table tr td span.hour_pm{width:14.6%}.datetimepicker .datetimepicker-hours fieldset legend,.datetimepicker .datetimepicker-minutes fieldset legend{margin-bottom:inherit;line-height:30px}.datetimepicker .datetimepicker-minutes span{height:26px;line-height:26px}.datetimepicker table tr td span:hover{background:#eee}.datetimepicker table tr td span.disabled,.datetimepicker table tr td span.disabled:hover{background:0;color:#999;cursor:default}.datetimepicker table tr td span.active,.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active.disabled:hover{background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-ms-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc',endColorstr='#0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.datetimepicker table tr td span.active:hover,.datetimepicker table tr td span.active:hover:hover,.datetimepicker table tr td span.active.disabled:hover,.datetimepicker table tr td span.active.disabled:hover:hover,.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active,.datetimepicker table tr td span.active.disabled,.datetimepicker table tr td span.active:hover.disabled,.datetimepicker table tr td span.active.disabled.disabled,.datetimepicker table tr td span.active.disabled:hover.disabled,.datetimepicker table tr td span.active[disabled],.datetimepicker table tr td span.active:hover[disabled],.datetimepicker table tr td span.active.disabled[disabled],.datetimepicker table tr td span.active.disabled:hover[disabled]{background-color:#04c}.datetimepicker table tr td span.active:active,.datetimepicker table tr td span.active:hover:active,.datetimepicker table tr td span.active.disabled:active,.datetimepicker table tr td span.active.disabled:hover:active,.datetimepicker table tr td span.active.active,.datetimepicker table tr td span.active:hover.active,.datetimepicker table tr td span.active.disabled.active,.datetimepicker table tr td span.active.disabled:hover.active{background-color:#039}.datetimepicker table tr td span.old{color:#999}.datetimepicker th.switch{width:145px}.datetimepicker th span.glyphicon{pointer-events:none}.datetimepicker thead tr:first-child th,.datetimepicker tfoot th{cursor:pointer}.datetimepicker thead tr:first-child th:hover,.datetimepicker tfoot th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i,.input-group.date .input-group-addon span{cursor:pointer;width:14px;height:14px}
\ No newline at end of file
diff --git a/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker-init.js b/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker-init.js
new file mode 100644
index 0000000..29c9c98
--- /dev/null
+++ b/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker-init.js
@@ -0,0 +1,40 @@
+$('.form_datetime').datetimepicker({
+ weekStart: 1,
+ todayBtn: 1,
+ autoclose: 1,
+ todayHighlight: 1,
+ startView: 2,
+ forceParse: 0,
+ showMeridian: 1
+});
+$('.form_date').datetimepicker({
+ weekStart: 1,
+ todayBtn: 1,
+ autoclose: 1,
+ todayHighlight: 1,
+ startView: 2,
+ minView: 2,
+ forceParse: 0
+});
+$('.form_time').datetimepicker({
+ weekStart: 1,
+ todayBtn: 1,
+ autoclose: 1,
+ todayHighlight: 1,
+ startView: 1,
+ minView: 0,
+ maxView: 1,
+ forceParse: 0
+});
+$(function () {
+ $('#datetimepicker1').datetimepicker();
+
+ $('#datetimepicker4').datetimepicker({
+ pickTime: false
+ });
+ $('#datetimepicker3').datetimepicker({
+ format: 'DD/MM/YYYY'
+ });
+});
+
+
diff --git a/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js b/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js
new file mode 100644
index 0000000..f66d69c
--- /dev/null
+++ b/admin/assets/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js
@@ -0,0 +1,1967 @@
+/* =========================================================
+ * 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
+ *
+ * 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 = '';
+ while (dowCnt < this.weekStart + 7) {
+ html += '' + dates[this.language].daysMin[(dowCnt++) % 7] + ' | ';
+ }
+ html += '
';
+ 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 += '' + dates[this.language].monthsShort[i] + '';
+ }
+ 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('');
+ }
+ 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('' + prevMonth.getUTCDate() + ' | ');
+ if (prevMonth.getUTCDay() === this.weekEnd) {
+ html.push('
');
+ }
+ 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('');
+ }
+ html.push('');
+ }
+ } else {
+ txt = i + ':00';
+ html.push('' + txt + '');
+ }
+ }
+ 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('');
+ }
+ html.push('');
+ }
+ } else {
+ txt = i + ':00';
+ html.push('' + hours + ':' + (i < 10 ? '0' + i : i) + '');
+ }
+ }
+ 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 += '' + year + '';
+ 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: '' +
+ '' +
+ ' | ' +
+ ' | ' +
+ ' | ' +
+ '
' +
+ '',
+ headTemplateV3: '' +
+ '' +
+ ' | ' +
+ ' | ' +
+ ' | ' +
+ '
' +
+ '',
+ contTemplate: ' |
',
+ footTemplate: '' +
+ ' |
' +
+ ' |
' +
+ ''
+ };
+ DPGlobal.template = '' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplate +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplate +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplate +
+ '' +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplate +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplate +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
';
+ DPGlobal.templateV3 = '' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplateV3 +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplateV3 +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplateV3 +
+ '' +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplateV3 +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
' +
+ '
' +
+ DPGlobal.headTemplateV3 +
+ DPGlobal.contTemplate +
+ DPGlobal.footTemplate +
+ '
' +
+ '
' +
+ '
';
+ $.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();
+ });
+
+}));
diff --git a/admin/assets/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css b/admin/assets/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css
new file mode 100644
index 0000000..7c6dea3
--- /dev/null
+++ b/admin/assets/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css
@@ -0,0 +1,656 @@
+/*! X-editable - v1.4.6
+* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
+* http://github.com/vitalets/x-editable
+* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
+
+.editableform {
+ margin-bottom: 0; /* overwrites bootstrap margin */
+}
+
+.editableform .control-group {
+ margin-bottom: 0; /* overwrites bootstrap margin */
+ white-space: nowrap; /* prevent wrapping buttons on new line */
+ line-height: 20px; /* overwriting bootstrap line-height. See #133 */
+}
+
+.editable-buttons {
+ display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
+ vertical-align: top;
+ margin-left: 7px;
+ /* inline-block emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-buttons.editable-buttons-bottom {
+ display: block;
+ margin-top: 7px;
+ margin-left: 0;
+}
+
+.editable-input {
+ vertical-align: top;
+ display: inline-block; /* should be inline to take effect of parent's white-space: nowrap */
+ width: auto; /* bootstrap-responsive has width: 100% that breakes layout */
+ white-space: normal; /* reset white-space decalred in parent*/
+ /* display-inline emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-buttons .editable-cancel {
+ margin-left: 7px;
+}
+
+/*for jquery-ui buttons need set height to look more pretty*/
+.editable-buttons button.ui-button-icon-only {
+ height: 24px;
+ width: 30px;
+}
+
+.editableform-loading {
+ background: url('../img/loading.gif') center center no-repeat;
+ height: 25px;
+ width: auto;
+ min-width: 25px;
+}
+
+.editable-inline .editableform-loading {
+ background-position: left 5px;
+}
+
+ .editable-error-block {
+ max-width: 300px;
+ margin: 5px 0 0 0;
+ width: auto;
+ white-space: normal;
+}
+
+/*add padding for jquery ui*/
+.editable-error-block.ui-state-error {
+ padding: 3px;
+}
+
+.editable-error {
+ color: red;
+}
+
+/* ---- For specific types ---- */
+
+.editableform .editable-date {
+ padding: 0;
+ margin: 0;
+ float: left;
+}
+
+/* move datepicker icon to center of add-on button. See https://github.com/vitalets/x-editable/issues/183 */
+.editable-inline .add-on .fa-calendar {
+ margin-top: 3px;
+ margin-left: 1px;
+}
+
+
+/* checklist vertical alignment */
+.editable-checklist label input[type="checkbox"],
+.editable-checklist label span {
+ vertical-align: middle;
+ margin: 0;
+}
+
+.editable-checklist label {
+ white-space: nowrap;
+}
+
+/* set exact width of textarea to fit buttons toolbar */
+.editable-wysihtml5 {
+ width: 566px;
+ height: 250px;
+}
+
+/* clear button shown as link in date inputs */
+.editable-clear {
+ clear: both;
+ font-size: 0.9em;
+ text-decoration: none;
+ text-align: right;
+}
+
+/* IOS-style clear button for text inputs */
+.editable-clear-x {
+ background: url('../img/clear.png') center center no-repeat;
+ display: block;
+ width: 13px;
+ height: 13px;
+ position: absolute;
+ opacity: 0.6;
+ z-index: 100;
+
+ top: 50%;
+ right: 6px;
+ margin-top: -6px;
+
+}
+
+.editable-clear-x:hover {
+ opacity: 1;
+}
+
+.editable-pre-wrapped {
+ white-space: pre-wrap;
+}
+.editable-container.editable-popup {
+ max-width: none !important; /* without this rule poshytip/tooltip does not stretch */
+}
+
+.editable-container.popover {
+ width: auto; /* without this rule popover does not stretch */
+}
+
+.editable-container.editable-inline {
+ display: inline-block;
+ vertical-align: middle;
+ width: auto;
+ /* inline-block emulation for IE7*/
+ zoom: 1;
+ *display: inline;
+}
+
+.editable-container.ui-widget {
+ font-size: inherit; /* jqueryui widget font 1.1em too big, overwrite it */
+ z-index: 9990; /* should be less than select2 dropdown z-index to close dropdown first when click */
+}
+.editable-click,
+a.editable-click,
+a.editable-click:hover {
+ text-decoration: none;
+ border-bottom: dashed 1px #0088cc;
+}
+
+.editable-click.editable-disabled,
+a.editable-click.editable-disabled,
+a.editable-click.editable-disabled:hover {
+ color: #585858;
+ cursor: default;
+ border-bottom: none;
+}
+
+.editable-empty, .editable-empty:hover, .editable-empty:focus{
+ font-style: italic;
+ color: #DD1144;
+ /* border-bottom: none; */
+ text-decoration: none;
+}
+
+.editable-unsaved {
+ font-weight: bold;
+}
+
+.editable-unsaved:after {
+/* content: '*'*/
+}
+
+.editable-bg-transition {
+ -webkit-transition: background-color 1400ms ease-out;
+ -moz-transition: background-color 1400ms ease-out;
+ -o-transition: background-color 1400ms ease-out;
+ -ms-transition: background-color 1400ms ease-out;
+ transition: background-color 1400ms ease-out;
+}
+
+/*see https://github.com/vitalets/x-editable/issues/139 */
+.form-horizontal .editable
+{
+ padding-top: 5px;
+ display:inline-block;
+}
+
+
+/*!
+ * Datepicker for Bootstrap
+ *
+ * Copyright 2012 Stefan Petre
+ * Improvements by Andrew Rowls
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+.datepicker {
+ padding: 4px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ direction: ltr;
+ /*.dow {
+ border-top: 1px solid #ddd !important;
+ }*/
+
+}
+.datepicker-inline {
+ width: 220px;
+}
+.datepicker.datepicker-rtl {
+ direction: rtl;
+}
+.datepicker.datepicker-rtl table tr td span {
+ float: right;
+}
+.datepicker-dropdown {
+ top: 0;
+ left: 0;
+}
+.datepicker-dropdown:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+ top: -7px;
+ left: 6px;
+}
+.datepicker-dropdown:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ position: absolute;
+ top: -6px;
+ left: 7px;
+}
+.datepicker > div {
+ display: none;
+}
+.datepicker.days div.datepicker-days {
+ display: block;
+}
+.datepicker.months div.datepicker-months {
+ display: block;
+}
+.datepicker.years div.datepicker-years {
+ display: block;
+}
+.datepicker table {
+ margin: 0;
+}
+.datepicker td,
+.datepicker th {
+ text-align: center;
+ width: 20px;
+ height: 20px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ border: none;
+}
+.table-striped .datepicker table tr td,
+.table-striped .datepicker table tr th {
+ background-color: transparent;
+}
+.datepicker table tr td.day:hover {
+ background: #eeeeee;
+ cursor: pointer;
+}
+.datepicker table tr td.old,
+.datepicker table tr td.new {
+ color: #999999;
+}
+.datepicker table tr td.disabled,
+.datepicker table tr td.disabled:hover {
+ background: none;
+ color: #999999;
+ cursor: default;
+}
+.datepicker table tr td.today,
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today.disabled:hover {
+ background-color: #fde19a;
+ background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
+ background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
+ background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
+ background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
+ background-image: linear-gradient(top, #fdd49a, #fdf59a);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
+ border-color: #fdf59a #fdf59a #fbed50;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #000;
+}
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today:hover:hover,
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today.disabled:hover:hover,
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today:hover.disabled,
+.datepicker table tr td.today.disabled.disabled,
+.datepicker table tr td.today.disabled:hover.disabled,
+.datepicker table tr td.today[disabled],
+.datepicker table tr td.today:hover[disabled],
+.datepicker table tr td.today.disabled[disabled],
+.datepicker table tr td.today.disabled:hover[disabled] {
+ background-color: #fdf59a;
+}
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active {
+ background-color: #fbf069 \9;
+}
+.datepicker table tr td.today:hover:hover {
+ color: #000;
+}
+.datepicker table tr td.today.active:hover {
+ color: #fff;
+}
+.datepicker table tr td.range,
+.datepicker table tr td.range:hover,
+.datepicker table tr td.range.disabled,
+.datepicker table tr td.range.disabled:hover {
+ background: #eeeeee;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.datepicker table tr td.range.today,
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today.disabled:hover {
+ background-color: #f3d17a;
+ background-image: -moz-linear-gradient(top, #f3c17a, #f3e97a);
+ background-image: -ms-linear-gradient(top, #f3c17a, #f3e97a);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
+ background-image: -webkit-linear-gradient(top, #f3c17a, #f3e97a);
+ background-image: -o-linear-gradient(top, #f3c17a, #f3e97a);
+ background-image: linear-gradient(top, #f3c17a, #f3e97a);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
+ border-color: #f3e97a #f3e97a #edde34;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today:hover:hover,
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover:hover,
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today:hover.disabled,
+.datepicker table tr td.range.today.disabled.disabled,
+.datepicker table tr td.range.today.disabled:hover.disabled,
+.datepicker table tr td.range.today[disabled],
+.datepicker table tr td.range.today:hover[disabled],
+.datepicker table tr td.range.today.disabled[disabled],
+.datepicker table tr td.range.today.disabled:hover[disabled] {
+ background-color: #f3e97a;
+}
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active {
+ background-color: #efe24b \9;
+}
+.datepicker table tr td.selected,
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected.disabled:hover {
+ background-color: #9e9e9e;
+ background-image: -moz-linear-gradient(top, #b3b3b3, #808080);
+ background-image: -ms-linear-gradient(top, #b3b3b3, #808080);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
+ background-image: -webkit-linear-gradient(top, #b3b3b3, #808080);
+ background-image: -o-linear-gradient(top, #b3b3b3, #808080);
+ background-image: linear-gradient(top, #b3b3b3, #808080);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
+ border-color: #808080 #808080 #595959;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected:hover:hover,
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.disabled:hover:hover,
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected:hover.disabled,
+.datepicker table tr td.selected.disabled.disabled,
+.datepicker table tr td.selected.disabled:hover.disabled,
+.datepicker table tr td.selected[disabled],
+.datepicker table tr td.selected:hover[disabled],
+.datepicker table tr td.selected.disabled[disabled],
+.datepicker table tr td.selected.disabled:hover[disabled] {
+ background-color: #808080;
+}
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active {
+ background-color: #666666 \9;
+}
+.datepicker table tr td.active,
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active.disabled:hover {
+ background-color: #006dcc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(top, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active:hover:hover,
+.datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active.disabled:hover:hover,
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active,
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active:hover.disabled,
+.datepicker table tr td.active.disabled.disabled,
+.datepicker table tr td.active.disabled:hover.disabled,
+.datepicker table tr td.active[disabled],
+.datepicker table tr td.active:hover[disabled],
+.datepicker table tr td.active.disabled[disabled],
+.datepicker table tr td.active.disabled:hover[disabled] {
+ background-color: #0044cc;
+}
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active {
+ background-color: #003399 \9;
+}
+.datepicker table tr td span {
+ display: block;
+ width: 23%;
+ height: 54px;
+ line-height: 54px;
+ float: left;
+ margin: 1%;
+ cursor: pointer;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.datepicker table tr td span:hover {
+ background: #eeeeee;
+}
+.datepicker table tr td span.disabled,
+.datepicker table tr td span.disabled:hover {
+ background: none;
+ color: #999999;
+ cursor: default;
+}
+.datepicker table tr td span.active,
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active.disabled:hover {
+ background-color: #006dcc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(top, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ color: #fff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active:hover.disabled,
+.datepicker table tr td span.active.disabled.disabled,
+.datepicker table tr td span.active.disabled:hover.disabled,
+.datepicker table tr td span.active[disabled],
+.datepicker table tr td span.active:hover[disabled],
+.datepicker table tr td span.active.disabled[disabled],
+.datepicker table tr td span.active.disabled:hover[disabled] {
+ background-color: #0044cc;
+}
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active {
+ background-color: #003399 \9;
+}
+.datepicker table tr td span.old,
+.datepicker table tr td span.new {
+ color: #999999;
+}
+.datepicker th.datepicker-switch {
+ width: 145px;
+}
+.datepicker thead tr:first-child th,
+.datepicker tfoot tr th {
+ cursor: pointer;
+}
+.datepicker thead tr:first-child th:hover,
+.datepicker tfoot tr th:hover {
+ background: #eeeeee;
+}
+.datepicker .cw {
+ font-size: 10px;
+ width: 12px;
+ padding: 0 2px 0 5px;
+ vertical-align: middle;
+}
+.datepicker thead tr:first-child th.cw {
+ cursor: default;
+ background-color: transparent;
+}
+.input-append.date .add-on i,
+.input-prepend.date .add-on i {
+ display: block;
+ cursor: pointer;
+ width: 16px;
+ height: 16px;
+}
+.input-daterange input {
+ text-align: center;
+}
+.input-daterange input:first-child {
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.input-daterange input:last-child {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+.input-daterange .add-on {
+ display: inline-block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: 18px;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ vertical-align: middle;
+ background-color: #eeeeee;
+ border: 1px solid #ccc;
+ margin-left: -5px;
+ margin-right: -5px;
+}
diff --git a/admin/assets/bootstrap-editable/bootstrap-editable/img/clear.png b/admin/assets/bootstrap-editable/bootstrap-editable/img/clear.png
new file mode 100644
index 0000000..580b52a
Binary files /dev/null and b/admin/assets/bootstrap-editable/bootstrap-editable/img/clear.png differ
diff --git a/admin/assets/bootstrap-editable/bootstrap-editable/img/loading.gif b/admin/assets/bootstrap-editable/bootstrap-editable/img/loading.gif
new file mode 100644
index 0000000..5b33f7e
Binary files /dev/null and b/admin/assets/bootstrap-editable/bootstrap-editable/img/loading.gif differ
diff --git a/admin/assets/bootstrap-editable/inputs-ext/address/address.css b/admin/assets/bootstrap-editable/inputs-ext/address/address.css
new file mode 100644
index 0000000..f37a43b
--- /dev/null
+++ b/admin/assets/bootstrap-editable/inputs-ext/address/address.css
@@ -0,0 +1,9 @@
+.editable-address {
+ display: block;
+ margin-bottom: 5px;
+}
+
+.editable-address span {
+ width: 70px;
+ display: inline-block;
+}
\ No newline at end of file
diff --git a/admin/assets/bootstrap-inputmask/bootstrap-inputmask.min.js b/admin/assets/bootstrap-inputmask/bootstrap-inputmask.min.js
new file mode 100644
index 0000000..5882046
--- /dev/null
+++ b/admin/assets/bootstrap-inputmask/bootstrap-inputmask.min.js
@@ -0,0 +1,7 @@
+/**
+* Bootstrap.js by @mdo and @fat, extended by @ArnoldDaniels.
+* plugins: bootstrap-inputmask.js
+* Copyright 2012 Twitter, Inc.
+* http://www.apache.org/licenses/LICENSE-2.0.txt
+*/
+!function(e){var t=window.orientation!==undefined,n=navigator.userAgent.toLowerCase().indexOf("android")>-1,r=function(t,r){if(n)return;this.$element=e(t),this.options=e.extend({},e.fn.inputmask.defaults,r),this.mask=String(r.mask),this.init(),this.listen(),this.checkVal()};r.prototype={init:function(){var t=this.options.definitions,n=this.mask.length;this.tests=[],this.partialPosition=this.mask.length,this.firstNonMaskPos=null,e.each(this.mask.split(""),e.proxy(function(e,r){r=="?"?(n--,this.partialPosition=e):t[r]?(this.tests.push(new RegExp(t[r])),this.firstNonMaskPos===null&&(this.firstNonMaskPos=this.tests.length-1)):this.tests.push(null)},this)),this.buffer=e.map(this.mask.split(""),e.proxy(function(e,n){if(e!="?")return t[e]?this.options.placeholder:e},this)),this.focusText=this.$element.val(),this.$element.data("rawMaskFn",e.proxy(function(){return e.map(this.buffer,function(e,t){return this.tests[t]&&e!=this.options.placeholder?e:null}).join("")},this))},listen:function(){if(this.$element.attr("readonly"))return;var t=(navigator.userAgent.match(/msie/i)?"paste":"input")+".mask";this.$element.on("unmask",e.proxy(this.unmask,this)).on("focus.mask",e.proxy(this.focusEvent,this)).on("blur.mask",e.proxy(this.blurEvent,this)).on("keydown.mask",e.proxy(this.keydownEvent,this)).on("keypress.mask",e.proxy(this.keypressEvent,this)).on(t,e.proxy(this.pasteEvent,this))},caret:function(e,t){if(this.$element.length===0)return;if(typeof e=="number")return t=typeof t=="number"?t:e,this.$element.each(function(){if(this.setSelectionRange)this.setSelectionRange(e,t);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}});if(this.$element[0].setSelectionRange)e=this.$element[0].selectionStart,t=this.$element[0].selectionEnd;else if(document.selection&&document.selection.createRange){var n=document.selection.createRange();e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length}return{begin:e,end:t}},seekNext:function(e){var t=this.mask.length;while(++e<=t&&!this.tests[e]);return e},seekPrev:function(e){while(--e>=0&&!this.tests[e]);return e},shiftL:function(e,t){var n=this.mask.length;if(e<0)return;for(var r=e,i=this.seekNext(t);rn.length)break}else this.buffer[i]==n.charAt(s)&&i!=this.partialPosition&&(s++,r=i);if(!e&&r+1=this.partialPosition)this.writeBuffer(),e||this.$element.val(this.$element.val().substring(0,r+1));return this.partialPosition?i:this.firstNonMaskPos}},e.fn.inputmask=function(t){return this.each(function(){var n=e(this),i=n.data("inputmask");i||n.data("inputmask",i=new r(this,t))})},e.fn.inputmask.defaults={mask:"",placeholder:"_",definitions:{9:"[0-9]",a:"[A-Za-z]","?":"[A-Za-z0-9]","*":"."}},e.fn.inputmask.Constructor=r,e(document).on("focus.inputmask.data-api","[data-mask]",function(t){var n=e(this);if(n.data("inputmask"))return;t.preventDefault(),n.inputmask(n.data())})}(window.jQuery)
\ No newline at end of file
diff --git a/admin/assets/bootstrap-switch/js/bootstrap-switch.min.js b/admin/assets/bootstrap-switch/js/bootstrap-switch.min.js
new file mode 100644
index 0000000..1381dc1
--- /dev/null
+++ b/admin/assets/bootstrap-switch/js/bootstrap-switch.min.js
@@ -0,0 +1,10 @@
+/**
+ * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches.
+ *
+ * @version v3.3.4
+ * @homepage https://bttstrp.github.io/bootstrap-switch
+ * @author Mattia Larentis (http://larentis.eu)
+ * @license Apache-2.0
+ */
+
+(function(a,b){if('function'==typeof define&&define.amd)define(['jquery'],b);else if('undefined'!=typeof exports)b(require('jquery'));else{b(a.jquery),a.bootstrapSwitch={exports:{}}.exports}})(this,function(a){'use strict';function c(j,k){if(!(j instanceof k))throw new TypeError('Cannot call a class as a function')}var d=function(j){return j&&j.__esModule?j:{default:j}}(a),e=Object.assign||function(j){for(var l,k=1;k',{class:function(){var o=[];return o.push(l.options.state?'on':'off'),l.options.size&&o.push(l.options.size),l.options.disabled&&o.push('disabled'),l.options.readonly&&o.push('readonly'),l.options.indeterminate&&o.push('indeterminate'),l.options.inverse&&o.push('inverse'),l.$element.attr('id')&&o.push('id-'+l.$element.attr('id')),o.map(l._getClass.bind(l)).concat([l.options.baseClass],l._getClasses(l.options.wrapperClass)).join(' ')}}),this.$container=g('',{class:this._getClass('container')}),this.$on=g('
',{html:this.options.onText,class:this._getClass('handle-on')+' '+this._getClass(this.options.onColor)}),this.$off=g('',{html:this.options.offText,class:this._getClass('handle-off')+' '+this._getClass(this.options.offColor)}),this.$label=g('',{html:this.options.labelText,class:this._getClass('label')}),this.$element.on('init.bootstrapSwitch',this.options.onInit.bind(this,k)),this.$element.on('switchChange.bootstrapSwitch',function(){for(var n=arguments.length,o=Array(n),p=0;p-(l._handleWidth/2);l._dragEnd=!1,l.state(l.options.inverse?!p:p)}else l.state(!l.options.state);l._dragStart=!1}},'mouseleave.bootstrapSwitch':function(){l.$label.trigger('mouseup.bootstrapSwitch')}})}},{key:'_externalLabelHandler',value:function(){var l=this,m=this.$element.closest('label');m.on('click',function(n){n.preventDefault(),n.stopImmediatePropagation(),n.target===m[0]&&l.toggleState()})}},{key:'_formHandler',value:function(){var l=this.$element.closest('form');l.data('bootstrap-switch')||l.on('reset.bootstrapSwitch',function(){window.setTimeout(function(){l.find('input').filter(function(){return g(this).data('bootstrap-switch')}).each(function(){return g(this).bootstrapSwitch('state',this.checked)})},1)}).data('bootstrap-switch',!0)}},{key:'_getClass',value:function(l){return this.options.baseClass+'-'+l}},{key:'_getClasses',value:function(l){return g.isArray(l)?l.map(this._getClass.bind(this)):[this._getClass(l)]}}]),j}();g.fn.bootstrapSwitch=function(j){for(var l=arguments.length,m=Array(1'+options.text+' ')
+ .prependTo(this.element);
+ if (this.element.parent().is('.tabs-below')) {
+ this.dropdown.addClass('dropup');
+ }
+ WinReszier.register($.proxy(this.layout, this));
+ this.layout();
+ };
+
+ TabDrop.prototype = {
+ constructor: TabDrop,
+
+ layout: function() {
+ var collection = [];
+ this.dropdown.removeClass('hide');
+ this.element
+ .append(this.dropdown.find('li'))
+ .find('>li')
+ .not('.tabdrop')
+ .each(function(){
+ if(this.offsetTop > 0) {
+ collection.push(this);
+ }
+ });
+ if (collection.length > 0) {
+ collection = $(collection);
+ this.dropdown
+ .find('ul')
+ .empty()
+ .append(collection);
+ if (this.dropdown.find('.active').length == 1) {
+ this.dropdown.addClass('active');
+ } else {
+ this.dropdown.removeClass('active');
+ }
+ } else {
+ this.dropdown.addClass('hide');
+ }
+ }
+ }
+
+ $.fn.tabdrop = function ( option ) {
+ return this.each(function () {
+ var $this = $(this),
+ data = $this.data('tabdrop'),
+ options = typeof option === 'object' && option;
+ if (!data) {
+ $this.data('tabdrop', (data = new TabDrop(this, $.extend({}, $.fn.tabdrop.defaults,options))));
+ }
+ if (typeof option == 'string') {
+ data[option]();
+ }
+ })
+ };
+
+ $.fn.tabdrop.defaults = {
+ text: ''
+ };
+
+ $.fn.tabdrop.Constructor = TabDrop;
+
+}( window.jQuery );
\ No newline at end of file
diff --git a/admin/assets/bootstrap-treeview.js b/admin/assets/bootstrap-treeview.js
new file mode 100644
index 0000000..f675ea3
--- /dev/null
+++ b/admin/assets/bootstrap-treeview.js
@@ -0,0 +1,1249 @@
+/* =========================================================
+ * bootstrap-treeview.js v1.2.0
+ * =========================================================
+ * Copyright 2013 Jonathan Miles
+ * Project URL : http://www.jondmiles.com/bootstrap-treeview
+ *
+ * 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 ($, window, document, undefined) {
+
+ /*global jQuery, console*/
+
+ 'use strict';
+
+ var pluginName = 'treeview';
+
+ var _default = {};
+
+ _default.settings = {
+
+ injectStyle: true,
+
+ levels: 2,
+
+ expandIcon: 'fa fa-plus',
+ collapseIcon: 'fa fa-minus',
+ emptyIcon: 'glyphicon',
+ nodeIcon: '',
+ selectedIcon: '',
+ checkedIcon: 'fa fa-check',
+ uncheckedIcon: 'fa fa-unchecked',
+
+ color: undefined, // '#000000',
+ backColor: undefined, // '#FFFFFF',
+ borderColor: undefined, // '#dddddd',
+ onhoverColor: '#F5F5F5',
+ selectedColor: '#FFFFFF',
+ selectedBackColor: '#428bca',
+ searchResultColor: '#D9534F',
+ searchResultBackColor: undefined, //'#FFFFFF',
+
+ enableLinks: false,
+ highlightSelected: true,
+ highlightSearchResults: true,
+ showBorder: true,
+ showIcon: true,
+ showCheckbox: false,
+ showTags: false,
+ multiSelect: false,
+
+ // Event handlers
+ onNodeChecked: undefined,
+ onNodeCollapsed: undefined,
+ onNodeDisabled: undefined,
+ onNodeEnabled: undefined,
+ onNodeExpanded: undefined,
+ onNodeSelected: undefined,
+ onNodeUnchecked: undefined,
+ onNodeUnselected: undefined,
+ onSearchComplete: undefined,
+ onSearchCleared: undefined
+ };
+
+ _default.options = {
+ silent: false,
+ ignoreChildren: false
+ };
+
+ _default.searchOptions = {
+ ignoreCase: true,
+ exactMatch: false,
+ revealResults: true
+ };
+
+ var Tree = function (element, options) {
+
+ this.$element = $(element);
+ this.elementId = element.id;
+ this.styleId = this.elementId + '-style';
+
+ this.init(options);
+
+ return {
+
+ // Options (public access)
+ options: this.options,
+
+ // Initialize / destroy methods
+ init: $.proxy(this.init, this),
+ remove: $.proxy(this.remove, this),
+
+ // Get methods
+ getNode: $.proxy(this.getNode, this),
+ getParent: $.proxy(this.getParent, this),
+ getSiblings: $.proxy(this.getSiblings, this),
+ getSelected: $.proxy(this.getSelected, this),
+ getUnselected: $.proxy(this.getUnselected, this),
+ getExpanded: $.proxy(this.getExpanded, this),
+ getCollapsed: $.proxy(this.getCollapsed, this),
+ getChecked: $.proxy(this.getChecked, this),
+ getUnchecked: $.proxy(this.getUnchecked, this),
+ getDisabled: $.proxy(this.getDisabled, this),
+ getEnabled: $.proxy(this.getEnabled, this),
+
+ // Select methods
+ selectNode: $.proxy(this.selectNode, this),
+ unselectNode: $.proxy(this.unselectNode, this),
+ toggleNodeSelected: $.proxy(this.toggleNodeSelected, this),
+
+ // Expand / collapse methods
+ collapseAll: $.proxy(this.collapseAll, this),
+ collapseNode: $.proxy(this.collapseNode, this),
+ expandAll: $.proxy(this.expandAll, this),
+ expandNode: $.proxy(this.expandNode, this),
+ toggleNodeExpanded: $.proxy(this.toggleNodeExpanded, this),
+ revealNode: $.proxy(this.revealNode, this),
+
+ // Expand / collapse methods
+ checkAll: $.proxy(this.checkAll, this),
+ checkNode: $.proxy(this.checkNode, this),
+ uncheckAll: $.proxy(this.uncheckAll, this),
+ uncheckNode: $.proxy(this.uncheckNode, this),
+ toggleNodeChecked: $.proxy(this.toggleNodeChecked, this),
+
+ // Disable / enable methods
+ disableAll: $.proxy(this.disableAll, this),
+ disableNode: $.proxy(this.disableNode, this),
+ enableAll: $.proxy(this.enableAll, this),
+ enableNode: $.proxy(this.enableNode, this),
+ toggleNodeDisabled: $.proxy(this.toggleNodeDisabled, this),
+
+ // Search methods
+ search: $.proxy(this.search, this),
+ clearSearch: $.proxy(this.clearSearch, this)
+ };
+ };
+
+ Tree.prototype.init = function (options) {
+
+ this.tree = [];
+ this.nodes = [];
+
+ if (options.data) {
+ if (typeof options.data === 'string') {
+ options.data = $.parseJSON(options.data);
+ }
+ this.tree = $.extend(true, [], options.data);
+ delete options.data;
+ }
+ this.options = $.extend({}, _default.settings, options);
+
+ this.destroy();
+ this.subscribeEvents();
+ this.setInitialStates({ nodes: this.tree }, 0);
+ this.render();
+ };
+
+ Tree.prototype.remove = function () {
+ this.destroy();
+ $.removeData(this, pluginName);
+ $('#' + this.styleId).remove();
+ };
+
+ Tree.prototype.destroy = function () {
+
+ if (!this.initialized) return;
+
+ this.$wrapper.remove();
+ this.$wrapper = null;
+
+ // Switch off events
+ this.unsubscribeEvents();
+
+ // Reset this.initialized flag
+ this.initialized = false;
+ };
+
+ Tree.prototype.unsubscribeEvents = function () {
+
+ this.$element.off('click');
+ this.$element.off('nodeChecked');
+ this.$element.off('nodeCollapsed');
+ this.$element.off('nodeDisabled');
+ this.$element.off('nodeEnabled');
+ this.$element.off('nodeExpanded');
+ this.$element.off('nodeSelected');
+ this.$element.off('nodeUnchecked');
+ this.$element.off('nodeUnselected');
+ this.$element.off('searchComplete');
+ this.$element.off('searchCleared');
+ };
+
+ Tree.prototype.subscribeEvents = function () {
+
+ this.unsubscribeEvents();
+
+ this.$element.on('click', $.proxy(this.clickHandler, this));
+
+ if (typeof (this.options.onNodeChecked) === 'function') {
+ this.$element.on('nodeChecked', this.options.onNodeChecked);
+ }
+
+ if (typeof (this.options.onNodeCollapsed) === 'function') {
+ this.$element.on('nodeCollapsed', this.options.onNodeCollapsed);
+ }
+
+ if (typeof (this.options.onNodeDisabled) === 'function') {
+ this.$element.on('nodeDisabled', this.options.onNodeDisabled);
+ }
+
+ if (typeof (this.options.onNodeEnabled) === 'function') {
+ this.$element.on('nodeEnabled', this.options.onNodeEnabled);
+ }
+
+ if (typeof (this.options.onNodeExpanded) === 'function') {
+ this.$element.on('nodeExpanded', this.options.onNodeExpanded);
+ }
+
+ if (typeof (this.options.onNodeSelected) === 'function') {
+ this.$element.on('nodeSelected', this.options.onNodeSelected);
+ }
+
+ if (typeof (this.options.onNodeUnchecked) === 'function') {
+ this.$element.on('nodeUnchecked', this.options.onNodeUnchecked);
+ }
+
+ if (typeof (this.options.onNodeUnselected) === 'function') {
+ this.$element.on('nodeUnselected', this.options.onNodeUnselected);
+ }
+
+ if (typeof (this.options.onSearchComplete) === 'function') {
+ this.$element.on('searchComplete', this.options.onSearchComplete);
+ }
+
+ if (typeof (this.options.onSearchCleared) === 'function') {
+ this.$element.on('searchCleared', this.options.onSearchCleared);
+ }
+ };
+
+ /*
+ Recurse the tree structure and ensure all nodes have
+ valid initial states. User defined states will be preserved.
+ For performance we also take this opportunity to
+ index nodes in a flattened structure
+ */
+ Tree.prototype.setInitialStates = function (node, level) {
+
+ if (!node.nodes) return;
+ level += 1;
+
+ var parent = node;
+ var _this = this;
+ $.each(node.nodes, function checkStates(index, node) {
+
+ // nodeId : unique, incremental identifier
+ node.nodeId = _this.nodes.length;
+
+ // parentId : transversing up the tree
+ node.parentId = parent.nodeId;
+
+ // if not provided set selectable default value
+ if (!node.hasOwnProperty('selectable')) {
+ node.selectable = true;
+ }
+
+ // where provided we should preserve states
+ node.state = node.state || {};
+
+ // set checked state; unless set always false
+ if (!node.state.hasOwnProperty('checked')) {
+ node.state.checked = false;
+ }
+
+ // set enabled state; unless set always false
+ if (!node.state.hasOwnProperty('disabled')) {
+ node.state.disabled = false;
+ }
+
+ // set expanded state; if not provided based on levels
+ if (!node.state.hasOwnProperty('expanded')) {
+ if (!node.state.disabled &&
+ (level < _this.options.levels) &&
+ (node.nodes && node.nodes.length > 0)) {
+ node.state.expanded = true;
+ }
+ else {
+ node.state.expanded = false;
+ }
+ }
+
+ // set selected state; unless set always false
+ if (!node.state.hasOwnProperty('selected')) {
+ node.state.selected = false;
+ }
+
+ // index nodes in a flattened structure for use later
+ _this.nodes.push(node);
+
+ // recurse child nodes and transverse the tree
+ if (node.nodes) {
+ _this.setInitialStates(node, level);
+ }
+ });
+ };
+
+ Tree.prototype.clickHandler = function (event) {
+
+ if (!this.options.enableLinks) event.preventDefault();
+
+ var target = $(event.target);
+ var node = this.findNode(target);
+ if (!node || node.state.disabled) return;
+
+ var classList = target.attr('class') ? target.attr('class').split(' ') : [];
+ if ((classList.indexOf('expand-icon') !== -1)) {
+
+ this.toggleExpandedState(node, _default.options);
+ this.render();
+ }
+ else if ((classList.indexOf('check-icon') !== -1)) {
+
+ this.toggleCheckedState(node, _default.options);
+ this.render();
+ }
+ else {
+
+ if (node.selectable) {
+ this.toggleSelectedState(node, _default.options);
+ } else {
+ this.toggleExpandedState(node, _default.options);
+ }
+
+ this.render();
+ }
+ };
+
+ // Looks up the DOM for the closest parent list item to retrieve the
+ // data attribute nodeid, which is used to lookup the node in the flattened structure.
+ Tree.prototype.findNode = function (target) {
+
+ var nodeId = target.closest('li.list-group-item').attr('data-nodeid');
+ var node = this.nodes[nodeId];
+
+ if (!node) {
+ console.log('Error: node does not exist');
+ }
+ return node;
+ };
+
+ Tree.prototype.toggleExpandedState = function (node, options) {
+ if (!node) return;
+ this.setExpandedState(node, !node.state.expanded, options);
+ };
+
+ Tree.prototype.setExpandedState = function (node, state, options) {
+
+ if (state === node.state.expanded) return;
+
+ if (state && node.nodes) {
+
+ // Expand a node
+ node.state.expanded = true;
+ if (!options.silent) {
+ this.$element.trigger('nodeExpanded', $.extend(true, {}, node));
+ }
+ }
+ else if (!state) {
+
+ // Collapse a node
+ node.state.expanded = false;
+ if (!options.silent) {
+ this.$element.trigger('nodeCollapsed', $.extend(true, {}, node));
+ }
+
+ // Collapse child nodes
+ if (node.nodes && !options.ignoreChildren) {
+ $.each(node.nodes, $.proxy(function (index, node) {
+ this.setExpandedState(node, false, options);
+ }, this));
+ }
+ }
+ };
+
+ Tree.prototype.toggleSelectedState = function (node, options) {
+ if (!node) return;
+ this.setSelectedState(node, !node.state.selected, options);
+ };
+
+ Tree.prototype.setSelectedState = function (node, state, options) {
+
+ if (state === node.state.selected) return;
+
+ if (state) {
+
+ // If multiSelect false, unselect previously selected
+ if (!this.options.multiSelect) {
+ $.each(this.findNodes('true', 'g', 'state.selected'), $.proxy(function (index, node) {
+ this.setSelectedState(node, false, options);
+ }, this));
+ }
+
+ // Continue selecting node
+ node.state.selected = true;
+ if (!options.silent) {
+ this.$element.trigger('nodeSelected', $.extend(true, {}, node));
+ }
+ }
+ else {
+
+ // Unselect node
+ node.state.selected = false;
+ if (!options.silent) {
+ this.$element.trigger('nodeUnselected', $.extend(true, {}, node));
+ }
+ }
+ };
+
+ Tree.prototype.toggleCheckedState = function (node, options) {
+ if (!node) return;
+ this.setCheckedState(node, !node.state.checked, options);
+ };
+
+ Tree.prototype.setCheckedState = function (node, state, options) {
+
+ if (state === node.state.checked) return;
+
+ if (state) {
+
+ // Check node
+ node.state.checked = true;
+
+ if (!options.silent) {
+ this.$element.trigger('nodeChecked', $.extend(true, {}, node));
+ }
+ }
+ else {
+
+ // Uncheck node
+ node.state.checked = false;
+ if (!options.silent) {
+ this.$element.trigger('nodeUnchecked', $.extend(true, {}, node));
+ }
+ }
+ };
+
+ Tree.prototype.setDisabledState = function (node, state, options) {
+
+ if (state === node.state.disabled) return;
+
+ if (state) {
+
+ // Disable node
+ node.state.disabled = true;
+
+ // Disable all other states
+ this.setExpandedState(node, false, options);
+ this.setSelectedState(node, false, options);
+ this.setCheckedState(node, false, options);
+
+ if (!options.silent) {
+ this.$element.trigger('nodeDisabled', $.extend(true, {}, node));
+ }
+ }
+ else {
+
+ // Enabled node
+ node.state.disabled = false;
+ if (!options.silent) {
+ this.$element.trigger('nodeEnabled', $.extend(true, {}, node));
+ }
+ }
+ };
+
+ Tree.prototype.render = function () {
+
+ if (!this.initialized) {
+
+ // Setup first time only components
+ this.$element.addClass(pluginName);
+ this.$wrapper = $(this.template.list);
+
+ this.injectStyle();
+
+ this.initialized = true;
+ }
+
+ this.$element.empty().append(this.$wrapper.empty());
+
+ // Build tree
+ this.buildTree(this.tree, 0);
+ };
+
+ // Starting from the root node, and recursing down the
+ // structure we build the tree one node at a time
+ Tree.prototype.buildTree = function (nodes, level) {
+
+ if (!nodes) return;
+ level += 1;
+
+ var _this = this;
+ $.each(nodes, function addNodes(id, node) {
+
+ var treeItem = $(_this.template.item)
+ .addClass('node-' + _this.elementId)
+ .addClass(node.state.checked ? 'node-checked' : '')
+ .addClass(node.state.disabled ? 'node-disabled': '')
+ .addClass(node.state.selected ? 'node-selected' : '')
+ .addClass(node.searchResult ? 'search-result' : '')
+ .attr('data-nodeid', node.nodeId)
+ .attr('style', _this.buildStyleOverride(node));
+
+ // Add indent/spacer to mimic tree structure
+ for (var i = 0; i < (level - 1); i++) {
+ treeItem.append(_this.template.indent);
+ }
+
+ // Add expand, collapse or empty spacer icons
+ var classList = [];
+ if (node.nodes) {
+ classList.push('expand-icon');
+ if (node.state.expanded) {
+ classList.push(_this.options.collapseIcon);
+ }
+ else {
+ classList.push(_this.options.expandIcon);
+ }
+ }
+ else {
+ classList.push(_this.options.emptyIcon);
+ }
+
+ treeItem
+ .append($(_this.template.icon)
+ .addClass(classList.join(' '))
+ );
+
+
+ // Add node icon
+ if (_this.options.showIcon) {
+
+ var classList = ['node-icon'];
+
+ classList.push(node.icon || _this.options.nodeIcon);
+ if (node.state.selected) {
+ classList.pop();
+ classList.push(node.selectedIcon || _this.options.selectedIcon ||
+ node.icon || _this.options.nodeIcon);
+ }
+
+ treeItem
+ .append($(_this.template.icon)
+ .addClass(classList.join(' '))
+ );
+ }
+
+ // Add check / unchecked icon
+ if (_this.options.showCheckbox) {
+
+ var classList = ['check-icon'];
+ if (node.state.checked) {
+ classList.push(_this.options.checkedIcon);
+ }
+ else {
+ classList.push(_this.options.uncheckedIcon);
+ }
+
+ treeItem
+ .append($(_this.template.icon)
+ .addClass(classList.join(' '))
+ );
+ }
+
+ // Add text
+ if (_this.options.enableLinks) {
+ // Add hyperlink
+ treeItem
+ .append($(_this.template.link)
+ .attr('href', node.href)
+ .append(node.text)
+ );
+ }
+ else {
+ // otherwise just text
+ treeItem
+ .append(node.text);
+ }
+
+ // Add tags as badges
+ if (_this.options.showTags && node.tags) {
+ $.each(node.tags, function addTag(id, tag) {
+ treeItem
+ .append($(_this.template.badge)
+ .append(tag)
+ );
+ });
+ }
+
+ // Add item to the tree
+ _this.$wrapper.append(treeItem);
+
+ // Recursively add child ndoes
+ if (node.nodes && node.state.expanded && !node.state.disabled) {
+ return _this.buildTree(node.nodes, level);
+ }
+ });
+ };
+
+ // Define any node level style override for
+ // 1. selectedNode
+ // 2. node|data assigned color overrides
+ Tree.prototype.buildStyleOverride = function (node) {
+
+ if (node.state.disabled) return '';
+
+ var color = node.color;
+ var backColor = node.backColor;
+
+ if (this.options.highlightSelected && node.state.selected) {
+ if (this.options.selectedColor) {
+ color = this.options.selectedColor;
+ }
+ if (this.options.selectedBackColor) {
+ backColor = this.options.selectedBackColor;
+ }
+ }
+
+ if (this.options.highlightSearchResults && node.searchResult && !node.state.disabled) {
+ if (this.options.searchResultColor) {
+ color = this.options.searchResultColor;
+ }
+ if (this.options.searchResultBackColor) {
+ backColor = this.options.searchResultBackColor;
+ }
+ }
+
+ return 'color:' + color +
+ ';background-color:' + backColor + ';';
+ };
+
+ // Add inline style into head
+ Tree.prototype.injectStyle = function () {
+
+ if (this.options.injectStyle && !document.getElementById(this.styleId)) {
+ $('').appendTo('head');
+ }
+ };
+
+ // Construct trees style based on user options
+ Tree.prototype.buildStyle = function () {
+
+ var style = '.node-' + this.elementId + '{';
+
+ if (this.options.color) {
+ style += 'color:' + this.options.color + ';';
+ }
+
+ if (this.options.backColor) {
+ style += 'background-color:' + this.options.backColor + ';';
+ }
+
+ if (!this.options.showBorder) {
+ style += 'border:none;';
+ }
+ else if (this.options.borderColor) {
+ style += 'border:1px solid ' + this.options.borderColor + ';';
+ }
+ style += '}';
+
+ if (this.options.onhoverColor) {
+ style += '.node-' + this.elementId + ':not(.node-disabled):hover{' +
+ 'background-color:' + this.options.onhoverColor + ';' +
+ '}';
+ }
+
+ return this.css + style;
+ };
+
+ Tree.prototype.template = {
+ list: '',
+ item: '',
+ indent: '',
+ icon: '',
+ link: '',
+ badge: ''
+ };
+
+ Tree.prototype.css = '.treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}'
+
+
+ /**
+ Returns a single node object that matches the given node id.
+ @param {Number} nodeId - A node's unique identifier
+ @return {Object} node - Matching node
+ */
+ Tree.prototype.getNode = function (nodeId) {
+ return this.nodes[nodeId];
+ };
+
+ /**
+ Returns the parent node of a given node, if valid otherwise returns undefined.
+ @param {Object|Number} identifier - A valid node or node id
+ @returns {Object} node - The parent node
+ */
+ Tree.prototype.getParent = function (identifier) {
+ var node = this.identifyNode(identifier);
+ return this.nodes[node.parentId];
+ };
+
+ /**
+ Returns an array of sibling nodes for a given node, if valid otherwise returns undefined.
+ @param {Object|Number} identifier - A valid node or node id
+ @returns {Array} nodes - Sibling nodes
+ */
+ Tree.prototype.getSiblings = function (identifier) {
+ var node = this.identifyNode(identifier);
+ var parent = this.getParent(node);
+ var nodes = parent ? parent.nodes : this.tree;
+ return nodes.filter(function (obj) {
+ return obj.nodeId !== node.nodeId;
+ });
+ };
+
+ /**
+ Returns an array of selected nodes.
+ @returns {Array} nodes - Selected nodes
+ */
+ Tree.prototype.getSelected = function () {
+ return this.findNodes('true', 'g', 'state.selected');
+ };
+
+ /**
+ Returns an array of unselected nodes.
+ @returns {Array} nodes - Unselected nodes
+ */
+ Tree.prototype.getUnselected = function () {
+ return this.findNodes('false', 'g', 'state.selected');
+ };
+
+ /**
+ Returns an array of expanded nodes.
+ @returns {Array} nodes - Expanded nodes
+ */
+ Tree.prototype.getExpanded = function () {
+ return this.findNodes('true', 'g', 'state.expanded');
+ };
+
+ /**
+ Returns an array of collapsed nodes.
+ @returns {Array} nodes - Collapsed nodes
+ */
+ Tree.prototype.getCollapsed = function () {
+ return this.findNodes('false', 'g', 'state.expanded');
+ };
+
+ /**
+ Returns an array of checked nodes.
+ @returns {Array} nodes - Checked nodes
+ */
+ Tree.prototype.getChecked = function () {
+ return this.findNodes('true', 'g', 'state.checked');
+ };
+
+ /**
+ Returns an array of unchecked nodes.
+ @returns {Array} nodes - Unchecked nodes
+ */
+ Tree.prototype.getUnchecked = function () {
+ return this.findNodes('false', 'g', 'state.checked');
+ };
+
+ /**
+ Returns an array of disabled nodes.
+ @returns {Array} nodes - Disabled nodes
+ */
+ Tree.prototype.getDisabled = function () {
+ return this.findNodes('true', 'g', 'state.disabled');
+ };
+
+ /**
+ Returns an array of enabled nodes.
+ @returns {Array} nodes - Enabled nodes
+ */
+ Tree.prototype.getEnabled = function () {
+ return this.findNodes('false', 'g', 'state.disabled');
+ };
+
+
+ /**
+ Set a node state to selected
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.selectNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setSelectedState(node, true, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Set a node state to unselected
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.unselectNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setSelectedState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Toggles a node selected state; selecting if unselected, unselecting if selected.
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.toggleNodeSelected = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.toggleSelectedState(node, options);
+ }, this));
+
+ this.render();
+ };
+
+
+ /**
+ Collapse all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.collapseAll = function (options) {
+ var identifiers = this.findNodes('true', 'g', 'state.expanded');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setExpandedState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Collapse a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.collapseNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setExpandedState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Expand all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.expandAll = function (options) {
+ options = $.extend({}, _default.options, options);
+
+ if (options && options.levels) {
+ this.expandLevels(this.tree, options.levels, options);
+ }
+ else {
+ var identifiers = this.findNodes('false', 'g', 'state.expanded');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setExpandedState(node, true, options);
+ }, this));
+ }
+
+ this.render();
+ };
+
+ /**
+ Expand a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.expandNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setExpandedState(node, true, options);
+ if (node.nodes && (options && options.levels)) {
+ this.expandLevels(node.nodes, options.levels-1, options);
+ }
+ }, this));
+
+ this.render();
+ };
+
+ Tree.prototype.expandLevels = function (nodes, level, options) {
+ options = $.extend({}, _default.options, options);
+
+ $.each(nodes, $.proxy(function (index, node) {
+ this.setExpandedState(node, (level > 0) ? true : false, options);
+ if (node.nodes) {
+ this.expandLevels(node.nodes, level-1, options);
+ }
+ }, this));
+ };
+
+ /**
+ Reveals a given tree node, expanding the tree from node to root.
+ @param {Object|Number|Array} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.revealNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ var parentNode = this.getParent(node);
+ while (parentNode) {
+ this.setExpandedState(parentNode, true, options);
+ parentNode = this.getParent(parentNode);
+ };
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Toggles a nodes expanded state; collapsing if expanded, expanding if collapsed.
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.toggleNodeExpanded = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.toggleExpandedState(node, options);
+ }, this));
+
+ this.render();
+ };
+
+
+ /**
+ Check all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.checkAll = function (options) {
+ var identifiers = this.findNodes('false', 'g', 'state.checked');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setCheckedState(node, true, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Check a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.checkNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setCheckedState(node, true, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Uncheck all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.uncheckAll = function (options) {
+ var identifiers = this.findNodes('true', 'g', 'state.checked');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setCheckedState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Uncheck a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.uncheckNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setCheckedState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Toggles a nodes checked state; checking if unchecked, unchecking if checked.
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.toggleNodeChecked = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.toggleCheckedState(node, options);
+ }, this));
+
+ this.render();
+ };
+
+
+ /**
+ Disable all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.disableAll = function (options) {
+ var identifiers = this.findNodes('false', 'g', 'state.disabled');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setDisabledState(node, true, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Disable a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.disableNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setDisabledState(node, true, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Enable all tree nodes
+ @param {optional Object} options
+ */
+ Tree.prototype.enableAll = function (options) {
+ var identifiers = this.findNodes('true', 'g', 'state.disabled');
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setDisabledState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Enable a given tree node
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.enableNode = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setDisabledState(node, false, options);
+ }, this));
+
+ this.render();
+ };
+
+ /**
+ Toggles a nodes disabled state; disabling is enabled, enabling if disabled.
+ @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
+ @param {optional Object} options
+ */
+ Tree.prototype.toggleNodeDisabled = function (identifiers, options) {
+ this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
+ this.setDisabledState(node, !node.state.disabled, options);
+ }, this));
+
+ this.render();
+ };
+
+
+ /**
+ Common code for processing multiple identifiers
+ */
+ Tree.prototype.forEachIdentifier = function (identifiers, options, callback) {
+
+ options = $.extend({}, _default.options, options);
+
+ if (!(identifiers instanceof Array)) {
+ identifiers = [identifiers];
+ }
+
+ $.each(identifiers, $.proxy(function (index, identifier) {
+ callback(this.identifyNode(identifier), options);
+ }, this));
+ };
+
+ /*
+ Identifies a node from either a node id or object
+ */
+ Tree.prototype.identifyNode = function (identifier) {
+ return ((typeof identifier) === 'number') ?
+ this.nodes[identifier] :
+ identifier;
+ };
+
+ /**
+ Searches the tree for nodes (text) that match given criteria
+ @param {String} pattern - A given string to match against
+ @param {optional Object} options - Search criteria options
+ @return {Array} nodes - Matching nodes
+ */
+ Tree.prototype.search = function (pattern, options) {
+ options = $.extend({}, _default.searchOptions, options);
+
+ this.clearSearch({ render: false });
+
+ var results = [];
+ if (pattern && pattern.length > 0) {
+
+ if (options.exactMatch) {
+ pattern = '^' + pattern + '$';
+ }
+
+ var modifier = 'g';
+ if (options.ignoreCase) {
+ modifier += 'i';
+ }
+
+ results = this.findNodes(pattern, modifier);
+
+ // Add searchResult property to all matching nodes
+ // This will be used to apply custom styles
+ // and when identifying result to be cleared
+ $.each(results, function (index, node) {
+ node.searchResult = true;
+ })
+ }
+
+ // If revealResults, then render is triggered from revealNode
+ // otherwise we just call render.
+ if (options.revealResults) {
+ this.revealNode(results);
+ }
+ else {
+ this.render();
+ }
+
+ this.$element.trigger('searchComplete', $.extend(true, {}, results));
+
+ return results;
+ };
+
+ /**
+ Clears previous search results
+ */
+ Tree.prototype.clearSearch = function (options) {
+
+ options = $.extend({}, { render: true }, options);
+
+ var results = $.each(this.findNodes('true', 'g', 'searchResult'), function (index, node) {
+ node.searchResult = false;
+ });
+
+ if (options.render) {
+ this.render();
+ }
+
+ this.$element.trigger('searchCleared', $.extend(true, {}, results));
+ };
+
+ /**
+ Find nodes that match a given criteria
+ @param {String} pattern - A given string to match against
+ @param {optional String} modifier - Valid RegEx modifiers
+ @param {optional String} attribute - Attribute to compare pattern against
+ @return {Array} nodes - Nodes that match your criteria
+ */
+ Tree.prototype.findNodes = function (pattern, modifier, attribute) {
+
+ modifier = modifier || 'g';
+ attribute = attribute || 'text';
+
+ var _this = this;
+ return $.grep(this.nodes, function (node) {
+ var val = _this.getNodeValue(node, attribute);
+ if (typeof val === 'string') {
+ return val.match(new RegExp(pattern, modifier));
+ }
+ });
+ };
+
+ /**
+ Recursive find for retrieving nested attributes values
+ All values are return as strings, unless invalid
+ @param {Object} obj - Typically a node, could be any object
+ @param {String} attr - Identifies an object property using dot notation
+ @return {String} value - Matching attributes string representation
+ */
+ Tree.prototype.getNodeValue = function (obj, attr) {
+ var index = attr.indexOf('.');
+ if (index > 0) {
+ var _obj = obj[attr.substring(0, index)];
+ var _attr = attr.substring(index + 1, attr.length);
+ return this.getNodeValue(_obj, _attr);
+ }
+ else {
+ if (obj.hasOwnProperty(attr)) {
+ return obj[attr].toString();
+ }
+ else {
+ return undefined;
+ }
+ }
+ };
+
+ var logError = function (message) {
+ if (window.console) {
+ window.console.error(message);
+ }
+ };
+
+ // Prevent against multiple instantiations,
+ // handle updates and method calls
+ $.fn[pluginName] = function (options, args) {
+
+ var result;
+
+ this.each(function () {
+ var _this = $.data(this, pluginName);
+ if (typeof options === 'string') {
+ if (!_this) {
+ logError('Not initialized, can not call method : ' + options);
+ }
+ else if (!$.isFunction(_this[options]) || options.charAt(0) === '_') {
+ logError('No such method : ' + options);
+ }
+ else {
+ if (!(args instanceof Array)) {
+ args = [ args ];
+ }
+ result = _this[options].apply(_this, args);
+ }
+ }
+ else if (typeof options === 'boolean') {
+ result = _this;
+ }
+ else {
+ $.data(this, pluginName, new Tree(this, $.extend(true, {}, options)));
+ }
+ });
+
+ return result || this;
+ };
+
+})(jQuery, window, document);
diff --git a/admin/assets/bootstrap/css/bootstrap.min.css b/admin/assets/bootstrap/css/bootstrap.min.css
new file mode 100644
index 0000000..f441f64
--- /dev/null
+++ b/admin/assets/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors
+ * Copyright 2011-2018 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;/*top:0;*/right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/admin/assets/bootstrap/js/bootstrap.min.js b/admin/assets/bootstrap/js/bootstrap.min.js
new file mode 100644
index 0000000..00c895f
--- /dev/null
+++ b/admin/assets/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v4.1.3 (https://getbootstrap.com/)
+ * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right ',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t li > .active",xn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Wn=".dropdown-toggle",Un="> .dropdown-menu .active",qn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&bn(this._element).hasClass(Nn)||bn(this._element).hasClass(On))){var t,i,e=bn(this._element).closest(Hn)[0],r=Fn.getSelectorFromElement(this._element);if(e){var o="UL"===e.nodeName?Rn:Ln;i=(i=bn.makeArray(bn(e).find(o)))[i.length-1]}var s=bn.Event(Dn.HIDE,{relatedTarget:this._element}),a=bn.Event(Dn.SHOW,{relatedTarget:i});if(i&&bn(i).trigger(s),bn(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(t=document.querySelector(r)),this._activate(this._element,e);var l=function(){var t=bn.Event(Dn.HIDDEN,{relatedTarget:n._element}),e=bn.Event(Dn.SHOWN,{relatedTarget:i});bn(i).trigger(t),bn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){bn.removeData(this._element,Sn),this._element=null},t._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?bn(e).find(Rn):bn(e).children(Ln))[0],o=n&&r&&bn(r).hasClass(kn),s=function(){return i._transitionComplete(t,r,n)};if(r&&o){var a=Fn.getTransitionDurationFromElement(r);bn(r).one(Fn.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){bn(e).removeClass(Pn+" "+Nn);var i=bn(e.parentNode).find(Un)[0];i&&bn(i).removeClass(Nn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(bn(t).addClass(Nn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),Fn.reflow(t),bn(t).addClass(Pn),t.parentNode&&bn(t.parentNode).hasClass(wn)){var r=bn(t).closest(jn)[0];if(r){var o=[].slice.call(r.querySelectorAll(Wn));bn(o).addClass(Nn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=bn(this),e=t.data(Sn);if(e||(e=new i(this),t.data(Sn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),bn(document).on(Dn.CLICK_DATA_API,xn,function(t){t.preventDefault(),qn._jQueryInterface.call(bn(this),"show")}),bn.fn.tab=qn._jQueryInterface,bn.fn.tab.Constructor=qn,bn.fn.tab.noConflict=function(){return bn.fn.tab=An,qn._jQueryInterface},qn);!function(t){if("undefined"==typeof t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=Fn,t.Alert=Kn,t.Button=Mn,t.Carousel=Qn,t.Collapse=Bn,t.Dropdown=Vn,t.Modal=Yn,t.Popover=Jn,t.Scrollspy=Zn,t.Tab=Gn,t.Tooltip=zn,Object.defineProperty(t,"__esModule",{value:!0})});
+//# sourceMappingURL=bootstrap.min.js.map
\ No newline at end of file
diff --git a/admin/assets/calendar.min.js b/admin/assets/calendar.min.js
new file mode 100644
index 0000000..110f5cb
--- /dev/null
+++ b/admin/assets/calendar.min.js
@@ -0,0 +1,107 @@
+/**
+ * Document : calendar.js
+ * Author : redstar
+ * Description: Script for calendar data
+ *
+ **/
+var AppCalendar = function() {
+ return {
+ init: function() {
+ this.initCalendar()
+ },
+ initCalendar: function() {
+ if (jQuery().fullCalendar) {
+ var e = new Date,
+ t = e.getDate(),
+ a = e.getMonth(),
+ n = e.getFullYear(),
+ r = {};
+ $("#calendar").removeClass("mobile"), r = {
+ left: "title",
+ center: "",
+ right: "prev,next,today,month,agendaWeek,agendaDay"
+ };
+ var l = function(e) {
+ var t = {
+ title: $.trim(e.text())
+ };
+ e.data("eventObject", t), e.draggable({
+ zIndex: 999,
+ revert: !0,
+ revertDuration: 0
+ })
+ },
+ o = function(e) {
+ e = 0 === e.length ? "Untitled Event" : e;
+ var t = $('' + e + "
");
+ jQuery("#event_box").append(t), l(t)
+ };
+ $("#external-events div.external-event").each(function() {
+ l($(this))
+ }), $(document).on('click', '#event_add', function () {
+ var e = $("#event_title").val();
+ o(e)
+ }), $("#event_box").html(""), o("Holiday"), o("Wife Birthday"), o("Meeting"), o("Anniversary"), o("Dinner"), o("Party"), $("#calendar").fullCalendar("destroy"), $("#calendar").fullCalendar({
+ header: r,
+ defaultView: "month",
+ slotMinutes: 15,
+ editable: !0,
+ droppable: !0,
+ drop: function(e, t) {
+ var a = $(this).data("eventObject"),
+ n = $.extend({}, a);
+ n.start = e, n.allDay = t, n.className = $(this).attr("data-class"), $("#calendar").fullCalendar("renderEvent", n, !0), $("#drop-remove").is(":checked") && $(this).remove()
+ },
+
+ /***** events ********/
+ events: [{
+ title: "All Day Event",
+ start: new Date('2016-11-01'),
+ backgroundColor: "#00FFFF"
+ }, {
+ title: "Long Event",
+ start: new Date('2016-11-07'),
+ end: new Date('2016-11-10'),
+ backgroundColor: "#F3565D"
+ }, {
+ title: "Repeating Event",
+ start: new Date('2016-11-16'),
+ allDay: !1,
+ backgroundColor: "#1bbc9b"
+ }, {
+ title: "Repeating Event",
+ start: new Date(n, a, t +5, 16, 0),
+ allDay: !1,
+ backgroundColor: "#1bbc9b"
+ }, {
+ title: "Meeting",
+ start: new Date(n, a, t, 10, 30),
+ allDay: !1
+ }, {
+ title: "Lunch",
+ start: new Date(n, a, t, 12, 0),
+ end: new Date(n, a, t, 14, 0),
+ backgroundColor: "#F8CB00",
+ allDay: !1
+ }, {
+ title: "Birthday Party",
+ start: new Date(n, a, t + 1, 19, 0),
+ end: new Date(n, a, t + 1, 22, 30),
+ backgroundColor: "#9b59b6",
+ allDay: !1
+ }, {
+ title: "Click for Google",
+ start: new Date(n, a, 29),
+ end: new Date(n, a, 30),
+ backgroundColor: "#9b59b6",
+ url: "http://google.com/"
+ }]
+ })
+ }
+ }
+ }
+}();
+jQuery(document).ready(function() {
+ 'use strict';
+ AppCalendar.init()
+});
\ No newline at end of file
diff --git a/admin/assets/chart-js/Chart.bundle.js b/admin/assets/chart-js/Chart.bundle.js
new file mode 100644
index 0000000..8316b52
--- /dev/null
+++ b/admin/assets/chart-js/Chart.bundle.js
@@ -0,0 +1,1120 @@
+(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.Chart=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;olum2){return(lum1+0.05)/(lum2+0.05);}
+return(lum2+0.05)/(lum1+0.05);},level:function(color2){var contrastRatio=this.contrast(color2);if(contrastRatio>=7.1){return'AAA';}
+return(contrastRatio>=4.5)?'AA':'';},dark:function(){var rgb=this.values.rgb;var yiq=(rgb[0]*299+rgb[1]*587+rgb[2]*114)/1000;return yiq<128;},light:function(){return!this.dark();},negate:function(){var rgb=[];for(var i=0;i<3;i++){rgb[i]=255-this.values.rgb[i];}
+this.setValues('rgb',rgb);return this;},lighten:function(ratio){var hsl=this.values.hsl;hsl[2]+=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},darken:function(ratio){var hsl=this.values.hsl;hsl[2]-=hsl[2]*ratio;this.setValues('hsl',hsl);return this;},saturate:function(ratio){var hsl=this.values.hsl;hsl[1]+=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},desaturate:function(ratio){var hsl=this.values.hsl;hsl[1]-=hsl[1]*ratio;this.setValues('hsl',hsl);return this;},whiten:function(ratio){var hwb=this.values.hwb;hwb[1]+=hwb[1]*ratio;this.setValues('hwb',hwb);return this;},blacken:function(ratio){var hwb=this.values.hwb;hwb[2]+=hwb[2]*ratio;this.setValues('hwb',hwb);return this;},greyscale:function(){var rgb=this.values.rgb;var val=rgb[0]*0.3+rgb[1]*0.59+rgb[2]*0.11;this.setValues('rgb',[val,val,val]);return this;},clearer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha-(alpha*ratio));return this;},opaquer:function(ratio){var alpha=this.values.alpha;this.setValues('alpha',alpha+(alpha*ratio));return this;},rotate:function(degrees){var hsl=this.values.hsl;var hue=(hsl[0]+degrees)%360;hsl[0]=hue<0?360+hue:hue;this.setValues('hsl',hsl);return this;},mix:function(mixinColor,weight){var color1=this;var color2=mixinColor;var p=weight===undefined?0.5:weight;var w=2*p-1;var a=color1.alpha()-color2.alpha();var w1=(((w*a===-1)?w:(w+a)/(1+w*a))+1)/2.0;var w2=1-w1;return this.rgb(w1*color1.red()+w2*color2.red(),w1*color1.green()+w2*color2.green(),w1*color1.blue()+w2*color2.blue()).alpha(color1.alpha()*p+color2.alpha()*(1-p));},toJSON:function(){return this.rgb();},clone:function(){var result=new Color();var source=this.values;var target=result.values;var value,type;for(var prop in source){if(source.hasOwnProperty(prop)){value=source[prop];type=({}).toString.call(value);if(type==='[object Array]'){target[prop]=value.slice(0);}else if(type==='[object Number]'){target[prop]=value;}else{console.error('unexpected color value:',value);}}}
+return result;}};Color.prototype.spaces={rgb:['red','green','blue'],hsl:['hue','saturation','lightness'],hsv:['hue','saturation','value'],hwb:['hue','whiteness','blackness'],cmyk:['cyan','magenta','yellow','black']};Color.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]};Color.prototype.getValues=function(space){var values=this.values;var vals={};for(var i=0;i0.04045?Math.pow(((r+0.055)/1.055),2.4):(r/12.92);g=g>0.04045?Math.pow(((g+0.055)/1.055),2.4):(g/12.92);b=b>0.04045?Math.pow(((b+0.055)/1.055),2.4):(b/12.92);var x=(r*0.4124)+(g*0.3576)+(b*0.1805);var y=(r*0.2126)+(g*0.7152)+(b*0.0722);var z=(r*0.0193)+(g*0.1192)+(b*0.9505);return[x*100,y*100,z*100];}
+function rgb2lab(rgb){var xyz=rgb2xyz(rgb),x=xyz[0],y=xyz[1],z=xyz[2],l,a,b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];}
+function rgb2lch(args){return lab2lch(rgb2lab(args));}
+function hsl2rgb(hsl){var h=hsl[0]/360,s=hsl[1]/100,l=hsl[2]/100,t1,t2,t3,rgb,val;if(s==0){val=l*255;return[val,val,val];}
+if(l<0.5)
+t2=l*(1+s);else
+t2=l+s-l*s;t1=2*l-t2;rgb=[0,0,0];for(var i=0;i<3;i++){t3=h+1/3*-(i-1);t3<0&&t3++;t3>1&&t3--;if(6*t3<1)
+val=t1+(t2-t1)*6*t3;else if(2*t3<1)
+val=t2;else if(3*t3<2)
+val=t1+(t2-t1)*(2/3-t3)*6;else
+val=t1;rgb[i]=val*255;}
+return rgb;}
+function hsl2hsv(hsl){var h=hsl[0],s=hsl[1]/100,l=hsl[2]/100,sv,v;if(l===0){return[0,0,0];}
+l*=2;s*=(l<=1)?l:2-l;v=(l+s)/2;sv=(2*s)/(l+s);return[h,sv*100,v*100];}
+function hsl2hwb(args){return rgb2hwb(hsl2rgb(args));}
+function hsl2cmyk(args){return rgb2cmyk(hsl2rgb(args));}
+function hsl2keyword(args){return rgb2keyword(hsl2rgb(args));}
+function hsv2rgb(hsv){var h=hsv[0]/60,s=hsv[1]/100,v=hsv[2]/100,hi=Math.floor(h)%6;var f=h-Math.floor(h),p=255*v*(1-s),q=255*v*(1-(s*f)),t=255*v*(1-(s*(1-f))),v=255*v;switch(hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q];}}
+function hsv2hsl(hsv){var h=hsv[0],s=hsv[1]/100,v=hsv[2]/100,sl,l;l=(2-s)*v;sl=s*v;sl/=(l<=1)?l:2-l;sl=sl||0;l/=2;return[h,sl*100,l*100];}
+function hsv2hwb(args){return rgb2hwb(hsv2rgb(args))}
+function hsv2cmyk(args){return rgb2cmyk(hsv2rgb(args));}
+function hsv2keyword(args){return rgb2keyword(hsv2rgb(args));}
+function hwb2rgb(hwb){var h=hwb[0]/360,wh=hwb[1]/100,bl=hwb[2]/100,ratio=wh+bl,i,v,f,n;if(ratio>1){wh/=ratio;bl/=ratio;}
+i=Math.floor(6*h);v=1-bl;f=6*h-i;if((i&0x01)!=0){f=1-f;}
+n=wh+f*(v-wh);switch(i){default:case 6:case 0:r=v;g=n;b=wh;break;case 1:r=n;g=v;b=wh;break;case 2:r=wh;g=v;b=n;break;case 3:r=wh;g=n;b=v;break;case 4:r=n;g=wh;b=v;break;case 5:r=v;g=wh;b=n;break;}
+return[r*255,g*255,b*255];}
+function hwb2hsl(args){return rgb2hsl(hwb2rgb(args));}
+function hwb2hsv(args){return rgb2hsv(hwb2rgb(args));}
+function hwb2cmyk(args){return rgb2cmyk(hwb2rgb(args));}
+function hwb2keyword(args){return rgb2keyword(hwb2rgb(args));}
+function cmyk2rgb(cmyk){var c=cmyk[0]/100,m=cmyk[1]/100,y=cmyk[2]/100,k=cmyk[3]/100,r,g,b;r=1-Math.min(1,c*(1-k)+k);g=1-Math.min(1,m*(1-k)+k);b=1-Math.min(1,y*(1-k)+k);return[r*255,g*255,b*255];}
+function cmyk2hsl(args){return rgb2hsl(cmyk2rgb(args));}
+function cmyk2hsv(args){return rgb2hsv(cmyk2rgb(args));}
+function cmyk2hwb(args){return rgb2hwb(cmyk2rgb(args));}
+function cmyk2keyword(args){return rgb2keyword(cmyk2rgb(args));}
+function xyz2rgb(xyz){var x=xyz[0]/100,y=xyz[1]/100,z=xyz[2]/100,r,g,b;r=(x*3.2406)+(y*-1.5372)+(z*-0.4986);g=(x*-0.9689)+(y*1.8758)+(z*0.0415);b=(x*0.0557)+(y*-0.2040)+(z*1.0570);r=r>0.0031308?((1.055*Math.pow(r,1.0/2.4))-0.055):r=(r*12.92);g=g>0.0031308?((1.055*Math.pow(g,1.0/2.4))-0.055):g=(g*12.92);b=b>0.0031308?((1.055*Math.pow(b,1.0/2.4))-0.055):b=(b*12.92);r=Math.min(Math.max(0,r),1);g=Math.min(Math.max(0,g),1);b=Math.min(Math.max(0,b),1);return[r*255,g*255,b*255];}
+function xyz2lab(xyz){var x=xyz[0],y=xyz[1],z=xyz[2],l,a,b;x/=95.047;y/=100;z/=108.883;x=x>0.008856?Math.pow(x,1/3):(7.787*x)+(16/116);y=y>0.008856?Math.pow(y,1/3):(7.787*y)+(16/116);z=z>0.008856?Math.pow(z,1/3):(7.787*z)+(16/116);l=(116*y)-16;a=500*(x-y);b=200*(y-z);return[l,a,b];}
+function xyz2lch(args){return lab2lch(xyz2lab(args));}
+function lab2xyz(lab){var l=lab[0],a=lab[1],b=lab[2],x,y,z,y2;if(l<=8){y=(l*100)/903.3;y2=(7.787*(y/100))+(16/116);}else{y=100*Math.pow((l+16)/116,3);y2=Math.pow(y/100,1/3);}
+x=x/95.047<=0.008856?x=(95.047*((a/500)+y2-(16/116)))/7.787:95.047*Math.pow((a/500)+y2,3);z=z/108.883<=0.008859?z=(108.883*(y2-(b/200)-(16/116)))/7.787:108.883*Math.pow(y2-(b/200),3);return[x,y,z];}
+function lab2lch(lab){var l=lab[0],a=lab[1],b=lab[2],hr,h,c;hr=Math.atan2(b,a);h=hr*360/2/Math.PI;if(h<0){h+=360;}
+c=Math.sqrt(a*a+b*b);return[l,c,h];}
+function lab2rgb(args){return xyz2rgb(lab2xyz(args));}
+function lch2lab(lch){var l=lch[0],c=lch[1],h=lch[2],a,b,hr;hr=h/360*2*Math.PI;a=c*Math.cos(hr);b=c*Math.sin(hr);return[l,a,b];}
+function lch2xyz(args){return lab2xyz(lch2lab(args));}
+function lch2rgb(args){return lab2rgb(lch2lab(args));}
+function keyword2rgb(keyword){return cssKeywords[keyword];}
+function keyword2hsl(args){return rgb2hsl(keyword2rgb(args));}
+function keyword2hsv(args){return rgb2hsv(keyword2rgb(args));}
+function keyword2hwb(args){return rgb2hwb(keyword2rgb(args));}
+function keyword2cmyk(args){return rgb2cmyk(keyword2rgb(args));}
+function keyword2lab(args){return rgb2lab(keyword2rgb(args));}
+function keyword2xyz(args){return rgb2xyz(keyword2rgb(args));}
+var cssKeywords={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};var reverseKeywords={};for(var key in cssKeywords){reverseKeywords[JSON.stringify(cssKeywords[key])]=key;}},{}],4:[function(require,module,exports){var conversions=require(3);var convert=function(){return new Converter();}
+for(var func in conversions){convert[func+"Raw"]=(function(func){return function(arg){if(typeof arg=="number")
+arg=Array.prototype.slice.call(arguments);return conversions[func](arg);}})(func);var pair=/(\w+)2(\w+)/.exec(func),from=pair[1],to=pair[2];convert[from]=convert[from]||{};convert[from][to]=convert[func]=(function(func){return function(arg){if(typeof arg=="number")
+arg=Array.prototype.slice.call(arguments);var val=conversions[func](arg);if(typeof val=="string"||val===undefined)
+return val;for(var i=0;i>>0;for(var i=0;i0){for(i=0;i0?'future':'past'];return isFunction(format)?format(output):format.replace(/%s/i,output);}
+var aliases={};function addUnitAlias(unit,shorthand){var lowerCase=unit.toLowerCase();aliases[lowerCase]=aliases[lowerCase+'s']=aliases[shorthand]=unit;}
+function normalizeUnits(units){return typeof units==='string'?aliases[units]||aliases[units.toLowerCase()]:undefined;}
+function normalizeObjectUnits(inputObject){var normalizedInput={},normalizedProp,prop;for(prop in inputObject){if(hasOwnProp(inputObject,prop)){normalizedProp=normalizeUnits(prop);if(normalizedProp){normalizedInput[normalizedProp]=inputObject[prop];}}}
+return normalizedInput;}
+var priorities={};function addUnitPriority(unit,priority){priorities[unit]=priority;}
+function getPrioritizedUnits(unitsObj){var units=[];for(var u in unitsObj){units.push({unit:u,priority:priorities[u]});}
+units.sort(function(a,b){return a.priority-b.priority;});return units;}
+function makeGetSet(unit,keepTime){return function(value){if(value!=null){set$1(this,unit,value);hooks.updateOffset(this,keepTime);return this;}else{return get(this,unit);}};}
+function get(mom,unit){return mom.isValid()?mom._d['get'+(mom._isUTC?'UTC':'')+unit]():NaN;}
+function set$1(mom,unit,value){if(mom.isValid()){mom._d['set'+(mom._isUTC?'UTC':'')+unit](value);}}
+function stringGet(units){units=normalizeUnits(units);if(isFunction(this[units])){return this[units]();}
+return this;}
+function stringSet(units,value){if(typeof units==='object'){units=normalizeObjectUnits(units);var prioritized=getPrioritizedUnits(units);for(var i=0;i=0;return(sign?(forceSign?'+':''):'-')+Math.pow(10,Math.max(0,zerosToFill)).toString().substr(1)+absNumber;}
+var formattingTokens=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;var localFormattingTokens=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;var formatFunctions={};var formatTokenFunctions={};function addFormatToken(token,padded,ordinal,callback){var func=callback;if(typeof callback==='string'){func=function(){return this[callback]();};}
+if(token){formatTokenFunctions[token]=func;}
+if(padded){formatTokenFunctions[padded[0]]=function(){return zeroFill(func.apply(this,arguments),padded[1],padded[2]);};}
+if(ordinal){formatTokenFunctions[ordinal]=function(){return this.localeData().ordinal(func.apply(this,arguments),token);};}}
+function removeFormattingTokens(input){if(input.match(/\[[\s\S]/)){return input.replace(/^\[|\]$/g,'');}
+return input.replace(/\\/g,'');}
+function makeFormatFunction(format){var array=format.match(formattingTokens),i,length;for(i=0,length=array.length;i=0&&localFormattingTokens.test(format)){format=format.replace(localFormattingTokens,replaceLongDateFormatTokens);localFormattingTokens.lastIndex=0;i-=1;}
+return format;}
+var match1=/\d/;var match2=/\d\d/;var match3=/\d{3}/;var match4=/\d{4}/;var match6=/[+-]?\d{6}/;var match1to2=/\d\d?/;var match3to4=/\d\d\d\d?/;var match5to6=/\d\d\d\d\d\d?/;var match1to3=/\d{1,3}/;var match1to4=/\d{1,4}/;var match1to6=/[+-]?\d{1,6}/;var matchUnsigned=/\d+/;var matchSigned=/[+-]?\d+/;var matchOffset=/Z|[+-]\d\d:?\d\d/gi;var matchShortOffset=/Z|[+-]\d\d(?::?\d\d)?/gi;var matchTimestamp=/[+-]?\d+(\.\d{1,3})?/;var matchWord=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;var regexes={};function addRegexToken(token,regex,strictRegex){regexes[token]=isFunction(regex)?regex:function(isStrict,localeData){return(isStrict&&strictRegex)?strictRegex:regex;};}
+function getParseRegexForToken(token,config){if(!hasOwnProp(regexes,token)){return new RegExp(unescapeFormat(token));}
+return regexes[token](config._strict,config._locale);}
+function unescapeFormat(s){return regexEscape(s.replace('\\','').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(matched,p1,p2,p3,p4){return p1||p2||p3||p4;}));}
+function regexEscape(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&');}
+var tokens={};function addParseToken(token,callback){var i,func=callback;if(typeof token==='string'){token=[token];}
+if(isNumber(callback)){func=function(input,array){array[callback]=toInt(input);};}
+for(i=0;i68?1900:2000);};var getSetYear=makeGetSet('FullYear',true);function getIsLeapYear(){return isLeapYear(this.year());}
+function createDate(y,m,d,h,M,s,ms){var date=new Date(y,m,d,h,M,s,ms);if(y<100&&y>=0&&isFinite(date.getFullYear())){date.setFullYear(y);}
+return date;}
+function createUTCDate(y){var date=new Date(Date.UTC.apply(null,arguments));if(y<100&&y>=0&&isFinite(date.getUTCFullYear())){date.setUTCFullYear(y);}
+return date;}
+function firstWeekOffset(year,dow,doy){var
+fwd=7+dow-doy,fwdlw=(7+createUTCDate(year,0,fwd).getUTCDay()-dow)%7;return-fwdlw+fwd-1;}
+function dayOfYearFromWeeks(year,week,weekday,dow,doy){var localWeekday=(7+weekday-dow)%7,weekOffset=firstWeekOffset(year,dow,doy),dayOfYear=1+7*(week-1)+localWeekday+weekOffset,resYear,resDayOfYear;if(dayOfYear<=0){resYear=year-1;resDayOfYear=daysInYear(resYear)+dayOfYear;}else if(dayOfYear>daysInYear(year)){resYear=year+1;resDayOfYear=dayOfYear-daysInYear(year);}else{resYear=year;resDayOfYear=dayOfYear;}
+return{year:resYear,dayOfYear:resDayOfYear};}
+function weekOfYear(mom,dow,doy){var weekOffset=firstWeekOffset(mom.year(),dow,doy),week=Math.floor((mom.dayOfYear()-weekOffset-1)/7)+1,resWeek,resYear;if(week<1){resYear=mom.year()-1;resWeek=week+weeksInYear(resYear,dow,doy);}else if(week>weeksInYear(mom.year(),dow,doy)){resWeek=week-weeksInYear(mom.year(),dow,doy);resYear=mom.year()+1;}else{resYear=mom.year();resWeek=week;}
+return{week:resWeek,year:resYear};}
+function weeksInYear(year,dow,doy){var weekOffset=firstWeekOffset(year,dow,doy),weekOffsetNext=firstWeekOffset(year+1,dow,doy);return(daysInYear(year)-weekOffset+weekOffsetNext)/7;}
+addFormatToken('w',['ww',2],'wo','week');addFormatToken('W',['WW',2],'Wo','isoWeek');addUnitAlias('week','w');addUnitAlias('isoWeek','W');addUnitPriority('week',5);addUnitPriority('isoWeek',5);addRegexToken('w',match1to2);addRegexToken('ww',match1to2,match2);addRegexToken('W',match1to2);addRegexToken('WW',match1to2,match2);addWeekParseToken(['w','ww','W','WW'],function(input,week,config,token){week[token.substr(0,1)]=toInt(input);});function localeWeek(mom){return weekOfYear(mom,this._week.dow,this._week.doy).week;}
+var defaultLocaleWeek={dow:0,doy:6};function localeFirstDayOfWeek(){return this._week.dow;}
+function localeFirstDayOfYear(){return this._week.doy;}
+function getSetWeek(input){var week=this.localeData().week(this);return input==null?week:this.add((input-week)*7,'d');}
+function getSetISOWeek(input){var week=weekOfYear(this,1,4).week;return input==null?week:this.add((input-week)*7,'d');}
+addFormatToken('d',0,'do','day');addFormatToken('dd',0,0,function(format){return this.localeData().weekdaysMin(this,format);});addFormatToken('ddd',0,0,function(format){return this.localeData().weekdaysShort(this,format);});addFormatToken('dddd',0,0,function(format){return this.localeData().weekdays(this,format);});addFormatToken('e',0,0,'weekday');addFormatToken('E',0,0,'isoWeekday');addUnitAlias('day','d');addUnitAlias('weekday','e');addUnitAlias('isoWeekday','E');addUnitPriority('day',11);addUnitPriority('weekday',11);addUnitPriority('isoWeekday',11);addRegexToken('d',match1to2);addRegexToken('e',match1to2);addRegexToken('E',match1to2);addRegexToken('dd',function(isStrict,locale){return locale.weekdaysMinRegex(isStrict);});addRegexToken('ddd',function(isStrict,locale){return locale.weekdaysShortRegex(isStrict);});addRegexToken('dddd',function(isStrict,locale){return locale.weekdaysRegex(isStrict);});addWeekParseToken(['dd','ddd','dddd'],function(input,week,config,token){var weekday=config._locale.weekdaysParse(input,token,config._strict);if(weekday!=null){week.d=weekday;}else{getParsingFlags(config).invalidWeekday=input;}});addWeekParseToken(['d','e','E'],function(input,week,config,token){week[token]=toInt(input);});function parseWeekday(input,locale){if(typeof input!=='string'){return input;}
+if(!isNaN(input)){return parseInt(input,10);}
+input=locale.weekdaysParse(input);if(typeof input==='number'){return input;}
+return null;}
+function parseIsoWeekday(input,locale){if(typeof input==='string'){return locale.weekdaysParse(input)%7||7;}
+return isNaN(input)?null:input;}
+var defaultLocaleWeekdays='Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');function localeWeekdays(m,format){if(!m){return isArray(this._weekdays)?this._weekdays:this._weekdays['standalone'];}
+return isArray(this._weekdays)?this._weekdays[m.day()]:this._weekdays[this._weekdays.isFormat.test(format)?'format':'standalone'][m.day()];}
+var defaultLocaleWeekdaysShort='Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');function localeWeekdaysShort(m){return(m)?this._weekdaysShort[m.day()]:this._weekdaysShort;}
+var defaultLocaleWeekdaysMin='Su_Mo_Tu_We_Th_Fr_Sa'.split('_');function localeWeekdaysMin(m){return(m)?this._weekdaysMin[m.day()]:this._weekdaysMin;}
+function handleStrictParse$1(weekdayName,format,strict){var i,ii,mom,llc=weekdayName.toLocaleLowerCase();if(!this._weekdaysParse){this._weekdaysParse=[];this._shortWeekdaysParse=[];this._minWeekdaysParse=[];for(i=0;i<7;++i){mom=createUTC([2000,1]).day(i);this._minWeekdaysParse[i]=this.weekdaysMin(mom,'').toLocaleLowerCase();this._shortWeekdaysParse[i]=this.weekdaysShort(mom,'').toLocaleLowerCase();this._weekdaysParse[i]=this.weekdays(mom,'').toLocaleLowerCase();}}
+if(strict){if(format==='dddd'){ii=indexOf$1.call(this._weekdaysParse,llc);return ii!==-1?ii:null;}else if(format==='ddd'){ii=indexOf$1.call(this._shortWeekdaysParse,llc);return ii!==-1?ii:null;}else{ii=indexOf$1.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null;}}else{if(format==='dddd'){ii=indexOf$1.call(this._weekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._shortWeekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null;}else if(format==='ddd'){ii=indexOf$1.call(this._shortWeekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._weekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._minWeekdaysParse,llc);return ii!==-1?ii:null;}else{ii=indexOf$1.call(this._minWeekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._weekdaysParse,llc);if(ii!==-1){return ii;}
+ii=indexOf$1.call(this._shortWeekdaysParse,llc);return ii!==-1?ii:null;}}}
+function localeWeekdaysParse(weekdayName,format,strict){var i,mom,regex;if(this._weekdaysParseExact){return handleStrictParse$1.call(this,weekdayName,format,strict);}
+if(!this._weekdaysParse){this._weekdaysParse=[];this._minWeekdaysParse=[];this._shortWeekdaysParse=[];this._fullWeekdaysParse=[];}
+for(i=0;i<7;i++){mom=createUTC([2000,1]).day(i);if(strict&&!this._fullWeekdaysParse[i]){this._fullWeekdaysParse[i]=new RegExp('^'+this.weekdays(mom,'').replace('.','\.?')+'$','i');this._shortWeekdaysParse[i]=new RegExp('^'+this.weekdaysShort(mom,'').replace('.','\.?')+'$','i');this._minWeekdaysParse[i]=new RegExp('^'+this.weekdaysMin(mom,'').replace('.','\.?')+'$','i');}
+if(!this._weekdaysParse[i]){regex='^'+this.weekdays(mom,'')+'|^'+this.weekdaysShort(mom,'')+'|^'+this.weekdaysMin(mom,'');this._weekdaysParse[i]=new RegExp(regex.replace('.',''),'i');}
+if(strict&&format==='dddd'&&this._fullWeekdaysParse[i].test(weekdayName)){return i;}else if(strict&&format==='ddd'&&this._shortWeekdaysParse[i].test(weekdayName)){return i;}else if(strict&&format==='dd'&&this._minWeekdaysParse[i].test(weekdayName)){return i;}else if(!strict&&this._weekdaysParse[i].test(weekdayName)){return i;}}}
+function getSetDayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN;}
+var day=this._isUTC?this._d.getUTCDay():this._d.getDay();if(input!=null){input=parseWeekday(input,this.localeData());return this.add(input-day,'d');}else{return day;}}
+function getSetLocaleDayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN;}
+var weekday=(this.day()+7-this.localeData()._week.dow)%7;return input==null?weekday:this.add(input-weekday,'d');}
+function getSetISODayOfWeek(input){if(!this.isValid()){return input!=null?this:NaN;}
+if(input!=null){var weekday=parseIsoWeekday(input,this.localeData());return this.day(this.day()%7?weekday:weekday-7);}else{return this.day()||7;}}
+var defaultWeekdaysRegex=matchWord;function weekdaysRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,'_weekdaysRegex')){computeWeekdaysParse.call(this);}
+if(isStrict){return this._weekdaysStrictRegex;}else{return this._weekdaysRegex;}}else{if(!hasOwnProp(this,'_weekdaysRegex')){this._weekdaysRegex=defaultWeekdaysRegex;}
+return this._weekdaysStrictRegex&&isStrict?this._weekdaysStrictRegex:this._weekdaysRegex;}}
+var defaultWeekdaysShortRegex=matchWord;function weekdaysShortRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,'_weekdaysRegex')){computeWeekdaysParse.call(this);}
+if(isStrict){return this._weekdaysShortStrictRegex;}else{return this._weekdaysShortRegex;}}else{if(!hasOwnProp(this,'_weekdaysShortRegex')){this._weekdaysShortRegex=defaultWeekdaysShortRegex;}
+return this._weekdaysShortStrictRegex&&isStrict?this._weekdaysShortStrictRegex:this._weekdaysShortRegex;}}
+var defaultWeekdaysMinRegex=matchWord;function weekdaysMinRegex(isStrict){if(this._weekdaysParseExact){if(!hasOwnProp(this,'_weekdaysRegex')){computeWeekdaysParse.call(this);}
+if(isStrict){return this._weekdaysMinStrictRegex;}else{return this._weekdaysMinRegex;}}else{if(!hasOwnProp(this,'_weekdaysMinRegex')){this._weekdaysMinRegex=defaultWeekdaysMinRegex;}
+return this._weekdaysMinStrictRegex&&isStrict?this._weekdaysMinStrictRegex:this._weekdaysMinRegex;}}
+function computeWeekdaysParse(){function cmpLenRev(a,b){return b.length-a.length;}
+var minPieces=[],shortPieces=[],longPieces=[],mixedPieces=[],i,mom,minp,shortp,longp;for(i=0;i<7;i++){mom=createUTC([2000,1]).day(i);minp=this.weekdaysMin(mom,'');shortp=this.weekdaysShort(mom,'');longp=this.weekdays(mom,'');minPieces.push(minp);shortPieces.push(shortp);longPieces.push(longp);mixedPieces.push(minp);mixedPieces.push(shortp);mixedPieces.push(longp);}
+minPieces.sort(cmpLenRev);shortPieces.sort(cmpLenRev);longPieces.sort(cmpLenRev);mixedPieces.sort(cmpLenRev);for(i=0;i<7;i++){shortPieces[i]=regexEscape(shortPieces[i]);longPieces[i]=regexEscape(longPieces[i]);mixedPieces[i]=regexEscape(mixedPieces[i]);}
+this._weekdaysRegex=new RegExp('^('+mixedPieces.join('|')+')','i');this._weekdaysShortRegex=this._weekdaysRegex;this._weekdaysMinRegex=this._weekdaysRegex;this._weekdaysStrictRegex=new RegExp('^('+longPieces.join('|')+')','i');this._weekdaysShortStrictRegex=new RegExp('^('+shortPieces.join('|')+')','i');this._weekdaysMinStrictRegex=new RegExp('^('+minPieces.join('|')+')','i');}
+function hFormat(){return this.hours()%12||12;}
+function kFormat(){return this.hours()||24;}
+addFormatToken('H',['HH',2],0,'hour');addFormatToken('h',['hh',2],0,hFormat);addFormatToken('k',['kk',2],0,kFormat);addFormatToken('hmm',0,0,function(){return''+hFormat.apply(this)+zeroFill(this.minutes(),2);});addFormatToken('hmmss',0,0,function(){return''+hFormat.apply(this)+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2);});addFormatToken('Hmm',0,0,function(){return''+this.hours()+zeroFill(this.minutes(),2);});addFormatToken('Hmmss',0,0,function(){return''+this.hours()+zeroFill(this.minutes(),2)+zeroFill(this.seconds(),2);});function meridiem(token,lowercase){addFormatToken(token,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),lowercase);});}
+meridiem('a',true);meridiem('A',false);addUnitAlias('hour','h');addUnitPriority('hour',13);function matchMeridiem(isStrict,locale){return locale._meridiemParse;}
+addRegexToken('a',matchMeridiem);addRegexToken('A',matchMeridiem);addRegexToken('H',match1to2);addRegexToken('h',match1to2);addRegexToken('k',match1to2);addRegexToken('HH',match1to2,match2);addRegexToken('hh',match1to2,match2);addRegexToken('kk',match1to2,match2);addRegexToken('hmm',match3to4);addRegexToken('hmmss',match5to6);addRegexToken('Hmm',match3to4);addRegexToken('Hmmss',match5to6);addParseToken(['H','HH'],HOUR);addParseToken(['k','kk'],function(input,array,config){var kInput=toInt(input);array[HOUR]=kInput===24?0:kInput;});addParseToken(['a','A'],function(input,array,config){config._isPm=config._locale.isPM(input);config._meridiem=input;});addParseToken(['h','hh'],function(input,array,config){array[HOUR]=toInt(input);getParsingFlags(config).bigHour=true;});addParseToken('hmm',function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos));array[MINUTE]=toInt(input.substr(pos));getParsingFlags(config).bigHour=true;});addParseToken('hmmss',function(input,array,config){var pos1=input.length-4;var pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1));array[MINUTE]=toInt(input.substr(pos1,2));array[SECOND]=toInt(input.substr(pos2));getParsingFlags(config).bigHour=true;});addParseToken('Hmm',function(input,array,config){var pos=input.length-2;array[HOUR]=toInt(input.substr(0,pos));array[MINUTE]=toInt(input.substr(pos));});addParseToken('Hmmss',function(input,array,config){var pos1=input.length-4;var pos2=input.length-2;array[HOUR]=toInt(input.substr(0,pos1));array[MINUTE]=toInt(input.substr(pos1,2));array[SECOND]=toInt(input.substr(pos2));});function localeIsPM(input){return((input+'').toLowerCase().charAt(0)==='p');}
+var defaultLocaleMeridiemParse=/[ap]\.?m?\.?/i;function localeMeridiem(hours,minutes,isLower){if(hours>11){return isLower?'pm':'PM';}else{return isLower?'am':'AM';}}
+var getSetHour=makeGetSet('Hours',true);var baseConfig={calendar:defaultCalendar,longDateFormat:defaultLongDateFormat,invalidDate:defaultInvalidDate,ordinal:defaultOrdinal,dayOfMonthOrdinalParse:defaultDayOfMonthOrdinalParse,relativeTime:defaultRelativeTime,months:defaultLocaleMonths,monthsShort:defaultLocaleMonthsShort,week:defaultLocaleWeek,weekdays:defaultLocaleWeekdays,weekdaysMin:defaultLocaleWeekdaysMin,weekdaysShort:defaultLocaleWeekdaysShort,meridiemParse:defaultLocaleMeridiemParse};var locales={};var localeFamilies={};var globalLocale;function normalizeLocale(key){return key?key.toLowerCase().replace('_','-'):key;}
+function chooseLocale(names){var i=0,j,next,locale,split;while(i0){locale=loadLocale(split.slice(0,j).join('-'));if(locale){return locale;}
+if(next&&next.length>=j&&compareArrays(split,next,true)>=j-1){break;}
+j--;}
+i++;}
+return null;}
+function loadLocale(name){var oldLocale=null;if(!locales[name]&&(typeof module!=='undefined')&&module&&module.exports){try{oldLocale=globalLocale._abbr;require('./locale/'+name);getSetGlobalLocale(oldLocale);}catch(e){}}
+return locales[name];}
+function getSetGlobalLocale(key,values){var data;if(key){if(isUndefined(values)){data=getLocale(key);}
+else{data=defineLocale(key,values);}
+if(data){globalLocale=data;}}
+return globalLocale._abbr;}
+function defineLocale(name,config){if(config!==null){var parentConfig=baseConfig;config.abbr=name;if(locales[name]!=null){deprecateSimple('defineLocaleOverride','use moment.updateLocale(localeName, config) to change '+'an existing locale. moment.defineLocale(localeName, '+'config) should only be used for creating a new locale '+'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');parentConfig=locales[name]._config;}else if(config.parentLocale!=null){if(locales[config.parentLocale]!=null){parentConfig=locales[config.parentLocale]._config;}else{if(!localeFamilies[config.parentLocale]){localeFamilies[config.parentLocale]=[];}
+localeFamilies[config.parentLocale].push({name:name,config:config});return null;}}
+locales[name]=new Locale(mergeConfigs(parentConfig,config));if(localeFamilies[name]){localeFamilies[name].forEach(function(x){defineLocale(x.name,x.config);});}
+getSetGlobalLocale(name);return locales[name];}else{delete locales[name];return null;}}
+function updateLocale(name,config){if(config!=null){var locale,parentConfig=baseConfig;if(locales[name]!=null){parentConfig=locales[name]._config;}
+config=mergeConfigs(parentConfig,config);locale=new Locale(config);locale.parentLocale=locales[name];locales[name]=locale;getSetGlobalLocale(name);}else{if(locales[name]!=null){if(locales[name].parentLocale!=null){locales[name]=locales[name].parentLocale;}else if(locales[name]!=null){delete locales[name];}}}
+return locales[name];}
+function getLocale(key){var locale;if(key&&key._locale&&key._locale._abbr){key=key._locale._abbr;}
+if(!key){return globalLocale;}
+if(!isArray(key)){locale=loadLocale(key);if(locale){return locale;}
+key=[key];}
+return chooseLocale(key);}
+function listLocales(){return keys$1(locales);}
+function checkOverflow(m){var overflow;var a=m._a;if(a&&getParsingFlags(m).overflow===-2){overflow=a[MONTH]<0||a[MONTH]>11?MONTH:a[DATE]<1||a[DATE]>daysInMonth(a[YEAR],a[MONTH])?DATE:a[HOUR]<0||a[HOUR]>24||(a[HOUR]===24&&(a[MINUTE]!==0||a[SECOND]!==0||a[MILLISECOND]!==0))?HOUR:a[MINUTE]<0||a[MINUTE]>59?MINUTE:a[SECOND]<0||a[SECOND]>59?SECOND:a[MILLISECOND]<0||a[MILLISECOND]>999?MILLISECOND:-1;if(getParsingFlags(m)._overflowDayOfYear&&(overflowDATE)){overflow=DATE;}
+if(getParsingFlags(m)._overflowWeeks&&overflow===-1){overflow=WEEK;}
+if(getParsingFlags(m)._overflowWeekday&&overflow===-1){overflow=WEEKDAY;}
+getParsingFlags(m).overflow=overflow;}
+return m;}
+var extendedIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;var basicIsoRegex=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;var tzRegex=/Z|[+-]\d\d(?::?\d\d)?/;var isoDates=[['YYYYYY-MM-DD',/[+-]\d{6}-\d\d-\d\d/],['YYYY-MM-DD',/\d{4}-\d\d-\d\d/],['GGGG-[W]WW-E',/\d{4}-W\d\d-\d/],['GGGG-[W]WW',/\d{4}-W\d\d/,false],['YYYY-DDD',/\d{4}-\d{3}/],['YYYY-MM',/\d{4}-\d\d/,false],['YYYYYYMMDD',/[+-]\d{10}/],['YYYYMMDD',/\d{8}/],['GGGG[W]WWE',/\d{4}W\d{3}/],['GGGG[W]WW',/\d{4}W\d{2}/,false],['YYYYDDD',/\d{7}/]];var isoTimes=[['HH:mm:ss.SSSS',/\d\d:\d\d:\d\d\.\d+/],['HH:mm:ss,SSSS',/\d\d:\d\d:\d\d,\d+/],['HH:mm:ss',/\d\d:\d\d:\d\d/],['HH:mm',/\d\d:\d\d/],['HHmmss.SSSS',/\d\d\d\d\d\d\.\d+/],['HHmmss,SSSS',/\d\d\d\d\d\d,\d+/],['HHmmss',/\d\d\d\d\d\d/],['HHmm',/\d\d\d\d/],['HH',/\d\d/]];var aspNetJsonRegex=/^\/?Date\((\-?\d+)/i;function configFromISO(config){var i,l,string=config._i,match=extendedIsoRegex.exec(string)||basicIsoRegex.exec(string),allowTime,dateFormat,timeFormat,tzFormat;if(match){getParsingFlags(config).iso=true;for(i=0,l=isoDates.length;i10)?'YYYY ':'YY ');timeFormat='HH:mm'+(match[4]?':ss':'');if(match[1]){var momentDate=new Date(match[2]);var momentDay=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];if(match[1].substr(0,3)!==momentDay){getParsingFlags(config).weekdayMismatch=true;config._isValid=false;return;}}
+switch(match[5].length){case 2:if(timezoneIndex===0){timezone=' +0000';}else{timezoneIndex=military.indexOf(match[5][1].toUpperCase())-12;timezone=((timezoneIndex<0)?' -':' +')+((''+timezoneIndex).replace(/^-?/,'0')).match(/..$/)[0]+'00';}
+break;case 4:timezone=timezones[match[5]];break;default:timezone=timezones[' GMT'];}
+match[5]=timezone;config._i=match.splice(1).join('');tzFormat=' ZZ';config._f=dayFormat+dateFormat+timeFormat+tzFormat;configFromStringAndFormat(config);getParsingFlags(config).rfc2822=true;}else{config._isValid=false;}}
+function configFromString(config){var matched=aspNetJsonRegex.exec(config._i);if(matched!==null){config._d=new Date(+matched[1]);return;}
+configFromISO(config);if(config._isValid===false){delete config._isValid;}else{return;}
+configFromRFC2822(config);if(config._isValid===false){delete config._isValid;}else{return;}
+hooks.createFromInputFallback(config);}
+hooks.createFromInputFallback=deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), '+'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are '+'discouraged and will be removed in an upcoming major release. Please refer to '+'http://momentjs.com/guides/#/warnings/js-date/ for more info.',function(config){config._d=new Date(config._i+(config._useUTC?' UTC':''));});function defaults(a,b,c){if(a!=null){return a;}
+if(b!=null){return b;}
+return c;}
+function currentDateArray(config){var nowValue=new Date(hooks.now());if(config._useUTC){return[nowValue.getUTCFullYear(),nowValue.getUTCMonth(),nowValue.getUTCDate()];}
+return[nowValue.getFullYear(),nowValue.getMonth(),nowValue.getDate()];}
+function configFromArray(config){var i,date,input=[],currentDate,yearToUse;if(config._d){return;}
+currentDate=currentDateArray(config);if(config._w&&config._a[DATE]==null&&config._a[MONTH]==null){dayOfYearFromWeekInfo(config);}
+if(config._dayOfYear!=null){yearToUse=defaults(config._a[YEAR],currentDate[YEAR]);if(config._dayOfYear>daysInYear(yearToUse)||config._dayOfYear===0){getParsingFlags(config)._overflowDayOfYear=true;}
+date=createUTCDate(yearToUse,0,config._dayOfYear);config._a[MONTH]=date.getUTCMonth();config._a[DATE]=date.getUTCDate();}
+for(i=0;i<3&&config._a[i]==null;++i){config._a[i]=input[i]=currentDate[i];}
+for(;i<7;i++){config._a[i]=input[i]=(config._a[i]==null)?(i===2?1:0):config._a[i];}
+if(config._a[HOUR]===24&&config._a[MINUTE]===0&&config._a[SECOND]===0&&config._a[MILLISECOND]===0){config._nextDay=true;config._a[HOUR]=0;}
+config._d=(config._useUTC?createUTCDate:createDate).apply(null,input);if(config._tzm!=null){config._d.setUTCMinutes(config._d.getUTCMinutes()-config._tzm);}
+if(config._nextDay){config._a[HOUR]=24;}}
+function dayOfYearFromWeekInfo(config){var w,weekYear,week,weekday,dow,doy,temp,weekdayOverflow;w=config._w;if(w.GG!=null||w.W!=null||w.E!=null){dow=1;doy=4;weekYear=defaults(w.GG,config._a[YEAR],weekOfYear(createLocal(),1,4).year);week=defaults(w.W,1);weekday=defaults(w.E,1);if(weekday<1||weekday>7){weekdayOverflow=true;}}else{dow=config._locale._week.dow;doy=config._locale._week.doy;var curWeek=weekOfYear(createLocal(),dow,doy);weekYear=defaults(w.gg,config._a[YEAR],curWeek.year);week=defaults(w.w,curWeek.week);if(w.d!=null){weekday=w.d;if(weekday<0||weekday>6){weekdayOverflow=true;}}else if(w.e!=null){weekday=w.e+dow;if(w.e<0||w.e>6){weekdayOverflow=true;}}else{weekday=dow;}}
+if(week<1||week>weeksInYear(weekYear,dow,doy)){getParsingFlags(config)._overflowWeeks=true;}else if(weekdayOverflow!=null){getParsingFlags(config)._overflowWeekday=true;}else{temp=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy);config._a[YEAR]=temp.year;config._dayOfYear=temp.dayOfYear;}}
+hooks.ISO_8601=function(){};hooks.RFC_2822=function(){};function configFromStringAndFormat(config){if(config._f===hooks.ISO_8601){configFromISO(config);return;}
+if(config._f===hooks.RFC_2822){configFromRFC2822(config);return;}
+config._a=[];getParsingFlags(config).empty=true;var string=''+config._i,i,parsedInput,tokens,token,skipped,stringLength=string.length,totalParsedInputLength=0;tokens=expandFormat(config._f,config._locale).match(formattingTokens)||[];for(i=0;i0){getParsingFlags(config).unusedInput.push(skipped);}
+string=string.slice(string.indexOf(parsedInput)+parsedInput.length);totalParsedInputLength+=parsedInput.length;}
+if(formatTokenFunctions[token]){if(parsedInput){getParsingFlags(config).empty=false;}
+else{getParsingFlags(config).unusedTokens.push(token);}
+addTimeToArrayFromToken(token,parsedInput,config);}
+else if(config._strict&&!parsedInput){getParsingFlags(config).unusedTokens.push(token);}}
+getParsingFlags(config).charsLeftOver=stringLength-totalParsedInputLength;if(string.length>0){getParsingFlags(config).unusedInput.push(string);}
+if(config._a[HOUR]<=12&&getParsingFlags(config).bigHour===true&&config._a[HOUR]>0){getParsingFlags(config).bigHour=undefined;}
+getParsingFlags(config).parsedDateParts=config._a.slice(0);getParsingFlags(config).meridiem=config._meridiem;config._a[HOUR]=meridiemFixWrap(config._locale,config._a[HOUR],config._meridiem);configFromArray(config);checkOverflow(config);}
+function meridiemFixWrap(locale,hour,meridiem){var isPm;if(meridiem==null){return hour;}
+if(locale.meridiemHour!=null){return locale.meridiemHour(hour,meridiem);}else if(locale.isPM!=null){isPm=locale.isPM(meridiem);if(isPm&&hour<12){hour+=12;}
+if(!isPm&&hour===12){hour=0;}
+return hour;}else{return hour;}}
+function configFromStringAndArray(config){var tempConfig,bestMoment,scoreToBeat,i,currentScore;if(config._f.length===0){getParsingFlags(config).invalidFormat=true;config._d=new Date(NaN);return;}
+for(i=0;ithis?this:other;}else{return createInvalid();}});function pickBy(fn,moments){var res,i;if(moments.length===1&&isArray(moments[0])){moments=moments[0];}
+if(!moments.length){return createLocal();}
+res=moments[0];for(i=1;ithis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset());}
+function isDaylightSavingTimeShifted(){if(!isUndefined(this._isDSTShifted)){return this._isDSTShifted;}
+var c={};copyConfig(c,this);c=prepareConfig(c);if(c._a){var other=c._isUTC?createUTC(c._a):createLocal(c._a);this._isDSTShifted=this.isValid()&&compareArrays(c._a,other.toArray())>0;}else{this._isDSTShifted=false;}
+return this._isDSTShifted;}
+function isLocal(){return this.isValid()?!this._isUTC:false;}
+function isUtcOffset(){return this.isValid()?this._isUTC:false;}
+function isUtc(){return this.isValid()?this._isUTC&&this._offset===0:false;}
+var aspNetRegex=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;var isoRegex=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;function createDuration(input,key){var duration=input,match=null,sign,ret,diffRes;if(isDuration(input)){duration={ms:input._milliseconds,d:input._days,M:input._months};}else if(isNumber(input)){duration={};if(key){duration[key]=input;}else{duration.milliseconds=input;}}else if(!!(match=aspNetRegex.exec(input))){sign=(match[1]==='-')?-1:1;duration={y:0,d:toInt(match[DATE])*sign,h:toInt(match[HOUR])*sign,m:toInt(match[MINUTE])*sign,s:toInt(match[SECOND])*sign,ms:toInt(absRound(match[MILLISECOND]*1000))*sign};}else if(!!(match=isoRegex.exec(input))){sign=(match[1]==='-')?-1:1;duration={y:parseIso(match[2],sign),M:parseIso(match[3],sign),w:parseIso(match[4],sign),d:parseIso(match[5],sign),h:parseIso(match[6],sign),m:parseIso(match[7],sign),s:parseIso(match[8],sign)};}else if(duration==null){duration={};}else if(typeof duration==='object'&&('from'in duration||'to'in duration)){diffRes=momentsDifference(createLocal(duration.from),createLocal(duration.to));duration={};duration.ms=diffRes.milliseconds;duration.M=diffRes.months;}
+ret=new Duration(duration);if(isDuration(input)&&hasOwnProp(input,'_locale')){ret._locale=input._locale;}
+return ret;}
+createDuration.fn=Duration.prototype;createDuration.invalid=createInvalid$1;function parseIso(inp,sign){var res=inp&&parseFloat(inp.replace(',','.'));return(isNaN(res)?0:res)*sign;}
+function positiveMomentsDifference(base,other){var res={milliseconds:0,months:0};res.months=other.month()-base.month()+(other.year()-base.year())*12;if(base.clone().add(res.months,'M').isAfter(other)){--res.months;}
+res.milliseconds=+other-+(base.clone().add(res.months,'M'));return res;}
+function momentsDifference(base,other){var res;if(!(base.isValid()&&other.isValid())){return{milliseconds:0,months:0};}
+other=cloneWithOffset(other,base);if(base.isBefore(other)){res=positiveMomentsDifference(base,other);}else{res=positiveMomentsDifference(other,base);res.milliseconds=-res.milliseconds;res.months=-res.months;}
+return res;}
+function createAdder(direction,name){return function(val,period){var dur,tmp;if(period!==null&&!isNaN(+period)){deprecateSimple(name,'moment().'+name+'(period, number) is deprecated. Please use moment().'+name+'(number, period). '+'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');tmp=val;val=period;period=tmp;}
+val=typeof val==='string'?+val:val;dur=createDuration(val,period);addSubtract(this,dur,direction);return this;};}
+function addSubtract(mom,duration,isAdding,updateOffset){var milliseconds=duration._milliseconds,days=absRound(duration._days),months=absRound(duration._months);if(!mom.isValid()){return;}
+updateOffset=updateOffset==null?true:updateOffset;if(milliseconds){mom._d.setTime(mom._d.valueOf()+milliseconds*isAdding);}
+if(days){set$1(mom,'Date',get(mom,'Date')+days*isAdding);}
+if(months){setMonth(mom,get(mom,'Month')+months*isAdding);}
+if(updateOffset){hooks.updateOffset(mom,days||months);}}
+var add=createAdder(1,'add');var subtract=createAdder(-1,'subtract');function getCalendarFormat(myMoment,now){var diff=myMoment.diff(now,'days',true);return diff<-6?'sameElse':diff<-1?'lastWeek':diff<0?'lastDay':diff<1?'sameDay':diff<2?'nextDay':diff<7?'nextWeek':'sameElse';}
+function calendar$1(time,formats){var now=time||createLocal(),sod=cloneWithOffset(now,this).startOf('day'),format=hooks.calendarFormat(this,sod)||'sameElse';var output=formats&&(isFunction(formats[format])?formats[format].call(this,now):formats[format]);return this.format(output||this.localeData().calendar(format,this,createLocal(now)));}
+function clone(){return new Moment(this);}
+function isAfter(input,units){var localInput=isMoment(input)?input:createLocal(input);if(!(this.isValid()&&localInput.isValid())){return false;}
+units=normalizeUnits(!isUndefined(units)?units:'millisecond');if(units==='millisecond'){return this.valueOf()>localInput.valueOf();}else{return localInput.valueOf()9999){return formatMoment(m,'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');}
+if(isFunction(Date.prototype.toISOString)){return this.toDate().toISOString();}
+return formatMoment(m,'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');}
+function inspect(){if(!this.isValid()){return'moment.invalid(/* '+this._i+' */)';}
+var func='moment';var zone='';if(!this.isLocal()){func=this.utcOffset()===0?'moment.utc':'moment.parseZone';zone='Z';}
+var prefix='['+func+'("]';var year=(0<=this.year()&&this.year()<=9999)?'YYYY':'YYYYYY';var datetime='-MM-DD[T]HH:mm:ss.SSS';var suffix=zone+'[")]';return this.format(prefix+year+datetime+suffix);}
+function format(inputString){if(!inputString){inputString=this.isUtc()?hooks.defaultFormatUtc:hooks.defaultFormat;}
+var output=formatMoment(this,inputString);return this.localeData().postformat(output);}
+function from(time,withoutSuffix){if(this.isValid()&&((isMoment(time)&&time.isValid())||createLocal(time).isValid())){return createDuration({to:this,from:time}).locale(this.locale()).humanize(!withoutSuffix);}else{return this.localeData().invalidDate();}}
+function fromNow(withoutSuffix){return this.from(createLocal(),withoutSuffix);}
+function to(time,withoutSuffix){if(this.isValid()&&((isMoment(time)&&time.isValid())||createLocal(time).isValid())){return createDuration({from:this,to:time}).locale(this.locale()).humanize(!withoutSuffix);}else{return this.localeData().invalidDate();}}
+function toNow(withoutSuffix){return this.to(createLocal(),withoutSuffix);}
+function locale(key){var newLocaleData;if(key===undefined){return this._locale._abbr;}else{newLocaleData=getLocale(key);if(newLocaleData!=null){this._locale=newLocaleData;}
+return this;}}
+var lang=deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',function(key){if(key===undefined){return this.localeData();}else{return this.locale(key);}});function localeData(){return this._locale;}
+function startOf(units){units=normalizeUnits(units);switch(units){case'year':this.month(0);case'quarter':case'month':this.date(1);case'week':case'isoWeek':case'day':case'date':this.hours(0);case'hour':this.minutes(0);case'minute':this.seconds(0);case'second':this.milliseconds(0);}
+if(units==='week'){this.weekday(0);}
+if(units==='isoWeek'){this.isoWeekday(1);}
+if(units==='quarter'){this.month(Math.floor(this.month()/3)*3);}
+return this;}
+function endOf(units){units=normalizeUnits(units);if(units===undefined||units==='millisecond'){return this;}
+if(units==='date'){units='day';}
+return this.startOf(units).add(1,(units==='isoWeek'?'week':units)).subtract(1,'ms');}
+function valueOf(){return this._d.valueOf()-((this._offset||0)*60000);}
+function unix(){return Math.floor(this.valueOf()/1000);}
+function toDate(){return new Date(this.valueOf());}
+function toArray(){var m=this;return[m.year(),m.month(),m.date(),m.hour(),m.minute(),m.second(),m.millisecond()];}
+function toObject(){var m=this;return{years:m.year(),months:m.month(),date:m.date(),hours:m.hours(),minutes:m.minutes(),seconds:m.seconds(),milliseconds:m.milliseconds()};}
+function toJSON(){return this.isValid()?this.toISOString():null;}
+function isValid$2(){return isValid(this);}
+function parsingFlags(){return extend({},getParsingFlags(this));}
+function invalidAt(){return getParsingFlags(this).overflow;}
+function creationData(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict};}
+addFormatToken(0,['gg',2],0,function(){return this.weekYear()%100;});addFormatToken(0,['GG',2],0,function(){return this.isoWeekYear()%100;});function addWeekYearFormatToken(token,getter){addFormatToken(0,[token,token.length],0,getter);}
+addWeekYearFormatToken('gggg','weekYear');addWeekYearFormatToken('ggggg','weekYear');addWeekYearFormatToken('GGGG','isoWeekYear');addWeekYearFormatToken('GGGGG','isoWeekYear');addUnitAlias('weekYear','gg');addUnitAlias('isoWeekYear','GG');addUnitPriority('weekYear',1);addUnitPriority('isoWeekYear',1);addRegexToken('G',matchSigned);addRegexToken('g',matchSigned);addRegexToken('GG',match1to2,match2);addRegexToken('gg',match1to2,match2);addRegexToken('GGGG',match1to4,match4);addRegexToken('gggg',match1to4,match4);addRegexToken('GGGGG',match1to6,match6);addRegexToken('ggggg',match1to6,match6);addWeekParseToken(['gggg','ggggg','GGGG','GGGGG'],function(input,week,config,token){week[token.substr(0,2)]=toInt(input);});addWeekParseToken(['gg','GG'],function(input,week,config,token){week[token]=hooks.parseTwoDigitYear(input);});function getSetWeekYear(input){return getSetWeekYearHelper.call(this,input,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy);}
+function getSetISOWeekYear(input){return getSetWeekYearHelper.call(this,input,this.isoWeek(),this.isoWeekday(),1,4);}
+function getISOWeeksInYear(){return weeksInYear(this.year(),1,4);}
+function getWeeksInYear(){var weekInfo=this.localeData()._week;return weeksInYear(this.year(),weekInfo.dow,weekInfo.doy);}
+function getSetWeekYearHelper(input,week,weekday,dow,doy){var weeksTarget;if(input==null){return weekOfYear(this,dow,doy).year;}else{weeksTarget=weeksInYear(input,dow,doy);if(week>weeksTarget){week=weeksTarget;}
+return setWeekAll.call(this,input,week,weekday,dow,doy);}}
+function setWeekAll(weekYear,week,weekday,dow,doy){var dayOfYearData=dayOfYearFromWeeks(weekYear,week,weekday,dow,doy),date=createUTCDate(dayOfYearData.year,0,dayOfYearData.dayOfYear);this.year(date.getUTCFullYear());this.month(date.getUTCMonth());this.date(date.getUTCDate());return this;}
+addFormatToken('Q',0,'Qo','quarter');addUnitAlias('quarter','Q');addUnitPriority('quarter',7);addRegexToken('Q',match1);addParseToken('Q',function(input,array){array[MONTH]=(toInt(input)-1)*3;});function getSetQuarter(input){return input==null?Math.ceil((this.month()+1)/3):this.month((input-1)*3+this.month()%3);}
+addFormatToken('D',['DD',2],'Do','date');addUnitAlias('date','D');addUnitPriority('date',9);addRegexToken('D',match1to2);addRegexToken('DD',match1to2,match2);addRegexToken('Do',function(isStrict,locale){return isStrict?(locale._dayOfMonthOrdinalParse||locale._ordinalParse):locale._dayOfMonthOrdinalParseLenient;});addParseToken(['D','DD'],DATE);addParseToken('Do',function(input,array){array[DATE]=toInt(input.match(match1to2)[0],10);});var getSetDayOfMonth=makeGetSet('Date',true);addFormatToken('DDD',['DDDD',3],'DDDo','dayOfYear');addUnitAlias('dayOfYear','DDD');addUnitPriority('dayOfYear',4);addRegexToken('DDD',match1to3);addRegexToken('DDDD',match3);addParseToken(['DDD','DDDD'],function(input,array,config){config._dayOfYear=toInt(input);});function getSetDayOfYear(input){var dayOfYear=Math.round((this.clone().startOf('day')-this.clone().startOf('year'))/864e5)+1;return input==null?dayOfYear:this.add((input-dayOfYear),'d');}
+addFormatToken('m',['mm',2],0,'minute');addUnitAlias('minute','m');addUnitPriority('minute',14);addRegexToken('m',match1to2);addRegexToken('mm',match1to2,match2);addParseToken(['m','mm'],MINUTE);var getSetMinute=makeGetSet('Minutes',false);addFormatToken('s',['ss',2],0,'second');addUnitAlias('second','s');addUnitPriority('second',15);addRegexToken('s',match1to2);addRegexToken('ss',match1to2,match2);addParseToken(['s','ss'],SECOND);var getSetSecond=makeGetSet('Seconds',false);addFormatToken('S',0,0,function(){return~~(this.millisecond()/100);});addFormatToken(0,['SS',2],0,function(){return~~(this.millisecond()/10);});addFormatToken(0,['SSS',3],0,'millisecond');addFormatToken(0,['SSSS',4],0,function(){return this.millisecond()*10;});addFormatToken(0,['SSSSS',5],0,function(){return this.millisecond()*100;});addFormatToken(0,['SSSSSS',6],0,function(){return this.millisecond()*1000;});addFormatToken(0,['SSSSSSS',7],0,function(){return this.millisecond()*10000;});addFormatToken(0,['SSSSSSSS',8],0,function(){return this.millisecond()*100000;});addFormatToken(0,['SSSSSSSSS',9],0,function(){return this.millisecond()*1000000;});addUnitAlias('millisecond','ms');addUnitPriority('millisecond',16);addRegexToken('S',match1to3,match1);addRegexToken('SS',match1to3,match2);addRegexToken('SSS',match1to3,match3);var token;for(token='SSSS';token.length<=9;token+='S'){addRegexToken(token,matchUnsigned);}
+function parseMs(input,array){array[MILLISECOND]=toInt(('0.'+input)*1000);}
+for(token='S';token.length<=9;token+='S'){addParseToken(token,parseMs);}
+var getSetMillisecond=makeGetSet('Milliseconds',false);addFormatToken('z',0,0,'zoneAbbr');addFormatToken('zz',0,0,'zoneName');function getZoneAbbr(){return this._isUTC?'UTC':'';}
+function getZoneName(){return this._isUTC?'Coordinated Universal Time':'';}
+var proto=Moment.prototype;proto.add=add;proto.calendar=calendar$1;proto.clone=clone;proto.diff=diff;proto.endOf=endOf;proto.format=format;proto.from=from;proto.fromNow=fromNow;proto.to=to;proto.toNow=toNow;proto.get=stringGet;proto.invalidAt=invalidAt;proto.isAfter=isAfter;proto.isBefore=isBefore;proto.isBetween=isBetween;proto.isSame=isSame;proto.isSameOrAfter=isSameOrAfter;proto.isSameOrBefore=isSameOrBefore;proto.isValid=isValid$2;proto.lang=lang;proto.locale=locale;proto.localeData=localeData;proto.max=prototypeMax;proto.min=prototypeMin;proto.parsingFlags=parsingFlags;proto.set=stringSet;proto.startOf=startOf;proto.subtract=subtract;proto.toArray=toArray;proto.toObject=toObject;proto.toDate=toDate;proto.toISOString=toISOString;proto.inspect=inspect;proto.toJSON=toJSON;proto.toString=toString;proto.unix=unix;proto.valueOf=valueOf;proto.creationData=creationData;proto.year=getSetYear;proto.isLeapYear=getIsLeapYear;proto.weekYear=getSetWeekYear;proto.isoWeekYear=getSetISOWeekYear;proto.quarter=proto.quarters=getSetQuarter;proto.month=getSetMonth;proto.daysInMonth=getDaysInMonth;proto.week=proto.weeks=getSetWeek;proto.isoWeek=proto.isoWeeks=getSetISOWeek;proto.weeksInYear=getWeeksInYear;proto.isoWeeksInYear=getISOWeeksInYear;proto.date=getSetDayOfMonth;proto.day=proto.days=getSetDayOfWeek;proto.weekday=getSetLocaleDayOfWeek;proto.isoWeekday=getSetISODayOfWeek;proto.dayOfYear=getSetDayOfYear;proto.hour=proto.hours=getSetHour;proto.minute=proto.minutes=getSetMinute;proto.second=proto.seconds=getSetSecond;proto.millisecond=proto.milliseconds=getSetMillisecond;proto.utcOffset=getSetOffset;proto.utc=setOffsetToUTC;proto.local=setOffsetToLocal;proto.parseZone=setOffsetToParsedOffset;proto.hasAlignedHourOffset=hasAlignedHourOffset;proto.isDST=isDaylightSavingTime;proto.isLocal=isLocal;proto.isUtcOffset=isUtcOffset;proto.isUtc=isUtc;proto.isUTC=isUtc;proto.zoneAbbr=getZoneAbbr;proto.zoneName=getZoneName;proto.dates=deprecate('dates accessor is deprecated. Use date instead.',getSetDayOfMonth);proto.months=deprecate('months accessor is deprecated. Use month instead',getSetMonth);proto.years=deprecate('years accessor is deprecated. Use year instead',getSetYear);proto.zone=deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',getSetZone);proto.isDSTShifted=deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',isDaylightSavingTimeShifted);function createUnix(input){return createLocal(input*1000);}
+function createInZone(){return createLocal.apply(null,arguments).parseZone();}
+function preParsePostFormat(string){return string;}
+var proto$1=Locale.prototype;proto$1.calendar=calendar;proto$1.longDateFormat=longDateFormat;proto$1.invalidDate=invalidDate;proto$1.ordinal=ordinal;proto$1.preparse=preParsePostFormat;proto$1.postformat=preParsePostFormat;proto$1.relativeTime=relativeTime;proto$1.pastFuture=pastFuture;proto$1.set=set;proto$1.months=localeMonths;proto$1.monthsShort=localeMonthsShort;proto$1.monthsParse=localeMonthsParse;proto$1.monthsRegex=monthsRegex;proto$1.monthsShortRegex=monthsShortRegex;proto$1.week=localeWeek;proto$1.firstDayOfYear=localeFirstDayOfYear;proto$1.firstDayOfWeek=localeFirstDayOfWeek;proto$1.weekdays=localeWeekdays;proto$1.weekdaysMin=localeWeekdaysMin;proto$1.weekdaysShort=localeWeekdaysShort;proto$1.weekdaysParse=localeWeekdaysParse;proto$1.weekdaysRegex=weekdaysRegex;proto$1.weekdaysShortRegex=weekdaysShortRegex;proto$1.weekdaysMinRegex=weekdaysMinRegex;proto$1.isPM=localeIsPM;proto$1.meridiem=localeMeridiem;function get$1(format,index,field,setter){var locale=getLocale();var utc=createUTC().set(setter,index);return locale[field](utc,format);}
+function listMonthsImpl(format,index,field){if(isNumber(format)){index=format;format=undefined;}
+format=format||'';if(index!=null){return get$1(format,index,field,'month');}
+var i;var out=[];for(i=0;i<12;i++){out[i]=get$1(format,i,field,'month');}
+return out;}
+function listWeekdaysImpl(localeSorted,format,index,field){if(typeof localeSorted==='boolean'){if(isNumber(format)){index=format;format=undefined;}
+format=format||'';}else{format=localeSorted;index=format;localeSorted=false;if(isNumber(format)){index=format;format=undefined;}
+format=format||'';}
+var locale=getLocale(),shift=localeSorted?locale._week.dow:0;if(index!=null){return get$1(format,(index+shift)%7,field,'day');}
+var i;var out=[];for(i=0;i<7;i++){out[i]=get$1(format,(i+shift)%7,field,'day');}
+return out;}
+function listMonths(format,index){return listMonthsImpl(format,index,'months');}
+function listMonthsShort(format,index){return listMonthsImpl(format,index,'monthsShort');}
+function listWeekdays(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,'weekdays');}
+function listWeekdaysShort(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,'weekdaysShort');}
+function listWeekdaysMin(localeSorted,format,index){return listWeekdaysImpl(localeSorted,format,index,'weekdaysMin');}
+getSetGlobalLocale('en',{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(number){var b=number%10,output=(toInt(number%100/10)===1)?'th':(b===1)?'st':(b===2)?'nd':(b===3)?'rd':'th';return number+output;}});hooks.lang=deprecate('moment.lang is deprecated. Use moment.locale instead.',getSetGlobalLocale);hooks.langData=deprecate('moment.langData is deprecated. Use moment.localeData instead.',getLocale);var mathAbs=Math.abs;function abs(){var data=this._data;this._milliseconds=mathAbs(this._milliseconds);this._days=mathAbs(this._days);this._months=mathAbs(this._months);data.milliseconds=mathAbs(data.milliseconds);data.seconds=mathAbs(data.seconds);data.minutes=mathAbs(data.minutes);data.hours=mathAbs(data.hours);data.months=mathAbs(data.months);data.years=mathAbs(data.years);return this;}
+function addSubtract$1(duration,input,value,direction){var other=createDuration(input,value);duration._milliseconds+=direction*other._milliseconds;duration._days+=direction*other._days;duration._months+=direction*other._months;return duration._bubble();}
+function add$1(input,value){return addSubtract$1(this,input,value,1);}
+function subtract$1(input,value){return addSubtract$1(this,input,value,-1);}
+function absCeil(number){if(number<0){return Math.floor(number);}else{return Math.ceil(number);}}
+function bubble(){var milliseconds=this._milliseconds;var days=this._days;var months=this._months;var data=this._data;var seconds,minutes,hours,years,monthsFromDays;if(!((milliseconds>=0&&days>=0&&months>=0)||(milliseconds<=0&&days<=0&&months<=0))){milliseconds+=absCeil(monthsToDays(months)+days)*864e5;days=0;months=0;}
+data.milliseconds=milliseconds%1000;seconds=absFloor(milliseconds/1000);data.seconds=seconds%60;minutes=absFloor(seconds/60);data.minutes=minutes%60;hours=absFloor(minutes/60);data.hours=hours%24;days+=absFloor(hours/24);monthsFromDays=absFloor(daysToMonths(days));months+=monthsFromDays;days-=absCeil(monthsToDays(monthsFromDays));years=absFloor(months/12);months%=12;data.days=days;data.months=months;data.years=years;return this;}
+function daysToMonths(days){return days*4800/146097;}
+function monthsToDays(months){return months*146097/4800;}
+function as(units){if(!this.isValid()){return NaN;}
+var days;var months;var milliseconds=this._milliseconds;units=normalizeUnits(units);if(units==='month'||units==='year'){days=this._days+milliseconds/864e5;months=this._months+daysToMonths(days);return units==='month'?months:months/12;}else{days=this._days+Math.round(monthsToDays(this._months));switch(units){case'week':return days/7+milliseconds/6048e5;case'day':return days+milliseconds/864e5;case'hour':return days*24+milliseconds/36e5;case'minute':return days*1440+milliseconds/6e4;case'second':return days*86400+milliseconds/1000;case'millisecond':return Math.floor(days*864e5)+milliseconds;default:throw new Error('Unknown unit '+units);}}}
+function valueOf$1(){if(!this.isValid()){return NaN;}
+return(this._milliseconds+this._days*864e5+(this._months%12)*2592e6+toInt(this._months/12)*31536e6);}
+function makeAs(alias){return function(){return this.as(alias);};}
+var asMilliseconds=makeAs('ms');var asSeconds=makeAs('s');var asMinutes=makeAs('m');var asHours=makeAs('h');var asDays=makeAs('d');var asWeeks=makeAs('w');var asMonths=makeAs('M');var asYears=makeAs('y');function get$2(units){units=normalizeUnits(units);return this.isValid()?this[units+'s']():NaN;}
+function makeGetter(name){return function(){return this.isValid()?this._data[name]:NaN;};}
+var milliseconds=makeGetter('milliseconds');var seconds=makeGetter('seconds');var minutes=makeGetter('minutes');var hours=makeGetter('hours');var days=makeGetter('days');var months=makeGetter('months');var years=makeGetter('years');function weeks(){return absFloor(this.days()/7);}
+var round=Math.round;var thresholds={ss:44,s:45,m:45,h:22,d:26,M:11};function substituteTimeAgo(string,number,withoutSuffix,isFuture,locale){return locale.relativeTime(number||1,!!withoutSuffix,string,isFuture);}
+function relativeTime$1(posNegDuration,withoutSuffix,locale){var duration=createDuration(posNegDuration).abs();var seconds=round(duration.as('s'));var minutes=round(duration.as('m'));var hours=round(duration.as('h'));var days=round(duration.as('d'));var months=round(duration.as('M'));var years=round(duration.as('y'));var a=seconds<=thresholds.ss&&['s',seconds]||seconds0;a[4]=locale;return substituteTimeAgo.apply(null,a);}
+function getSetRelativeTimeRounding(roundingFunction){if(roundingFunction===undefined){return round;}
+if(typeof(roundingFunction)==='function'){round=roundingFunction;return true;}
+return false;}
+function getSetRelativeTimeThreshold(threshold,limit){if(thresholds[threshold]===undefined){return false;}
+if(limit===undefined){return thresholds[threshold];}
+thresholds[threshold]=limit;if(threshold==='s'){thresholds.ss=limit-1;}
+return true;}
+function humanize(withSuffix){if(!this.isValid()){return this.localeData().invalidDate();}
+var locale=this.localeData();var output=relativeTime$1(this,!withSuffix,locale);if(withSuffix){output=locale.pastFuture(+this,output);}
+return locale.postformat(output);}
+var abs$1=Math.abs;function toISOString$1(){if(!this.isValid()){return this.localeData().invalidDate();}
+var seconds=abs$1(this._milliseconds)/1000;var days=abs$1(this._days);var months=abs$1(this._months);var minutes,hours,years;minutes=absFloor(seconds/60);hours=absFloor(minutes/60);seconds%=60;minutes%=60;years=absFloor(months/12);months%=12;var Y=years;var M=months;var D=days;var h=hours;var m=minutes;var s=seconds;var total=this.asSeconds();if(!total){return'P0D';}
+return(total<0?'-':'')+'P'+(Y?Y+'Y':'')+(M?M+'M':'')+(D?D+'D':'')+((h||m||s)?'T':'')+(h?h+'H':'')+(m?m+'M':'')+(s?s+'S':'');}
+var proto$2=Duration.prototype;proto$2.isValid=isValid$1;proto$2.abs=abs;proto$2.add=add$1;proto$2.subtract=subtract$1;proto$2.as=as;proto$2.asMilliseconds=asMilliseconds;proto$2.asSeconds=asSeconds;proto$2.asMinutes=asMinutes;proto$2.asHours=asHours;proto$2.asDays=asDays;proto$2.asWeeks=asWeeks;proto$2.asMonths=asMonths;proto$2.asYears=asYears;proto$2.valueOf=valueOf$1;proto$2._bubble=bubble;proto$2.get=get$2;proto$2.milliseconds=milliseconds;proto$2.seconds=seconds;proto$2.minutes=minutes;proto$2.hours=hours;proto$2.days=days;proto$2.weeks=weeks;proto$2.months=months;proto$2.years=years;proto$2.humanize=humanize;proto$2.toISOString=toISOString$1;proto$2.toString=toISOString$1;proto$2.toJSON=toISOString$1;proto$2.locale=locale;proto$2.localeData=localeData;proto$2.toIsoString=deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',toISOString$1);proto$2.lang=lang;addFormatToken('X',0,0,'unix');addFormatToken('x',0,0,'valueOf');addRegexToken('x',matchSigned);addRegexToken('X',matchTimestamp);addParseToken('X',function(input,array,config){config._d=new Date(parseFloat(input,10)*1000);});addParseToken('x',function(input,array,config){config._d=new Date(toInt(input));});hooks.version='2.18.1';setHookCallback(createLocal);hooks.fn=proto;hooks.min=min;hooks.max=max;hooks.now=now;hooks.utc=createUTC;hooks.unix=createUnix;hooks.months=listMonths;hooks.isDate=isDate;hooks.locale=getSetGlobalLocale;hooks.invalid=createInvalid;hooks.duration=createDuration;hooks.isMoment=isMoment;hooks.weekdays=listWeekdays;hooks.parseZone=createInZone;hooks.localeData=getLocale;hooks.isDuration=isDuration;hooks.monthsShort=listMonthsShort;hooks.weekdaysMin=listWeekdaysMin;hooks.defineLocale=defineLocale;hooks.updateLocale=updateLocale;hooks.locales=listLocales;hooks.weekdaysShort=listWeekdaysShort;hooks.normalizeUnits=normalizeUnits;hooks.relativeTimeRounding=getSetRelativeTimeRounding;hooks.relativeTimeThreshold=getSetRelativeTimeThreshold;hooks.calendarFormat=getCalendarFormat;hooks.prototype=proto;return hooks;})));},{}],7:[function(require,module,exports){var Chart=require(28)();require(26)(Chart);require(40)(Chart);require(22)(Chart);require(25)(Chart);require(30)(Chart);require(21)(Chart);require(23)(Chart);require(24)(Chart);require(29)(Chart);require(32)(Chart);require(33)(Chart);require(31)(Chart);require(27)(Chart);require(34)(Chart);require(35)(Chart);require(36)(Chart);require(37)(Chart);require(38)(Chart);require(46)(Chart);require(44)(Chart);require(45)(Chart);require(47)(Chart);require(48)(Chart);require(49)(Chart);require(15)(Chart);require(16)(Chart);require(17)(Chart);require(18)(Chart);require(19)(Chart);require(20)(Chart);require(8)(Chart);require(9)(Chart);require(10)(Chart);require(11)(Chart);require(12)(Chart);require(13)(Chart);require(14)(Chart);var plugins=[];plugins.push(require(41)(Chart),require(42)(Chart),require(43)(Chart));Chart.plugins.register(plugins);module.exports=Chart;if(typeof window!=='undefined'){window.Chart=Chart;}},{"10":10,"11":11,"12":12,"13":13,"14":14,"15":15,"16":16,"17":17,"18":18,"19":19,"20":20,"21":21,"22":22,"23":23,"24":24,"25":25,"26":26,"27":27,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"34":34,"35":35,"36":36,"37":37,"38":38,"40":40,"41":41,"42":42,"43":43,"44":44,"45":45,"46":46,"47":47,"48":48,"49":49,"8":8,"9":9}],8:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.Bar=function(context,config){config.type='bar';return new Chart(context,config);};};},{}],9:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.Bubble=function(context,config){config.type='bubble';return new Chart(context,config);};};},{}],10:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.Doughnut=function(context,config){config.type='doughnut';return new Chart(context,config);};};},{}],11:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.Line=function(context,config){config.type='line';return new Chart(context,config);};};},{}],12:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.PolarArea=function(context,config){config.type='polarArea';return new Chart(context,config);};};},{}],13:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.Radar=function(context,config){config.type='radar';return new Chart(context,config);};};},{}],14:[function(require,module,exports){'use strict';module.exports=function(Chart){var defaultConfig={hover:{mode:'single'},scales:{xAxes:[{type:'linear',position:'bottom',id:'x-axis-1'}],yAxes:[{type:'linear',position:'left',id:'y-axis-1'}]},tooltips:{callbacks:{title:function(){return'';},label:function(tooltipItem){return'('+tooltipItem.xLabel+', '+tooltipItem.yLabel+')';}}}};Chart.defaults.scatter=defaultConfig;Chart.controllers.scatter=Chart.controllers.line;Chart.Scatter=function(context,config){config.type='scatter';return new Chart(context,config);};};},{}],15:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;Chart.defaults.bar={hover:{mode:'label'},scales:{xAxes:[{type:'category',categoryPercentage:0.8,barPercentage:0.9,gridLines:{offsetGridLines:true}}],yAxes:[{type:'linear'}]}};Chart.controllers.bar=Chart.DatasetController.extend({dataElementType:Chart.elements.Rectangle,initialize:function(){var me=this;var meta;Chart.DatasetController.prototype.initialize.apply(me,arguments);meta=me.getMeta();meta.stack=me.getDataset().stack;meta.bar=true;},update:function(reset){var me=this;var elements=me.getMeta().data;var i,ilen;me._ruler=me.getRuler();for(i=0,ilen=elements.length;i=0&&ivalue>0)){start+=ivalue;}}}}
+base=scale.getPixelForValue(start);head=scale.getPixelForValue(start+value);size=(head-base)/2;return{size:size,base:base,head:head,center:head+size/2};},calculateBarIndexPixels:function(datasetIndex,index,ruler){var me=this;var scale=ruler.scale;var isCombo=me.chart.isCombo;var stackIndex=me.getStackIndex(datasetIndex);var base=scale.getPixelForValue(null,index,datasetIndex,isCombo);var size=ruler.barSize;base-=isCombo?ruler.tickSize/2:0;base+=ruler.fullBarSize*stackIndex;base+=ruler.categorySpacing/2;base+=ruler.barSpacing/2;return{size:size,base:base,head:base+size,center:base+size/2};},draw:function(){var me=this;var chart=me.chart;var elements=me.getMeta().data;var dataset=me.getDataset();var ilen=elements.length;var i=0;var d;helpers.canvas.clipArea(chart.ctx,chart.chartArea);for(;i0){if(tooltipItems[0].yLabel){title=tooltipItems[0].yLabel;}else if(data.labels.length>0&&tooltipItems[0].index');var data=chart.data;var datasets=data.datasets;var labels=data.labels;if(datasets.length){for(var i=0;i');if(labels[i]){text.push(labels[i]);}
+text.push('');}}
+text.push('');return text.join('');},legend:{labels:{generateLabels:function(chart){var data=chart.data;if(data.labels.length&&data.datasets.length){return data.labels.map(function(label,i){var meta=chart.getDatasetMeta(0);var ds=data.datasets[0];var arc=meta.data[i];var custom=arc&&arc.custom||{};var getValueAtIndexOrDefault=helpers.getValueAtIndexOrDefault;var arcOpts=chart.options.elements.arc;var fill=custom.backgroundColor?custom.backgroundColor:getValueAtIndexOrDefault(ds.backgroundColor,i,arcOpts.backgroundColor);var stroke=custom.borderColor?custom.borderColor:getValueAtIndexOrDefault(ds.borderColor,i,arcOpts.borderColor);var bw=custom.borderWidth?custom.borderWidth:getValueAtIndexOrDefault(ds.borderWidth,i,arcOpts.borderWidth);return{text:label,fillStyle:fill,strokeStyle:stroke,lineWidth:bw,hidden:isNaN(ds.data[i])||meta.data[i].hidden,index:i};});}
+return[];}},onClick:function(e,legendItem){var index=legendItem.index;var chart=this.chart;var i,ilen,meta;for(i=0,ilen=(chart.data.datasets||[]).length;i=Math.PI?-1:startAngle<-Math.PI?1:0);var endAngle=startAngle+circumference;var start={x:Math.cos(startAngle),y:Math.sin(startAngle)};var end={x:Math.cos(endAngle),y:Math.sin(endAngle)};var contains0=(startAngle<=0&&0<=endAngle)||(startAngle<=Math.PI*2.0&&Math.PI*2.0<=endAngle);var contains90=(startAngle<=Math.PI*0.5&&Math.PI*0.5<=endAngle)||(startAngle<=Math.PI*2.5&&Math.PI*2.5<=endAngle);var contains180=(startAngle<=-Math.PI&&-Math.PI<=endAngle)||(startAngle<=Math.PI&&Math.PI<=endAngle);var contains270=(startAngle<=-Math.PI*0.5&&-Math.PI*0.5<=endAngle)||(startAngle<=Math.PI*1.5&&Math.PI*1.5<=endAngle);var cutout=cutoutPercentage/100.0;var min={x:contains180?-1:Math.min(start.x*(start.x<0?1:cutout),end.x*(end.x<0?1:cutout)),y:contains270?-1:Math.min(start.y*(start.y<0?1:cutout),end.y*(end.y<0?1:cutout))};var max={x:contains0?1:Math.max(start.x*(start.x>0?1:cutout),end.x*(end.x>0?1:cutout)),y:contains90?1:Math.max(start.y*(start.y>0?1:cutout),end.y*(end.y>0?1:cutout))};var size={width:(max.x-min.x)*0.5,height:(max.y-min.y)*0.5};minSize=Math.min(availableWidth/size.width,availableHeight/size.height);offset={x:(max.x+min.x)*-0.5,y:(max.y+min.y)*-0.5};}
+chart.borderWidth=me.getMaxBorderWidth(meta.data);chart.outerRadius=Math.max((minSize-chart.borderWidth)/2,0);chart.innerRadius=Math.max(cutoutPercentage?(chart.outerRadius/100)*(cutoutPercentage):0,0);chart.radiusLength=(chart.outerRadius-chart.innerRadius)/chart.getVisibleDatasetCount();chart.offsetX=offset.x*chart.outerRadius;chart.offsetY=offset.y*chart.outerRadius;meta.total=me.calculateTotal();me.outerRadius=chart.outerRadius-(chart.radiusLength*me.getRingIndex(me.index));me.innerRadius=Math.max(me.outerRadius-chart.radiusLength,0);helpers.each(meta.data,function(arc,index){me.updateElement(arc,index,reset);});},updateElement:function(arc,index,reset){var me=this;var chart=me.chart,chartArea=chart.chartArea,opts=chart.options,animationOpts=opts.animation,centerX=(chartArea.left+chartArea.right)/2,centerY=(chartArea.top+chartArea.bottom)/2,startAngle=opts.rotation,endAngle=opts.rotation,dataset=me.getDataset(),circumference=reset&&animationOpts.animateRotate?0:arc.hidden?0:me.calculateCircumference(dataset.data[index])*(opts.circumference/(2.0*Math.PI)),innerRadius=reset&&animationOpts.animateScale?0:me.innerRadius,outerRadius=reset&&animationOpts.animateScale?0:me.outerRadius,valueAtIndexOrDefault=helpers.getValueAtIndexOrDefault;helpers.extend(arc,{_datasetIndex:me.index,_index:index,_model:{x:centerX+chart.offsetX,y:centerY+chart.offsetY,startAngle:startAngle,endAngle:endAngle,circumference:circumference,outerRadius:outerRadius,innerRadius:innerRadius,label:valueAtIndexOrDefault(dataset.label,index,chart.data.labels[index])}});var model=arc._model;this.removeHoverStyle(arc);if(!reset||!animationOpts.animateRotate){if(index===0){model.startAngle=opts.rotation;}else{model.startAngle=me.getMeta().data[index-1]._model.endAngle;}
+model.endAngle=model.startAngle+model.circumference;}
+arc.pivot();},removeHoverStyle:function(arc){Chart.DatasetController.prototype.removeHoverStyle.call(this,arc,this.chart.options.elements.arc);},calculateTotal:function(){var dataset=this.getDataset();var meta=this.getMeta();var total=0;var value;helpers.each(meta.data,function(element,index){value=dataset.data[index];if(!isNaN(value)&&!element.hidden){total+=Math.abs(value);}});return total;},calculateCircumference:function(value){var total=this.getMeta().total;if(total>0&&!isNaN(value)){return(Math.PI*2.0)*(value/total);}
+return 0;},getMaxBorderWidth:function(elements){var max=0,index=this.index,length=elements.length,borderWidth,hoverWidth;for(var i=0;imax?borderWidth:max;max=hoverWidth>max?hoverWidth:max;}
+return max;}});};},{}],18:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;Chart.defaults.line={showLines:true,spanGaps:false,hover:{mode:'label'},scales:{xAxes:[{type:'category',id:'x-axis-0'}],yAxes:[{type:'linear',id:'y-axis-0'}]}};function lineEnabled(dataset,options){return helpers.getValueOrDefault(dataset.showLine,options.showLines);}
+Chart.controllers.line=Chart.DatasetController.extend({datasetElementType:Chart.elements.Line,dataElementType:Chart.elements.Point,update:function(reset){var me=this;var meta=me.getMeta();var line=meta.dataset;var points=meta.data||[];var options=me.chart.options;var lineElementOptions=options.elements.line;var scale=me.getScaleForId(meta.yAxisID);var i,ilen,custom;var dataset=me.getDataset();var showLine=lineEnabled(dataset,options);if(showLine){custom=line.custom||{};if((dataset.tension!==undefined)&&(dataset.lineTension===undefined)){dataset.lineTension=dataset.tension;}
+line._scale=scale;line._datasetIndex=me.index;line._children=points;line._model={spanGaps:dataset.spanGaps?dataset.spanGaps:options.spanGaps,tension:custom.tension?custom.tension:helpers.getValueOrDefault(dataset.lineTension,lineElementOptions.tension),backgroundColor:custom.backgroundColor?custom.backgroundColor:(dataset.backgroundColor||lineElementOptions.backgroundColor),borderWidth:custom.borderWidth?custom.borderWidth:(dataset.borderWidth||lineElementOptions.borderWidth),borderColor:custom.borderColor?custom.borderColor:(dataset.borderColor||lineElementOptions.borderColor),borderCapStyle:custom.borderCapStyle?custom.borderCapStyle:(dataset.borderCapStyle||lineElementOptions.borderCapStyle),borderDash:custom.borderDash?custom.borderDash:(dataset.borderDash||lineElementOptions.borderDash),borderDashOffset:custom.borderDashOffset?custom.borderDashOffset:(dataset.borderDashOffset||lineElementOptions.borderDashOffset),borderJoinStyle:custom.borderJoinStyle?custom.borderJoinStyle:(dataset.borderJoinStyle||lineElementOptions.borderJoinStyle),fill:custom.fill?custom.fill:(dataset.fill!==undefined?dataset.fill:lineElementOptions.fill),steppedLine:custom.steppedLine?custom.steppedLine:helpers.getValueOrDefault(dataset.steppedLine,lineElementOptions.stepped),cubicInterpolationMode:custom.cubicInterpolationMode?custom.cubicInterpolationMode:helpers.getValueOrDefault(dataset.cubicInterpolationMode,lineElementOptions.cubicInterpolationMode),};line.pivot();}
+for(i=0,ilen=points.length;i');var data=chart.data;var datasets=data.datasets;var labels=data.labels;if(datasets.length){for(var i=0;i');if(labels[i]){text.push(labels[i]);}
+text.push('');}}
+text.push('');return text.join('');},legend:{labels:{generateLabels:function(chart){var data=chart.data;if(data.labels.length&&data.datasets.length){return data.labels.map(function(label,i){var meta=chart.getDatasetMeta(0);var ds=data.datasets[0];var arc=meta.data[i];var custom=arc.custom||{};var getValueAtIndexOrDefault=helpers.getValueAtIndexOrDefault;var arcOpts=chart.options.elements.arc;var fill=custom.backgroundColor?custom.backgroundColor:getValueAtIndexOrDefault(ds.backgroundColor,i,arcOpts.backgroundColor);var stroke=custom.borderColor?custom.borderColor:getValueAtIndexOrDefault(ds.borderColor,i,arcOpts.borderColor);var bw=custom.borderWidth?custom.borderWidth:getValueAtIndexOrDefault(ds.borderWidth,i,arcOpts.borderWidth);return{text:label,fillStyle:fill,strokeStyle:stroke,lineWidth:bw,hidden:isNaN(ds.data[i])||meta.data[i].hidden,index:i};});}
+return[];}},onClick:function(e,legendItem){var index=legendItem.index;var chart=this.chart;var i,ilen,meta;for(i=0,ilen=(chart.data.datasets||[]).length;i0&&!isNaN(value)){return(2*Math.PI)/count;}
+return 0;}});};},{}],20:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;Chart.defaults.radar={aspectRatio:1,scale:{type:'radialLinear'},elements:{line:{tension:0}}};Chart.controllers.radar=Chart.DatasetController.extend({datasetElementType:Chart.elements.Line,dataElementType:Chart.elements.Point,linkScales:helpers.noop,update:function(reset){var me=this;var meta=me.getMeta();var line=meta.dataset;var points=meta.data;var custom=line.custom||{};var dataset=me.getDataset();var lineElementOptions=me.chart.options.elements.line;var scale=me.chart.scale;if((dataset.tension!==undefined)&&(dataset.lineTension===undefined)){dataset.lineTension=dataset.tension;}
+helpers.extend(meta.dataset,{_datasetIndex:me.index,_scale:scale,_children:points,_loop:true,_model:{tension:custom.tension?custom.tension:helpers.getValueOrDefault(dataset.lineTension,lineElementOptions.tension),backgroundColor:custom.backgroundColor?custom.backgroundColor:(dataset.backgroundColor||lineElementOptions.backgroundColor),borderWidth:custom.borderWidth?custom.borderWidth:(dataset.borderWidth||lineElementOptions.borderWidth),borderColor:custom.borderColor?custom.borderColor:(dataset.borderColor||lineElementOptions.borderColor),fill:custom.fill?custom.fill:(dataset.fill!==undefined?dataset.fill:lineElementOptions.fill),borderCapStyle:custom.borderCapStyle?custom.borderCapStyle:(dataset.borderCapStyle||lineElementOptions.borderCapStyle),borderDash:custom.borderDash?custom.borderDash:(dataset.borderDash||lineElementOptions.borderDash),borderDashOffset:custom.borderDashOffset?custom.borderDashOffset:(dataset.borderDashOffset||lineElementOptions.borderDashOffset),borderJoinStyle:custom.borderJoinStyle?custom.borderJoinStyle:(dataset.borderJoinStyle||lineElementOptions.borderJoinStyle),}});meta.dataset.pivot();helpers.each(points,function(point,index){me.updateElement(point,index,reset);},me);me.updateBezierControlPoints();},updateElement:function(point,index,reset){var me=this;var custom=point.custom||{};var dataset=me.getDataset();var scale=me.chart.scale;var pointElementOptions=me.chart.options.elements.point;var pointPosition=scale.getPointPositionForValue(index,dataset.data[index]);if((dataset.radius!==undefined)&&(dataset.pointRadius===undefined)){dataset.pointRadius=dataset.radius;}
+if((dataset.hitRadius!==undefined)&&(dataset.pointHitRadius===undefined)){dataset.pointHitRadius=dataset.hitRadius;}
+helpers.extend(point,{_datasetIndex:me.index,_index:index,_scale:scale,_model:{x:reset?scale.xCenter:pointPosition.x,y:reset?scale.yCenter:pointPosition.y,tension:custom.tension?custom.tension:helpers.getValueOrDefault(dataset.lineTension,me.chart.options.elements.line.tension),radius:custom.radius?custom.radius:helpers.getValueAtIndexOrDefault(dataset.pointRadius,index,pointElementOptions.radius),backgroundColor:custom.backgroundColor?custom.backgroundColor:helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor,index,pointElementOptions.backgroundColor),borderColor:custom.borderColor?custom.borderColor:helpers.getValueAtIndexOrDefault(dataset.pointBorderColor,index,pointElementOptions.borderColor),borderWidth:custom.borderWidth?custom.borderWidth:helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth,index,pointElementOptions.borderWidth),pointStyle:custom.pointStyle?custom.pointStyle:helpers.getValueAtIndexOrDefault(dataset.pointStyle,index,pointElementOptions.pointStyle),hitRadius:custom.hitRadius?custom.hitRadius:helpers.getValueAtIndexOrDefault(dataset.pointHitRadius,index,pointElementOptions.hitRadius)}});point._model.skip=custom.skip?custom.skip:(isNaN(point._model.x)||isNaN(point._model.y));},updateBezierControlPoints:function(){var chartArea=this.chart.chartArea;var meta=this.getMeta();helpers.each(meta.data,function(point,index){var model=point._model;var controlPoints=helpers.splineCurve(helpers.previousItem(meta.data,index,true)._model,model,helpers.nextItem(meta.data,index,true)._model,model.tension);model.controlPointPreviousX=Math.max(Math.min(controlPoints.previous.x,chartArea.right),chartArea.left);model.controlPointPreviousY=Math.max(Math.min(controlPoints.previous.y,chartArea.bottom),chartArea.top);model.controlPointNextX=Math.max(Math.min(controlPoints.next.x,chartArea.right),chartArea.left);model.controlPointNextY=Math.max(Math.min(controlPoints.next.y,chartArea.bottom),chartArea.top);point.pivot();});},setHoverStyle:function(point){var dataset=this.chart.data.datasets[point._datasetIndex];var custom=point.custom||{};var index=point._index;var model=point._model;model.radius=custom.hoverRadius?custom.hoverRadius:helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius,index,this.chart.options.elements.point.hoverRadius);model.backgroundColor=custom.hoverBackgroundColor?custom.hoverBackgroundColor:helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor,index,helpers.getHoverColor(model.backgroundColor));model.borderColor=custom.hoverBorderColor?custom.hoverBorderColor:helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor,index,helpers.getHoverColor(model.borderColor));model.borderWidth=custom.hoverBorderWidth?custom.hoverBorderWidth:helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth,index,model.borderWidth);},removeHoverStyle:function(point){var dataset=this.chart.data.datasets[point._datasetIndex];var custom=point.custom||{};var index=point._index;var model=point._model;var pointElementOptions=this.chart.options.elements.point;model.radius=custom.radius?custom.radius:helpers.getValueAtIndexOrDefault(dataset.pointRadius,index,pointElementOptions.radius);model.backgroundColor=custom.backgroundColor?custom.backgroundColor:helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor,index,pointElementOptions.backgroundColor);model.borderColor=custom.borderColor?custom.borderColor:helpers.getValueAtIndexOrDefault(dataset.pointBorderColor,index,pointElementOptions.borderColor);model.borderWidth=custom.borderWidth?custom.borderWidth:helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth,index,pointElementOptions.borderWidth);}});};},{}],21:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;Chart.defaults.global.animation={duration:1000,easing:'easeOutQuart',onProgress:helpers.noop,onComplete:helpers.noop};Chart.Animation=Chart.Element.extend({chart:null,currentStep:0,numSteps:60,easing:'',render:null,onAnimationProgress:null,onAnimationComplete:null,});Chart.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(chart,animation,duration,lazy){var animations=this.animations;var i,ilen;animation.chart=chart;if(!lazy){chart.animating=true;}
+for(i=0,ilen=animations.length;i1){framesToDrop=Math.floor(me.dropFrames);me.dropFrames=me.dropFrames%1;}
+me.advance(1+framesToDrop);var endTime=Date.now();me.dropFrames+=(endTime-startTime)/me.frameDuration;if(me.animations.length>0){me.requestAnimationFrame();}},advance:function(count){var animations=this.animations;var animation,chart;var i=0;while(i=animation.numSteps){helpers.callback(animation.onAnimationComplete,[animation],chart);chart.animating=false;animations.splice(i,1);}else{++i;}}}};Object.defineProperty(Chart.Animation.prototype,'animationObject',{get:function(){return this;}});Object.defineProperty(Chart.Animation.prototype,'chartInstance',{get:function(){return this.chart;},set:function(value){this.chart=value;}});};},{}],22:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.canvasHelpers={};helpers.drawPoint=function(ctx,pointStyle,radius,x,y){var type,edgeLength,xOffset,yOffset,height,size;if(typeof pointStyle==='object'){type=pointStyle.toString();if(type==='[object HTMLImageElement]'||type==='[object HTMLCanvasElement]'){ctx.drawImage(pointStyle,x-pointStyle.width/2,y-pointStyle.height/2,pointStyle.width,pointStyle.height);return;}}
+if(isNaN(radius)||radius<=0){return;}
+switch(pointStyle){default:ctx.beginPath();ctx.arc(x,y,radius,0,Math.PI*2);ctx.closePath();ctx.fill();break;case'triangle':ctx.beginPath();edgeLength=3*radius/Math.sqrt(3);height=edgeLength*Math.sqrt(3)/2;ctx.moveTo(x-edgeLength/2,y+height/3);ctx.lineTo(x+edgeLength/2,y+height/3);ctx.lineTo(x,y-2*height/3);ctx.closePath();ctx.fill();break;case'rect':size=1/Math.SQRT2*radius;ctx.beginPath();ctx.fillRect(x-size,y-size,2*size,2*size);ctx.strokeRect(x-size,y-size,2*size,2*size);break;case'rectRounded':var offset=radius/Math.SQRT2;var leftX=x-offset;var topY=y-offset;var sideSize=Math.SQRT2*radius;Chart.helpers.drawRoundedRectangle(ctx,leftX,topY,sideSize,sideSize,radius/2);ctx.fill();break;case'rectRot':size=1/Math.SQRT2*radius;ctx.beginPath();ctx.moveTo(x-size,y);ctx.lineTo(x,y+size);ctx.lineTo(x+size,y);ctx.lineTo(x,y-size);ctx.closePath();ctx.fill();break;case'cross':ctx.beginPath();ctx.moveTo(x,y+radius);ctx.lineTo(x,y-radius);ctx.moveTo(x-radius,y);ctx.lineTo(x+radius,y);ctx.closePath();break;case'crossRot':ctx.beginPath();xOffset=Math.cos(Math.PI/4)*radius;yOffset=Math.sin(Math.PI/4)*radius;ctx.moveTo(x-xOffset,y-yOffset);ctx.lineTo(x+xOffset,y+yOffset);ctx.moveTo(x-xOffset,y+yOffset);ctx.lineTo(x+xOffset,y-yOffset);ctx.closePath();break;case'star':ctx.beginPath();ctx.moveTo(x,y+radius);ctx.lineTo(x,y-radius);ctx.moveTo(x-radius,y);ctx.lineTo(x+radius,y);xOffset=Math.cos(Math.PI/4)*radius;yOffset=Math.sin(Math.PI/4)*radius;ctx.moveTo(x-xOffset,y-yOffset);ctx.lineTo(x+xOffset,y+yOffset);ctx.moveTo(x-xOffset,y+yOffset);ctx.lineTo(x+xOffset,y-yOffset);ctx.closePath();break;case'line':ctx.beginPath();ctx.moveTo(x-radius,y);ctx.lineTo(x+radius,y);ctx.closePath();break;case'dash':ctx.beginPath();ctx.moveTo(x,y);ctx.lineTo(x+radius,y);ctx.closePath();break;}
+ctx.stroke();};helpers.clipArea=function(ctx,clipArea){ctx.save();ctx.beginPath();ctx.rect(clipArea.left,clipArea.top,clipArea.right-clipArea.left,clipArea.bottom-clipArea.top);ctx.clip();};helpers.unclipArea=function(ctx){ctx.restore();};helpers.lineTo=function(ctx,previous,target,flip){if(target.steppedLine){if(target.steppedLine==='after'){ctx.lineTo(previous.x,target.y);}else{ctx.lineTo(target.x,previous.y);}
+ctx.lineTo(target.x,target.y);return;}
+if(!target.tension){ctx.lineTo(target.x,target.y);return;}
+ctx.bezierCurveTo(flip?previous.controlPointPreviousX:previous.controlPointNextX,flip?previous.controlPointPreviousY:previous.controlPointNextY,flip?target.controlPointNextX:target.controlPointPreviousX,flip?target.controlPointNextY:target.controlPointPreviousY,target.x,target.y);};Chart.helpers.canvas=helpers;};},{}],23:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var plugins=Chart.plugins;var platform=Chart.platform;Chart.types={};Chart.instances={};Chart.controllers={};function initConfig(config){config=config||{};var data=config.data=config.data||{};data.datasets=data.datasets||[];data.labels=data.labels||[];config.options=helpers.configMerge(Chart.defaults.global,Chart.defaults[config.type],config.options||{});return config;}
+function updateConfig(chart){var newOptions=chart.options;if(newOptions.scale){chart.scale.options=newOptions.scale;}else if(newOptions.scales){newOptions.scales.xAxes.concat(newOptions.scales.yAxes).forEach(function(scaleOptions){chart.scales[scaleOptions.id].options=scaleOptions;});}
+chart.tooltip._options=newOptions.tooltips;}
+function positionIsHorizontal(position){return position==='top'||position==='bottom';}
+helpers.extend(Chart.prototype,{construct:function(item,config){var me=this;config=initConfig(config);var context=platform.acquireContext(item,config);var canvas=context&&context.canvas;var height=canvas&&canvas.height;var width=canvas&&canvas.width;me.id=helpers.uid();me.ctx=context;me.canvas=canvas;me.config=config;me.width=width;me.height=height;me.aspectRatio=height?width/height:null;me.options=config.options;me._bufferedRender=false;me.chart=me;me.controller=me;Chart.instances[me.id]=me;Object.defineProperty(me,'data',{get:function(){return me.config.data;},set:function(value){me.config.data=value;}});if(!context||!canvas){console.error("Failed to create chart: can't acquire context from the given item");return;}
+me.initialize();me.update();},initialize:function(){var me=this;plugins.notify(me,'beforeInit');helpers.retinaScale(me);me.bindEvents();if(me.options.responsive){me.resize(true);}
+me.ensureScalesHaveIDs();me.buildScales();me.initToolTip();plugins.notify(me,'afterInit');return me;},clear:function(){helpers.clear(this);return this;},stop:function(){Chart.animationService.cancelAnimation(this);return this;},resize:function(silent){var me=this;var options=me.options;var canvas=me.canvas;var aspectRatio=(options.maintainAspectRatio&&me.aspectRatio)||null;var newWidth=Math.floor(helpers.getMaximumWidth(canvas));var newHeight=Math.floor(aspectRatio?newWidth/aspectRatio:helpers.getMaximumHeight(canvas));if(me.width===newWidth&&me.height===newHeight){return;}
+canvas.width=me.width=newWidth;canvas.height=me.height=newHeight;canvas.style.width=newWidth+'px';canvas.style.height=newHeight+'px';helpers.retinaScale(me);if(!silent){var newSize={width:newWidth,height:newHeight};plugins.notify(me,'resize',[newSize]);if(me.options.onResize){me.options.onResize(me,newSize);}
+me.stop();me.update(me.options.responsiveAnimationDuration);}},ensureScalesHaveIDs:function(){var options=this.options;var scalesOptions=options.scales||{};var scaleOptions=options.scale;helpers.each(scalesOptions.xAxes,function(xAxisOptions,index){xAxisOptions.id=xAxisOptions.id||('x-axis-'+index);});helpers.each(scalesOptions.yAxes,function(yAxisOptions,index){yAxisOptions.id=yAxisOptions.id||('y-axis-'+index);});if(scaleOptions){scaleOptions.id=scaleOptions.id||'scale';}},buildScales:function(){var me=this;var options=me.options;var scales=me.scales={};var items=[];if(options.scales){items=items.concat((options.scales.xAxes||[]).map(function(xAxisOptions){return{options:xAxisOptions,dtype:'category',dposition:'bottom'};}),(options.scales.yAxes||[]).map(function(yAxisOptions){return{options:yAxisOptions,dtype:'linear',dposition:'left'};}));}
+if(options.scale){items.push({options:options.scale,dtype:'radialLinear',isDefault:true,dposition:'chartArea'});}
+helpers.each(items,function(item){var scaleOptions=item.options;var scaleType=helpers.getValueOrDefault(scaleOptions.type,item.dtype);var scaleClass=Chart.scaleService.getScaleConstructor(scaleType);if(!scaleClass){return;}
+if(positionIsHorizontal(scaleOptions.position)!==positionIsHorizontal(item.dposition)){scaleOptions.position=item.dposition;}
+var scale=new scaleClass({id:scaleOptions.id,options:scaleOptions,ctx:me.ctx,chart:me});scales[scale.id]=scale;if(item.isDefault){me.scale=scale;}});Chart.scaleService.addScalesToLayout(this);},buildOrUpdateControllers:function(){var me=this;var types=[];var newControllers=[];helpers.each(me.data.datasets,function(dataset,datasetIndex){var meta=me.getDatasetMeta(datasetIndex);if(!meta.type){meta.type=dataset.type||me.config.type;}
+types.push(meta.type);if(meta.controller){meta.controller.updateIndex(datasetIndex);}else{var ControllerClass=Chart.controllers[meta.type];if(ControllerClass===undefined){throw new Error('"'+meta.type+'" is not a chart type.');}
+meta.controller=new ControllerClass(me,datasetIndex);newControllers.push(meta.controller);}},me);if(types.length>1){for(var i=1;i=0;--i){if(me.isDatasetVisible(i)){me.drawDataset(i,easingValue);}}
+plugins.notify(me,'afterDatasetsDraw',[easingValue]);},drawDataset:function(index,easingValue){var me=this;var meta=me.getDatasetMeta(index);var args={meta:meta,index:index,easingValue:easingValue};if(plugins.notify(me,'beforeDatasetDraw',[args])===false){return;}
+meta.controller.draw(easingValue);plugins.notify(me,'afterDatasetDraw',[args]);},getElementAtEvent:function(e){return Chart.Interaction.modes.single(this,e);},getElementsAtEvent:function(e){return Chart.Interaction.modes.label(this,e,{intersect:true});},getElementsAtXAxis:function(e){return Chart.Interaction.modes['x-axis'](this,e,{intersect:true});},getElementsAtEventForMode:function(e,mode,options){var method=Chart.Interaction.modes[mode];if(typeof method==='function'){return method(this,e,options);}
+return[];},getDatasetAtEvent:function(e){return Chart.Interaction.modes.dataset(this,e,{intersect:true});},getDatasetMeta:function(datasetIndex){var me=this;var dataset=me.data.datasets[datasetIndex];if(!dataset._meta){dataset._meta={};}
+var meta=dataset._meta[me.id];if(!meta){meta=dataset._meta[me.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null};}
+return meta;},getVisibleDatasetCount:function(){var count=0;for(var i=0,ilen=this.data.datasets.length;i0){return;}
+arrayEvents.forEach(function(key){delete array[key];});delete array._chartjs;}
+Chart.DatasetController=function(chart,datasetIndex){this.initialize(chart,datasetIndex);};helpers.extend(Chart.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(chart,datasetIndex){var me=this;me.chart=chart;me.index=datasetIndex;me.linkScales();me.addElements();},updateIndex:function(datasetIndex){this.index=datasetIndex;},linkScales:function(){var me=this;var meta=me.getMeta();var dataset=me.getDataset();if(meta.xAxisID===null){meta.xAxisID=dataset.xAxisID||me.chart.options.scales.xAxes[0].id;}
+if(meta.yAxisID===null){meta.yAxisID=dataset.yAxisID||me.chart.options.scales.yAxes[0].id;}},getDataset:function(){return this.chart.data.datasets[this.index];},getMeta:function(){return this.chart.getDatasetMeta(this.index);},getScaleForId:function(scaleID){return this.chart.scales[scaleID];},reset:function(){this.update(true);},destroy:function(){if(this._data){unlistenArrayEvents(this._data,this);}},createMetaDataset:function(){var me=this;var type=me.datasetElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index});},createMetaData:function(index){var me=this;var type=me.dataElementType;return type&&new type({_chart:me.chart,_datasetIndex:me.index,_index:index});},addElements:function(){var me=this;var meta=me.getMeta();var data=me.getDataset().data||[];var metaData=meta.data;var i,ilen;for(i=0,ilen=data.length;inumMeta){me.insertElements(numMeta,numData-numMeta);}},insertElements:function(start,count){for(var i=0;i=0;i--){callback.call(self,loopable[i],i);}}else{for(i=0;i=base[key].length||!base[key][index].type){base[key].push(helpers.configMerge(axisDefaults,valueObj));}else if(valueObj.type&&valueObj.type!==base[key][index].type){base[key][index]=helpers.configMerge(base[key][index],axisDefaults,valueObj);}else{base[key][index]=helpers.configMerge(base[key][index],valueObj);}});}else{base[key]=[];helpers.each(value,function(valueObj){var axisType=helpers.getValueOrDefault(valueObj.type,key==='xAxes'?'category':'linear');base[key].push(helpers.configMerge(Chart.scaleService.getScaleDefaults(axisType),valueObj));});}}else if(base.hasOwnProperty(key)&&typeof base[key]==='object'&&base[key]!==null&&typeof value==='object'){base[key]=helpers.configMerge(base[key],value);}else{base[key]=value;}});return base;};helpers.getValueAtIndexOrDefault=function(value,index,defaultValue){if(value===undefined||value===null){return defaultValue;}
+if(helpers.isArray(value)){return index=0;i--){var currentItem=arrayToSearch[i];if(filterCallback(currentItem)){return currentItem;}}};helpers.inherits=function(extensions){var me=this;var ChartElement=(extensions&&extensions.hasOwnProperty('constructor'))?extensions.constructor:function(){return me.apply(this,arguments);};var Surrogate=function(){this.constructor=ChartElement;};Surrogate.prototype=me.prototype;ChartElement.prototype=new Surrogate();ChartElement.extend=helpers.inherits;if(extensions){helpers.extend(ChartElement.prototype,extensions);}
+ChartElement.__super__=me.prototype;return ChartElement;};helpers.noop=function(){};helpers.uid=(function(){var id=0;return function(){return id++;};}());helpers.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n);};helpers.almostEquals=function(x,y,epsilon){return Math.abs(x-y)x));};helpers.max=function(array){return array.reduce(function(max,value){if(!isNaN(value)){return Math.max(max,value);}
+return max;},Number.NEGATIVE_INFINITY);};helpers.min=function(array){return array.reduce(function(min,value){if(!isNaN(value)){return Math.min(min,value);}
+return min;},Number.POSITIVE_INFINITY);};helpers.sign=Math.sign?function(x){return Math.sign(x);}:function(x){x=+x;if(x===0||isNaN(x)){return x;}
+return x>0?1:-1;};helpers.log10=Math.log10?function(x){return Math.log10(x);}:function(x){return Math.log(x)/Math.LN10;};helpers.toRadians=function(degrees){return degrees*(Math.PI/180);};helpers.toDegrees=function(radians){return radians*(180/Math.PI);};helpers.getAngleFromPoint=function(centrePoint,anglePoint){var distanceFromXCenter=anglePoint.x-centrePoint.x,distanceFromYCenter=anglePoint.y-centrePoint.y,radialDistanceFromCenter=Math.sqrt(distanceFromXCenter*distanceFromXCenter+distanceFromYCenter*distanceFromYCenter);var angle=Math.atan2(distanceFromYCenter,distanceFromXCenter);if(angle<(-0.5*Math.PI)){angle+=2.0*Math.PI;}
+return{angle:angle,distance:radialDistanceFromCenter};};helpers.distanceBetweenPoints=function(pt1,pt2){return Math.sqrt(Math.pow(pt2.x-pt1.x,2)+Math.pow(pt2.y-pt1.y,2));};helpers.aliasPixel=function(pixelWidth){return(pixelWidth%2===0)?0:0.5;};helpers.splineCurve=function(firstPoint,middlePoint,afterPoint,t){var previous=firstPoint.skip?middlePoint:firstPoint,current=middlePoint,next=afterPoint.skip?middlePoint:afterPoint;var d01=Math.sqrt(Math.pow(current.x-previous.x,2)+Math.pow(current.y-previous.y,2));var d12=Math.sqrt(Math.pow(next.x-current.x,2)+Math.pow(next.y-current.y,2));var s01=d01/(d01+d12);var s12=d12/(d01+d12);s01=isNaN(s01)?0:s01;s12=isNaN(s12)?0:s12;var fa=t*s01;var fb=t*s12;return{previous:{x:current.x-fa*(next.x-previous.x),y:current.y-fa*(next.y-previous.y)},next:{x:current.x+fb*(next.x-previous.x),y:current.y+fb*(next.y-previous.y)}};};helpers.EPSILON=Number.EPSILON||1e-14;helpers.splineCurveMonotone=function(points){var pointsWithTangents=(points||[]).map(function(point){return{model:point._model,deltaK:0,mK:0};});var pointsLen=pointsWithTangents.length;var i,pointBefore,pointCurrent,pointAfter;for(i=0;i0?pointsWithTangents[i-1]:null;pointAfter=i0?pointsWithTangents[i-1]:null;pointAfter=i=collection.length-1?collection[0]:collection[index+1];}
+return index>=collection.length-1?collection[collection.length-1]:collection[index+1];};helpers.previousItem=function(collection,index,loop){if(loop){return index<=0?collection[collection.length-1]:collection[index-1];}
+return index<=0?collection[0]:collection[index-1];};helpers.niceNum=function(range,round){var exponent=Math.floor(helpers.log10(range));var fraction=range/Math.pow(10,exponent);var niceFraction;if(round){if(fraction<1.5){niceFraction=1;}else if(fraction<3){niceFraction=2;}else if(fraction<7){niceFraction=5;}else{niceFraction=10;}}else if(fraction<=1.0){niceFraction=1;}else if(fraction<=2){niceFraction=2;}else if(fraction<=5){niceFraction=5;}else{niceFraction=10;}
+return niceFraction*Math.pow(10,exponent);};var easingEffects=helpers.easingEffects={linear:function(t){return t;},easeInQuad:function(t){return t*t;},easeOutQuad:function(t){return-1*t*(t-2);},easeInOutQuad:function(t){if((t/=1/2)<1){return 1/2*t*t;}
+return-1/2*((--t)*(t-2)-1);},easeInCubic:function(t){return t*t*t;},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1);},easeInOutCubic:function(t){if((t/=1/2)<1){return 1/2*t*t*t;}
+return 1/2*((t-=2)*t*t+2);},easeInQuart:function(t){return t*t*t*t;},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1);},easeInOutQuart:function(t){if((t/=1/2)<1){return 1/2*t*t*t*t;}
+return-1/2*((t-=2)*t*t*t-2);},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t;},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1);},easeInOutQuint:function(t){if((t/=1/2)<1){return 1/2*t*t*t*t*t;}
+return 1/2*((t-=2)*t*t*t*t+2);},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1;},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2));},easeInOutSine:function(t){return-1/2*(Math.cos(Math.PI*t/1)-1);},easeInExpo:function(t){return(t===0)?1:1*Math.pow(2,10*(t/1-1));},easeOutExpo:function(t){return(t===1)?1:1*(-Math.pow(2,-10*t/1)+1);},easeInOutExpo:function(t){if(t===0){return 0;}
+if(t===1){return 1;}
+if((t/=1/2)<1){return 1/2*Math.pow(2,10*(t-1));}
+return 1/2*(-Math.pow(2,-10*--t)+2);},easeInCirc:function(t){if(t>=1){return t;}
+return-1*(Math.sqrt(1-(t/=1)*t)-1);},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t);},easeInOutCirc:function(t){if((t/=1/2)<1){return-1/2*(Math.sqrt(1-t*t)-1);}
+return 1/2*(Math.sqrt(1-(t-=2)*t)+1);},easeInElastic:function(t){var s=1.70158;var p=0;var a=1;if(t===0){return 0;}
+if((t/=1)===1){return 1;}
+if(!p){p=1*0.3;}
+if(a0){mouseX=touches[0].clientX;mouseY=touches[0].clientY;}else{mouseX=e.clientX;mouseY=e.clientY;}
+var paddingLeft=parseFloat(helpers.getStyle(canvas,'padding-left'));var paddingTop=parseFloat(helpers.getStyle(canvas,'padding-top'));var paddingRight=parseFloat(helpers.getStyle(canvas,'padding-right'));var paddingBottom=parseFloat(helpers.getStyle(canvas,'padding-bottom'));var width=boundingRect.right-boundingRect.left-paddingLeft-paddingRight;var height=boundingRect.bottom-boundingRect.top-paddingTop-paddingBottom;mouseX=Math.round((mouseX-boundingRect.left-paddingLeft)/(width)*canvas.width/chart.currentDevicePixelRatio);mouseY=Math.round((mouseY-boundingRect.top-paddingTop)/(height)*canvas.height/chart.currentDevicePixelRatio);return{x:mouseX,y:mouseY};};helpers.addEvent=function(node,eventType,method){if(node.addEventListener){node.addEventListener(eventType,method);}else if(node.attachEvent){node.attachEvent('on'+eventType,method);}else{node['on'+eventType]=method;}};helpers.removeEvent=function(node,eventType,handler){if(node.removeEventListener){node.removeEventListener(eventType,handler,false);}else if(node.detachEvent){node.detachEvent('on'+eventType,handler);}else{node['on'+eventType]=helpers.noop;}};function parseMaxStyle(styleValue,node,parentProperty){var valueInPixels;if(typeof(styleValue)==='string'){valueInPixels=parseInt(styleValue,10);if(styleValue.indexOf('%')!==-1){valueInPixels=valueInPixels/100*node.parentNode[parentProperty];}}else{valueInPixels=styleValue;}
+return valueInPixels;}
+function isConstrainedValue(value){return value!==undefined&&value!==null&&value!=='none';}
+function getConstraintDimension(domNode,maxStyle,percentageProperty){var view=document.defaultView;var parentNode=domNode.parentNode;var constrainedNode=view.getComputedStyle(domNode)[maxStyle];var constrainedContainer=view.getComputedStyle(parentNode)[maxStyle];var hasCNode=isConstrainedValue(constrainedNode);var hasCContainer=isConstrainedValue(constrainedContainer);var infinity=Number.POSITIVE_INFINITY;if(hasCNode||hasCContainer){return Math.min(hasCNode?parseMaxStyle(constrainedNode,domNode,percentageProperty):infinity,hasCContainer?parseMaxStyle(constrainedContainer,parentNode,percentageProperty):infinity);}
+return'none';}
+helpers.getConstraintWidth=function(domNode){return getConstraintDimension(domNode,'max-width','clientWidth');};helpers.getConstraintHeight=function(domNode){return getConstraintDimension(domNode,'max-height','clientHeight');};helpers.getMaximumWidth=function(domNode){var container=domNode.parentNode;var paddingLeft=parseInt(helpers.getStyle(container,'padding-left'),10);var paddingRight=parseInt(helpers.getStyle(container,'padding-right'),10);var w=container.clientWidth-paddingLeft-paddingRight;var cw=helpers.getConstraintWidth(domNode);return isNaN(cw)?w:Math.min(w,cw);};helpers.getMaximumHeight=function(domNode){var container=domNode.parentNode;var paddingTop=parseInt(helpers.getStyle(container,'padding-top'),10);var paddingBottom=parseInt(helpers.getStyle(container,'padding-bottom'),10);var h=container.clientHeight-paddingTop-paddingBottom;var ch=helpers.getConstraintHeight(domNode);return isNaN(ch)?h:Math.min(h,ch);};helpers.getStyle=function(el,property){return el.currentStyle?el.currentStyle[property]:document.defaultView.getComputedStyle(el,null).getPropertyValue(property);};helpers.retinaScale=function(chart){var pixelRatio=chart.currentDevicePixelRatio=window.devicePixelRatio||1;if(pixelRatio===1){return;}
+var canvas=chart.canvas;var height=chart.height;var width=chart.width;canvas.height=height*pixelRatio;canvas.width=width*pixelRatio;chart.ctx.scale(pixelRatio,pixelRatio);canvas.style.height=height+'px';canvas.style.width=width+'px';};helpers.clear=function(chart){chart.ctx.clearRect(0,0,chart.width,chart.height);};helpers.fontString=function(pixelSize,fontStyle,fontFamily){return fontStyle+' '+pixelSize+'px '+fontFamily;};helpers.longestText=function(ctx,font,arrayOfThings,cache){cache=cache||{};var data=cache.data=cache.data||{};var gc=cache.garbageCollect=cache.garbageCollect||[];if(cache.font!==font){data=cache.data={};gc=cache.garbageCollect=[];cache.font=font;}
+ctx.font=font;var longest=0;helpers.each(arrayOfThings,function(thing){if(thing!==undefined&&thing!==null&&helpers.isArray(thing)!==true){longest=helpers.measureText(ctx,data,gc,longest,thing);}else if(helpers.isArray(thing)){helpers.each(thing,function(nestedThing){if(nestedThing!==undefined&&nestedThing!==null&&!helpers.isArray(nestedThing)){longest=helpers.measureText(ctx,data,gc,longest,nestedThing);}});}});var gcLen=gc.length/2;if(gcLen>arrayOfThings.length){for(var i=0;ilongest){longest=textWidth;}
+return longest;};helpers.numberOfLabelLines=function(arrayOfThings){var numberOfLines=1;helpers.each(arrayOfThings,function(thing){if(helpers.isArray(thing)){if(thing.length>numberOfLines){numberOfLines=thing.length;}}});return numberOfLines;};helpers.drawRoundedRectangle=function(ctx,x,y,width,height,radius){ctx.beginPath();ctx.moveTo(x+radius,y);ctx.lineTo(x+width-radius,y);ctx.quadraticCurveTo(x+width,y,x+width,y+radius);ctx.lineTo(x+width,y+height-radius);ctx.quadraticCurveTo(x+width,y+height,x+width-radius,y+height);ctx.lineTo(x+radius,y+height);ctx.quadraticCurveTo(x,y+height,x,y+height-radius);ctx.lineTo(x,y+radius);ctx.quadraticCurveTo(x,y,x+radius,y);ctx.closePath();};helpers.color=!color?function(value){console.error('Color.js not found!');return value;}:function(value){if(value instanceof CanvasGradient){value=Chart.defaults.global.defaultColor;}
+return color(value);};helpers.isArray=Array.isArray?function(obj){return Array.isArray(obj);}:function(obj){return Object.prototype.toString.call(obj)==='[object Array]';};helpers.arrayEquals=function(a0,a1){var i,ilen,v0,v1;if(!a0||!a1||a0.length!==a1.length){return false;}
+for(i=0,ilen=a0.length;i0){items=chart.getDatasetMeta(items[0]._datasetIndex).data;}
+return items;},'x-axis':function(chart,e){return indexMode(chart,e,true);},point:function(chart,e){var position=getRelativePosition(e,chart);return getIntersectItems(chart,position);},nearest:function(chart,e,options){var position=getRelativePosition(e,chart);var nearestItems=getNearestItems(chart,position,options.intersect);if(nearestItems.length>1){nearestItems.sort(function(a,b){var sizeA=a.getArea();var sizeB=b.getArea();var ret=sizeA-sizeB;if(ret===0){ret=a._datasetIndex-b._datasetIndex;}
+return ret;});}
+return nearestItems.slice(0,1);},x:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inXRange(position.x)){items.push(element);}
+if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
+return items;},y:function(chart,e,options){var position=getRelativePosition(e,chart);var items=[];var intersectsItem=false;parseVisibleItems(chart,function(element){if(element.inYRange(position.y)){items.push(element);}
+if(element.inRange(position.x,position.y)){intersectsItem=true;}});if(options.intersect&&!intersectsItem){items=[];}
+return items;}}};};},{}],28:[function(require,module,exports){'use strict';module.exports=function(){var Chart=function(item,config){this.construct(item,config);return this;};Chart.defaults={global:{responsive:true,responsiveAnimationDuration:0,maintainAspectRatio:true,events:['mousemove','mouseout','click','touchstart','touchmove'],hover:{onHover:null,mode:'nearest',intersect:true,animationDuration:400},onClick:null,defaultColor:'rgba(0,0,0,0.1)',defaultFontColor:'#666',defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:'normal',showLines:true,elements:{},legendCallback:function(chart){var text=[];text.push('');for(var i=0;i');if(chart.data.datasets[i].label){text.push(chart.data.datasets[i].label);}
+text.push('');}
+text.push('
');return text.join('');}}};Chart.Chart=Chart;return Chart;};},{}],29:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;function filterByPosition(array,position){return helpers.where(array,function(v){return v.position===position;});}
+function sortByWeight(array,reverse){array.forEach(function(v,i){v._tmpIndex_=i;return v;});array.sort(function(a,b){var v0=reverse?b:a;var v1=reverse?a:b;return v0.weight===v1.weight?v0._tmpIndex_-v1._tmpIndex_:v0.weight-v1.weight;});array.forEach(function(v){delete v._tmpIndex_;});}
+Chart.layoutService={defaults:{},addBox:function(chart,item){if(!chart.boxes){chart.boxes=[];}
+item.fullWidth=item.fullWidth||false;item.position=item.position||'top';item.weight=item.weight||0;chart.boxes.push(item);},removeBox:function(chart,layoutItem){var index=chart.boxes?chart.boxes.indexOf(layoutItem):-1;if(index!==-1){chart.boxes.splice(index,1);}},configure:function(chart,item,options){var props=['fullWidth','position','weight'];var ilen=props.length;var i=0;var prop;for(;itickWidth&&labelRotationme.maxHeight){labelRotation--;break;}
+labelRotation++;labelWidth=cosRotation*originalLabelWidth;}}
+me.labelRotation=labelRotation;},afterCalculateTickRotation:function(){helpers.callback(this.options.afterCalculateTickRotation,[this]);},beforeFit:function(){helpers.callback(this.options.beforeFit,[this]);},fit:function(){var me=this;var minSize=me.minSize={width:0,height:0};var opts=me.options;var tickOpts=opts.ticks;var scaleLabelOpts=opts.scaleLabel;var gridLineOpts=opts.gridLines;var display=opts.display;var isHorizontal=me.isHorizontal();var tickFont=parseFontOptions(tickOpts);var scaleLabelFontSize=parseFontOptions(scaleLabelOpts).size*1.5;var tickMarkLength=opts.gridLines.tickMarkLength;if(isHorizontal){minSize.width=me.isFullWidth()?me.maxWidth-me.margins.left-me.margins.right:me.maxWidth;}else{minSize.width=display&&gridLineOpts.drawTicks?tickMarkLength:0;}
+if(isHorizontal){minSize.height=display&&gridLineOpts.drawTicks?tickMarkLength:0;}else{minSize.height=me.maxHeight;}
+if(scaleLabelOpts.display&&display){if(isHorizontal){minSize.height+=scaleLabelFontSize;}else{minSize.width+=scaleLabelFontSize;}}
+if(tickOpts.display&&display){var largestTextWidth=helpers.longestText(me.ctx,tickFont.font,me.ticks,me.longestTextCache);var tallestLabelHeightInLines=helpers.numberOfLabelLines(me.ticks);var lineSpace=tickFont.size*0.5;if(isHorizontal){me.longestLabelWidth=largestTextWidth;var angleRadians=helpers.toRadians(me.labelRotation);var cosRotation=Math.cos(angleRadians);var sinRotation=Math.sin(angleRadians);var labelHeight=(sinRotation*largestTextWidth)+(tickFont.size*tallestLabelHeightInLines)+(lineSpace*tallestLabelHeightInLines);minSize.height=Math.min(me.maxHeight,minSize.height+labelHeight);me.ctx.font=tickFont.font;var firstTick=me.ticks[0];var firstLabelWidth=computeTextSize(me.ctx,firstTick,tickFont.font);var lastTick=me.ticks[me.ticks.length-1];var lastLabelWidth=computeTextSize(me.ctx,lastTick,tickFont.font);if(me.labelRotation!==0){me.paddingLeft=opts.position==='bottom'?(cosRotation*firstLabelWidth)+3:(cosRotation*lineSpace)+3;me.paddingRight=opts.position==='bottom'?(cosRotation*lineSpace)+3:(cosRotation*lastLabelWidth)+3;}else{me.paddingLeft=firstLabelWidth/2+3;me.paddingRight=lastLabelWidth/2+3;}}else{if(tickOpts.mirror){largestTextWidth=0;}else{largestTextWidth+=me.options.ticks.padding;}
+minSize.width=Math.min(me.maxWidth,minSize.width+largestTextWidth);me.paddingTop=tickFont.size/2;me.paddingBottom=tickFont.size/2;}}
+me.handleMargins();me.width=minSize.width;me.height=minSize.height;},handleMargins:function(){var me=this;if(me.margins){me.paddingLeft=Math.max(me.paddingLeft-me.margins.left,0);me.paddingTop=Math.max(me.paddingTop-me.margins.top,0);me.paddingRight=Math.max(me.paddingRight-me.margins.right,0);me.paddingBottom=Math.max(me.paddingBottom-me.margins.bottom,0);}},afterFit:function(){helpers.callback(this.options.afterFit,[this]);},isHorizontal:function(){return this.options.position==='top'||this.options.position==='bottom';},isFullWidth:function(){return(this.options.fullWidth);},getRightValue:function(rawValue){if(rawValue===null||typeof(rawValue)==='undefined'){return NaN;}
+if(typeof(rawValue)==='number'&&!isFinite(rawValue)){return NaN;}
+if(typeof(rawValue)==='object'){if((rawValue instanceof Date)||(rawValue.isValid)){return rawValue;}
+return this.getRightValue(this.isHorizontal()?rawValue.x:rawValue.y);}
+return rawValue;},getLabelForIndex:helpers.noop,getPixelForValue:helpers.noop,getValueForPixel:helpers.noop,getPixelForTick:function(index,includeOffset){var me=this;if(me.isHorizontal()){var innerWidth=me.width-(me.paddingLeft+me.paddingRight);var tickWidth=innerWidth/Math.max((me.ticks.length-((me.options.gridLines.offsetGridLines)?0:1)),1);var pixel=(tickWidth*index)+me.paddingLeft;if(includeOffset){pixel+=tickWidth/2;}
+var finalVal=me.left+Math.round(pixel);finalVal+=me.isFullWidth()?me.margins.left:0;return finalVal;}
+var innerHeight=me.height-(me.paddingTop+me.paddingBottom);return me.top+(index*(innerHeight/(me.ticks.length-1)));},getPixelForDecimal:function(decimal){var me=this;if(me.isHorizontal()){var innerWidth=me.width-(me.paddingLeft+me.paddingRight);var valueOffset=(innerWidth*decimal)+me.paddingLeft;var finalVal=me.left+Math.round(valueOffset);finalVal+=me.isFullWidth()?me.margins.left:0;return finalVal;}
+return me.top+(decimal*me.height);},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue());},getBaseValue:function(){var me=this;var min=me.min;var max=me.max;return me.beginAtZero?0:min<0&&max<0?max:min>0&&max>0?min:0;},draw:function(chartArea){var me=this;var options=me.options;if(!options.display){return;}
+var context=me.ctx;var globalDefaults=Chart.defaults.global;var optionTicks=options.ticks;var gridLines=options.gridLines;var scaleLabel=options.scaleLabel;var isRotated=me.labelRotation!==0;var skipRatio;var useAutoskipper=optionTicks.autoSkip;var isHorizontal=me.isHorizontal();var maxTicks;if(optionTicks.maxTicksLimit){maxTicks=optionTicks.maxTicksLimit;}
+var tickFontColor=helpers.getValueOrDefault(optionTicks.fontColor,globalDefaults.defaultFontColor);var tickFont=parseFontOptions(optionTicks);var tl=gridLines.drawTicks?gridLines.tickMarkLength:0;var scaleLabelFontColor=helpers.getValueOrDefault(scaleLabel.fontColor,globalDefaults.defaultFontColor);var scaleLabelFont=parseFontOptions(scaleLabel);var labelRotationRadians=helpers.toRadians(me.labelRotation);var cosRotation=Math.cos(labelRotationRadians);var longestRotatedLabel=me.longestLabelWidth*cosRotation;context.fillStyle=tickFontColor;var itemsToDraw=[];if(isHorizontal){skipRatio=false;if((longestRotatedLabel+optionTicks.autoSkipPadding)*me.ticks.length>(me.width-(me.paddingLeft+me.paddingRight))){skipRatio=1+Math.floor(((longestRotatedLabel+optionTicks.autoSkipPadding)*me.ticks.length)/(me.width-(me.paddingLeft+me.paddingRight)));}
+if(maxTicks&&me.ticks.length>maxTicks){while(!skipRatio||me.ticks.length/(skipRatio||1)>maxTicks){if(!skipRatio){skipRatio=1;}
+skipRatio+=1;}}
+if(!useAutoskipper){skipRatio=false;}}
+var xTickStart=options.position==='right'?me.left:me.right-tl;var xTickEnd=options.position==='right'?me.left+tl:me.right;var yTickStart=options.position==='bottom'?me.top:me.bottom-tl;var yTickEnd=options.position==='bottom'?me.top+tl:me.bottom;helpers.each(me.ticks,function(label,index){if(label===undefined||label===null){return;}
+var isLastTick=me.ticks.length===index+1;var shouldSkip=(skipRatio>1&&index%skipRatio>0)||(index%skipRatio===0&&index+skipRatio>=me.ticks.length);if(shouldSkip&&!isLastTick||(label===undefined||label===null)){return;}
+var lineWidth,lineColor,borderDash,borderDashOffset;if(index===(typeof me.zeroLineIndex!=='undefined'?me.zeroLineIndex:0)){lineWidth=gridLines.zeroLineWidth;lineColor=gridLines.zeroLineColor;borderDash=gridLines.zeroLineBorderDash;borderDashOffset=gridLines.zeroLineBorderDashOffset;}else{lineWidth=helpers.getValueAtIndexOrDefault(gridLines.lineWidth,index);lineColor=helpers.getValueAtIndexOrDefault(gridLines.color,index);borderDash=helpers.getValueOrDefault(gridLines.borderDash,globalDefaults.borderDash);borderDashOffset=helpers.getValueOrDefault(gridLines.borderDashOffset,globalDefaults.borderDashOffset);}
+var tx1,ty1,tx2,ty2,x1,y1,x2,y2,labelX,labelY;var textAlign='middle';var textBaseline='middle';if(isHorizontal){if(options.position==='bottom'){textBaseline=!isRotated?'top':'middle';textAlign=!isRotated?'center':'right';labelY=me.top+tl;}else{textBaseline=!isRotated?'bottom':'middle';textAlign=!isRotated?'center':'left';labelY=me.bottom-tl;}
+var xLineValue=me.getPixelForTick(index)+helpers.aliasPixel(lineWidth);labelX=me.getPixelForTick(index,gridLines.offsetGridLines)+optionTicks.labelOffset;tx1=tx2=x1=x2=xLineValue;ty1=yTickStart;ty2=yTickEnd;y1=chartArea.top;y2=chartArea.bottom;}else{var isLeft=options.position==='left';var tickPadding=optionTicks.padding;var labelXOffset;if(optionTicks.mirror){textAlign=isLeft?'left':'right';labelXOffset=tickPadding;}else{textAlign=isLeft?'right':'left';labelXOffset=tl+tickPadding;}
+labelX=isLeft?me.right-labelXOffset:me.left+labelXOffset;var yLineValue=me.getPixelForTick(index);yLineValue+=helpers.aliasPixel(lineWidth);labelY=me.getPixelForTick(index,gridLines.offsetGridLines);tx1=xTickStart;tx2=xTickEnd;x1=chartArea.left;x2=chartArea.right;ty1=ty2=y1=y2=yLineValue;}
+itemsToDraw.push({tx1:tx1,ty1:ty1,tx2:tx2,ty2:ty2,x1:x1,y1:y1,x2:x2,y2:y2,labelX:labelX,labelY:labelY,glWidth:lineWidth,glColor:lineColor,glBorderDash:borderDash,glBorderDashOffset:borderDashOffset,rotation:-1*labelRotationRadians,label:label,textBaseline:textBaseline,textAlign:textAlign});});helpers.each(itemsToDraw,function(itemToDraw){if(gridLines.display){context.save();context.lineWidth=itemToDraw.glWidth;context.strokeStyle=itemToDraw.glColor;if(context.setLineDash){context.setLineDash(itemToDraw.glBorderDash);context.lineDashOffset=itemToDraw.glBorderDashOffset;}
+context.beginPath();if(gridLines.drawTicks){context.moveTo(itemToDraw.tx1,itemToDraw.ty1);context.lineTo(itemToDraw.tx2,itemToDraw.ty2);}
+if(gridLines.drawOnChartArea){context.moveTo(itemToDraw.x1,itemToDraw.y1);context.lineTo(itemToDraw.x2,itemToDraw.y2);}
+context.stroke();context.restore();}
+if(optionTicks.display){context.save();context.translate(itemToDraw.labelX,itemToDraw.labelY);context.rotate(itemToDraw.rotation);context.font=tickFont.font;context.textBaseline=itemToDraw.textBaseline;context.textAlign=itemToDraw.textAlign;var label=itemToDraw.label;if(helpers.isArray(label)){for(var i=0,y=0;i0){spacing=generationOptions.stepSize;}else{var niceRange=helpers.niceNum(dataRange.max-dataRange.min,false);spacing=helpers.niceNum(niceRange/(generationOptions.maxTicks-1),true);}
+var niceMin=Math.floor(dataRange.min/spacing)*spacing;var niceMax=Math.ceil(dataRange.max/spacing)*spacing;if(generationOptions.min&&generationOptions.max&&generationOptions.stepSize){if(helpers.almostWhole((generationOptions.max-generationOptions.min)/generationOptions.stepSize,spacing/1000)){niceMin=generationOptions.min;niceMax=generationOptions.max;}}
+var numSpaces=(niceMax-niceMin)/spacing;if(helpers.almostEquals(numSpaces,Math.round(numSpaces),spacing/1000)){numSpaces=Math.round(numSpaces);}else{numSpaces=Math.ceil(numSpaces);}
+ticks.push(generationOptions.min!==undefined?generationOptions.min:niceMin);for(var j=1;j3?ticks[2]-ticks[1]:ticks[1]-ticks[0];if(Math.abs(delta)>1){if(tickValue!==Math.floor(tickValue)){delta=tickValue-Math.floor(tickValue);}}
+var logDelta=helpers.log10(Math.abs(delta));var tickString='';if(tickValue!==0){var numDecimal=-1*Math.floor(logDelta);numDecimal=Math.max(Math.min(numDecimal,20),0);tickString=tickValue.toFixed(numDecimal);}else{tickString='0';}
+return tickString;},logarithmic:function(tickValue,index,ticks){var remain=tickValue/(Math.pow(10,Math.floor(helpers.log10(tickValue))));if(tickValue===0){return'0';}else if(remain===1||remain===2||remain===5||index===0||index===ticks.length-1){return tickValue.toExponential();}
+return'';}}};};},{}],34:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;function mergeOpacity(colorString,opacity){var color=helpers.color(colorString);return color.alpha(opacity*color.alpha()).rgbaString();}
+Chart.defaults.global.tooltips={enabled:true,custom:null,mode:'nearest',position:'average',intersect:true,backgroundColor:'rgba(0,0,0,0.8)',titleFontStyle:'bold',titleSpacing:2,titleMarginBottom:6,titleFontColor:'#fff',titleAlign:'left',bodySpacing:2,bodyFontColor:'#fff',bodyAlign:'left',footerFontStyle:'bold',footerSpacing:2,footerMarginTop:6,footerFontColor:'#fff',footerAlign:'left',yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:'#fff',displayColors:true,borderColor:'rgba(0,0,0,0)',borderWidth:0,callbacks:{beforeTitle:helpers.noop,title:function(tooltipItems,data){var title='';var labels=data.labels;var labelCount=labels?labels.length:0;if(tooltipItems.length>0){var item=tooltipItems[0];if(item.xLabel){title=item.xLabel;}else if(labelCount>0&&item.index(chart.height-size.height)){yAlign='bottom';}
+var lf,rf;var olf,orf;var yf;var midX=(chartArea.left+chartArea.right)/2;var midY=(chartArea.top+chartArea.bottom)/2;if(yAlign==='center'){lf=function(x){return x<=midX;};rf=function(x){return x>midX;};}else{lf=function(x){return x<=(size.width/2);};rf=function(x){return x>=(chart.width-(size.width/2));};}
+olf=function(x){return x+size.width>chart.width;};orf=function(x){return x-size.width<0;};yf=function(y){return y<=midY?'top':'bottom';};if(lf(model.x)){xAlign='left';if(olf(model.x)){xAlign='center';yAlign=yf(model.y);}}else if(rf(model.x)){xAlign='right';if(orf(model.x)){xAlign='center';yAlign=yf(model.y);}}
+var opts=tooltip._options;return{xAlign:opts.xAlign?opts.xAlign:xAlign,yAlign:opts.yAlign?opts.yAlign:yAlign};}
+function getBackgroundPoint(vm,size,alignment){var x=vm.x;var y=vm.y;var caretSize=vm.caretSize,caretPadding=vm.caretPadding,cornerRadius=vm.cornerRadius,xAlign=alignment.xAlign,yAlign=alignment.yAlign,paddingAndSize=caretSize+caretPadding,radiusAndPadding=cornerRadius+caretPadding;if(xAlign==='right'){x-=size.width;}else if(xAlign==='center'){x-=(size.width/2);}
+if(yAlign==='top'){y+=paddingAndSize;}else if(yAlign==='bottom'){y-=size.height+paddingAndSize;}else{y-=(size.height/2);}
+if(yAlign==='center'){if(xAlign==='left'){x+=paddingAndSize;}else if(xAlign==='right'){x-=paddingAndSize;}}else if(xAlign==='left'){x-=radiusAndPadding;}else if(xAlign==='right'){x+=radiusAndPadding;}
+return{x:x,y:y};}
+Chart.Tooltip=Chart.Element.extend({initialize:function(){this._model=getBaseModel(this._options);},getTitle:function(){var me=this;var opts=me._options;var callbacks=opts.callbacks;var beforeTitle=callbacks.beforeTitle.apply(me,arguments),title=callbacks.title.apply(me,arguments),afterTitle=callbacks.afterTitle.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,beforeTitle);lines=pushOrConcat(lines,title);lines=pushOrConcat(lines,afterTitle);return lines;},getBeforeBody:function(){var lines=this._options.callbacks.beforeBody.apply(this,arguments);return helpers.isArray(lines)?lines:lines!==undefined?[lines]:[];},getBody:function(tooltipItems,data){var me=this;var callbacks=me._options.callbacks;var bodyItems=[];helpers.each(tooltipItems,function(tooltipItem){var bodyItem={before:[],lines:[],after:[]};pushOrConcat(bodyItem.before,callbacks.beforeLabel.call(me,tooltipItem,data));pushOrConcat(bodyItem.lines,callbacks.label.call(me,tooltipItem,data));pushOrConcat(bodyItem.after,callbacks.afterLabel.call(me,tooltipItem,data));bodyItems.push(bodyItem);});return bodyItems;},getAfterBody:function(){var lines=this._options.callbacks.afterBody.apply(this,arguments);return helpers.isArray(lines)?lines:lines!==undefined?[lines]:[];},getFooter:function(){var me=this;var callbacks=me._options.callbacks;var beforeFooter=callbacks.beforeFooter.apply(me,arguments);var footer=callbacks.footer.apply(me,arguments);var afterFooter=callbacks.afterFooter.apply(me,arguments);var lines=[];lines=pushOrConcat(lines,beforeFooter);lines=pushOrConcat(lines,footer);lines=pushOrConcat(lines,afterFooter);return lines;},update:function(changed){var me=this;var opts=me._options;var existingModel=me._model;var model=me._model=getBaseModel(opts);var active=me._active;var data=me._data;var alignment={xAlign:existingModel.xAlign,yAlign:existingModel.yAlign};var backgroundPoint={x:existingModel.x,y:existingModel.y};var tooltipSize={width:existingModel.width,height:existingModel.height};var tooltipPosition={x:existingModel.caretX,y:existingModel.caretY};var i,len;if(active.length){model.opacity=1;var labelColors=[];tooltipPosition=Chart.Tooltip.positioners[opts.position](active,me._eventPosition);var tooltipItems=[];for(i=0,len=active.length;i0){ctx.stroke();}},draw:function(){var ctx=this._chart.ctx;var vm=this._view;if(vm.opacity===0){return;}
+var tooltipSize={width:vm.width,height:vm.height};var pt={x:vm.x,y:vm.y};var opacity=Math.abs(vm.opacity<1e-3)?0:vm.opacity;var hasTooltipContent=vm.title.length||vm.beforeBody.length||vm.body.length||vm.afterBody.length||vm.footer.length;if(this._options.enabled&&hasTooltipContent){this.drawBackground(pt,vm,ctx,tooltipSize,opacity);pt.x+=vm.xPadding;pt.y+=vm.yPadding;this.drawTitle(pt,vm,ctx,opacity);this.drawBody(pt,vm,ctx,opacity);this.drawFooter(pt,vm,ctx,opacity);}},handleEvent:function(e){var me=this;var options=me._options;var changed=false;me._lastActive=me._lastActive||[];if(e.type==='mouseout'){me._active=[];}else{me._active=me._chart.getElementsAtEventForMode(e,options.mode,options);}
+changed=!helpers.arrayEquals(me._active,me._lastActive);if(!changed){return false;}
+me._lastActive=me._active;if(options.enabled||options.custom){me._eventPosition={x:e.x,y:e.y};var model=me._model;me.update(true);me.pivot();changed|=(model.x!==me._model.x)||(model.y!==me._model.y);}
+return changed;}});Chart.Tooltip.positioners={average:function(elements){if(!elements.length){return false;}
+var i,len;var x=0;var y=0;var count=0;for(i=0,len=elements.length;iendAngle){angle-=2.0*Math.PI;}
+while(angle=startAngle&&angle<=endAngle),withinRadius=(distance>=vm.innerRadius&&distance<=vm.outerRadius);return(betweenAngles&&withinRadius);}
+return false;},getCenterPoint:function(){var vm=this._view;var halfAngle=(vm.startAngle+vm.endAngle)/2;var halfRadius=(vm.innerRadius+vm.outerRadius)/2;return{x:vm.x+Math.cos(halfAngle)*halfRadius,y:vm.y+Math.sin(halfAngle)*halfRadius};},getArea:function(){var vm=this._view;return Math.PI*((vm.endAngle-vm.startAngle)/(2*Math.PI))*(Math.pow(vm.outerRadius,2)-Math.pow(vm.innerRadius,2));},tooltipPosition:function(){var vm=this._view;var centreAngle=vm.startAngle+((vm.endAngle-vm.startAngle)/2),rangeFromCentre=(vm.outerRadius-vm.innerRadius)/2+vm.innerRadius;return{x:vm.x+(Math.cos(centreAngle)*rangeFromCentre),y:vm.y+(Math.sin(centreAngle)*rangeFromCentre)};},draw:function(){var ctx=this._chart.ctx,vm=this._view,sA=vm.startAngle,eA=vm.endAngle;ctx.beginPath();ctx.arc(vm.x,vm.y,vm.outerRadius,sA,eA);ctx.arc(vm.x,vm.y,vm.innerRadius,eA,sA,true);ctx.closePath();ctx.strokeStyle=vm.borderColor;ctx.lineWidth=vm.borderWidth;ctx.fillStyle=vm.backgroundColor;ctx.fill();ctx.lineJoin='bevel';if(vm.borderWidth){ctx.stroke();}}});};},{}],36:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var globalDefaults=Chart.defaults.global;Chart.defaults.global.elements.line={tension:0.4,backgroundColor:globalDefaults.defaultColor,borderWidth:3,borderColor:globalDefaults.defaultColor,borderCapStyle:'butt',borderDash:[],borderDashOffset:0.0,borderJoinStyle:'miter',capBezierPoints:true,fill:true,};Chart.elements.Line=Chart.Element.extend({draw:function(){var me=this;var vm=me._view;var ctx=me._chart.ctx;var spanGaps=vm.spanGaps;var points=me._children.slice();var globalOptionLineElements=globalDefaults.elements.line;var lastDrawnIndex=-1;var index,current,previous,currentVM;if(me._loop&&points.length){points.push(points[0]);}
+ctx.save();ctx.lineCap=vm.borderCapStyle||globalOptionLineElements.borderCapStyle;if(ctx.setLineDash){ctx.setLineDash(vm.borderDash||globalOptionLineElements.borderDash);}
+ctx.lineDashOffset=vm.borderDashOffset||globalOptionLineElements.borderDashOffset;ctx.lineJoin=vm.borderJoinStyle||globalOptionLineElements.borderJoinStyle;ctx.lineWidth=vm.borderWidth||globalOptionLineElements.borderWidth;ctx.strokeStyle=vm.borderColor||globalDefaults.defaultColor;ctx.beginPath();lastDrawnIndex=-1;for(index=0;indextop?1:-1;borderSkipped=vm.borderSkipped||'bottom';}else{left=vm.base;right=vm.x;top=vm.y-vm.height/2;bottom=vm.y+vm.height/2;signX=right>left?1:-1;signY=1;borderSkipped=vm.borderSkipped||'left';}
+if(borderWidth){var barSize=Math.min(Math.abs(left-right),Math.abs(top-bottom));borderWidth=borderWidth>barSize?barSize:borderWidth;var halfStroke=borderWidth/2;var borderLeft=left+(borderSkipped!=='left'?halfStroke*signX:0);var borderRight=right+(borderSkipped!=='right'?-halfStroke*signX:0);var borderTop=top+(borderSkipped!=='top'?halfStroke*signY:0);var borderBottom=bottom+(borderSkipped!=='bottom'?-halfStroke*signY:0);if(borderLeft!==borderRight){top=borderTop;bottom=borderBottom;}
+if(borderTop!==borderBottom){left=borderLeft;right=borderRight;}}
+ctx.beginPath();ctx.fillStyle=vm.backgroundColor;ctx.strokeStyle=vm.borderColor;ctx.lineWidth=borderWidth;var corners=[[left,bottom],[left,top],[right,top],[right,bottom]];var borders=['bottom','left','top','right'];var startCorner=borders.indexOf(borderSkipped,0);if(startCorner===-1){startCorner=0;}
+function cornerAt(index){return corners[(startCorner+index)%4];}
+var corner=cornerAt(0);ctx.moveTo(corner[0],corner[1]);for(var i=1;i<4;i++){corner=cornerAt(i);ctx.lineTo(corner[0],corner[1]);}
+ctx.fill();if(borderWidth){ctx.stroke();}},height:function(){var vm=this._view;return vm.base-vm.y;},inRange:function(mouseX,mouseY){var inRange=false;if(this._view){var bounds=getBarBounds(this);inRange=mouseX>=bounds.left&&mouseX<=bounds.right&&mouseY>=bounds.top&&mouseY<=bounds.bottom;}
+return inRange;},inLabelRange:function(mouseX,mouseY){var me=this;if(!me._view){return false;}
+var inRange=false;var bounds=getBarBounds(me);if(isVertical(me)){inRange=mouseX>=bounds.left&&mouseX<=bounds.right;}else{inRange=mouseY>=bounds.top&&mouseY<=bounds.bottom;}
+return inRange;},inXRange:function(mouseX){var bounds=getBarBounds(this);return mouseX>=bounds.left&&mouseX<=bounds.right;},inYRange:function(mouseY){var bounds=getBarBounds(this);return mouseY>=bounds.top&&mouseY<=bounds.bottom;},getCenterPoint:function(){var vm=this._view;var x,y;if(isVertical(this)){x=vm.x;y=(vm.y+vm.base)/2;}else{x=(vm.x+vm.base)/2;y=vm.y;}
+return{x:x,y:y};},getArea:function(){var vm=this._view;return vm.width*Math.abs(vm.y-vm.base);},tooltipPosition:function(){var vm=this._view;return{x:vm.x,y:vm.y};}});};},{}],39:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var eventTypeMap={touchstart:'mousedown',touchmove:'mousemove',touchend:'mouseup',pointerenter:'mouseenter',pointerdown:'mousedown',pointermove:'mousemove',pointerup:'mouseup',pointerleave:'mouseout',pointerout:'mouseout'};function readUsedSize(element,property){var value=helpers.getStyle(element,property);var matches=value&&value.match(/^(\d+)(\.\d+)?px$/);return matches?Number(matches[1]):undefined;}
+function initCanvas(canvas,config){var style=canvas.style;var renderHeight=canvas.getAttribute('height');var renderWidth=canvas.getAttribute('width');canvas._chartjs={initial:{height:renderHeight,width:renderWidth,style:{display:style.display,height:style.height,width:style.width}}};style.display=style.display||'block';if(renderWidth===null||renderWidth===''){var displayWidth=readUsedSize(canvas,'width');if(displayWidth!==undefined){canvas.width=displayWidth;}}
+if(renderHeight===null||renderHeight===''){if(canvas.style.height===''){canvas.height=canvas.width/(config.options.aspectRatio||2);}else{var displayHeight=readUsedSize(canvas,'height');if(displayWidth!==undefined){canvas.height=displayHeight;}}}
+return canvas;}
+function createEvent(type,chart,x,y,nativeEvent){return{type:type,chart:chart,native:nativeEvent||null,x:x!==undefined?x:null,y:y!==undefined?y:null,};}
+function fromNativeEvent(event,chart){var type=eventTypeMap[event.type]||event.type;var pos=helpers.getRelativePosition(event,chart);return createEvent(type,chart,pos.x,pos.y,event);}
+function createResizer(handler){var iframe=document.createElement('iframe');iframe.className='chartjs-hidden-iframe';iframe.style.cssText='display:block;'+'overflow:hidden;'+'border:0;'+'margin:0;'+'top:0;'+'left:0;'+'bottom:0;'+'right:0;'+'height:100%;'+'width:100%;'+'position:absolute;'+'pointer-events:none;'+'z-index:-1;';iframe.tabIndex=-1;helpers.addEvent(iframe,'load',function(){helpers.addEvent(iframe.contentWindow||iframe,'resize',handler);handler();});return iframe;}
+function addResizeListener(node,listener,chart){var stub=node._chartjs={ticking:false};var notify=function(){if(!stub.ticking){stub.ticking=true;helpers.requestAnimFrame.call(window,function(){if(stub.resizer){stub.ticking=false;return listener(createEvent('resize',chart));}});}};stub.resizer=createResizer(notify);node.insertBefore(stub.resizer,node.firstChild);}
+function removeResizeListener(node){if(!node||!node._chartjs){return;}
+var resizer=node._chartjs.resizer;if(resizer){resizer.parentNode.removeChild(resizer);node._chartjs.resizer=null;}
+delete node._chartjs;}
+return{acquireContext:function(item,config){if(typeof item==='string'){item=document.getElementById(item);}else if(item.length){item=item[0];}
+if(item&&item.canvas){item=item.canvas;}
+var context=item&&item.getContext&&item.getContext('2d');if(context&&context.canvas===item){initCanvas(item,config);return context;}
+return null;},releaseContext:function(context){var canvas=context.canvas;if(!canvas._chartjs){return;}
+var initial=canvas._chartjs.initial;['height','width'].forEach(function(prop){var value=initial[prop];if(value===undefined||value===null){canvas.removeAttribute(prop);}else{canvas.setAttribute(prop,value);}});helpers.each(initial.style||{},function(value,key){canvas.style[key]=value;});canvas.width=canvas.width;delete canvas._chartjs;},addEventListener:function(chart,type,listener){var canvas=chart.canvas;if(type==='resize'){addResizeListener(canvas.parentNode,listener,chart);return;}
+var stub=listener._chartjs||(listener._chartjs={});var proxies=stub.proxies||(stub.proxies={});var proxy=proxies[chart.id+'_'+type]=function(event){listener(fromNativeEvent(event,chart));};helpers.addEvent(canvas,type,proxy);},removeEventListener:function(chart,type,listener){var canvas=chart.canvas;if(type==='resize'){removeResizeListener(canvas.parentNode,listener);return;}
+var stub=listener._chartjs||{};var proxies=stub.proxies||{};var proxy=proxies[chart.id+'_'+type];if(!proxy){return;}
+helpers.removeEvent(canvas,type,proxy);}};};},{}],40:[function(require,module,exports){'use strict';var implementation=require(39);module.exports=function(Chart){Chart.platform={acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}};Chart.helpers.extend(Chart.platform,implementation(Chart));};},{"39":39}],41:[function(require,module,exports){'use strict';module.exports=function(Chart){Chart.defaults.global.plugins.filler={propagate:true};var defaults=Chart.defaults;var helpers=Chart.helpers;var mappers={dataset:function(source){var index=source.fill;var chart=source.chart;var meta=chart.getDatasetMeta(index);var visible=meta&&chart.isDatasetVisible(index);var points=(visible&&meta.dataset._children)||[];return!points.length?null:function(point,i){return points[i]._view||null;};},boundary:function(source){var boundary=source.boundary;var x=boundary?boundary.x:null;var y=boundary?boundary.y:null;return function(point){return{x:x===null?point.x:x,y:y===null?point.y:y,};};}};function decodeFill(el,index,count){var model=el._model||{};var fill=model.fill;var target;if(fill===undefined){fill=!!model.backgroundColor;}
+if(fill===false||fill===null){return false;}
+if(fill===true){return'origin';}
+target=parseFloat(fill,10);if(isFinite(target)&&Math.floor(target)===target){if(fill[0]==='-'||fill[0]==='+'){target=index+target;}
+if(target===index||target<0||target>=count){return false;}
+return target;}
+switch(fill){case'bottom':return'start';case'top':return'end';case'zero':return'origin';case'origin':case'start':case'end':return fill;default:return false;}}
+function computeBoundary(source){var model=source.el._model||{};var scale=source.el._scale||{};var fill=source.fill;var target=null;var horizontal;if(isFinite(fill)){return null;}
+if(fill==='start'){target=model.scaleBottom===undefined?scale.bottom:model.scaleBottom;}else if(fill==='end'){target=model.scaleTop===undefined?scale.top:model.scaleTop;}else if(model.scaleZero!==undefined){target=model.scaleZero;}else if(scale.getBasePosition){target=scale.getBasePosition();}else if(scale.getBasePixel){target=scale.getBasePixel();}
+if(target!==undefined&&target!==null){if(target.x!==undefined&&target.y!==undefined){return target;}
+if(typeof target==='number'&&isFinite(target)){horizontal=scale.isHorizontal();return{x:horizontal?target:null,y:horizontal?null:target};}}
+return null;}
+function resolveTarget(sources,index,propagate){var source=sources[index];var fill=source.fill;var visited=[index];var target;if(!propagate){return fill;}
+while(fill!==false&&visited.indexOf(fill)===-1){if(!isFinite(fill)){return fill;}
+target=sources[fill];if(!target){return false;}
+if(target.visible){return fill;}
+visited.push(fill);fill=target.fill;}
+return false;}
+function createMapper(source){var fill=source.fill;var type='dataset';if(fill===false){return null;}
+if(!isFinite(fill)){type='boundary';}
+return mappers[type](source);}
+function isDrawable(point){return point&&!point.skip;}
+function drawArea(ctx,curve0,curve1,len0,len1){var i;if(!len0||!len1){return;}
+ctx.moveTo(curve0[0].x,curve0[0].y);for(i=1;i0;--i){helpers.canvas.lineTo(ctx,curve1[i],curve1[i-1],true);}}
+function doFill(ctx,points,mapper,view,color,loop){var count=points.length;var span=view.spanGaps;var curve0=[];var curve1=[];var len0=0;var len1=0;var i,ilen,index,p0,p1,d0,d1;ctx.beginPath();for(i=0,ilen=(count+!!loop);i=me.width){totalHeight+=fontSize+(labelOpts.padding);lineWidths[lineWidths.length]=me.left;}
+hitboxes[i]={left:0,top:0,width:width,height:fontSize};lineWidths[lineWidths.length-1]+=width+labelOpts.padding;});minSize.height+=totalHeight;}else{var vPadding=labelOpts.padding;var columnWidths=me.columnWidths=[];var totalWidth=labelOpts.padding;var currentColWidth=0;var currentColHeight=0;var itemHeight=fontSize+vPadding;helpers.each(me.legendItems,function(legendItem,i){var boxWidth=getBoxWidth(labelOpts,fontSize);var itemWidth=boxWidth+(fontSize/2)+ctx.measureText(legendItem.text).width;if(currentColHeight+itemHeight>minSize.height){totalWidth+=currentColWidth+labelOpts.padding;columnWidths.push(currentColWidth);currentColWidth=0;currentColHeight=0;}
+currentColWidth=Math.max(currentColWidth,itemWidth);currentColHeight+=itemHeight;hitboxes[i]={left:0,top:0,width:itemWidth,height:fontSize};});totalWidth+=currentColWidth;columnWidths.push(currentColWidth);minSize.width+=totalWidth;}}
+me.width=minSize.width;me.height=minSize.height;},afterFit:noop,isHorizontal:function(){return this.options.position==='top'||this.options.position==='bottom';},draw:function(){var me=this;var opts=me.options;var labelOpts=opts.labels;var globalDefault=Chart.defaults.global,lineDefault=globalDefault.elements.line,legendWidth=me.width,lineWidths=me.lineWidths;if(opts.display){var ctx=me.ctx,cursor,itemOrDefault=helpers.getValueOrDefault,fontColor=itemOrDefault(labelOpts.fontColor,globalDefault.defaultFontColor),fontSize=itemOrDefault(labelOpts.fontSize,globalDefault.defaultFontSize),fontStyle=itemOrDefault(labelOpts.fontStyle,globalDefault.defaultFontStyle),fontFamily=itemOrDefault(labelOpts.fontFamily,globalDefault.defaultFontFamily),labelFont=helpers.fontString(fontSize,fontStyle,fontFamily);ctx.textAlign='left';ctx.textBaseline='top';ctx.lineWidth=0.5;ctx.strokeStyle=fontColor;ctx.fillStyle=fontColor;ctx.font=labelFont;var boxWidth=getBoxWidth(labelOpts,fontSize),hitboxes=me.legendHitBoxes;var drawLegendBox=function(x,y,legendItem){if(isNaN(boxWidth)||boxWidth<=0){return;}
+ctx.save();ctx.fillStyle=itemOrDefault(legendItem.fillStyle,globalDefault.defaultColor);ctx.lineCap=itemOrDefault(legendItem.lineCap,lineDefault.borderCapStyle);ctx.lineDashOffset=itemOrDefault(legendItem.lineDashOffset,lineDefault.borderDashOffset);ctx.lineJoin=itemOrDefault(legendItem.lineJoin,lineDefault.borderJoinStyle);ctx.lineWidth=itemOrDefault(legendItem.lineWidth,lineDefault.borderWidth);ctx.strokeStyle=itemOrDefault(legendItem.strokeStyle,globalDefault.defaultColor);var isLineWidthZero=(itemOrDefault(legendItem.lineWidth,lineDefault.borderWidth)===0);if(ctx.setLineDash){ctx.setLineDash(itemOrDefault(legendItem.lineDash,lineDefault.borderDash));}
+if(opts.labels&&opts.labels.usePointStyle){var radius=fontSize*Math.SQRT2/2;var offSet=radius/Math.SQRT2;var centerX=x+offSet;var centerY=y+offSet;Chart.canvasHelpers.drawPoint(ctx,legendItem.pointStyle,radius,centerX,centerY);}else{if(!isLineWidthZero){ctx.strokeRect(x,y,boxWidth,fontSize);}
+ctx.fillRect(x,y,boxWidth,fontSize);}
+ctx.restore();};var fillText=function(x,y,legendItem,textWidth){ctx.fillText(legendItem.text,boxWidth+(fontSize/2)+x,y);if(legendItem.hidden){ctx.beginPath();ctx.lineWidth=2;ctx.moveTo(boxWidth+(fontSize/2)+x,y+(fontSize/2));ctx.lineTo(boxWidth+(fontSize/2)+x+textWidth,y+(fontSize/2));ctx.stroke();}};var isHorizontal=me.isHorizontal();if(isHorizontal){cursor={x:me.left+((legendWidth-lineWidths[0])/2),y:me.top+labelOpts.padding,line:0};}else{cursor={x:me.left+labelOpts.padding,y:me.top+labelOpts.padding,line:0};}
+var itemHeight=fontSize+labelOpts.padding;helpers.each(me.legendItems,function(legendItem,i){var textWidth=ctx.measureText(legendItem.text).width,width=boxWidth+(fontSize/2)+textWidth,x=cursor.x,y=cursor.y;if(isHorizontal){if(x+width>=legendWidth){y=cursor.y+=itemHeight;cursor.line++;x=cursor.x=me.left+((legendWidth-lineWidths[cursor.line])/2);}}else if(y+itemHeight>me.bottom){x=cursor.x=x+me.columnWidths[cursor.line]+labelOpts.padding;y=cursor.y=me.top+labelOpts.padding;cursor.line++;}
+drawLegendBox(x,y,legendItem);hitboxes[i].left=x;hitboxes[i].top=y;fillText(x,y,legendItem,textWidth);if(isHorizontal){cursor.x+=width+(labelOpts.padding);}else{cursor.y+=itemHeight;}});}},handleEvent:function(e){var me=this;var opts=me.options;var type=e.type==='mouseup'?'click':e.type;var changed=false;if(type==='mousemove'){if(!opts.onHover){return;}}else if(type==='click'){if(!opts.onClick){return;}}else{return;}
+var x=e.x,y=e.y;if(x>=me.left&&x<=me.right&&y>=me.top&&y<=me.bottom){var lh=me.legendHitBoxes;for(var i=0;i=hitBox.left&&x<=hitBox.left+hitBox.width&&y>=hitBox.top&&y<=hitBox.top+hitBox.height){if(type==='click'){opts.onClick.call(me,e.native,me.legendItems[i]);changed=true;break;}else if(type==='mousemove'){opts.onHover.call(me,e.native,me.legendItems[i]);changed=true;break;}}}}
+return changed;}});function createNewLegendAndAttach(chart,legendOpts){var legend=new Chart.Legend({ctx:chart.ctx,options:legendOpts,chart:chart});layout.configure(chart,legend,legendOpts);layout.addBox(chart,legend);chart.legend=legend;}
+return{id:'legend',beforeInit:function(chart){var legendOpts=chart.options.legend;if(legendOpts){createNewLegendAndAttach(chart,legendOpts);}},beforeUpdate:function(chart){var legendOpts=chart.options.legend;var legend=chart.legend;if(legendOpts){legendOpts=helpers.configMerge(Chart.defaults.global.legend,legendOpts);if(legend){layout.configure(chart,legend,legendOpts);legend.options=legendOpts;}else{createNewLegendAndAttach(chart,legendOpts);}}else if(legend){layout.removeBox(chart,legend);delete chart.legend;}},afterEvent:function(chart,e){var legend=chart.legend;if(legend){legend.handleEvent(e);}}};};},{}],43:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var layout=Chart.layoutService;var noop=helpers.noop;Chart.defaults.global.title={display:false,position:'top',fullWidth:true,weight:2000,fontStyle:'bold',padding:10,text:''};Chart.Title=Chart.Element.extend({initialize:function(config){var me=this;helpers.extend(me,config);me.legendHitBoxes=[];},beforeUpdate:noop,update:function(maxWidth,maxHeight,margins){var me=this;me.beforeUpdate();me.maxWidth=maxWidth;me.maxHeight=maxHeight;me.margins=margins;me.beforeSetDimensions();me.setDimensions();me.afterSetDimensions();me.beforeBuildLabels();me.buildLabels();me.afterBuildLabels();me.beforeFit();me.fit();me.afterFit();me.afterUpdate();return me.minSize;},afterUpdate:noop,beforeSetDimensions:noop,setDimensions:function(){var me=this;if(me.isHorizontal()){me.width=me.maxWidth;me.left=0;me.right=me.width;}else{me.height=me.maxHeight;me.top=0;me.bottom=me.height;}
+me.paddingLeft=0;me.paddingTop=0;me.paddingRight=0;me.paddingBottom=0;me.minSize={width:0,height:0};},afterSetDimensions:noop,beforeBuildLabels:noop,buildLabels:noop,afterBuildLabels:noop,beforeFit:noop,fit:function(){var me=this,valueOrDefault=helpers.getValueOrDefault,opts=me.options,globalDefaults=Chart.defaults.global,display=opts.display,fontSize=valueOrDefault(opts.fontSize,globalDefaults.defaultFontSize),minSize=me.minSize;if(me.isHorizontal()){minSize.width=me.maxWidth;minSize.height=display?fontSize+(opts.padding*2):0;}else{minSize.width=display?fontSize+(opts.padding*2):0;minSize.height=me.maxHeight;}
+me.width=minSize.width;me.height=minSize.height;},afterFit:noop,isHorizontal:function(){var pos=this.options.position;return pos==='top'||pos==='bottom';},draw:function(){var me=this,ctx=me.ctx,valueOrDefault=helpers.getValueOrDefault,opts=me.options,globalDefaults=Chart.defaults.global;if(opts.display){var fontSize=valueOrDefault(opts.fontSize,globalDefaults.defaultFontSize),fontStyle=valueOrDefault(opts.fontStyle,globalDefaults.defaultFontStyle),fontFamily=valueOrDefault(opts.fontFamily,globalDefaults.defaultFontFamily),titleFont=helpers.fontString(fontSize,fontStyle,fontFamily),rotation=0,titleX,titleY,top=me.top,left=me.left,bottom=me.bottom,right=me.right,maxWidth;ctx.fillStyle=valueOrDefault(opts.fontColor,globalDefaults.defaultFontColor);ctx.font=titleFont;if(me.isHorizontal()){titleX=left+((right-left)/2);titleY=top+((bottom-top)/2);maxWidth=right-left;}else{titleX=opts.position==='left'?left+(fontSize/2):right-(fontSize/2);titleY=top+((bottom-top)/2);maxWidth=bottom-top;rotation=Math.PI*(opts.position==='left'?-0.5:0.5);}
+ctx.save();ctx.translate(titleX,titleY);ctx.rotate(rotation);ctx.textAlign='center';ctx.textBaseline='middle';ctx.fillText(opts.text,0,0,maxWidth);ctx.restore();}}});function createNewTitleBlockAndAttach(chart,titleOpts){var title=new Chart.Title({ctx:chart.ctx,options:titleOpts,chart:chart});layout.configure(chart,title,titleOpts);layout.addBox(chart,title);chart.titleBlock=title;}
+return{id:'title',beforeInit:function(chart){var titleOpts=chart.options.title;if(titleOpts){createNewTitleBlockAndAttach(chart,titleOpts);}},beforeUpdate:function(chart){var titleOpts=chart.options.title;var titleBlock=chart.titleBlock;if(titleOpts){titleOpts=helpers.configMerge(Chart.defaults.global.title,titleOpts);if(titleBlock){layout.configure(chart,titleBlock,titleOpts);titleBlock.options=titleOpts;}else{createNewTitleBlockAndAttach(chart,titleOpts);}}else if(titleBlock){Chart.layoutService.removeBox(chart,titleBlock);delete chart.titleBlock;}}};};},{}],44:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var defaultConfig={position:'bottom'};var DatasetScale=Chart.Scale.extend({getLabels:function(){var data=this.chart.data;return(this.isHorizontal()?data.xLabels:data.yLabels)||data.labels;},determineDataLimits:function(){var me=this;var labels=me.getLabels();me.minIndex=0;me.maxIndex=labels.length-1;var findIndex;if(me.options.ticks.min!==undefined){findIndex=helpers.indexOf(labels,me.options.ticks.min);me.minIndex=findIndex!==-1?findIndex:me.minIndex;}
+if(me.options.ticks.max!==undefined){findIndex=helpers.indexOf(labels,me.options.ticks.max);me.maxIndex=findIndex!==-1?findIndex:me.maxIndex;}
+me.min=labels[me.minIndex];me.max=labels[me.maxIndex];},buildTicks:function(){var me=this;var labels=me.getLabels();me.ticks=(me.minIndex===0&&me.maxIndex===labels.length-1)?labels:labels.slice(me.minIndex,me.maxIndex+1);},getLabelForIndex:function(index,datasetIndex){var me=this;var data=me.chart.data;var isHorizontal=me.isHorizontal();if(data.yLabels&&!isHorizontal){return me.getRightValue(data.datasets[datasetIndex].data[index]);}
+return me.ticks[index-me.minIndex];},getPixelForValue:function(value,index,datasetIndex,includeOffset){var me=this;var offsetAmt=Math.max((me.maxIndex+1-me.minIndex-((me.options.gridLines.offsetGridLines)?0:1)),1);var valueCategory;if(value!==undefined&&value!==null){valueCategory=me.isHorizontal()?value.x:value.y;}
+if(valueCategory!==undefined||(value!==undefined&&isNaN(index))){var labels=me.getLabels();value=valueCategory||value;var idx=labels.indexOf(value);index=idx!==-1?idx:index;}
+if(me.isHorizontal()){var valueWidth=me.width/offsetAmt;var widthOffset=(valueWidth*(index-me.minIndex));if(me.options.gridLines.offsetGridLines&&includeOffset||me.maxIndex===me.minIndex&&includeOffset){widthOffset+=(valueWidth/2);}
+return me.left+Math.round(widthOffset);}
+var valueHeight=me.height/offsetAmt;var heightOffset=(valueHeight*(index-me.minIndex));if(me.options.gridLines.offsetGridLines&&includeOffset){heightOffset+=(valueHeight/2);}
+return me.top+Math.round(heightOffset);},getPixelForTick:function(index,includeOffset){return this.getPixelForValue(this.ticks[index],index+this.minIndex,null,includeOffset);},getValueForPixel:function(pixel){var me=this;var value;var offsetAmt=Math.max((me.ticks.length-((me.options.gridLines.offsetGridLines)?0:1)),1);var horz=me.isHorizontal();var valueDimension=(horz?me.width:me.height)/offsetAmt;pixel-=horz?me.left:me.top;if(me.options.gridLines.offsetGridLines){pixel-=(valueDimension/2);}
+if(pixel<=0){value=0;}else{value=Math.round(pixel/valueDimension);}
+return value;},getBasePixel:function(){return this.bottom;}});Chart.scaleService.registerScaleType('category',DatasetScale,defaultConfig);};},{}],45:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var defaultConfig={position:'left',ticks:{callback:Chart.Ticks.formatters.linear}};var LinearScale=Chart.LinearScaleBase.extend({determineDataLimits:function(){var me=this;var opts=me.options;var chart=me.chart;var data=chart.data;var datasets=data.datasets;var isHorizontal=me.isHorizontal();var DEFAULT_MIN=0;var DEFAULT_MAX=1;function IDMatches(meta){return isHorizontal?meta.xAxisID===me.id:meta.yAxisID===me.id;}
+me.min=null;me.max=null;var hasStacks=opts.stacked;if(hasStacks===undefined){helpers.each(datasets,function(dataset,datasetIndex){if(hasStacks){return;}
+var meta=chart.getDatasetMeta(datasetIndex);if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)&&meta.stack!==undefined){hasStacks=true;}});}
+if(opts.stacked||hasStacks){var valuesPerStack={};helpers.each(datasets,function(dataset,datasetIndex){var meta=chart.getDatasetMeta(datasetIndex);var key=[meta.type,((opts.stacked===undefined&&meta.stack===undefined)?datasetIndex:''),meta.stack].join('.');if(valuesPerStack[key]===undefined){valuesPerStack[key]={positiveValues:[],negativeValues:[]};}
+var positiveValues=valuesPerStack[key].positiveValues;var negativeValues=valuesPerStack[key].negativeValues;if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)){helpers.each(dataset.data,function(rawValue,index){var value=+me.getRightValue(rawValue);if(isNaN(value)||meta.data[index].hidden){return;}
+positiveValues[index]=positiveValues[index]||0;negativeValues[index]=negativeValues[index]||0;if(opts.relativePoints){positiveValues[index]=100;}else if(value<0){negativeValues[index]+=value;}else{positiveValues[index]+=value;}});}});helpers.each(valuesPerStack,function(valuesForType){var values=valuesForType.positiveValues.concat(valuesForType.negativeValues);var minVal=helpers.min(values);var maxVal=helpers.max(values);me.min=me.min===null?minVal:Math.min(me.min,minVal);me.max=me.max===null?maxVal:Math.max(me.max,maxVal);});}else{helpers.each(datasets,function(dataset,datasetIndex){var meta=chart.getDatasetMeta(datasetIndex);if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)){helpers.each(dataset.data,function(rawValue,index){var value=+me.getRightValue(rawValue);if(isNaN(value)||meta.data[index].hidden){return;}
+if(me.min===null){me.min=value;}else if(valueme.max){me.max=value;}});}});}
+me.min=isFinite(me.min)?me.min:DEFAULT_MIN;me.max=isFinite(me.max)?me.max:DEFAULT_MAX;this.handleTickRangeOptions();},getTickLimit:function(){var maxTicks;var me=this;var tickOpts=me.options.ticks;if(me.isHorizontal()){maxTicks=Math.min(tickOpts.maxTicksLimit?tickOpts.maxTicksLimit:11,Math.ceil(me.width/50));}else{var tickFontSize=helpers.getValueOrDefault(tickOpts.fontSize,Chart.defaults.global.defaultFontSize);maxTicks=Math.min(tickOpts.maxTicksLimit?tickOpts.maxTicksLimit:11,Math.ceil(me.height/(2*tickFontSize)));}
+return maxTicks;},handleDirectionalChanges:function(){if(!this.isHorizontal()){this.ticks.reverse();}},getLabelForIndex:function(index,datasetIndex){return+this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);},getPixelForValue:function(value){var me=this;var start=me.start;var rightValue=+me.getRightValue(value);var pixel;var range=me.end-start;if(me.isHorizontal()){pixel=me.left+(me.width/range*(rightValue-start));return Math.round(pixel);}
+pixel=me.bottom-(me.height/range*(rightValue-start));return Math.round(pixel);},getValueForPixel:function(pixel){var me=this;var isHorizontal=me.isHorizontal();var innerDimension=isHorizontal?me.width:me.height;var offset=(isHorizontal?pixel-me.left:me.bottom-pixel)/innerDimension;return me.start+((me.end-me.start)*offset);},getPixelForTick:function(index){return this.getPixelForValue(this.ticksAsNumbers[index]);}});Chart.scaleService.registerScaleType('linear',LinearScale,defaultConfig);};},{}],46:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers,noop=helpers.noop;Chart.LinearScaleBase=Chart.Scale.extend({handleTickRangeOptions:function(){var me=this;var opts=me.options;var tickOpts=opts.ticks;if(tickOpts.beginAtZero){var minSign=helpers.sign(me.min);var maxSign=helpers.sign(me.max);if(minSign<0&&maxSign<0){me.max=0;}else if(minSign>0&&maxSign>0){me.min=0;}}
+if(tickOpts.min!==undefined){me.min=tickOpts.min;}else if(tickOpts.suggestedMin!==undefined){if(me.min===null){me.min=tickOpts.suggestedMin;}else{me.min=Math.min(me.min,tickOpts.suggestedMin);}}
+if(tickOpts.max!==undefined){me.max=tickOpts.max;}else if(tickOpts.suggestedMax!==undefined){if(me.max===null){me.max=tickOpts.suggestedMax;}else{me.max=Math.max(me.max,tickOpts.suggestedMax);}}
+if(me.min===me.max){me.max++;if(!tickOpts.beginAtZero){me.min--;}}},getTickLimit:noop,handleDirectionalChanges:noop,buildTicks:function(){var me=this;var opts=me.options;var tickOpts=opts.ticks;var maxTicks=me.getTickLimit();maxTicks=Math.max(2,maxTicks);var numericGeneratorOptions={maxTicks:maxTicks,min:tickOpts.min,max:tickOpts.max,stepSize:helpers.getValueOrDefault(tickOpts.fixedStepSize,tickOpts.stepSize)};var ticks=me.ticks=Chart.Ticks.generators.linear(numericGeneratorOptions,me);me.handleDirectionalChanges();me.max=helpers.max(ticks);me.min=helpers.min(ticks);if(tickOpts.reverse){ticks.reverse();me.start=me.max;me.end=me.min;}else{me.start=me.min;me.end=me.max;}},convertTicksToLabels:function(){var me=this;me.ticksAsNumbers=me.ticks.slice();me.zeroLineIndex=me.ticks.indexOf(0);Chart.Scale.prototype.convertTicksToLabels.call(me);}});};},{}],47:[function(require,module,exports){'use strict';module.exports=function(Chart){var helpers=Chart.helpers;var defaultConfig={position:'left',ticks:{callback:Chart.Ticks.formatters.logarithmic}};var LogarithmicScale=Chart.Scale.extend({determineDataLimits:function(){var me=this;var opts=me.options;var tickOpts=opts.ticks;var chart=me.chart;var data=chart.data;var datasets=data.datasets;var getValueOrDefault=helpers.getValueOrDefault;var isHorizontal=me.isHorizontal();function IDMatches(meta){return isHorizontal?meta.xAxisID===me.id:meta.yAxisID===me.id;}
+me.min=null;me.max=null;me.minNotZero=null;var hasStacks=opts.stacked;if(hasStacks===undefined){helpers.each(datasets,function(dataset,datasetIndex){if(hasStacks){return;}
+var meta=chart.getDatasetMeta(datasetIndex);if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)&&meta.stack!==undefined){hasStacks=true;}});}
+if(opts.stacked||hasStacks){var valuesPerStack={};helpers.each(datasets,function(dataset,datasetIndex){var meta=chart.getDatasetMeta(datasetIndex);var key=[meta.type,((opts.stacked===undefined&&meta.stack===undefined)?datasetIndex:''),meta.stack].join('.');if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)){if(valuesPerStack[key]===undefined){valuesPerStack[key]=[];}
+helpers.each(dataset.data,function(rawValue,index){var values=valuesPerStack[key];var value=+me.getRightValue(rawValue);if(isNaN(value)||meta.data[index].hidden){return;}
+values[index]=values[index]||0;if(opts.relativePoints){values[index]=100;}else{values[index]+=value;}});}});helpers.each(valuesPerStack,function(valuesForType){var minVal=helpers.min(valuesForType);var maxVal=helpers.max(valuesForType);me.min=me.min===null?minVal:Math.min(me.min,minVal);me.max=me.max===null?maxVal:Math.max(me.max,maxVal);});}else{helpers.each(datasets,function(dataset,datasetIndex){var meta=chart.getDatasetMeta(datasetIndex);if(chart.isDatasetVisible(datasetIndex)&&IDMatches(meta)){helpers.each(dataset.data,function(rawValue,index){var value=+me.getRightValue(rawValue);if(isNaN(value)||meta.data[index].hidden){return;}
+if(me.min===null){me.min=value;}else if(valueme.max){me.max=value;}
+if(value!==0&&(me.minNotZero===null||valuemax){return{start:pos-size-5,end:pos};}
+return{start:pos,end:pos+size+5};}
+function fitWithPointLabels(scale){var plFont=getPointLabelFontOptions(scale);var largestPossibleRadius=Math.min(scale.height/2,scale.width/2);var furthestLimits={r:scale.width,l:0,t:scale.height,b:0};var furthestAngles={};var i;var textSize;var pointPosition;scale.ctx.font=plFont.font;scale._pointLabelSizes=[];var valueCount=getValueCount(scale);for(i=0;ifurthestLimits.r){furthestLimits.r=hLimits.end;furthestAngles.r=angleRadians;}
+if(vLimits.startfurthestLimits.b){furthestLimits.b=vLimits.end;furthestAngles.b=angleRadians;}}
+scale.setReductions(largestPossibleRadius,furthestLimits,furthestAngles);}
+function fit(scale){var largestPossibleRadius=Math.min(scale.height/2,scale.width/2);scale.drawingArea=Math.round(largestPossibleRadius);scale.setCenterPoint(0,0,0,0);}
+function getTextAlignForAngle(angle){if(angle===0||angle===180){return'center';}else if(angle<180){return'left';}
+return'right';}
+function fillText(ctx,text,position,fontSize){if(helpers.isArray(text)){var y=position.y;var spacing=1.5*fontSize;for(var i=0;i270||angle<90){position.y-=textSize.h;}}
+function drawPointLabels(scale){var ctx=scale.ctx;var getValueOrDefault=helpers.getValueOrDefault;var opts=scale.options;var angleLineOpts=opts.angleLines;var pointLabelOpts=opts.pointLabels;ctx.lineWidth=angleLineOpts.lineWidth;ctx.strokeStyle=angleLineOpts.color;var outerDistance=scale.getDistanceFromCenterForValue(opts.reverse?scale.min:scale.max);var plFont=getPointLabelFontOptions(scale);ctx.textBaseline='top';for(var i=getValueCount(scale)-1;i>=0;i--){if(angleLineOpts.display){var outerPosition=scale.getPointPosition(i,outerDistance);ctx.beginPath();ctx.moveTo(scale.xCenter,scale.yCenter);ctx.lineTo(outerPosition.x,outerPosition.y);ctx.stroke();ctx.closePath();}
+if(pointLabelOpts.display){var pointLabelPosition=scale.getPointPosition(i,outerDistance+5);var pointLabelFontColor=getValueOrDefault(pointLabelOpts.fontColor,globalDefaults.defaultFontColor);ctx.font=plFont.font;ctx.fillStyle=pointLabelFontColor;var angleRadians=scale.getIndexAngle(i);var angle=helpers.toDegrees(angleRadians);ctx.textAlign=getTextAlignForAngle(angle);adjustPointPositionForLabelHeight(angle,scale._pointLabelSizes[i],pointLabelPosition);fillText(ctx,scale.pointLabels[i]||'',pointLabelPosition,plFont.size);}}}
+function drawRadiusLine(scale,gridLineOpts,radius,index){var ctx=scale.ctx;ctx.strokeStyle=helpers.getValueAtIndexOrDefault(gridLineOpts.color,index-1);ctx.lineWidth=helpers.getValueAtIndexOrDefault(gridLineOpts.lineWidth,index-1);if(scale.options.gridLines.circular){ctx.beginPath();ctx.arc(scale.xCenter,scale.yCenter,radius,0,Math.PI*2);ctx.closePath();ctx.stroke();}else{var valueCount=getValueCount(scale);if(valueCount===0){return;}
+ctx.beginPath();var pointPosition=scale.getPointPosition(0,radius);ctx.moveTo(pointPosition.x,pointPosition.y);for(var i=1;i0&&max>0?min:0);},draw:function(){var me=this;var opts=me.options;var gridLineOpts=opts.gridLines;var tickOpts=opts.ticks;var getValueOrDefault=helpers.getValueOrDefault;if(opts.display){var ctx=me.ctx;var tickFontSize=getValueOrDefault(tickOpts.fontSize,globalDefaults.defaultFontSize);var tickFontStyle=getValueOrDefault(tickOpts.fontStyle,globalDefaults.defaultFontStyle);var tickFontFamily=getValueOrDefault(tickOpts.fontFamily,globalDefaults.defaultFontFamily);var tickLabelFont=helpers.fontString(tickFontSize,tickFontStyle,tickFontFamily);helpers.each(me.ticks,function(label,index){if(index>0||opts.reverse){var yCenterOffset=me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);var yHeight=me.yCenter-yCenterOffset;if(gridLineOpts.display&&index!==0){drawRadiusLine(me,gridLineOpts,yCenterOffset,index);}
+if(tickOpts.display){var tickFontColor=getValueOrDefault(tickOpts.fontColor,globalDefaults.defaultFontColor);ctx.font=tickLabelFont;if(tickOpts.showLabelBackdrop){var labelWidth=ctx.measureText(label).width;ctx.fillStyle=tickOpts.backdropColor;ctx.fillRect(me.xCenter-labelWidth/2-tickOpts.backdropPaddingX,yHeight-tickFontSize/2-tickOpts.backdropPaddingY,labelWidth+tickOpts.backdropPaddingX*2,tickFontSize+tickOpts.backdropPaddingY*2);}
+ctx.textAlign='center';ctx.textBaseline='middle';ctx.fillStyle=tickFontColor;ctx.fillText(label,me.xCenter,yHeight);}}});if(opts.angleLines.display||opts.pointLabels.display){drawPointLabels(me);}}}});Chart.scaleService.registerScaleType('radialLinear',LinearRadialScale,defaultConfig);};},{}],49:[function(require,module,exports){'use strict';var moment=require(6);moment=typeof(moment)==='function'?moment:window.moment;module.exports=function(Chart){var helpers=Chart.helpers;var interval={millisecond:{size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{size:1000,steps:[1,2,5,10,30]},minute:{size:60000,steps:[1,2,5,10,30]},hour:{size:3600000,steps:[1,2,3,6,12]},day:{size:86400000,steps:[1,2,5]},week:{size:604800000,maxStep:4},month:{size:2.628e9,maxStep:3},quarter:{size:7.884e9,maxStep:4},year:{size:3.154e10,maxStep:false}};var defaultConfig={position:'bottom',time:{parser:false,format:false,unit:false,round:false,displayFormat:false,isoWeekday:false,minUnit:'millisecond',displayFormats:{millisecond:'h:mm:ss.SSS a',second:'h:mm:ss a',minute:'h:mm:ss a',hour:'MMM D, hA',day:'ll',week:'ll',month:'MMM YYYY',quarter:'[Q]Q - YYYY',year:'YYYY'},},ticks:{autoSkip:false}};function parseTime(axis,label){var timeOpts=axis.options.time;if(typeof timeOpts.parser==='string'){return moment(label,timeOpts.parser);}
+if(typeof timeOpts.parser==='function'){return timeOpts.parser(label);}
+if(typeof label.getMonth==='function'||typeof label==='number'){return moment(label);}
+if(label.isValid&&label.isValid()){return label;}
+var format=timeOpts.format;if(typeof format!=='string'&&format.call){console.warn('options.time.format is deprecated and replaced by options.time.parser.');return format(label);}
+return moment(label,format);}
+function determineUnit(minUnit,min,max,maxTicks){var units=Object.keys(interval);var unit;var numUnits=units.length;for(var i=units.indexOf(minUnit);imaxTicks;i++){multiplier=unitDefinition.steps[i];sizeInUnits=Math.ceil(range/(unitSizeInMilliSeconds*multiplier));}}else{while(sizeInUnits>maxTicks&&maxTicks>0){++multiplier;sizeInUnits=Math.ceil(range/(unitSizeInMilliSeconds*multiplier));}}
+return multiplier;}
+function generateTicks(options,dataRange,niceRange){var ticks=[];if(options.maxTicks){var stepSize=options.stepSize;ticks.push(options.min!==undefined?options.min:niceRange.min);var cur=moment(niceRange.min);while(cur.add(stepSize,options.unit).valueOf()0){niceMax.add(1,'week');}
+niceMax=niceMax.valueOf();}else{niceMin=moment(dataRange.min).startOf(options.unit).valueOf();niceMax=moment(dataRange.max).startOf(options.unit);if(dataRange.max-niceMax>0){niceMax.add(1,options.unit);}
+niceMax=niceMax.valueOf();}
+return generateTicks(options,dataRange,{min:niceMin,max:niceMax});};var TimeScale=Chart.Scale.extend({initialize:function(){if(!moment){throw new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');}
+Chart.Scale.prototype.initialize.call(this);},determineDataLimits:function(){var me=this;var timeOpts=me.options.time;var dataMin=Number.MAX_SAFE_INTEGER;var dataMax=Number.MIN_SAFE_INTEGER;var chartData=me.chart.data;var parsedData={labels:[],datasets:[]};var timestamp;helpers.each(chartData.labels,function(label,labelIndex){var labelMoment=parseTime(me,label);if(labelMoment.isValid()){if(timeOpts.round){labelMoment.startOf(timeOpts.round);}
+timestamp=labelMoment.valueOf();dataMin=Math.min(timestamp,dataMin);dataMax=Math.max(timestamp,dataMax);parsedData.labels[labelIndex]=timestamp;}});helpers.each(chartData.datasets,function(dataset,datasetIndex){var timestamps=[];if(typeof dataset.data[0]==='object'&&dataset.data[0]!==null&&me.chart.isDatasetVisible(datasetIndex)){helpers.each(dataset.data,function(value,dataIndex){var dataMoment=parseTime(me,me.getRightValue(value));if(dataMoment.isValid()){if(timeOpts.round){dataMoment.startOf(timeOpts.round);}
+timestamp=dataMoment.valueOf();dataMin=Math.min(timestamp,dataMin);dataMax=Math.max(timestamp,dataMax);timestamps[dataIndex]=timestamp;}});}else{timestamps=parsedData.labels.slice();}
+parsedData.datasets[datasetIndex]=timestamps;});me.dataMin=dataMin;me.dataMax=dataMax;me._parsedData=parsedData;},buildTicks:function(){var me=this;var timeOpts=me.options.time;var minTimestamp;var maxTimestamp;var dataMin=me.dataMin;var dataMax=me.dataMax;if(timeOpts.min){var minMoment=parseTime(me,timeOpts.min);if(timeOpts.round){minMoment.round(timeOpts.round);}
+minTimestamp=minMoment.valueOf();}
+if(timeOpts.max){maxTimestamp=parseTime(me,timeOpts.max).valueOf();}
+var maxTicks=me.getLabelCapacity(minTimestamp||dataMin);var unit=timeOpts.unit||determineUnit(timeOpts.minUnit,minTimestamp||dataMin,maxTimestamp||dataMax,maxTicks);me.displayFormat=timeOpts.displayFormats[unit];var stepSize=timeOpts.stepSize||determineStepSize(minTimestamp||dataMin,maxTimestamp||dataMax,unit,maxTicks);me.ticks=Chart.Ticks.generators.time({maxTicks:maxTicks,min:minTimestamp,max:maxTimestamp,stepSize:stepSize,unit:unit,isoWeekday:timeOpts.isoWeekday},{min:dataMin,max:dataMax});me.max=helpers.max(me.ticks);me.min=helpers.min(me.ticks);},getLabelForIndex:function(index,datasetIndex){var me=this;var label=me.chart.data.labels&&index=1;d--){var i=parseInt(n/t*d);if(o&&(i=parseFloat(n/t*d).toFixed(c)),r)for(;/(\d+)(\d{3})/.test(i.toString());)i=i.toString().replace(/(\d+)(\d{3})/,"$1,$2");a.unshift(i)}e.data("counterup-nums",a),e.text("0");var s=function(){e.text(e.data("counterup-nums").shift()),e.data("counterup-nums").length?setTimeout(e.data("counterup-func"),u.delay):(delete e.data("counterup-nums"),e.data("counterup-nums",null),e.data("counterup-func",null))};e.data("counterup-func",s),setTimeout(e.data("counterup-func"),u.delay)};e.waypoint(a,{offset:"100%",triggerOnce:!0})})}}(jQuery);
\ No newline at end of file
diff --git a/admin/assets/counterup/jquery.waypoints.min.js b/admin/assets/counterup/jquery.waypoints.min.js
new file mode 100644
index 0000000..d70b245
--- /dev/null
+++ b/admin/assets/counterup/jquery.waypoints.min.js
@@ -0,0 +1,662 @@
+/*!
+Waypoints - 4.0.1
+Copyright © 2011-2016 Caleb Troughton
+Licensed under the MIT license.
+https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
+*/
+(function() {
+ 'use strict'
+
+ var keyCounter = 0
+ var allWaypoints = {}
+
+ /* http://imakewebthings.com/waypoints/api/waypoint */
+ function Waypoint(options) {
+ if (!options) {
+ throw new Error('No options passed to Waypoint constructor')
+ }
+ if (!options.element) {
+ throw new Error('No element option passed to Waypoint constructor')
+ }
+ if (!options.handler) {
+ throw new Error('No handler option passed to Waypoint constructor')
+ }
+
+ this.key = 'waypoint-' + keyCounter
+ this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)
+ this.element = this.options.element
+ this.adapter = new Waypoint.Adapter(this.element)
+ this.callback = options.handler
+ this.axis = this.options.horizontal ? 'horizontal' : 'vertical'
+ this.enabled = this.options.enabled
+ this.triggerPoint = null
+ this.group = Waypoint.Group.findOrCreate({
+ name: this.options.group,
+ axis: this.axis
+ })
+ this.context = Waypoint.Context.findOrCreateByElement(this.options.context)
+
+ if (Waypoint.offsetAliases[this.options.offset]) {
+ this.options.offset = Waypoint.offsetAliases[this.options.offset]
+ }
+ this.group.add(this)
+ this.context.add(this)
+ allWaypoints[this.key] = this
+ keyCounter += 1
+ }
+
+ /* Private */
+ Waypoint.prototype.queueTrigger = function(direction) {
+ this.group.queueTrigger(this, direction)
+ }
+
+ /* Private */
+ Waypoint.prototype.trigger = function(args) {
+ if (!this.enabled) {
+ return
+ }
+ if (this.callback) {
+ this.callback.apply(this, args)
+ }
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/destroy */
+ Waypoint.prototype.destroy = function() {
+ this.context.remove(this)
+ this.group.remove(this)
+ delete allWaypoints[this.key]
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/disable */
+ Waypoint.prototype.disable = function() {
+ this.enabled = false
+ return this
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/enable */
+ Waypoint.prototype.enable = function() {
+ this.context.refresh()
+ this.enabled = true
+ return this
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/next */
+ Waypoint.prototype.next = function() {
+ return this.group.next(this)
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/previous */
+ Waypoint.prototype.previous = function() {
+ return this.group.previous(this)
+ }
+
+ /* Private */
+ Waypoint.invokeAll = function(method) {
+ var allWaypointsArray = []
+ for (var waypointKey in allWaypoints) {
+ allWaypointsArray.push(allWaypoints[waypointKey])
+ }
+ for (var i = 0, end = allWaypointsArray.length; i < end; i++) {
+ allWaypointsArray[i][method]()
+ }
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/destroy-all */
+ Waypoint.destroyAll = function() {
+ Waypoint.invokeAll('destroy')
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/disable-all */
+ Waypoint.disableAll = function() {
+ Waypoint.invokeAll('disable')
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/enable-all */
+ Waypoint.enableAll = function() {
+ Waypoint.Context.refreshAll()
+ for (var waypointKey in allWaypoints) {
+ allWaypoints[waypointKey].enabled = true
+ }
+ return this
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/refresh-all */
+ Waypoint.refreshAll = function() {
+ Waypoint.Context.refreshAll()
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/viewport-height */
+ Waypoint.viewportHeight = function() {
+ return window.innerHeight || document.documentElement.clientHeight
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/viewport-width */
+ Waypoint.viewportWidth = function() {
+ return document.documentElement.clientWidth
+ }
+
+ Waypoint.adapters = []
+
+ Waypoint.defaults = {
+ context: window,
+ continuous: true,
+ enabled: true,
+ group: 'default',
+ horizontal: false,
+ offset: 0
+ }
+
+ Waypoint.offsetAliases = {
+ 'bottom-in-view': function() {
+ return this.context.innerHeight() - this.adapter.outerHeight()
+ },
+ 'right-in-view': function() {
+ return this.context.innerWidth() - this.adapter.outerWidth()
+ }
+ }
+
+ window.Waypoint = Waypoint
+}())
+;(function() {
+ 'use strict'
+
+ function requestAnimationFrameShim(callback) {
+ window.setTimeout(callback, 1000 / 60)
+ }
+
+ var keyCounter = 0
+ var contexts = {}
+ var Waypoint = window.Waypoint
+ var oldWindowLoad = window.onload
+
+ /* http://imakewebthings.com/waypoints/api/context */
+ function Context(element) {
+ this.element = element
+ this.Adapter = Waypoint.Adapter
+ this.adapter = new this.Adapter(element)
+ this.key = 'waypoint-context-' + keyCounter
+ this.didScroll = false
+ this.didResize = false
+ this.oldScroll = {
+ x: this.adapter.scrollLeft(),
+ y: this.adapter.scrollTop()
+ }
+ this.waypoints = {
+ vertical: {},
+ horizontal: {}
+ }
+
+ element.waypointContextKey = this.key
+ contexts[element.waypointContextKey] = this
+ keyCounter += 1
+ if (!Waypoint.windowContext) {
+ Waypoint.windowContext = true
+ Waypoint.windowContext = new Context(window)
+ }
+
+ this.createThrottledScrollHandler()
+ this.createThrottledResizeHandler()
+ }
+
+ /* Private */
+ Context.prototype.add = function(waypoint) {
+ var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'
+ this.waypoints[axis][waypoint.key] = waypoint
+ this.refresh()
+ }
+
+ /* Private */
+ Context.prototype.checkEmpty = function() {
+ var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)
+ var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)
+ var isWindow = this.element == this.element.window
+ if (horizontalEmpty && verticalEmpty && !isWindow) {
+ this.adapter.off('.waypoints')
+ delete contexts[this.key]
+ }
+ }
+
+ /* Private */
+ Context.prototype.createThrottledResizeHandler = function() {
+ var self = this
+
+ function resizeHandler() {
+ self.handleResize()
+ self.didResize = false
+ }
+
+ this.adapter.on('resize.waypoints', function() {
+ if (!self.didResize) {
+ self.didResize = true
+ Waypoint.requestAnimationFrame(resizeHandler)
+ }
+ })
+ }
+
+ /* Private */
+ Context.prototype.createThrottledScrollHandler = function() {
+ var self = this
+ function scrollHandler() {
+ self.handleScroll()
+ self.didScroll = false
+ }
+
+ this.adapter.on('scroll.waypoints', function() {
+ if (!self.didScroll || Waypoint.isTouch) {
+ self.didScroll = true
+ Waypoint.requestAnimationFrame(scrollHandler)
+ }
+ })
+ }
+
+ /* Private */
+ Context.prototype.handleResize = function() {
+ Waypoint.Context.refreshAll()
+ }
+
+ /* Private */
+ Context.prototype.handleScroll = function() {
+ var triggeredGroups = {}
+ var axes = {
+ horizontal: {
+ newScroll: this.adapter.scrollLeft(),
+ oldScroll: this.oldScroll.x,
+ forward: 'right',
+ backward: 'left'
+ },
+ vertical: {
+ newScroll: this.adapter.scrollTop(),
+ oldScroll: this.oldScroll.y,
+ forward: 'down',
+ backward: 'up'
+ }
+ }
+
+ for (var axisKey in axes) {
+ var axis = axes[axisKey]
+ var isForward = axis.newScroll > axis.oldScroll
+ var direction = isForward ? axis.forward : axis.backward
+
+ for (var waypointKey in this.waypoints[axisKey]) {
+ var waypoint = this.waypoints[axisKey][waypointKey]
+ if (waypoint.triggerPoint === null) {
+ continue
+ }
+ var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint
+ var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint
+ var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint
+ var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint
+ if (crossedForward || crossedBackward) {
+ waypoint.queueTrigger(direction)
+ triggeredGroups[waypoint.group.id] = waypoint.group
+ }
+ }
+ }
+
+ for (var groupKey in triggeredGroups) {
+ triggeredGroups[groupKey].flushTriggers()
+ }
+
+ this.oldScroll = {
+ x: axes.horizontal.newScroll,
+ y: axes.vertical.newScroll
+ }
+ }
+
+ /* Private */
+ Context.prototype.innerHeight = function() {
+ /*eslint-disable eqeqeq */
+ if (this.element == this.element.window) {
+ return Waypoint.viewportHeight()
+ }
+ /*eslint-enable eqeqeq */
+ return this.adapter.innerHeight()
+ }
+
+ /* Private */
+ Context.prototype.remove = function(waypoint) {
+ delete this.waypoints[waypoint.axis][waypoint.key]
+ this.checkEmpty()
+ }
+
+ /* Private */
+ Context.prototype.innerWidth = function() {
+ /*eslint-disable eqeqeq */
+ if (this.element == this.element.window) {
+ return Waypoint.viewportWidth()
+ }
+ /*eslint-enable eqeqeq */
+ return this.adapter.innerWidth()
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/context-destroy */
+ Context.prototype.destroy = function() {
+ var allWaypoints = []
+ for (var axis in this.waypoints) {
+ for (var waypointKey in this.waypoints[axis]) {
+ allWaypoints.push(this.waypoints[axis][waypointKey])
+ }
+ }
+ for (var i = 0, end = allWaypoints.length; i < end; i++) {
+ allWaypoints[i].destroy()
+ }
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/context-refresh */
+ Context.prototype.refresh = function() {
+ /*eslint-disable eqeqeq */
+ var isWindow = this.element == this.element.window
+ /*eslint-enable eqeqeq */
+ var contextOffset = isWindow ? undefined : this.adapter.offset()
+ var triggeredGroups = {}
+ var axes
+
+ this.handleScroll()
+ axes = {
+ horizontal: {
+ contextOffset: isWindow ? 0 : contextOffset.left,
+ contextScroll: isWindow ? 0 : this.oldScroll.x,
+ contextDimension: this.innerWidth(),
+ oldScroll: this.oldScroll.x,
+ forward: 'right',
+ backward: 'left',
+ offsetProp: 'left'
+ },
+ vertical: {
+ contextOffset: isWindow ? 0 : contextOffset.top,
+ contextScroll: isWindow ? 0 : this.oldScroll.y,
+ contextDimension: this.innerHeight(),
+ oldScroll: this.oldScroll.y,
+ forward: 'down',
+ backward: 'up',
+ offsetProp: 'top'
+ }
+ }
+
+ for (var axisKey in axes) {
+ var axis = axes[axisKey]
+ for (var waypointKey in this.waypoints[axisKey]) {
+ var waypoint = this.waypoints[axisKey][waypointKey]
+ var adjustment = waypoint.options.offset
+ var oldTriggerPoint = waypoint.triggerPoint
+ var elementOffset = 0
+ var freshWaypoint = oldTriggerPoint == null
+ var contextModifier, wasBeforeScroll, nowAfterScroll
+ var triggeredBackward, triggeredForward
+
+ if (waypoint.element !== waypoint.element.window) {
+ elementOffset = waypoint.adapter.offset()[axis.offsetProp]
+ }
+
+ if (typeof adjustment === 'function') {
+ adjustment = adjustment.apply(waypoint)
+ }
+ else if (typeof adjustment === 'string') {
+ adjustment = parseFloat(adjustment)
+ if (waypoint.options.offset.indexOf('%') > - 1) {
+ adjustment = Math.ceil(axis.contextDimension * adjustment / 100)
+ }
+ }
+
+ contextModifier = axis.contextScroll - axis.contextOffset
+ waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)
+ wasBeforeScroll = oldTriggerPoint < axis.oldScroll
+ nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll
+ triggeredBackward = wasBeforeScroll && nowAfterScroll
+ triggeredForward = !wasBeforeScroll && !nowAfterScroll
+
+ if (!freshWaypoint && triggeredBackward) {
+ waypoint.queueTrigger(axis.backward)
+ triggeredGroups[waypoint.group.id] = waypoint.group
+ }
+ else if (!freshWaypoint && triggeredForward) {
+ waypoint.queueTrigger(axis.forward)
+ triggeredGroups[waypoint.group.id] = waypoint.group
+ }
+ else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {
+ waypoint.queueTrigger(axis.forward)
+ triggeredGroups[waypoint.group.id] = waypoint.group
+ }
+ }
+ }
+
+ Waypoint.requestAnimationFrame(function() {
+ for (var groupKey in triggeredGroups) {
+ triggeredGroups[groupKey].flushTriggers()
+ }
+ })
+
+ return this
+ }
+
+ /* Private */
+ Context.findOrCreateByElement = function(element) {
+ return Context.findByElement(element) || new Context(element)
+ }
+
+ /* Private */
+ Context.refreshAll = function() {
+ for (var contextId in contexts) {
+ contexts[contextId].refresh()
+ }
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/context-find-by-element */
+ Context.findByElement = function(element) {
+ return contexts[element.waypointContextKey]
+ }
+
+ window.onload = function() {
+ if (oldWindowLoad) {
+ oldWindowLoad()
+ }
+ Context.refreshAll()
+ }
+
+
+ Waypoint.requestAnimationFrame = function(callback) {
+ var requestFn = window.requestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ requestAnimationFrameShim
+ requestFn.call(window, callback)
+ }
+ Waypoint.Context = Context
+}())
+;(function() {
+ 'use strict'
+
+ function byTriggerPoint(a, b) {
+ return a.triggerPoint - b.triggerPoint
+ }
+
+ function byReverseTriggerPoint(a, b) {
+ return b.triggerPoint - a.triggerPoint
+ }
+
+ var groups = {
+ vertical: {},
+ horizontal: {}
+ }
+ var Waypoint = window.Waypoint
+
+ /* http://imakewebthings.com/waypoints/api/group */
+ function Group(options) {
+ this.name = options.name
+ this.axis = options.axis
+ this.id = this.name + '-' + this.axis
+ this.waypoints = []
+ this.clearTriggerQueues()
+ groups[this.axis][this.name] = this
+ }
+
+ /* Private */
+ Group.prototype.add = function(waypoint) {
+ this.waypoints.push(waypoint)
+ }
+
+ /* Private */
+ Group.prototype.clearTriggerQueues = function() {
+ this.triggerQueues = {
+ up: [],
+ down: [],
+ left: [],
+ right: []
+ }
+ }
+
+ /* Private */
+ Group.prototype.flushTriggers = function() {
+ for (var direction in this.triggerQueues) {
+ var waypoints = this.triggerQueues[direction]
+ var reverse = direction === 'up' || direction === 'left'
+ waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)
+ for (var i = 0, end = waypoints.length; i < end; i += 1) {
+ var waypoint = waypoints[i]
+ if (waypoint.options.continuous || i === waypoints.length - 1) {
+ waypoint.trigger([direction])
+ }
+ }
+ }
+ this.clearTriggerQueues()
+ }
+
+ /* Private */
+ Group.prototype.next = function(waypoint) {
+ this.waypoints.sort(byTriggerPoint)
+ var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
+ var isLast = index === this.waypoints.length - 1
+ return isLast ? null : this.waypoints[index + 1]
+ }
+
+ /* Private */
+ Group.prototype.previous = function(waypoint) {
+ this.waypoints.sort(byTriggerPoint)
+ var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
+ return index ? this.waypoints[index - 1] : null
+ }
+
+ /* Private */
+ Group.prototype.queueTrigger = function(waypoint, direction) {
+ this.triggerQueues[direction].push(waypoint)
+ }
+
+ /* Private */
+ Group.prototype.remove = function(waypoint) {
+ var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
+ if (index > -1) {
+ this.waypoints.splice(index, 1)
+ }
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/first */
+ Group.prototype.first = function() {
+ return this.waypoints[0]
+ }
+
+ /* Public */
+ /* http://imakewebthings.com/waypoints/api/last */
+ Group.prototype.last = function() {
+ return this.waypoints[this.waypoints.length - 1]
+ }
+
+ /* Private */
+ Group.findOrCreate = function(options) {
+ return groups[options.axis][options.name] || new Group(options)
+ }
+
+ Waypoint.Group = Group
+}())
+;(function() {
+ 'use strict'
+
+ var $ = window.jQuery
+ var Waypoint = window.Waypoint
+
+ function JQueryAdapter(element) {
+ this.$element = $(element)
+ }
+
+ $.each([
+ 'innerHeight',
+ 'innerWidth',
+ 'off',
+ 'offset',
+ 'on',
+ 'outerHeight',
+ 'outerWidth',
+ 'scrollLeft',
+ 'scrollTop'
+ ], function(i, method) {
+ JQueryAdapter.prototype[method] = function() {
+ var args = Array.prototype.slice.call(arguments)
+ return this.$element[method].apply(this.$element, args)
+ }
+ })
+
+ $.each([
+ 'extend',
+ 'inArray',
+ 'isEmptyObject'
+ ], function(i, method) {
+ JQueryAdapter[method] = $[method]
+ })
+
+ Waypoint.adapters.push({
+ name: 'jquery',
+ Adapter: JQueryAdapter
+ })
+ Waypoint.Adapter = JQueryAdapter
+}())
+;(function() {
+ 'use strict'
+
+ var Waypoint = window.Waypoint
+
+ function createExtension(framework) {
+ return function() {
+ var waypoints = []
+ var overrides = arguments[0]
+
+ if (framework.isFunction(arguments[0])) {
+ overrides = framework.extend({}, arguments[1])
+ overrides.handler = arguments[0]
+ }
+
+ this.each(function() {
+ var options = framework.extend({}, overrides, {
+ element: this
+ })
+ if (typeof options.context === 'string') {
+ options.context = framework(this).closest(options.context)[0]
+ }
+ waypoints.push(new Waypoint(options))
+ })
+
+ return waypoints
+ }
+ }
+
+ if (window.jQuery) {
+ window.jQuery.fn.waypoint = createExtension(window.jQuery)
+ }
+ if (window.Zepto) {
+ window.Zepto.fn.waypoint = createExtension(window.Zepto)
+ }
+}())
+;
\ No newline at end of file
diff --git a/admin/assets/datatables/export/buttons.dataTables.min.css b/admin/assets/datatables/export/buttons.dataTables.min.css
new file mode 100644
index 0000000..d827587
--- /dev/null
+++ b/admin/assets/datatables/export/buttons.dataTables.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}button.dt-button,div.dt-button,a.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-right:0.333em;margin-bottom:0.333em;padding:0.5em 1em;border:1px solid #999;border-radius:2px;cursor:pointer;font-size:0.88em;line-height:1.6em;color:black;white-space:nowrap;overflow:hidden;background-color:#e9e9e9;background-image:-webkit-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-o-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled{color:#999;border:1px solid #d0d0d0;cursor:default;background-color:#f9f9f9;background-image:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9')}button.dt-button:active:not(.disabled),button.dt-button.active:not(.disabled),div.dt-button:active:not(.disabled),div.dt-button.active:not(.disabled),a.dt-button:active:not(.disabled),a.dt-button.active:not(.disabled){background-color:#e2e2e2;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');box-shadow:inset 1px 1px 3px #999999}button.dt-button:active:not(.disabled):hover:not(.disabled),button.dt-button.active:not(.disabled):hover:not(.disabled),div.dt-button:active:not(.disabled):hover:not(.disabled),div.dt-button.active:not(.disabled):hover:not(.disabled),a.dt-button:active:not(.disabled):hover:not(.disabled),a.dt-button.active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999999;background-color:#cccccc;background-image:-webkit-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-moz-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-ms-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-o-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:linear-gradient(to bottom, #eaeaea 0%, #ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc')}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled){border:1px solid #666;background-color:#e0e0e0;background-image:-webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0')}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#79ace9;background-image:-webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-o-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9')}.dt-button embed{outline:none}div.dt-buttons{position:relative;float:left}div.dt-buttons.buttons-right{float:right}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin-bottom:4px;margin-right:0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background-image:-webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');box-shadow:inset 1px 1px 3px #666}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-150px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0,0,0,0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}
\ No newline at end of file
diff --git a/admin/assets/datatables/export/buttons.flash.min.js b/admin/assets/datatables/export/buttons.flash.min.js
new file mode 100644
index 0000000..d3c8c0e
--- /dev/null
+++ b/admin/assets/datatables/export/buttons.flash.min.js
@@ -0,0 +1,32 @@
+(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(k){return g(k,window,document)}):"object"===typeof exports?module.exports=function(k,l){k||(k=window);if(!l||!l.fn.dataTable)l=require("datatables.net")(k,l).$;l.fn.dataTable.Buttons||require("datatables.net-buttons")(k,l);return g(l,k,k.document)}:g(jQuery,window,document)})(function(g,k,l,q){function w(a){for(var b="";0<=a;)b=String.fromCharCode(a%26+65)+b,a=Math.floor(a/26)-
+1;return b}function o(a,b,d){var c=a.createElement(b);d&&(d.attr&&g(c).attr(d.attr),d.children&&g.each(d.children,function(a,b){c.appendChild(b)}),null!==d.text&&d.text!==q&&c.appendChild(a.createTextNode(d.text)));return c}function C(a,b){var d=a.header[b].length,c;a.footer&&a.footer[b].length>d&&(d=a.footer[b].length);for(var e=0,f=a.body.length;ed&&(d=c),40'+c),c=c.replace(/_dt_b_namespace_token_/g,":"));c=c.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a[b]=c}})}var j=g.fn.dataTable,h={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=l.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=function(){this.style.display=
+""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+a+"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,d){(a=this.clients[a])&&a.receiveEvent(b,d)},log:function(a){console.log("Flash: "+a)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b=
+{left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!==a.style.width&&(b.width=a.style.width.replace("px",""));""!==a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b},Client:function(a){this.handlers={};this.id=h.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;h.register(this.id,this);a&&this.glue(a)}};h.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",
+action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,sheetName:"",glue:function(a,b){this.domElement=h.$(a);var d=99;this.domElement.style.zIndex&&(d=parseInt(this.domElement.style.zIndex,10)+1);var c=h.getDOMObjectPosition(this.domElement);this.div=l.createElement("div");var e=this.div.style;e.position="absolute";e.left="0px";e.top="0px";e.width=c.width+"px";e.height=c.height+"px";e.zIndex=d;"undefined"!=typeof b&&""!==b&&(this.div.title=b);0!==c.width&&0!==c.height&&(this.sized=
+!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(c.width,c.height).replace(/&/g,"&"))},positionElement:function(){var a=h.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!==a.width&&0!==a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height)},getHTML:function(a,b){var d="",c="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var e=
+location.href.match(/^https/i)?"https://":"http://",d=d+('');else d+='';return d},hide:function(){this.div&&(this.div.style.left="-2000px")},
+show:function(){this.reposition()},destroy:function(){var a=this;this.domElement&&this.div&&(g(this.div).remove(),this.div=this.domElement=null,g.each(h.clients,function(b,d){d===a&&delete h.clients[b]}))},reposition:function(a){a&&((this.domElement=h.$(a))||this.hide());if(this.domElement&&this.div){var a=h.getDOMObjectPosition(this.domElement),b=this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=
+a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setSheetData:function(a){this.ready&&this.movie.setSheetData(JSON.stringify(a))},setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=
+a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){var d,a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=l.getElementById(this.movieId);if(!this.movie){d=this;setTimeout(function(){d.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){d=this;setTimeout(function(){d.receiveEvent("load",null)},100);this.ready=!0;return}this.ready=
+!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&&
+this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var c=0,e=this.handlers[a].length;c',"xl/_rels/workbook.xml.rels":'',
+"[Content_Types].xml":'',
+"xl/workbook.xml":'',
+"xl/worksheets/sheet1.xml":'',"xl/styles.xml":''},
+B=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^[\d,]+$/,style:63},{match:/^[\d,]+\.\d{2}$/,style:64}];j.Buttons.swfPath="//cdn.datatables.net/buttons/"+
+j.Buttons.version+"/swf/flashExport.swf";j.Api.register("buttons.resize()",function(){g.each(h.clients,function(a,b){b.domElement!==q&&b.domElement.parentNode&&b.positionElement()})});j.ext.buttons.copyFlash=g.extend({},u,{className:"buttons-copy buttons-flash",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,d,c){if(c._fromFlash){this.processing(!0);var a=c._flash,e=A(b,c),d=b.buttons.exportInfo(c),f=z(c),e=e.str;d.title&&(e=d.title+f+f+e);d.messageTop&&(e=d.messageTop+
+f+f+e);d.messageBottom&&(e=e+f+f+d.messageBottom);c.customize&&(e=c.customize(e,c,b));a.setAction("copy");t(a,e);this.processing(!1);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{_:"Copied %d rows to clipboard",1:"Copied 1 row to clipboard"},data.rows),3E3)}},fieldSeparator:"\t",fieldBoundary:""});j.ext.buttons.csvFlash=g.extend({},u,{className:"buttons-csv buttons-flash",text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,d,c){var a=
+c._flash,e=A(b,c),d=b.buttons.exportInfo(c),b=c.customize?c.customize(e.str,c,b):e.str;a.setAction("csv");a.setFileName(d.filename);t(a,b)},escapeChar:'"'});j.ext.buttons.excelFlash=g.extend({},u,{className:"buttons-excel buttons-flash",text:function(a){return a.i18n("buttons.excel","Excel")},action:function(a,b,d,c){this.processing(!0);var a=c._flash,e=0,f=g.parseXML(n["xl/worksheets/sheet1.xml"]),h=f.getElementsByTagName("sheetData")[0],d={_rels:{".rels":g.parseXML(n["_rels/.rels"])},xl:{_rels:{"workbook.xml.rels":g.parseXML(n["xl/_rels/workbook.xml.rels"])},
+"workbook.xml":g.parseXML(n["xl/workbook.xml"]),"styles.xml":g.parseXML(n["xl/styles.xml"]),worksheets:{"sheet1.xml":f}},"[Content_Types].xml":g.parseXML(n["[Content_Types].xml"])},i=b.buttons.exportData(c.exportOptions),k,l,j=function(a){k=e+1;l=o(f,"row",{attr:{r:k}});for(var b=0,d=a.length;b'+b),b=b.replace(/_dt_b_namespace_token_/g,":"));b=b.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a.file(d,b)}})}function q(a,b,d){var c=a.createElement(b);d&&(d.attr&&i(c).attr(d.attr),d.children&&i.each(d.children,function(a,b){c.appendChild(b)}),null!==d.text&&d.text!==s&&c.appendChild(a.createTextNode(d.text)));return c}function K(a,b){var d=
+a.header[b].length,c;a.footer&&a.footer[b].length>d&&(d=a.footer[b].length);for(var f=0,g=a.body.length;fd&&(d=c),401*a[1]?!0:!1};try{var y=new XMLSerializer,w}catch(P){}var B={"_rels/.rels":'',"xl/_rels/workbook.xml.rels":'',
+"[Content_Types].xml":'',
+"xl/workbook.xml":'',
+"xl/worksheets/sheet1.xml":'',"xl/styles.xml":''},
+J=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\-?\d+$/,style:65},{match:/^\-?\d+\.\d{2}$/,style:66},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\-?[\d,]+$/,style:63},
+{match:/^\-?[\d,]+\.\d{2}$/,style:64}];o.ext.buttons.copyHtml5={className:"buttons-copy buttons-html5",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,d,c){this.processing(!0);var f=this,a=H(b,c),g=b.buttons.exportInfo(c),e=G(c),n=a.str,d=i("").css({height:1,width:1,overflow:"hidden",position:"fixed",top:0,left:0});g.title&&(n=g.title+e+e+n);g.messageTop&&(n=g.messageTop+e+e+n);g.messageBottom&&(n=n+e+e+g.messageBottom);c.customize&&(n=c.customize(n,c,b));c=i("").val(n).appendTo(d);
+if(l.queryCommandSupported("copy")){d.appendTo(b.table().container());c[0].focus();c[0].select();try{var h=l.execCommand("copy");d.remove();if(h){b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{1:"Copied one row to clipboard",_:"Copied %d rows to clipboard"},a.rows),2E3);this.processing(!1);return}}catch(j){}}h=i(""+b.i18n("buttons.copyKeys","Press ctrl or ⌘ + C to copy the table data
to your system clipboard.
To cancel, click this message or press escape.")+
+"").append(d);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),h,0);c[0].focus();c[0].select();var m=i(h).closest(".dt-button-info"),k=function(){m.off("click.buttons-copy");i(l).off(".buttons-copy");b.buttons.info(!1)};m.on("click.buttons-copy",k);i(l).on("keydown.buttons-copy",function(a){27===a.keyCode&&(k(),f.processing(!1))}).on("copy.buttons-copy cut.buttons-copy",function(){k();f.processing(!1)})},exportOptions:{},fieldSeparator:"\t",fieldBoundary:"",header:!0,footer:!1,
+title:"*",messageTop:"*",messageBottom:"*"};o.ext.buttons.csvHtml5={bom:!1,className:"buttons-csv buttons-html5",available:function(){return j.FileReader!==s&&j.Blob},text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,d,c){this.processing(!0);var a=H(b,c).str,d=b.buttons.exportInfo(c),f=c.charset;c.customize&&(a=c.customize(a,c,b));!1!==f?(f||(f=l.characterSet||l.charset),f&&(f=";charset="+f)):f="";c.bom&&(a=""+a);t(new Blob([a],{type:"text/csv"+f}),d.filename,!0);this.processing(!1)},
+filename:"*",extension:".csv",exportOptions:{},fieldSeparator:",",fieldBoundary:'"',escapeChar:'"',charset:null,header:!0,footer:!1};o.ext.buttons.excelHtml5={className:"buttons-excel buttons-html5",available:function(){return j.FileReader!==s&&(v||j.JSZip)!==s&&!I()&&y},text:function(a){return a.i18n("buttons.excel","Excel")},action:function(a,b,d,c){this.processing(!0);var f=this,g=0,a=function(a){return i.parseXML(B[a])},e=a("xl/worksheets/sheet1.xml"),h=e.getElementsByTagName("sheetData")[0],
+a={_rels:{".rels":a("_rels/.rels")},xl:{_rels:{"workbook.xml.rels":a("xl/_rels/workbook.xml.rels")},"workbook.xml":a("xl/workbook.xml"),"styles.xml":a("xl/styles.xml"),worksheets:{"sheet1.xml":e}},"[Content_Types].xml":a("[Content_Types].xml")},d=b.buttons.exportData(c.exportOptions),l,m,r=function(a){l=g+1;m=q(e,"row",{attr:{r:l}});for(var b=0,d=a.length;b"+(null===b[c]||b[c]===n?
+"":b[c])+""+a+">";return d+""},d='';h.header&&(d+=""+k(a.header,"th")+"");for(var d=d+"",l=0,o=a.body.length;l";h.footer&&a.footer&&(d+=""+k(a.footer,"th")+"");var d=d+"
",g=f.open("","");g.document.close();var j=""+e.title+"";c("style, link").each(function(){var b=j,a=c(this).clone()[0];"link"===a.nodeName.toLowerCase()&&(a.href=m(a.href));j=b+a.outerHTML});
+try{g.document.head.innerHTML=j}catch(p){c(g.document.head).html(j)}g.document.body.innerHTML=""+e.title+"
"+(e.messageTop||"")+"
"+d+""+(e.messageBottom||"")+"
";c(g.document.body).addClass("dt-print-view");c("img",g.document.body).each(function(b,a){a.setAttribute("src",m(a.getAttribute("src")))});h.customize&&h.customize(g,h,b);g.setTimeout(function(){h.autoPrint&&(g.print(),g.close())},1E3)},title:"*",messageTop:"*",messageBottom:"*",exportOptions:{},header:!0,footer:!1,
+autoPrint:!0,customize:null};return i.Buttons});
\ No newline at end of file
diff --git a/admin/assets/datatables/export/dataTables.buttons.min.js b/admin/assets/datatables/export/dataTables.buttons.min.js
new file mode 100644
index 0000000..54c12f6
--- /dev/null
+++ b/admin/assets/datatables/export/dataTables.buttons.min.js
@@ -0,0 +1,40 @@
+/*!
+ Buttons for DataTables 1.5.2
+ ©2016-2018 SpryMedia Ltd - datatables.net/license
+*/
+(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(n){return d(n,window,document)}):"object"===typeof exports?module.exports=function(n,o){n||(n=window);if(!o||!o.fn.dataTable)o=require("datatables.net")(n,o).$;return d(o,n,n.document)}:d(jQuery,window,document)})(function(d,n,o,m){var i=d.fn.dataTable,x=0,y=0,k=i.ext.buttons,l=function(a,b){"undefined"===typeof b&&(b={});!0===b&&(b={});d.isArray(b)&&(b={buttons:b});this.c=d.extend(!0,{},l.defaults,b);
+b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new i.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+x++};this.dom={container:d("<"+this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)};this._constructor()};d.extend(l.prototype,{action:function(a,b){var c=this._nodeToButton(a);if(b===m)return c.conf.action;c.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a),e=this.c.dom.button.active,c=d(c.node);if(b===m)return c.hasClass(e);c.toggleClass(e,b===m?!0:
+b);return this},add:function(a,b){var c=this.s.buttons;if("string"===typeof b){for(var e=b.split("-"),c=this.s,d=0,h=e.length-1;d").addClass(u.className).attr("role","menu");p.conf._collection=p.collection;this._expandButton(p.buttons,p.conf.buttons,!0,e)}j.init&&j.init.call(g.button(p.node),g,d(p.node),j);h++}}}},_buildButton:function(a,
+b){var c=this.c.dom.button,e=this.c.dom.buttonLiner,g=this.c.dom.collection,h=this.s.dt,f=function(b){return"function"===typeof b?b(h,j,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(e=g.buttonLiner);if(a.available&&!a.available(h,a))return!1;var q=function(a,b,c,e){e.action.call(b.button(c),a,b,c,e);d(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,e])},g=a.tag||c.tag,j=d("<"+g+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",
+this.s.dt.table().node().id).on("click.dtb",function(b){b.preventDefault();!j.hasClass(c.disabled)&&a.action&&q(b,h,j,a);j.blur()}).on("keyup.dtb",function(b){b.keyCode===13&&!j.hasClass(c.disabled)&&a.action&&q(b,h,j,a)});"a"===g.toLowerCase()&&j.attr("href","#");"button"===g.toLowerCase()&&j.attr("type","button");e.tag?(g=d("<"+e.tag+"/>").html(f(a.text)).addClass(e.className),"a"===e.tag.toLowerCase()&&g.attr("href","#"),j.append(g)):j.html(f(a.text));!1===a.enabled&&j.addClass(c.disabled);a.className&&
+j.addClass(a.className);a.titleAttr&&j.attr("title",f(a.titleAttr));a.attr&&j.attr(a.attr);a.namespace||(a.namespace=".dt-button-"+y++);e=(e=this.c.dom.buttonContainer)&&e.tag?d("<"+e.tag+"/>").addClass(e.className).append(j):j;this._addKey(a);return{conf:a,node:j.get(0),inserter:e,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,b){b||(b=this.s.buttons);for(var c=0,e=b.length;c").addClass(b).css("display","none").appendTo("body").fadeIn(c):d("body > div."+b).fadeOut(c,function(){d(this).removeClass(b).remove()})};l.instanceSelector=function(a,b){if(!a)return d.map(b,function(a){return a.inst});var c=[],e=d.map(b,function(a){return a.name}),g=function(a){if(d.isArray(a))for(var f=
+0,q=a.length;fg||e.dropup)&&e._collection.css("top",a.top-e._collection.outerHeight()-5),f=a.left+e._collection.outerWidth(),h=h.offset().left+h.width(),f>h&&e._collection.css("left",
+a.left-(f-h)),c=c.offset().left+e._collection.outerWidth(),c>d(n).width()&&e._collection.css("left",a.left-(c-d(n).width()))):(c=e._collection.height()/2,c>d(n).height()/2&&(c=d(n).height()/2),e._collection.css("marginTop",-1*c));e.background&&l.background(!0,e.backgroundClassName,e.fade);var j=function(){e._collection.fadeOut(e.fade,function(){e._collection.detach()});d("div.dt-button-background").off("click.dtb-collection");l.background(false,e.backgroundClassName,e.fade);d("body").off(".dtb-collection");
+b.off("buttons-action.b-internal")};setTimeout(function(){d("div.dt-button-background").on("click.dtb-collection",function(){});d("body").on("click.dtb-collection",function(a){var b=d.fn.addBack?"addBack":"andSelf";d(a.target).parents()[b]().filter(e._collection).length||j()}).on("keyup.dtb-collection",function(a){a.keyCode===27&&j()});if(e.autoClose)b.on("buttons-action.b-internal",function(){j()})},10)},background:!0,collectionLayout:"",backgroundClassName:"dt-button-background",autoClose:!1,fade:400,
+attr:{"aria-haspopup":!0}},copy:function(a,b){if(k.copyHtml5)return"copyHtml5";if(k.copyFlash&&k.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(k.csvHtml5&&k.csvHtml5.available(a,b))return"csvHtml5";if(k.csvFlash&&k.csvFlash.available(a,b))return"csvFlash"},excel:function(a,b){if(k.excelHtml5&&k.excelHtml5.available(a,b))return"excelHtml5";if(k.excelFlash&&k.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(k.pdfHtml5&&k.pdfHtml5.available(a,b))return"pdfHtml5";
+if(k.pdfFlash&&k.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){var a=a.settings()[0].aLengthMenu,b=d.isArray(a[0])?a[0]:a,c=d.isArray(a[0])?a[1]:a,e=function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},a.page.len())};return{extend:"collection",text:e,className:"buttons-page-length",autoClose:!0,buttons:d.map(b,function(a,b){return{text:c[b],className:"button-page-length",action:function(b,c){c.page.len(a).draw()},init:function(b,c,e){var d=this,
+c=function(){d.active(b.page.len()===a)};b.on("length.dt"+e.namespace,c);c()},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}),init:function(a,b,c){var d=this;a.on("length.dt"+c.namespace,function(){d.text(e(a))})},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}});i.Api.register("buttons()",function(a,b){b===m&&(b=a,a=m);this.selector.buttonGroup=a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return l.buttonSelector(l.instanceSelector(a,c._buttons),b)},!0);c._groupSelector=
+a;return c});i.Api.register("button()",function(a,b){var c=this.buttons(a,b);1').html(a?""+a+"
":"").append(d("")["string"===typeof b?"html":
+"append"](b)).css("display","none").appendTo("body").fadeIn();c!==m&&0!==c&&(r=setTimeout(function(){e.buttons.info(!1)},c));return this});i.Api.register("buttons.exportData()",function(a){if(this.context.length){var b=new i.Api(this.context[0]),c=d.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return e(a)},footer:function(a){return e(a)},body:function(a){return e(a)}},
+customizeData:null},a),e=function(a){if("string"!==typeof a)return a;a=a.replace(/