diff --git a/app/controllers/admins/shixun_settings_controller.rb b/app/controllers/admins/shixun_settings_controller.rb
index 23278c3a9..357ddabdf 100644
--- a/app/controllers/admins/shixun_settings_controller.rb
+++ b/app/controllers/admins/shixun_settings_controller.rb
@@ -18,7 +18,7 @@ class Admins::ShixunSettingsController < Admins::BaseController
       task_pass: params[:task_pass].present? ? params[:task_pass] : false,
       code_hidden: params[:code_hidden].present? ? params[:code_hidden] : false,
       vip: params[:vip].present? ? params[:vip] : false,
-      is_wechat_support: params[:is_wechat_support].present? ? params[:is_wechat_support] : false
+      no_subject: params[:no_subject].present? ? params[:no_subject] : false
     }
 
     @shixuns_type_check = MirrorRepository.pluck(:type_name,:id)
@@ -135,6 +135,6 @@ class Admins::ShixunSettingsController < Admins::BaseController
 
   def setting_params
     params.permit(:use_scope,:excute_time,:close,:status,:can_copy,:webssh,:hidden,:homepage_show,:task_pass,
-                  :code_hidden,:vip,:page_no,:id, :is_wechat_support)
+                  :code_hidden,:vip,:page_no,:id, :no_subject)
   end
 end
diff --git a/app/controllers/admins/subject_settings_controller.rb b/app/controllers/admins/subject_settings_controller.rb
index 10a3139e4..8fa9fde8a 100644
--- a/app/controllers/admins/subject_settings_controller.rb
+++ b/app/controllers/admins/subject_settings_controller.rb
@@ -8,12 +8,6 @@ class Admins::SubjectSettingsController < Admins::BaseController
   end
 
   def update
-    # 为了复用代码
-    if params["show_moblie"]
-      subject.find(params[:id]).update_attributes(:show_moblie => params[:show_moblie])
-      return
-    end
-
     sub_discipline_ids = params[:sub_disciplines] || []
     sub_ids = sub_discipline_ids.reject(&:blank?).map(&:to_i)
     old_sub_ids = current_subject.sub_discipline_containers.pluck(:sub_discipline_id)
diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb
index 8fe5f54a7..329ade866 100644
--- a/app/controllers/bind_users_controller.rb
+++ b/app/controllers/bind_users_controller.rb
@@ -4,19 +4,32 @@ class BindUsersController < ApplicationController
   def create
     # user = CreateBindUserService.call(create_params)
     #
-
-    raise Error, '系统错误' if session_unionid.blank?
-
-    bind_user = User.try_to_login(params[:username], params[:password])
-    raise Error, '用户名或者密码错误' if bind_user.blank?
-    raise Error, '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s)
-
-    OpenUsers::Wechat.create!(user: bind_user, uid: session_unionid)
-    successful_authentication(bind_user)
-
-    render_ok
-  rescue ApplicationService::Error => ex
-    render_error(ex.message)
+    if params[:type] == "qq"
+      begin
+        user = CreateBindUserService.call(current_user, create_params)
+        successful_authentication(user) if user.id != current_user.id
+
+        render_ok
+      rescue ApplicationService::Error => ex
+        render_error(ex.message)
+      end
+    else
+      begin
+        tip_exception '系统错误' if session[:unionid].blank?
+
+        bind_user = User.try_to_login(params[:username], params[:password])
+        tip_exception '用户名或者密码错误' if bind_user.blank?
+        tip_exception '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s)
+        tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s)
+
+        OpenUsers::Wechat.create!(user: bind_user, uid: session[:unionid])
+        successful_authentication(bind_user)
+
+        render_ok
+      rescue Exception => e
+        render_error(e.message)
+      end
+    end
   end
 
   def new_user
diff --git a/app/controllers/oauth/wechat_controller.rb b/app/controllers/oauth/wechat_controller.rb
index f95116535..47dc53ccc 100644
--- a/app/controllers/oauth/wechat_controller.rb
+++ b/app/controllers/oauth/wechat_controller.rb
@@ -1,11 +1,32 @@
 class Oauth::WechatController < Oauth::BaseController
   def create
-    user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params)
+    # user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params)
 
-    successful_authentication(user) if !new_user
+    begin
+      code = params['code'].to_s.strip
+      tip_exception("code不能为空") if code.blank?
+      new_user = false
 
