7
document.getElementById &&
9
document.createElement &&
10
((window.MathJax && MathJax.Hub) ||
12
? (window.MathJax = { AuthorConfig: window.MathJax })
13
: (window.MathJax = {}),
14
(MathJax.version = "2.7.9"),
15
(MathJax.fileversion = "2.7.9"),
16
(MathJax.cdnVersion = "2.7.9"),
17
(MathJax.cdnFileVersions = {}),
19
var e = window.MathJax;
20
e || (e = window.MathJax = {});
23
var e = t.constructor;
24
for (var i in (e || (e = function () {}), t))
25
"constructor" !== i && t.hasOwnProperty(i) && (e[i] = t[i]);
29
constructor: function () {
30
return arguments.callee.Init.call(this, arguments);
32
Subclass: function (t, e) {
34
return arguments.callee.Init.call(this, arguments);
39
(n.Subclass = this.Subclass),
40
(n.Augment = this.Augment),
41
(n.protoFunction = this.protoFunction),
45
(n.prototype = new this(i)),
46
(n.prototype.constructor = n),
53
return 1 === t.length && t[0] === i
55
: (e instanceof t.callee || (e = new t.callee(i)),
56
e.Init.apply(e, t) || e);
58
Augment: function (t, e) {
61
for (i in t) t.hasOwnProperty(i) && this.protoFunction(i, t[i]);
62
t.toString !== this.prototype.toString &&
63
t.toString !== {}.toString &&
64
this.protoFunction("toString", t.toString);
66
if (null != e) for (i in e) e.hasOwnProperty(i) && (this[i] = e[i]);
69
protoFunction: function (t, e) {
70
(this.prototype[t] = e),
71
"function" == typeof e && (e.SUPER = this.SUPER.prototype);
76
return t.callee.SUPER;
79
return "function" == typeof this[t];
82
return void 0 !== this[t];
85
return t instanceof Object && this instanceof t;
89
return this.prototype.can.call(this, t);
92
return this.prototype.has.call(this, t);
95
for (var e = this; e; ) {
96
if (e === t) return !0;
102
constructor: function (t) {
103
return this.SimpleSUPER.define(t);
105
define: function (t) {
109
t.hasOwnProperty(i) && (e[i] = this.wrap(i, t[i]));
110
t.toString !== this.prototype.toString &&
111
t.toString !== {}.toString &&
112
(e.toString = this.wrap("toString", t.toString));
116
wrap: function (t, e) {
118
"function" != typeof e ||
119
!e.toString().match(/\.\s*SUPER\s*\(/)
122
var i = function () {
123
this.SUPER = i.SUPER[t];
125
var n = e.apply(this, arguments);
127
throw (delete this.SUPER, t);
129
return delete this.SUPER, n;
132
(i.toString = function () {
133
return e.toString.apply(e, arguments);
143
return "[object Array]" === Object.prototype.toString.call(t);
145
(e.Object.Array = Array);
148
var e = window.MathJax;
149
e || (e = window.MathJax = {});
150
var i = e.Object.isArray,
152
var e = function () {
153
return arguments.callee.execute.apply(arguments.callee, arguments);
155
for (var i in n.prototype)
156
n.prototype.hasOwnProperty(i) &&
157
(e[i] = void 0 !== t[i] ? t[i] : n.prototype[i]);
158
return (e.toString = n.prototype.toString), e;
162
hook: function () {},
165
execute: function () {
166
if (!this.called || this.autoReset)
168
(this.called = !this.autoReset),
171
this.data.concat([].slice.call(arguments, 0))
178
toString: function () {
179
return this.hook.toString.apply(this.hook, arguments);
182
var a = function (t) {
183
return "function" == typeof t && t.isCallback;
186
return eval.call(window, t);
189
if ((s("var __TeSt_VaR__ = 1"), window.__TeSt_VaR__))
191
delete window.__TeSt_VaR__;
193
window.__TeSt_VaR__ = null;
196
s = window.execScript
200
"try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}"),
201
window.execScript(t);
203
if ((delete e.__result, delete e.__code, i instanceof Error))
210
"try {MathJax.__result = eval(MathJax.__code)} catch(err) {MathJax.__result = err}");
211
var i = document.getElementsByTagName("head")[0];
212
i || (i = document.body);
213
var n = document.createElement("script");
214
n.appendChild(document.createTextNode(t)),
218
if ((delete e.__result, delete e.__code, a instanceof Error))
224
o = function (t, e) {
226
(arguments.length > 1 &&
228
2 === arguments.length &&
229
"function" != typeof arguments[0] &&
230
arguments[0] instanceof Object &&
231
"number" == typeof arguments[1]
232
? [].slice.call(t, e)
233
: [].slice.call(arguments, 0)),
234
i(t) && 1 === t.length && "function" == typeof t[0] && (t = t[0]),
235
"function" == typeof t)
237
return t.execute === n.prototype.execute ? t : n({ hook: t });
240
"string" == typeof t[0] &&
241
t[1] instanceof Object &&
242
"function" == typeof t[1][t[0]]
244
return n({ hook: t[1][t[0]], object: t[1], data: t.slice(2) });
245
if ("function" == typeof t[0])
246
return n({ hook: t[0], data: t.slice(1) });
247
if ("function" == typeof t[1])
248
return n({ hook: t[1], object: t[0], data: t.slice(2) });
250
if ("string" == typeof t)
251
return r && r(), n({ hook: s, data: [t] });
252
if (t instanceof Object) return n(t);
253
if (void 0 === t) return n({});
255
throw Error("Can't make callback from given data");
257
h = function (t, e) {
258
(t = o(t)).called || (u(t, e), e.pending++);
263
(this.execute = this.oldExecute),
264
delete this.oldExecute;
265
var e = this.execute.apply(this, arguments);
266
if (a(e) && !e.called) u(e, t);
268
for (var i = 0, n = t.length; i < n; i++)
269
t[i].pending--, t[i].pending <= 0 && t[i].call();
271
u = function (t, e) {
275
? t.signal.push(e[0])
276
: (t.signal = t.signal.concat(e))
277
: ((t.oldExecute = t.execute), (t.execute = l), (t.signal = e));
280
(t = o(t)).pending = 0;
281
for (var e = 1, i = arguments.length; e < i; e++)
282
arguments[e] && h(arguments[e], t);
283
if (0 === t.pending) {
289
p = MathJax.Object.Subclass({
296
Add: function (t, e) {
297
null == e && (e = 10), a(t) || (t = o(t)), (t.priority = e);
299
var i = this.hooks.length;
300
i > 0 && e < this.hooks[i - 1].priority;
304
return this.hooks.splice(i, 0, t), t;
306
Remove: function (t) {
307
for (var e = 0, i = this.hooks.length; e < i; e++)
308
if (this.hooks[e] === t)
309
return void (this.running
310
? this.remove.push(e)
311
: this.hooks.splice(e, 1));
313
Execute: function () {
316
for (var e = 0, i = this.hooks.length; e < i; e++) {
317
this.reset && this.hooks[e].reset();
318
var n = this.hooks[e].apply(window, arguments);
319
a(n) && !n.called && t.push(n);
323
this.remove.length && this.RemovePending(),
324
1 === t.length ? null : 2 === t.length ? t[1] : c.apply({}, t)
327
RemovePending: function () {
328
this.remove = this.remove.sort();
329
for (var t = this.remove.length - 1; t >= 0; t--)
330
this.hooks.splice(t, 1);
334
d = e.Object.Subclass({
336
(this.pending = this.running = 0),
338
this.Push.apply(this, arguments);
341
for (var t, e = 0, i = arguments.length; e < i; e++)
342
(t = o(arguments[e])) !== arguments[e] ||
344
(t = o(["wait", this, t])),
346
return this.running || this.pending || this.Process(), t;
348
Process: function (t) {
349
for (; !this.running && !this.pending && this.queue.length; ) {
350
var e = this.queue[0];
351
(t = this.queue.slice(1)), (this.queue = []), this.Suspend();
354
t.length && (this.queue = t.concat(this.queue)),
355
a(i) && !i.called && h(i, this);
358
Suspend: function () {
361
Resume: function () {
362
this.running && this.running--;
365
this.Process.apply(this, arguments);
374
d.prototype.Init.call(this),
377
(this.listeners = p(!0)),
379
(this.callback = null);
381
Post: function (t, e, i) {
382
if (((e = o(e)), this.posting || this.pending))
383
this.Push(["Post", this, t, e, i]);
387
i || this.posted.push(t),
390
var n = this.listeners.Execute(t);
391
a(n) && !n.called && h(n, this),
394
this.pending || this.call();
398
Clear: function (t) {
401
this.posting || this.pending
402
? (t = this.Push(["Clear", this, t]))
403
: ((this.posted = []), t()),
408
this.callback(this), this.Process();
410
Interest: function (t, e, i) {
411
if (((t = o(t)), this.listeners.Add(t, i), !e))
412
for (var n = 0, s = this.posted.length; n < s; n++) {
414
var r = t(this.posted[n]);
415
a(r) && n === this.posted.length - 1 && h(r, this);
419
NoInterest: function (t) {
420
this.listeners.Remove(t);
422
MessageHook: function (t, e, i) {
425
((this.hooks = {}), this.Interest(["ExecuteHooks", this])),
426
this.hooks[t] || (this.hooks[t] = p(!0)),
427
this.hooks[t].Add(e, i);
428
for (var n = 0, a = this.posted.length; n < a; n++)
429
this.posted[n] == t && (e.reset(), e(this.posted[n]));
430
return (e.msg = t), e;
432
ExecuteHooks: function (t) {
433
var e = i(t) ? t[0] : t;
434
return this.hooks[e] ? this.hooks[e].Execute(t) : null;
436
RemoveHook: function (t) {
437
this.hooks[t.msg].Remove(t);
443
return f.signals[t] || (f.signals[t] = new f(t)), f.signals[t];
447
(e.Callback = e.CallBack = o),
448
(e.Callback.Delay = function (t, e) {
449
return ((e = o(e)).timeout = setTimeout(e, t)), e;
451
(e.Callback.After = c),
452
(e.Callback.Queue = d),
453
(e.Callback.Signal = f.find),
454
(e.Callback.Hooks = p),
455
(e.Callback.ExecuteHooks = function (t, e, n) {
457
i(t) || (t = [t]), i(e) || (e = null == e ? [] : [e]);
458
for (var a = p(n), s = 0, r = t.length; s < r; s++) a.Add(t[s]);
459
return a.Execute.apply(a, e);
463
var e = window.MathJax;
464
e || (e = window.MathJax = {});
466
"Apple Computer, Inc." === navigator.vendor &&
467
void 0 === navigator.vendorSub,
471
document.styleSheets &&
472
document.styleSheets.length > n &&
473
(n = document.styleSheets.length),
475
(t = document.head || document.getElementsByTagName("head")[0]) ||
482
for (var t = 0, i = s.length; t < i; t++)
483
e.Ajax.head.removeChild(s[t]);
486
o = { MathJax: "", a11y: "[MathJax]/extensions/a11y" };
493
config: { root: "", path: o },
495
STATUS: { OK: 1, ERROR: -1 },
496
fileURL: function (t) {
499
(e = t.match(/^\[([-._a-z0-9]+)\]/i)) && o.hasOwnProperty(e[1]);
502
t = (o[e[1]] || this.config.root) + t.substr(e[1].length + 2);
505
fileName: function (t) {
506
var e = this.config.root;
507
t.substr(0, e.length) === e && (t = "[MathJax]" + t.substr(e.length));
512
o.hasOwnProperty(n) &&
514
t.substr(0, o[n].length) === o[n]
516
(t = "[" + n + "]" + t.substr(o[n].length)), (i = !0);
522
fileRev: function (t) {
523
var i = e.cdnFileVersions[t] || e.cdnVersion || "";
524
return i && (i = "?V=" + i), i;
526
urlRev: function (t) {
527
return this.fileURL(t) + this.fileRev(t);
529
Require: function (t, i) {
531
if (((i = e.Callback(i)), t instanceof Object))
533
t.hasOwnProperty(a) && ((n = a.toUpperCase()), (t = t[a]));
534
else n = t.split(/\./).pop().toUpperCase();
535
if (this.params.noContrib && "[Contrib]" === t.substr(0, 9))
536
i(this.STATUS.ERROR);
537
else if (((t = this.fileURL(t)), this.loaded[t])) i(this.loaded[t]);
540
(s[n] = t), this.Load(s, i);
544
Load: function (t, i) {
546
if (((i = e.Callback(i)), t instanceof Object))
548
t.hasOwnProperty(s) && ((n = s.toUpperCase()), (t = t[s]));
549
else n = t.split(/\./).pop().toUpperCase();
550
if (((t = this.fileURL(t)), this.loading[t])) this.addHook(t, i);
552
if (((this.head = a(this.head)), !this.loader[n]))
553
throw Error("Can't load files of type " + n);
554
this.loader[n].call(this, t, i);
558
LoadHook: function (t, i, n) {
559
if (((i = e.Callback(i)), t instanceof Object))
560
for (var a in t) t.hasOwnProperty(a) && (t = t[a]);
562
(t = this.fileURL(t)),
563
this.loaded[t] ? i(this.loaded[t]) : this.addHook(t, i, n),
567
addHook: function (t, e, i) {
568
this.loadHooks[t] || (this.loadHooks[t] = MathJax.Callback.Hooks()),
569
this.loadHooks[t].Add(e, i),
572
removeHook: function (t) {
573
this.loadHooks[t.file] &&
574
(this.loadHooks[t.file].Remove(t),
575
this.loadHooks[t.file].hooks.length ||
576
delete this.loadHooks[t.file]);
578
Preloading: function () {
579
for (var t = 0, e = arguments.length; t < e; t++) {
580
var i = this.fileURL(arguments[t]);
581
this.loading[i] || (this.loading[i] = { preloaded: !0 });
585
JS: function (t, i) {
586
var n = this.fileName(t),
587
a = document.createElement("script"),
588
s = e.Callback(["loadTimeout", this, t]);
591
timeout: setTimeout(s, this.timeout),
592
status: this.STATUS.OK,
595
(this.loading[t].message = e.Message.File(n)),
597
(a.type = "text/javascript"),
598
(a.src = t + this.fileRev(n)),
599
this.head.appendChild(a);
601
CSS: function (t, i) {
602
var n = this.fileName(t),
603
a = document.createElement("link");
604
(a.rel = "stylesheet"),
605
(a.type = "text/css"),
606
(a.href = t + this.fileRev(n)),
609
message: e.Message.File(n),
610
status: this.STATUS.OK,
612
this.head.appendChild(a),
613
this.timer.create.call(this, [this.timer.file, t], a);
617
create: function (t, a) {
620
"STYLE" === a.nodeName &&
622
void 0 !== a.styleSheet.cssText
624
: window.chrome && "LINK" === a.nodeName
629
[this.timer.checkSafari2, n++, t],
634
[this.timer.checkLength, a, t],
640
start: function (t, i, n, a) {
641
((i = e.Callback(i)).execute = this.execute),
642
(i.time = this.time),
643
(i.STATUS = t.STATUS),
644
(i.timeout = a || t.timeout),
645
(i.delay = i.total = n || 0),
646
n ? setTimeout(i, n) : i();
650
(this.total += this.delay),
651
(this.delay = Math.floor(1.05 * this.delay + 5)),
652
this.total >= this.timeout ? (t(this.STATUS.ERROR), 1) : 0
655
file: function (t, i) {
656
i < 0 ? e.Ajax.loadTimeout(t) : e.Ajax.loadComplete(t);
658
execute: function () {
659
this.hook.call(this.object, this, this.data[0], this.data[1]);
661
checkSafari2: function (t, e, i) {
663
(document.styleSheets.length > e &&
664
document.styleSheets[e].cssRules &&
665
document.styleSheets[e].cssRules.length
667
: setTimeout(t, t.delay));
669
checkLength: function (t, i, n) {
672
s = i.sheet || i.styleSheet;
674
(s.cssRules || s.rules || []).length > 0 && (a = 1);
676
t.message.match(/protected variable|restricted URI/)
678
: t.message.match(/Security error/) && (a = 1);
681
? setTimeout(e.Callback([n, t.STATUS.OK]), 0)
682
: setTimeout(t, t.delay);
686
loadComplete: function (t) {
688
var i = this.loading[t];
691
? (e.Message.Clear(i.message),
692
clearTimeout(i.timeout),
694
(0 === s.length && setTimeout(r, 0), s.push(i.script)),
695
(this.loaded[t] = i.status),
696
delete this.loading[t],
697
this.addHook(t, i.callback))
698
: (i && delete this.loading[t],
699
(this.loaded[t] = this.STATUS.OK),
700
(i = { status: this.STATUS.OK })),
701
this.loadHooks[t] ? this.loadHooks[t].Execute(i.status) : null
704
loadTimeout: function (t) {
705
this.loading[t].timeout && clearTimeout(this.loading[t].timeout),
706
(this.loading[t].status = this.STATUS.ERROR),
708
this.loadComplete(t);
710
loadError: function (t) {
712
["LoadFailed", "File failed to load: %1", t],
716
e.Hub.signal.Post(["file load error", t]);
718
Styles: function (t, i) {
719
var n = this.StyleString(t);
720
if ("" === n) (i = e.Callback(i))();
722
var s = document.createElement("style");
723
(s.type = "text/css"),
724
(this.head = a(this.head)),
725
this.head.appendChild(s),
726
s.styleSheet && void 0 !== s.styleSheet.cssText
727
? (s.styleSheet.cssText = n)
728
: s.appendChild(document.createTextNode(n)),
729
(i = this.timer.create.call(this, i, s));
733
StyleString: function (t) {
734
if ("string" == typeof t) return t;
739
if (t.hasOwnProperty(i))
740
if ("string" == typeof t[i]) a += i + " {" + t[i] + "}\n";
741
else if (e.Object.isArray(t[i]))
742
for (var s = 0; s < t[i].length; s++)
743
((n = {})[i] = t[i][s]), (a += this.StyleString(n));
744
else if ("@media" === i.substr(0, 6))
745
a += i + " {" + this.StyleString(t[i]) + "}\n";
746
else if (null != t[i]) {
747
for (var r in ((n = []), t[i]))
748
t[i].hasOwnProperty(r) &&
750
(n[n.length] = r + ": " + t[i][r]);
751
a += i + " {" + n.join("; ") + "}\n";
758
Element: function (t, e, i) {
760
a = document.createElement(t);
762
if (e.hasOwnProperty("style")) {
764
for (n in ((e.style = {}), s))
765
s.hasOwnProperty(n) &&
766
(e.style[n.replace(/-([a-z])/g, this.ucMatch)] = s[n]);
768
for (n in (MathJax.Hub.Insert(a, e), e))
769
("role" !== n && "aria-" !== n.substr(0, 5)) ||
770
a.setAttribute(n, e[n]);
773
MathJax.Object.isArray(i) || (i = [i]);
774
for (var r = 0, o = i.length; r < o; r++)
775
MathJax.Object.isArray(i[r])
776
? a.appendChild(this.Element(i[r][0], i[r][1], i[r][2]))
778
? this.setScript(a, i[r])
779
: a.appendChild(document.createTextNode(i[r]));
783
ucMatch: function (t, e) {
784
return e.toUpperCase();
786
addElement: function (t, e, i, n) {
787
return t.appendChild(this.Element(e, i, n));
789
TextNode: function (t) {
790
return document.createTextNode(t);
792
addText: function (t, e) {
793
return t.appendChild(this.TextNode(e));
795
setScript: function (t, e) {
796
if (this.setScriptBug) t.text = e;
798
for (; t.firstChild; ) t.removeChild(t.firstChild);
802
getScript: function (t) {
803
return ("" === t.text ? t.innerHTML : t.text)
805
.replace(/\s+$/, "");
810
Set: function (t, e) {
814
e.hasOwnProperty(n) &&
815
i.push(n + ":" + e[n].toString().replace(/&/g, "&&"));
816
var a = this.prefix + "." + t + "=" + escape(i.join("&;"));
819
s.setDate(s.getDate() + this.expires),
820
(a += "; expires=" + s.toGMTString());
823
document.cookie = a + "; path=/";
826
Get: function (t, e) {
830
"(?:^|;\\s*)" + this.prefix + "\\." + t + "=([^;]*)(?:;|$)"
833
i = n.exec(document.cookie);
835
if (i && "" !== i[1])
837
var a = unescape(i[1]).split("&;"), s = 0, r = a.length;
841
var o = (i = a[s].match(/([^:]+):(.*)/))[2].replace(/&&/g, "&");
846
: o.match(/^-?(\d+(\.\d+)?|\.\d+)$/) && (o = parseFloat(o)),
853
(MathJax.Localization = {
855
directory: "[MathJax]/localization",
857
ar: { menuTitle: "العربية" },
858
ast: { menuTitle: "asturianu" },
859
bg: { menuTitle: "български" },
860
bcc: { menuTitle: "بلوچی" },
861
br: { menuTitle: "brezhoneg" },
862
ca: { menuTitle: "català" },
863
cdo: { menuTitle: "Mìng-dĕ̤ng-ngṳ̄" },
864
cs: { menuTitle: "čeština" },
865
da: { menuTitle: "dansk" },
866
de: { menuTitle: "Deutsch" },
867
diq: { menuTitle: "Zazaki" },
868
en: { menuTitle: "English", isLoaded: !0 },
869
eo: { menuTitle: "Esperanto" },
870
es: { menuTitle: "español" },
871
fa: { menuTitle: "فارسی" },
872
fi: { menuTitle: "suomi" },
873
fr: { menuTitle: "français" },
874
gl: { menuTitle: "galego" },
875
he: { menuTitle: "עברית" },
876
ia: { menuTitle: "interlingua" },
877
it: { menuTitle: "italiano" },
878
ja: { menuTitle: "日本語" },
879
kn: { menuTitle: "ಕನ್ನಡ" },
880
ko: { menuTitle: "한국어" },
881
lb: { menuTitle: "Lëtzebuergesch" },
882
lki: { menuTitle: "لەکی" },
883
lt: { menuTitle: "lietuvių" },
884
mk: { menuTitle: "македонски" },
885
nl: { menuTitle: "Nederlands" },
886
oc: { menuTitle: "occitan" },
887
pl: { menuTitle: "polski" },
888
pt: { menuTitle: "português" },
889
"pt-br": { menuTitle: "português do Brasil" },
890
ru: { menuTitle: "русский" },
891
sco: { menuTitle: "Scots" },
892
scn: { menuTitle: "sicilianu" },
893
sk: { menuTitle: "slovenčina" },
894
sl: { menuTitle: "slovenščina" },
895
sv: { menuTitle: "svenska" },
896
th: { menuTitle: "ไทย" },
897
tr: { menuTitle: "Türkçe" },
898
uk: { menuTitle: "українська" },
899
vi: { menuTitle: "Tiếng Việt" },
900
"zh-hans": { menuTitle: "中文(简体)" },
901
"zh-hant": { menuTitle: "汉语" },
904
/%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g,
906
3 === "axb".split(/(x)/).length
914
for (e.lastIndex = 0; (i = e.exec(t)); )
915
n.push(t.substr(a, i.index - a)),
916
n.push.apply(n, i.slice(1)),
917
(a = i.index + i[0].length);
918
return n.push(t.substr(a)), n;
921
return MathJax.Object.isArray(e)
922
? this.processSnippet(t, e)
923
: this.processString(
924
this.lookupPhrase(t, e),
925
[].slice.call(arguments, 2)
928
processString: function (t, e, i) {
931
s = MathJax.Object.isArray;
932
for (n = 0, a = e.length; n < a; n++)
933
i && s(e[n]) && (e[n] = this.processSnippet(i, e[n]));
934
var r = this.SPLIT(t, this.pattern);
935
for (n = 1, a = r.length; n < a; n += 2) {
936
var o = r[n].charAt(0);
937
if (o >= "0" && o <= "9")
938
(r[n] = e[r[n] - 1]),
939
"number" == typeof r[n] && (r[n] = this.number(r[n]));
941
if ((o = r[n].substr(1)) >= "0" && o <= "9")
942
(r[n] = e[r[n].substr(1, r[n].length - 2) - 1]),
943
"number" == typeof r[n] && (r[n] = this.number(r[n]));
945
var h = r[n].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);
947
if ("plural" === h[1]) {
949
if (void 0 === l) r[n] = "???";
951
l = this.plural(l) - 1;
953
.replace(/(^|[^%])(%%)*%\|/g, "$1$2%")
955
l >= 0 && l < u.length
956
? (r[n] = this.processString(
957
u[l].replace(/\uEFEF/g, "|"),
963
} else r[n] = "%" + r[n];
965
null == r[n] && (r[n] = "???");
967
if (!i) return r.join("");
970
for (n = 0; n < a; n++)
974
? (c.push(p), (c = c.concat(r[n])), (p = ""))
976
return "" !== p && c.push(p), c;
978
processSnippet: function (t, e) {
979
for (var i = [], n = 0, a = e.length; n < a; n++)
980
if (MathJax.Object.isArray(e[n])) {
982
if ("string" == typeof s[1]) {
984
MathJax.Object.isArray(r) || (r = [t, r]);
985
var o = this.lookupPhrase(r, s[1]);
986
i = i.concat(this.processMarkdown(o, s.slice(2), t));
988
MathJax.Object.isArray(s[1])
989
? (i = i.concat(this.processSnippet.apply(this, s)))
991
? i.push([s[0], s[1], this.processSnippet(t, s[2])])
997
/(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,
998
processMarkdown: function (t, e, i) {
1002
s = t.split(this.markdownPattern),
1010
? ((n = this.processString(s[o + 2], e, i)),
1011
MathJax.Object.isArray(n) || (n = [n]),
1012
(n = [["b", "i", "i"][s[o + 1].length - 1], {}, n]),
1013
3 === s[o + 1].length && (n = ["b", {}, n]))
1015
? ((n = this.processString(
1016
s[o + 4].replace(/^\s/, "").replace(/\s$/, ""),
1020
MathJax.Object.isArray(n) || (n = [n]),
1021
(n = ["code", {}, n]))
1023
? ((n = this.processString(s[o + 5], e, i)),
1024
MathJax.Object.isArray(n) || (n = [n]),
1027
{ href: this.processString(s[o + 6], e), target: "_blank" },
1030
: ((r += s[o]), (n = null)),
1031
n && ((a = this.concatString(a, r, e, i)).push(n), (r = "")),
1032
"" !== s[o + 7] && (r += s[o + 7]);
1033
return (a = this.concatString(a, r, e, i));
1035
concatString: function (t, e, i, n) {
1038
((e = this.processString(e, i, n)),
1039
MathJax.Object.isArray(e) || (e = [e]),
1044
lookupPhrase: function (t, e, i) {
1046
MathJax.Object.isArray(t) && ((i = t[0] || "_"), (t = t[1] || ""));
1047
var n = this.loadDomain(i);
1048
n && MathJax.Hub.RestartAfter(n);
1049
var a = this.strings[this.locale];
1050
if (a && a.domains && i in a.domains) {
1051
var s = a.domains[i];
1052
s.strings && t in s.strings && (e = s.strings[t]);
1056
loadFile: function (t, e, i) {
1057
((i = MathJax.Callback(i)),
1058
(t = e.file || t).match(/\.js$/) || (t += ".js"),
1059
t.match(/^([a-z]+:|\[MathJax\])/)) ||
1061
(this.strings[this.locale].directory ||
1062
this.directory + "/" + this.locale ||
1063
"[MathJax]/localization/" + this.locale) +
1066
var n = MathJax.Ajax.Require(t, function () {
1067
return (e.isLoaded = !0), i();
1069
return n.called ? null : n;
1071
loadDomain: function (t, e) {
1073
n = this.strings[this.locale];
1075
if (!n.isLoaded && (i = this.loadFile(this.locale, n)))
1076
return MathJax.Callback.Queue(i, ["loadDomain", this, t]).Push(
1079
if (n.domains && t in n.domains) {
1080
var a = n.domains[t];
1081
if (!a.isLoaded && (i = this.loadFile(t, a)))
1082
return MathJax.Callback.Queue(i).Push(e);
1085
return MathJax.Callback(e)();
1088
(t = MathJax.Callback(t)).autoReset = !0;
1092
if (!e.restart) throw e;
1093
MathJax.Callback.After(["Try", this, t], e.restart);
1096
resetLocale: function (t) {
1098
for (t = t.toLowerCase(); !this.strings[t]; ) {
1099
var e = t.lastIndexOf("-");
1100
if (-1 === e) return;
1101
t = t.substring(0, e);
1103
var i = this.strings[t].remap;
1104
(this.locale = i || t),
1105
MathJax.Callback.Signal("Hub").Post(["Locale Reset", this.locale]);
1108
setLocale: function (t) {
1109
this.resetLocale(t), MathJax.Menu && this.loadDomain("MathMenu");
1111
addTranslation: function (t, e, i) {
1112
var n = this.strings[t],
1114
n || ((n = this.strings[t] = {}), (a = !0)),
1115
n.domains || (n.domains = {}),
1116
e && (n.domains[e] || (n.domains[e] = {}), (n = n.domains[e])),
1117
MathJax.Hub.Insert(n, i),
1118
a && MathJax.Menu.menu && MathJax.Menu.CreateLocaleMenu();
1120
setCSS: function (t) {
1121
var e = this.strings[this.locale];
1124
(e.fontFamily && (t.style.fontFamily = e.fontFamily),
1126
((t.style.direction = e.fontDirection),
1127
"rtl" === e.fontDirection && (t.style.textAlign = "right"))),
1131
fontFamily: function () {
1132
var t = this.strings[this.locale];
1133
return t ? t.fontFamily : null;
1135
fontDirection: function () {
1136
var t = this.strings[this.locale];
1137
return t ? t.fontDirection : null;
1139
plural: function (t) {
1140
var e = this.strings[this.locale];
1141
return e && e.plural ? e.plural(t) : 1 == t ? 1 : 2;
1143
number: function (t) {
1144
var e = this.strings[this.locale];
1145
return e && e.number ? e.number(t) : t;
1148
(MathJax.Message = {
1153
("Apple Computer, Inc." === navigator.vendor &&
1154
void 0 === navigator.vendorSub) ||
1155
(window.hasOwnProperty && window.hasOwnProperty("konqueror")),
1157
"#MathJax_Message": {
1161
"background-color": "#E6E6E6",
1162
border: "1px solid #959595",
1169
"white-space": "nowrap",
1171
"#MathJax_MSIE_Frame": {
1172
position: "absolute",
1183
MSIE: function (t) {
1184
(MathJax.Message.msieFixedPositionBug =
1185
(document.documentMode || 0) < 7),
1186
MathJax.Message.msieFixedPositionBug &&
1187
(MathJax.Hub.config.styles["#MathJax_Message"].position =
1189
(MathJax.Message.quirks = "BackCompat" === document.compatMode);
1191
Chrome: function (t) {
1192
(MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em"),
1193
(MathJax.Hub.config.styles["#MathJax_Message"].left = "1em");
1196
Init: function (t) {
1197
if ((t && (this.ready = !0), !document.body || !this.ready)) return !1;
1200
null == this.div.parentNode &&
1201
((this.div = document.getElementById("MathJax_Message")),
1202
(this.text = this.div ? this.div.firstChild : null)),
1205
var e = document.body;
1206
this.msieFixedPositionBug &&
1207
window.attachEvent &&
1208
((e = this.frame = this.addDiv(document.body)).removeAttribute(
1211
(e.style.position = "absolute"),
1212
(e.style.border = e.style.margin = e.style.padding = "0px"),
1213
(e.style.zIndex = "101"),
1214
(e.style.height = "0px"),
1215
((e = this.addDiv(e)).id = "MathJax_MSIE_Frame"),
1216
window.attachEvent("onscroll", this.MoveFrame),
1217
window.attachEvent("onresize", this.MoveFrame),
1219
(this.div = this.addDiv(e)),
1220
(this.div.style.display = "none");
1224
(this.text = this.div.appendChild(document.createTextNode(""))),
1228
addDiv: function (t) {
1229
var e = document.createElement("div");
1231
(e.id = "MathJax_Message"),
1232
t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e),
1236
MoveFrame: function () {
1237
var t = MathJax.Message.quirks
1239
: document.documentElement,
1240
e = MathJax.Message.frame;
1241
(e.style.left = t.scrollLeft + "px"),
1242
(e.style.top = t.scrollTop + "px"),
1243
(e.style.width = t.clientWidth + "px"),
1244
((e = e.firstChild).style.height = t.clientHeight + "px");
1246
localize: function (t) {
1247
return MathJax.Localization._(t, t);
1249
filterText: function (t, e, i) {
1251
"simple" === MathJax.Hub.config.messageStyle &&
1254
(this.loading = this.localize("Loading") + " "),
1256
(this.loading += "."))
1257
: "ProcessMath" === i
1258
? (this.processing ||
1259
(this.processing = this.localize("Processing") + " "),
1260
(t = this.processing),
1261
(this.processing += "."))
1262
: "TypesetMath" === i &&
1263
(this.typesetting ||
1264
(this.typesetting = this.localize("Typesetting") + " "),
1265
(t = this.typesetting),
1266
(this.typesetting += "."))),
1270
clearCounts: function () {
1271
delete this.loading, delete this.processing, delete this.typesetting;
1273
Set: function (t, e, i) {
1274
null == e && ((e = this.log.length), (this.log[e] = {}));
1276
if (MathJax.Object.isArray(t)) {
1277
(n = t[0]), MathJax.Object.isArray(n) && (n = n[1]);
1279
t = MathJax.Localization._.apply(MathJax.Localization, t);
1281
if (!n.restart) throw n;
1282
if (!n.restart.called)
1284
null == this.log[e].restarted && (this.log[e].restarted = 0),
1285
this.log[e].restarted++,
1286
delete this.log[e].cleared,
1287
MathJax.Callback.After(["Set", this, t, e, i], n.restart),
1293
this.timer && (clearTimeout(this.timer), delete this.timer),
1294
(this.log[e].text = t),
1295
(this.log[e].filteredText = t = this.filterText(t, e, n)),
1296
void 0 === this.log[e].next &&
1297
((this.log[e].next = this.current),
1298
null != this.current && (this.log[this.current].prev = e),
1299
(this.current = e)),
1300
this.current === e &&
1301
"none" !== MathJax.Hub.config.messageStyle &&
1304
? (this.div.innerHTML = t)
1305
: (this.text.nodeValue = t),
1306
(this.div.style.display = ""),
1307
this.status && ((window.status = ""), delete this.status))
1308
: ((window.status = t), (this.status = !0))),
1309
this.log[e].restarted &&
1310
(this.log[e].cleared && (i = 0),
1311
0 == --this.log[e].restarted && delete this.log[e].cleared),
1313
? setTimeout(MathJax.Callback(["Clear", this, e]), i)
1314
: 0 == i && this.Clear(e, 0),
1318
Clear: function (t, e) {
1319
null != this.log[t].prev &&
1320
(this.log[this.log[t].prev].next = this.log[t].next),
1321
null != this.log[t].next &&
1322
(this.log[this.log[t].next].prev = this.log[t].prev),
1323
this.current === t &&
1324
((this.current = this.log[t].next),
1326
? (null == this.div.parentNode && this.Init(),
1327
null == this.current
1329
(clearTimeout(this.timer), delete this.timer),
1330
null == e && (e = 600),
1333
: (this.timer = setTimeout(
1334
MathJax.Callback(["Remove", this]),
1337
: "none" !== MathJax.Hub.config.messageStyle &&
1339
? (this.div.innerHTML =
1340
this.log[this.current].filteredText)
1341
: (this.text.nodeValue =
1342
this.log[this.current].filteredText)),
1343
this.status && ((window.status = ""), delete this.status))
1346
null == this.current ? "" : this.log[this.current].text)),
1347
delete this.log[t].next,
1348
delete this.log[t].prev,
1349
delete this.log[t].filteredText,
1350
this.log[t].restarted && (this.log[t].cleared = !0);
1352
Remove: function () {
1353
(this.text.nodeValue = ""), (this.div.style.display = "none");
1355
File: function (t) {
1356
return this.Set(["LoadFile", "Loading %1", t], null, null);
1359
for (var t = [], e = 1, i = this.log.length; e < i; e++)
1360
t[e] = this.log[e].text;
1361
return t.join("\n");
1369
styles: { ".MathJax_Preview": { color: "#888", display: "contents" } },
1374
displayAlign: "center",
1376
preRemoveClass: "MathJax_Preview",
1377
showProcessingMessages: !0,
1378
messageStyle: "normal",
1379
delayStartupUntil: "none",
1380
skipStartupTypeset: !1,
1384
showMathMenuMSIE: !0,
1406
message: ["[", ["MathProcessingError", "Math Processing Error"], "]"],
1407
style: { color: "#CC0000", "font-style": "italic" },
1409
ignoreMMLattributes: {},
1411
preProcessors: MathJax.Callback.Hooks(!0),
1413
outputJax: { order: {} },
1414
processSectionDelay: 50,
1415
processUpdateTime: 250,
1416
processUpdateDelay: 10,
1417
signal: MathJax.Callback.Signal("Hub"),
1418
Config: function (t) {
1419
this.Insert(this.config, t),
1420
this.config.Augment && this.Augment(this.config.Augment);
1422
CombineConfig: function (t, e) {
1424
var i, n, a = this.config, s = 0, r = (t = t.split(/\./)).length;
1428
a[(i = t[s])] || (a[i] = {}), (n = a), (a = a[i]);
1429
return (n[i] = a = this.Insert(e, a)), a;
1432
PreProcessor: function () {
1433
return MathJax.Hub.preProcessors.Add.apply(
1434
MathJax.Hub.preProcessors,
1438
MessageHook: function () {
1439
return MathJax.Hub.signal.MessageHook.apply(
1444
StartupHook: function () {
1445
return MathJax.Hub.Startup.signal.MessageHook.apply(
1446
MathJax.Hub.Startup.signal,
1450
LoadHook: function () {
1451
return MathJax.Ajax.LoadHook.apply(MathJax.Ajax, arguments);
1455
PreProcessor: function (t) {
1456
MathJax.Hub.preProcessors.Remove(t);
1458
MessageHook: function (t) {
1459
MathJax.Hub.signal.RemoveHook(t);
1461
StartupHook: function (t) {
1462
MathJax.Hub.Startup.signal.RemoveHook(t);
1464
LoadHook: function (t) {
1465
MathJax.Ajax.removeHook(t);
1468
getAllJax: function (t) {
1470
var e = [], i = this.elementScripts(t), n = 0, a = i.length;
1475
i[n].MathJax.elementJax &&
1476
e.push(i[n].MathJax.elementJax);
1479
getJaxByType: function (t, e) {
1481
var i = [], n = this.elementScripts(e), a = 0, s = n.length;
1486
n[a].MathJax.elementJax &&
1487
n[a].MathJax.elementJax.mimeType === t &&
1488
i.push(n[a].MathJax.elementJax);
1491
getJaxByInputType: function (t, e) {
1493
var i = [], n = this.elementScripts(e), a = 0, s = n.length;
1498
n[a].MathJax.elementJax &&
1500
n[a].type.replace(/ *;(.|\s)*/, "") === t &&
1501
i.push(n[a].MathJax.elementJax);
1504
getJaxFor: function (t) {
1506
("string" == typeof t && (t = document.getElementById(t)),
1509
return t.MathJax.elementJax;
1510
if (this.isMathJaxNode(t)) {
1511
for (t.isMathJax || (t = t.firstChild); t && !t.jaxID; )
1513
if (t) return MathJax.OutputJax[t.jaxID].getJaxFromMath(t);
1517
isJax: function (t) {
1519
("string" == typeof t && (t = document.getElementById(t)),
1520
this.isMathJaxNode(t))
1523
if (t && "script" === (t.tagName || "").toLowerCase()) {
1525
return t.MathJax.state === MathJax.ElementJax.STATE.PROCESSED
1528
if (t.type && this.inputJax[t.type.replace(/ *;(.|\s)*/, "")])
1533
isMathJaxNode: function (t) {
1534
return !!t && (t.isMathJax || "MathJax_MathML" === (t.className || ""));
1536
setRenderer: function (t, e) {
1538
var i = MathJax.OutputJax[t];
1540
(this.config.menuSettings.renderer = t),
1541
null == e && (e = "jax/mml"),
1542
i.isUnknown && i.Register(e);
1543
var n = this.outputJax;
1544
return n[e] && n[e].length && t !== n[e][0].id
1545
? (n[e].unshift(i), this.signal.Post(["Renderer Selected", t]))
1548
(MathJax.OutputJax[t] = MathJax.OutputJax({
1553
(this.config.menuSettings.renderer = "");
1554
var a = "[MathJax]/jax/output/" + t + "/config.js";
1555
return MathJax.Ajax.Require(a, ["setRenderer", this, t, e]);
1558
Queue: function () {
1559
return this.queue.Push.apply(this.queue, arguments);
1561
Typeset: function (t, e) {
1562
if (!MathJax.isReady) return null;
1563
var i = this.elementCallback(t, e);
1565
var n = MathJax.Callback.Queue(
1566
["PreProcess", this, i.elements],
1567
["Process", this, i.elements]
1569
return n.Push(i.callback);
1571
PreProcess: function (t, e) {
1572
var i = this.elementCallback(t, e),
1573
n = MathJax.Callback.Queue();
1575
var a = 1 === i.count ? [i.elements] : i.elements;
1576
n.Push(["Post", this.signal, ["Begin PreProcess", i.elements]]);
1577
for (var s = 0, r = a.length; s < r; s++)
1578
a[s] && n.Push(["Execute", this.preProcessors, a[s]]);
1579
n.Push(["Post", this.signal, ["End PreProcess", i.elements]]);
1581
return n.Push(i.callback);
1583
Process: function (t, e) {
1584
return this.takeAction("Process", t, e);
1586
Update: function (t, e) {
1587
return this.takeAction("Update", t, e);
1589
Reprocess: function (t, e) {
1590
return this.takeAction("Reprocess", t, e);
1592
Rerender: function (t, e) {
1593
return this.takeAction("Rerender", t, e);
1595
takeAction: function (t, e, i) {
1596
var n = this.elementCallback(e, i),
1598
s = MathJax.Callback.Queue(["Clear", this.signal]),
1601
start: new Date().getTime(),
1608
var o = ["Delay", MathJax.Callback, this.processSectionDelay];
1611
["clearCounts", MathJax.Message],
1612
["Post", this.signal, ["Begin " + t, a]],
1613
["Post", this.signal, ["Begin Math", a, t]],
1614
["prepareScripts", this, t, a, r],
1615
["Post", this.signal, ["Begin Math Input", a, t]],
1616
["processInput", this, r],
1617
["Post", this.signal, ["End Math Input", a, t]],
1619
["prepareOutput", this, r, "preProcess"],
1621
["Post", this.signal, ["Begin Math Output", a, t]],
1622
["processOutput", this, r],
1623
["Post", this.signal, ["End Math Output", a, t]],
1625
["prepareOutput", this, r, "postProcess"],
1627
["Post", this.signal, ["End Math", a, t]],
1628
["Post", this.signal, ["End " + t, a]],
1629
["clearCounts", MathJax.Message]
1632
return s.Push(n.callback);
1635
Process: function (t) {},
1636
Update: function (t) {
1637
var e = t.MathJax.elementJax;
1638
e && e.needsUpdate()
1639
? (e.Remove(!0), (t.MathJax.state = e.STATE.UPDATE))
1640
: (t.MathJax.state = e.STATE.PROCESSED);
1642
Reprocess: function (t) {
1643
var e = t.MathJax.elementJax;
1644
e && (e.Remove(!0), (t.MathJax.state = e.STATE.UPDATE));
1646
Rerender: function (t) {
1647
var e = t.MathJax.elementJax;
1648
e && (e.Remove(!0), (t.MathJax.state = e.STATE.OUTPUT));
1651
prepareScripts: function (t, e, i) {
1652
if (!arguments.callee.disabled)
1654
var n = this.elementScripts(e),
1655
a = MathJax.ElementJax.STATE,
1663
this.inputJax[o.type.replace(/ *;(.|\n)*/, "")] &&
1665
(o.MathJax.elementJax &&
1666
o.MathJax.elementJax.hover &&
1667
MathJax.Extension.MathEvents.Hover.ClearHover(
1668
o.MathJax.elementJax
1670
o.MathJax.state !== a.PENDING && this.scriptAction[t](o)),
1671
o.MathJax || (o.MathJax = { state: a.PENDING }),
1672
o.MathJax.error && delete o.MathJax.error,
1673
o.MathJax.state !== a.PROCESSED && i.scripts.push(o));
1676
checkScriptSiblings: function (t) {
1677
if (!t.MathJax.checked) {
1678
var e = this.config,
1679
i = t.previousSibling;
1680
if (i && "#text" === i.nodeName) {
1684
s && "#text" !== s.nodeName && (s = null),
1686
("string" == typeof e.preJax &&
1687
(e.preJax = new RegExp(e.preJax + "$")),
1688
(n = i.nodeValue.match(e.preJax))),
1691
("string" == typeof e.postJax &&
1692
(e.postJax = new RegExp("^" + e.postJax)),
1693
(a = s.nodeValue.match(e.postJax))),
1695
(e.postJax && !a) ||
1696
((i.nodeValue = i.nodeValue.replace(
1698
n.length > 1 ? n[1] : ""
1703
(s.nodeValue = s.nodeValue.replace(
1705
a.length > 1 ? a[1] : ""
1707
i && !i.nodeValue.match(/\S/) && (i = i.previousSibling);
1711
i.className === e.preRemoveClass &&
1712
(t.MathJax.preview = i),
1713
(t.MathJax.checked = 1);
1716
processInput: function (t) {
1720
a = MathJax.ElementJax.STATE,
1721
s = t.scripts.length;
1724
if ((i = t.scripts[t.i]))
1726
((n = i.previousSibling) &&
1727
"MathJax_Error" === n.className &&
1728
n.parentNode.removeChild(n),
1729
i.parentNode && i.MathJax && i.MathJax.state !== a.PROCESSED)
1731
if (i.MathJax.elementJax && i.MathJax.state !== a.UPDATE)
1732
i.MathJax.state === a.OUTPUT &&
1733
this.saveScript(i.MathJax.elementJax, t, i, a);
1735
this.checkScriptSiblings(i);
1736
var r = i.type.replace(/ *;(.|\s)*/, ""),
1737
o = this.inputJax[r];
1738
if ("function" == typeof (e = o.Process(i, t))) {
1739
if (e.called) continue;
1740
this.RestartAfter(e);
1742
(e = e.Attach(i, o.id)),
1743
this.saveScript(e, t, i, a),
1744
this.postInputHooks.Execute(e, o.id, i);
1747
var h = new Date().getTime();
1748
h - t.start > this.processUpdateTime &&
1749
t.i < t.scripts.length &&
1750
((t.start = h), this.RestartAfter(MathJax.Callback.Delay(1)));
1754
return this.processError(e, t, "Input");
1758
this.config.showProcessingMessages &&
1759
MathJax.Message.Set(
1760
["ProcessMath", "Processing math: %1%%", 100],
1763
(t.start = new Date().getTime()),
1768
postInputHooks: MathJax.Callback.Hooks(!0),
1769
saveScript: function (t, e, i, n) {
1770
if (!this.outputJax[t.mimeType])
1772
((i.MathJax.state = n.UPDATE),
1773
Error("No output jax registered for " + t.mimeType))
1775
(t.outputJax = this.outputJax[t.mimeType][0].id),
1776
e.jax[t.outputJax] ||
1777
(0 === e.jaxIDs.length
1778
? (e.jax[t.outputJax] = e.scripts)
1779
: (1 === e.jaxIDs.length &&
1780
(e.jax[e.jaxIDs[0]] = e.scripts.slice(0, e.i)),
1781
(e.jax[t.outputJax] = [])),
1782
e.jaxIDs.push(t.outputJax)),
1783
e.jaxIDs.length > 1 && e.jax[t.outputJax].push(i),
1784
(i.MathJax.state = n.OUTPUT);
1786
prepareOutput: function (t, e) {
1787
for (; t.j < t.jaxIDs.length; ) {
1788
var i = t.jaxIDs[t.j],
1789
n = MathJax.OutputJax[i];
1793
if ("function" == typeof a) {
1794
if (a.called) continue;
1795
this.RestartAfter(a);
1800
(MathJax.Message.Set(
1801
["PrepError", "Error preparing %1 output (%2)", i, e],
1805
(MathJax.Hub.lastPrepError = n),
1807
MathJax.Callback.After(["prepareOutput", this, t, e], n.restart)
1814
processOutput: function (t) {
1816
i = MathJax.ElementJax.STATE,
1817
n = t.scripts.length;
1821
(e = t.scripts[t.i]) &&
1826
var a = e.MathJax.elementJax;
1828
!1 !== MathJax.OutputJax[a.outputJax].Process(e, t) &&
1829
((e.MathJax.state = i.PROCESSED),
1830
e.MathJax.preview &&
1831
((e.MathJax.preview.innerHTML = ""),
1832
(e.MathJax.preview.style.display = "none")),
1833
this.signal.Post(["New Math", a.inputID])),
1835
var s = new Date().getTime();
1836
s - t.start > this.processUpdateTime &&
1837
t.i < t.scripts.length &&
1840
MathJax.Callback.Delay(this.processUpdateDelay)
1845
return this.processError(e, t, "Output");
1849
this.config.showProcessingMessages &&
1850
(MathJax.Message.Set(
1851
["TypesetMath", "Typesetting math: %1%%", 100],
1854
MathJax.Message.Clear(0)),
1859
processMessage: function (t, e) {
1860
var i = Math.floor((t.i / t.scripts.length) * 100),
1863
? ["TypesetMath", "Typesetting math: %1%%"]
1864
: ["ProcessMath", "Processing math: %1%%"];
1865
this.config.showProcessingMessages &&
1866
MathJax.Message.Set(n.concat(i), 0);
1868
processError: function (t, e, i) {
1870
if (!this.config.errorSettings.message) throw t;
1871
this.formatError(e.scripts[e.i], t), e.i++;
1874
this.processMessage(e, i),
1875
MathJax.Callback.After(["process" + i, this, e], t.restart)
1878
formatError: function (t, e) {
1879
var i = function (t, e, i, n) {
1880
return MathJax.Localization._(t, e, i, n);
1882
n = i("ErrorMessage", "Error: %1", e.message) + "\n";
1883
(e.sourceURL || e.fileName) &&
1884
(n += "\n" + i("ErrorFile", "file: %1", e.sourceURL || e.fileName)),
1885
(e.line || e.lineNumber) &&
1886
(n += "\n" + i("ErrorLine", "line: %1", e.line || e.lineNumber)),
1891
"Debugging tips: use %1, inspect %2 in the browser console",
1892
"'unpacked/MathJax.js'",
1893
"'MathJax.Hub.lastError'"
1895
(t.MathJax.error = MathJax.OutputJax.Error.Jax(n, t)),
1896
t.MathJax.elementJax &&
1897
(t.MathJax.error.inputID = t.MathJax.elementJax.inputID);
1898
var a = this.config.errorSettings,
1899
s = i(a.messageId, a.message),
1900
r = MathJax.HTML.Element(
1903
className: "MathJax_Error",
1906
id: t.MathJax.error.inputID + "-Frame",
1910
MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js", function () {
1911
var e = MathJax.Extension.MathEvents.Event,
1913
(r.oncontextmenu = e.Menu),
1914
(r.onmousedown = e.Mousedown),
1915
(r.onkeydown = e.Keydown),
1916
(r.tabIndex = i.getTabOrder(i.getJaxFor(t)));
1918
var o = document.getElementById(r.id);
1919
o && o.parentNode.removeChild(o),
1920
t.parentNode && t.parentNode.insertBefore(r, t),
1921
t.MathJax.preview &&
1922
((t.MathJax.preview.innerHTML = ""),
1923
(t.MathJax.preview.style.display = "none")),
1924
(this.lastError = e),
1925
this.signal.Post(["Math Processing Error", t, e]);
1927
RestartAfter: function (t) {
1928
throw this.Insert(Error("restart"), { restart: MathJax.Callback(t) });
1930
elementCallback: function (t, e) {
1931
if (null == e && (MathJax.Object.isArray(t) || "function" == typeof t))
1933
MathJax.Callback(t), (e = t), (t = null);
1935
null == t && (t = this.config.elements || []),
1936
this.isHTMLCollection(t) && (t = this.HTMLCollection2Array(t)),
1937
MathJax.Object.isArray(t) || (t = [t]);
1938
for (var i = 0, n = (t = [].concat(t)).length; i < n; i++)
1939
"string" == typeof t[i] && (t[i] = document.getElementById(t[i]));
1942
(document.body = document.getElementsByTagName("body")[0]),
1943
0 == t.length && t.push(document.body),
1945
{ count: t.length, elements: 1 === t.length ? t[0] : t, callback: e }
1948
elementScripts: function (t) {
1950
if (MathJax.Object.isArray(t) || this.isHTMLCollection(t)) {
1951
for (var i = 0, n = t.length; i < n; i++) {
1952
for (var a = 0, s = 0; s < i && !a; s++) a = t[s].contains(t[i]);
1953
a || e.push.apply(e, this.elementScripts(t[i]));
1958
"string" == typeof t && (t = document.getElementById(t)),
1960
(document.body = document.getElementsByTagName("body")[0]),
1961
null == t && (t = document.body),
1962
null != t.tagName && "script" === t.tagName.toLowerCase()
1964
: ((e = t.getElementsByTagName("script")),
1965
this.msieHTMLCollectionBug && (e = this.HTMLCollection2Array(e)),
1969
isHTMLCollection: function (t) {
1971
"HTMLCollection" in window &&
1972
"object" == typeof t &&
1973
t instanceof HTMLCollection
1976
HTMLCollection2Array: function (t) {
1977
if (!this.msieHTMLCollectionBug) return [].slice.call(t);
1978
for (var e = [], i = 0, n = t.length; i < n; i++) e[i] = t[i];
1981
Insert: function (t, e) {
1983
e.hasOwnProperty(i) &&
1984
("object" != typeof e[i] ||
1985
MathJax.Object.isArray(e[i]) ||
1986
("object" != typeof t[i] && "function" != typeof t[i])
1988
: this.Insert(t[i], e[i]));
1991
getTabOrder: function (t) {
1992
return this.config.menuSettings.inTabOrder ? 0 : -1;
1995
"trim" in String.prototype
1997
return t.trim().split(/\s+/);
2000
return t.replace(/^\s+/, "").replace(/\s+$/, "").split(/\s+/);
2003
MathJax.Hub.Insert(MathJax.Hub.config.styles, MathJax.Message.styles),
2004
MathJax.Hub.Insert(MathJax.Hub.config.styles, {
2005
".MathJax_Error": MathJax.Hub.config.errorSettings.style,
2007
(MathJax.Extension = {}),
2008
(MathJax.Hub.Configured = MathJax.Callback({})),
2009
(MathJax.Hub.Startup = {
2011
queue: MathJax.Callback.Queue(),
2012
signal: MathJax.Callback.Signal("Startup"),
2014
Config: function () {
2016
(this.queue.Push(["Post", this.signal, "Begin Config"]),
2017
MathJax.AuthorConfig &&
2018
MathJax.AuthorConfig.root &&
2019
(MathJax.Ajax.config.root = MathJax.AuthorConfig.root),
2020
this.params.locale &&
2021
(MathJax.Localization.resetLocale(this.params.locale),
2022
(MathJax.Hub.config.menuSettings.locale = this.params.locale)),
2026
var t = this.params.config.split(/,/), e = 0, i = t.length;
2030
t[e].match(/\.js$/) || (t[e] += ".js"),
2034
this.URL("config", t[e]),
2036
this.queue.Push(["Config", MathJax.Hub, MathJax.AuthorConfig]),
2037
this.script.match(/\S/) && this.queue.Push(this.script + ";\n1;"),
2039
["ConfigDelay", this],
2040
["ConfigBlocks", this],
2044
MathJax.Hub.config.config,
2052
["Post", this.signal, "End Config"]
2055
ConfigDelay: function () {
2057
this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil;
2058
return "onload" === t
2060
: "configured" === t
2061
? MathJax.Hub.Configured
2064
ConfigBlocks: function () {
2066
var t = document.getElementsByTagName("script"),
2067
e = MathJax.Callback.Queue(),
2073
var a = String(t[i].type).replace(/ /g, "");
2074
a.match(/^text\/x-mathjax-config(;.*)?$/) &&
2075
!a.match(/;executed=true/) &&
2076
((t[i].type += ";executed=true"), e.Push(t[i].innerHTML + ";\n1;"));
2078
return e.Push(function () {
2079
MathJax.Ajax.config.root = MathJax.Hub.config.root;
2082
Cookie: function () {
2083
return this.queue.Push(
2084
["Post", this.signal, "Begin Cookie"],
2085
["Get", MathJax.HTML.Cookie, "menu", MathJax.Hub.config.menuSettings],
2088
var e = t.menuSettings;
2089
e.locale && MathJax.Localization.resetLocale(e.locale);
2090
var i = t.menuSettings.renderer,
2093
var a = "output/" + i;
2096
var s = 0, r = n.length;
2097
s < r && "output/" !== n[s].substr(0, 7);
2100
if (s == r - 1) n.pop();
2111
null != e.CHTMLpreview &&
2112
(null == e.FastPreview && (e.FastPreview = e.CHTMLpreview),
2113
delete e.CHTMLpreview),
2115
!MathJax.Extension["fast-preview"] &&
2116
MathJax.Hub.config.extensions.push("fast-preview.js"),
2117
t.menuSettings.assistiveMML &&
2118
!MathJax.Extension.AssistiveMML &&
2119
MathJax.Hub.config.extensions.push("AssistiveMML.js");
2123
["Post", this.signal, "End Cookie"]
2126
Styles: function () {
2127
return this.queue.Push(
2128
["Post", this.signal, "Begin Styles"],
2129
["loadArray", this, MathJax.Hub.config.styleSheets, "config"],
2130
["Styles", MathJax.Ajax, MathJax.Hub.config.styles],
2131
["Post", this.signal, "End Styles"]
2136
var t = MathJax.Hub.config,
2137
e = MathJax.Hub.outputJax,
2144
var s = t.jax[i].substr(7);
2145
"output/" === t.jax[i].substr(0, 7) &&
2146
null == e.order[s] &&
2147
((e.order[s] = a), a++);
2149
return MathJax.Callback.Queue().Push(
2150
["Post", this.signal, "Begin Jax"],
2151
["loadArray", this, t.jax, "jax", "config.js"],
2152
["Post", this.signal, "End Jax"]
2155
Extensions: function () {
2156
return MathJax.Callback.Queue().Push(
2157
["Post", this.signal, "Begin Extensions"],
2158
["loadArray", this, MathJax.Hub.config.extensions, "extensions"],
2159
["Post", this.signal, "End Extensions"]
2162
Message: function () {
2163
MathJax.Message.Init(!0);
2167
e = MathJax.Hub.config.menuSettings,
2168
i = MathJax.Hub.outputJax;
2170
if (i.hasOwnProperty(n) && i[n].length) {
2177
e.renderer !== t[0].id &&
2178
t.unshift(MathJax.OutputJax[e.renderer]),
2179
(e.renderer = t[0].id));
2183
MathJax.Hub.config.positionToHash &&
2184
document.location.hash &&
2186
document.body.scrollIntoView
2188
var t = decodeURIComponent(document.location.hash.substr(1)),
2189
e = document.getElementById(t);
2192
var i = document.getElementsByTagName("a"), n = 0, a = i.length;
2196
if (i[n].name === t) {
2201
for (; !e.scrollIntoView; ) e = e.parentNode;
2202
(e = this.HashCheck(e)) &&
2204
setTimeout(function () {
2205
e.scrollIntoView(!0);
2210
HashCheck: function (t) {
2211
var e = MathJax.Hub.getJaxFor(t);
2214
MathJax.OutputJax[e.outputJax].hashCheck &&
2215
(t = MathJax.OutputJax[e.outputJax].hashCheck(t)),
2219
MenuZoom: function () {
2220
MathJax.Hub.config.showMathMenu &&
2221
(MathJax.Extension.MathMenu
2225
MathJax.Localization,
2230
: setTimeout(function () {
2231
MathJax.Callback.Queue(
2235
"[MathJax]/extensions/MathMenu.js",
2238
["loadDomain", MathJax.Localization, "MathMenu"]
2241
MathJax.Extension.MathZoom ||
2246
"[MathJax]/extensions/MathZoom.js",
2252
onLoad: function () {
2253
var t = (this.onload = MathJax.Callback(function () {
2254
MathJax.Hub.Startup.signal.Post("onLoad");
2256
if (document.body && document.readyState)
2257
if (MathJax.Hub.Browser.isMSIE) {
2258
if ("complete" === document.readyState) return [t];
2259
} else if ("loading" !== document.readyState) return [t];
2261
window.addEventListener
2262
? (window.addEventListener("load", t, !1),
2263
this.params.noDOMContentEvent ||
2264
window.addEventListener("DOMContentLoaded", t, !1))
2265
: window.attachEvent
2266
? window.attachEvent("onload", t)
2267
: (window.onload = t),
2271
Typeset: function (t, e) {
2272
return MathJax.Hub.config.skipStartupTypeset
2275
["Post", this.signal, "Begin Typeset"],
2276
["Typeset", MathJax.Hub, t, e],
2277
["Post", this.signal, "End Typeset"]
2280
URL: function (t, e) {
2282
e.match(/^([a-z]+:\/\/|\[|\/)/) || (e = "[MathJax]/" + t + "/" + e), e
2285
loadArray: function (t, e, i, n) {
2286
if (t && (MathJax.Object.isArray(t) || (t = [t]), t.length)) {
2288
var a, s = MathJax.Callback.Queue(), r = {}, o = 0, h = t.length;
2292
(a = this.URL(e, t[o])),
2293
i && (a += "/" + i),
2295
? s.Push(["Require", MathJax.Ajax, a, r])
2296
: s.Push(MathJax.Ajax.Require(a, r));
2303
var e = window.MathJax,
2308
r = MathJax.Object.Subclass(
2313
Init: function (t, e) {
2314
return 0 === arguments.length
2316
: this.constructor.Subclass(t, e)();
2318
Augment: function (t, e) {
2319
var i = this.constructor,
2323
t.hasOwnProperty(s) &&
2324
("function" == typeof t[s]
2325
? i.protoFunction(s, t[s])
2327
t.toString !== i.prototype.toString &&
2328
t.toString !== {}.toString &&
2329
i.protoFunction("toString", t.toString);
2331
return n.Insert(i.prototype, a), i.Augment(null, e), this;
2333
Translate: function (t, e) {
2338
" failed to define the Translate() method"
2341
Register: function (t) {},
2342
Config: function () {
2343
(this.config = n.CombineConfig(this.id, this.config)),
2344
this.config.Augment && this.Augment(this.config.Augment);
2346
Startup: function () {},
2347
loadComplete: function (t) {
2348
if ("config.js" === t)
2349
return a.loadComplete(this.directory + "/" + t);
2353
n.Register.StartupHook("End Config", {}),
2354
["Post", n.Startup.signal, this.id + " Jax Config"],
2356
["Post", n.Startup.signal, this.id + " Jax Require"],
2359
return MathJax.Hub.Startup.loadArray(
2368
return MathJax.Hub.Startup.loadArray(
2376
["Post", n.Startup.signal, this.id + " Jax Startup"],
2378
["Post", n.Startup.signal, this.id + " Jax Ready"]
2380
this.copyTranslate &&
2383
(t.preProcess = t.preTranslate),
2384
(t.Process = t.Translate),
2385
(t.postProcess = t.postTranslate);
2387
this.constructor.prototype,
2389
e.Push(["loadComplete", a, this.directory + "/" + t])
2396
directory: i + "/jax",
2397
extensionDir: i + "/extensions",
2400
(e.InputJax = r.Subclass(
2403
sourceMenuTitle: ["Original", "Original Form"],
2405
Process: function (t, i) {
2408
h = this.elementJax;
2409
e.Object.isArray(h) || (h = [h]);
2410
for (var l = 0, u = h.length; l < u; l++)
2411
(r = e.ElementJax.directory + "/" + h[l] + "/" + this.JAXFILE),
2413
? e.Object.isArray(this.require) ||
2414
(this.require = [this.require])
2415
: (this.require = []),
2416
this.require.push(r),
2417
o.Push(a.Require(r));
2418
r = this.directory + "/" + this.JAXFILE;
2419
var c = o.Push(a.Require(r));
2422
(this.constructor.prototype.Process = function () {
2423
if (!c.called) return c;
2424
throw Error(r + " failed to load properly");
2426
(h = n.outputJax["jax/" + h[0]]) &&
2427
o.Push(a.Require(h[0].directory + "/" + this.JAXFILE)),
2431
needsUpdate: function (t) {
2432
var i = t.SourceElement();
2433
return t.originalText !== e.HTML.getScript(i);
2435
Register: function (t) {
2436
n.inputJax || (n.inputJax = {}), (n.inputJax[t] = this);
2442
directory: r.directory + "/input",
2443
extensionDir: r.extensionDir,
2446
(e.OutputJax = r.Subclass(
2449
preProcess: function (t) {
2451
i = this.directory + "/" + this.JAXFILE;
2453
(this.constructor.prototype.preProcess = function (t) {
2454
if (!e.called) return e;
2455
throw Error(i + " failed to load properly");
2460
Process: function (t) {
2461
throw Error(this.id + " output jax failed to load properly");
2463
Register: function (t) {
2464
var i = n.outputJax;
2465
i[t] || (i[t] = []),
2467
(this.id === n.config.menuSettings.renderer ||
2468
(i.order[this.id] || 0) < (i.order[i[t][0].id] || 0))
2469
? i[t].unshift(this)
2472
? e.Object.isArray(this.require) ||
2473
(this.require = [this.require])
2474
: (this.require = []),
2476
e.ElementJax.directory +
2483
Remove: function (t) {},
2488
directory: r.directory + "/output",
2489
extensionDir: r.extensionDir,
2490
fontDir: i + (e.isPacked ? "" : "/..") + "/fonts",
2491
imageDir: i + (e.isPacked ? "" : "/..") + "/images",
2494
(e.ElementJax = r.Subclass(
2496
Init: function (t, e) {
2497
return this.constructor.Subclass(t, e);
2504
sourceMenuTitle: ["MathMLcode", "MathML Code"],
2505
Text: function (t, i) {
2506
var a = this.SourceElement();
2508
e.HTML.setScript(a, t),
2509
(a.MathJax.state = this.STATE.UPDATE),
2513
Reprocess: function (t) {
2514
var e = this.SourceElement();
2515
return (e.MathJax.state = this.STATE.UPDATE), n.Reprocess(e, t);
2517
Update: function (t) {
2518
return this.Rerender(t);
2520
Rerender: function (t) {
2521
var e = this.SourceElement();
2522
return (e.MathJax.state = this.STATE.OUTPUT), n.Process(e, t);
2524
Remove: function (t) {
2525
this.hover && this.hover.clear(this),
2526
e.OutputJax[this.outputJax].Remove(this),
2528
(n.signal.Post(["Remove Math", this.inputID]), this.Detach());
2530
needsUpdate: function () {
2531
return e.InputJax[this.inputJax].needsUpdate(this);
2533
SourceElement: function () {
2534
return document.getElementById(this.inputID);
2536
Attach: function (t, i) {
2537
var n = t.MathJax.elementJax;
2539
t.MathJax.state === this.STATE.UPDATE
2541
: ((n = t.MathJax.elementJax = this),
2543
? (this.inputID = t.id)
2544
: ((t.id = this.inputID = e.ElementJax.GetID()),
2546
(n.originalText = e.HTML.getScript(t)),
2548
n.root && (n.root.inputID = n.inputID),
2552
Detach: function () {
2553
var t = this.SourceElement();
2560
this.newID && (t.id = "");
2563
Clone: function (t) {
2566
this.hasOwnProperty(e) &&
2571
t.hasOwnProperty(e) &&
2572
(void 0 === this[e] ||
2573
(this[e] !== t[e] && "inputID" !== e)) &&
2580
directory: r.directory + "/element",
2581
extensionDir: r.extensionDir,
2583
STATE: { PENDING: 1, PROCESSED: 2, UPDATE: 3, OUTPUT: 4 },
2584
GetID: function () {
2585
return this.ID++, "MathJax-Element-" + this.ID;
2587
Subclass: function () {
2588
var t = r.Subclass.apply(this, arguments);
2589
return (t.loadComplete = this.prototype.loadComplete), t;
2593
(e.ElementJax.prototype.STATE = e.ElementJax.STATE),
2594
(e.OutputJax.Error = {
2599
ContextMenu: function () {
2600
return e.Extension.MathEvents.Event.ContextMenu.apply(
2601
e.Extension.MathEvents.Event,
2605
Mousedown: function () {
2606
return e.Extension.MathEvents.Event.AltContextMenu.apply(
2607
e.Extension.MathEvents.Event,
2611
getJaxFromMath: function (t) {
2612
return (t.nextSibling.MathJax || {}).error;
2614
Jax: function (t, e) {
2615
var i = MathJax.Hub.inputJax[e.type.replace(/ *;(.|\s)*/, "")];
2619
inputJax: (i || { id: "Error" }).id,
2621
inputID: "MathJax-Error-" + this.errors,
2622
sourceMenuTitle: ["ErrorMessage", "Error Message"],
2623
sourceMenuFormat: "Error",
2624
originalText: MathJax.HTML.getScript(e),
2630
(e.InputJax.Error = {
2634
sourceMenuTitle: ["Original", "Original Form"],
2638
var e = window.MathJax;
2639
e || (e = window.MathJax = {});
2643
s = document.head || document.getElementsByTagName("head")[0];
2644
s || (s = document.childNodes[0]);
2645
var r = (document.documentElement || document).getElementsByTagName(
2650
(r = document.getElementsByTagNameNS(s.namespaceURI, "script"));
2652
var o = new RegExp("(^|/)MathJax\\.js(\\?.*)?$"), h = r.length - 1;
2656
if ((r[h].src || "").match(o)) {
2657
if (((n.script = r[h].innerHTML), RegExp.$2))
2659
var l = RegExp.$2.substr(1).split(/\&/), u = 0, c = l.length;
2663
var p = l[u].match(/(.*)=(.*)/);
2665
? (n.params[unescape(p[1])] = unescape(p[2]))
2666
: (n.params[l[u]] = !0);
2668
(a.root = r[h].src.replace(/(^|\/)[^\/]*(\?.*)?$/, "")),
2669
(e.Ajax.config.root = a.root),
2670
(e.Ajax.params = n.params);
2673
var d = navigator.userAgent,
2675
isMac: "Mac" === navigator.platform.substr(0, 3),
2676
isPC: "Win" === navigator.platform.substr(0, 3),
2677
isMSIE: "ActiveXObject" in window && "clipboardData" in window,
2679
"MSGestureEvent" in window &&
2680
"chrome" in window &&
2681
null == window.chrome.loadTimes,
2682
isFirefox: !!d.match(/Gecko\//) && !d.match(/like Gecko/),
2684
!d.match(/ (Apple)?WebKit\//) ||
2685
d.match(/ like iPhone /) ||
2686
(window.chrome && null != window.chrome.app)
2688
isChrome: "chrome" in window && null != window.chrome.loadTimes,
2689
isOpera: "opera" in window && null != window.opera.version,
2690
isKonqueror: "konqueror" in window && "KDE" == navigator.vendor,
2691
versionAtLeast: function (t) {
2693
var e = this.version.split("."),
2695
n = (t = new String(t).split(".")).length;
2699
if (e[i] != t[i]) return parseInt(e[i] || "0") >= parseInt(t[i]);
2702
Select: function (t) {
2703
var e = t[i.Browser];
2704
return e ? e(i.Browser) : null;
2708
.replace(/^Mozilla\/(\d+\.)+\d+ /, "")
2710
/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,
2713
.replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/, "");
2714
for (var x in ((i.Browser = i.Insert(
2715
i.Insert(new String("Unknown"), { version: "0.0" }),
2719
if (f.hasOwnProperty(x) && f[x] && "is" === x.substr(0, 2)) {
2720
if ("Mac" === (x = x.slice(2)) || "PC" === x) continue;
2721
i.Browser = i.Insert(new String(x), f);
2723
".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|.*(" +
2726
("MSIE" == x ? " " : "/") +
2727
"((?:\\d+\\.)*\\d+)|(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"
2728
).exec(g) || ["", "", "", "unknown", "0.0"];
2729
(i.Browser.name = "" != m[1] ? x : m[3] || m[5]),
2730
(i.Browser.version = m[2] || m[4] || m[6]);
2735
Safari: function (t) {
2736
var e = parseInt(String(t.version).split(".")[0]);
2737
e > 85 && (t.webkit = t.version),
2739
? (t.version = "8.0")
2741
? (t.version = "7.0")
2743
? (t.version = "6.0")
2745
? (t.version = "5.1")
2747
? (t.version = "5.0")
2749
? (t.version = "4.0")
2751
? (t.version = "3.1")
2753
? (t.version = "3.0")
2755
? (t.version = "2.0")
2756
: e > 85 && (t.version = "1.0"),
2757
(t.webkit = navigator.appVersion.match(/WebKit\/(\d+)\./)[1]),
2758
(t.isMobile = null != navigator.appVersion.match(/Mobile/i)),
2759
(t.noContextMenu = t.isMobile);
2761
Firefox: function (t) {
2763
("0.0" === t.version || null == d.match(/Firefox/)) &&
2764
"Gecko" === navigator.product
2766
var e = d.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
2767
if (e) t.version = e[1];
2770
navigator.buildID ||
2771
navigator.productSub ||
2775
? (t.version = "9.0")
2777
? (t.version = "8.0")
2779
? (t.version = "7.0")
2781
? (t.version = "6.0")
2783
? (t.version = "5.0")
2785
? (t.version = "4.0")
2787
? (t.version = "3.6")
2789
? (t.version = "3.5")
2791
? (t.version = "3.0")
2792
: i >= "20061024" && (t.version = "2.0");
2796
null != navigator.appVersion.match(/Android/i) ||
2797
null != d.match(/ Fennec\//) ||
2798
null != d.match(/Mobile/);
2800
Chrome: function (t) {
2801
t.noContextMenu = t.isMobile =
2802
!!navigator.userAgent.match(/ Mobile[ \/]/);
2804
Opera: function (t) {
2805
t.version = opera.version();
2807
Edge: function (t) {
2808
t.isMobile = !!navigator.userAgent.match(/ Phone/);
2810
MSIE: function (t) {
2812
((t.isMobile = !!navigator.userAgent.match(/ Phone/)),
2814
!document.documentMode ||
2815
(!window.performance && !window.msPerformance)
2817
(MathJax.HTML.setScriptBug =
2818
!t.isIE9 || document.documentMode < 9),
2819
(MathJax.Hub.msieHTMLCollectionBug = document.documentMode < 9),
2820
document.documentMode < 10 && !n.params.NoMathPlayer)
2823
new ActiveXObject("MathPlayer.Factory.1"),
2824
(t.hasMathPlayer = !0);
2827
if (t.hasMathPlayer) {
2828
var e = document.createElement("object");
2829
(e.id = "mathplayer"),
2830
(e.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987"),
2832
document.namespaces.add(
2834
"http://www.w3.org/1998/Math/MathML"
2836
(t.mpNamespace = !0),
2837
!document.readyState ||
2838
("loading" !== document.readyState &&
2839
"interactive" !== document.readyState) ||
2841
'<?import namespace="m" implementation="#MathPlayer">'
2843
(t.mpImported = !0));
2845
document.namespaces.add(
2847
"http://www.w3.org/1999/xlink"
2854
console.error(t.message);
2856
i.Browser.Select(MathJax.Message.browsers),
2858
"function" == typeof e.AuthorConfig.AuthorInit &&
2859
e.AuthorConfig.AuthorInit(),
2860
(i.queue = e.Callback.Queue()),
2862
["Post", n.signal, "Begin"],
2868
return e.Callback.Queue(n.Jax(), n.Extensions()).Push({});
2873
MathJax.isReady = !0;
2878
["Post", n.signal, "End"]