-    render_ok(new_user: new_user)
-  rescue Oauth::CreateOrFindWechatAccountService::Error => ex
-    render_error(ex.message)
+      result = WechatOauth::Service.access_token(code)
+      result = WechatOauth::Service.user_info(result['access_token'], result['openid'])
+
+      # 存在该用户
+      open_user = OpenUsers::Wechat.find_by(uid: result['unionid'])
+      if open_user.present? && open_user.user.present?
+        successful_authentication(open_user.user)
+      else
+        if current_user.blank? || !current_user.logged?
+          new_user = true
+          set_session_openid(result['openid'])
+          set_session_unionid(result['unionid'])
+        else
+          OpenUsers::Wechat.create!(user: current_user, uid: result['unionid'])
+        end
+      end
+
+      render_ok(new_user: new_user)
+    rescue WechatOauth::Error => ex
+      render_error(ex.message)
+    end
   end
 end
\ No newline at end of file
diff --git a/app/models/salesman_channel.rb b/app/models/salesman_channel.rb
index 0aee5f635..b5ae17e0e 100644
--- a/app/models/salesman_channel.rb
+++ b/app/models/salesman_channel.rb
@@ -6,23 +6,20 @@ class SalesmanChannel < ApplicationRecord
     school.name
   end
 
-  def teacher_count(start_time, end_time, keyword)
-    UserExtension.joins(:school).where("schools.name like '%#{keyword}%' and user_extensions.identity=0
-                                        and user_extensions.created_at between '#{start_time}' and '#{end_time}'").count
-    # UserExtension.where(school_id: school_id).where(query).count
+  def teacher_count
+    UserExtension.where(school_id: school_id).where.not(identity: 1).count
   end
 
-  def student_count(start_time, end_time, keyword)
-    UserExtension.joins(:school).where("schools.name like '%#{keyword}%' and user_extensions.identity=1
-                                        and user_extensions.created_at between '#{start_time}' and '#{end_time}'").count
+  def student_count
+    UserExtension.where(school_id: school_id, identity: 1).count
   end
 
-  def course_count(start_time, end_time, keyword)
-    Course.joins(:school).where("schools.name like '%#{keyword}%' and courses.created_at between '#{start_time}' and '#{end_time}'").count
+  def course_count
+    Course.where(school_id: school_id).count
   end
 
-  def shixuns_count(start_time, end_time, keyword)
-    ShixunMember.joins("join user_extensions on user_extensions.user_id = shixun_members.user_id and shixun_members.created_at between '#{start_time}' and '#{end_time}'")
+  def shixuns_count
+    ShixunMember.joins("join user_extensions on user_extensions.user_id = shixun_members.user_id")
         .where(user_extensions: {school_id: school_id}).pluck(:shixun_id).uniq.count
   end
 
diff --git a/app/queries/admins/shixun_settings_query.rb b/app/queries/admins/shixun_settings_query.rb
index 30a402d1c..209f37788 100644
--- a/app/queries/admins/shixun_settings_query.rb
+++ b/app/queries/admins/shixun_settings_query.rb
@@ -51,7 +51,10 @@ class Admins::ShixunSettingsQuery < ApplicationQuery
     all_shixuns = all_shixuns.where(task_pass: params[:task_pass]) if params[:task_pass]
     all_shixuns = all_shixuns.where(code_hidden: params[:code_hidden]) if params[:code_hidden]
     all_shixuns = all_shixuns.where(vip: params[:vip]) if params[:vip]
-    all_shixuns = all_shixuns.where(is_wechat_support: params[:is_wechat_support]) if params[:is_wechat_support]
+    if params[:no_subject]
+      shixun_ids = StageShixun.pluck(:shixun_id).uniq
+      all_shixuns = all_shixuns.published.where.not(id: shixun_ids)
+    end
 
     custom_sort(all_shixuns, params[:sort_by], params[:sort_direction])
   end
diff --git a/app/services/create_bind_user_service.rb b/app/services/create_bind_user_service.rb
index 86ac6c93b..58956694e 100644
--- a/app/services/create_bind_user_service.rb
+++ b/app/services/create_bind_user_service.rb
@@ -17,6 +17,7 @@ class CreateBindUserService < ApplicationService
 
     bind_user = User.try_to_login(params[:username], params[:password])
     raise Error, '用户名或者密码错误' if bind_user.blank?
+    raise Error, '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s)
     raise Error, '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s)
 
     ActiveRecord::Base.transaction do
diff --git a/app/views/admins/salesman_channels/index.html.erb b/app/views/admins/salesman_channels/index.html.erb
index 237ef61d5..5e15d63eb 100644
--- a/app/views/admins/salesman_channels/index.html.erb
+++ b/app/views/admins/salesman_channels/index.html.erb
@@ -2,32 +2,12 @@
   <% add_admin_breadcrumb("#{@salesman.name}的渠道", admins_salesmans_path) %>
 <% end %>
 
-<% define_admin_breadcrumbs do %>
-  <% add_admin_breadcrumb('数据变化报表', admins_school_statistics_path) %>
-<% end %>
-
-<div class="box search-form-container saleman-channel-list-form">
-  <form class="form-inline search-form d-flex" data-search-form-url="<%= admins_salesman_channels_path %>">
-    <div class="time-select">
-      <div class="form-group grow-date-container">
-        <div class="input-group input-daterange grow-date-input-daterange">
-          <%= text_field_tag :start_date, params[:start_date], class: 'form-control start-date mx-0', placeholder: '开始时间' %>
-          <div class="input-group-prepend"><span class="input-group-text">到</span></div>
-          <%= text_field_tag :end_date, params[:start_date], class: 'form-control end-date mx-0', placeholder: '结束时间' %>
-        </div>
-      </div>
-
-    </div>
-    <%= text_field_tag :keyword, params[:keyword], placeholder: 'ID/单位名称检索', class: 'form-control mx-3 search-input' %>
-
-    <%= javascript_void_link '搜索', class: 'btn btn-primary search-btn', target: '' %>
-  </form>
-  <div class="flex-12">
+<div class="box search-form-container salesman-channel-list-form rig">
+  <div class="flex-1">
     <%= javascript_void_link '新增渠道', class: 'btn btn-primary', data: {salesman_id: @salesman.id, toggle: 'modal', target: '.admin-add-salesman-channel-user-modal' } %>
   </div>
 </div>
 
-
 <div class="box admin-list-container salesman-channel-list-container">
   <%= render(partial: 'admins/salesman_channels/shared/list') %>
 </div>
diff --git a/app/views/admins/salesman_channels/shared/_list.html.erb b/app/views/admins/salesman_channels/shared/_list.html.erb
index 4e276b115..12100ce48 100644
--- a/app/views/admins/salesman_channels/shared/_list.html.erb
+++ b/app/views/admins/salesman_channels/shared/_list.html.erb
@@ -19,16 +19,16 @@
           <span><%= channel.school_name %></span>
         </td>
         <td class="text-left">
-          <span><%= channel.teacher_count(@start_time, @end_time, @keyword)  %></span>
+          <span><%= channel.teacher_count %></span>
         </td>
         <td class="text-left">
-          <span><%= channel.student_count(@start_time, @end_time, @keyword)  %></span>
+          <span><%= channel.student_count %></span>
         </td>
         <td>
-          <%=  channel.course_count(@start_time, @end_time, @keyword)  %>
+          <%=  channel.course_count %>
         </td>
         <td>
-          <%= channel.shixuns_count(@start_time, @end_time, @keyword)   %>
+          <%= channel.shixuns_count  %>
         </td>
         <td>
           <%= delete_link '删除', admins_salesman_channel_path(channel, salesman_id: channel.salesman_id, element: ".salesman-channel-item-#{channel.id}"), class: 'delete-salesman-action' %>
diff --git a/app/views/admins/shixun_settings/index.html.erb b/app/views/admins/shixun_settings/index.html.erb
index 82d7fa3a1..a3d7dff4a 100644
--- a/app/views/admins/shixun_settings/index.html.erb
+++ b/app/views/admins/shixun_settings/index.html.erb
@@ -73,8 +73,8 @@
         </div>
         <div class="mr-5">
           <label for="is_wechat_support">
-            <%= check_box_tag :is_wechat_support, !@sort_json[:is_wechat_support],@sort_json[:is_wechat_support], class:"shixun-settings-select" %>
-            <span class="only_view">只看小程序可用</span>
+            <%= check_box_tag :no_subject, !@sort_json[:no_subject],@sort_json[:no_subject], class:"shixun-settings-select" %>
+            <span class="only_view">已发布没关联课程</span>
           </label>
         </div>
 
diff --git a/db/migrate/20200223021427_sync_subjectds_mobile.rb b/db/migrate/20200223021427_sync_subjectds_mobile.rb
new file mode 100644
index 000000000..1c2fb6c3e
--- /dev/null
+++ b/db/migrate/20200223021427_sync_subjectds_mobile.rb
@@ -0,0 +1,7 @@
+class SyncSubjectdsMobile < ActiveRecord::Migration[5.2]
+  def change
+    SubDisciplineContainer.find_each do |sc|
+      subject.find(sc.container_id).update_column(:show_mobile => true)
+    end
+  end
+end
diff --git a/public/react/package.json b/public/react/package.json
index a30780480..1cba54b39 100644
--- a/public/react/package.json
+++ b/public/react/package.json
@@ -93,6 +93,8 @@
     "rsuite": "^4.0.1",
     "sass-loader": "7.3.1",
     "scroll-into-view": "^1.12.3",
+    "showdown": "^1.9.1",
+    "showdown-katex": "^0.6.0",
     "store": "^2.0.12",
     "style-loader": "0.19.0",
     "styled-components": "^4.1.3",
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js
index bfc653ae0..fdd0de05a 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js
@@ -1,29 +1,16 @@
+import '../katex.css';
+import '../css/Courses.css';
 import React,{Component} from "react";
-import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd";
-import {Link} from 'react-router-dom';
-import locale from 'antd/lib/date-picker/locale/zh_CN';
-import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder';
+import {markdownToHTML, ImageLayer2 } from 'educoder';
 import axios from 'axios';
 import Modals from '../../modals/Modals';
-import CoursesListType from '../coursesPublic/CoursesListType';
-import HomeworkModal from "../coursesPublic/HomeworkModal";
-import CheckAllGroup from '../common/button/CheckAllGroup'
 import moment from 'moment';
-import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal'
-import '../css/Courses.css'
 import WorkDetailPageHeader from './common/WorkDetailPageHeader'
 import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply'
-import Example from './TestHooks'
 import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments'
-import LeaderIcon from './common/LeaderIcon'
-const { Option} = Select;
-const CheckboxGroup = Checkbox.Group;
-const confirm = Modal.confirm;
-
-const $ = window.$;
-const Search = Input.Search;
-const RadioGroup = Radio.Group;
-
+import LeaderIcon from './common/LeaderIcon';
+import showdown from 'showdown'
+import showdownKatex from 'showdown-katex'
 class CommonWorkAppraise extends Component{
 
   constructor(props){
@@ -56,22 +43,28 @@ class CommonWorkAppraise extends Component{
        console.log(error)
      })
   }
-  getSupplyAttachments = () => {
-    let workId =this.props.match.params.workId;
-    let studentWorkId =this.props.match.params.studentWorkId;
-
-    const url = `/student_works/${studentWorkId}/supply_attachments.json`
-
-    axios.get(url).then((result)=> {
-      if (result.data.course_id) {
-
-        this.setState({
-          ...result.data
-        })
-      }
-     }).catch((error)=>{
-       console.log(error)
-     })
+  exportMdtoHtml=(md)=> {
+    let newmd=md;
+    newmd=newmd.replace(/TOC/g, '');
+    newmd=newmd.replace(/\[|]/g,'');
+    newmd=newmd.replace(/`/g, '');
+    newmd=newmd.replace(/`/g, '');
+    newmd=newmd.replace(/"/g, '');
+    newmd=newmd.replace(/"/g, '');
+    newmd=newmd.replace(/"/g, '');
+    const converter = new showdown.Converter({
+      extensions: [
+        showdownKatex({
+          // maybe you want katex to throwOnError
+          throwOnError: true,
+          // disable displayMode
+          displayMode: false,
+          // change errorColor to blue
+          errorColor: '#1500ff',
+        }),
+      ],
+    });
+    return converter.makeHtml(newmd);
   }
   getReviseAttachments = () => {
     let studentWorkId =this.props.match.params.studentWorkId;
@@ -99,22 +92,6 @@ class CommonWorkAppraise extends Component{
   componentDidMount() {
     this.getWork();
     this.getReviseAttachments()
-
-    let workId =this.props.match.params.workId;
-    let studentWorkId =this.props.match.params.studentWorkId;
-    // const url = `/student_works/${studentWorkId}/comment_list.json`
-
-    // axios.get(url).then((result)=> {
-    //   if (result.data.course_id) {
-
-    //     this.setState({
-    //       ...result.data
-    //     })
-    //   }
-
-    //  }).catch((error)=>{
-    //    console.log(error)
-    //  })
   }
 
   onAttachmentRemove = (id) => {
@@ -205,7 +182,7 @@ class CommonWorkAppraise extends Component{
             <div className={"color-grey-6 mb15 font-16"}>
               内容
             </div>
-            <div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}>
+            <div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: this.exportMdtoHtml(description)}}>
             </div>
 
             {attachments.map((item,key)=>{
diff --git a/public/react/src/modules/courses/common/comments/CCommentItem.js b/public/react/src/modules/courses/common/comments/CCommentItem.js
index c440e0424..4a399b11f 100644
--- a/public/react/src/modules/courses/common/comments/CCommentItem.js
+++ b/public/react/src/modules/courses/common/comments/CCommentItem.js
@@ -1,9 +1,12 @@
+import '../../katex.css';
 import React,{ Component } from "react";
 import { getImageUrl, markdownToHTML, WordsBtn, getUrl } from 'educoder';
-import { Tooltip } from  'antd'
-import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'
-import axios from 'axios'
-import moment from 'moment'
+import { Tooltip } from  'antd';
+import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor';
+import axios from 'axios';
+import moment from 'moment';
+import showdown from 'showdown';
+import showdownKatex from 'showdown-katex';
 const _origin = ''
 /**
 	https://www.showdoc.cc/127895880302646?page_id=1962215317836957
@@ -14,7 +17,7 @@ const REFUSE = 4
 class CCommentItem extends Component{
   constructor(props){
     super(props);
-    
+
 	this.state = {
       show_reply: false,
       show_appeal: false,
@@ -46,7 +49,7 @@ class CCommentItem extends Component{
     		let { item, commentIndex }=this.props;
 
         const url = `/student_works/${studentWorkId}/cancel_appeal.json`
-        axios.post(url, { 
+        axios.post(url, {
             score_id: item.id
           })
         .then((response) => {
@@ -57,7 +60,7 @@ class CCommentItem extends Component{
         })
         .catch(function (error) {
           console.log(error);
-        });    
+        });
       }
     })
 	}
@@ -77,7 +80,7 @@ class CCommentItem extends Component{
 			comment: this.state.secondReplyContent
 		}).then((result)=>{
 			if(result.data.status == 0){
-				this.props.replySuccess()				
+				this.props.replySuccess()
 				this.cancelReply()
 			}
 		}).catch((error)=>{
@@ -92,7 +95,7 @@ class CCommentItem extends Component{
 			if(result.data.status == 0){
 				this.props.replySuccess()
 				this.cancelAppeal()
-				
+
 			}
 		}).catch((error)=>{
 			console.log(error)
@@ -118,14 +121,14 @@ class CCommentItem extends Component{
         })
         .catch(function (error) {
           console.log(error);
-        });    
+        });
       }
     })
   }
 	on_deal_appeal_score = (mode, item) => {
 	  this.props.confirm({
       // content: `确认要删除所选的${len}个帖子吗?`,
-      content: 
+      content:
 	  	<div>
 			<div>{mode == ACCEPT ? '此匿评成绩将被废弃,评阅人的作品将被违规扣分' : '此匿评成绩将被认为合理'}</div>
 			<div>是否确认{mode == ACCEPT ? '接受申诉' : '拒绝申诉'}</div>
@@ -146,13 +149,39 @@ class CCommentItem extends Component{
         })
         .catch(function (error) {
           console.log(error);
-        });    
+        });
       }
     })
   }
+
   parseCommentContent = (oldContent) => {
 		return markdownToHTML(oldContent);
   }
+
+  exportMdtoHtml=(md)=> {
+  	let newmd=md;
+		newmd=newmd.replace(/TOC/g, '');
+		newmd=newmd.replace(/\[|]/g,'');
+		newmd=newmd.replace(/`/g, '');
+		newmd=newmd.replace(/`/g, '');
+		newmd=newmd.replace(/"/g, '');
+		newmd=newmd.replace(/"/g, '');
+		newmd=newmd.replace(/"/g, '');
+		const converter = new showdown.Converter({
+			extensions: [
+				showdownKatex({
+					// maybe you want katex to throwOnError
+					throwOnError: true,
+					// disable displayMode
+					displayMode: false,
+					// change errorColor to blue
+					errorColor: '#1500ff',
+				}),
+			],
+		});
+		return converter.makeHtml(newmd);
+	}
+
   renderChildenComments = (parent) => {
     if (parent.journals.length == 0) {
 			return '';
@@ -172,19 +201,19 @@ class CCommentItem extends Component{
 		// is_appeal_info true 是匿评人匿评信息,需要统一使用头像去掉链接
 		return parent.journals.map(item => {
 			// <div>{item.content} {item.user_info.user_name}</div>
-								
+
 			// src={getImageUrl(`images/${item.image_url}`)}
 			const imgSrc = (!item.user_info.user_image_url || item.user_info.user_image_url === '--') ? `edu_user/anony.png` : item.user_info.user_image_url;
 			return (
 				<div className="comment_item_cont appraise df clearfix" key={item.id}>
 					<div className="J_Comment_Face fl">
-						{item.is_appeal_info == true ? 
+						{item.is_appeal_info == true ?
 							<a href={`javascript:void(0)`} target="_blank">
-								<img alt="用户头像" height="50" 
+								<img alt="用户头像" height="50"
 									src={`${getUrl()}/images/edu_user/anony.png`} width="50"/>
 							</a>
 						: <a href={`${_origin}/users/${item.user_info.user_login}`} target="_blank">
-							<img alt="用户头像" height="50" 
+							<img alt="用户头像" height="50"
 								src={`${getImageUrl(`images/`+imgSrc)}`}
 							width="50"/>
 						</a>}
@@ -204,21 +233,21 @@ class CCommentItem extends Component{
 											</a>}
 
 										<span className="t_area fl">{moment(item.time).format('YYYY-MM-DD HH:mm')}</span>
-										{item.is_appeal_info && (item.appeal_status == 1 ? 
-										<span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉中</span> : 
-										  item.appeal_status == 2 ? 
+										{item.is_appeal_info && (item.appeal_status == 1 ?
+										<span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉中</span> :
+										  item.appeal_status == 2 ?
 										<span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉已撤销</span> :
-										  item.appeal_status == 3 ? 
+										  item.appeal_status == 3 ?
 										<span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉成功</span> :
-										  item.appeal_status == 4 ? 
+										  item.appeal_status == 4 ?
 										<span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉被拒绝</span> :
-										  item.appeal_status == 5 ? 
+										  item.appeal_status == 5 ?
 										<span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉失败</span> : '')
-										} 
-										
-										
+										}
+
+
 										{/* fr */}
-										{/* { item.is_invalid ? <span className="validate_area fr">失效</span> : 
+										{/* { item.is_invalid ? <span className="validate_area fr">失效</span> :
 										<React.Fragment> */}
 										{!item.is_appeal_info && item.can_delete == true && <Tooltip title="删除">
 											<i className="iconfont icon-shanchu mr5 fr font-14" onClick={() => this.onDeleteSecondReply(item)}
@@ -233,19 +262,19 @@ class CCommentItem extends Component{
 										</React.Fragment>}
 										{item.appeal_status == 1 &&	this.props.is_author == true && this.props.isStudent()===true &&
 											<WordsBtn style="blue" className="fr mr5" onClick={() => this.cancelMyAppeal()}>撤销申诉</WordsBtn>}
-										
+
 									</div>
 								</div>
 
 								<div className="comment_content  clearfix" id={`reply_content_${item.id}`}>
 									<div className="color-grey-3" id={`reply_content_${item.id}`}>
-										<div  className={"break_word_comments markdown-body"} 
-												dangerouslySetInnerHTML={{__html: this.parseCommentContent(item.content)}}></div>
+										<div  className={"markdown-body"}
+												dangerouslySetInnerHTML={{__html:this.exportMdtoHtml(item.content)}}></div>
 										<div className="cl"></div>
 									</div>
 								</div>
 
-								
+
 							</div>
 						</div>
 					</div>
@@ -256,7 +285,7 @@ class CCommentItem extends Component{
   render(){
     let { item, commentIndex, homework_status, is_author }=this.props;
     let { show_reply, show_appeal }=this.state;
-    const _content = item.content ? this.parseCommentContent(item.content) : ''
+    const _content = item.content ? this.exportMdtoHtml(item.content) : ''
 	const isAnonymous = homework_status && homework_status.indexOf('匿评中') != -1
 	const isAppealing = homework_status && homework_status.indexOf('申诉中') != -1
 	const attachments = item.attachments;
@@ -266,13 +295,13 @@ class CCommentItem extends Component{
       <div className="ccomment comment_item_cont df clearfix" key={item.id}>
  					<div className="J_Comment_Face fl">
 
-						{item.image_url == '--' ? 
+						{item.image_url == '--' ?
 						<a href={`javascript:void(0)`} >
-							<img alt="用户头像" height="50" 
+							<img alt="用户头像" height="50"
 								src={`${getUrl()}/images/edu_user/anony.png`} width="50"/>
 							</a>
 						: <a href={`${_origin}/users/${item.user_login}`} target="_blank">
-							<img alt="用户头像" height="50" 
+							<img alt="用户头像" height="50"
 								src={`${getUrl()}/images/${item.image_url}`}
 							width="50"/>
 						</a>}
@@ -285,7 +314,7 @@ class CCommentItem extends Component{
 					<div className="t_content fl">
 						<div className="J_Comment_Reply">
 							<div className="comment_orig_content" style={{ margin:"0px" }}>
-								
+
 
 								<div className="J_Comment_Info clearfix mt3">
 									<div className="t_info fl">
@@ -303,8 +332,8 @@ class CCommentItem extends Component{
 										<span className="t_area fl">{item.time}</span>
 										{/* 分数 */}
 										{item.score !== null && <span className="score_area fl">{item.score}分</span>}
-										
-										
+
+
 										{/* item.is_invalid && */}
 										{/* {  item.delete && isAdmin && <Tooltip title={ "删除" } >
 											<i className="iconfont icon-shanchu mr5 fr" style={{marginLeft: '6px'}}
@@ -312,29 +341,29 @@ class CCommentItem extends Component{
 											</i>
 										</Tooltip>} */}
 
-										
+
 
 										{/* fr */}
 										{/* <WordsBtn style="blue" className="fr">回复</WordsBtn> */}
-										{ item.is_invalid ? <span className="validate_area fr">失效</span> : 
+										{ item.is_invalid ? <span className="validate_area fr">失效</span> :
 										<React.Fragment>
 											<WordsBtn style="blue" className="fr" onClick={this.state.show_reply ? this.cancelReply : this.showReply}>回复</WordsBtn>
-											{(isAppealing || isAnonymous) && item.can_appeal && item.appeal_status == 0 && 
+											{(isAppealing || isAnonymous) && item.can_appeal && item.appeal_status == 0 &&
 												<WordsBtn style="blue" className="fr mr20" onClick={this.state.show_appeal ? this.cancelAppeal : this.showAppeal}>申诉</WordsBtn>}
-											
+
 										</React.Fragment>
 
 											}
-										{item.delete && isAdmin 
-											&& <WordsBtn style="blue" className="fr mr12" 
+										{item.delete && isAdmin
+											&& <WordsBtn style="blue" className="fr mr12"
 												onClick={() => this.props.onDelete(item)}>删除</WordsBtn>}
-										
+
 									</div>
 								</div>
 
 								{!!_content && _content !== 'null' && <div className="comment_content  clearfix mt8" id={`reply_content_${item.id}`}>
 									<div className="color-grey-3" id={`reply_content_${item.id}`}>
-										<div  className={"break_word_comments markdown-body"} dangerouslySetInnerHTML={{__html: _content}}></div>
+										<div  className={"markdown-body"} dangerouslySetInnerHTML={{__html: _content}}></div>
 										<div className="cl"></div>
 									</div>
 								</div>}
@@ -367,7 +396,7 @@ class CCommentItem extends Component{
 								<div className="childrenCommentsView" style={{background: '#fff'}}>
 									{/* {(item && item.journals && item.journals.length) ? <div className="trangle"></div>: ''} */}
 									{this.renderChildenComments(item)}
-									{/* { item.isAllChildrenLoaded != true && item.journals && this.props.isChildCommentPagination == true && item.journals.length >= 5? 
+									{/* { item.isAllChildrenLoaded != true && item.journals && this.props.isChildCommentPagination == true && item.journals.length >= 5?
 										<Tooltip title={ "点击查看更多回复" } disableFocusListener={true}>
 											<div className="loadMoreChildComments" onClick={() => {this.props.loadMoreChildComments && this.props.loadMoreChildComments(item)}}>
 												<i className="iconfont icon-xiajiantou"></i>
@@ -379,9 +408,9 @@ class CCommentItem extends Component{
 								<p className="" >
                     				{/* 第二排右侧按钮区域 */}
 									{/* ${this.state.show_reply ? '回复' : '申诉'} */}
-									{(show_reply || show_appeal) && 
+									{(show_reply || show_appeal) &&
 									<React.Fragment>
-										<TPMMDEditor mdID={`${commentIndex}`} watch={false} 
+										<TPMMDEditor mdID={`${commentIndex}`} watch={false}
 											height={130} onChange={(val) => this.setState({ secondReplyContent: val})}
 											placeholder={`请输入内容`} noStorage={true}
 										></TPMMDEditor>
@@ -389,15 +418,15 @@ class CCommentItem extends Component{
 											<a  className="task-btn task-btn-orange fr" style={{height: '26px', lineHeight: '26px', width: '60px'}}
 												onClick={this.onSubmit}
 											>{this.state.show_reply ? '回复' : '申诉'}</a>
-											<a onClick={this.onCancel} className="defalutCancelbtn fr" 
+											<a onClick={this.onCancel} className="defalutCancelbtn fr"
 												style={{height: '26px', width: '60px', fontSize: '14px', lineHeight: '26px', marginRight: '10px'}}>取消</a>
-											
+
 										</div>
 									</React.Fragment>
 									}
 								</p>
-                
-		                        
+
+
 							</div>
 						</div>
 					</div>
diff --git a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
index 87d7e5eae..1f7fec57a 100644
--- a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
+++ b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
@@ -141,10 +141,24 @@ class OneSelfOrderModal extends Component{
 
 	//勾选实训
 	shixunhomeworkedit=(list)=>{
+   if(this.state.course_groups){
+		 if(this.state.course_groups.length===list.length){
+			 this.setState({
+				 Checkboxtype:true,
+				 group_ids:list
+			 })
+		 }else{
+			 this.setState({
+				 Checkboxtype:false,
+				 group_ids:list
+			 })
+		 }
+	 }else{
+		 this.setState({
+			 group_ids:list
+		 })
+	 }
 
-		this.setState({
-			group_ids:list
-		})
 		this.props.getcourse_groupslist && this.props.getcourse_groupslist(list)
 	}
 
diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf
new file mode 100644
index 000000000..afcd2eb4d
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff
new file mode 100644
index 000000000..4f575152f
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2
new file mode 100644
index 000000000..b982d6eaf
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf
new file mode 100644
index 000000000..f84148db5
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff
new file mode 100644
index 000000000..ab56ab7fa
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2
new file mode 100644
index 000000000..710c26179
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf
new file mode 100644
index 000000000..97814db7e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff
new file mode 100644
index 000000000..aec8a3338
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2
new file mode 100644
index 000000000..ee5193d7c
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf
new file mode 100644
index 000000000..483a7cdd4
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff
new file mode 100644
index 000000000..189fea5e4
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2
new file mode 100644
index 000000000..dc3bd4c04
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf
new file mode 100644
index 000000000..9aa5f674d
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff
new file mode 100644
index 000000000..d01450e91
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2
new file mode 100644
index 000000000..7eeba3779
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf
new file mode 100644
index 000000000..dc0185a12
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff
new file mode 100644
index 000000000..acf48e668
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2
new file mode 100644
index 000000000..cf5ababf4
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf
new file mode 100644
index 000000000..4346f173c
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff
new file mode 100644
index 000000000..d2cfe4e31
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2
new file mode 100644
index 000000000..d0178f421
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf
new file mode 100644
index 000000000..f2c3ebaec
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff
new file mode 100644
index 000000000..1184295de
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2
new file mode 100644
index 000000000..aa05e142c
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf
new file mode 100644
index 000000000..8acb36545
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff
new file mode 100644
index 000000000..9f8228fc3
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 000000000..e3f71eb7e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf
new file mode 100644
index 000000000..a645df64e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff
new file mode 100644
index 000000000..87d4f223e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2
new file mode 100644
index 000000000..83b49962a
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf
new file mode 100644
index 000000000..9c38359cc
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff
new file mode 100644
index 000000000..959746ef5
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 000000000..e3ea522a6
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf
new file mode 100644
index 000000000..ff1085124
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff
new file mode 100644
index 000000000..f0d6ea739
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2
new file mode 100644
index 000000000..4cf8f1469
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf
new file mode 100644
index 000000000..3dd767131
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff
new file mode 100644
index 000000000..9da0dfe39
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2
new file mode 100644
index 000000000..ce19ae03d
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf
new file mode 100644
index 000000000..f117cd619
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff
new file mode 100644
index 000000000..6ed98780a
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2
new file mode 100644
index 000000000..27611491a
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf
new file mode 100644
index 000000000..e6f34542e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff
new file mode 100644
index 000000000..4a48e65f0
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2
new file mode 100644
index 000000000..b0aed195c
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf
new file mode 100644
index 000000000..37faa0f9f
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff
new file mode 100644
index 000000000..0832f7a46
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2
new file mode 100644
index 000000000..483e7b66e
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf
new file mode 100644
index 000000000..cf326236c
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff
new file mode 100644
index 000000000..14f6485ab
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2
new file mode 100644
index 000000000..5ff706067
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf
new file mode 100644
index 000000000..ff7e2b901
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff
new file mode 100644
index 000000000..d3626cef3
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2
new file mode 100644
index 000000000..e45ca49db
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf
new file mode 100644
index 000000000..3034091cd
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff
new file mode 100644
index 000000000..93c57a6f9
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2
new file mode 100644
index 000000000..53b65afcf
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf
new file mode 100644
index 000000000..2fd85294a
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff
new file mode 100644
index 000000000..e90fa2bc7
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff differ
diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2
new file mode 100644
index 000000000..e40ab1516
Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2 differ
diff --git a/public/react/src/modules/courses/katex.css b/public/react/src/modules/courses/katex.css
new file mode 100644
index 000000000..0aff4ccd8
--- /dev/null
+++ b/public/react/src/modules/courses/katex.css
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-mathml{border:0;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{border-right:.05em solid;display:inline-block;margin:0 -.025em;min-width:1px}.katex .mtable .vs-dashed{border-right:.05em dashed}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;fill:currentColor;fill-opacity:1;fill-rule:nonzero;height:inherit;position:absolute;stroke:currentColor;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1;width:100%}.katex svg path{stroke:none}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox{border:.04em solid #000;box-sizing:border-box}.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}
\ No newline at end of file