MathML Block - Version 1.1.2

Version Description

Download this release

Release Info

Developer adamsilverstein
Plugin Icon 128x128 MathML Block
Version 1.1.2
Comparing to
See all releases

Version 1.1.2

Files changed (86) hide show
  1. .dist-ignore +38 -0
  2. .eslintrc.json +40 -0
  3. LICENSE +339 -0
  4. README.md +20 -0
  5. assets/banner-1544x500.png +0 -0
  6. assets/banner-772x250.png +0 -0
  7. assets/icon-128x128.png +0 -0
  8. assets/icon-256x256.png +0 -0
  9. assets/screencast.gif +0 -0
  10. assets/screenshot-1.png +0 -0
  11. dist/mathml-block.js +274 -0
  12. dist/mathml-block.js.map +1 -0
  13. mathml-block.php +75 -0
  14. package-lock.json +7412 -0
  15. package.json +35 -0
  16. readme.txt +61 -0
  17. src/mathml-block.css +3 -0
  18. src/mathml-block.js +71 -0
  19. src/mathml-inline.js +46 -0
  20. vendor/MathJax/.gitignore +2 -0
  21. vendor/MathJax/.npmignore +7 -0
  22. vendor/MathJax/.travis.yml +17 -0
  23. vendor/MathJax/MathJax.js +3324 -0
  24. vendor/MathJax/config/AM_CHTML-full.js +21 -0
  25. vendor/MathJax/config/AM_CHTML.js +21 -0
  26. vendor/MathJax/config/AM_HTMLorMML-full.js +22 -0
  27. vendor/MathJax/config/AM_HTMLorMML.js +22 -0
  28. vendor/MathJax/config/AM_SVG-full.js +21 -0
  29. vendor/MathJax/config/AM_SVG.js +21 -0
  30. vendor/MathJax/config/Accessible-full.js +30 -0
  31. vendor/MathJax/config/Accessible.js +30 -0
  32. vendor/MathJax/config/MML_CHTML-full.js +21 -0
  33. vendor/MathJax/config/MML_CHTML.js +21 -0
  34. vendor/MathJax/config/MML_HTMLorMML-full.js +22 -0
  35. vendor/MathJax/config/MML_HTMLorMML.js +22 -0
  36. vendor/MathJax/config/MML_SVG-full.js +21 -0
  37. vendor/MathJax/config/MML_SVG.js +21 -0
  38. vendor/MathJax/config/MMLorHTML.js +111 -0
  39. vendor/MathJax/config/Safe.js +37 -0
  40. vendor/MathJax/config/TeX-AMS-MML_HTMLorMML-full.js +22 -0
  41. vendor/MathJax/config/TeX-AMS-MML_HTMLorMML.js +22 -0
  42. vendor/MathJax/config/TeX-AMS-MML_SVG-full.js +21 -0
  43. vendor/MathJax/config/TeX-AMS-MML_SVG.js +21 -0
  44. vendor/MathJax/config/TeX-AMS_CHTML-full.js +21 -0
  45. vendor/MathJax/config/TeX-AMS_CHTML.js +21 -0
  46. vendor/MathJax/config/TeX-AMS_HTML-full.js +21 -0
  47. vendor/MathJax/config/TeX-AMS_HTML.js +21 -0
  48. vendor/MathJax/config/TeX-AMS_SVG-full.js +21 -0
  49. vendor/MathJax/config/TeX-AMS_SVG.js +21 -0
  50. vendor/MathJax/config/TeX-MML-AM_CHTML-full.js +21 -0
  51. vendor/MathJax/config/TeX-MML-AM_CHTML.js +21 -0
  52. vendor/MathJax/config/TeX-MML-AM_HTMLorMML-full.js +22 -0
  53. vendor/MathJax/config/TeX-MML-AM_HTMLorMML.js +22 -0
  54. vendor/MathJax/config/TeX-MML-AM_SVG-full.js +21 -0
  55. vendor/MathJax/config/TeX-MML-AM_SVG.js +21 -0
  56. vendor/MathJax/config/default.js +1104 -0
  57. vendor/MathJax/config/local/local.js +40 -0
  58. vendor/MathJax/extensions/AssistiveMML.js +161 -0
  59. vendor/MathJax/extensions/CHTML-preview.js +30 -0
  60. vendor/MathJax/extensions/FontWarnings.js +313 -0
  61. vendor/MathJax/extensions/HTML-CSS/handle-floats.js +49 -0
  62. vendor/MathJax/extensions/HelpDialog.js +203 -0
  63. vendor/MathJax/extensions/MatchWebFonts.js +309 -0
  64. vendor/MathJax/extensions/MathEvents.js +619 -0
  65. vendor/MathJax/extensions/MathML/content-mathml.js +1743 -0
  66. vendor/MathJax/extensions/MathML/mml3.js +784 -0
  67. vendor/MathJax/extensions/MathMenu.js +1664 -0
  68. vendor/MathJax/extensions/MathZoom.js +366 -0
  69. vendor/MathJax/extensions/Safe.js +428 -0
  70. vendor/MathJax/extensions/TeX/AMScd.js +158 -0
  71. vendor/MathJax/extensions/TeX/AMSmath.js +658 -0
  72. vendor/MathJax/extensions/TeX/AMSsymbols.js +349 -0
  73. vendor/MathJax/extensions/TeX/HTML.js +106 -0
  74. vendor/MathJax/extensions/TeX/action.js +83 -0
  75. vendor/MathJax/extensions/TeX/autobold.js +50 -0
  76. vendor/MathJax/extensions/TeX/autoload-all.js +83 -0
  77. vendor/MathJax/extensions/TeX/bbox.js +102 -0
  78. vendor/MathJax/extensions/TeX/begingroup.js +292 -0
  79. vendor/MathJax/extensions/TeX/boldsymbol.js +75 -0
  80. vendor/MathJax/extensions/TeX/cancel.js +110 -0
  81. vendor/MathJax/extensions/TeX/color.js +281 -0
  82. vendor/MathJax/extensions/TeX/enclose.js +91 -0
  83. vendor/MathJax/extensions/TeX/extpfeil.js +102 -0
  84. vendor/MathJax/extensions/TeX/mathchoice.js +107 -0
  85. vendor/MathJax/extensions/TeX/mediawiki-texvc.js +137 -0
  86. vendor/MathJax/extensions/TeX/mhchem.js +362 -0
.dist-ignore ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /.wordpress-org
2
+ /.git
3
+ /.github
4
+ /.babelrc
5
+ /.eslintignore
6
+ /phpcs.xml
7
+ /node_modules
8
+ /tests
9
+ /bin
10
+ /phpunit.xml
11
+
12
+ # Exclude vendor folder, except required dependencies.
13
+ /vendor
14
+ !/vendor/composer
15
+ !/vendor/autoload.php
16
+ !/vendor/abraham
17
+ !/vendor/symfony
18
+ !/vendor/myclabs
19
+
20
+ .babelrc
21
+ .distignore
22
+ .eslintignore
23
+ .eslintrc.json
24
+ .gitignore
25
+ CHANGELOG.md
26
+ CODE_OF_CONDUCT.md
27
+ CONTRIBUTING.md
28
+ composer.json
29
+ composer.lock
30
+ CREDITS.md
31
+ LICENSE.md
32
+ package-lock.json
33
+ package.json
34
+ phpcs.xml
35
+ phpunit.xml
36
+ README.md
37
+ webpack.config.js
38
+ webpack.gutenberg.config.js
.eslintrc.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": [
3
+ "eslint:recommended",
4
+ "plugin:react/recommended",
5
+ "wordpress"
6
+ ],
7
+ "parser": "babel-eslint",
8
+ "env": {
9
+ "browser": true,
10
+ "es6": true
11
+ },
12
+ "rules": {
13
+ "yoda": [ 1 ],
14
+ "comma-dangle": [ 0 ],
15
+ "indent": [ 1, "tab", { "SwitchCase": 2 } ],
16
+ "linebreak-style": [ 1, "unix" ],
17
+ "quotes": [ 1, "single" ],
18
+ "space-in-parens": [ 1, "always" ],
19
+ "object-curly-spacing": [ 1, "always" ],
20
+ "no-console": [ 1 ],
21
+ "no-alert": [ 1 ],
22
+ "camelcase": [ 1 ],
23
+ "no-debugger": [ 1 ],
24
+ "no-extra-boolean-cast": [ 1 ],
25
+ "react/react-in-jsx-scope": [ 0 ],
26
+ "react/jsx-curly-spacing": [ 2, { "when": "always", "children": true } ],
27
+ "no-unused-vars": [ "error", { "varsIgnorePattern": "React" } ],
28
+ "react/prop-types": [ 0 ],
29
+ "function-paren-newline": [ "error", "consistent" ]
30
+ },
31
+ "settings": {
32
+ "react": {
33
+ "version": "16.2.0"
34
+ }
35
+ },
36
+ "globals": {
37
+ "React": true,
38
+ "MathJax": true
39
+ }
40
+ }
LICENSE ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
README.md ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # A MathML block for the WordPress block editor (Gutenberg).
2
+
3
+ ## Description
4
+
5
+ * Enables MathML math formulas blocks in the editor.
6
+ * Uses the MathJax library to render the formulas: https://www.mathjax.org
7
+
8
+ ### What is MathML?
9
+
10
+ Mathematical Markup Language is a mathematical markup language, an application of XML for describing mathematical notations and capturing both its structure and content. It aims at integrating mathematical formulae into World Wide Web pages and other documents.
11
+
12
+ The MathML block uses MathJax to render MathML formulas in the editor and on the front end of a website. MathJax (https://www.mathjax.org/) is _A JavaScript display engine for mathematics that works in all browsers._
13
+
14
+ To test a MathML block and enter a formula, for example: `\[x = {-b \pm \sqrt{b^2-4ac} \over 2a}\]`.
15
+
16
+ To test using math formulas inline, type an formula into a block of text, select it and hit the 'M' icon in the control bar. For example: `\( \cos(θ+φ)=\cos(θ)\cos(φ)−\sin(θ)\sin(φ) \)`. _Note: if you are copying and pasting formulas into the rich text editor, switching to HTML/code editor mode is less likely to reformat your pasted formula._
17
+
18
+ ## Screencast
19
+
20
+ ![](https://cl.ly/c0f6bbfbc3b1/Screen%252520Recording%2525202018-12-25%252520at%25252008.12%252520AM.gif)
assets/banner-1544x500.png ADDED
Binary file
assets/banner-772x250.png ADDED
Binary file
assets/icon-128x128.png ADDED
Binary file
assets/icon-256x256.png ADDED
Binary file
assets/screencast.gif ADDED
Binary file
assets/screenshot-1.png ADDED
Binary file
dist/mathml-block.js ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /******/ (function(modules) { // webpackBootstrap
2
+ /******/ // The module cache
3
+ /******/ var installedModules = {};
4
+ /******/
5
+ /******/ // The require function
6
+ /******/ function __webpack_require__(moduleId) {
7
+ /******/
8
+ /******/ // Check if module is in cache
9
+ /******/ if(installedModules[moduleId]) {
10
+ /******/ return installedModules[moduleId].exports;
11
+ /******/ }
12
+ /******/ // Create a new module (and put it into the cache)
13
+ /******/ var module = installedModules[moduleId] = {
14
+ /******/ i: moduleId,
15
+ /******/ l: false,
16
+ /******/ exports: {}
17
+ /******/ };
18
+ /******/
19
+ /******/ // Execute the module function
20
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
+ /******/
22
+ /******/ // Flag the module as loaded
23
+ /******/ module.l = true;
24
+ /******/
25
+ /******/ // Return the exports of the module
26
+ /******/ return module.exports;
27
+ /******/ }
28
+ /******/
29
+ /******/
30
+ /******/ // expose the modules object (__webpack_modules__)
31
+ /******/ __webpack_require__.m = modules;
32
+ /******/
33
+ /******/ // expose the module cache
34
+ /******/ __webpack_require__.c = installedModules;
35
+ /******/
36
+ /******/ // define getter function for harmony exports
37
+ /******/ __webpack_require__.d = function(exports, name, getter) {
38
+ /******/ if(!__webpack_require__.o(exports, name)) {
39
+ /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40
+ /******/ }
41
+ /******/ };
42
+ /******/
43
+ /******/ // define __esModule on exports
44
+ /******/ __webpack_require__.r = function(exports) {
45
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47
+ /******/ }
48
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
49
+ /******/ };
50
+ /******/
51
+ /******/ // create a fake namespace object
52
+ /******/ // mode & 1: value is a module id, require it
53
+ /******/ // mode & 2: merge all properties of value into the ns
54
+ /******/ // mode & 4: return value when already ns object
55
+ /******/ // mode & 8|1: behave like require
56
+ /******/ __webpack_require__.t = function(value, mode) {
57
+ /******/ if(mode & 1) value = __webpack_require__(value);
58
+ /******/ if(mode & 8) return value;
59
+ /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60
+ /******/ var ns = Object.create(null);
61
+ /******/ __webpack_require__.r(ns);
62
+ /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63
+ /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64
+ /******/ return ns;
65
+ /******/ };
66
+ /******/
67
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
68
+ /******/ __webpack_require__.n = function(module) {
69
+ /******/ var getter = module && module.__esModule ?
70
+ /******/ function getDefault() { return module['default']; } :
71
+ /******/ function getModuleExports() { return module; };
72
+ /******/ __webpack_require__.d(getter, 'a', getter);
73
+ /******/ return getter;
74
+ /******/ };
75
+ /******/
76
+ /******/ // Object.prototype.hasOwnProperty.call
77
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78
+ /******/
79
+ /******/ // __webpack_public_path__
80
+ /******/ __webpack_require__.p = "";
81
+ /******/
82
+ /******/
83
+ /******/ // Load entry module and return exports
84
+ /******/ return __webpack_require__(__webpack_require__.s = 0);
85
+ /******/ })
86
+ /************************************************************************/
87
+ /******/ ({
88
+
89
+ /***/ "./node_modules/css-loader/dist/cjs.js!./src/mathml-block.css":
90
+ /*!********************************************************************!*\
91
+ !*** ./node_modules/css-loader/dist/cjs.js!./src/mathml-block.css ***!
92
+ \********************************************************************/
93
+ /*! no static exports found */
94
+ /***/ (function(module, exports, __webpack_require__) {
95
+
96
+ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \".toolbar-button__advanced-mathml:before {\\n\\tcontent: 'M';\\n}\", \"\"]);\n// Exports\nmodule.exports = exports;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9tYXRobWwtYmxvY2suY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL21hdGhtbC1ibG9jay5jc3M/NmY4MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG52YXIgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fID0gcmVxdWlyZShcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIik7XG5leHBvcnRzID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKGZhbHNlKTtcbi8vIE1vZHVsZVxuZXhwb3J0cy5wdXNoKFttb2R1bGUuaWQsIFwiLnRvb2xiYXItYnV0dG9uX19hZHZhbmNlZC1tYXRobWw6YmVmb3JlIHtcXG5cXHRjb250ZW50OiAnTSc7XFxufVwiLCBcIlwiXSk7XG4vLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/cjs.js!./src/mathml-block.css\n");
97
+
98
+ /***/ }),
99
+
100
+ /***/ "./node_modules/css-loader/dist/runtime/api.js":
101
+ /*!*****************************************************!*\
102
+ !*** ./node_modules/css-loader/dist/runtime/api.js ***!
103
+ \*****************************************************/
104
+ /*! no static exports found */
105
+ /***/ (function(module, exports, __webpack_require__) {
106
+
107
+ "use strict";
108
+ eval("\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\n\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcz8yNGZiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1c2VTb3VyY2VNYXApIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtLCB1c2VTb3VyY2VNYXApO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbignJyk7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCAnJ11dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59O1xuXG5mdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV0gfHwgJyc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuXG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8ICcnKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59IC8vIEFkYXB0ZWQgZnJvbSBjb252ZXJ0LXNvdXJjZS1tYXAgKE1JVClcblxuXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcbiAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICByZXR1cm4gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/dist/runtime/api.js\n");
109
+
110
+ /***/ }),
111
+
112
+ /***/ "./node_modules/process/browser.js":
113
+ /*!*****************************************!*\
114
+ !*** ./node_modules/process/browser.js ***!
115
+ \*****************************************/
116
+ /*! no static exports found */
117
+ /***/ (function(module, exports) {
118
+
119
+ eval("// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcz9mMjhjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/process/browser.js\n");
120
+
121
+ /***/ }),
122
+
123
+ /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
124
+ /*!****************************************************************************!*\
125
+ !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
126
+ \****************************************************************************/
127
+ /*! no static exports found */
128
+ /***/ (function(module, exports, __webpack_require__) {
129
+
130
+ "use strict";
131
+ eval("\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = true ? __webpack_require__.nc : undefined;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanM/MmRiYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzT2xkSUUgPSBmdW5jdGlvbiBpc09sZElFKCkge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKCkge1xuICAgIGlmICh0eXBlb2YgbWVtbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG4gICAgICAvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG4gICAgICAvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuICAgICAgbWVtbyA9IEJvb2xlYW4od2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2IpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICB2YXIgbWVtbyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vW3RhcmdldF07XG4gIH07XG59KCk7XG5cbnZhciBzdHlsZXNJbkRvbSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRG9tLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM11cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc0luRG9tLnB1c2goe1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiBhZGRTdHlsZShvYmosIG9wdGlvbnMpLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgYXR0cmlidXRlcy5ub25jZSA9IG5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKS5jb25jYXQob2JqLmNzcywgXCJ9XCIpIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJyk7XG4gIH1cblxuICBpZiAoc291cmNlTWFwICYmIGJ0b2EpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyIHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xuXG5mdW5jdGlvbiBhZGRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIHN0eWxlO1xuICB2YXIgdXBkYXRlO1xuICB2YXIgcmVtb3ZlO1xuXG4gIGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuICAgIHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuICAgIHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuICAgIHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUgPSBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZShvYmopO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKTtcbiAgICB9XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307IC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuICAvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cbiAgaWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09ICdib29sZWFuJykge1xuICAgIG9wdGlvbnMuc2luZ2xldG9uID0gaXNPbGRJRSgpO1xuICB9XG5cbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdMaXN0KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG5cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG5cbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG5cbiAgICAgIGlmIChzdHlsZXNJbkRvbVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5Eb21bX2luZGV4XS51cGRhdGVyKCk7XG5cbiAgICAgICAgc3R5bGVzSW5Eb20uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\n");
132
+
133
+ /***/ }),
134
+
135
+ /***/ "./node_modules/util/node_modules/inherits/inherits_browser.js":
136
+ /*!*********************************************************************!*\
137
+ !*** ./node_modules/util/node_modules/inherits/inherits_browser.js ***!
138
+ \*********************************************************************/
139
+ /*! no static exports found */
140
+ /***/ (function(module, exports) {
141
+
142
+ eval("if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n\n var TempCtor = function TempCtor() {};\n\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXRpbC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsL25vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzPzI4YTAiXSwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFEQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/util/node_modules/inherits/inherits_browser.js\n");
143
+
144
+ /***/ }),
145
+
146
+ /***/ "./node_modules/util/support/isBufferBrowser.js":
147
+ /*!******************************************************!*\
148
+ !*** ./node_modules/util/support/isBufferBrowser.js ***!
149
+ \******************************************************/
150
+ /*! no static exports found */
151
+ /***/ (function(module, exports) {
152
+
153
+ eval("function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nmodule.exports = function isBuffer(arg) {\n return arg && _typeof(arg) === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzP2Q2MGEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBSUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/util/support/isBufferBrowser.js\n");
154
+
155
+ /***/ }),
156
+
157
+ /***/ "./node_modules/util/util.js":
158
+ /*!***********************************!*\
159
+ !*** ./node_modules/util/util.js ***!
160
+ \***********************************/
161
+ /*! no static exports found */
162
+ /***/ (function(module, exports, __webpack_require__) {
163
+
164
+ eval("/* WEBPACK VAR INJECTION */(function(process) {function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n\n return descriptors;\n};\n\nvar formatRegExp = /%[sdj%]/g;\n\nexports.format = function (f) {\n if (!isString(f)) {\n var objects = [];\n\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n default:\n return x;\n }\n });\n\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n\n return str;\n}; // Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\n\n\nexports.deprecate = function (fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n } // Allow for deprecating things in the process of starting up.\n\n\n if (typeof process === 'undefined') {\n return function () {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n\n warned = true;\n }\n\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\nvar debugs = {};\nvar debugEnviron;\n\nexports.debuglog = function (set) {\n if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n\n debugs[set] = function () {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function () {};\n }\n }\n\n return debugs[set];\n};\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n\n/* legacy: obj, showHidden, depth, colors*/\n\n\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n }; // legacy...\n\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n } // set default options\n\n\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\nexports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\n\ninspect.colors = {\n 'bold': [1, 22],\n 'italic': [3, 23],\n 'underline': [4, 24],\n 'inverse': [7, 27],\n 'white': [37, 39],\n 'grey': [90, 39],\n 'black': [30, 39],\n 'blue': [34, 39],\n 'cyan': [36, 39],\n 'green': [32, 39],\n 'magenta': [35, 39],\n 'red': [31, 39],\n 'yellow': [33, 39]\n}; // Don't use 'blue' not visible on cmd.exe\n\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return \"\\x1B[\" + inspect.colors[style][0] + 'm' + str + \"\\x1B[\" + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\nfunction arrayToHash(array) {\n var hash = {};\n array.forEach(function (val, idx) {\n hash[val] = true;\n });\n return hash;\n}\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n\n return ret;\n } // Primitive types cannot have properties\n\n\n var primitive = formatPrimitive(ctx, value);\n\n if (primitive) {\n return primitive;\n } // Look up the keys of the object.\n\n\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n } // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n\n\n if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n } // Some type of object without properties can be shortcutted.\n\n\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '',\n array = false,\n braces = ['{', '}']; // Make Array say that they are Array\n\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n } // Make functions say that they are functions\n\n\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n } // Make RegExps say that they are RegExps\n\n\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n } // Make dates with properties first say the date\n\n\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n } // Make error with message first say the error\n\n\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n var output;\n\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function (key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n return reduceToSingleString(output, base, braces);\n}\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value)) return ctx.stylize('undefined', 'undefined');\n\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '').replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n\n if (isNumber(value)) return ctx.stylize('' + value, 'number');\n if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is \"object\", so special case here.\n\n if (isNull(value)) return ctx.stylize('null', 'null');\n}\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));\n } else {\n output.push('');\n }\n }\n\n keys.forEach(function (key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));\n }\n });\n return output;\n}\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || {\n value: value[key]\n };\n\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function (line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function (line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n\n name = JSON.stringify('' + key);\n\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function (prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] + (base === '' ? '' : base + '\\n ') + ' ' + output.join(',\\n ') + ' ' + braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n} // NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return _typeof(arg) === 'symbol';\n}\n\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return _typeof(arg) === 'object' && arg !== null;\n}\n\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nexports.isPrimitive = isPrimitive;\nexports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ \"./node_modules/util/support/isBufferBrowser.js\");\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34\n\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n} // log is just a thin wrapper to console.log that prepends a timestamp\n\n\nexports.log = function () {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\n\n\nexports.inherits = __webpack_require__(/*! inherits */ \"./node_modules/util/node_modules/inherits/inherits_browser.js\");\n\nexports._extend = function (origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n var keys = Object.keys(add);\n var i = keys.length;\n\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function') throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn,\n enumerable: false,\n writable: false,\n configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n var args = [];\n\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn,\n enumerable: false,\n writable: false,\n configurable: true\n });\n return Object.defineProperties(fn, getOwnPropertyDescriptors(original));\n};\n\nexports.promisify.custom = kCustomPromisifiedSymbol;\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n } // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n\n\n function callbackified() {\n var args = [];\n\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n\n var self = this;\n\n var cb = function cb() {\n return maybeCb.apply(self, arguments);\n }; // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n\n\n original.apply(this, args).then(function (ret) {\n process.nextTick(cb, null, ret);\n }, function (rej) {\n process.nextTick(callbackifyOnRejected, rej, cb);\n });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified, getOwnPropertyDescriptors(original));\n return callbackified;\n}\n\nexports.callbackify = callbackify;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXRpbC91dGlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcz8zMDIyIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIHx8XG4gIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIHZhciBkZXNjcmlwdG9ycyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgZGVzY3JpcHRvcnNba2V5c1tpXV0gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9ycztcbiAgfTtcblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5ub0RlcHJlY2F0aW9uID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgLy8gQWxsb3cgZm9yIGRlcHJlY2F0aW5nIHRoaW5ncyBpbiB0aGUgcHJvY2VzcyBvZiBzdGFydGluZyB1cC5cbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG52YXIga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2woJ3V0aWwucHJvbWlzaWZ5LmN1c3RvbScpIDogdW5kZWZpbmVkO1xuXG5leHBvcnRzLnByb21pc2lmeSA9IGZ1bmN0aW9uIHByb21pc2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9yaWdpbmFsXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7XG5cbiAgaWYgKGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCAmJiBvcmlnaW5hbFtrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2xdKSB7XG4gICAgdmFyIGZuID0gb3JpZ2luYWxba0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXTtcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ1dGlsLnByb21pc2lmeS5jdXN0b21cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBrQ3VzdG9tUHJvbWlzaWZpZWRTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgZnVuY3Rpb24gZm4oKSB7XG4gICAgdmFyIHByb21pc2VSZXNvbHZlLCBwcm9taXNlUmVqZWN0O1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgcHJvbWlzZVJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcblxuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICBhcmdzLnB1c2goZnVuY3Rpb24gKGVyciwgdmFsdWUpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcHJvbWlzZVJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGZuLCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpKTtcblxuICBpZiAoa0N1c3RvbVByb21pc2lmaWVkU3ltYm9sKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIGtDdXN0b21Qcm9taXNpZmllZFN5bWJvbCwge1xuICAgIHZhbHVlOiBmbiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiBmYWxzZSwgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoXG4gICAgZm4sXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbClcbiAgKTtcbn1cblxuZXhwb3J0cy5wcm9taXNpZnkuY3VzdG9tID0ga0N1c3RvbVByb21pc2lmaWVkU3ltYm9sXG5cbmZ1bmN0aW9uIGNhbGxiYWNraWZ5T25SZWplY3RlZChyZWFzb24sIGNiKSB7XG4gIC8vIGAhcmVhc29uYCBndWFyZCBpbnNwaXJlZCBieSBibHVlYmlyZCAoUmVmOiBodHRwczovL2dvby5nbC90NUlTNk0pLlxuICAvLyBCZWNhdXNlIGBudWxsYCBpcyBhIHNwZWNpYWwgZXJyb3IgdmFsdWUgaW4gY2FsbGJhY2tzIHdoaWNoIG1lYW5zIFwibm8gZXJyb3JcbiAgLy8gb2NjdXJyZWRcIiwgd2UgZXJyb3Itd3JhcCBzbyB0aGUgY2FsbGJhY2sgY29uc3VtZXIgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW5cbiAgLy8gXCJ0aGUgcHJvbWlzZSByZWplY3RlZCB3aXRoIG51bGxcIiBvciBcInRoZSBwcm9taXNlIGZ1bGZpbGxlZCB3aXRoIHVuZGVmaW5lZFwiLlxuICBpZiAoIXJlYXNvbikge1xuICAgIHZhciBuZXdSZWFzb24gPSBuZXcgRXJyb3IoJ1Byb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZScpO1xuICAgIG5ld1JlYXNvbi5yZWFzb24gPSByZWFzb247XG4gICAgcmVhc29uID0gbmV3UmVhc29uO1xuICB9XG4gIHJldHVybiBjYihyZWFzb24pO1xufVxuXG5mdW5jdGlvbiBjYWxsYmFja2lmeShvcmlnaW5hbCkge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3JpZ2luYWxcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8vIFdlIERPIE5PVCByZXR1cm4gdGhlIHByb21pc2UgYXMgaXQgZ2l2ZXMgdGhlIHVzZXIgYSBmYWxzZSBzZW5zZSB0aGF0XG4gIC8vIHRoZSBwcm9taXNlIGlzIGFjdHVhbGx5IHNvbWVob3cgcmVsYXRlZCB0byB0aGUgY2FsbGJhY2sncyBleGVjdXRpb25cbiAgLy8gYW5kIHRoYXQgdGhlIGNhbGxiYWNrIHRocm93aW5nIHdpbGwgcmVqZWN0IHRoZSBwcm9taXNlLlxuICBmdW5jdGlvbiBjYWxsYmFja2lmaWVkKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIHZhciBtYXliZUNiID0gYXJncy5wb3AoKTtcbiAgICBpZiAodHlwZW9mIG1heWJlQ2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNiID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbWF5YmVDYi5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLy8gSW4gdHJ1ZSBub2RlIHN0eWxlIHdlIHByb2Nlc3MgdGhlIGNhbGxiYWNrIG9uIGBuZXh0VGlja2Agd2l0aCBhbGwgdGhlXG4gICAgLy8gaW1wbGljYXRpb25zIChzdGFjaywgYHVuY2F1Z2h0RXhjZXB0aW9uYCwgYGFzeW5jX2hvb2tzYClcbiAgICBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKVxuICAgICAgLnRoZW4oZnVuY3Rpb24ocmV0KSB7IHByb2Nlc3MubmV4dFRpY2soY2IsIG51bGwsIHJldCkgfSxcbiAgICAgICAgICAgIGZ1bmN0aW9uKHJlaikgeyBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNraWZ5T25SZWplY3RlZCwgcmVqLCBjYikgfSk7XG4gIH1cblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoY2FsbGJhY2tpZmllZCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNhbGxiYWNraWZpZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob3JpZ2luYWwpKTtcbiAgcmV0dXJuIGNhbGxiYWNraWZpZWQ7XG59XG5leHBvcnRzLmNhbGxiYWNraWZ5ID0gY2FsbGJhY2tpZnk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFWQTtBQVlBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFHQTs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFUQTtBQUNBO0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBREE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7Ozs7Ozs7Ozs7Ozs7OztBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQURBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/util/util.js\n");
165
+
166
+ /***/ }),
167
+
168
+ /***/ "./node_modules/uuid/deprecate.js":
169
+ /*!****************************************!*\
170
+ !*** ./node_modules/uuid/deprecate.js ***!
171
+ \****************************************/
172
+ /*! no static exports found */
173
+ /***/ (function(module, exports, __webpack_require__) {
174
+
175
+ eval("// Extracted from: https://github.com/TooTallNate/util-deprecate\nvar deprecate;\n\ntry {\n var util = __webpack_require__(/*! util */ \"./node_modules/util/util.js\");\n\n deprecate = util.deprecate;\n} catch (err) {\n deprecate = function deprecate(fn, msg) {\n var warned = false;\n\n function deprecated() {\n if (!warned) {\n console.warn(msg);\n warned = true;\n }\n\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n };\n}\n\nmodule.exports = deprecate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9kZXByZWNhdGUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXVpZC9kZXByZWNhdGUuanM/MTI2NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFeHRyYWN0ZWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3V0aWwtZGVwcmVjYXRlXG5sZXQgZGVwcmVjYXRlO1xudHJ5IHtcbiAgY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbiAgZGVwcmVjYXRlID0gdXRpbC5kZXByZWNhdGU7XG59IGNhdGNoIChlcnIpIHtcbiAgZGVwcmVjYXRlID0gZnVuY3Rpb24gZGVwcmVjYXRlKGZuLCBtc2cpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRlcHJlY2F0ZTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/uuid/deprecate.js\n");
176
+
177
+ /***/ }),
178
+
179
+ /***/ "./node_modules/uuid/dist/bytesToUuid.js":
180
+ /*!***********************************************!*\
181
+ !*** ./node_modules/uuid/dist/bytesToUuid.js ***!
182
+ \***********************************************/
183
+ /*! no static exports found */
184
+ /***/ (function(module, exports, __webpack_require__) {
185
+
186
+ "use strict";
187
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\n\nvar _default = bytesToUuid;\nexports[\"default\"] = _default;\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2J5dGVzVG9VdWlkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9ieXRlc1RvVXVpZC5qcz8wODM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcblxuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4OyAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuXG4gIHJldHVybiBbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsIGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJywgYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dXS5qb2luKCcnKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gYnl0ZXNUb1V1aWQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/uuid/dist/bytesToUuid.js\n");
188
+
189
+ /***/ }),
190
+
191
+ /***/ "./node_modules/uuid/dist/rng-browser.js":
192
+ /*!***********************************************!*\
193
+ !*** ./node_modules/uuid/dist/rng-browser.js ***!
194
+ \***********************************************/
195
+ /*! no static exports found */
196
+ /***/ (function(module, exports, __webpack_require__) {
197
+
198
+ "use strict";
199
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = rng; // Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n// find the complete implementation of crypto (msCrypto) on IE11.\n\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\nvar rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\nfunction rng() {\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n\n return getRandomValues(rnds8);\n}\n\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3JuZy1icm93c2VyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9ybmctYnJvd3Nlci5qcz85YzJhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uIEFsc28sXG4vLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxudmFyIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSB8fCB0eXBlb2YgbXNDcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcbnZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5mdW5jdGlvbiBybmcoKSB7XG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/uuid/dist/rng-browser.js\n");
200
+
201
+ /***/ }),
202
+
203
+ /***/ "./node_modules/uuid/dist/v4.js":
204
+ /*!**************************************!*\
205
+ !*** ./node_modules/uuid/dist/v4.js ***!
206
+ \**************************************/
207
+ /*! no static exports found */
208
+ /***/ (function(module, exports, __webpack_require__) {
209
+
210
+ "use strict";
211
+ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _rng = _interopRequireDefault(__webpack_require__(/*! ./rng.js */ \"./node_modules/uuid/dist/rng-browser.js\"));\n\nvar _bytesToUuid = _interopRequireDefault(__webpack_require__(/*! ./bytesToUuid.js */ \"./node_modules/uuid/dist/bytesToUuid.js\"));\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n\n options = options || {};\n\n var rnds = options.random || (options.rng || _rng[\"default\"])(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || (0, _bytesToUuid[\"default\"])(rnds);\n}\n\nvar _default = v4;\nexports[\"default\"] = _default;\nmodule.exports = exports[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L3Y0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC92NC5qcz9lYjdhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9ieXRlc1RvVXVpZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYnl0ZXNUb1V1aWQuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpOyAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG5cblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgKDAsIF9ieXRlc1RvVXVpZC5kZWZhdWx0KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/uuid/dist/v4.js\n");
212
+
213
+ /***/ }),
214
+
215
+ /***/ "./node_modules/uuid/v4.js":
216
+ /*!*********************************!*\
217
+ !*** ./node_modules/uuid/v4.js ***!
218
+ \*********************************/
219
+ /*! no static exports found */
220
+ /***/ (function(module, exports, __webpack_require__) {
221
+
222
+ eval("var deprecate = __webpack_require__(/*! ./deprecate.js */ \"./node_modules/uuid/deprecate.js\");\n\nvar v4 = __webpack_require__(/*! ./dist/v4.js */ \"./node_modules/uuid/dist/v4.js\");\n\nmodule.exports = deprecate(v4, \"Deep requiring like `const uuidv4 = require('uuid/v4');` is deprecated as of uuid@7.x. Please require the top-level module when using the Node.js CommonJS module or use ECMAScript Modules when bundling for the browser. See https://github.com/uuidjs/uuid#deep-requires-now-deprecated for more information.\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91dWlkL3Y0LmpzP2M2NGUiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVwcmVjYXRlID0gcmVxdWlyZSgnLi9kZXByZWNhdGUuanMnKTtcblxuY29uc3QgdjQgPSByZXF1aXJlKCcuL2Rpc3QvdjQuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZXByZWNhdGUoXG4gIHY0LFxuICBcIkRlZXAgcmVxdWlyaW5nIGxpa2UgYGNvbnN0IHV1aWR2NCA9IHJlcXVpcmUoJ3V1aWQvdjQnKTtgIGlzIGRlcHJlY2F0ZWQgYXMgb2YgdXVpZEA3LnguIFBsZWFzZSByZXF1aXJlIHRoZSB0b3AtbGV2ZWwgbW9kdWxlIHdoZW4gdXNpbmcgdGhlIE5vZGUuanMgQ29tbW9uSlMgbW9kdWxlIG9yIHVzZSBFQ01BU2NyaXB0IE1vZHVsZXMgd2hlbiBidW5kbGluZyBmb3IgdGhlIGJyb3dzZXIuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZGVlcC1yZXF1aXJlcy1ub3ctZGVwcmVjYXRlZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIixcbik7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/uuid/v4.js\n");
223
+
224
+ /***/ }),
225
+
226
+ /***/ "./src/mathml-block.css":
227
+ /*!******************************!*\
228
+ !*** ./src/mathml-block.css ***!
229
+ \******************************/
230
+ /*! no static exports found */
231
+ /***/ (function(module, exports, __webpack_require__) {
232
+
233
+ eval("var api = __webpack_require__(/*! ../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js!./mathml-block.css */ \"./node_modules/css-loader/dist/cjs.js!./src/mathml-block.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.i, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWF0aG1sLWJsb2NrLmNzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tYXRobWwtYmxvY2suY3NzP2I1NTkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFwaSA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpO1xuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21hdGhtbC1ibG9jay5jc3NcIik7XG5cbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50Ll9fZXNNb2R1bGUgPyBjb250ZW50LmRlZmF1bHQgOiBjb250ZW50O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbiAgICAgICAgICAgIH1cblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cbnZhciBleHBvcnRlZCA9IGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB7fTtcblxuXG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZWQ7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mathml-block.css\n");
234
+
235
+ /***/ }),
236
+
237
+ /***/ "./src/mathml-block.js":
238
+ /*!*****************************!*\
239
+ !*** ./src/mathml-block.js ***!
240
+ \*****************************/
241
+ /*! no exports provided */
242
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
243
+
244
+ "use strict";
245
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! uuid/v4 */ \"./node_modules/uuid/v4.js\");\n/* harmony import */ var uuid_v4__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(uuid_v4__WEBPACK_IMPORTED_MODULE_0__);\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\n\nvar renderMathML = function renderMathML(id) {\n setTimeout(function () {\n MathJax.Hub.Queue(['Typeset', MathJax.Hub, document.getElementById(id)]);\n }, 100);\n};\n\nregisterBlockType('mathml/mathmlblock', {\n title: 'MathML',\n icon: 'list-view',\n category: 'common',\n attributes: {\n formula: {\n source: 'html',\n selector: 'div',\n type: 'string'\n }\n },\n edit: function edit(props) {\n var isSelected = props.isSelected,\n attributes = props.attributes,\n setAttributes = props.setAttributes,\n className = props.className;\n var formula = attributes.formula;\n var id = uuid_v4__WEBPACK_IMPORTED_MODULE_0___default()();\n renderMathML(id);\n\n if (isSelected) {\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: id\n }, __('MathML formula:', 'mathml-block')), /*#__PURE__*/React.createElement(\"textarea\", {\n id: id,\n className: \"mathml-formula\",\n tagname: \"div\",\n onChange: function onChange(event) {\n setAttributes({\n formula: event.target.value\n });\n },\n value: formula,\n style: {\n width: '100%'\n }\n }));\n } else {\n return /*#__PURE__*/React.createElement(\"div\", {\n id: id,\n className: \"mathml-block\"\n }, formula);\n }\n },\n save: function save(_ref) {\n var attributes = _ref.attributes,\n className = _ref.className;\n var formula = attributes.formula;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className\n }, formula);\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWF0aG1sLWJsb2NrLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL21hdGhtbC1ibG9jay5qcz8xZmJhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dWlkIGZyb20gJ3V1aWQvdjQnO1xuXG5jb25zdCB7IF9fIH0gICAgICAgICAgICAgICAgPSB3cC5pMThuO1xuY29uc3QgeyByZWdpc3RlckJsb2NrVHlwZSB9ID0gd3AuYmxvY2tzO1xuXG5jb25zdCByZW5kZXJNYXRoTUwgPSAoIGlkICkgPT4ge1xuXHRzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0TWF0aEpheC5IdWIuUXVldWUoIFsgJ1R5cGVzZXQnLCBNYXRoSmF4Lkh1YiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkICkgXSApO1xuXHR9LCAxMDAgKTtcbn07XG5cbnJlZ2lzdGVyQmxvY2tUeXBlKCAnbWF0aG1sL21hdGhtbGJsb2NrJywge1xuXHR0aXRsZTogJ01hdGhNTCcsXG5cdGljb246ICdsaXN0LXZpZXcnLFxuXHRjYXRlZ29yeTogJ2NvbW1vbicsXG5cdGF0dHJpYnV0ZXM6IHtcblx0XHRmb3JtdWxhOiB7XG5cdFx0XHRzb3VyY2U6ICdodG1sJyxcblx0XHRcdHNlbGVjdG9yOiAnZGl2Jyxcblx0XHRcdHR5cGU6ICdzdHJpbmcnLFxuXHRcdH0sXG5cdH0sXG5cblx0ZWRpdDogKCBwcm9wcyApID0+IHtcblxuXHRcdGNvbnN0IHsgaXNTZWxlY3RlZCwgYXR0cmlidXRlcywgc2V0QXR0cmlidXRlcywgY2xhc3NOYW1lIH0gPSBwcm9wcztcblx0XHRjb25zdCB7IGZvcm11bGEgfSA9IGF0dHJpYnV0ZXM7XG5cdFx0Y29uc3QgaWQgPSB1dWlkKCk7XG5cblx0XHRyZW5kZXJNYXRoTUwoIGlkICk7XG5cblx0XHRpZiAoIGlzU2VsZWN0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT17IGNsYXNzTmFtZSB9PlxuXHRcdFx0XHRcdDxsYWJlbCBodG1sRm9yPXsgaWQgfT57IF9fKCAnTWF0aE1MIGZvcm11bGE6JywgJ21hdGhtbC1ibG9jaycgKSB9PC9sYWJlbD5cblx0XHRcdFx0XHQ8dGV4dGFyZWFcblx0XHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWF0aG1sLWZvcm11bGFcIlxuXHRcdFx0XHRcdFx0dGFnbmFtZT1cImRpdlwiXG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17ICggZXZlbnQgKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHNldEF0dHJpYnV0ZXMoIHsgZm9ybXVsYTogZXZlbnQudGFyZ2V0LnZhbHVlIH0gKTtcblx0XHRcdFx0XHRcdH0gfVxuXHRcdFx0XHRcdFx0dmFsdWU9eyBmb3JtdWxhIH1cblx0XHRcdFx0XHRcdHN0eWxlPXsgeyB3aWR0aDogJzEwMCUnIH0gfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGlkPXsgaWQgfVxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1hdGhtbC1ibG9ja1wiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7IGZvcm11bGEgfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCk7XG5cdFx0fVxuXHR9LFxuXG5cdHNhdmU6IGZ1bmN0aW9uIHNhdmUoIHsgYXR0cmlidXRlcywgY2xhc3NOYW1lIH0gKSB7XG5cdFx0Y29uc3QgeyBmb3JtdWxhIH0gPSBhdHRyaWJ1dGVzO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsgY2xhc3NOYW1lIH0+XG5cdFx0XHRcdHsgZm9ybXVsYSB9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpO1xuXHR9LFxufSApO1xuXG5cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQURBO0FBUUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBUkE7QUFZQTtBQUNBO0FBRUE7QUFDQTtBQUZBO0FBT0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBR0E7QUFDQTtBQUFBO0FBSUE7QUF4REEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mathml-block.js\n");
246
+
247
+ /***/ }),
248
+
249
+ /***/ "./src/mathml-inline.js":
250
+ /*!******************************!*\
251
+ !*** ./src/mathml-inline.js ***!
252
+ \******************************/
253
+ /*! no exports provided */
254
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
255
+
256
+ "use strict";
257
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mathml_block_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mathml-block.css */ \"./src/mathml-block.css\");\n/* harmony import */ var _mathml_block_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_mathml_block_css__WEBPACK_IMPORTED_MODULE_0__);\nvar _window$wp$element = window.wp.element,\n createElement = _window$wp$element.createElement,\n Fragment = _window$wp$element.Fragment;\nvar _window$wp$richText = window.wp.richText,\n registerFormatType = _window$wp$richText.registerFormatType,\n toggleFormat = _window$wp$richText.toggleFormat;\nvar _window$wp$blockEdito = window.wp.blockEditor,\n RichTextToolbarButton = _window$wp$blockEdito.RichTextToolbarButton,\n RichTextShortcut = _window$wp$blockEdito.RichTextShortcut;\nvar __ = window.wp.i18n.__;\n\n[{\n name: 'mathml',\n title: __('MathML', 'mathml-block'),\n character: 'm'\n}].forEach(function (_ref) {\n var name = _ref.name,\n title = _ref.title,\n character = _ref.character;\n var type = \"mathml-block/\".concat(name);\n registerFormatType(type, {\n title: title,\n tagName: name,\n className: null,\n edit: function edit(_ref2) {\n var isActive = _ref2.isActive,\n value = _ref2.value,\n onChange = _ref2.onChange;\n\n var onToggle = function onToggle() {\n onChange(toggleFormat(value, {\n type: type\n }));\n setTimeout(function () {\n MathJax.Hub.Queue(['Typeset', MathJax.Hub, document.getElementsByTagName('mathml')]);\n }, 100);\n };\n\n return createElement(Fragment, null, createElement(RichTextShortcut, {\n type: 'primary',\n character: character,\n onUse: onToggle\n }), createElement(RichTextToolbarButton, {\n title: title,\n onClick: onToggle,\n isActive: isActive,\n shortcutType: 'primary',\n shortcutCharacter: character,\n className: \"toolbar-button-with-text toolbar-button__advanced-\".concat(name)\n }));\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWF0aG1sLWlubGluZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tYXRobWwtaW5saW5lLmpzPzRmNWQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBjcmVhdGVFbGVtZW50LCBGcmFnbWVudCB9ID0gd2luZG93LndwLmVsZW1lbnQ7XG5jb25zdCB7IHJlZ2lzdGVyRm9ybWF0VHlwZSwgdG9nZ2xlRm9ybWF0IH0gPSB3aW5kb3cud3AucmljaFRleHQ7XG5jb25zdCB7IFJpY2hUZXh0VG9vbGJhckJ1dHRvbiwgUmljaFRleHRTaG9ydGN1dCB9ID0gd2luZG93LndwLmJsb2NrRWRpdG9yO1xuY29uc3QgeyBfXyB9ID0gd2luZG93LndwLmkxOG47XG5pbXBvcnQgJy4vbWF0aG1sLWJsb2NrLmNzcyc7XG5cbltcblx0e1xuXHRcdG5hbWU6ICdtYXRobWwnLFxuXHRcdHRpdGxlOiBfXyggJ01hdGhNTCcsICdtYXRobWwtYmxvY2snICksXG5cdFx0Y2hhcmFjdGVyOiAnbSdcblx0fSxcblxuXS5mb3JFYWNoKCAoIHsgbmFtZSwgdGl0bGUsIGNoYXJhY3RlciB9ICkgPT4ge1xuXHRjb25zdCB0eXBlID0gYG1hdGhtbC1ibG9jay8keyBuYW1lIH1gO1xuXHRyZWdpc3RlckZvcm1hdFR5cGUoIHR5cGUsIHtcblx0XHR0aXRsZSxcblx0XHR0YWdOYW1lOiBuYW1lLFxuXHRcdGNsYXNzTmFtZTogbnVsbCxcblx0XHRlZGl0KCB7IGlzQWN0aXZlLCB2YWx1ZSwgb25DaGFuZ2UgfSApIHtcblx0XHRcdGNvbnN0IG9uVG9nZ2xlID0gKCkgPT4ge1xuXHRcdFx0XHRvbkNoYW5nZSggdG9nZ2xlRm9ybWF0KCB2YWx1ZSwgeyB0eXBlIH0gKSApO1xuXHRcdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB7XG5cdFx0XHRcdFx0TWF0aEpheC5IdWIuUXVldWUoIFsgJ1R5cGVzZXQnLCBNYXRoSmF4Lkh1YiwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICdtYXRobWwnICkgXSApO1xuXHRcdFx0XHR9LCAxMDAgKTtcblx0XHRcdH07XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGNyZWF0ZUVsZW1lbnQoIEZyYWdtZW50LCBudWxsLFxuXHRcdFx0XHRcdGNyZWF0ZUVsZW1lbnQoIFJpY2hUZXh0U2hvcnRjdXQsIHtcblx0XHRcdFx0XHRcdHR5cGU6ICdwcmltYXJ5Jyxcblx0XHRcdFx0XHRcdGNoYXJhY3Rlcixcblx0XHRcdFx0XHRcdG9uVXNlOiBvblRvZ2dsZVxuXHRcdFx0XHRcdH0gKSxcblx0XHRcdFx0XHRjcmVhdGVFbGVtZW50KCBSaWNoVGV4dFRvb2xiYXJCdXR0b24sIHtcblx0XHRcdFx0XHRcdHRpdGxlLFxuXHRcdFx0XHRcdFx0b25DbGljazogb25Ub2dnbGUsXG5cdFx0XHRcdFx0XHRpc0FjdGl2ZSxcblx0XHRcdFx0XHRcdHNob3J0Y3V0VHlwZTogJ3ByaW1hcnknLFxuXHRcdFx0XHRcdFx0c2hvcnRjdXRDaGFyYWN0ZXI6IGNoYXJhY3Rlcixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZTogYHRvb2xiYXItYnV0dG9uLXdpdGgtdGV4dCB0b29sYmFyLWJ1dHRvbl9fYWR2YW5jZWQtJHsgbmFtZSB9YFxuXHRcdFx0XHRcdH0gKSApXG5cdFx0XHQpO1xuXHRcdH1cblx0fSApO1xufSApO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUE1QkE7QUE4QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/mathml-inline.js\n");
258
+
259
+ /***/ }),
260
+
261
+ /***/ 0:
262
+ /*!**********************************************************!*\
263
+ !*** multi ./src/mathml-block.js ./src/mathml-inline.js ***!
264
+ \**********************************************************/
265
+ /*! no static exports found */
266
+ /***/ (function(module, exports, __webpack_require__) {
267
+
268
+ __webpack_require__(/*! ./src/mathml-block.js */"./src/mathml-block.js");
269
+ module.exports = __webpack_require__(/*! ./src/mathml-inline.js */"./src/mathml-inline.js");
270
+
271
+
272
+ /***/ })
273
+
274
+ /******/ });
dist/mathml-block.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"version":3,"file":"mathml-block.js","sources":["webpack:///webpack/bootstrap"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./mathml-block.js\");\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;A","sourceRoot":""}
mathml-block.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Plugin Name: MathML block
4
+ * Description: Display MathML formulas.
5
+ * Version: 1.1.2
6
+ * Requires at least: 5.0
7
+ * Tested up to: 5.4
8
+ * Requires PHP: 5.4
9
+ * Stable tag: trunk
10
+ * Author: adamsilverstein
11
+ * Author URI: http://tunedin.net
12
+ * License: GPLv2 or later
13
+ * GitHub Plugin URI: https://github.com/adamsilverstein
14
+ *
15
+ * @package mathml-block
16
+ */
17
+ namespace MathMLBlock;
18
+
19
+ /**
20
+ * Enqueue the admin JavaScript assets.
21
+ */
22
+ function mathml_block_enqueue_scripts() {
23
+
24
+ wp_enqueue_script(
25
+ 'mathml-block',
26
+ plugin_dir_url( __FILE__ ) . 'dist/mathml-block.js',
27
+ array( 'wp-blocks', 'wp-i18n', 'wp-editor' ),
28
+ '',
29
+ true
30
+ );
31
+
32
+ // Filter the MathJax config string.
33
+ $config_string = apply_filters( 'mathml_block_mathjax_config', 'TeX-MML-AM_CHTML' );
34
+
35
+ wp_enqueue_script(
36
+ 'mathjax',
37
+ 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=' . $config_string
38
+ );
39
+
40
+ }
41
+ add_action( 'enqueue_block_editor_assets', __NAMESPACE__ . '\mathml_block_enqueue_scripts' );
42
+
43
+ // Maka JavaScript translatable.
44
+ function mathml_set_up_js_translations() {
45
+ wp_set_script_translations( 'mathml-block', 'mathml-block' );
46
+ }
47
+ add_action( 'init', __NAMESPACE__ . '\mathml_set_up_js_translations' );
48
+
49
+ /**
50
+ * Potentially enqueue the front end mathjax script, if any mathml blocks are detected in the content.
51
+ */
52
+ function potentially_add_front_end_mathjax_script() {
53
+ global $post;
54
+
55
+ // Only apply on singular pages.
56
+ if ( ! is_singular() ) {
57
+ return;
58
+ }
59
+
60
+ // Check the content for mathml blocks.
61
+ $has_mathml_block = strpos( $post->post_content, 'wp:mathml/mathmlblock' );
62
+ $has_mathml_inline = strpos( $post->post_content, '<mathml>' );
63
+ if ( false === $has_mathml_block && false === $has_mathml_inline ) {
64
+ return;
65
+ }
66
+
67
+ // Filter the MathJax config string.
68
+ $config_string = apply_filters( 'mathml_block_mathjax_config', 'TeX-MML-AM_CHTML' );
69
+
70
+ // Enqueue the MathJax script for front end formula display.
71
+ wp_register_script( 'mathjax', 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=' . $config_string );
72
+ wp_enqueue_script( 'mathjax' );
73
+
74
+ }
75
+ add_action( 'wp_enqueue_scripts', __NAMESPACE__ . '\potentially_add_front_end_mathjax_script' );
package-lock.json ADDED
@@ -0,0 +1,7412 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "mathml-block",
3
+ "requires": true,
4
+ "lockfileVersion": 1,
5
+ "dependencies": {
6
+ "@babel/code-frame": {
7
+ "version": "7.8.3",
8
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
9
+ "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
10
+ "dev": true,
11
+ "requires": {
12
+ "@babel/highlight": "^7.8.3"
13
+ }
14
+ },
15
+ "@babel/compat-data": {
16
+ "version": "7.9.0",
17
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.0.tgz",
18
+ "integrity": "sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==",
19
+ "dev": true,
20
+ "requires": {
21
+ "browserslist": "^4.9.1",
22
+ "invariant": "^2.2.4",
23
+ "semver": "^5.5.0"
24
+ }
25
+ },
26
+ "@babel/core": {
27
+ "version": "7.9.0",
28
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz",
29
+ "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==",
30
+ "dev": true,
31
+ "requires": {
32
+ "@babel/code-frame": "^7.8.3",
33
+ "@babel/generator": "^7.9.0",
34
+ "@babel/helper-module-transforms": "^7.9.0",
35
+ "@babel/helpers": "^7.9.0",
36
+ "@babel/parser": "^7.9.0",
37
+ "@babel/template": "^7.8.6",
38
+ "@babel/traverse": "^7.9.0",
39
+ "@babel/types": "^7.9.0",
40
+ "convert-source-map": "^1.7.0",
41
+ "debug": "^4.1.0",
42
+ "gensync": "^1.0.0-beta.1",
43
+ "json5": "^2.1.2",
44
+ "lodash": "^4.17.13",
45
+ "resolve": "^1.3.2",
46
+ "semver": "^5.4.1",
47
+ "source-map": "^0.5.0"
48
+ },
49
+ "dependencies": {
50
+ "@babel/generator": {
51
+ "version": "7.9.4",
52
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz",
53
+ "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==",
54
+ "dev": true,
55
+ "requires": {
56
+ "@babel/types": "^7.9.0",
57
+ "jsesc": "^2.5.1",
58
+ "lodash": "^4.17.13",
59
+ "source-map": "^0.5.0"
60
+ }
61
+ },
62
+ "@babel/parser": {
63
+ "version": "7.9.4",
64
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
65
+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
66
+ "dev": true
67
+ },
68
+ "@babel/traverse": {
69
+ "version": "7.9.0",
70
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz",
71
+ "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==",
72
+ "dev": true,
73
+ "requires": {
74
+ "@babel/code-frame": "^7.8.3",
75
+ "@babel/generator": "^7.9.0",
76
+ "@babel/helper-function-name": "^7.8.3",
77
+ "@babel/helper-split-export-declaration": "^7.8.3",
78
+ "@babel/parser": "^7.9.0",
79
+ "@babel/types": "^7.9.0",
80
+ "debug": "^4.1.0",
81
+ "globals": "^11.1.0",
82
+ "lodash": "^4.17.13"
83
+ }
84
+ },
85
+ "@babel/types": {
86
+ "version": "7.9.0",
87
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
88
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
89
+ "dev": true,
90
+ "requires": {
91
+ "@babel/helper-validator-identifier": "^7.9.0",
92
+ "lodash": "^4.17.13",
93
+ "to-fast-properties": "^2.0.0"
94
+ }
95
+ }
96
+ }
97
+ },
98
+ "@babel/generator": {
99
+ "version": "7.8.8",
100
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.8.tgz",
101
+ "integrity": "sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg==",
102
+ "dev": true,
103
+ "requires": {
104
+ "@babel/types": "^7.8.7",
105
+ "jsesc": "^2.5.1",
106
+ "lodash": "^4.17.13",
107
+ "source-map": "^0.5.0"
108
+ }
109
+ },
110
+ "@babel/helper-annotate-as-pure": {
111
+ "version": "7.8.3",
112
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
113
+ "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
114
+ "dev": true,
115
+ "requires": {
116
+ "@babel/types": "^7.8.3"
117
+ }
118
+ },
119
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
120
+ "version": "7.8.3",
121
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
122
+ "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
123
+ "dev": true,
124
+ "requires": {
125
+ "@babel/helper-explode-assignable-expression": "^7.8.3",
126
+ "@babel/types": "^7.8.3"
127
+ }
128
+ },
129
+ "@babel/helper-builder-react-jsx": {
130
+ "version": "7.9.0",
131
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz",
132
+ "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==",
133
+ "dev": true,
134
+ "requires": {
135
+ "@babel/helper-annotate-as-pure": "^7.8.3",
136
+ "@babel/types": "^7.9.0"
137
+ },
138
+ "dependencies": {
139
+ "@babel/types": {
140
+ "version": "7.9.0",
141
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
142
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
143
+ "dev": true,
144
+ "requires": {
145
+ "@babel/helper-validator-identifier": "^7.9.0",
146
+ "lodash": "^4.17.13",
147
+ "to-fast-properties": "^2.0.0"
148
+ }
149
+ }
150
+ }
151
+ },
152
+ "@babel/helper-builder-react-jsx-experimental": {
153
+ "version": "7.9.0",
154
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz",
155
+ "integrity": "sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==",
156
+ "dev": true,
157
+ "requires": {
158
+ "@babel/helper-annotate-as-pure": "^7.8.3",
159
+ "@babel/helper-module-imports": "^7.8.3",
160
+ "@babel/types": "^7.9.0"
161
+ },
162
+ "dependencies": {
163
+ "@babel/types": {
164
+ "version": "7.9.0",
165
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
166
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
167
+ "dev": true,
168
+ "requires": {
169
+ "@babel/helper-validator-identifier": "^7.9.0",
170
+ "lodash": "^4.17.13",
171
+ "to-fast-properties": "^2.0.0"
172
+ }
173
+ }
174
+ }
175
+ },
176
+ "@babel/helper-compilation-targets": {
177
+ "version": "7.8.7",
178
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz",
179
+ "integrity": "sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==",
180
+ "dev": true,
181
+ "requires": {
182
+ "@babel/compat-data": "^7.8.6",
183
+ "browserslist": "^4.9.1",
184
+ "invariant": "^2.2.4",
185
+ "levenary": "^1.1.1",
186
+ "semver": "^5.5.0"
187
+ }
188
+ },
189
+ "@babel/helper-create-regexp-features-plugin": {
190
+ "version": "7.8.8",
191
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz",
192
+ "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==",
193
+ "dev": true,
194
+ "requires": {
195
+ "@babel/helper-annotate-as-pure": "^7.8.3",
196
+ "@babel/helper-regex": "^7.8.3",
197
+ "regexpu-core": "^4.7.0"
198
+ }
199
+ },
200
+ "@babel/helper-define-map": {
201
+ "version": "7.8.3",
202
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
203
+ "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
204
+ "dev": true,
205
+ "requires": {
206
+ "@babel/helper-function-name": "^7.8.3",
207
+ "@babel/types": "^7.8.3",
208
+ "lodash": "^4.17.13"
209
+ }
210
+ },
211
+ "@babel/helper-explode-assignable-expression": {
212
+ "version": "7.8.3",
213
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
214
+ "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
215
+ "dev": true,
216
+ "requires": {
217
+ "@babel/traverse": "^7.8.3",
218
+ "@babel/types": "^7.8.3"
219
+ }
220
+ },
221
+ "@babel/helper-function-name": {
222
+ "version": "7.8.3",
223
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
224
+ "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
225
+ "dev": true,
226
+ "requires": {
227
+ "@babel/helper-get-function-arity": "^7.8.3",
228
+ "@babel/template": "^7.8.3",
229
+ "@babel/types": "^7.8.3"
230
+ }
231
+ },
232
+ "@babel/helper-get-function-arity": {
233
+ "version": "7.8.3",
234
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
235
+ "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
236
+ "dev": true,
237
+ "requires": {
238
+ "@babel/types": "^7.8.3"
239
+ }
240
+ },
241
+ "@babel/helper-hoist-variables": {
242
+ "version": "7.8.3",
243
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
244
+ "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
245
+ "dev": true,
246
+ "requires": {
247
+ "@babel/types": "^7.8.3"
248
+ }
249
+ },
250
+ "@babel/helper-member-expression-to-functions": {
251
+ "version": "7.8.3",
252
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
253
+ "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
254
+ "dev": true,
255
+ "requires": {
256
+ "@babel/types": "^7.8.3"
257
+ }
258
+ },
259
+ "@babel/helper-module-imports": {
260
+ "version": "7.8.3",
261
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
262
+ "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
263
+ "dev": true,
264
+ "requires": {
265
+ "@babel/types": "^7.8.3"
266
+ }
267
+ },
268
+ "@babel/helper-module-transforms": {
269
+ "version": "7.9.0",
270
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz",
271
+ "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==",
272
+ "dev": true,
273
+ "requires": {
274
+ "@babel/helper-module-imports": "^7.8.3",
275
+ "@babel/helper-replace-supers": "^7.8.6",
276
+ "@babel/helper-simple-access": "^7.8.3",
277
+ "@babel/helper-split-export-declaration": "^7.8.3",
278
+ "@babel/template": "^7.8.6",
279
+ "@babel/types": "^7.9.0",
280
+ "lodash": "^4.17.13"
281
+ },
282
+ "dependencies": {
283
+ "@babel/types": {
284
+ "version": "7.9.0",
285
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
286
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
287
+ "dev": true,
288
+ "requires": {
289
+ "@babel/helper-validator-identifier": "^7.9.0",
290
+ "lodash": "^4.17.13",
291
+ "to-fast-properties": "^2.0.0"
292
+ }
293
+ }
294
+ }
295
+ },
296
+ "@babel/helper-optimise-call-expression": {
297
+ "version": "7.8.3",
298
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
299
+ "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
300
+ "dev": true,
301
+ "requires": {
302
+ "@babel/types": "^7.8.3"
303
+ }
304
+ },
305
+ "@babel/helper-plugin-utils": {
306
+ "version": "7.8.3",
307
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
308
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
309
+ "dev": true
310
+ },
311
+ "@babel/helper-regex": {
312
+ "version": "7.8.3",
313
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
314
+ "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
315
+ "dev": true,
316
+ "requires": {
317
+ "lodash": "^4.17.13"
318
+ }
319
+ },
320
+ "@babel/helper-remap-async-to-generator": {
321
+ "version": "7.8.3",
322
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
323
+ "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
324
+ "dev": true,
325
+ "requires": {
326
+ "@babel/helper-annotate-as-pure": "^7.8.3",
327
+ "@babel/helper-wrap-function": "^7.8.3",
328
+ "@babel/template": "^7.8.3",
329
+ "@babel/traverse": "^7.8.3",
330
+ "@babel/types": "^7.8.3"
331
+ }
332
+ },
333
+ "@babel/helper-replace-supers": {
334
+ "version": "7.8.6",
335
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz",
336
+ "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==",
337
+ "dev": true,
338
+ "requires": {
339
+ "@babel/helper-member-expression-to-functions": "^7.8.3",
340
+ "@babel/helper-optimise-call-expression": "^7.8.3",
341
+ "@babel/traverse": "^7.8.6",
342
+ "@babel/types": "^7.8.6"
343
+ }
344
+ },
345
+ "@babel/helper-simple-access": {
346
+ "version": "7.8.3",
347
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
348
+ "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
349
+ "dev": true,
350
+ "requires": {
351
+ "@babel/template": "^7.8.3",
352
+ "@babel/types": "^7.8.3"
353
+ }
354
+ },
355
+ "@babel/helper-split-export-declaration": {
356
+ "version": "7.8.3",
357
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
358
+ "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
359
+ "dev": true,
360
+ "requires": {
361
+ "@babel/types": "^7.8.3"
362
+ }
363
+ },
364
+ "@babel/helper-validator-identifier": {
365
+ "version": "7.9.0",
366
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz",
367
+ "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==",
368
+ "dev": true
369
+ },
370
+ "@babel/helper-wrap-function": {
371
+ "version": "7.8.3",
372
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
373
+ "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
374
+ "dev": true,
375
+ "requires": {
376
+ "@babel/helper-function-name": "^7.8.3",
377
+ "@babel/template": "^7.8.3",
378
+ "@babel/traverse": "^7.8.3",
379
+ "@babel/types": "^7.8.3"
380
+ }
381
+ },
382
+ "@babel/helpers": {
383
+ "version": "7.9.2",
384
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz",
385
+ "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==",
386
+ "dev": true,
387
+ "requires": {
388
+ "@babel/template": "^7.8.3",
389
+ "@babel/traverse": "^7.9.0",
390
+ "@babel/types": "^7.9.0"
391
+ },
392
+ "dependencies": {
393
+ "@babel/generator": {
394
+ "version": "7.9.4",
395
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz",
396
+ "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==",
397
+ "dev": true,
398
+ "requires": {
399
+ "@babel/types": "^7.9.0",
400
+ "jsesc": "^2.5.1",
401
+ "lodash": "^4.17.13",
402
+ "source-map": "^0.5.0"
403
+ }
404
+ },
405
+ "@babel/parser": {
406
+ "version": "7.9.4",
407
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz",
408
+ "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==",
409
+ "dev": true
410
+ },
411
+ "@babel/traverse": {
412
+ "version": "7.9.0",
413
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz",
414
+ "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==",
415
+ "dev": true,
416
+ "requires": {
417
+ "@babel/code-frame": "^7.8.3",
418
+ "@babel/generator": "^7.9.0",
419
+ "@babel/helper-function-name": "^7.8.3",
420
+ "@babel/helper-split-export-declaration": "^7.8.3",
421
+ "@babel/parser": "^7.9.0",
422
+ "@babel/types": "^7.9.0",
423
+ "debug": "^4.1.0",
424
+ "globals": "^11.1.0",
425
+ "lodash": "^4.17.13"
426
+ }
427
+ },
428
+ "@babel/types": {
429
+ "version": "7.9.0",
430
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
431
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
432
+ "dev": true,
433
+ "requires": {
434
+ "@babel/helper-validator-identifier": "^7.9.0",
435
+ "lodash": "^4.17.13",
436
+ "to-fast-properties": "^2.0.0"
437
+ }
438
+ }
439
+ }
440
+ },
441
+ "@babel/highlight": {
442
+ "version": "7.8.3",
443
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
444
+ "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
445
+ "dev": true,
446
+ "requires": {
447
+ "chalk": "^2.0.0",
448
+ "esutils": "^2.0.2",
449
+ "js-tokens": "^4.0.0"
450
+ }
451
+ },
452
+ "@babel/parser": {
453
+ "version": "7.8.8",
454
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.8.tgz",
455
+ "integrity": "sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA==",
456
+ "dev": true
457
+ },
458
+ "@babel/plugin-proposal-async-generator-functions": {
459
+ "version": "7.8.3",
460
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
461
+ "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
462
+ "dev": true,
463
+ "requires": {
464
+ "@babel/helper-plugin-utils": "^7.8.3",
465
+ "@babel/helper-remap-async-to-generator": "^7.8.3",
466
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
467
+ }
468
+ },
469
+ "@babel/plugin-proposal-dynamic-import": {
470
+ "version": "7.8.3",
471
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
472
+ "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
473
+ "dev": true,
474
+ "requires": {
475
+ "@babel/helper-plugin-utils": "^7.8.3",
476
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
477
+ }
478
+ },
479
+ "@babel/plugin-proposal-json-strings": {
480
+ "version": "7.8.3",
481
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
482
+ "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
483
+ "dev": true,
484
+ "requires": {
485
+ "@babel/helper-plugin-utils": "^7.8.3",
486
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
487
+ }
488
+ },
489
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
490
+ "version": "7.8.3",
491
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
492
+ "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
493
+ "dev": true,
494
+ "requires": {
495
+ "@babel/helper-plugin-utils": "^7.8.3",
496
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
497
+ }
498
+ },
499
+ "@babel/plugin-proposal-numeric-separator": {
500
+ "version": "7.8.3",
501
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz",
502
+ "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==",
503
+ "dev": true,
504
+ "requires": {
505
+ "@babel/helper-plugin-utils": "^7.8.3",
506
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3"
507
+ }
508
+ },
509
+ "@babel/plugin-proposal-object-rest-spread": {
510
+ "version": "7.9.0",
511
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz",
512
+ "integrity": "sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==",
513
+ "dev": true,
514
+ "requires": {
515
+ "@babel/helper-plugin-utils": "^7.8.3",
516
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
517
+ }
518
+ },
519
+ "@babel/plugin-proposal-optional-catch-binding": {
520
+ "version": "7.8.3",
521
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
522
+ "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
523
+ "dev": true,
524
+ "requires": {
525
+ "@babel/helper-plugin-utils": "^7.8.3",
526
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
527
+ }
528
+ },
529
+ "@babel/plugin-proposal-optional-chaining": {
530
+ "version": "7.9.0",
531
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz",
532
+ "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==",
533
+ "dev": true,
534
+ "requires": {
535
+ "@babel/helper-plugin-utils": "^7.8.3",
536
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
537
+ }
538
+ },
539
+ "@babel/plugin-proposal-unicode-property-regex": {
540
+ "version": "7.8.8",
541
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz",
542
+ "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==",
543
+ "dev": true,
544
+ "requires": {
545
+ "@babel/helper-create-regexp-features-plugin": "^7.8.8",
546
+ "@babel/helper-plugin-utils": "^7.8.3"
547
+ }
548
+ },
549
+ "@babel/plugin-syntax-async-generators": {
550
+ "version": "7.8.4",
551
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
552
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
553
+ "dev": true,
554
+ "requires": {
555
+ "@babel/helper-plugin-utils": "^7.8.0"
556
+ }
557
+ },
558
+ "@babel/plugin-syntax-dynamic-import": {
559
+ "version": "7.8.3",
560
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
561
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
562
+ "dev": true,
563
+ "requires": {
564
+ "@babel/helper-plugin-utils": "^7.8.0"
565
+ }
566
+ },
567
+ "@babel/plugin-syntax-json-strings": {
568
+ "version": "7.8.3",
569
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
570
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
571
+ "dev": true,
572
+ "requires": {
573
+ "@babel/helper-plugin-utils": "^7.8.0"
574
+ }
575
+ },
576
+ "@babel/plugin-syntax-jsx": {
577
+ "version": "7.8.3",
578
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz",
579
+ "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==",
580
+ "dev": true,
581
+ "requires": {
582
+ "@babel/helper-plugin-utils": "^7.8.3"
583
+ }
584
+ },
585
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
586
+ "version": "7.8.3",
587
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
588
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
589
+ "dev": true,
590
+ "requires": {
591
+ "@babel/helper-plugin-utils": "^7.8.0"
592
+ }
593
+ },
594
+ "@babel/plugin-syntax-numeric-separator": {
595
+ "version": "7.8.3",
596
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz",
597
+ "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==",
598
+ "dev": true,
599
+ "requires": {
600
+ "@babel/helper-plugin-utils": "^7.8.3"
601
+ }
602
+ },
603
+ "@babel/plugin-syntax-object-rest-spread": {
604
+ "version": "7.8.3",
605
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
606
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
607
+ "dev": true,
608
+ "requires": {
609
+ "@babel/helper-plugin-utils": "^7.8.0"
610
+ }
611
+ },
612
+ "@babel/plugin-syntax-optional-catch-binding": {
613
+ "version": "7.8.3",
614
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
615
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
616
+ "dev": true,
617
+ "requires": {
618
+ "@babel/helper-plugin-utils": "^7.8.0"
619
+ }
620
+ },
621
+ "@babel/plugin-syntax-optional-chaining": {
622
+ "version": "7.8.3",
623
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
624
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
625
+ "dev": true,
626
+ "requires": {
627
+ "@babel/helper-plugin-utils": "^7.8.0"
628
+ }
629
+ },
630
+ "@babel/plugin-syntax-top-level-await": {
631
+ "version": "7.8.3",
632
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
633
+ "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
634
+ "dev": true,
635
+ "requires": {
636
+ "@babel/helper-plugin-utils": "^7.8.3"
637
+ }
638
+ },
639
+ "@babel/plugin-transform-arrow-functions": {
640
+ "version": "7.8.3",
641
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
642
+ "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
643
+ "dev": true,
644
+ "requires": {
645
+ "@babel/helper-plugin-utils": "^7.8.3"
646
+ }
647
+ },
648
+ "@babel/plugin-transform-async-to-generator": {
649
+ "version": "7.8.3",
650
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
651
+ "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
652
+ "dev": true,
653
+ "requires": {
654
+ "@babel/helper-module-imports": "^7.8.3",
655
+ "@babel/helper-plugin-utils": "^7.8.3",
656
+ "@babel/helper-remap-async-to-generator": "^7.8.3"
657
+ }
658
+ },
659
+ "@babel/plugin-transform-block-scoped-functions": {
660
+ "version": "7.8.3",
661
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
662
+ "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
663
+ "dev": true,
664
+ "requires": {
665
+ "@babel/helper-plugin-utils": "^7.8.3"
666
+ }
667
+ },
668
+ "@babel/plugin-transform-block-scoping": {
669
+ "version": "7.8.3",
670
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
671
+ "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
672
+ "dev": true,
673
+ "requires": {
674
+ "@babel/helper-plugin-utils": "^7.8.3",
675
+ "lodash": "^4.17.13"
676
+ }
677
+ },
678
+ "@babel/plugin-transform-classes": {
679
+ "version": "7.9.2",
680
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz",
681
+ "integrity": "sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==",
682
+ "dev": true,
683
+ "requires": {
684
+ "@babel/helper-annotate-as-pure": "^7.8.3",
685
+ "@babel/helper-define-map": "^7.8.3",
686
+ "@babel/helper-function-name": "^7.8.3",
687
+ "@babel/helper-optimise-call-expression": "^7.8.3",
688
+ "@babel/helper-plugin-utils": "^7.8.3",
689
+ "@babel/helper-replace-supers": "^7.8.6",
690
+ "@babel/helper-split-export-declaration": "^7.8.3",
691
+ "globals": "^11.1.0"
692
+ }
693
+ },
694
+ "@babel/plugin-transform-computed-properties": {
695
+ "version": "7.8.3",
696
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
697
+ "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
698
+ "dev": true,
699
+ "requires": {
700
+ "@babel/helper-plugin-utils": "^7.8.3"
701
+ }
702
+ },
703
+ "@babel/plugin-transform-destructuring": {
704
+ "version": "7.8.8",
705
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz",
706
+ "integrity": "sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==",
707
+ "dev": true,
708
+ "requires": {
709
+ "@babel/helper-plugin-utils": "^7.8.3"
710
+ }
711
+ },
712
+ "@babel/plugin-transform-dotall-regex": {
713
+ "version": "7.8.3",
714
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
715
+ "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
716
+ "dev": true,
717
+ "requires": {
718
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
719
+ "@babel/helper-plugin-utils": "^7.8.3"
720
+ }
721
+ },
722
+ "@babel/plugin-transform-duplicate-keys": {
723
+ "version": "7.8.3",
724
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
725
+ "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
726
+ "dev": true,
727
+ "requires": {
728
+ "@babel/helper-plugin-utils": "^7.8.3"
729
+ }
730
+ },
731
+ "@babel/plugin-transform-exponentiation-operator": {
732
+ "version": "7.8.3",
733
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
734
+ "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
735
+ "dev": true,
736
+ "requires": {
737
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
738
+ "@babel/helper-plugin-utils": "^7.8.3"
739
+ }
740
+ },
741
+ "@babel/plugin-transform-for-of": {
742
+ "version": "7.9.0",
743
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz",
744
+ "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==",
745
+ "dev": true,
746
+ "requires": {
747
+ "@babel/helper-plugin-utils": "^7.8.3"
748
+ }
749
+ },
750
+ "@babel/plugin-transform-function-name": {
751
+ "version": "7.8.3",
752
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
753
+ "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
754
+ "dev": true,
755
+ "requires": {
756
+ "@babel/helper-function-name": "^7.8.3",
757
+ "@babel/helper-plugin-utils": "^7.8.3"
758
+ }
759
+ },
760
+ "@babel/plugin-transform-literals": {
761
+ "version": "7.8.3",
762
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
763
+ "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
764
+ "dev": true,
765
+ "requires": {
766
+ "@babel/helper-plugin-utils": "^7.8.3"
767
+ }
768
+ },
769
+ "@babel/plugin-transform-member-expression-literals": {
770
+ "version": "7.8.3",
771
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
772
+ "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
773
+ "dev": true,
774
+ "requires": {
775
+ "@babel/helper-plugin-utils": "^7.8.3"
776
+ }
777
+ },
778
+ "@babel/plugin-transform-modules-amd": {
779
+ "version": "7.9.0",
780
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz",
781
+ "integrity": "sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==",
782
+ "dev": true,
783
+ "requires": {
784
+ "@babel/helper-module-transforms": "^7.9.0",
785
+ "@babel/helper-plugin-utils": "^7.8.3",
786
+ "babel-plugin-dynamic-import-node": "^2.3.0"
787
+ }
788
+ },
789
+ "@babel/plugin-transform-modules-commonjs": {
790
+ "version": "7.9.0",
791
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz",
792
+ "integrity": "sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==",
793
+ "dev": true,
794
+ "requires": {
795
+ "@babel/helper-module-transforms": "^7.9.0",
796
+ "@babel/helper-plugin-utils": "^7.8.3",
797
+ "@babel/helper-simple-access": "^7.8.3",
798
+ "babel-plugin-dynamic-import-node": "^2.3.0"
799
+ }
800
+ },
801
+ "@babel/plugin-transform-modules-systemjs": {
802
+ "version": "7.9.0",
803
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz",
804
+ "integrity": "sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==",
805
+ "dev": true,
806
+ "requires": {
807
+ "@babel/helper-hoist-variables": "^7.8.3",
808
+ "@babel/helper-module-transforms": "^7.9.0",
809
+ "@babel/helper-plugin-utils": "^7.8.3",
810
+ "babel-plugin-dynamic-import-node": "^2.3.0"
811
+ }
812
+ },
813
+ "@babel/plugin-transform-modules-umd": {
814
+ "version": "7.9.0",
815
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz",
816
+ "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==",
817
+ "dev": true,
818
+ "requires": {
819
+ "@babel/helper-module-transforms": "^7.9.0",
820
+ "@babel/helper-plugin-utils": "^7.8.3"
821
+ }
822
+ },
823
+ "@babel/plugin-transform-named-capturing-groups-regex": {
824
+ "version": "7.8.3",
825
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
826
+ "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
827
+ "dev": true,
828
+ "requires": {
829
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
830
+ }
831
+ },
832
+ "@babel/plugin-transform-new-target": {
833
+ "version": "7.8.3",
834
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
835
+ "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
836
+ "dev": true,
837
+ "requires": {
838
+ "@babel/helper-plugin-utils": "^7.8.3"
839
+ }
840
+ },
841
+ "@babel/plugin-transform-object-super": {
842
+ "version": "7.8.3",
843
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
844
+ "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
845
+ "dev": true,
846
+ "requires": {
847
+ "@babel/helper-plugin-utils": "^7.8.3",
848
+ "@babel/helper-replace-supers": "^7.8.3"
849
+ }
850
+ },
851
+ "@babel/plugin-transform-parameters": {
852
+ "version": "7.9.3",
853
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz",
854
+ "integrity": "sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==",
855
+ "dev": true,
856
+ "requires": {
857
+ "@babel/helper-get-function-arity": "^7.8.3",
858
+ "@babel/helper-plugin-utils": "^7.8.3"
859
+ }
860
+ },
861
+ "@babel/plugin-transform-property-literals": {
862
+ "version": "7.8.3",
863
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
864
+ "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
865
+ "dev": true,
866
+ "requires": {
867
+ "@babel/helper-plugin-utils": "^7.8.3"
868
+ }
869
+ },
870
+ "@babel/plugin-transform-react-display-name": {
871
+ "version": "7.8.3",
872
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz",
873
+ "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==",
874
+ "dev": true,
875
+ "requires": {
876
+ "@babel/helper-plugin-utils": "^7.8.3"
877
+ }
878
+ },
879
+ "@babel/plugin-transform-react-jsx": {
880
+ "version": "7.9.4",
881
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz",
882
+ "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==",
883
+ "dev": true,
884
+ "requires": {
885
+ "@babel/helper-builder-react-jsx": "^7.9.0",
886
+ "@babel/helper-builder-react-jsx-experimental": "^7.9.0",
887
+ "@babel/helper-plugin-utils": "^7.8.3",
888
+ "@babel/plugin-syntax-jsx": "^7.8.3"
889
+ }
890
+ },
891
+ "@babel/plugin-transform-react-jsx-development": {
892
+ "version": "7.9.0",
893
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz",
894
+ "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==",
895
+ "dev": true,
896
+ "requires": {
897
+ "@babel/helper-builder-react-jsx-experimental": "^7.9.0",
898
+ "@babel/helper-plugin-utils": "^7.8.3",
899
+ "@babel/plugin-syntax-jsx": "^7.8.3"
900
+ }
901
+ },
902
+ "@babel/plugin-transform-react-jsx-self": {
903
+ "version": "7.9.0",
904
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz",
905
+ "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==",
906
+ "dev": true,
907
+ "requires": {
908
+ "@babel/helper-plugin-utils": "^7.8.3",
909
+ "@babel/plugin-syntax-jsx": "^7.8.3"
910
+ }
911
+ },
912
+ "@babel/plugin-transform-react-jsx-source": {
913
+ "version": "7.9.0",
914
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz",
915
+ "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==",
916
+ "dev": true,
917
+ "requires": {
918
+ "@babel/helper-plugin-utils": "^7.8.3",
919
+ "@babel/plugin-syntax-jsx": "^7.8.3"
920
+ }
921
+ },
922
+ "@babel/plugin-transform-regenerator": {
923
+ "version": "7.8.7",
924
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz",
925
+ "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==",
926
+ "dev": true,
927
+ "requires": {
928
+ "regenerator-transform": "^0.14.2"
929
+ }
930
+ },
931
+ "@babel/plugin-transform-reserved-words": {
932
+ "version": "7.8.3",
933
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
934
+ "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
935
+ "dev": true,
936
+ "requires": {
937
+ "@babel/helper-plugin-utils": "^7.8.3"
938
+ }
939
+ },
940
+ "@babel/plugin-transform-shorthand-properties": {
941
+ "version": "7.8.3",
942
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
943
+ "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
944
+ "dev": true,
945
+ "requires": {
946
+ "@babel/helper-plugin-utils": "^7.8.3"
947
+ }
948
+ },
949
+ "@babel/plugin-transform-spread": {
950
+ "version": "7.8.3",
951
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
952
+ "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
953
+ "dev": true,
954
+ "requires": {
955
+ "@babel/helper-plugin-utils": "^7.8.3"
956
+ }
957
+ },
958
+ "@babel/plugin-transform-sticky-regex": {
959
+ "version": "7.8.3",
960
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
961
+ "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
962
+ "dev": true,
963
+ "requires": {
964
+ "@babel/helper-plugin-utils": "^7.8.3",
965
+ "@babel/helper-regex": "^7.8.3"
966
+ }
967
+ },
968
+ "@babel/plugin-transform-template-literals": {
969
+ "version": "7.8.3",
970
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
971
+ "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
972
+ "dev": true,
973
+ "requires": {
974
+ "@babel/helper-annotate-as-pure": "^7.8.3",
975
+ "@babel/helper-plugin-utils": "^7.8.3"
976
+ }
977
+ },
978
+ "@babel/plugin-transform-typeof-symbol": {
979
+ "version": "7.8.4",
980
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
981
+ "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
982
+ "dev": true,
983
+ "requires": {
984
+ "@babel/helper-plugin-utils": "^7.8.3"
985
+ }
986
+ },
987
+ "@babel/plugin-transform-unicode-regex": {
988
+ "version": "7.8.3",
989
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
990
+ "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
991
+ "dev": true,
992
+ "requires": {
993
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
994
+ "@babel/helper-plugin-utils": "^7.8.3"
995
+ }
996
+ },
997
+ "@babel/preset-env": {
998
+ "version": "7.9.0",
999
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz",
1000
+ "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==",
1001
+ "dev": true,
1002
+ "requires": {
1003
+ "@babel/compat-data": "^7.9.0",
1004
+ "@babel/helper-compilation-targets": "^7.8.7",
1005
+ "@babel/helper-module-imports": "^7.8.3",
1006
+ "@babel/helper-plugin-utils": "^7.8.3",
1007
+ "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
1008
+ "@babel/plugin-proposal-dynamic-import": "^7.8.3",
1009
+ "@babel/plugin-proposal-json-strings": "^7.8.3",
1010
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
1011
+ "@babel/plugin-proposal-numeric-separator": "^7.8.3",
1012
+ "@babel/plugin-proposal-object-rest-spread": "^7.9.0",
1013
+ "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
1014
+ "@babel/plugin-proposal-optional-chaining": "^7.9.0",
1015
+ "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
1016
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
1017
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
1018
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
1019
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
1020
+ "@babel/plugin-syntax-numeric-separator": "^7.8.0",
1021
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
1022
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
1023
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
1024
+ "@babel/plugin-syntax-top-level-await": "^7.8.3",
1025
+ "@babel/plugin-transform-arrow-functions": "^7.8.3",
1026
+ "@babel/plugin-transform-async-to-generator": "^7.8.3",
1027
+ "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
1028
+ "@babel/plugin-transform-block-scoping": "^7.8.3",
1029
+ "@babel/plugin-transform-classes": "^7.9.0",
1030
+ "@babel/plugin-transform-computed-properties": "^7.8.3",
1031
+ "@babel/plugin-transform-destructuring": "^7.8.3",
1032
+ "@babel/plugin-transform-dotall-regex": "^7.8.3",
1033
+ "@babel/plugin-transform-duplicate-keys": "^7.8.3",
1034
+ "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
1035
+ "@babel/plugin-transform-for-of": "^7.9.0",
1036
+ "@babel/plugin-transform-function-name": "^7.8.3",
1037
+ "@babel/plugin-transform-literals": "^7.8.3",
1038
+ "@babel/plugin-transform-member-expression-literals": "^7.8.3",
1039
+ "@babel/plugin-transform-modules-amd": "^7.9.0",
1040
+ "@babel/plugin-transform-modules-commonjs": "^7.9.0",
1041
+ "@babel/plugin-transform-modules-systemjs": "^7.9.0",
1042
+ "@babel/plugin-transform-modules-umd": "^7.9.0",
1043
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
1044
+ "@babel/plugin-transform-new-target": "^7.8.3",
1045
+ "@babel/plugin-transform-object-super": "^7.8.3",
1046
+ "@babel/plugin-transform-parameters": "^7.8.7",
1047
+ "@babel/plugin-transform-property-literals": "^7.8.3",
1048
+ "@babel/plugin-transform-regenerator": "^7.8.7",
1049
+ "@babel/plugin-transform-reserved-words": "^7.8.3",
1050
+ "@babel/plugin-transform-shorthand-properties": "^7.8.3",
1051
+ "@babel/plugin-transform-spread": "^7.8.3",
1052
+ "@babel/plugin-transform-sticky-regex": "^7.8.3",
1053
+ "@babel/plugin-transform-template-literals": "^7.8.3",
1054
+ "@babel/plugin-transform-typeof-symbol": "^7.8.4",
1055
+ "@babel/plugin-transform-unicode-regex": "^7.8.3",
1056
+ "@babel/preset-modules": "^0.1.3",
1057
+ "@babel/types": "^7.9.0",
1058
+ "browserslist": "^4.9.1",
1059
+ "core-js-compat": "^3.6.2",
1060
+ "invariant": "^2.2.2",
1061
+ "levenary": "^1.1.1",
1062
+ "semver": "^5.5.0"
1063
+ },
1064
+ "dependencies": {
1065
+ "@babel/types": {
1066
+ "version": "7.9.0",
1067
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz",
1068
+ "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==",
1069
+ "dev": true,
1070
+ "requires": {
1071
+ "@babel/helper-validator-identifier": "^7.9.0",
1072
+ "lodash": "^4.17.13",
1073
+ "to-fast-properties": "^2.0.0"
1074
+ }
1075
+ }
1076
+ }
1077
+ },
1078
+ "@babel/preset-modules": {
1079
+ "version": "0.1.3",
1080
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz",
1081
+ "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==",
1082
+ "dev": true,
1083
+ "requires": {
1084
+ "@babel/helper-plugin-utils": "^7.0.0",
1085
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
1086
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
1087
+ "@babel/types": "^7.4.4",
1088
+ "esutils": "^2.0.2"
1089
+ }
1090
+ },
1091
+ "@babel/preset-react": {
1092
+ "version": "7.9.4",
1093
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz",
1094
+ "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==",
1095
+ "dev": true,
1096
+ "requires": {
1097
+ "@babel/helper-plugin-utils": "^7.8.3",
1098
+ "@babel/plugin-transform-react-display-name": "^7.8.3",
1099
+ "@babel/plugin-transform-react-jsx": "^7.9.4",
1100
+ "@babel/plugin-transform-react-jsx-development": "^7.9.0",
1101
+ "@babel/plugin-transform-react-jsx-self": "^7.9.0",
1102
+ "@babel/plugin-transform-react-jsx-source": "^7.9.0"
1103
+ }
1104
+ },
1105
+ "@babel/runtime": {
1106
+ "version": "7.9.2",
1107
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
1108
+ "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
1109
+ "requires": {
1110
+ "regenerator-runtime": "^0.13.4"
1111
+ }
1112
+ },
1113
+ "@babel/runtime-corejs3": {
1114
+ "version": "7.8.7",
1115
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.7.tgz",
1116
+ "integrity": "sha512-sc7A+H4I8kTd7S61dgB9RomXu/C+F4IrRr4Ytze4dnfx7AXEpCrejSNpjx7vq6y/Bak9S6Kbk65a/WgMLtg43Q==",
1117
+ "dev": true,
1118
+ "requires": {
1119
+ "core-js-pure": "^3.0.0",
1120
+ "regenerator-runtime": "^0.13.4"
1121
+ }
1122
+ },
1123
+ "@babel/template": {
1124
+ "version": "7.8.6",
1125
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
1126
+ "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==",
1127
+ "dev": true,
1128
+ "requires": {
1129
+ "@babel/code-frame": "^7.8.3",
1130
+ "@babel/parser": "^7.8.6",
1131
+ "@babel/types": "^7.8.6"
1132
+ }
1133
+ },
1134
+ "@babel/traverse": {
1135
+ "version": "7.8.6",
1136
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz",
1137
+ "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==",
1138
+ "dev": true,
1139
+ "requires": {
1140
+ "@babel/code-frame": "^7.8.3",
1141
+ "@babel/generator": "^7.8.6",
1142
+ "@babel/helper-function-name": "^7.8.3",
1143
+ "@babel/helper-split-export-declaration": "^7.8.3",
1144
+ "@babel/parser": "^7.8.6",
1145
+ "@babel/types": "^7.8.6",
1146
+ "debug": "^4.1.0",
1147
+ "globals": "^11.1.0",
1148
+ "lodash": "^4.17.13"
1149
+ }
1150
+ },
1151
+ "@babel/types": {
1152
+ "version": "7.8.7",
1153
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz",
1154
+ "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==",
1155
+ "dev": true,
1156
+ "requires": {
1157
+ "esutils": "^2.0.2",
1158
+ "lodash": "^4.17.13",
1159
+ "to-fast-properties": "^2.0.0"
1160
+ }
1161
+ },
1162
+ "@tannin/compile": {
1163
+ "version": "1.1.0",
1164
+ "resolved": "https://registry.npmjs.org/@tannin/compile/-/compile-1.1.0.tgz",
1165
+ "integrity": "sha512-n8m9eNDfoNZoxdvWiTfW/hSPhehzLJ3zW7f8E7oT6mCROoMNWCB4TYtv041+2FMAxweiE0j7i1jubQU4MEC/Gg==",
1166
+ "requires": {
1167
+ "@tannin/evaluate": "^1.2.0",
1168
+ "@tannin/postfix": "^1.1.0"
1169
+ }
1170
+ },
1171
+ "@tannin/evaluate": {
1172
+ "version": "1.2.0",
1173
+ "resolved": "https://registry.npmjs.org/@tannin/evaluate/-/evaluate-1.2.0.tgz",
1174
+ "integrity": "sha512-3ioXvNowbO/wSrxsDG5DKIMxC81P0QrQTYai8zFNY+umuoHWRPbQ/TuuDEOju9E+jQDXmj6yI5GyejNuh8I+eg=="
1175
+ },
1176
+ "@tannin/plural-forms": {
1177
+ "version": "1.1.0",
1178
+ "resolved": "https://registry.npmjs.org/@tannin/plural-forms/-/plural-forms-1.1.0.tgz",
1179
+ "integrity": "sha512-xl9R2mDZO/qiHam1AgMnAES6IKIg7OBhcXqy6eDsRCdXuxAFPcjrej9HMjyCLE0DJ/8cHf0i5OQTstuBRhpbHw==",
1180
+ "requires": {
1181
+ "@tannin/compile": "^1.1.0"
1182
+ }
1183
+ },
1184
+ "@tannin/postfix": {
1185
+ "version": "1.1.0",
1186
+ "resolved": "https://registry.npmjs.org/@tannin/postfix/-/postfix-1.1.0.tgz",
1187
+ "integrity": "sha512-oocsqY7g0cR+Gur5jRQLSrX2OtpMLMse1I10JQBm8CdGMrDkh1Mg2gjsiquMHRtBs4Qwu5wgEp5GgIYHk4SNPw=="
1188
+ },
1189
+ "@types/color-name": {
1190
+ "version": "1.1.1",
1191
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
1192
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
1193
+ "dev": true
1194
+ },
1195
+ "@webassemblyjs/ast": {
1196
+ "version": "1.9.0",
1197
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
1198
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
1199
+ "dev": true,
1200
+ "requires": {
1201
+ "@webassemblyjs/helper-module-context": "1.9.0",
1202
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
1203
+ "@webassemblyjs/wast-parser": "1.9.0"
1204
+ }
1205
+ },
1206
+ "@webassemblyjs/floating-point-hex-parser": {
1207
+ "version": "1.9.0",
1208
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
1209
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
1210
+ "dev": true
1211
+ },
1212
+ "@webassemblyjs/helper-api-error": {
1213
+ "version": "1.9.0",
1214
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
1215
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
1216
+ "dev": true
1217
+ },
1218
+ "@webassemblyjs/helper-buffer": {
1219
+ "version": "1.9.0",
1220
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
1221
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
1222
+ "dev": true
1223
+ },
1224
+ "@webassemblyjs/helper-code-frame": {
1225
+ "version": "1.9.0",
1226
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
1227
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
1228
+ "dev": true,
1229
+ "requires": {
1230
+ "@webassemblyjs/wast-printer": "1.9.0"
1231
+ }
1232
+ },
1233
+ "@webassemblyjs/helper-fsm": {
1234
+ "version": "1.9.0",
1235
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
1236
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
1237
+ "dev": true
1238
+ },
1239
+ "@webassemblyjs/helper-module-context": {
1240
+ "version": "1.9.0",
1241
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
1242
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
1243
+ "dev": true,
1244
+ "requires": {
1245
+ "@webassemblyjs/ast": "1.9.0"
1246
+ }
1247
+ },
1248
+ "@webassemblyjs/helper-wasm-bytecode": {
1249
+ "version": "1.9.0",
1250
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
1251
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
1252
+ "dev": true
1253
+ },
1254
+ "@webassemblyjs/helper-wasm-section": {
1255
+ "version": "1.9.0",
1256
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
1257
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
1258
+ "dev": true,
1259
+ "requires": {
1260
+ "@webassemblyjs/ast": "1.9.0",
1261
+ "@webassemblyjs/helper-buffer": "1.9.0",
1262
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
1263
+ "@webassemblyjs/wasm-gen": "1.9.0"
1264
+ }
1265
+ },
1266
+ "@webassemblyjs/ieee754": {
1267
+ "version": "1.9.0",
1268
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
1269
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
1270
+ "dev": true,
1271
+ "requires": {
1272
+ "@xtuc/ieee754": "^1.2.0"
1273
+ }
1274
+ },
1275
+ "@webassemblyjs/leb128": {
1276
+ "version": "1.9.0",
1277
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
1278
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
1279
+ "dev": true,
1280
+ "requires": {
1281
+ "@xtuc/long": "4.2.2"
1282
+ }
1283
+ },
1284
+ "@webassemblyjs/utf8": {
1285
+ "version": "1.9.0",
1286
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
1287
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
1288
+ "dev": true
1289
+ },
1290
+ "@webassemblyjs/wasm-edit": {
1291
+ "version": "1.9.0",
1292
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
1293
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
1294
+ "dev": true,
1295
+ "requires": {
1296
+ "@webassemblyjs/ast": "1.9.0",
1297
+ "@webassemblyjs/helper-buffer": "1.9.0",
1298
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
1299
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
1300
+ "@webassemblyjs/wasm-gen": "1.9.0",
1301
+ "@webassemblyjs/wasm-opt": "1.9.0",
1302
+ "@webassemblyjs/wasm-parser": "1.9.0",
1303
+ "@webassemblyjs/wast-printer": "1.9.0"
1304
+ }
1305
+ },
1306
+ "@webassemblyjs/wasm-gen": {
1307
+ "version": "1.9.0",
1308
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
1309
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
1310
+ "dev": true,
1311
+ "requires": {
1312
+ "@webassemblyjs/ast": "1.9.0",
1313
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
1314
+ "@webassemblyjs/ieee754": "1.9.0",
1315
+ "@webassemblyjs/leb128": "1.9.0",
1316
+ "@webassemblyjs/utf8": "1.9.0"
1317
+ }
1318
+ },
1319
+ "@webassemblyjs/wasm-opt": {
1320
+ "version": "1.9.0",
1321
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
1322
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
1323
+ "dev": true,
1324
+ "requires": {
1325
+ "@webassemblyjs/ast": "1.9.0",
1326
+ "@webassemblyjs/helper-buffer": "1.9.0",
1327
+ "@webassemblyjs/wasm-gen": "1.9.0",
1328
+ "@webassemblyjs/wasm-parser": "1.9.0"
1329
+ }
1330
+ },
1331
+ "@webassemblyjs/wasm-parser": {
1332
+ "version": "1.9.0",
1333
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
1334
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
1335
+ "dev": true,
1336
+ "requires": {
1337
+ "@webassemblyjs/ast": "1.9.0",
1338
+ "@webassemblyjs/helper-api-error": "1.9.0",
1339
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
1340
+ "@webassemblyjs/ieee754": "1.9.0",
1341
+ "@webassemblyjs/leb128": "1.9.0",
1342
+ "@webassemblyjs/utf8": "1.9.0"
1343
+ }
1344
+ },
1345
+ "@webassemblyjs/wast-parser": {
1346
+ "version": "1.9.0",
1347
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
1348
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
1349
+ "dev": true,
1350
+ "requires": {
1351
+ "@webassemblyjs/ast": "1.9.0",
1352
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
1353
+ "@webassemblyjs/helper-api-error": "1.9.0",
1354
+ "@webassemblyjs/helper-code-frame": "1.9.0",
1355
+ "@webassemblyjs/helper-fsm": "1.9.0",
1356
+ "@xtuc/long": "4.2.2"
1357
+ }
1358
+ },
1359
+ "@webassemblyjs/wast-printer": {
1360
+ "version": "1.9.0",
1361
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
1362
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
1363
+ "dev": true,
1364
+ "requires": {
1365
+ "@webassemblyjs/ast": "1.9.0",
1366
+ "@webassemblyjs/wast-parser": "1.9.0",
1367
+ "@xtuc/long": "4.2.2"
1368
+ }
1369
+ },
1370
+ "@wordpress/i18n": {
1371
+ "version": "3.10.0",
1372
+ "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-3.10.0.tgz",
1373
+ "integrity": "sha512-f1+ITy2ImcfV6695QTNnlLxs5oHNXslbqVtJuK4Ug9r6nPPt2EwnKkK+rhdDgaRLeWrF9C1vwBxJCOOU2B1aKw==",
1374
+ "requires": {
1375
+ "@babel/runtime": "^7.8.3",
1376
+ "gettext-parser": "^1.3.1",
1377
+ "lodash": "^4.17.15",
1378
+ "memize": "^1.0.5",
1379
+ "sprintf-js": "^1.1.1",
1380
+ "tannin": "^1.1.0"
1381
+ },
1382
+ "dependencies": {
1383
+ "sprintf-js": {
1384
+ "version": "1.1.2",
1385
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
1386
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
1387
+ }
1388
+ }
1389
+ },
1390
+ "@xtuc/ieee754": {
1391
+ "version": "1.2.0",
1392
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
1393
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
1394
+ "dev": true
1395
+ },
1396
+ "@xtuc/long": {
1397
+ "version": "4.2.2",
1398
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
1399
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
1400
+ "dev": true
1401
+ },
1402
+ "acorn": {
1403
+ "version": "7.1.1",
1404
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
1405
+ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==",
1406
+ "dev": true
1407
+ },
1408
+ "acorn-jsx": {
1409
+ "version": "5.2.0",
1410
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz",
1411
+ "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==",
1412
+ "dev": true
1413
+ },
1414
+ "ajv": {
1415
+ "version": "6.12.0",
1416
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
1417
+ "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
1418
+ "dev": true,
1419
+ "requires": {
1420
+ "fast-deep-equal": "^3.1.1",
1421
+ "fast-json-stable-stringify": "^2.0.0",
1422
+ "json-schema-traverse": "^0.4.1",
1423
+ "uri-js": "^4.2.2"
1424
+ }
1425
+ },
1426
+ "ajv-errors": {
1427
+ "version": "1.0.1",
1428
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
1429
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
1430
+ "dev": true
1431
+ },
1432
+ "ajv-keywords": {
1433
+ "version": "3.4.1",
1434
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
1435
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
1436
+ "dev": true
1437
+ },
1438
+ "ansi-escapes": {
1439
+ "version": "4.3.1",
1440
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
1441
+ "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
1442
+ "dev": true,
1443
+ "requires": {
1444
+ "type-fest": "^0.11.0"
1445
+ },
1446
+ "dependencies": {
1447
+ "type-fest": {
1448
+ "version": "0.11.0",
1449
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
1450
+ "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
1451
+ "dev": true
1452
+ }
1453
+ }
1454
+ },
1455
+ "ansi-regex": {
1456
+ "version": "5.0.0",
1457
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
1458
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
1459
+ "dev": true
1460
+ },
1461
+ "ansi-styles": {
1462
+ "version": "3.2.1",
1463
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1464
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1465
+ "dev": true,
1466
+ "requires": {
1467
+ "color-convert": "^1.9.0"
1468
+ }
1469
+ },
1470
+ "anymatch": {
1471
+ "version": "2.0.0",
1472
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
1473
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
1474
+ "dev": true,
1475
+ "requires": {
1476
+ "micromatch": "^3.1.4",
1477
+ "normalize-path": "^2.1.1"
1478
+ },
1479
+ "dependencies": {
1480
+ "normalize-path": {
1481
+ "version": "2.1.1",
1482
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1483
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1484
+ "dev": true,
1485
+ "requires": {
1486
+ "remove-trailing-separator": "^1.0.1"
1487
+ }
1488
+ }
1489
+ }
1490
+ },
1491
+ "aproba": {
1492
+ "version": "1.2.0",
1493
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
1494
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
1495
+ "dev": true
1496
+ },
1497
+ "argparse": {
1498
+ "version": "1.0.10",
1499
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
1500
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
1501
+ "dev": true,
1502
+ "requires": {
1503
+ "sprintf-js": "~1.0.2"
1504
+ }
1505
+ },
1506
+ "arr-diff": {
1507
+ "version": "4.0.0",
1508
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
1509
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
1510
+ "dev": true
1511
+ },
1512
+ "arr-flatten": {
1513
+ "version": "1.1.0",
1514
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
1515
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
1516
+ "dev": true
1517
+ },
1518
+ "arr-union": {
1519
+ "version": "3.1.0",
1520
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
1521
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
1522
+ "dev": true
1523
+ },
1524
+ "array-includes": {
1525
+ "version": "3.1.1",
1526
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
1527
+ "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
1528
+ "dev": true,
1529
+ "requires": {
1530
+ "define-properties": "^1.1.3",
1531
+ "es-abstract": "^1.17.0",
1532
+ "is-string": "^1.0.5"
1533
+ }
1534
+ },
1535
+ "array-unique": {
1536
+ "version": "0.3.2",
1537
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
1538
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
1539
+ "dev": true
1540
+ },
1541
+ "asn1.js": {
1542
+ "version": "4.10.1",
1543
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
1544
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
1545
+ "dev": true,
1546
+ "requires": {
1547
+ "bn.js": "^4.0.0",
1548
+ "inherits": "^2.0.1",
1549
+ "minimalistic-assert": "^1.0.0"
1550
+ }
1551
+ },
1552
+ "assert": {
1553
+ "version": "1.5.0",
1554
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
1555
+ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
1556
+ "dev": true,
1557
+ "requires": {
1558
+ "object-assign": "^4.1.1",
1559
+ "util": "0.10.3"
1560
+ },
1561
+ "dependencies": {
1562
+ "inherits": {
1563
+ "version": "2.0.1",
1564
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
1565
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
1566
+ "dev": true
1567
+ },
1568
+ "util": {
1569
+ "version": "0.10.3",
1570
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
1571
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
1572
+ "dev": true,
1573
+ "requires": {
1574
+ "inherits": "2.0.1"
1575
+ }
1576
+ }
1577
+ }
1578
+ },
1579
+ "assign-symbols": {
1580
+ "version": "1.0.0",
1581
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
1582
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
1583
+ "dev": true
1584
+ },
1585
+ "astral-regex": {
1586
+ "version": "1.0.0",
1587
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
1588
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
1589
+ "dev": true
1590
+ },
1591
+ "async-each": {
1592
+ "version": "1.0.3",
1593
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
1594
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
1595
+ "dev": true
1596
+ },
1597
+ "at-least-node": {
1598
+ "version": "1.0.0",
1599
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
1600
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
1601
+ "dev": true
1602
+ },
1603
+ "atob": {
1604
+ "version": "2.1.2",
1605
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
1606
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
1607
+ "dev": true
1608
+ },
1609
+ "babel": {
1610
+ "version": "6.23.0",
1611
+ "resolved": "https://registry.npmjs.org/babel/-/babel-6.23.0.tgz",
1612
+ "integrity": "sha1-0NHn2APpdHZb7qMjLU4VPA77kPQ=",
1613
+ "dev": true
1614
+ },
1615
+ "babel-eslint": {
1616
+ "version": "10.1.0",
1617
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
1618
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
1619
+ "dev": true,
1620
+ "requires": {
1621
+ "@babel/code-frame": "^7.0.0",
1622
+ "@babel/parser": "^7.7.0",
1623
+ "@babel/traverse": "^7.7.0",
1624
+ "@babel/types": "^7.7.0",
1625
+ "eslint-visitor-keys": "^1.0.0",
1626
+ "resolve": "^1.12.0"
1627
+ }
1628
+ },
1629
+ "babel-loader": {
1630
+ "version": "8.1.0",
1631
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
1632
+ "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
1633
+ "dev": true,
1634
+ "requires": {
1635
+ "find-cache-dir": "^2.1.0",
1636
+ "loader-utils": "^1.4.0",
1637
+ "mkdirp": "^0.5.3",
1638
+ "pify": "^4.0.1",
1639
+ "schema-utils": "^2.6.5"
1640
+ },
1641
+ "dependencies": {
1642
+ "minimist": {
1643
+ "version": "1.2.5",
1644
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1645
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1646
+ "dev": true
1647
+ },
1648
+ "mkdirp": {
1649
+ "version": "0.5.5",
1650
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1651
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1652
+ "dev": true,
1653
+ "requires": {
1654
+ "minimist": "^1.2.5"
1655
+ }
1656
+ }
1657
+ }
1658
+ },
1659
+ "babel-plugin-dynamic-import-node": {
1660
+ "version": "2.3.0",
1661
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
1662
+ "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
1663
+ "dev": true,
1664
+ "requires": {
1665
+ "object.assign": "^4.1.0"
1666
+ }
1667
+ },
1668
+ "balanced-match": {
1669
+ "version": "1.0.0",
1670
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
1671
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
1672
+ "dev": true
1673
+ },
1674
+ "base": {
1675
+ "version": "0.11.2",
1676
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
1677
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
1678
+ "dev": true,
1679
+ "requires": {
1680
+ "cache-base": "^1.0.1",
1681
+ "class-utils": "^0.3.5",
1682
+ "component-emitter": "^1.2.1",
1683
+ "define-property": "^1.0.0",
1684
+ "isobject": "^3.0.1",
1685
+ "mixin-deep": "^1.2.0",
1686
+ "pascalcase": "^0.1.1"
1687
+ },
1688
+ "dependencies": {
1689
+ "define-property": {
1690
+ "version": "1.0.0",
1691
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
1692
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
1693
+ "dev": true,
1694
+ "requires": {
1695
+ "is-descriptor": "^1.0.0"
1696
+ }
1697
+ },
1698
+ "is-accessor-descriptor": {
1699
+ "version": "1.0.0",
1700
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
1701
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
1702
+ "dev": true,
1703
+ "requires": {
1704
+ "kind-of": "^6.0.0"
1705
+ }
1706
+ },
1707
+ "is-data-descriptor": {
1708
+ "version": "1.0.0",
1709
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
1710
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
1711
+ "dev": true,
1712
+ "requires": {
1713
+ "kind-of": "^6.0.0"
1714
+ }
1715
+ },
1716
+ "is-descriptor": {
1717
+ "version": "1.0.2",
1718
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
1719
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
1720
+ "dev": true,
1721
+ "requires": {
1722
+ "is-accessor-descriptor": "^1.0.0",
1723
+ "is-data-descriptor": "^1.0.0",
1724
+ "kind-of": "^6.0.2"
1725
+ }
1726
+ }
1727
+ }
1728
+ },
1729
+ "base64-js": {
1730
+ "version": "1.3.1",
1731
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
1732
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
1733
+ "dev": true
1734
+ },
1735
+ "big.js": {
1736
+ "version": "5.2.2",
1737
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
1738
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
1739
+ "dev": true
1740
+ },
1741
+ "binary-extensions": {
1742
+ "version": "1.13.1",
1743
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
1744
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
1745
+ "dev": true
1746
+ },
1747
+ "bindings": {
1748
+ "version": "1.5.0",
1749
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
1750
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
1751
+ "dev": true,
1752
+ "optional": true,
1753
+ "requires": {
1754
+ "file-uri-to-path": "1.0.0"
1755
+ }
1756
+ },
1757
+ "bluebird": {
1758
+ "version": "3.7.2",
1759
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
1760
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
1761
+ "dev": true
1762
+ },
1763
+ "bn.js": {
1764
+ "version": "4.11.8",
1765
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
1766
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
1767
+ "dev": true
1768
+ },
1769
+ "brace-expansion": {
1770
+ "version": "1.1.11",
1771
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1772
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1773
+ "dev": true,
1774
+ "requires": {
1775
+ "balanced-match": "^1.0.0",
1776
+ "concat-map": "0.0.1"
1777
+ }
1778
+ },
1779
+ "braces": {
1780
+ "version": "2.3.2",
1781
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
1782
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
1783
+ "dev": true,
1784
+ "requires": {
1785
+ "arr-flatten": "^1.1.0",
1786
+ "array-unique": "^0.3.2",
1787
+ "extend-shallow": "^2.0.1",
1788
+ "fill-range": "^4.0.0",
1789
+ "isobject": "^3.0.1",
1790
+ "repeat-element": "^1.1.2",
1791
+ "snapdragon": "^0.8.1",
1792
+ "snapdragon-node": "^2.0.1",
1793
+ "split-string": "^3.0.2",
1794
+ "to-regex": "^3.0.1"
1795
+ },
1796
+ "dependencies": {
1797
+ "extend-shallow": {
1798
+ "version": "2.0.1",
1799
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
1800
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
1801
+ "dev": true,
1802
+ "requires": {
1803
+ "is-extendable": "^0.1.0"
1804
+ }
1805
+ }
1806
+ }
1807
+ },
1808
+ "brorand": {
1809
+ "version": "1.1.0",
1810
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
1811
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
1812
+ "dev": true
1813
+ },
1814
+ "browserify-aes": {
1815
+ "version": "1.2.0",
1816
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
1817
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
1818
+ "dev": true,
1819
+ "requires": {
1820
+ "buffer-xor": "^1.0.3",
1821
+ "cipher-base": "^1.0.0",
1822
+ "create-hash": "^1.1.0",
1823
+ "evp_bytestokey": "^1.0.3",
1824
+ "inherits": "^2.0.1",
1825
+ "safe-buffer": "^5.0.1"
1826
+ }
1827
+ },
1828
+ "browserify-cipher": {
1829
+ "version": "1.0.1",
1830
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
1831
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
1832
+ "dev": true,
1833
+ "requires": {
1834
+ "browserify-aes": "^1.0.4",
1835
+ "browserify-des": "^1.0.0",
1836
+ "evp_bytestokey": "^1.0.0"
1837
+ }
1838
+ },
1839
+ "browserify-des": {
1840
+ "version": "1.0.2",
1841
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
1842
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
1843
+ "dev": true,
1844
+ "requires": {
1845
+ "cipher-base": "^1.0.1",
1846
+ "des.js": "^1.0.0",
1847
+ "inherits": "^2.0.1",
1848
+ "safe-buffer": "^5.1.2"
1849
+ }
1850
+ },
1851
+ "browserify-rsa": {
1852
+ "version": "4.0.1",
1853
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
1854
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
1855
+ "dev": true,
1856
+ "requires": {
1857
+ "bn.js": "^4.1.0",
1858
+ "randombytes": "^2.0.1"
1859
+ }
1860
+ },
1861
+ "browserify-sign": {
1862
+ "version": "4.0.4",
1863
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
1864
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
1865
+ "dev": true,
1866
+ "requires": {
1867
+ "bn.js": "^4.1.1",
1868
+ "browserify-rsa": "^4.0.0",
1869
+ "create-hash": "^1.1.0",
1870
+ "create-hmac": "^1.1.2",
1871
+ "elliptic": "^6.0.0",
1872
+ "inherits": "^2.0.1",
1873
+ "parse-asn1": "^5.0.0"
1874
+ }
1875
+ },
1876
+ "browserify-zlib": {
1877
+ "version": "0.2.0",
1878
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
1879
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
1880
+ "dev": true,
1881
+ "requires": {
1882
+ "pako": "~1.0.5"
1883
+ }
1884
+ },
1885
+ "browserslist": {
1886
+ "version": "4.11.1",
1887
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.1.tgz",
1888
+ "integrity": "sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==",
1889
+ "dev": true,
1890
+ "requires": {
1891
+ "caniuse-lite": "^1.0.30001038",
1892
+ "electron-to-chromium": "^1.3.390",
1893
+ "node-releases": "^1.1.53",
1894
+ "pkg-up": "^2.0.0"
1895
+ }
1896
+ },
1897
+ "buffer": {
1898
+ "version": "4.9.2",
1899
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
1900
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
1901
+ "dev": true,
1902
+ "requires": {
1903
+ "base64-js": "^1.0.2",
1904
+ "ieee754": "^1.1.4",
1905
+ "isarray": "^1.0.0"
1906
+ }
1907
+ },
1908
+ "buffer-from": {
1909
+ "version": "1.1.1",
1910
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
1911
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
1912
+ "dev": true
1913
+ },
1914
+ "buffer-xor": {
1915
+ "version": "1.0.3",
1916
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
1917
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
1918
+ "dev": true
1919
+ },
1920
+ "builtin-status-codes": {
1921
+ "version": "3.0.0",
1922
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
1923
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
1924
+ "dev": true
1925
+ },
1926
+ "cacache": {
1927
+ "version": "12.0.4",
1928
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
1929
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
1930
+ "dev": true,
1931
+ "requires": {
1932
+ "bluebird": "^3.5.5",
1933
+ "chownr": "^1.1.1",
1934
+ "figgy-pudding": "^3.5.1",
1935
+ "glob": "^7.1.4",
1936
+ "graceful-fs": "^4.1.15",
1937
+ "infer-owner": "^1.0.3",
1938
+ "lru-cache": "^5.1.1",
1939
+ "mississippi": "^3.0.0",
1940
+ "mkdirp": "^0.5.1",
1941
+ "move-concurrently": "^1.0.1",
1942
+ "promise-inflight": "^1.0.1",
1943
+ "rimraf": "^2.6.3",
1944
+ "ssri": "^6.0.1",
1945
+ "unique-filename": "^1.1.1",
1946
+ "y18n": "^4.0.0"
1947
+ }
1948
+ },
1949
+ "cache-base": {
1950
+ "version": "1.0.1",
1951
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
1952
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
1953
+ "dev": true,
1954
+ "requires": {
1955
+ "collection-visit": "^1.0.0",
1956
+ "component-emitter": "^1.2.1",
1957
+ "get-value": "^2.0.6",
1958
+ "has-value": "^1.0.0",
1959
+ "isobject": "^3.0.1",
1960
+ "set-value": "^2.0.0",
1961
+ "to-object-path": "^0.3.0",
1962
+ "union-value": "^1.0.0",
1963
+ "unset-value": "^1.0.0"
1964
+ }
1965
+ },
1966
+ "callsites": {
1967
+ "version": "3.1.0",
1968
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1969
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1970
+ "dev": true
1971
+ },
1972
+ "camelcase": {
1973
+ "version": "5.3.1",
1974
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
1975
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
1976
+ "dev": true
1977
+ },
1978
+ "caniuse-lite": {
1979
+ "version": "1.0.30001039",
1980
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz",
1981
+ "integrity": "sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==",
1982
+ "dev": true
1983
+ },
1984
+ "chalk": {
1985
+ "version": "2.4.2",
1986
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1987
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1988
+ "dev": true,
1989
+ "requires": {
1990
+ "ansi-styles": "^3.2.1",
1991
+ "escape-string-regexp": "^1.0.5",
1992
+ "supports-color": "^5.3.0"
1993
+ }
1994
+ },
1995
+ "chardet": {
1996
+ "version": "0.7.0",
1997
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
1998
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
1999
+ "dev": true
2000
+ },
2001
+ "chokidar": {
2002
+ "version": "2.1.8",
2003
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
2004
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
2005
+ "dev": true,
2006
+ "requires": {
2007
+ "anymatch": "^2.0.0",
2008
+ "async-each": "^1.0.1",
2009
+ "braces": "^2.3.2",
2010
+ "fsevents": "^1.2.7",
2011
+ "glob-parent": "^3.1.0",
2012
+ "inherits": "^2.0.3",
2013
+ "is-binary-path": "^1.0.0",
2014
+ "is-glob": "^4.0.0",
2015
+ "normalize-path": "^3.0.0",
2016
+ "path-is-absolute": "^1.0.0",
2017
+ "readdirp": "^2.2.1",
2018
+ "upath": "^1.1.1"
2019
+ },
2020
+ "dependencies": {
2021
+ "glob-parent": {
2022
+ "version": "3.1.0",
2023
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
2024
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
2025
+ "dev": true,
2026
+ "requires": {
2027
+ "is-glob": "^3.1.0",
2028
+ "path-dirname": "^1.0.0"
2029
+ },
2030
+ "dependencies": {
2031
+ "is-glob": {
2032
+ "version": "3.1.0",
2033
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
2034
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
2035
+ "dev": true,
2036
+ "requires": {
2037
+ "is-extglob": "^2.1.0"
2038
+ }
2039
+ }
2040
+ }
2041
+ }
2042
+ }
2043
+ },
2044
+ "chownr": {
2045
+ "version": "1.1.4",
2046
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
2047
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
2048
+ "dev": true
2049
+ },
2050
+ "chrome-trace-event": {
2051
+ "version": "1.0.2",
2052
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
2053
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
2054
+ "dev": true,
2055
+ "requires": {
2056
+ "tslib": "^1.9.0"
2057
+ }
2058
+ },
2059
+ "ci-info": {
2060
+ "version": "1.6.0",
2061
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
2062
+ "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
2063
+ "dev": true
2064
+ },
2065
+ "cipher-base": {
2066
+ "version": "1.0.4",
2067
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
2068
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
2069
+ "dev": true,
2070
+ "requires": {
2071
+ "inherits": "^2.0.1",
2072
+ "safe-buffer": "^5.0.1"
2073
+ }
2074
+ },
2075
+ "class-utils": {
2076
+ "version": "0.3.6",
2077
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
2078
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
2079
+ "dev": true,
2080
+ "requires": {
2081
+ "arr-union": "^3.1.0",
2082
+ "define-property": "^0.2.5",
2083
+ "isobject": "^3.0.0",
2084
+ "static-extend": "^0.1.1"
2085
+ },
2086
+ "dependencies": {
2087
+ "define-property": {
2088
+ "version": "0.2.5",
2089
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2090
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2091
+ "dev": true,
2092
+ "requires": {
2093
+ "is-descriptor": "^0.1.0"
2094
+ }
2095
+ }
2096
+ }
2097
+ },
2098
+ "cli-cursor": {
2099
+ "version": "3.1.0",
2100
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
2101
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
2102
+ "dev": true,
2103
+ "requires": {
2104
+ "restore-cursor": "^3.1.0"
2105
+ }
2106
+ },
2107
+ "cli-width": {
2108
+ "version": "2.2.0",
2109
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
2110
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
2111
+ "dev": true
2112
+ },
2113
+ "cliui": {
2114
+ "version": "5.0.0",
2115
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
2116
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
2117
+ "dev": true,
2118
+ "requires": {
2119
+ "string-width": "^3.1.0",
2120
+ "strip-ansi": "^5.2.0",
2121
+ "wrap-ansi": "^5.1.0"
2122
+ },
2123
+ "dependencies": {
2124
+ "emoji-regex": {
2125
+ "version": "7.0.3",
2126
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2127
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
2128
+ "dev": true
2129
+ },
2130
+ "is-fullwidth-code-point": {
2131
+ "version": "2.0.0",
2132
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
2133
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
2134
+ "dev": true
2135
+ },
2136
+ "string-width": {
2137
+ "version": "3.1.0",
2138
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2139
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2140
+ "dev": true,
2141
+ "requires": {
2142
+ "emoji-regex": "^7.0.1",
2143
+ "is-fullwidth-code-point": "^2.0.0",
2144
+ "strip-ansi": "^5.1.0"
2145
+ }
2146
+ }
2147
+ }
2148
+ },
2149
+ "collection-visit": {
2150
+ "version": "1.0.0",
2151
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
2152
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
2153
+ "dev": true,
2154
+ "requires": {
2155
+ "map-visit": "^1.0.0",
2156
+ "object-visit": "^1.0.0"
2157
+ }
2158
+ },
2159
+ "color-convert": {
2160
+ "version": "1.9.3",
2161
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2162
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2163
+ "dev": true,
2164
+ "requires": {
2165
+ "color-name": "1.1.3"
2166
+ }
2167
+ },
2168
+ "color-name": {
2169
+ "version": "1.1.3",
2170
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2171
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
2172
+ "dev": true
2173
+ },
2174
+ "commander": {
2175
+ "version": "2.20.3",
2176
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
2177
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
2178
+ "dev": true
2179
+ },
2180
+ "commondir": {
2181
+ "version": "1.0.1",
2182
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
2183
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
2184
+ "dev": true
2185
+ },
2186
+ "component-emitter": {
2187
+ "version": "1.3.0",
2188
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
2189
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
2190
+ "dev": true
2191
+ },
2192
+ "concat-map": {
2193
+ "version": "0.0.1",
2194
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2195
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
2196
+ "dev": true
2197
+ },
2198
+ "concat-stream": {
2199
+ "version": "1.6.2",
2200
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
2201
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
2202
+ "dev": true,
2203
+ "requires": {
2204
+ "buffer-from": "^1.0.0",
2205
+ "inherits": "^2.0.3",
2206
+ "readable-stream": "^2.2.2",
2207
+ "typedarray": "^0.0.6"
2208
+ }
2209
+ },
2210
+ "consola": {
2211
+ "version": "2.10.1",
2212
+ "resolved": "https://registry.npmjs.org/consola/-/consola-2.10.1.tgz",
2213
+ "integrity": "sha512-4sxpH6SGFYLADfUip4vuY65f/gEogrzJoniVhNUYkJHtng0l8ZjnDCqxxrSVRHOHwKxsy8Vm5ONZh1wOR3/l/w==",
2214
+ "dev": true
2215
+ },
2216
+ "console-browserify": {
2217
+ "version": "1.2.0",
2218
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
2219
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
2220
+ "dev": true
2221
+ },
2222
+ "constants-browserify": {
2223
+ "version": "1.0.0",
2224
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
2225
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
2226
+ "dev": true
2227
+ },
2228
+ "convert-source-map": {
2229
+ "version": "1.7.0",
2230
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
2231
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
2232
+ "dev": true,
2233
+ "requires": {
2234
+ "safe-buffer": "~5.1.1"
2235
+ },
2236
+ "dependencies": {
2237
+ "safe-buffer": {
2238
+ "version": "5.1.2",
2239
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2240
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2241
+ "dev": true
2242
+ }
2243
+ }
2244
+ },
2245
+ "copy-concurrently": {
2246
+ "version": "1.0.5",
2247
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
2248
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
2249
+ "dev": true,
2250
+ "requires": {
2251
+ "aproba": "^1.1.1",
2252
+ "fs-write-stream-atomic": "^1.0.8",
2253
+ "iferr": "^0.1.5",
2254
+ "mkdirp": "^0.5.1",
2255
+ "rimraf": "^2.5.4",
2256
+ "run-queue": "^1.0.0"
2257
+ }
2258
+ },
2259
+ "copy-descriptor": {
2260
+ "version": "0.1.1",
2261
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
2262
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
2263
+ "dev": true
2264
+ },
2265
+ "core-js-compat": {
2266
+ "version": "3.6.4",
2267
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
2268
+ "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==",
2269
+ "dev": true,
2270
+ "requires": {
2271
+ "browserslist": "^4.8.3",
2272
+ "semver": "7.0.0"
2273
+ },
2274
+ "dependencies": {
2275
+ "semver": {
2276
+ "version": "7.0.0",
2277
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
2278
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
2279
+ "dev": true
2280
+ }
2281
+ }
2282
+ },
2283
+ "core-js-pure": {
2284
+ "version": "3.6.4",
2285
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.4.tgz",
2286
+ "integrity": "sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw==",
2287
+ "dev": true
2288
+ },
2289
+ "core-util-is": {
2290
+ "version": "1.0.2",
2291
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
2292
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
2293
+ "dev": true
2294
+ },
2295
+ "create-ecdh": {
2296
+ "version": "4.0.3",
2297
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
2298
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
2299
+ "dev": true,
2300
+ "requires": {
2301
+ "bn.js": "^4.1.0",
2302
+ "elliptic": "^6.0.0"
2303
+ }
2304
+ },
2305
+ "create-hash": {
2306
+ "version": "1.2.0",
2307
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
2308
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
2309
+ "dev": true,
2310
+ "requires": {
2311
+ "cipher-base": "^1.0.1",
2312
+ "inherits": "^2.0.1",
2313
+ "md5.js": "^1.3.4",
2314
+ "ripemd160": "^2.0.1",
2315
+ "sha.js": "^2.4.0"
2316
+ }
2317
+ },
2318
+ "create-hmac": {
2319
+ "version": "1.1.7",
2320
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
2321
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
2322
+ "dev": true,
2323
+ "requires": {
2324
+ "cipher-base": "^1.0.3",
2325
+ "create-hash": "^1.1.0",
2326
+ "inherits": "^2.0.1",
2327
+ "ripemd160": "^2.0.0",
2328
+ "safe-buffer": "^5.0.1",
2329
+ "sha.js": "^2.4.8"
2330
+ }
2331
+ },
2332
+ "cross-spawn": {
2333
+ "version": "6.0.5",
2334
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
2335
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
2336
+ "dev": true,
2337
+ "requires": {
2338
+ "nice-try": "^1.0.4",
2339
+ "path-key": "^2.0.1",
2340
+ "semver": "^5.5.0",
2341
+ "shebang-command": "^1.2.0",
2342
+ "which": "^1.2.9"
2343
+ }
2344
+ },
2345
+ "crypto-browserify": {
2346
+ "version": "3.12.0",
2347
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
2348
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
2349
+ "dev": true,
2350
+ "requires": {
2351
+ "browserify-cipher": "^1.0.0",
2352
+ "browserify-sign": "^4.0.0",
2353
+ "create-ecdh": "^4.0.0",
2354
+ "create-hash": "^1.1.0",
2355
+ "create-hmac": "^1.1.0",
2356
+ "diffie-hellman": "^5.0.0",
2357
+ "inherits": "^2.0.1",
2358
+ "pbkdf2": "^3.0.3",
2359
+ "public-encrypt": "^4.0.0",
2360
+ "randombytes": "^2.0.0",
2361
+ "randomfill": "^1.0.3"
2362
+ }
2363
+ },
2364
+ "css-loader": {
2365
+ "version": "3.4.2",
2366
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
2367
+ "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
2368
+ "dev": true,
2369
+ "requires": {
2370
+ "camelcase": "^5.3.1",
2371
+ "cssesc": "^3.0.0",
2372
+ "icss-utils": "^4.1.1",
2373
+ "loader-utils": "^1.2.3",
2374
+ "normalize-path": "^3.0.0",
2375
+ "postcss": "^7.0.23",
2376
+ "postcss-modules-extract-imports": "^2.0.0",
2377
+ "postcss-modules-local-by-default": "^3.0.2",
2378
+ "postcss-modules-scope": "^2.1.1",
2379
+ "postcss-modules-values": "^3.0.0",
2380
+ "postcss-value-parser": "^4.0.2",
2381
+ "schema-utils": "^2.6.0"
2382
+ },
2383
+ "dependencies": {
2384
+ "big.js": {
2385
+ "version": "5.2.2",
2386
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
2387
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
2388
+ "dev": true
2389
+ },
2390
+ "emojis-list": {
2391
+ "version": "3.0.0",
2392
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
2393
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
2394
+ "dev": true
2395
+ },
2396
+ "json5": {
2397
+ "version": "1.0.1",
2398
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
2399
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
2400
+ "dev": true,
2401
+ "requires": {
2402
+ "minimist": "^1.2.0"
2403
+ }
2404
+ },
2405
+ "loader-utils": {
2406
+ "version": "1.4.0",
2407
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
2408
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
2409
+ "dev": true,
2410
+ "requires": {
2411
+ "big.js": "^5.2.2",
2412
+ "emojis-list": "^3.0.0",
2413
+ "json5": "^1.0.1"
2414
+ }
2415
+ },
2416
+ "minimist": {
2417
+ "version": "1.2.5",
2418
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
2419
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
2420
+ "dev": true
2421
+ }
2422
+ }
2423
+ },
2424
+ "cssesc": {
2425
+ "version": "3.0.0",
2426
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2427
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
2428
+ "dev": true
2429
+ },
2430
+ "cyclist": {
2431
+ "version": "1.0.1",
2432
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
2433
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
2434
+ "dev": true
2435
+ },
2436
+ "debug": {
2437
+ "version": "4.1.1",
2438
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
2439
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
2440
+ "dev": true,
2441
+ "requires": {
2442
+ "ms": "^2.1.1"
2443
+ }
2444
+ },
2445
+ "decamelize": {
2446
+ "version": "1.2.0",
2447
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
2448
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
2449
+ "dev": true
2450
+ },
2451
+ "decode-uri-component": {
2452
+ "version": "0.2.0",
2453
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
2454
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
2455
+ "dev": true
2456
+ },
2457
+ "deep-is": {
2458
+ "version": "0.1.3",
2459
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
2460
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
2461
+ "dev": true
2462
+ },
2463
+ "define-properties": {
2464
+ "version": "1.1.3",
2465
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
2466
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
2467
+ "dev": true,
2468
+ "requires": {
2469
+ "object-keys": "^1.0.12"
2470
+ }
2471
+ },
2472
+ "define-property": {
2473
+ "version": "2.0.2",
2474
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
2475
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
2476
+ "dev": true,
2477
+ "requires": {
2478
+ "is-descriptor": "^1.0.2",
2479
+ "isobject": "^3.0.1"
2480
+ },
2481
+ "dependencies": {
2482
+ "is-accessor-descriptor": {
2483
+ "version": "1.0.0",
2484
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
2485
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
2486
+ "dev": true,
2487
+ "requires": {
2488
+ "kind-of": "^6.0.0"
2489
+ }
2490
+ },
2491
+ "is-data-descriptor": {
2492
+ "version": "1.0.0",
2493
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
2494
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
2495
+ "dev": true,
2496
+ "requires": {
2497
+ "kind-of": "^6.0.0"
2498
+ }
2499
+ },
2500
+ "is-descriptor": {
2501
+ "version": "1.0.2",
2502
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
2503
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
2504
+ "dev": true,
2505
+ "requires": {
2506
+ "is-accessor-descriptor": "^1.0.0",
2507
+ "is-data-descriptor": "^1.0.0",
2508
+ "kind-of": "^6.0.2"
2509
+ }
2510
+ }
2511
+ }
2512
+ },
2513
+ "des.js": {
2514
+ "version": "1.0.1",
2515
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
2516
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
2517
+ "dev": true,
2518
+ "requires": {
2519
+ "inherits": "^2.0.1",
2520
+ "minimalistic-assert": "^1.0.0"
2521
+ }
2522
+ },
2523
+ "detect-file": {
2524
+ "version": "1.0.0",
2525
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
2526
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
2527
+ "dev": true
2528
+ },
2529
+ "diffie-hellman": {
2530
+ "version": "5.0.3",
2531
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
2532
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
2533
+ "dev": true,
2534
+ "requires": {
2535
+ "bn.js": "^4.1.0",
2536
+ "miller-rabin": "^4.0.0",
2537
+ "randombytes": "^2.0.0"
2538
+ }
2539
+ },
2540
+ "doctrine": {
2541
+ "version": "3.0.0",
2542
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
2543
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
2544
+ "dev": true,
2545
+ "requires": {
2546
+ "esutils": "^2.0.2"
2547
+ }
2548
+ },
2549
+ "domain-browser": {
2550
+ "version": "1.2.0",
2551
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
2552
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
2553
+ "dev": true
2554
+ },
2555
+ "duplexify": {
2556
+ "version": "3.7.1",
2557
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
2558
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
2559
+ "dev": true,
2560
+ "requires": {
2561
+ "end-of-stream": "^1.0.0",
2562
+ "inherits": "^2.0.1",
2563
+ "readable-stream": "^2.0.0",
2564
+ "stream-shift": "^1.0.0"
2565
+ }
2566
+ },
2567
+ "electron-to-chromium": {
2568
+ "version": "1.3.397",
2569
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz",
2570
+ "integrity": "sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==",
2571
+ "dev": true
2572
+ },
2573
+ "elliptic": {
2574
+ "version": "6.5.2",
2575
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
2576
+ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
2577
+ "dev": true,
2578
+ "requires": {
2579
+ "bn.js": "^4.4.0",
2580
+ "brorand": "^1.0.1",
2581
+ "hash.js": "^1.0.0",
2582
+ "hmac-drbg": "^1.0.0",
2583
+ "inherits": "^2.0.1",
2584
+ "minimalistic-assert": "^1.0.0",
2585
+ "minimalistic-crypto-utils": "^1.0.0"
2586
+ }
2587
+ },
2588
+ "emoji-regex": {
2589
+ "version": "8.0.0",
2590
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2591
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2592
+ "dev": true
2593
+ },
2594
+ "emojis-list": {
2595
+ "version": "2.1.0",
2596
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
2597
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
2598
+ "dev": true
2599
+ },
2600
+ "encoding": {
2601
+ "version": "0.1.12",
2602
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
2603
+ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
2604
+ "requires": {
2605
+ "iconv-lite": "~0.4.13"
2606
+ }
2607
+ },
2608
+ "end-of-stream": {
2609
+ "version": "1.4.4",
2610
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2611
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
2612
+ "dev": true,
2613
+ "requires": {
2614
+ "once": "^1.4.0"
2615
+ }
2616
+ },
2617
+ "enhanced-resolve": {
2618
+ "version": "4.1.1",
2619
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
2620
+ "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
2621
+ "dev": true,
2622
+ "requires": {
2623
+ "graceful-fs": "^4.1.2",
2624
+ "memory-fs": "^0.5.0",
2625
+ "tapable": "^1.0.0"
2626
+ },
2627
+ "dependencies": {
2628
+ "memory-fs": {
2629
+ "version": "0.5.0",
2630
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
2631
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
2632
+ "dev": true,
2633
+ "requires": {
2634
+ "errno": "^0.1.3",
2635
+ "readable-stream": "^2.0.1"
2636
+ }
2637
+ }
2638
+ }
2639
+ },
2640
+ "errno": {
2641
+ "version": "0.1.7",
2642
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
2643
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
2644
+ "dev": true,
2645
+ "requires": {
2646
+ "prr": "~1.0.1"
2647
+ }
2648
+ },
2649
+ "es-abstract": {
2650
+ "version": "1.17.4",
2651
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz",
2652
+ "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==",
2653
+ "dev": true,
2654
+ "requires": {
2655
+ "es-to-primitive": "^1.2.1",
2656
+ "function-bind": "^1.1.1",
2657
+ "has": "^1.0.3",
2658
+ "has-symbols": "^1.0.1",
2659
+ "is-callable": "^1.1.5",
2660
+ "is-regex": "^1.0.5",
2661
+ "object-inspect": "^1.7.0",
2662
+ "object-keys": "^1.1.1",
2663
+ "object.assign": "^4.1.0",
2664
+ "string.prototype.trimleft": "^2.1.1",
2665
+ "string.prototype.trimright": "^2.1.1"
2666
+ }
2667
+ },
2668
+ "es-to-primitive": {
2669
+ "version": "1.2.1",
2670
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
2671
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
2672
+ "dev": true,
2673
+ "requires": {
2674
+ "is-callable": "^1.1.4",
2675
+ "is-date-object": "^1.0.1",
2676
+ "is-symbol": "^1.0.2"
2677
+ }
2678
+ },
2679
+ "escape-string-regexp": {
2680
+ "version": "1.0.5",
2681
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
2682
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
2683
+ "dev": true
2684
+ },
2685
+ "eslint": {
2686
+ "version": "6.8.0",
2687
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
2688
+ "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
2689
+ "dev": true,
2690
+ "requires": {
2691
+ "@babel/code-frame": "^7.0.0",
2692
+ "ajv": "^6.10.0",
2693
+ "chalk": "^2.1.0",
2694
+ "cross-spawn": "^6.0.5",
2695
+ "debug": "^4.0.1",
2696
+ "doctrine": "^3.0.0",
2697
+ "eslint-scope": "^5.0.0",
2698
+ "eslint-utils": "^1.4.3",
2699
+ "eslint-visitor-keys": "^1.1.0",
2700
+ "espree": "^6.1.2",
2701
+ "esquery": "^1.0.1",
2702
+ "esutils": "^2.0.2",
2703
+ "file-entry-cache": "^5.0.1",
2704
+ "functional-red-black-tree": "^1.0.1",
2705
+ "glob-parent": "^5.0.0",
2706
+ "globals": "^12.1.0",
2707
+ "ignore": "^4.0.6",
2708
+ "import-fresh": "^3.0.0",
2709
+ "imurmurhash": "^0.1.4",
2710
+ "inquirer": "^7.0.0",
2711
+ "is-glob": "^4.0.0",
2712
+ "js-yaml": "^3.13.1",
2713
+ "json-stable-stringify-without-jsonify": "^1.0.1",
2714
+ "levn": "^0.3.0",
2715
+ "lodash": "^4.17.14",
2716
+ "minimatch": "^3.0.4",
2717
+ "mkdirp": "^0.5.1",
2718
+ "natural-compare": "^1.4.0",
2719
+ "optionator": "^0.8.3",
2720
+ "progress": "^2.0.0",
2721
+ "regexpp": "^2.0.1",
2722
+ "semver": "^6.1.2",
2723
+ "strip-ansi": "^5.2.0",
2724
+ "strip-json-comments": "^3.0.1",
2725
+ "table": "^5.2.3",
2726
+ "text-table": "^0.2.0",
2727
+ "v8-compile-cache": "^2.0.3"
2728
+ },
2729
+ "dependencies": {
2730
+ "globals": {
2731
+ "version": "12.4.0",
2732
+ "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
2733
+ "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
2734
+ "dev": true,
2735
+ "requires": {
2736
+ "type-fest": "^0.8.1"
2737
+ }
2738
+ },
2739
+ "semver": {
2740
+ "version": "6.3.0",
2741
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2742
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2743
+ "dev": true
2744
+ },
2745
+ "type-fest": {
2746
+ "version": "0.8.1",
2747
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2748
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2749
+ "dev": true
2750
+ }
2751
+ }
2752
+ },
2753
+ "eslint-config-wordpress": {
2754
+ "version": "2.0.0",
2755
+ "resolved": "https://registry.npmjs.org/eslint-config-wordpress/-/eslint-config-wordpress-2.0.0.tgz",
2756
+ "integrity": "sha1-UgEgbGlk1kgxUjLt9t+9LpJeTNY=",
2757
+ "dev": true
2758
+ },
2759
+ "eslint-loader": {
2760
+ "version": "4.0.0",
2761
+ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.0.tgz",
2762
+ "integrity": "sha512-QoaFRdh3oXt5i2uonSjO8dDnncsG05w7qvA7yYMvGDne8zAEk9R+R1rsfunp3OKVdO5mAJelf1x2Z1kYp664kA==",
2763
+ "dev": true,
2764
+ "requires": {
2765
+ "fs-extra": "^9.0.0",
2766
+ "loader-fs-cache": "^1.0.3",
2767
+ "loader-utils": "^2.0.0",
2768
+ "object-hash": "^2.0.3",
2769
+ "schema-utils": "^2.6.5"
2770
+ },
2771
+ "dependencies": {
2772
+ "emojis-list": {
2773
+ "version": "3.0.0",
2774
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
2775
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
2776
+ "dev": true
2777
+ },
2778
+ "loader-utils": {
2779
+ "version": "2.0.0",
2780
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
2781
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
2782
+ "dev": true,
2783
+ "requires": {
2784
+ "big.js": "^5.2.2",
2785
+ "emojis-list": "^3.0.0",
2786
+ "json5": "^2.1.2"
2787
+ }
2788
+ }
2789
+ }
2790
+ },
2791
+ "eslint-plugin-react": {
2792
+ "version": "7.19.0",
2793
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz",
2794
+ "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==",
2795
+ "dev": true,
2796
+ "requires": {
2797
+ "array-includes": "^3.1.1",
2798
+ "doctrine": "^2.1.0",
2799
+ "has": "^1.0.3",
2800
+ "jsx-ast-utils": "^2.2.3",
2801
+ "object.entries": "^1.1.1",
2802
+ "object.fromentries": "^2.0.2",
2803
+ "object.values": "^1.1.1",
2804
+ "prop-types": "^15.7.2",
2805
+ "resolve": "^1.15.1",
2806
+ "semver": "^6.3.0",
2807
+ "string.prototype.matchall": "^4.0.2",
2808
+ "xregexp": "^4.3.0"
2809
+ },
2810
+ "dependencies": {
2811
+ "doctrine": {
2812
+ "version": "2.1.0",
2813
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
2814
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
2815
+ "dev": true,
2816
+ "requires": {
2817
+ "esutils": "^2.0.2"
2818
+ }
2819
+ },
2820
+ "semver": {
2821
+ "version": "6.3.0",
2822
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
2823
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2824
+ "dev": true
2825
+ }
2826
+ }
2827
+ },
2828
+ "eslint-scope": {
2829
+ "version": "5.0.0",
2830
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
2831
+ "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
2832
+ "dev": true,
2833
+ "requires": {
2834
+ "esrecurse": "^4.1.0",
2835
+ "estraverse": "^4.1.1"
2836
+ }
2837
+ },
2838
+ "eslint-utils": {
2839
+ "version": "1.4.3",
2840
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
2841
+ "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
2842
+ "dev": true,
2843
+ "requires": {
2844
+ "eslint-visitor-keys": "^1.1.0"
2845
+ }
2846
+ },
2847
+ "eslint-visitor-keys": {
2848
+ "version": "1.1.0",
2849
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
2850
+ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
2851
+ "dev": true
2852
+ },
2853
+ "espree": {
2854
+ "version": "6.2.1",
2855
+ "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
2856
+ "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
2857
+ "dev": true,
2858
+ "requires": {
2859
+ "acorn": "^7.1.1",
2860
+ "acorn-jsx": "^5.2.0",
2861
+ "eslint-visitor-keys": "^1.1.0"
2862
+ }
2863
+ },
2864
+ "esprima": {
2865
+ "version": "4.0.1",
2866
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
2867
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
2868
+ "dev": true
2869
+ },
2870
+ "esquery": {
2871
+ "version": "1.1.0",
2872
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz",
2873
+ "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==",
2874
+ "dev": true,
2875
+ "requires": {
2876
+ "estraverse": "^4.0.0"
2877
+ }
2878
+ },
2879
+ "esrecurse": {
2880
+ "version": "4.2.1",
2881
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
2882
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
2883
+ "dev": true,
2884
+ "requires": {
2885
+ "estraverse": "^4.1.0"
2886
+ }
2887
+ },
2888
+ "estraverse": {
2889
+ "version": "4.3.0",
2890
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
2891
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
2892
+ "dev": true
2893
+ },
2894
+ "esutils": {
2895
+ "version": "2.0.3",
2896
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
2897
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
2898
+ "dev": true
2899
+ },
2900
+ "events": {
2901
+ "version": "3.1.0",
2902
+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
2903
+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
2904
+ "dev": true
2905
+ },
2906
+ "evp_bytestokey": {
2907
+ "version": "1.0.3",
2908
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
2909
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
2910
+ "dev": true,
2911
+ "requires": {
2912
+ "md5.js": "^1.3.4",
2913
+ "safe-buffer": "^5.1.1"
2914
+ }
2915
+ },
2916
+ "execa": {
2917
+ "version": "1.0.0",
2918
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
2919
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
2920
+ "dev": true,
2921
+ "requires": {
2922
+ "cross-spawn": "^6.0.0",
2923
+ "get-stream": "^4.0.0",
2924
+ "is-stream": "^1.1.0",
2925
+ "npm-run-path": "^2.0.0",
2926
+ "p-finally": "^1.0.0",
2927
+ "signal-exit": "^3.0.0",
2928
+ "strip-eof": "^1.0.0"
2929
+ }
2930
+ },
2931
+ "expand-brackets": {
2932
+ "version": "2.1.4",
2933
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
2934
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
2935
+ "dev": true,
2936
+ "requires": {
2937
+ "debug": "^2.3.3",
2938
+ "define-property": "^0.2.5",
2939
+ "extend-shallow": "^2.0.1",
2940
+ "posix-character-classes": "^0.1.0",
2941
+ "regex-not": "^1.0.0",
2942
+ "snapdragon": "^0.8.1",
2943
+ "to-regex": "^3.0.1"
2944
+ },
2945
+ "dependencies": {
2946
+ "debug": {
2947
+ "version": "2.6.9",
2948
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2949
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2950
+ "dev": true,
2951
+ "requires": {
2952
+ "ms": "2.0.0"
2953
+ }
2954
+ },
2955
+ "define-property": {
2956
+ "version": "0.2.5",
2957
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
2958
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
2959
+ "dev": true,
2960
+ "requires": {
2961
+ "is-descriptor": "^0.1.0"
2962
+ }
2963
+ },
2964
+ "extend-shallow": {
2965
+ "version": "2.0.1",
2966
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
2967
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
2968
+ "dev": true,
2969
+ "requires": {
2970
+ "is-extendable": "^0.1.0"
2971
+ }
2972
+ },
2973
+ "ms": {
2974
+ "version": "2.0.0",
2975
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2976
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2977
+ "dev": true
2978
+ }
2979
+ }
2980
+ },
2981
+ "expand-tilde": {
2982
+ "version": "2.0.2",
2983
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
2984
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
2985
+ "dev": true,
2986
+ "requires": {
2987
+ "homedir-polyfill": "^1.0.1"
2988
+ }
2989
+ },
2990
+ "extend-shallow": {
2991
+ "version": "3.0.2",
2992
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
2993
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
2994
+ "dev": true,
2995
+ "requires": {
2996
+ "assign-symbols": "^1.0.0",
2997
+ "is-extendable": "^1.0.1"
2998
+ },
2999
+ "dependencies": {
3000
+ "is-extendable": {
3001
+ "version": "1.0.1",
3002
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
3003
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
3004
+ "dev": true,
3005
+ "requires": {
3006
+ "is-plain-object": "^2.0.4"
3007
+ }
3008
+ }
3009
+ }
3010
+ },
3011
+ "external-editor": {
3012
+ "version": "3.1.0",
3013
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
3014
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
3015
+ "dev": true,
3016
+ "requires": {
3017
+ "chardet": "^0.7.0",
3018
+ "iconv-lite": "^0.4.24",
3019
+ "tmp": "^0.0.33"
3020
+ }
3021
+ },
3022
+ "extglob": {
3023
+ "version": "2.0.4",
3024
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
3025
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
3026
+ "dev": true,
3027
+ "requires": {
3028
+ "array-unique": "^0.3.2",
3029
+ "define-property": "^1.0.0",
3030
+ "expand-brackets": "^2.1.4",
3031
+ "extend-shallow": "^2.0.1",
3032
+ "fragment-cache": "^0.2.1",
3033
+ "regex-not": "^1.0.0",
3034
+ "snapdragon": "^0.8.1",
3035
+ "to-regex": "^3.0.1"
3036
+ },
3037
+ "dependencies": {
3038
+ "define-property": {
3039
+ "version": "1.0.0",
3040
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
3041
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
3042
+ "dev": true,
3043
+ "requires": {
3044
+ "is-descriptor": "^1.0.0"
3045
+ }
3046
+ },
3047
+ "extend-shallow": {
3048
+ "version": "2.0.1",
3049
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3050
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3051
+ "dev": true,
3052
+ "requires": {
3053
+ "is-extendable": "^0.1.0"
3054
+ }
3055
+ },
3056
+ "is-accessor-descriptor": {
3057
+ "version": "1.0.0",
3058
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
3059
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
3060
+ "dev": true,
3061
+ "requires": {
3062
+ "kind-of": "^6.0.0"
3063
+ }
3064
+ },
3065
+ "is-data-descriptor": {
3066
+ "version": "1.0.0",
3067
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
3068
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
3069
+ "dev": true,
3070
+ "requires": {
3071
+ "kind-of": "^6.0.0"
3072
+ }
3073
+ },
3074
+ "is-descriptor": {
3075
+ "version": "1.0.2",
3076
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
3077
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
3078
+ "dev": true,
3079
+ "requires": {
3080
+ "is-accessor-descriptor": "^1.0.0",
3081
+ "is-data-descriptor": "^1.0.0",
3082
+ "kind-of": "^6.0.2"
3083
+ }
3084
+ }
3085
+ }
3086
+ },
3087
+ "fast-deep-equal": {
3088
+ "version": "3.1.1",
3089
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
3090
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
3091
+ "dev": true
3092
+ },
3093
+ "fast-json-stable-stringify": {
3094
+ "version": "2.1.0",
3095
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
3096
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
3097
+ "dev": true
3098
+ },
3099
+ "fast-levenshtein": {
3100
+ "version": "2.0.6",
3101
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
3102
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
3103
+ "dev": true
3104
+ },
3105
+ "figgy-pudding": {
3106
+ "version": "3.5.2",
3107
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
3108
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
3109
+ "dev": true
3110
+ },
3111
+ "figures": {
3112
+ "version": "3.2.0",
3113
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
3114
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
3115
+ "dev": true,
3116
+ "requires": {
3117
+ "escape-string-regexp": "^1.0.5"
3118
+ }
3119
+ },
3120
+ "file-entry-cache": {
3121
+ "version": "5.0.1",
3122
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
3123
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
3124
+ "dev": true,
3125
+ "requires": {
3126
+ "flat-cache": "^2.0.1"
3127
+ }
3128
+ },
3129
+ "file-uri-to-path": {
3130
+ "version": "1.0.0",
3131
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
3132
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
3133
+ "dev": true,
3134
+ "optional": true
3135
+ },
3136
+ "fill-range": {
3137
+ "version": "4.0.0",
3138
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
3139
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
3140
+ "dev": true,
3141
+ "requires": {
3142
+ "extend-shallow": "^2.0.1",
3143
+ "is-number": "^3.0.0",
3144
+ "repeat-string": "^1.6.1",
3145
+ "to-regex-range": "^2.1.0"
3146
+ },
3147
+ "dependencies": {
3148
+ "extend-shallow": {
3149
+ "version": "2.0.1",
3150
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
3151
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
3152
+ "dev": true,
3153
+ "requires": {
3154
+ "is-extendable": "^0.1.0"
3155
+ }
3156
+ }
3157
+ }
3158
+ },
3159
+ "find-cache-dir": {
3160
+ "version": "2.1.0",
3161
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
3162
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
3163
+ "dev": true,
3164
+ "requires": {
3165
+ "commondir": "^1.0.1",
3166
+ "make-dir": "^2.0.0",
3167
+ "pkg-dir": "^3.0.0"
3168
+ }
3169
+ },
3170
+ "find-up": {
3171
+ "version": "3.0.0",
3172
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
3173
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
3174
+ "dev": true,
3175
+ "requires": {
3176
+ "locate-path": "^3.0.0"
3177
+ }
3178
+ },
3179
+ "findup-sync": {
3180
+ "version": "3.0.0",
3181
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
3182
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
3183
+ "dev": true,
3184
+ "requires": {
3185
+ "detect-file": "^1.0.0",
3186
+ "is-glob": "^4.0.0",
3187
+ "micromatch": "^3.0.4",
3188
+ "resolve-dir": "^1.0.1"
3189
+ }
3190
+ },
3191
+ "flat-cache": {
3192
+ "version": "2.0.1",
3193
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
3194
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
3195
+ "dev": true,
3196
+ "requires": {
3197
+ "flatted": "^2.0.0",
3198
+ "rimraf": "2.6.3",
3199
+ "write": "1.0.3"
3200
+ }
3201
+ },
3202
+ "flatted": {
3203
+ "version": "2.0.1",
3204
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
3205
+ "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==",
3206
+ "dev": true
3207
+ },
3208
+ "flush-write-stream": {
3209
+ "version": "1.1.1",
3210
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
3211
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
3212
+ "dev": true,
3213
+ "requires": {
3214
+ "inherits": "^2.0.3",
3215
+ "readable-stream": "^2.3.6"
3216
+ }
3217
+ },
3218
+ "for-in": {
3219
+ "version": "1.0.2",
3220
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
3221
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
3222
+ "dev": true
3223
+ },
3224
+ "fragment-cache": {
3225
+ "version": "0.2.1",
3226
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
3227
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
3228
+ "dev": true,
3229
+ "requires": {
3230
+ "map-cache": "^0.2.2"
3231
+ }
3232
+ },
3233
+ "from2": {
3234
+ "version": "2.3.0",
3235
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
3236
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
3237
+ "dev": true,
3238
+ "requires": {
3239
+ "inherits": "^2.0.1",
3240
+ "readable-stream": "^2.0.0"
3241
+ }
3242
+ },
3243
+ "fs-extra": {
3244
+ "version": "9.0.0",
3245
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
3246
+ "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
3247
+ "dev": true,
3248
+ "requires": {
3249
+ "at-least-node": "^1.0.0",
3250
+ "graceful-fs": "^4.2.0",
3251
+ "jsonfile": "^6.0.1",
3252
+ "universalify": "^1.0.0"
3253
+ }
3254
+ },
3255
+ "fs-write-stream-atomic": {
3256
+ "version": "1.0.10",
3257
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
3258
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
3259
+ "dev": true,
3260
+ "requires": {
3261
+ "graceful-fs": "^4.1.2",
3262
+ "iferr": "^0.1.5",
3263
+ "imurmurhash": "^0.1.4",
3264
+ "readable-stream": "1 || 2"
3265
+ }
3266
+ },
3267
+ "fs.realpath": {
3268
+ "version": "1.0.0",
3269
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3270
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3271
+ "dev": true
3272
+ },
3273
+ "fsevents": {
3274
+ "version": "1.2.12",
3275
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
3276
+ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
3277
+ "dev": true,
3278
+ "optional": true,
3279
+ "requires": {
3280
+ "bindings": "^1.5.0",
3281
+ "nan": "^2.12.1",
3282
+ "node-pre-gyp": "*"
3283
+ },
3284
+ "dependencies": {
3285
+ "abbrev": {
3286
+ "version": "1.1.1",
3287
+ "bundled": true,
3288
+ "dev": true,
3289
+ "optional": true
3290
+ },
3291
+ "ansi-regex": {
3292
+ "version": "2.1.1",
3293
+ "bundled": true,
3294
+ "dev": true,
3295
+ "optional": true
3296
+ },
3297
+ "aproba": {
3298
+ "version": "1.2.0",
3299
+ "bundled": true,
3300
+ "dev": true,
3301
+ "optional": true
3302
+ },
3303
+ "are-we-there-yet": {
3304
+ "version": "1.1.5",
3305
+ "bundled": true,
3306
+ "dev": true,
3307
+ "optional": true,
3308
+ "requires": {
3309
+ "delegates": "^1.0.0",
3310
+ "readable-stream": "^2.0.6"
3311
+ }
3312
+ },
3313
+ "balanced-match": {
3314
+ "version": "1.0.0",
3315
+ "bundled": true,
3316
+ "dev": true,
3317
+ "optional": true
3318
+ },
3319
+ "brace-expansion": {
3320
+ "version": "1.1.11",
3321
+ "bundled": true,
3322
+ "dev": true,
3323
+ "optional": true,
3324
+ "requires": {
3325
+ "balanced-match": "^1.0.0",
3326
+ "concat-map": "0.0.1"
3327
+ }
3328
+ },
3329
+ "chownr": {
3330
+ "version": "1.1.4",
3331
+ "bundled": true,
3332
+ "dev": true,
3333
+ "optional": true
3334
+ },
3335
+ "code-point-at": {
3336
+ "version": "1.1.0",
3337
+ "bundled": true,
3338
+ "dev": true,
3339
+ "optional": true
3340
+ },
3341
+ "concat-map": {
3342
+ "version": "0.0.1",
3343
+ "bundled": true,
3344
+ "dev": true,
3345
+ "optional": true
3346
+ },
3347
+ "console-control-strings": {
3348
+ "version": "1.1.0",
3349
+ "bundled": true,
3350
+ "dev": true,
3351
+ "optional": true
3352
+ },
3353
+ "core-util-is": {
3354
+ "version": "1.0.2",
3355
+ "bundled": true,
3356
+ "dev": true,
3357
+ "optional": true
3358
+ },
3359
+ "debug": {
3360
+ "version": "3.2.6",
3361
+ "bundled": true,
3362
+ "dev": true,
3363
+ "optional": true,
3364
+ "requires": {
3365
+ "ms": "^2.1.1"
3366
+ }
3367
+ },
3368
+ "deep-extend": {
3369
+ "version": "0.6.0",
3370
+ "bundled": true,
3371
+ "dev": true,
3372
+ "optional": true
3373
+ },
3374
+ "delegates": {
3375
+ "version": "1.0.0",
3376
+ "bundled": true,
3377
+ "dev": true,
3378
+ "optional": true
3379
+ },
3380
+ "detect-libc": {
3381
+ "version": "1.0.3",
3382
+ "bundled": true,
3383
+ "dev": true,
3384
+ "optional": true
3385
+ },
3386
+ "fs-minipass": {
3387
+ "version": "1.2.7",
3388
+ "bundled": true,
3389
+ "dev": true,
3390
+ "optional": true,
3391
+ "requires": {
3392
+ "minipass": "^2.6.0"
3393
+ }
3394
+ },
3395
+ "fs.realpath": {
3396
+ "version": "1.0.0",
3397
+ "bundled": true,
3398
+ "dev": true,
3399
+ "optional": true
3400
+ },
3401
+ "gauge": {
3402
+ "version": "2.7.4",
3403
+ "bundled": true,
3404
+ "dev": true,
3405
+ "optional": true,
3406
+ "requires": {
3407
+ "aproba": "^1.0.3",
3408
+ "console-control-strings": "^1.0.0",
3409
+ "has-unicode": "^2.0.0",
3410
+ "object-assign": "^4.1.0",
3411
+ "signal-exit": "^3.0.0",
3412
+ "string-width": "^1.0.1",
3413
+ "strip-ansi": "^3.0.1",
3414
+ "wide-align": "^1.1.0"
3415
+ }
3416
+ },
3417
+ "glob": {
3418
+ "version": "7.1.6",
3419
+ "bundled": true,
3420
+ "dev": true,
3421
+ "optional": true,
3422
+ "requires": {
3423
+ "fs.realpath": "^1.0.0",
3424
+ "inflight": "^1.0.4",
3425
+ "inherits": "2",
3426
+ "minimatch": "^3.0.4",
3427
+ "once": "^1.3.0",
3428
+ "path-is-absolute": "^1.0.0"
3429
+ }
3430
+ },
3431
+ "has-unicode": {
3432
+ "version": "2.0.1",
3433
+ "bundled": true,
3434
+ "dev": true,
3435
+ "optional": true
3436
+ },
3437
+ "iconv-lite": {
3438
+ "version": "0.4.24",
3439
+ "bundled": true,
3440
+ "dev": true,
3441
+ "optional": true,
3442
+ "requires": {
3443
+ "safer-buffer": ">= 2.1.2 < 3"
3444
+ }
3445
+ },
3446
+ "ignore-walk": {
3447
+ "version": "3.0.3",
3448
+ "bundled": true,
3449
+ "dev": true,
3450
+ "optional": true,
3451
+ "requires": {
3452
+ "minimatch": "^3.0.4"
3453
+ }
3454
+ },
3455
+ "inflight": {
3456
+ "version": "1.0.6",
3457
+ "bundled": true,
3458
+ "dev": true,
3459
+ "optional": true,
3460
+ "requires": {
3461
+ "once": "^1.3.0",
3462
+ "wrappy": "1"
3463
+ }
3464
+ },
3465
+ "inherits": {
3466
+ "version": "2.0.4",
3467
+ "bundled": true,
3468
+ "dev": true,
3469
+ "optional": true
3470
+ },
3471
+ "ini": {
3472
+ "version": "1.3.5",
3473
+ "bundled": true,
3474
+ "dev": true,
3475
+ "optional": true
3476
+ },
3477
+ "is-fullwidth-code-point": {
3478
+ "version": "1.0.0",
3479
+ "bundled": true,
3480
+ "dev": true,
3481
+ "optional": true,
3482
+ "requires": {
3483
+ "number-is-nan": "^1.0.0"
3484
+ }
3485
+ },
3486
+ "isarray": {
3487
+ "version": "1.0.0",
3488
+ "bundled": true,
3489
+ "dev": true,
3490
+ "optional": true
3491
+ },
3492
+ "minimatch": {
3493
+ "version": "3.0.4",
3494
+ "bundled": true,
3495
+ "dev": true,
3496
+ "optional": true,
3497
+ "requires": {
3498
+ "brace-expansion": "^1.1.7"
3499
+ }
3500
+ },
3501
+ "minimist": {
3502
+ "version": "1.2.5",
3503
+ "bundled": true,
3504
+ "dev": true,
3505
+ "optional": true
3506
+ },
3507
+ "minipass": {
3508
+ "version": "2.9.0",
3509
+ "bundled": true,
3510
+ "dev": true,
3511
+ "optional": true,
3512
+ "requires": {
3513
+ "safe-buffer": "^5.1.2",
3514
+ "yallist": "^3.0.0"
3515
+ }
3516
+ },
3517
+ "minizlib": {
3518
+ "version": "1.3.3",
3519
+ "bundled": true,
3520
+ "dev": true,
3521
+ "optional": true,
3522
+ "requires": {
3523
+ "minipass": "^2.9.0"
3524
+ }
3525
+ },
3526
+ "mkdirp": {
3527
+ "version": "0.5.3",
3528
+ "bundled": true,
3529
+ "dev": true,
3530
+ "optional": true,
3531
+ "requires": {
3532
+ "minimist": "^1.2.5"
3533
+ }
3534
+ },
3535
+ "ms": {
3536
+ "version": "2.1.2",
3537
+ "bundled": true,
3538
+ "dev": true,
3539
+ "optional": true
3540
+ },
3541
+ "needle": {
3542
+ "version": "2.3.3",
3543
+ "bundled": true,
3544
+ "dev": true,
3545
+ "optional": true,
3546
+ "requires": {
3547
+ "debug": "^3.2.6",
3548
+ "iconv-lite": "^0.4.4",
3549
+ "sax": "^1.2.4"
3550
+ }
3551
+ },
3552
+ "node-pre-gyp": {
3553
+ "version": "0.14.0",
3554
+ "bundled": true,
3555
+ "dev": true,
3556
+ "optional": true,
3557
+ "requires": {
3558
+ "detect-libc": "^1.0.2",
3559
+ "mkdirp": "^0.5.1",
3560
+ "needle": "^2.2.1",
3561
+ "nopt": "^4.0.1",
3562
+ "npm-packlist": "^1.1.6",
3563
+ "npmlog": "^4.0.2",
3564
+ "rc": "^1.2.7",
3565
+ "rimraf": "^2.6.1",
3566
+ "semver": "^5.3.0",
3567
+ "tar": "^4.4.2"
3568
+ }
3569
+ },
3570
+ "nopt": {
3571
+ "version": "4.0.3",
3572
+ "bundled": true,
3573
+ "dev": true,
3574
+ "optional": true,
3575
+ "requires": {
3576
+ "abbrev": "1",
3577
+ "osenv": "^0.1.4"
3578
+ }
3579
+ },
3580
+ "npm-bundled": {
3581
+ "version": "1.1.1",
3582
+ "bundled": true,
3583
+ "dev": true,
3584
+ "optional": true,
3585
+ "requires": {
3586
+ "npm-normalize-package-bin": "^1.0.1"
3587
+ }
3588
+ },
3589
+ "npm-normalize-package-bin": {
3590
+ "version": "1.0.1",
3591
+ "bundled": true,
3592
+ "dev": true,
3593
+ "optional": true
3594
+ },
3595
+ "npm-packlist": {
3596
+ "version": "1.4.8",
3597
+ "bundled": true,
3598
+ "dev": true,
3599
+ "optional": true,
3600
+ "requires": {
3601
+ "ignore-walk": "^3.0.1",
3602
+ "npm-bundled": "^1.0.1",
3603
+ "npm-normalize-package-bin": "^1.0.1"
3604
+ }
3605
+ },
3606
+ "npmlog": {
3607
+ "version": "4.1.2",
3608
+ "bundled": true,
3609
+ "dev": true,
3610
+ "optional": true,
3611
+ "requires": {
3612
+ "are-we-there-yet": "~1.1.2",
3613
+ "console-control-strings": "~1.1.0",
3614
+ "gauge": "~2.7.3",
3615
+ "set-blocking": "~2.0.0"
3616
+ }
3617
+ },
3618
+ "number-is-nan": {
3619
+ "version": "1.0.1",
3620
+ "bundled": true,
3621
+ "dev": true,
3622
+ "optional": true
3623
+ },
3624
+ "object-assign": {
3625
+ "version": "4.1.1",
3626
+ "bundled": true,
3627
+ "dev": true,
3628
+ "optional": true
3629
+ },
3630
+ "once": {
3631
+ "version": "1.4.0",
3632
+ "bundled": true,
3633
+ "dev": true,
3634
+ "optional": true,
3635
+ "requires": {
3636
+ "wrappy": "1"
3637
+ }
3638
+ },
3639
+ "os-homedir": {
3640
+ "version": "1.0.2",
3641
+ "bundled": true,
3642
+ "dev": true,
3643
+ "optional": true
3644
+ },
3645
+ "os-tmpdir": {
3646
+ "version": "1.0.2",
3647
+ "bundled": true,
3648
+ "dev": true,
3649
+ "optional": true
3650
+ },
3651
+ "osenv": {
3652
+ "version": "0.1.5",
3653
+ "bundled": true,
3654
+ "dev": true,
3655
+ "optional": true,
3656
+ "requires": {
3657
+ "os-homedir": "^1.0.0",
3658
+ "os-tmpdir": "^1.0.0"
3659
+ }
3660
+ },
3661
+ "path-is-absolute": {
3662
+ "version": "1.0.1",
3663
+ "bundled": true,
3664
+ "dev": true,
3665
+ "optional": true
3666
+ },
3667
+ "process-nextick-args": {
3668
+ "version": "2.0.1",
3669
+ "bundled": true,
3670
+ "dev": true,
3671
+ "optional": true
3672
+ },
3673
+ "rc": {
3674
+ "version": "1.2.8",
3675
+ "bundled": true,
3676
+ "dev": true,
3677
+ "optional": true,
3678
+ "requires": {
3679
+ "deep-extend": "^0.6.0",
3680
+ "ini": "~1.3.0",
3681
+ "minimist": "^1.2.0",
3682
+ "strip-json-comments": "~2.0.1"
3683
+ }
3684
+ },
3685
+ "readable-stream": {
3686
+ "version": "2.3.7",
3687
+ "bundled": true,
3688
+ "dev": true,
3689
+ "optional": true,
3690
+ "requires": {
3691
+ "core-util-is": "~1.0.0",
3692
+ "inherits": "~2.0.3",
3693
+ "isarray": "~1.0.0",
3694
+ "process-nextick-args": "~2.0.0",
3695
+ "safe-buffer": "~5.1.1",
3696
+ "string_decoder": "~1.1.1",
3697
+ "util-deprecate": "~1.0.1"
3698
+ }
3699
+ },
3700
+ "rimraf": {
3701
+ "version": "2.7.1",
3702
+ "bundled": true,
3703
+ "dev": true,
3704
+ "optional": true,
3705
+ "requires": {
3706
+ "glob": "^7.1.3"
3707
+ }
3708
+ },
3709
+ "safe-buffer": {
3710
+ "version": "5.1.2",
3711
+ "bundled": true,
3712
+ "dev": true,
3713
+ "optional": true
3714
+ },
3715
+ "safer-buffer": {
3716
+ "version": "2.1.2",
3717
+ "bundled": true,
3718
+ "dev": true,
3719
+ "optional": true
3720
+ },
3721
+ "sax": {
3722
+ "version": "1.2.4",
3723
+ "bundled": true,
3724
+ "dev": true,
3725
+ "optional": true
3726
+ },
3727
+ "semver": {
3728
+ "version": "5.7.1",
3729
+ "bundled": true,
3730
+ "dev": true,
3731
+ "optional": true
3732
+ },
3733
+ "set-blocking": {
3734
+ "version": "2.0.0",
3735
+ "bundled": true,
3736
+ "dev": true,
3737
+ "optional": true
3738
+ },
3739
+ "signal-exit": {
3740
+ "version": "3.0.2",
3741
+ "bundled": true,
3742
+ "dev": true,
3743
+ "optional": true
3744
+ },
3745
+ "string-width": {
3746
+ "version": "1.0.2",
3747
+ "bundled": true,
3748
+ "dev": true,
3749
+ "optional": true,
3750
+ "requires": {
3751
+ "code-point-at": "^1.0.0",
3752
+ "is-fullwidth-code-point": "^1.0.0",
3753
+ "strip-ansi": "^3.0.0"
3754
+ }
3755
+ },
3756
+ "string_decoder": {
3757
+ "version": "1.1.1",
3758
+ "bundled": true,
3759
+ "dev": true,
3760
+ "optional": true,
3761
+ "requires": {
3762
+ "safe-buffer": "~5.1.0"
3763
+ }
3764
+ },
3765
+ "strip-ansi": {
3766
+ "version": "3.0.1",
3767
+ "bundled": true,
3768
+ "dev": true,
3769
+ "optional": true,
3770
+ "requires": {
3771
+ "ansi-regex": "^2.0.0"
3772
+ }
3773
+ },
3774
+ "strip-json-comments": {
3775
+ "version": "2.0.1",
3776
+ "bundled": true,
3777
+ "dev": true,
3778
+ "optional": true
3779
+ },
3780
+ "tar": {
3781
+ "version": "4.4.13",
3782
+ "bundled": true,
3783
+ "dev": true,
3784
+ "optional": true,
3785
+ "requires": {
3786
+ "chownr": "^1.1.1",
3787
+ "fs-minipass": "^1.2.5",
3788
+ "minipass": "^2.8.6",
3789
+ "minizlib": "^1.2.1",
3790
+ "mkdirp": "^0.5.0",
3791
+ "safe-buffer": "^5.1.2",
3792
+ "yallist": "^3.0.3"
3793
+ }
3794
+ },
3795
+ "util-deprecate": {
3796
+ "version": "1.0.2",
3797
+ "bundled": true,
3798
+ "dev": true,
3799
+ "optional": true
3800
+ },
3801
+ "wide-align": {
3802
+ "version": "1.1.3",
3803
+ "bundled": true,
3804
+ "dev": true,
3805
+ "optional": true,
3806
+ "requires": {
3807
+ "string-width": "^1.0.2 || 2"
3808
+ }
3809
+ },
3810
+ "wrappy": {
3811
+ "version": "1.0.2",
3812
+ "bundled": true,
3813
+ "dev": true,
3814
+ "optional": true
3815
+ },
3816
+ "yallist": {
3817
+ "version": "3.1.1",
3818
+ "bundled": true,
3819
+ "dev": true,
3820
+ "optional": true
3821
+ }
3822
+ }
3823
+ },
3824
+ "function-bind": {
3825
+ "version": "1.1.1",
3826
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
3827
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
3828
+ "dev": true
3829
+ },
3830
+ "functional-red-black-tree": {
3831
+ "version": "1.0.1",
3832
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
3833
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
3834
+ "dev": true
3835
+ },
3836
+ "gensync": {
3837
+ "version": "1.0.0-beta.1",
3838
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
3839
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
3840
+ "dev": true
3841
+ },
3842
+ "get-caller-file": {
3843
+ "version": "2.0.5",
3844
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
3845
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
3846
+ "dev": true
3847
+ },
3848
+ "get-stream": {
3849
+ "version": "4.1.0",
3850
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
3851
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
3852
+ "dev": true,
3853
+ "requires": {
3854
+ "pump": "^3.0.0"
3855
+ }
3856
+ },
3857
+ "get-value": {
3858
+ "version": "2.0.6",
3859
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
3860
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
3861
+ "dev": true
3862
+ },
3863
+ "gettext-parser": {
3864
+ "version": "1.4.0",
3865
+ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
3866
+ "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
3867
+ "requires": {
3868
+ "encoding": "^0.1.12",
3869
+ "safe-buffer": "^5.1.1"
3870
+ }
3871
+ },
3872
+ "glob": {
3873
+ "version": "7.1.6",
3874
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
3875
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
3876
+ "dev": true,
3877
+ "requires": {
3878
+ "fs.realpath": "^1.0.0",
3879
+ "inflight": "^1.0.4",
3880
+ "inherits": "2",
3881
+ "minimatch": "^3.0.4",
3882
+ "once": "^1.3.0",
3883
+ "path-is-absolute": "^1.0.0"
3884
+ }
3885
+ },
3886
+ "glob-parent": {
3887
+ "version": "5.1.0",
3888
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
3889
+ "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
3890
+ "dev": true,
3891
+ "requires": {
3892
+ "is-glob": "^4.0.1"
3893
+ }
3894
+ },
3895
+ "global-modules": {
3896
+ "version": "2.0.0",
3897
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
3898
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
3899
+ "dev": true,
3900
+ "requires": {
3901
+ "global-prefix": "^3.0.0"
3902
+ },
3903
+ "dependencies": {
3904
+ "global-prefix": {
3905
+ "version": "3.0.0",
3906
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
3907
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
3908
+ "dev": true,
3909
+ "requires": {
3910
+ "ini": "^1.3.5",
3911
+ "kind-of": "^6.0.2",
3912
+ "which": "^1.3.1"
3913
+ }
3914
+ }
3915
+ }
3916
+ },
3917
+ "global-prefix": {
3918
+ "version": "1.0.2",
3919
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
3920
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
3921
+ "dev": true,
3922
+ "requires": {
3923
+ "expand-tilde": "^2.0.2",
3924
+ "homedir-polyfill": "^1.0.1",
3925
+ "ini": "^1.3.4",
3926
+ "is-windows": "^1.0.1",
3927
+ "which": "^1.2.14"
3928
+ }
3929
+ },
3930
+ "globals": {
3931
+ "version": "11.12.0",
3932
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
3933
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
3934
+ "dev": true
3935
+ },
3936
+ "graceful-fs": {
3937
+ "version": "4.2.3",
3938
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
3939
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
3940
+ "dev": true
3941
+ },
3942
+ "has": {
3943
+ "version": "1.0.3",
3944
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
3945
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
3946
+ "dev": true,
3947
+ "requires": {
3948
+ "function-bind": "^1.1.1"
3949
+ }
3950
+ },
3951
+ "has-flag": {
3952
+ "version": "3.0.0",
3953
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
3954
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
3955
+ "dev": true
3956
+ },
3957
+ "has-symbols": {
3958
+ "version": "1.0.1",
3959
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
3960
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
3961
+ "dev": true
3962
+ },
3963
+ "has-value": {
3964
+ "version": "1.0.0",
3965
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
3966
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
3967
+ "dev": true,
3968
+ "requires": {
3969
+ "get-value": "^2.0.6",
3970
+ "has-values": "^1.0.0",
3971
+ "isobject": "^3.0.0"
3972
+ }
3973
+ },
3974
+ "has-values": {
3975
+ "version": "1.0.0",
3976
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
3977
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
3978
+ "dev": true,
3979
+ "requires": {
3980
+ "is-number": "^3.0.0",
3981
+ "kind-of": "^4.0.0"
3982
+ },
3983
+ "dependencies": {
3984
+ "kind-of": {
3985
+ "version": "4.0.0",
3986
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
3987
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
3988
+ "dev": true,
3989
+ "requires": {
3990
+ "is-buffer": "^1.1.5"
3991
+ }
3992
+ }
3993
+ }
3994
+ },
3995
+ "hash-base": {
3996
+ "version": "3.0.4",
3997
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
3998
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
3999
+ "dev": true,
4000
+ "requires": {
4001
+ "inherits": "^2.0.1",
4002
+ "safe-buffer": "^5.0.1"
4003
+ }
4004
+ },
4005
+ "hash.js": {
4006
+ "version": "1.1.7",
4007
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
4008
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
4009
+ "dev": true,
4010
+ "requires": {
4011
+ "inherits": "^2.0.3",
4012
+ "minimalistic-assert": "^1.0.1"
4013
+ }
4014
+ },
4015
+ "hmac-drbg": {
4016
+ "version": "1.0.1",
4017
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
4018
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
4019
+ "dev": true,
4020
+ "requires": {
4021
+ "hash.js": "^1.0.3",
4022
+ "minimalistic-assert": "^1.0.0",
4023
+ "minimalistic-crypto-utils": "^1.0.1"
4024
+ }
4025
+ },
4026
+ "homedir-polyfill": {
4027
+ "version": "1.0.3",
4028
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
4029
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
4030
+ "dev": true,
4031
+ "requires": {
4032
+ "parse-passwd": "^1.0.0"
4033
+ }
4034
+ },
4035
+ "https-browserify": {
4036
+ "version": "1.0.0",
4037
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
4038
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
4039
+ "dev": true
4040
+ },
4041
+ "iconv-lite": {
4042
+ "version": "0.4.24",
4043
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
4044
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
4045
+ "requires": {
4046
+ "safer-buffer": ">= 2.1.2 < 3"
4047
+ }
4048
+ },
4049
+ "icss-utils": {
4050
+ "version": "4.1.1",
4051
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
4052
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
4053
+ "dev": true,
4054
+ "requires": {
4055
+ "postcss": "^7.0.14"
4056
+ }
4057
+ },
4058
+ "ieee754": {
4059
+ "version": "1.1.13",
4060
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
4061
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
4062
+ "dev": true
4063
+ },
4064
+ "iferr": {
4065
+ "version": "0.1.5",
4066
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
4067
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
4068
+ "dev": true
4069
+ },
4070
+ "ignore": {
4071
+ "version": "4.0.6",
4072
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
4073
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
4074
+ "dev": true
4075
+ },
4076
+ "import-fresh": {
4077
+ "version": "3.2.1",
4078
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
4079
+ "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
4080
+ "dev": true,
4081
+ "requires": {
4082
+ "parent-module": "^1.0.0",
4083
+ "resolve-from": "^4.0.0"
4084
+ }
4085
+ },
4086
+ "import-local": {
4087
+ "version": "2.0.0",
4088
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
4089
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
4090
+ "dev": true,
4091
+ "requires": {
4092
+ "pkg-dir": "^3.0.0",
4093
+ "resolve-cwd": "^2.0.0"
4094
+ }
4095
+ },
4096
+ "imurmurhash": {
4097
+ "version": "0.1.4",
4098
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
4099
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
4100
+ "dev": true
4101
+ },
4102
+ "indexes-of": {
4103
+ "version": "1.0.1",
4104
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
4105
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
4106
+ "dev": true
4107
+ },
4108
+ "infer-owner": {
4109
+ "version": "1.0.4",
4110
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
4111
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
4112
+ "dev": true
4113
+ },
4114
+ "inflight": {
4115
+ "version": "1.0.6",
4116
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4117
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4118
+ "dev": true,
4119
+ "requires": {
4120
+ "once": "^1.3.0",
4121
+ "wrappy": "1"
4122
+ }
4123
+ },
4124
+ "inherits": {
4125
+ "version": "2.0.4",
4126
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4127
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
4128
+ "dev": true
4129
+ },
4130
+ "ini": {
4131
+ "version": "1.3.5",
4132
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
4133
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
4134
+ "dev": true
4135
+ },
4136
+ "inquirer": {
4137
+ "version": "7.1.0",
4138
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
4139
+ "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
4140
+ "dev": true,
4141
+ "requires": {
4142
+ "ansi-escapes": "^4.2.1",
4143
+ "chalk": "^3.0.0",
4144
+ "cli-cursor": "^3.1.0",
4145
+ "cli-width": "^2.0.0",
4146
+ "external-editor": "^3.0.3",
4147
+ "figures": "^3.0.0",
4148
+ "lodash": "^4.17.15",
4149
+ "mute-stream": "0.0.8",
4150
+ "run-async": "^2.4.0",
4151
+ "rxjs": "^6.5.3",
4152
+ "string-width": "^4.1.0",
4153
+ "strip-ansi": "^6.0.0",
4154
+ "through": "^2.3.6"
4155
+ },
4156
+ "dependencies": {
4157
+ "ansi-styles": {
4158
+ "version": "4.2.1",
4159
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
4160
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
4161
+ "dev": true,
4162
+ "requires": {
4163
+ "@types/color-name": "^1.1.1",
4164
+ "color-convert": "^2.0.1"
4165
+ }
4166
+ },
4167
+ "chalk": {
4168
+ "version": "3.0.0",
4169
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
4170
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
4171
+ "dev": true,
4172
+ "requires": {
4173
+ "ansi-styles": "^4.1.0",
4174
+ "supports-color": "^7.1.0"
4175
+ }
4176
+ },
4177
+ "color-convert": {
4178
+ "version": "2.0.1",
4179
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
4180
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
4181
+ "dev": true,
4182
+ "requires": {
4183
+ "color-name": "~1.1.4"
4184
+ }
4185
+ },
4186
+ "color-name": {
4187
+ "version": "1.1.4",
4188
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
4189
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
4190
+ "dev": true
4191
+ },
4192
+ "has-flag": {
4193
+ "version": "4.0.0",
4194
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4195
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4196
+ "dev": true
4197
+ },
4198
+ "strip-ansi": {
4199
+ "version": "6.0.0",
4200
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
4201
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
4202
+ "dev": true,
4203
+ "requires": {
4204
+ "ansi-regex": "^5.0.0"
4205
+ }
4206
+ },
4207
+ "supports-color": {
4208
+ "version": "7.1.0",
4209
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
4210
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
4211
+ "dev": true,
4212
+ "requires": {
4213
+ "has-flag": "^4.0.0"
4214
+ }
4215
+ }
4216
+ }
4217
+ },
4218
+ "internal-slot": {
4219
+ "version": "1.0.2",
4220
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz",
4221
+ "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==",
4222
+ "dev": true,
4223
+ "requires": {
4224
+ "es-abstract": "^1.17.0-next.1",
4225
+ "has": "^1.0.3",
4226
+ "side-channel": "^1.0.2"
4227
+ }
4228
+ },
4229
+ "interpret": {
4230
+ "version": "1.2.0",
4231
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
4232
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
4233
+ "dev": true
4234
+ },
4235
+ "invariant": {
4236
+ "version": "2.2.4",
4237
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
4238
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
4239
+ "dev": true,
4240
+ "requires": {
4241
+ "loose-envify": "^1.0.0"
4242
+ }
4243
+ },
4244
+ "invert-kv": {
4245
+ "version": "2.0.0",
4246
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
4247
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
4248
+ "dev": true
4249
+ },
4250
+ "is-accessor-descriptor": {
4251
+ "version": "0.1.6",
4252
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
4253
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
4254
+ "dev": true,
4255
+ "requires": {
4256
+ "kind-of": "^3.0.2"
4257
+ },
4258
+ "dependencies": {
4259
+ "kind-of": {
4260
+ "version": "3.2.2",
4261
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
4262
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
4263
+ "dev": true,
4264
+ "requires": {
4265
+ "is-buffer": "^1.1.5"
4266
+ }
4267
+ }
4268
+ }
4269
+ },
4270
+ "is-binary-path": {
4271
+ "version": "1.0.1",
4272
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
4273
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
4274
+ "dev": true,
4275
+ "requires": {
4276
+ "binary-extensions": "^1.0.0"
4277
+ }
4278
+ },
4279
+ "is-buffer": {
4280
+ "version": "1.1.6",
4281
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
4282
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
4283
+ "dev": true
4284
+ },
4285
+ "is-callable": {
4286
+ "version": "1.1.5",
4287
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
4288
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
4289
+ "dev": true
4290
+ },
4291
+ "is-data-descriptor": {
4292
+ "version": "0.1.4",
4293
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
4294
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
4295
+ "dev": true,
4296
+ "requires": {
4297
+ "kind-of": "^3.0.2"
4298
+ },
4299
+ "dependencies": {
4300
+ "kind-of": {
4301
+ "version": "3.2.2",
4302
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
4303
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
4304
+ "dev": true,
4305
+ "requires": {
4306
+ "is-buffer": "^1.1.5"
4307
+ }
4308
+ }
4309
+ }
4310
+ },
4311
+ "is-date-object": {
4312
+ "version": "1.0.2",
4313
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
4314
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
4315
+ "dev": true
4316
+ },
4317
+ "is-descriptor": {
4318
+ "version": "0.1.6",
4319
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
4320
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
4321
+ "dev": true,
4322
+ "requires": {
4323
+ "is-accessor-descriptor": "^0.1.6",
4324
+ "is-data-descriptor": "^0.1.4",
4325
+ "kind-of": "^5.0.0"
4326
+ },
4327
+ "dependencies": {
4328
+ "kind-of": {
4329
+ "version": "5.1.0",
4330
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
4331
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
4332
+ "dev": true
4333
+ }
4334
+ }
4335
+ },
4336
+ "is-extendable": {
4337
+ "version": "0.1.1",
4338
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
4339
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
4340
+ "dev": true
4341
+ },
4342
+ "is-extglob": {
4343
+ "version": "2.1.1",
4344
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
4345
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
4346
+ "dev": true
4347
+ },
4348
+ "is-fullwidth-code-point": {
4349
+ "version": "3.0.0",
4350
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
4351
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
4352
+ "dev": true
4353
+ },
4354
+ "is-glob": {
4355
+ "version": "4.0.1",
4356
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
4357
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
4358
+ "dev": true,
4359
+ "requires": {
4360
+ "is-extglob": "^2.1.1"
4361
+ }
4362
+ },
4363
+ "is-number": {
4364
+ "version": "3.0.0",
4365
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
4366
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
4367
+ "dev": true,
4368
+ "requires": {
4369
+ "kind-of": "^3.0.2"
4370
+ },
4371
+ "dependencies": {
4372
+ "kind-of": {
4373
+ "version": "3.2.2",
4374
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
4375
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
4376
+ "dev": true,
4377
+ "requires": {
4378
+ "is-buffer": "^1.1.5"
4379
+ }
4380
+ }
4381
+ }
4382
+ },
4383
+ "is-plain-object": {
4384
+ "version": "2.0.4",
4385
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
4386
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
4387
+ "dev": true,
4388
+ "requires": {
4389
+ "isobject": "^3.0.1"
4390
+ }
4391
+ },
4392
+ "is-promise": {
4393
+ "version": "2.1.0",
4394
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
4395
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
4396
+ "dev": true
4397
+ },
4398
+ "is-regex": {
4399
+ "version": "1.0.5",
4400
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
4401
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
4402
+ "dev": true,
4403
+ "requires": {
4404
+ "has": "^1.0.3"
4405
+ }
4406
+ },
4407
+ "is-stream": {
4408
+ "version": "1.1.0",
4409
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
4410
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
4411
+ "dev": true
4412
+ },
4413
+ "is-string": {
4414
+ "version": "1.0.5",
4415
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
4416
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
4417
+ "dev": true
4418
+ },
4419
+ "is-symbol": {
4420
+ "version": "1.0.3",
4421
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
4422
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
4423
+ "dev": true,
4424
+ "requires": {
4425
+ "has-symbols": "^1.0.1"
4426
+ }
4427
+ },
4428
+ "is-windows": {
4429
+ "version": "1.0.2",
4430
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
4431
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
4432
+ "dev": true
4433
+ },
4434
+ "is-wsl": {
4435
+ "version": "1.1.0",
4436
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
4437
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
4438
+ "dev": true
4439
+ },
4440
+ "isarray": {
4441
+ "version": "1.0.0",
4442
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
4443
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
4444
+ "dev": true
4445
+ },
4446
+ "isexe": {
4447
+ "version": "2.0.0",
4448
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4449
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4450
+ "dev": true
4451
+ },
4452
+ "isobject": {
4453
+ "version": "3.0.1",
4454
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
4455
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
4456
+ "dev": true
4457
+ },
4458
+ "js-tokens": {
4459
+ "version": "4.0.0",
4460
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
4461
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
4462
+ "dev": true
4463
+ },
4464
+ "js-yaml": {
4465
+ "version": "3.13.1",
4466
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
4467
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
4468
+ "dev": true,
4469
+ "requires": {
4470
+ "argparse": "^1.0.7",
4471
+ "esprima": "^4.0.0"
4472
+ }
4473
+ },
4474
+ "jsesc": {
4475
+ "version": "2.5.2",
4476
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
4477
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
4478
+ "dev": true
4479
+ },
4480
+ "json-parse-better-errors": {
4481
+ "version": "1.0.2",
4482
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
4483
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
4484
+ "dev": true
4485
+ },
4486
+ "json-schema-traverse": {
4487
+ "version": "0.4.1",
4488
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
4489
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
4490
+ "dev": true
4491
+ },
4492
+ "json-stable-stringify-without-jsonify": {
4493
+ "version": "1.0.1",
4494
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
4495
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
4496
+ "dev": true
4497
+ },
4498
+ "json5": {
4499
+ "version": "2.1.3",
4500
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
4501
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
4502
+ "dev": true,
4503
+ "requires": {
4504
+ "minimist": "^1.2.5"
4505
+ },
4506
+ "dependencies": {
4507
+ "minimist": {
4508
+ "version": "1.2.5",
4509
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
4510
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
4511
+ "dev": true
4512
+ }
4513
+ }
4514
+ },
4515
+ "jsonfile": {
4516
+ "version": "6.0.1",
4517
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
4518
+ "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
4519
+ "dev": true,
4520
+ "requires": {
4521
+ "graceful-fs": "^4.1.6",
4522
+ "universalify": "^1.0.0"
4523
+ }
4524
+ },
4525
+ "jsx-ast-utils": {
4526
+ "version": "2.2.3",
4527
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz",
4528
+ "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==",
4529
+ "dev": true,
4530
+ "requires": {
4531
+ "array-includes": "^3.0.3",
4532
+ "object.assign": "^4.1.0"
4533
+ }
4534
+ },
4535
+ "kind-of": {
4536
+ "version": "6.0.3",
4537
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
4538
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
4539
+ "dev": true
4540
+ },
4541
+ "lcid": {
4542
+ "version": "2.0.0",
4543
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
4544
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
4545
+ "dev": true,
4546
+ "requires": {
4547
+ "invert-kv": "^2.0.0"
4548
+ }
4549
+ },
4550
+ "leven": {
4551
+ "version": "3.1.0",
4552
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
4553
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
4554
+ "dev": true
4555
+ },
4556
+ "levenary": {
4557
+ "version": "1.1.1",
4558
+ "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz",
4559
+ "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==",
4560
+ "dev": true,
4561
+ "requires": {
4562
+ "leven": "^3.1.0"
4563
+ }
4564
+ },
4565
+ "levn": {
4566
+ "version": "0.3.0",
4567
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
4568
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
4569
+ "dev": true,
4570
+ "requires": {
4571
+ "prelude-ls": "~1.1.2",
4572
+ "type-check": "~0.3.2"
4573
+ }
4574
+ },
4575
+ "loader-fs-cache": {
4576
+ "version": "1.0.3",
4577
+ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
4578
+ "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==",
4579
+ "dev": true,
4580
+ "requires": {
4581
+ "find-cache-dir": "^0.1.1",
4582
+ "mkdirp": "^0.5.1"
4583
+ },
4584
+ "dependencies": {
4585
+ "find-cache-dir": {
4586
+ "version": "0.1.1",
4587
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
4588
+ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
4589
+ "dev": true,
4590
+ "requires": {
4591
+ "commondir": "^1.0.1",
4592
+ "mkdirp": "^0.5.1",
4593
+ "pkg-dir": "^1.0.0"
4594
+ }
4595
+ },
4596
+ "find-up": {
4597
+ "version": "1.1.2",
4598
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
4599
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
4600
+ "dev": true,
4601
+ "requires": {
4602
+ "path-exists": "^2.0.0",
4603
+ "pinkie-promise": "^2.0.0"
4604
+ }
4605
+ },
4606
+ "path-exists": {
4607
+ "version": "2.1.0",
4608
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
4609
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
4610
+ "dev": true,
4611
+ "requires": {
4612
+ "pinkie-promise": "^2.0.0"
4613
+ }
4614
+ },
4615
+ "pkg-dir": {
4616
+ "version": "1.0.0",
4617
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
4618
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
4619
+ "dev": true,
4620
+ "requires": {
4621
+ "find-up": "^1.0.0"
4622
+ }
4623
+ }
4624
+ }
4625
+ },
4626
+ "loader-runner": {
4627
+ "version": "2.4.0",
4628
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
4629
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
4630
+ "dev": true
4631
+ },
4632
+ "loader-utils": {
4633
+ "version": "1.4.0",
4634
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
4635
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
4636
+ "dev": true,
4637
+ "requires": {
4638
+ "big.js": "^5.2.2",
4639
+ "emojis-list": "^3.0.0",
4640
+ "json5": "^1.0.1"
4641
+ },
4642
+ "dependencies": {
4643
+ "emojis-list": {
4644
+ "version": "3.0.0",
4645
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
4646
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
4647
+ "dev": true
4648
+ },
4649
+ "json5": {
4650
+ "version": "1.0.1",
4651
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
4652
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
4653
+ "dev": true,
4654
+ "requires": {
4655
+ "minimist": "^1.2.0"
4656
+ }
4657
+ },
4658
+ "minimist": {
4659
+ "version": "1.2.5",
4660
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
4661
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
4662
+ "dev": true
4663
+ }
4664
+ }
4665
+ },
4666
+ "locate-path": {
4667
+ "version": "3.0.0",
4668
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
4669
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
4670
+ "dev": true,
4671
+ "requires": {
4672
+ "p-locate": "^3.0.0",
4673
+ "path-exists": "^3.0.0"
4674
+ }
4675
+ },
4676
+ "lodash": {
4677
+ "version": "4.17.15",
4678
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
4679
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
4680
+ },
4681
+ "loose-envify": {
4682
+ "version": "1.4.0",
4683
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
4684
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
4685
+ "dev": true,
4686
+ "requires": {
4687
+ "js-tokens": "^3.0.0 || ^4.0.0"
4688
+ }
4689
+ },
4690
+ "lru-cache": {
4691
+ "version": "5.1.1",
4692
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
4693
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
4694
+ "dev": true,
4695
+ "requires": {
4696
+ "yallist": "^3.0.2"
4697
+ }
4698
+ },
4699
+ "make-dir": {
4700
+ "version": "2.1.0",
4701
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
4702
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
4703
+ "dev": true,
4704
+ "requires": {
4705
+ "pify": "^4.0.1",
4706
+ "semver": "^5.6.0"
4707
+ }
4708
+ },
4709
+ "map-age-cleaner": {
4710
+ "version": "0.1.3",
4711
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
4712
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
4713
+ "dev": true,
4714
+ "requires": {
4715
+ "p-defer": "^1.0.0"
4716
+ }
4717
+ },
4718
+ "map-cache": {
4719
+ "version": "0.2.2",
4720
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
4721
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
4722
+ "dev": true
4723
+ },
4724
+ "map-visit": {
4725
+ "version": "1.0.0",
4726
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
4727
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
4728
+ "dev": true,
4729
+ "requires": {
4730
+ "object-visit": "^1.0.0"
4731
+ }
4732
+ },
4733
+ "md5.js": {
4734
+ "version": "1.3.5",
4735
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
4736
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
4737
+ "dev": true,
4738
+ "requires": {
4739
+ "hash-base": "^3.0.0",
4740
+ "inherits": "^2.0.1",
4741
+ "safe-buffer": "^5.1.2"
4742
+ }
4743
+ },
4744
+ "mem": {
4745
+ "version": "4.3.0",
4746
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
4747
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
4748
+ "dev": true,
4749
+ "requires": {
4750
+ "map-age-cleaner": "^0.1.1",
4751
+ "mimic-fn": "^2.0.0",
4752
+ "p-is-promise": "^2.0.0"
4753
+ }
4754
+ },
4755
+ "memize": {
4756
+ "version": "1.1.0",
4757
+ "resolved": "https://registry.npmjs.org/memize/-/memize-1.1.0.tgz",
4758
+ "integrity": "sha512-K4FcPETOMTwe7KL2LK0orMhpOmWD2wRGwWWpbZy0fyArwsyIKR8YJVz8+efBAh3BO4zPqlSICu4vsLTRRqtFAg=="
4759
+ },
4760
+ "memory-fs": {
4761
+ "version": "0.4.1",
4762
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
4763
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
4764
+ "dev": true,
4765
+ "requires": {
4766
+ "errno": "^0.1.3",
4767
+ "readable-stream": "^2.0.1"
4768
+ }
4769
+ },
4770
+ "micromatch": {
4771
+ "version": "3.1.10",
4772
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
4773
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
4774
+ "dev": true,
4775
+ "requires": {
4776
+ "arr-diff": "^4.0.0",
4777
+ "array-unique": "^0.3.2",
4778
+ "braces": "^2.3.1",
4779
+ "define-property": "^2.0.2",
4780
+ "extend-shallow": "^3.0.2",
4781
+ "extglob": "^2.0.4",
4782
+ "fragment-cache": "^0.2.1",
4783
+ "kind-of": "^6.0.2",
4784
+ "nanomatch": "^1.2.9",
4785
+ "object.pick": "^1.3.0",
4786
+ "regex-not": "^1.0.0",
4787
+ "snapdragon": "^0.8.1",
4788
+ "to-regex": "^3.0.2"
4789
+ }
4790
+ },
4791
+ "miller-rabin": {
4792
+ "version": "4.0.1",
4793
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
4794
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
4795
+ "dev": true,
4796
+ "requires": {
4797
+ "bn.js": "^4.0.0",
4798
+ "brorand": "^1.0.1"
4799
+ }
4800
+ },
4801
+ "mimic-fn": {
4802
+ "version": "2.1.0",
4803
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
4804
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
4805
+ "dev": true
4806
+ },
4807
+ "minimalistic-assert": {
4808
+ "version": "1.0.1",
4809
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
4810
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
4811
+ "dev": true
4812
+ },
4813
+ "minimalistic-crypto-utils": {
4814
+ "version": "1.0.1",
4815
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
4816
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
4817
+ "dev": true
4818
+ },
4819
+ "minimatch": {
4820
+ "version": "3.0.4",
4821
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
4822
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4823
+ "dev": true,
4824
+ "requires": {
4825
+ "brace-expansion": "^1.1.7"
4826
+ }
4827
+ },
4828
+ "minimist": {
4829
+ "version": "1.2.5",
4830
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
4831
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
4832
+ "dev": true
4833
+ },
4834
+ "mississippi": {
4835
+ "version": "3.0.0",
4836
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
4837
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
4838
+ "dev": true,
4839
+ "requires": {
4840
+ "concat-stream": "^1.5.0",
4841
+ "duplexify": "^3.4.2",
4842
+ "end-of-stream": "^1.1.0",
4843
+ "flush-write-stream": "^1.0.0",
4844
+ "from2": "^2.1.0",
4845
+ "parallel-transform": "^1.1.0",
4846
+ "pump": "^3.0.0",
4847
+ "pumpify": "^1.3.3",
4848
+ "stream-each": "^1.1.0",
4849
+ "through2": "^2.0.0"
4850
+ }
4851
+ },
4852
+ "mixin-deep": {
4853
+ "version": "1.3.2",
4854
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
4855
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
4856
+ "dev": true,
4857
+ "requires": {
4858
+ "for-in": "^1.0.2",
4859
+ "is-extendable": "^1.0.1"
4860
+ },
4861
+ "dependencies": {
4862
+ "is-extendable": {
4863
+ "version": "1.0.1",
4864
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
4865
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
4866
+ "dev": true,
4867
+ "requires": {
4868
+ "is-plain-object": "^2.0.4"
4869
+ }
4870
+ }
4871
+ }
4872
+ },
4873
+ "mkdirp": {
4874
+ "version": "0.5.5",
4875
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
4876
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
4877
+ "dev": true,
4878
+ "requires": {
4879
+ "minimist": "^1.2.5"
4880
+ }
4881
+ },
4882
+ "move-concurrently": {
4883
+ "version": "1.0.1",
4884
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
4885
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
4886
+ "dev": true,
4887
+ "requires": {
4888
+ "aproba": "^1.1.1",
4889
+ "copy-concurrently": "^1.0.0",
4890
+ "fs-write-stream-atomic": "^1.0.8",
4891
+ "mkdirp": "^0.5.1",
4892
+ "rimraf": "^2.5.4",
4893
+ "run-queue": "^1.0.3"
4894
+ }
4895
+ },
4896
+ "ms": {
4897
+ "version": "2.1.2",
4898
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4899
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
4900
+ "dev": true
4901
+ },
4902
+ "mute-stream": {
4903
+ "version": "0.0.8",
4904
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
4905
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
4906
+ "dev": true
4907
+ },
4908
+ "nan": {
4909
+ "version": "2.14.0",
4910
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
4911
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
4912
+ "dev": true,
4913
+ "optional": true
4914
+ },
4915
+ "nanomatch": {
4916
+ "version": "1.2.13",
4917
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
4918
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
4919
+ "dev": true,
4920
+ "requires": {
4921
+ "arr-diff": "^4.0.0",
4922
+ "array-unique": "^0.3.2",
4923
+ "define-property": "^2.0.2",
4924
+ "extend-shallow": "^3.0.2",
4925
+ "fragment-cache": "^0.2.1",
4926
+ "is-windows": "^1.0.2",
4927
+ "kind-of": "^6.0.2",
4928
+ "object.pick": "^1.3.0",
4929
+ "regex-not": "^1.0.0",
4930
+ "snapdragon": "^0.8.1",
4931
+ "to-regex": "^3.0.1"
4932
+ }
4933
+ },
4934
+ "natural-compare": {
4935
+ "version": "1.4.0",
4936
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
4937
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
4938
+ "dev": true
4939
+ },
4940
+ "neo-async": {
4941
+ "version": "2.6.1",
4942
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
4943
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
4944
+ "dev": true
4945
+ },
4946
+ "nice-try": {
4947
+ "version": "1.0.5",
4948
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
4949
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
4950
+ "dev": true
4951
+ },
4952
+ "node-libs-browser": {
4953
+ "version": "2.2.1",
4954
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
4955
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
4956
+ "dev": true,
4957
+ "requires": {
4958
+ "assert": "^1.1.1",
4959
+ "browserify-zlib": "^0.2.0",
4960
+ "buffer": "^4.3.0",
4961
+ "console-browserify": "^1.1.0",
4962
+ "constants-browserify": "^1.0.0",
4963
+ "crypto-browserify": "^3.11.0",
4964
+ "domain-browser": "^1.1.1",
4965
+ "events": "^3.0.0",
4966
+ "https-browserify": "^1.0.0",
4967
+ "os-browserify": "^0.3.0",
4968
+ "path-browserify": "0.0.1",
4969
+ "process": "^0.11.10",
4970
+ "punycode": "^1.2.4",
4971
+ "querystring-es3": "^0.2.0",
4972
+ "readable-stream": "^2.3.3",
4973
+ "stream-browserify": "^2.0.1",
4974
+ "stream-http": "^2.7.2",
4975
+ "string_decoder": "^1.0.0",
4976
+ "timers-browserify": "^2.0.4",
4977
+ "tty-browserify": "0.0.0",
4978
+ "url": "^0.11.0",
4979
+ "util": "^0.11.0",
4980
+ "vm-browserify": "^1.0.1"
4981
+ },
4982
+ "dependencies": {
4983
+ "punycode": {
4984
+ "version": "1.4.1",
4985
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
4986
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
4987
+ "dev": true
4988
+ }
4989
+ }
4990
+ },
4991
+ "node-releases": {
4992
+ "version": "1.1.53",
4993
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz",
4994
+ "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==",
4995
+ "dev": true
4996
+ },
4997
+ "normalize-path": {
4998
+ "version": "3.0.0",
4999
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
5000
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
5001
+ "dev": true
5002
+ },
5003
+ "npm-run-path": {
5004
+ "version": "2.0.2",
5005
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
5006
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
5007
+ "dev": true,
5008
+ "requires": {
5009
+ "path-key": "^2.0.0"
5010
+ }
5011
+ },
5012
+ "object-assign": {
5013
+ "version": "4.1.1",
5014
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
5015
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
5016
+ "dev": true
5017
+ },
5018
+ "object-copy": {
5019
+ "version": "0.1.0",
5020
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
5021
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
5022
+ "dev": true,
5023
+ "requires": {
5024
+ "copy-descriptor": "^0.1.0",
5025
+ "define-property": "^0.2.5",
5026
+ "kind-of": "^3.0.3"
5027
+ },
5028
+ "dependencies": {
5029
+ "define-property": {
5030
+ "version": "0.2.5",
5031
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
5032
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
5033
+ "dev": true,
5034
+ "requires": {
5035
+ "is-descriptor": "^0.1.0"
5036
+ }
5037
+ },
5038
+ "kind-of": {
5039
+ "version": "3.2.2",
5040
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
5041
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
5042
+ "dev": true,
5043
+ "requires": {
5044
+ "is-buffer": "^1.1.5"
5045
+ }
5046
+ }
5047
+ }
5048
+ },
5049
+ "object-hash": {
5050
+ "version": "2.0.3",
5051
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz",
5052
+ "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==",
5053
+ "dev": true
5054
+ },
5055
+ "object-inspect": {
5056
+ "version": "1.7.0",
5057
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
5058
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
5059
+ "dev": true
5060
+ },
5061
+ "object-keys": {
5062
+ "version": "1.1.1",
5063
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
5064
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
5065
+ "dev": true
5066
+ },
5067
+ "object-visit": {
5068
+ "version": "1.0.1",
5069
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
5070
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
5071
+ "dev": true,
5072
+ "requires": {
5073
+ "isobject": "^3.0.0"
5074
+ }
5075
+ },
5076
+ "object.assign": {
5077
+ "version": "4.1.0",
5078
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
5079
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
5080
+ "dev": true,
5081
+ "requires": {
5082
+ "define-properties": "^1.1.2",
5083
+ "function-bind": "^1.1.1",
5084
+ "has-symbols": "^1.0.0",
5085
+ "object-keys": "^1.0.11"
5086
+ }
5087
+ },
5088
+ "object.entries": {
5089
+ "version": "1.1.1",
5090
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
5091
+ "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
5092
+ "dev": true,
5093
+ "requires": {
5094
+ "define-properties": "^1.1.3",
5095
+ "es-abstract": "^1.17.0-next.1",
5096
+ "function-bind": "^1.1.1",
5097
+ "has": "^1.0.3"
5098
+ }
5099
+ },
5100
+ "object.fromentries": {
5101
+ "version": "2.0.2",
5102
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz",
5103
+ "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==",
5104
+ "dev": true,
5105
+ "requires": {
5106
+ "define-properties": "^1.1.3",
5107
+ "es-abstract": "^1.17.0-next.1",
5108
+ "function-bind": "^1.1.1",
5109
+ "has": "^1.0.3"
5110
+ }
5111
+ },
5112
+ "object.pick": {
5113
+ "version": "1.3.0",
5114
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
5115
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
5116
+ "dev": true,
5117
+ "requires": {
5118
+ "isobject": "^3.0.1"
5119
+ }
5120
+ },
5121
+ "object.values": {
5122
+ "version": "1.1.1",
5123
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz",
5124
+ "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==",
5125
+ "dev": true,
5126
+ "requires": {
5127
+ "define-properties": "^1.1.3",
5128
+ "es-abstract": "^1.17.0-next.1",
5129
+ "function-bind": "^1.1.1",
5130
+ "has": "^1.0.3"
5131
+ }
5132
+ },
5133
+ "once": {
5134
+ "version": "1.4.0",
5135
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5136
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5137
+ "dev": true,
5138
+ "requires": {
5139
+ "wrappy": "1"
5140
+ }
5141
+ },
5142
+ "onetime": {
5143
+ "version": "5.1.0",
5144
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
5145
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
5146
+ "dev": true,
5147
+ "requires": {
5148
+ "mimic-fn": "^2.1.0"
5149
+ }
5150
+ },
5151
+ "optionator": {
5152
+ "version": "0.8.3",
5153
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
5154
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
5155
+ "dev": true,
5156
+ "requires": {
5157
+ "deep-is": "~0.1.3",
5158
+ "fast-levenshtein": "~2.0.6",
5159
+ "levn": "~0.3.0",
5160
+ "prelude-ls": "~1.1.2",
5161
+ "type-check": "~0.3.2",
5162
+ "word-wrap": "~1.2.3"
5163
+ }
5164
+ },
5165
+ "os-browserify": {
5166
+ "version": "0.3.0",
5167
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
5168
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
5169
+ "dev": true
5170
+ },
5171
+ "os-locale": {
5172
+ "version": "3.1.0",
5173
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
5174
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
5175
+ "dev": true,
5176
+ "requires": {
5177
+ "execa": "^1.0.0",
5178
+ "lcid": "^2.0.0",
5179
+ "mem": "^4.0.0"
5180
+ }
5181
+ },
5182
+ "os-tmpdir": {
5183
+ "version": "1.0.2",
5184
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
5185
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
5186
+ "dev": true
5187
+ },
5188
+ "p-defer": {
5189
+ "version": "1.0.0",
5190
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
5191
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
5192
+ "dev": true
5193
+ },
5194
+ "p-finally": {
5195
+ "version": "1.0.0",
5196
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
5197
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
5198
+ "dev": true
5199
+ },
5200
+ "p-is-promise": {
5201
+ "version": "2.1.0",
5202
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
5203
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
5204
+ "dev": true
5205
+ },
5206
+ "p-limit": {
5207
+ "version": "2.0.0",
5208
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
5209
+ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
5210
+ "dev": true,
5211
+ "requires": {
5212
+ "p-try": "^2.0.0"
5213
+ }
5214
+ },
5215
+ "p-locate": {
5216
+ "version": "3.0.0",
5217
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
5218
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
5219
+ "dev": true,
5220
+ "requires": {
5221
+ "p-limit": "^2.0.0"
5222
+ }
5223
+ },
5224
+ "p-try": {
5225
+ "version": "2.0.0",
5226
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
5227
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
5228
+ "dev": true
5229
+ },
5230
+ "pako": {
5231
+ "version": "1.0.11",
5232
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
5233
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
5234
+ "dev": true
5235
+ },
5236
+ "parallel-transform": {
5237
+ "version": "1.2.0",
5238
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
5239
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
5240
+ "dev": true,
5241
+ "requires": {
5242
+ "cyclist": "^1.0.1",
5243
+ "inherits": "^2.0.3",
5244
+ "readable-stream": "^2.1.5"
5245
+ }
5246
+ },
5247
+ "parent-module": {
5248
+ "version": "1.0.1",
5249
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
5250
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
5251
+ "dev": true,
5252
+ "requires": {
5253
+ "callsites": "^3.0.0"
5254
+ }
5255
+ },
5256
+ "parse-asn1": {
5257
+ "version": "5.1.5",
5258
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
5259
+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
5260
+ "dev": true,
5261
+ "requires": {
5262
+ "asn1.js": "^4.0.0",
5263
+ "browserify-aes": "^1.0.0",
5264
+ "create-hash": "^1.1.0",
5265
+ "evp_bytestokey": "^1.0.0",
5266
+ "pbkdf2": "^3.0.3",
5267
+ "safe-buffer": "^5.1.1"
5268
+ }
5269
+ },
5270
+ "parse-passwd": {
5271
+ "version": "1.0.0",
5272
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
5273
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
5274
+ "dev": true
5275
+ },
5276
+ "pascalcase": {
5277
+ "version": "0.1.1",
5278
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
5279
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
5280
+ "dev": true
5281
+ },
5282
+ "path-browserify": {
5283
+ "version": "0.0.1",
5284
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
5285
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
5286
+ "dev": true
5287
+ },
5288
+ "path-dirname": {
5289
+ "version": "1.0.2",
5290
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
5291
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
5292
+ "dev": true
5293
+ },
5294
+ "path-exists": {
5295
+ "version": "3.0.0",
5296
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
5297
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
5298
+ "dev": true
5299
+ },
5300
+ "path-is-absolute": {
5301
+ "version": "1.0.1",
5302
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5303
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5304
+ "dev": true
5305
+ },
5306
+ "path-key": {
5307
+ "version": "2.0.1",
5308
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
5309
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
5310
+ "dev": true
5311
+ },
5312
+ "path-parse": {
5313
+ "version": "1.0.6",
5314
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
5315
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
5316
+ "dev": true
5317
+ },
5318
+ "pbkdf2": {
5319
+ "version": "3.0.17",
5320
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
5321
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
5322
+ "dev": true,
5323
+ "requires": {
5324
+ "create-hash": "^1.1.2",
5325
+ "create-hmac": "^1.1.4",
5326
+ "ripemd160": "^2.0.1",
5327
+ "safe-buffer": "^5.0.1",
5328
+ "sha.js": "^2.4.8"
5329
+ }
5330
+ },
5331
+ "pify": {
5332
+ "version": "4.0.1",
5333
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5334
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5335
+ "dev": true
5336
+ },
5337
+ "pinkie": {
5338
+ "version": "2.0.4",
5339
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
5340
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
5341
+ "dev": true
5342
+ },
5343
+ "pinkie-promise": {
5344
+ "version": "2.0.1",
5345
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
5346
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
5347
+ "dev": true,
5348
+ "requires": {
5349
+ "pinkie": "^2.0.0"
5350
+ }
5351
+ },
5352
+ "pkg-dir": {
5353
+ "version": "3.0.0",
5354
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
5355
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
5356
+ "dev": true,
5357
+ "requires": {
5358
+ "find-up": "^3.0.0"
5359
+ }
5360
+ },
5361
+ "pkg-up": {
5362
+ "version": "2.0.0",
5363
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
5364
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
5365
+ "dev": true,
5366
+ "requires": {
5367
+ "find-up": "^2.1.0"
5368
+ },
5369
+ "dependencies": {
5370
+ "find-up": {
5371
+ "version": "2.1.0",
5372
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
5373
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
5374
+ "dev": true,
5375
+ "requires": {
5376
+ "locate-path": "^2.0.0"
5377
+ }
5378
+ },
5379
+ "locate-path": {
5380
+ "version": "2.0.0",
5381
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
5382
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
5383
+ "dev": true,
5384
+ "requires": {
5385
+ "p-locate": "^2.0.0",
5386
+ "path-exists": "^3.0.0"
5387
+ }
5388
+ },
5389
+ "p-limit": {
5390
+ "version": "1.3.0",
5391
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
5392
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
5393
+ "dev": true,
5394
+ "requires": {
5395
+ "p-try": "^1.0.0"
5396
+ }
5397
+ },
5398
+ "p-locate": {
5399
+ "version": "2.0.0",
5400
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
5401
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
5402
+ "dev": true,
5403
+ "requires": {
5404
+ "p-limit": "^1.1.0"
5405
+ }
5406
+ },
5407
+ "p-try": {
5408
+ "version": "1.0.0",
5409
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
5410
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
5411
+ "dev": true
5412
+ }
5413
+ }
5414
+ },
5415
+ "posix-character-classes": {
5416
+ "version": "0.1.1",
5417
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
5418
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
5419
+ "dev": true
5420
+ },
5421
+ "postcss": {
5422
+ "version": "7.0.27",
5423
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
5424
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
5425
+ "dev": true,
5426
+ "requires": {
5427
+ "chalk": "^2.4.2",
5428
+ "source-map": "^0.6.1",
5429
+ "supports-color": "^6.1.0"
5430
+ },
5431
+ "dependencies": {
5432
+ "source-map": {
5433
+ "version": "0.6.1",
5434
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
5435
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
5436
+ "dev": true
5437
+ },
5438
+ "supports-color": {
5439
+ "version": "6.1.0",
5440
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
5441
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
5442
+ "dev": true,
5443
+ "requires": {
5444
+ "has-flag": "^3.0.0"
5445
+ }
5446
+ }
5447
+ }
5448
+ },
5449
+ "postcss-modules-extract-imports": {
5450
+ "version": "2.0.0",
5451
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
5452
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
5453
+ "dev": true,
5454
+ "requires": {
5455
+ "postcss": "^7.0.5"
5456
+ }
5457
+ },
5458
+ "postcss-modules-local-by-default": {
5459
+ "version": "3.0.2",
5460
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
5461
+ "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
5462
+ "dev": true,
5463
+ "requires": {
5464
+ "icss-utils": "^4.1.1",
5465
+ "postcss": "^7.0.16",
5466
+ "postcss-selector-parser": "^6.0.2",
5467
+ "postcss-value-parser": "^4.0.0"
5468
+ }
5469
+ },
5470
+ "postcss-modules-scope": {
5471
+ "version": "2.1.1",
5472
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz",
5473
+ "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==",
5474
+ "dev": true,
5475
+ "requires": {
5476
+ "postcss": "^7.0.6",
5477
+ "postcss-selector-parser": "^6.0.0"
5478
+ }
5479
+ },
5480
+ "postcss-modules-values": {
5481
+ "version": "3.0.0",
5482
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
5483
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
5484
+ "dev": true,
5485
+ "requires": {
5486
+ "icss-utils": "^4.0.0",
5487
+ "postcss": "^7.0.6"
5488
+ }
5489
+ },
5490
+ "postcss-selector-parser": {
5491
+ "version": "6.0.2",
5492
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
5493
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
5494
+ "dev": true,
5495
+ "requires": {
5496
+ "cssesc": "^3.0.0",
5497
+ "indexes-of": "^1.0.1",
5498
+ "uniq": "^1.0.1"
5499
+ }
5500
+ },
5501
+ "postcss-value-parser": {
5502
+ "version": "4.0.3",
5503
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
5504
+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==",
5505
+ "dev": true
5506
+ },
5507
+ "prelude-ls": {
5508
+ "version": "1.1.2",
5509
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
5510
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
5511
+ "dev": true
5512
+ },
5513
+ "pretty-time": {
5514
+ "version": "1.1.0",
5515
+ "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz",
5516
+ "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==",
5517
+ "dev": true
5518
+ },
5519
+ "private": {
5520
+ "version": "0.1.8",
5521
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
5522
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
5523
+ "dev": true
5524
+ },
5525
+ "process": {
5526
+ "version": "0.11.10",
5527
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
5528
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
5529
+ "dev": true
5530
+ },
5531
+ "process-nextick-args": {
5532
+ "version": "2.0.1",
5533
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
5534
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
5535
+ "dev": true
5536
+ },
5537
+ "progress": {
5538
+ "version": "2.0.3",
5539
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
5540
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
5541
+ "dev": true
5542
+ },
5543
+ "promise-inflight": {
5544
+ "version": "1.0.1",
5545
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
5546
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
5547
+ "dev": true
5548
+ },
5549
+ "prop-types": {
5550
+ "version": "15.7.2",
5551
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
5552
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
5553
+ "dev": true,
5554
+ "requires": {
5555
+ "loose-envify": "^1.4.0",
5556
+ "object-assign": "^4.1.1",
5557
+ "react-is": "^16.8.1"
5558
+ }
5559
+ },
5560
+ "prr": {
5561
+ "version": "1.0.1",
5562
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
5563
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
5564
+ "dev": true
5565
+ },
5566
+ "public-encrypt": {
5567
+ "version": "4.0.3",
5568
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
5569
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
5570
+ "dev": true,
5571
+ "requires": {
5572
+ "bn.js": "^4.1.0",
5573
+ "browserify-rsa": "^4.0.0",
5574
+ "create-hash": "^1.1.0",
5575
+ "parse-asn1": "^5.0.0",
5576
+ "randombytes": "^2.0.1",
5577
+ "safe-buffer": "^5.1.2"
5578
+ }
5579
+ },
5580
+ "pump": {
5581
+ "version": "3.0.0",
5582
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5583
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5584
+ "dev": true,
5585
+ "requires": {
5586
+ "end-of-stream": "^1.1.0",
5587
+ "once": "^1.3.1"
5588
+ }
5589
+ },
5590
+ "pumpify": {
5591
+ "version": "1.5.1",
5592
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
5593
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
5594
+ "dev": true,
5595
+ "requires": {
5596
+ "duplexify": "^3.6.0",
5597
+ "inherits": "^2.0.3",
5598
+ "pump": "^2.0.0"
5599
+ },
5600
+ "dependencies": {
5601
+ "pump": {
5602
+ "version": "2.0.1",
5603
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
5604
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
5605
+ "dev": true,
5606
+ "requires": {
5607
+ "end-of-stream": "^1.1.0",
5608
+ "once": "^1.3.1"
5609
+ }
5610
+ }
5611
+ }
5612
+ },
5613
+ "punycode": {
5614
+ "version": "2.1.1",
5615
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
5616
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
5617
+ "dev": true
5618
+ },
5619
+ "querystring": {
5620
+ "version": "0.2.0",
5621
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
5622
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
5623
+ "dev": true
5624
+ },
5625
+ "querystring-es3": {
5626
+ "version": "0.2.1",
5627
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
5628
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
5629
+ "dev": true
5630
+ },
5631
+ "randombytes": {
5632
+ "version": "2.1.0",
5633
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
5634
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
5635
+ "dev": true,
5636
+ "requires": {
5637
+ "safe-buffer": "^5.1.0"
5638
+ }
5639
+ },
5640
+ "randomfill": {
5641
+ "version": "1.0.4",
5642
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
5643
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
5644
+ "dev": true,
5645
+ "requires": {
5646
+ "randombytes": "^2.0.5",
5647
+ "safe-buffer": "^5.1.0"
5648
+ }
5649
+ },
5650
+ "react": {
5651
+ "version": "16.13.1",
5652
+ "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
5653
+ "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
5654
+ "dev": true,
5655
+ "requires": {
5656
+ "loose-envify": "^1.1.0",
5657
+ "object-assign": "^4.1.1",
5658
+ "prop-types": "^15.6.2"
5659
+ }
5660
+ },
5661
+ "react-dom": {
5662
+ "version": "16.13.1",
5663
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
5664
+ "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
5665
+ "dev": true,
5666
+ "requires": {
5667
+ "loose-envify": "^1.1.0",
5668
+ "object-assign": "^4.1.1",
5669
+ "prop-types": "^15.6.2",
5670
+ "scheduler": "^0.19.1"
5671
+ }
5672
+ },
5673
+ "react-is": {
5674
+ "version": "16.13.0",
5675
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz",
5676
+ "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==",
5677
+ "dev": true
5678
+ },
5679
+ "readable-stream": {
5680
+ "version": "2.3.7",
5681
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
5682
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
5683
+ "dev": true,
5684
+ "requires": {
5685
+ "core-util-is": "~1.0.0",
5686
+ "inherits": "~2.0.3",
5687
+ "isarray": "~1.0.0",
5688
+ "process-nextick-args": "~2.0.0",
5689
+ "safe-buffer": "~5.1.1",
5690
+ "string_decoder": "~1.1.1",
5691
+ "util-deprecate": "~1.0.1"
5692
+ },
5693
+ "dependencies": {
5694
+ "safe-buffer": {
5695
+ "version": "5.1.2",
5696
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
5697
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
5698
+ "dev": true
5699
+ }
5700
+ }
5701
+ },
5702
+ "readdirp": {
5703
+ "version": "2.2.1",
5704
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
5705
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
5706
+ "dev": true,
5707
+ "requires": {
5708
+ "graceful-fs": "^4.1.11",
5709
+ "micromatch": "^3.1.10",
5710
+ "readable-stream": "^2.0.2"
5711
+ }
5712
+ },
5713
+ "regenerate": {
5714
+ "version": "1.4.0",
5715
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
5716
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
5717
+ "dev": true
5718
+ },
5719
+ "regenerate-unicode-properties": {
5720
+ "version": "8.2.0",
5721
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
5722
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
5723
+ "dev": true,
5724
+ "requires": {
5725
+ "regenerate": "^1.4.0"
5726
+ }
5727
+ },
5728
+ "regenerator-runtime": {
5729
+ "version": "0.13.5",
5730
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
5731
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
5732
+ },
5733
+ "regenerator-transform": {
5734
+ "version": "0.14.4",
5735
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz",
5736
+ "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==",
5737
+ "dev": true,
5738
+ "requires": {
5739
+ "@babel/runtime": "^7.8.4",
5740
+ "private": "^0.1.8"
5741
+ }
5742
+ },
5743
+ "regex-not": {
5744
+ "version": "1.0.2",
5745
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
5746
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
5747
+ "dev": true,
5748
+ "requires": {
5749
+ "extend-shallow": "^3.0.2",
5750
+ "safe-regex": "^1.1.0"
5751
+ }
5752
+ },
5753
+ "regexp.prototype.flags": {
5754
+ "version": "1.3.0",
5755
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
5756
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
5757
+ "dev": true,
5758
+ "requires": {
5759
+ "define-properties": "^1.1.3",
5760
+ "es-abstract": "^1.17.0-next.1"
5761
+ }
5762
+ },
5763
+ "regexpp": {
5764
+ "version": "2.0.1",
5765
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
5766
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
5767
+ "dev": true
5768
+ },
5769
+ "regexpu-core": {
5770
+ "version": "4.7.0",
5771
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
5772
+ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
5773
+ "dev": true,
5774
+ "requires": {
5775
+ "regenerate": "^1.4.0",
5776
+ "regenerate-unicode-properties": "^8.2.0",
5777
+ "regjsgen": "^0.5.1",
5778
+ "regjsparser": "^0.6.4",
5779
+ "unicode-match-property-ecmascript": "^1.0.4",
5780
+ "unicode-match-property-value-ecmascript": "^1.2.0"
5781
+ }
5782
+ },
5783
+ "regjsgen": {
5784
+ "version": "0.5.1",
5785
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
5786
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
5787
+ "dev": true
5788
+ },
5789
+ "regjsparser": {
5790
+ "version": "0.6.4",
5791
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
5792
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
5793
+ "dev": true,
5794
+ "requires": {
5795
+ "jsesc": "~0.5.0"
5796
+ },
5797
+ "dependencies": {
5798
+ "jsesc": {
5799
+ "version": "0.5.0",
5800
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
5801
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
5802
+ "dev": true
5803
+ }
5804
+ }
5805
+ },
5806
+ "remove-trailing-separator": {
5807
+ "version": "1.1.0",
5808
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
5809
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
5810
+ "dev": true
5811
+ },
5812
+ "repeat-element": {
5813
+ "version": "1.1.3",
5814
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
5815
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
5816
+ "dev": true
5817
+ },
5818
+ "repeat-string": {
5819
+ "version": "1.6.1",
5820
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
5821
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
5822
+ "dev": true
5823
+ },
5824
+ "require-directory": {
5825
+ "version": "2.1.1",
5826
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
5827
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
5828
+ "dev": true
5829
+ },
5830
+ "require-main-filename": {
5831
+ "version": "2.0.0",
5832
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
5833
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
5834
+ "dev": true
5835
+ },
5836
+ "resolve": {
5837
+ "version": "1.15.1",
5838
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
5839
+ "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
5840
+ "dev": true,
5841
+ "requires": {
5842
+ "path-parse": "^1.0.6"
5843
+ }
5844
+ },
5845
+ "resolve-cwd": {
5846
+ "version": "2.0.0",
5847
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
5848
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
5849
+ "dev": true,
5850
+ "requires": {
5851
+ "resolve-from": "^3.0.0"
5852
+ },
5853
+ "dependencies": {
5854
+ "resolve-from": {
5855
+ "version": "3.0.0",
5856
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
5857
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
5858
+ "dev": true
5859
+ }
5860
+ }
5861
+ },
5862
+ "resolve-dir": {
5863
+ "version": "1.0.1",
5864
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
5865
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
5866
+ "dev": true,
5867
+ "requires": {
5868
+ "expand-tilde": "^2.0.0",
5869
+ "global-modules": "^1.0.0"
5870
+ },
5871
+ "dependencies": {
5872
+ "global-modules": {
5873
+ "version": "1.0.0",
5874
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
5875
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
5876
+ "dev": true,
5877
+ "requires": {
5878
+ "global-prefix": "^1.0.1",
5879
+ "is-windows": "^1.0.1",
5880
+ "resolve-dir": "^1.0.0"
5881
+ }
5882
+ }
5883
+ }
5884
+ },
5885
+ "resolve-from": {
5886
+ "version": "4.0.0",
5887
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
5888
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
5889
+ "dev": true
5890
+ },
5891
+ "resolve-url": {
5892
+ "version": "0.2.1",
5893
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
5894
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
5895
+ "dev": true
5896
+ },
5897
+ "restore-cursor": {
5898
+ "version": "3.1.0",
5899
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
5900
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
5901
+ "dev": true,
5902
+ "requires": {
5903
+ "onetime": "^5.1.0",
5904
+ "signal-exit": "^3.0.2"
5905
+ }
5906
+ },
5907
+ "ret": {
5908
+ "version": "0.1.15",
5909
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
5910
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
5911
+ "dev": true
5912
+ },
5913
+ "rimraf": {
5914
+ "version": "2.6.3",
5915
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
5916
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
5917
+ "dev": true,
5918
+ "requires": {
5919
+ "glob": "^7.1.3"
5920
+ }
5921
+ },
5922
+ "ripemd160": {
5923
+ "version": "2.0.2",
5924
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
5925
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
5926
+ "dev": true,
5927
+ "requires": {
5928
+ "hash-base": "^3.0.0",
5929
+ "inherits": "^2.0.1"
5930
+ }
5931
+ },
5932
+ "run-async": {
5933
+ "version": "2.4.0",
5934
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
5935
+ "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
5936
+ "dev": true,
5937
+ "requires": {
5938
+ "is-promise": "^2.1.0"
5939
+ }
5940
+ },
5941
+ "run-queue": {
5942
+ "version": "1.0.3",
5943
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
5944
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
5945
+ "dev": true,
5946
+ "requires": {
5947
+ "aproba": "^1.1.1"
5948
+ }
5949
+ },
5950
+ "rxjs": {
5951
+ "version": "6.5.4",
5952
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
5953
+ "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
5954
+ "dev": true,
5955
+ "requires": {
5956
+ "tslib": "^1.9.0"
5957
+ }
5958
+ },
5959
+ "safe-buffer": {
5960
+ "version": "5.2.0",
5961
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
5962
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
5963
+ },
5964
+ "safe-regex": {
5965
+ "version": "1.1.0",
5966
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
5967
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
5968
+ "dev": true,
5969
+ "requires": {
5970
+ "ret": "~0.1.10"
5971
+ }
5972
+ },
5973
+ "safer-buffer": {
5974
+ "version": "2.1.2",
5975
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
5976
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
5977
+ },
5978
+ "scheduler": {
5979
+ "version": "0.19.1",
5980
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
5981
+ "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
5982
+ "dev": true,
5983
+ "requires": {
5984
+ "loose-envify": "^1.1.0",
5985
+ "object-assign": "^4.1.1"
5986
+ }
5987
+ },
5988
+ "schema-utils": {
5989
+ "version": "2.6.5",
5990
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz",
5991
+ "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==",
5992
+ "dev": true,
5993
+ "requires": {
5994
+ "ajv": "^6.12.0",
5995
+ "ajv-keywords": "^3.4.1"
5996
+ }
5997
+ },
5998
+ "semver": {
5999
+ "version": "5.7.1",
6000
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
6001
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
6002
+ "dev": true
6003
+ },
6004
+ "serialize-javascript": {
6005
+ "version": "2.1.2",
6006
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
6007
+ "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
6008
+ "dev": true
6009
+ },
6010
+ "set-blocking": {
6011
+ "version": "2.0.0",
6012
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
6013
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
6014
+ "dev": true
6015
+ },
6016
+ "set-value": {
6017
+ "version": "2.0.1",
6018
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
6019
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
6020
+ "dev": true,
6021
+ "requires": {
6022
+ "extend-shallow": "^2.0.1",
6023
+ "is-extendable": "^0.1.1",
6024
+ "is-plain-object": "^2.0.3",
6025
+ "split-string": "^3.0.1"
6026
+ },
6027
+ "dependencies": {
6028
+ "extend-shallow": {
6029
+ "version": "2.0.1",
6030
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
6031
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
6032
+ "dev": true,
6033
+ "requires": {
6034
+ "is-extendable": "^0.1.0"
6035
+ }
6036
+ }
6037
+ }
6038
+ },
6039
+ "setimmediate": {
6040
+ "version": "1.0.5",
6041
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
6042
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
6043
+ "dev": true
6044
+ },
6045
+ "sha.js": {
6046
+ "version": "2.4.11",
6047
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
6048
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
6049
+ "dev": true,
6050
+ "requires": {
6051
+ "inherits": "^2.0.1",
6052
+ "safe-buffer": "^5.0.1"
6053
+ }
6054
+ },
6055
+ "shebang-command": {
6056
+ "version": "1.2.0",
6057
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
6058
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
6059
+ "dev": true,
6060
+ "requires": {
6061
+ "shebang-regex": "^1.0.0"
6062
+ }
6063
+ },
6064
+ "shebang-regex": {
6065
+ "version": "1.0.0",
6066
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
6067
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
6068
+ "dev": true
6069
+ },
6070
+ "side-channel": {
6071
+ "version": "1.0.2",
6072
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz",
6073
+ "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==",
6074
+ "dev": true,
6075
+ "requires": {
6076
+ "es-abstract": "^1.17.0-next.1",
6077
+ "object-inspect": "^1.7.0"
6078
+ }
6079
+ },
6080
+ "signal-exit": {
6081
+ "version": "3.0.2",
6082
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
6083
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
6084
+ "dev": true
6085
+ },
6086
+ "slice-ansi": {
6087
+ "version": "2.1.0",
6088
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
6089
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
6090
+ "dev": true,
6091
+ "requires": {
6092
+ "ansi-styles": "^3.2.0",
6093
+ "astral-regex": "^1.0.0",
6094
+ "is-fullwidth-code-point": "^2.0.0"
6095
+ },
6096
+ "dependencies": {
6097
+ "is-fullwidth-code-point": {
6098
+ "version": "2.0.0",
6099
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
6100
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
6101
+ "dev": true
6102
+ }
6103
+ }
6104
+ },
6105
+ "snapdragon": {
6106
+ "version": "0.8.2",
6107
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
6108
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
6109
+ "dev": true,
6110
+ "requires": {
6111
+ "base": "^0.11.1",
6112
+ "debug": "^2.2.0",
6113
+ "define-property": "^0.2.5",
6114
+ "extend-shallow": "^2.0.1",
6115
+ "map-cache": "^0.2.2",
6116
+ "source-map": "^0.5.6",
6117
+ "source-map-resolve": "^0.5.0",
6118
+ "use": "^3.1.0"
6119
+ },
6120
+ "dependencies": {
6121
+ "debug": {
6122
+ "version": "2.6.9",
6123
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
6124
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
6125
+ "dev": true,
6126
+ "requires": {
6127
+ "ms": "2.0.0"
6128
+ }
6129
+ },
6130
+ "define-property": {
6131
+ "version": "0.2.5",
6132
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
6133
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
6134
+ "dev": true,
6135
+ "requires": {
6136
+ "is-descriptor": "^0.1.0"
6137
+ }
6138
+ },
6139
+ "extend-shallow": {
6140
+ "version": "2.0.1",
6141
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
6142
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
6143
+ "dev": true,
6144
+ "requires": {
6145
+ "is-extendable": "^0.1.0"
6146
+ }
6147
+ },
6148
+ "ms": {
6149
+ "version": "2.0.0",
6150
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
6151
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
6152
+ "dev": true
6153
+ }
6154
+ }
6155
+ },
6156
+ "snapdragon-node": {
6157
+ "version": "2.1.1",
6158
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
6159
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
6160
+ "dev": true,
6161
+ "requires": {
6162
+ "define-property": "^1.0.0",
6163
+ "isobject": "^3.0.0",
6164
+ "snapdragon-util": "^3.0.1"
6165
+ },
6166
+ "dependencies": {
6167
+ "define-property": {
6168
+ "version": "1.0.0",
6169
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
6170
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
6171
+ "dev": true,
6172
+ "requires": {
6173
+ "is-descriptor": "^1.0.0"
6174
+ }
6175
+ },
6176
+ "is-accessor-descriptor": {
6177
+ "version": "1.0.0",
6178
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
6179
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
6180
+ "dev": true,
6181
+ "requires": {
6182
+ "kind-of": "^6.0.0"
6183
+ }
6184
+ },
6185
+ "is-data-descriptor": {
6186
+ "version": "1.0.0",
6187
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
6188
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
6189
+ "dev": true,
6190
+ "requires": {
6191
+ "kind-of": "^6.0.0"
6192
+ }
6193
+ },
6194
+ "is-descriptor": {
6195
+ "version": "1.0.2",
6196
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
6197
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
6198
+ "dev": true,
6199
+ "requires": {
6200
+ "is-accessor-descriptor": "^1.0.0",
6201
+ "is-data-descriptor": "^1.0.0",
6202
+ "kind-of": "^6.0.2"
6203
+ }
6204
+ }
6205
+ }
6206
+ },
6207
+ "snapdragon-util": {
6208
+ "version": "3.0.1",
6209
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
6210
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
6211
+ "dev": true,
6212
+ "requires": {
6213
+ "kind-of": "^3.2.0"
6214
+ },
6215
+ "dependencies": {
6216
+ "kind-of": {
6217
+ "version": "3.2.2",
6218
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
6219
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
6220
+ "dev": true,
6221
+ "requires": {
6222
+ "is-buffer": "^1.1.5"
6223
+ }
6224
+ }
6225
+ }
6226
+ },
6227
+ "source-list-map": {
6228
+ "version": "2.0.1",
6229
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
6230
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
6231
+ "dev": true
6232
+ },
6233
+ "source-map": {
6234
+ "version": "0.5.7",
6235
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
6236
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
6237
+ "dev": true
6238
+ },
6239
+ "source-map-resolve": {
6240
+ "version": "0.5.3",
6241
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
6242
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
6243
+ "dev": true,
6244
+ "requires": {
6245
+ "atob": "^2.1.2",
6246
+ "decode-uri-component": "^0.2.0",
6247
+ "resolve-url": "^0.2.1",
6248
+ "source-map-url": "^0.4.0",
6249
+ "urix": "^0.1.0"
6250
+ }
6251
+ },
6252
+ "source-map-support": {
6253
+ "version": "0.5.16",
6254
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
6255
+ "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
6256
+ "dev": true,
6257
+ "requires": {
6258
+ "buffer-from": "^1.0.0",
6259
+ "source-map": "^0.6.0"
6260
+ },
6261
+ "dependencies": {
6262
+ "source-map": {
6263
+ "version": "0.6.1",
6264
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6265
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6266
+ "dev": true
6267
+ }
6268
+ }
6269
+ },
6270
+ "source-map-url": {
6271
+ "version": "0.4.0",
6272
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
6273
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
6274
+ "dev": true
6275
+ },
6276
+ "split-string": {
6277
+ "version": "3.1.0",
6278
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
6279
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
6280
+ "dev": true,
6281
+ "requires": {
6282
+ "extend-shallow": "^3.0.0"
6283
+ }
6284
+ },
6285
+ "sprintf-js": {
6286
+ "version": "1.0.3",
6287
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
6288
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
6289
+ "dev": true
6290
+ },
6291
+ "ssri": {
6292
+ "version": "6.0.1",
6293
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
6294
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
6295
+ "dev": true,
6296
+ "requires": {
6297
+ "figgy-pudding": "^3.5.1"
6298
+ }
6299
+ },
6300
+ "static-extend": {
6301
+ "version": "0.1.2",
6302
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
6303
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
6304
+ "dev": true,
6305
+ "requires": {
6306
+ "define-property": "^0.2.5",
6307
+ "object-copy": "^0.1.0"
6308
+ },
6309
+ "dependencies": {
6310
+ "define-property": {
6311
+ "version": "0.2.5",
6312
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
6313
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
6314
+ "dev": true,
6315
+ "requires": {
6316
+ "is-descriptor": "^0.1.0"
6317
+ }
6318
+ }
6319
+ }
6320
+ },
6321
+ "std-env": {
6322
+ "version": "2.2.1",
6323
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz",
6324
+ "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==",
6325
+ "dev": true,
6326
+ "requires": {
6327
+ "ci-info": "^1.6.0"
6328
+ }
6329
+ },
6330
+ "stream-browserify": {
6331
+ "version": "2.0.2",
6332
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
6333
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
6334
+ "dev": true,
6335
+ "requires": {
6336
+ "inherits": "~2.0.1",
6337
+ "readable-stream": "^2.0.2"
6338
+ }
6339
+ },
6340
+ "stream-each": {
6341
+ "version": "1.2.3",
6342
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
6343
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
6344
+ "dev": true,
6345
+ "requires": {
6346
+ "end-of-stream": "^1.1.0",
6347
+ "stream-shift": "^1.0.0"
6348
+ }
6349
+ },
6350
+ "stream-http": {
6351
+ "version": "2.8.3",
6352
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
6353
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
6354
+ "dev": true,
6355
+ "requires": {
6356
+ "builtin-status-codes": "^3.0.0",
6357
+ "inherits": "^2.0.1",
6358
+ "readable-stream": "^2.3.6",
6359
+ "to-arraybuffer": "^1.0.0",
6360
+ "xtend": "^4.0.0"
6361
+ }
6362
+ },
6363
+ "stream-shift": {
6364
+ "version": "1.0.1",
6365
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
6366
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
6367
+ "dev": true
6368
+ },
6369
+ "string-width": {
6370
+ "version": "4.2.0",
6371
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
6372
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
6373
+ "dev": true,
6374
+ "requires": {
6375
+ "emoji-regex": "^8.0.0",
6376
+ "is-fullwidth-code-point": "^3.0.0",
6377
+ "strip-ansi": "^6.0.0"
6378
+ },
6379
+ "dependencies": {
6380
+ "strip-ansi": {
6381
+ "version": "6.0.0",
6382
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
6383
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
6384
+ "dev": true,
6385
+ "requires": {
6386
+ "ansi-regex": "^5.0.0"
6387
+ }
6388
+ }
6389
+ }
6390
+ },
6391
+ "string.prototype.matchall": {
6392
+ "version": "4.0.2",
6393
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz",
6394
+ "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==",
6395
+ "dev": true,
6396
+ "requires": {
6397
+ "define-properties": "^1.1.3",
6398
+ "es-abstract": "^1.17.0",
6399
+ "has-symbols": "^1.0.1",
6400
+ "internal-slot": "^1.0.2",
6401
+ "regexp.prototype.flags": "^1.3.0",
6402
+ "side-channel": "^1.0.2"
6403
+ }
6404
+ },
6405
+ "string.prototype.trimleft": {
6406
+ "version": "2.1.1",
6407
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
6408
+ "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
6409
+ "dev": true,
6410
+ "requires": {
6411
+ "define-properties": "^1.1.3",
6412
+ "function-bind": "^1.1.1"
6413
+ }
6414
+ },
6415
+ "string.prototype.trimright": {
6416
+ "version": "2.1.1",
6417
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
6418
+ "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
6419
+ "dev": true,
6420
+ "requires": {
6421
+ "define-properties": "^1.1.3",
6422
+ "function-bind": "^1.1.1"
6423
+ }
6424
+ },
6425
+ "string_decoder": {
6426
+ "version": "1.1.1",
6427
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
6428
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
6429
+ "dev": true,
6430
+ "requires": {
6431
+ "safe-buffer": "~5.1.0"
6432
+ },
6433
+ "dependencies": {
6434
+ "safe-buffer": {
6435
+ "version": "5.1.2",
6436
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
6437
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
6438
+ "dev": true
6439
+ }
6440
+ }
6441
+ },
6442
+ "strip-ansi": {
6443
+ "version": "5.2.0",
6444
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
6445
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
6446
+ "dev": true,
6447
+ "requires": {
6448
+ "ansi-regex": "^4.1.0"
6449
+ },
6450
+ "dependencies": {
6451
+ "ansi-regex": {
6452
+ "version": "4.1.0",
6453
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
6454
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
6455
+ "dev": true
6456
+ }
6457
+ }
6458
+ },
6459
+ "strip-eof": {
6460
+ "version": "1.0.0",
6461
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
6462
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
6463
+ "dev": true
6464
+ },
6465
+ "strip-json-comments": {
6466
+ "version": "3.0.1",
6467
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
6468
+ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
6469
+ "dev": true
6470
+ },
6471
+ "style-loader": {
6472
+ "version": "1.1.3",
6473
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz",
6474
+ "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==",
6475
+ "dev": true,
6476
+ "requires": {
6477
+ "loader-utils": "^1.2.3",
6478
+ "schema-utils": "^2.6.4"
6479
+ },
6480
+ "dependencies": {
6481
+ "big.js": {
6482
+ "version": "5.2.2",
6483
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
6484
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
6485
+ "dev": true
6486
+ },
6487
+ "emojis-list": {
6488
+ "version": "3.0.0",
6489
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
6490
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
6491
+ "dev": true
6492
+ },
6493
+ "json5": {
6494
+ "version": "1.0.1",
6495
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
6496
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
6497
+ "dev": true,
6498
+ "requires": {
6499
+ "minimist": "^1.2.0"
6500
+ }
6501
+ },
6502
+ "loader-utils": {
6503
+ "version": "1.4.0",
6504
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
6505
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
6506
+ "dev": true,
6507
+ "requires": {
6508
+ "big.js": "^5.2.2",
6509
+ "emojis-list": "^3.0.0",
6510
+ "json5": "^1.0.1"
6511
+ }
6512
+ },
6513
+ "minimist": {
6514
+ "version": "1.2.5",
6515
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
6516
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
6517
+ "dev": true
6518
+ }
6519
+ }
6520
+ },
6521
+ "supports-color": {
6522
+ "version": "5.5.0",
6523
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
6524
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
6525
+ "dev": true,
6526
+ "requires": {
6527
+ "has-flag": "^3.0.0"
6528
+ }
6529
+ },
6530
+ "table": {
6531
+ "version": "5.4.6",
6532
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
6533
+ "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
6534
+ "dev": true,
6535
+ "requires": {
6536
+ "ajv": "^6.10.2",
6537
+ "lodash": "^4.17.14",
6538
+ "slice-ansi": "^2.1.0",
6539
+ "string-width": "^3.0.0"
6540
+ },
6541
+ "dependencies": {
6542
+ "emoji-regex": {
6543
+ "version": "7.0.3",
6544
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
6545
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
6546
+ "dev": true
6547
+ },
6548
+ "is-fullwidth-code-point": {
6549
+ "version": "2.0.0",
6550
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
6551
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
6552
+ "dev": true
6553
+ },
6554
+ "string-width": {
6555
+ "version": "3.1.0",
6556
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
6557
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
6558
+ "dev": true,
6559
+ "requires": {
6560
+ "emoji-regex": "^7.0.1",
6561
+ "is-fullwidth-code-point": "^2.0.0",
6562
+ "strip-ansi": "^5.1.0"
6563
+ }
6564
+ }
6565
+ }
6566
+ },
6567
+ "tannin": {
6568
+ "version": "1.2.0",
6569
+ "resolved": "https://registry.npmjs.org/tannin/-/tannin-1.2.0.tgz",
6570
+ "integrity": "sha512-U7GgX/RcSeUETbV7gYgoz8PD7Ni4y95pgIP/Z6ayI3CfhSujwKEBlGFTCRN+Aqnuyf4AN2yHL+L8x+TCGjb9uA==",
6571
+ "requires": {
6572
+ "@tannin/plural-forms": "^1.1.0"
6573
+ }
6574
+ },
6575
+ "tapable": {
6576
+ "version": "1.1.3",
6577
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
6578
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
6579
+ "dev": true
6580
+ },
6581
+ "terser": {
6582
+ "version": "4.6.10",
6583
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.10.tgz",
6584
+ "integrity": "sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==",
6585
+ "dev": true,
6586
+ "requires": {
6587
+ "commander": "^2.20.0",
6588
+ "source-map": "~0.6.1",
6589
+ "source-map-support": "~0.5.12"
6590
+ },
6591
+ "dependencies": {
6592
+ "source-map": {
6593
+ "version": "0.6.1",
6594
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6595
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6596
+ "dev": true
6597
+ }
6598
+ }
6599
+ },
6600
+ "terser-webpack-plugin": {
6601
+ "version": "1.4.3",
6602
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
6603
+ "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
6604
+ "dev": true,
6605
+ "requires": {
6606
+ "cacache": "^12.0.2",
6607
+ "find-cache-dir": "^2.1.0",
6608
+ "is-wsl": "^1.1.0",
6609
+ "schema-utils": "^1.0.0",
6610
+ "serialize-javascript": "^2.1.2",
6611
+ "source-map": "^0.6.1",
6612
+ "terser": "^4.1.2",
6613
+ "webpack-sources": "^1.4.0",
6614
+ "worker-farm": "^1.7.0"
6615
+ },
6616
+ "dependencies": {
6617
+ "schema-utils": {
6618
+ "version": "1.0.0",
6619
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
6620
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
6621
+ "dev": true,
6622
+ "requires": {
6623
+ "ajv": "^6.1.0",
6624
+ "ajv-errors": "^1.0.0",
6625
+ "ajv-keywords": "^3.1.0"
6626
+ }
6627
+ },
6628
+ "source-map": {
6629
+ "version": "0.6.1",
6630
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6631
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6632
+ "dev": true
6633
+ }
6634
+ }
6635
+ },
6636
+ "text-table": {
6637
+ "version": "0.2.0",
6638
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
6639
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
6640
+ "dev": true
6641
+ },
6642
+ "through": {
6643
+ "version": "2.3.8",
6644
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
6645
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
6646
+ "dev": true
6647
+ },
6648
+ "through2": {
6649
+ "version": "2.0.5",
6650
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
6651
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
6652
+ "dev": true,
6653
+ "requires": {
6654
+ "readable-stream": "~2.3.6",
6655
+ "xtend": "~4.0.1"
6656
+ }
6657
+ },
6658
+ "timers-browserify": {
6659
+ "version": "2.0.11",
6660
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
6661
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
6662
+ "dev": true,
6663
+ "requires": {
6664
+ "setimmediate": "^1.0.4"
6665
+ }
6666
+ },
6667
+ "tmp": {
6668
+ "version": "0.0.33",
6669
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
6670
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
6671
+ "dev": true,
6672
+ "requires": {
6673
+ "os-tmpdir": "~1.0.2"
6674
+ }
6675
+ },
6676
+ "to-arraybuffer": {
6677
+ "version": "1.0.1",
6678
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
6679
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
6680
+ "dev": true
6681
+ },
6682
+ "to-fast-properties": {
6683
+ "version": "2.0.0",
6684
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
6685
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
6686
+ "dev": true
6687
+ },
6688
+ "to-object-path": {
6689
+ "version": "0.3.0",
6690
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
6691
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
6692
+ "dev": true,
6693
+ "requires": {
6694
+ "kind-of": "^3.0.2"
6695
+ },
6696
+ "dependencies": {
6697
+ "kind-of": {
6698
+ "version": "3.2.2",
6699
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
6700
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
6701
+ "dev": true,
6702
+ "requires": {
6703
+ "is-buffer": "^1.1.5"
6704
+ }
6705
+ }
6706
+ }
6707
+ },
6708
+ "to-regex": {
6709
+ "version": "3.0.2",
6710
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
6711
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
6712
+ "dev": true,
6713
+ "requires": {
6714
+ "define-property": "^2.0.2",
6715
+ "extend-shallow": "^3.0.2",
6716
+ "regex-not": "^1.0.2",
6717
+ "safe-regex": "^1.1.0"
6718
+ }
6719
+ },
6720
+ "to-regex-range": {
6721
+ "version": "2.1.1",
6722
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
6723
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
6724
+ "dev": true,
6725
+ "requires": {
6726
+ "is-number": "^3.0.0",
6727
+ "repeat-string": "^1.6.1"
6728
+ }
6729
+ },
6730
+ "tslib": {
6731
+ "version": "1.11.1",
6732
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
6733
+ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==",
6734
+ "dev": true
6735
+ },
6736
+ "tty-browserify": {
6737
+ "version": "0.0.0",
6738
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
6739
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
6740
+ "dev": true
6741
+ },
6742
+ "type-check": {
6743
+ "version": "0.3.2",
6744
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
6745
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
6746
+ "dev": true,
6747
+ "requires": {
6748
+ "prelude-ls": "~1.1.2"
6749
+ }
6750
+ },
6751
+ "type-fest": {
6752
+ "version": "0.5.2",
6753
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
6754
+ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
6755
+ "dev": true
6756
+ },
6757
+ "typedarray": {
6758
+ "version": "0.0.6",
6759
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
6760
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
6761
+ "dev": true
6762
+ },
6763
+ "unicode-canonical-property-names-ecmascript": {
6764
+ "version": "1.0.4",
6765
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
6766
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
6767
+ "dev": true
6768
+ },
6769
+ "unicode-match-property-ecmascript": {
6770
+ "version": "1.0.4",
6771
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
6772
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
6773
+ "dev": true,
6774
+ "requires": {
6775
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
6776
+ "unicode-property-aliases-ecmascript": "^1.0.4"
6777
+ }
6778
+ },
6779
+ "unicode-match-property-value-ecmascript": {
6780
+ "version": "1.2.0",
6781
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
6782
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
6783
+ "dev": true
6784
+ },
6785
+ "unicode-property-aliases-ecmascript": {
6786
+ "version": "1.1.0",
6787
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
6788
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
6789
+ "dev": true
6790
+ },
6791
+ "union-value": {
6792
+ "version": "1.0.1",
6793
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
6794
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
6795
+ "dev": true,
6796
+ "requires": {
6797
+ "arr-union": "^3.1.0",
6798
+ "get-value": "^2.0.6",
6799
+ "is-extendable": "^0.1.1",
6800
+ "set-value": "^2.0.1"
6801
+ }
6802
+ },
6803
+ "uniq": {
6804
+ "version": "1.0.1",
6805
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
6806
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
6807
+ "dev": true
6808
+ },
6809
+ "unique-filename": {
6810
+ "version": "1.1.1",
6811
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
6812
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
6813
+ "dev": true,
6814
+ "requires": {
6815
+ "unique-slug": "^2.0.0"
6816
+ }
6817
+ },
6818
+ "unique-slug": {
6819
+ "version": "2.0.2",
6820
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
6821
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
6822
+ "dev": true,
6823
+ "requires": {
6824
+ "imurmurhash": "^0.1.4"
6825
+ }
6826
+ },
6827
+ "universalify": {
6828
+ "version": "1.0.0",
6829
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
6830
+ "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
6831
+ "dev": true
6832
+ },
6833
+ "unset-value": {
6834
+ "version": "1.0.0",
6835
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
6836
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
6837
+ "dev": true,
6838
+ "requires": {
6839
+ "has-value": "^0.3.1",
6840
+ "isobject": "^3.0.0"
6841
+ },
6842
+ "dependencies": {
6843
+ "has-value": {
6844
+ "version": "0.3.1",
6845
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
6846
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
6847
+ "dev": true,
6848
+ "requires": {
6849
+ "get-value": "^2.0.3",
6850
+ "has-values": "^0.1.4",
6851
+ "isobject": "^2.0.0"
6852
+ },
6853
+ "dependencies": {
6854
+ "isobject": {
6855
+ "version": "2.1.0",
6856
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
6857
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
6858
+ "dev": true,
6859
+ "requires": {
6860
+ "isarray": "1.0.0"
6861
+ }
6862
+ }
6863
+ }
6864
+ },
6865
+ "has-values": {
6866
+ "version": "0.1.4",
6867
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
6868
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
6869
+ "dev": true
6870
+ }
6871
+ }
6872
+ },
6873
+ "upath": {
6874
+ "version": "1.2.0",
6875
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
6876
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
6877
+ "dev": true
6878
+ },
6879
+ "uri-js": {
6880
+ "version": "4.2.2",
6881
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
6882
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
6883
+ "dev": true,
6884
+ "requires": {
6885
+ "punycode": "^2.1.0"
6886
+ }
6887
+ },
6888
+ "urix": {
6889
+ "version": "0.1.0",
6890
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
6891
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
6892
+ "dev": true
6893
+ },
6894
+ "url": {
6895
+ "version": "0.11.0",
6896
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
6897
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
6898
+ "dev": true,
6899
+ "requires": {
6900
+ "punycode": "1.3.2",
6901
+ "querystring": "0.2.0"
6902
+ },
6903
+ "dependencies": {
6904
+ "punycode": {
6905
+ "version": "1.3.2",
6906
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
6907
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
6908
+ "dev": true
6909
+ }
6910
+ }
6911
+ },
6912
+ "use": {
6913
+ "version": "3.1.1",
6914
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
6915
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
6916
+ "dev": true
6917
+ },
6918
+ "util": {
6919
+ "version": "0.11.1",
6920
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
6921
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
6922
+ "dev": true,
6923
+ "requires": {
6924
+ "inherits": "2.0.3"
6925
+ },
6926
+ "dependencies": {
6927
+ "inherits": {
6928
+ "version": "2.0.3",
6929
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
6930
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
6931
+ "dev": true
6932
+ }
6933
+ }
6934
+ },
6935
+ "util-deprecate": {
6936
+ "version": "1.0.2",
6937
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
6938
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
6939
+ "dev": true
6940
+ },
6941
+ "uuid": {
6942
+ "version": "7.0.3",
6943
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
6944
+ "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
6945
+ "dev": true
6946
+ },
6947
+ "v8-compile-cache": {
6948
+ "version": "2.1.0",
6949
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
6950
+ "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
6951
+ "dev": true
6952
+ },
6953
+ "vm-browserify": {
6954
+ "version": "1.1.2",
6955
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
6956
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
6957
+ "dev": true
6958
+ },
6959
+ "watchpack": {
6960
+ "version": "1.6.1",
6961
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
6962
+ "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
6963
+ "dev": true,
6964
+ "requires": {
6965
+ "chokidar": "^2.1.8",
6966
+ "graceful-fs": "^4.1.2",
6967
+ "neo-async": "^2.5.0"
6968
+ }
6969
+ },
6970
+ "webpack": {
6971
+ "version": "4.42.1",
6972
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz",
6973
+ "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==",
6974
+ "dev": true,
6975
+ "requires": {
6976
+ "@webassemblyjs/ast": "1.9.0",
6977
+ "@webassemblyjs/helper-module-context": "1.9.0",
6978
+ "@webassemblyjs/wasm-edit": "1.9.0",
6979
+ "@webassemblyjs/wasm-parser": "1.9.0",
6980
+ "acorn": "^6.2.1",
6981
+ "ajv": "^6.10.2",
6982
+ "ajv-keywords": "^3.4.1",
6983
+ "chrome-trace-event": "^1.0.2",
6984
+ "enhanced-resolve": "^4.1.0",
6985
+ "eslint-scope": "^4.0.3",
6986
+ "json-parse-better-errors": "^1.0.2",
6987
+ "loader-runner": "^2.4.0",
6988
+ "loader-utils": "^1.2.3",
6989
+ "memory-fs": "^0.4.1",
6990
+ "micromatch": "^3.1.10",
6991
+ "mkdirp": "^0.5.3",
6992
+ "neo-async": "^2.6.1",
6993
+ "node-libs-browser": "^2.2.1",
6994
+ "schema-utils": "^1.0.0",
6995
+ "tapable": "^1.1.3",
6996
+ "terser-webpack-plugin": "^1.4.3",
6997
+ "watchpack": "^1.6.0",
6998
+ "webpack-sources": "^1.4.1"
6999
+ },
7000
+ "dependencies": {
7001
+ "acorn": {
7002
+ "version": "6.4.1",
7003
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
7004
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
7005
+ "dev": true
7006
+ },
7007
+ "eslint-scope": {
7008
+ "version": "4.0.3",
7009
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
7010
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
7011
+ "dev": true,
7012
+ "requires": {
7013
+ "esrecurse": "^4.1.0",
7014
+ "estraverse": "^4.1.1"
7015
+ }
7016
+ },
7017
+ "minimist": {
7018
+ "version": "1.2.5",
7019
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
7020
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
7021
+ "dev": true
7022
+ },
7023
+ "mkdirp": {
7024
+ "version": "0.5.5",
7025
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
7026
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
7027
+ "dev": true,
7028
+ "requires": {
7029
+ "minimist": "^1.2.5"
7030
+ }
7031
+ },
7032
+ "schema-utils": {
7033
+ "version": "1.0.0",
7034
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
7035
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
7036
+ "dev": true,
7037
+ "requires": {
7038
+ "ajv": "^6.1.0",
7039
+ "ajv-errors": "^1.0.0",
7040
+ "ajv-keywords": "^3.1.0"
7041
+ }
7042
+ }
7043
+ }
7044
+ },
7045
+ "webpack-cli": {
7046
+ "version": "3.3.11",
7047
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz",
7048
+ "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==",
7049
+ "dev": true,
7050
+ "requires": {
7051
+ "chalk": "2.4.2",
7052
+ "cross-spawn": "6.0.5",
7053
+ "enhanced-resolve": "4.1.0",
7054
+ "findup-sync": "3.0.0",
7055
+ "global-modules": "2.0.0",
7056
+ "import-local": "2.0.0",
7057
+ "interpret": "1.2.0",
7058
+ "loader-utils": "1.2.3",
7059
+ "supports-color": "6.1.0",
7060
+ "v8-compile-cache": "2.0.3",
7061
+ "yargs": "13.2.4"
7062
+ },
7063
+ "dependencies": {
7064
+ "big.js": {
7065
+ "version": "5.2.2",
7066
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
7067
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
7068
+ "dev": true
7069
+ },
7070
+ "enhanced-resolve": {
7071
+ "version": "4.1.0",
7072
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
7073
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
7074
+ "dev": true,
7075
+ "requires": {
7076
+ "graceful-fs": "^4.1.2",
7077
+ "memory-fs": "^0.4.0",
7078
+ "tapable": "^1.0.0"
7079
+ }
7080
+ },
7081
+ "json5": {
7082
+ "version": "1.0.1",
7083
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
7084
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
7085
+ "dev": true,
7086
+ "requires": {
7087
+ "minimist": "^1.2.0"
7088
+ }
7089
+ },
7090
+ "loader-utils": {
7091
+ "version": "1.2.3",
7092
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
7093
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
7094
+ "dev": true,
7095
+ "requires": {
7096
+ "big.js": "^5.2.2",
7097
+ "emojis-list": "^2.0.0",
7098
+ "json5": "^1.0.1"
7099
+ }
7100
+ },
7101
+ "minimist": {
7102
+ "version": "1.2.5",
7103
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
7104
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
7105
+ "dev": true
7106
+ },
7107
+ "supports-color": {
7108
+ "version": "6.1.0",
7109
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
7110
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
7111
+ "dev": true,
7112
+ "requires": {
7113
+ "has-flag": "^3.0.0"
7114
+ }
7115
+ },
7116
+ "v8-compile-cache": {
7117
+ "version": "2.0.3",
7118
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
7119
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
7120
+ "dev": true
7121
+ }
7122
+ }
7123
+ },
7124
+ "webpack-sources": {
7125
+ "version": "1.4.3",
7126
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
7127
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
7128
+ "dev": true,
7129
+ "requires": {
7130
+ "source-list-map": "^2.0.0",
7131
+ "source-map": "~0.6.1"
7132
+ },
7133
+ "dependencies": {
7134
+ "source-map": {
7135
+ "version": "0.6.1",
7136
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
7137
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
7138
+ "dev": true
7139
+ }
7140
+ }
7141
+ },
7142
+ "webpackbar": {
7143
+ "version": "4.0.0",
7144
+ "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz",
7145
+ "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==",
7146
+ "dev": true,
7147
+ "requires": {
7148
+ "ansi-escapes": "^4.2.1",
7149
+ "chalk": "^2.4.2",
7150
+ "consola": "^2.10.0",
7151
+ "figures": "^3.0.0",
7152
+ "pretty-time": "^1.1.0",
7153
+ "std-env": "^2.2.1",
7154
+ "text-table": "^0.2.0",
7155
+ "wrap-ansi": "^6.0.0"
7156
+ },
7157
+ "dependencies": {
7158
+ "ansi-escapes": {
7159
+ "version": "4.2.1",
7160
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
7161
+ "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
7162
+ "dev": true,
7163
+ "requires": {
7164
+ "type-fest": "^0.5.2"
7165
+ }
7166
+ },
7167
+ "chalk": {
7168
+ "version": "2.4.2",
7169
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
7170
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
7171
+ "dev": true,
7172
+ "requires": {
7173
+ "ansi-styles": "^3.2.1",
7174
+ "escape-string-regexp": "^1.0.5",
7175
+ "supports-color": "^5.3.0"
7176
+ }
7177
+ },
7178
+ "color-convert": {
7179
+ "version": "2.0.1",
7180
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
7181
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
7182
+ "dev": true,
7183
+ "requires": {
7184
+ "color-name": "~1.1.4"
7185
+ }
7186
+ },
7187
+ "color-name": {
7188
+ "version": "1.1.4",
7189
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
7190
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
7191
+ "dev": true
7192
+ },
7193
+ "emoji-regex": {
7194
+ "version": "8.0.0",
7195
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
7196
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
7197
+ "dev": true
7198
+ },
7199
+ "figures": {
7200
+ "version": "3.0.0",
7201
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
7202
+ "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
7203
+ "dev": true,
7204
+ "requires": {
7205
+ "escape-string-regexp": "^1.0.5"
7206
+ }
7207
+ },
7208
+ "is-fullwidth-code-point": {
7209
+ "version": "3.0.0",
7210
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
7211
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
7212
+ "dev": true
7213
+ },
7214
+ "string-width": {
7215
+ "version": "4.1.0",
7216
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
7217
+ "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
7218
+ "dev": true,
7219
+ "requires": {
7220
+ "emoji-regex": "^8.0.0",
7221
+ "is-fullwidth-code-point": "^3.0.0",
7222
+ "strip-ansi": "^5.2.0"
7223
+ }
7224
+ },
7225
+ "wrap-ansi": {
7226
+ "version": "6.0.0",
7227
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.0.0.tgz",
7228
+ "integrity": "sha512-8YwLklVkHe4QNpGFrK6Mxm+BaMY7da6C9GlDED3xs3XwThyJHSbVwg9qC4s1N8tBFcnM1S0s8I390RC6SgGe+g==",
7229
+ "dev": true,
7230
+ "requires": {
7231
+ "ansi-styles": "^4.0.0",
7232
+ "string-width": "^4.1.0",
7233
+ "strip-ansi": "^5.0.0"
7234
+ },
7235
+ "dependencies": {
7236
+ "ansi-styles": {
7237
+ "version": "4.1.0",
7238
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.1.0.tgz",
7239
+ "integrity": "sha512-Qts4KCLKG+waHc9C4m07weIY8qyeixoS0h6RnbsNVD6Fw+pEZGW3vTyObL3WXpE09Mq4Oi7/lBEyLmOiLtlYWQ==",
7240
+ "dev": true,
7241
+ "requires": {
7242
+ "color-convert": "^2.0.1"
7243
+ }
7244
+ }
7245
+ }
7246
+ }
7247
+ }
7248
+ },
7249
+ "which": {
7250
+ "version": "1.3.1",
7251
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
7252
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
7253
+ "dev": true,
7254
+ "requires": {
7255
+ "isexe": "^2.0.0"
7256
+ }
7257
+ },
7258
+ "which-module": {
7259
+ "version": "2.0.0",
7260
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
7261
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
7262
+ "dev": true
7263
+ },
7264
+ "word-wrap": {
7265
+ "version": "1.2.3",
7266
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
7267
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
7268
+ "dev": true
7269
+ },
7270
+ "worker-farm": {
7271
+ "version": "1.7.0",
7272
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
7273
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
7274
+ "dev": true,
7275
+ "requires": {
7276
+ "errno": "~0.1.7"
7277
+ }
7278
+ },
7279
+ "wrap-ansi": {
7280
+ "version": "5.1.0",
7281
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
7282
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
7283
+ "dev": true,
7284
+ "requires": {
7285
+ "ansi-styles": "^3.2.0",
7286
+ "string-width": "^3.0.0",
7287
+ "strip-ansi": "^5.0.0"
7288
+ },
7289
+ "dependencies": {
7290
+ "emoji-regex": {
7291
+ "version": "7.0.3",
7292
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
7293
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
7294
+ "dev": true
7295
+ },
7296
+ "is-fullwidth-code-point": {
7297
+ "version": "2.0.0",
7298
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
7299
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
7300
+ "dev": true
7301
+ },
7302
+ "string-width": {
7303
+ "version": "3.1.0",
7304
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
7305
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
7306
+ "dev": true,
7307
+ "requires": {
7308
+ "emoji-regex": "^7.0.1",
7309
+ "is-fullwidth-code-point": "^2.0.0",
7310
+ "strip-ansi": "^5.1.0"
7311
+ }
7312
+ }
7313
+ }
7314
+ },
7315
+ "wrappy": {
7316
+ "version": "1.0.2",
7317
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
7318
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
7319
+ "dev": true
7320
+ },
7321
+ "write": {
7322
+ "version": "1.0.3",
7323
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
7324
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
7325
+ "dev": true,
7326
+ "requires": {
7327
+ "mkdirp": "^0.5.1"
7328
+ }
7329
+ },
7330
+ "xregexp": {
7331
+ "version": "4.3.0",
7332
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
7333
+ "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==",
7334
+ "dev": true,
7335
+ "requires": {
7336
+ "@babel/runtime-corejs3": "^7.8.3"
7337
+ }
7338
+ },
7339
+ "xtend": {
7340
+ "version": "4.0.2",
7341
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
7342
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
7343
+ "dev": true
7344
+ },
7345
+ "y18n": {
7346
+ "version": "4.0.0",
7347
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
7348
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
7349
+ "dev": true
7350
+ },
7351
+ "yallist": {
7352
+ "version": "3.1.1",
7353
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
7354
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
7355
+ "dev": true
7356
+ },
7357
+ "yargs": {
7358
+ "version": "13.2.4",
7359
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
7360
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
7361
+ "dev": true,
7362
+ "requires": {
7363
+ "cliui": "^5.0.0",
7364
+ "find-up": "^3.0.0",
7365
+ "get-caller-file": "^2.0.1",
7366
+ "os-locale": "^3.1.0",
7367
+ "require-directory": "^2.1.1",
7368
+ "require-main-filename": "^2.0.0",
7369
+ "set-blocking": "^2.0.0",
7370
+ "string-width": "^3.0.0",
7371
+ "which-module": "^2.0.0",
7372
+ "y18n": "^4.0.0",
7373
+ "yargs-parser": "^13.1.0"
7374
+ },
7375
+ "dependencies": {
7376
+ "emoji-regex": {
7377
+ "version": "7.0.3",
7378
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
7379
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
7380
+ "dev": true
7381
+ },
7382
+ "is-fullwidth-code-point": {
7383
+ "version": "2.0.0",
7384
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
7385
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
7386
+ "dev": true
7387
+ },
7388
+ "string-width": {
7389
+ "version": "3.1.0",
7390
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
7391
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
7392
+ "dev": true,
7393
+ "requires": {
7394
+ "emoji-regex": "^7.0.1",
7395
+ "is-fullwidth-code-point": "^2.0.0",
7396
+ "strip-ansi": "^5.1.0"
7397
+ }
7398
+ }
7399
+ }
7400
+ },
7401
+ "yargs-parser": {
7402
+ "version": "13.1.2",
7403
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
7404
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
7405
+ "dev": true,
7406
+ "requires": {
7407
+ "camelcase": "^5.0.0",
7408
+ "decamelize": "^1.2.0"
7409
+ }
7410
+ }
7411
+ }
7412
+ }
package.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "mathml-block",
3
+ "main": "mathml-block.js",
4
+ "scripts": {
5
+ "build": "webpack --mode=production ",
6
+ "build:dev": "webpack --mode=development --debug --devtool cheap-source-map --output-pathinfo",
7
+ "watch": "webpack --watch --mode=development --debug --devtool cheap-module-eval-source-map --output-pathinfo"
8
+ },
9
+ "author": "",
10
+ "license": "GPL-2.0",
11
+ "devDependencies": {
12
+ "@babel/core": "^7.9.0",
13
+ "@babel/preset-env": "^7.9.0",
14
+ "@babel/preset-react": "^7.9.4",
15
+ "babel": "^6.23.0",
16
+ "babel-eslint": "^10.1.0",
17
+ "babel-loader": "^8.1.0",
18
+ "css-loader": "^3.4.2",
19
+ "eslint": "^6.8.0",
20
+ "eslint-config-wordpress": "^2.0.0",
21
+ "eslint-loader": "^4.0.0",
22
+ "eslint-plugin-react": "^7.19.0",
23
+ "lodash": "^4.17.15",
24
+ "react": "^16.13.1",
25
+ "react-dom": "^16.13.1",
26
+ "style-loader": "^1.1.3",
27
+ "uuid": "^7.0.3",
28
+ "webpack": "^4.42.1",
29
+ "webpack-cli": "^3.3.11",
30
+ "webpackbar": "^4.0.0"
31
+ },
32
+ "dependencies": {
33
+ "@wordpress/i18n": "^3.10.0"
34
+ }
35
+ }
readme.txt ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === MathML Block ===
2
+ Contributors: adamsilverstein
3
+ Author URI: http://tunedin.net.com
4
+ Plugin URI: https://github.com/adamsilverstein/mathml-block
5
+ Tags: MathML, Gutenberg, Block, math, block editor
6
+ Requires at least: 5.0
7
+ Tested up to: 5.4
8
+ Requires PHP: 5.4
9
+ Stable tag: trunk
10
+ License: GPLv2 or later
11
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
+ Text Domain: mathml-block
13
+
14
+ A MathML block for the WordPress block editor (Gutenberg).
15
+
16
+ == Description ==
17
+
18
+ A MathML block for the WordPress block editor (Gutenberg).
19
+ Requires PHP 5.4+ and WordPress 5.0+.
20
+
21
+ Development takes place on the GitHub repository: https://github.com/adamsilverstein/mathml-block.
22
+
23
+ Screencast: https://cl.ly/c0f6bbfbc3b1
24
+
25
+ === What is MathML? ===
26
+
27
+ Mathematical Markup Language is a mathematical markup language, an application of XML for describing mathematical notations and capturing both its structure and content. It aims at integrating mathematical formulae into World Wide Web pages and other documents.
28
+
29
+ The MathML lock uses MathJax to render MathML formulas in the editor and on the front end of a website. MathJax (https://www.mathjax.org/) is _A JavaScript display engine for mathematics that works in all browsers._
30
+
31
+ To test a MathML block and enter a formula, for example: `\[x = {-b \pm \sqrt{b^2-4ac} \over 2a}\]`.
32
+
33
+ To test using math formulas inline, type an formula into a block of text, select it and hit the 'M' icon in the control bar. For example: `\( \cos(θ+φ)=\cos(θ)\cos(φ)−\sin(θ)\sin(φ) \)`. _Note: if you are copying and pasting formulas into the rich text editor, switching to HTML/code editor mode is less likely to reformat your pasted formula._
34
+
35
+ === Technical Notes ===
36
+
37
+ * Requires PHP 5.4+.
38
+ * Requires WordPress 5.0+.
39
+ * Issues and Pull requests welcome on the GitHub repository: https://github.com/adamsilverstein/mathml-block.
40
+
41
+ == Screenshots ==
42
+
43
+ 1. Example of adding a MathML block.
44
+
45
+
46
+ == Installation ==
47
+ 1. Install the plugin via the plugin installer, either by searching for it or uploading a .zip file.
48
+ 2. Activate the plugin.
49
+ 3. Use the MathML block!
50
+
51
+ == Changelog ==
52
+
53
+ = 1.1.1 =
54
+ * Improve translations, make JavaScript translatable.
55
+ * Update all packages.
56
+
57
+ = 1.1.0 =
58
+ * Add support for inline formulas.
59
+
60
+ = 1.0.0 =
61
+ * Initial plugin release
src/mathml-block.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .toolbar-button__advanced-mathml:before {
2
+ content: 'M';
3
+ }
src/mathml-block.js ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import uuid from 'uuid/v4';
2
+
3
+ const { __ } = wp.i18n;
4
+ const { registerBlockType } = wp.blocks;
5
+
6
+ const renderMathML = ( id ) => {
7
+ setTimeout( () => {
8
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, document.getElementById( id ) ] );
9
+ }, 100 );
10
+ };
11
+
12
+ registerBlockType( 'mathml/mathmlblock', {
13
+ title: 'MathML',
14
+ icon: 'list-view',
15
+ category: 'common',
16
+ attributes: {
17
+ formula: {
18
+ source: 'html',
19
+ selector: 'div',
20
+ type: 'string',
21
+ },
22
+ },
23
+
24
+ edit: ( props ) => {
25
+
26
+ const { isSelected, attributes, setAttributes, className } = props;
27
+ const { formula } = attributes;
28
+ const id = uuid();
29
+
30
+ renderMathML( id );
31
+
32
+ if ( isSelected ) {
33
+ return (
34
+ <div className={ className }>
35
+ <label htmlFor={ id }>{ __( 'MathML formula:', 'mathml-block' ) }</label>
36
+ <textarea
37
+ id={ id }
38
+ className="mathml-formula"
39
+ tagname="div"
40
+ onChange={ ( event ) => {
41
+ setAttributes( { formula: event.target.value } );
42
+ } }
43
+ value={ formula }
44
+ style={ { width: '100%' } }
45
+ />
46
+ </div>
47
+ );
48
+ } else {
49
+ return (
50
+ <div
51
+ id={ id }
52
+ className="mathml-block"
53
+ >
54
+ { formula }
55
+ </div>
56
+ );
57
+ }
58
+ },
59
+
60
+ save: function save( { attributes, className } ) {
61
+ const { formula } = attributes;
62
+
63
+ return (
64
+ <div className={ className }>
65
+ { formula }
66
+ </div>
67
+ );
68
+ },
69
+ } );
70
+
71
+
src/mathml-inline.js ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { createElement, Fragment } = window.wp.element;
2
+ const { registerFormatType, toggleFormat } = window.wp.richText;
3
+ const { RichTextToolbarButton, RichTextShortcut } = window.wp.blockEditor;
4
+ const { __ } = window.wp.i18n;
5
+ import './mathml-block.css';
6
+
7
+ [
8
+ {
9
+ name: 'mathml',
10
+ title: __( 'MathML', 'mathml-block' ),
11
+ character: 'm'
12
+ },
13
+
14
+ ].forEach( ( { name, title, character } ) => {
15
+ const type = `mathml-block/${ name }`;
16
+ registerFormatType( type, {
17
+ title,
18
+ tagName: name,
19
+ className: null,
20
+ edit( { isActive, value, onChange } ) {
21
+ const onToggle = () => {
22
+ onChange( toggleFormat( value, { type } ) );
23
+ setTimeout( () => {
24
+ MathJax.Hub.Queue( [ 'Typeset', MathJax.Hub, document.getElementsByTagName( 'mathml' ) ] );
25
+ }, 100 );
26
+ };
27
+
28
+ return (
29
+ createElement( Fragment, null,
30
+ createElement( RichTextShortcut, {
31
+ type: 'primary',
32
+ character,
33
+ onUse: onToggle
34
+ } ),
35
+ createElement( RichTextToolbarButton, {
36
+ title,
37
+ onClick: onToggle,
38
+ isActive,
39
+ shortcutType: 'primary',
40
+ shortcutCharacter: character,
41
+ className: `toolbar-button-with-text toolbar-button__advanced-${ name }`
42
+ } ) )
43
+ );
44
+ }
45
+ } );
46
+ } );
vendor/MathJax/.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .DS_Store
2
+ docs/build/html-mathjax-site
vendor/MathJax/.npmignore ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ .DS_Store
2
+ docs/build/html-mathjax-site
3
+ config/local/*.js
4
+ !config/local/local.js
5
+ unpacked/config/local/*.js
6
+ !unpacked/config/local/local.js
7
+ fonts/HTML-CSS/TeX/png
vendor/MathJax/.travis.yml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+ node_js:
3
+ - stable
4
+ sudo: false
5
+ script:
6
+ - npm install
7
+ - npm test
8
+ branches:
9
+ only:
10
+ - "/^\\d+\\.\\d+/"
11
+ deploy:
12
+ provider: npm
13
+ email: manager@mathjax.org
14
+ api_key:
15
+ secure: cTkds6AqvCrkE9lAbBBjyDy7swjQEsGTCvLcjEyJemWH7ciNmtbwQ+Mzpk5bsL1i734CS29fTUBY05bPdwhBXB19yC0LzDfuNd2OKd1GhKa5OUig3d3+iNZEb/bhlEL/N2pM3pNBLT3+HDWBWVPPzDOCgSHYf355WmNlFIxrUtWbQQ7w5cX1d6ZKHVDkO0s9cl9eIQkX5aIKpsQM/N/tfkqPlF3OZuseTg7TU1wL+g6zqtsa0a1uhjXiCSRfDzgi4e2FUg9OBJHInbRho7MoZ9c8NrgCDTqwh1xJVAgi50HZpFAlhw3bBvWMzWLESLKUgmDOQc1/jzq6EhdUY1HMmryHPtvFIlyj0mWH88lZjUOqsCntG+t874ONYGkHF7I5q9VsX5LJNiZzASeXMymA1BP3fC33s/vGXen1H90JpdlGQXQvIXn6ZIQ9UiI1/bONuxVEUghnVRZHLTe2Nhy7s2s0OHTN23PmDVPHSzuM1FjEXXFaza/dGgOfi0ACRBPcqopQ2wxuCVDlmrrL+3r2o4Tp5F3f49KIrqNwO/GSnWX5H7GgxHKSh7CK1rUwqcpTumwYfY1Do/xdlu2D3I/IjZXO9TzDtZYJG1ye0BVTh44cECfBgBIZVmRH56Yjo5MvKEQwSSFfETKW4PKWoahbZIC4V99YWhoRqYqtb+OT0ow=
16
+ on:
17
+ tags: true
vendor/MathJax/MathJax.js ADDED
@@ -0,0 +1,3324 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax.js
7
+ *
8
+ * The main support code for the MathJax Hub, including the
9
+ * Ajax, Callback, Messaging, and Object-Oriented Programming
10
+ * libraries, as well as the base Jax classes, and startup
11
+ * processing code.
12
+ *
13
+ * ---------------------------------------------------------------------
14
+ *
15
+ * Copyright (c) 2009-2018 The MathJax Consortium
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an "AS IS" BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+
31
+ //
32
+ // Check if browser can support MathJax (no one fails this nowadays)
33
+ //
34
+ if (document.getElementById && document.childNodes && document.createElement) {
35
+ //
36
+ // Skip if MathJax is already loaded
37
+ //
38
+ if (!(window.MathJax && MathJax.Hub)) {
39
+
40
+ //
41
+ // Get author configuration from MathJax variable, if any
42
+ //
43
+ if (window.MathJax) {window.MathJax = {AuthorConfig: window.MathJax}}
44
+ else {window.MathJax = {}}
45
+
46
+ // MathJax.isPacked = true; // This line is uncommented by the packer.
47
+
48
+ MathJax.version = "2.7.5";
49
+ MathJax.fileversion = "2.7.5";
50
+ MathJax.cdnVersion = "2.7.5"; // specifies a revision to break caching
51
+ MathJax.cdnFileVersions = {}; // can be used to specify revisions for individual files
52
+
53
+ /**********************************************************/
54
+
55
+ (function (BASENAME) {
56
+ var BASE = window[BASENAME];
57
+ if (!BASE) {BASE = window[BASENAME] = {}}
58
+
59
+ var PROTO = []; // a static object used to indicate when a prototype is being created
60
+ var OBJECT = function (def) {
61
+ var obj = def.constructor; if (!obj) {obj = function () {}}
62
+ for (var id in def) {if (id !== 'constructor' && def.hasOwnProperty(id)) {obj[id] = def[id]}}
63
+ return obj;
64
+ };
65
+ var CONSTRUCTOR = function () {
66
+ return function () {return arguments.callee.Init.call(this,arguments)};
67
+ };
68
+
69
+ BASE.Object = OBJECT({
70
+ constructor: CONSTRUCTOR(),
71
+
72
+ Subclass: function (def,classdef) {
73
+ var obj = CONSTRUCTOR();
74
+ obj.SUPER = this; obj.Init = this.Init;
75
+ obj.Subclass = this.Subclass; obj.Augment = this.Augment;
76
+ obj.protoFunction = this.protoFunction;
77
+ obj.can = this.can; obj.has = this.has; obj.isa = this.isa;
78
+ obj.prototype = new this(PROTO);
79
+ obj.prototype.constructor = obj; // the real constructor
80
+ obj.Augment(def,classdef);
81
+ return obj;
82
+ },
83
+
84
+ Init: function (args) {
85
+ var obj = this;
86
+ if (args.length === 1 && args[0] === PROTO) {return obj}
87
+ if (!(obj instanceof args.callee)) {obj = new args.callee(PROTO)}
88
+ return obj.Init.apply(obj,args) || obj;
89
+ },
90
+
91
+ Augment: function (def,classdef) {
92
+ var id;
93
+ if (def != null) {
94
+ for (id in def) {if (def.hasOwnProperty(id)) {this.protoFunction(id,def[id])}}
95
+ // MSIE doesn't list toString even if it is not native so handle it separately
96
+ if (def.toString !== this.prototype.toString && def.toString !== {}.toString)
97
+ {this.protoFunction('toString',def.toString)}
98
+ }
99
+ if (classdef != null) {
100
+ for (id in classdef) {if (classdef.hasOwnProperty(id)) {this[id] = classdef[id]}}
101
+ }
102
+ return this;
103
+ },
104
+
105
+ protoFunction: function (id,def) {
106
+ this.prototype[id] = def;
107
+ if (typeof def === "function") {def.SUPER = this.SUPER.prototype}
108
+ },
109
+
110
+ prototype: {
111
+ Init: function () {},
112
+ SUPER: function (fn) {return fn.callee.SUPER},
113
+ can: function (method) {return typeof(this[method]) === "function"},
114
+ has: function (property) {return typeof(this[property]) !== "undefined"},
115
+ isa: function (obj) {return (obj instanceof Object) && (this instanceof obj)}
116
+ },
117
+
118
+ can: function (method) {return this.prototype.can.call(this,method)},
119
+ has: function (property) {return this.prototype.has.call(this,property)},
120
+ isa: function (obj) {
121
+ var constructor = this;
122
+ while (constructor) {
123
+ if (constructor === obj) {return true} else {constructor = constructor.SUPER}
124
+ }
125
+ return false;
126
+ },
127
+
128
+
129
+ SimpleSUPER: OBJECT({
130
+ constructor: function (def) {return this.SimpleSUPER.define(def)},
131
+
132
+ define: function (src) {
133
+ var dst = {};
134
+ if (src != null) {
135
+ for (var id in src) {if (src.hasOwnProperty(id)) {dst[id] = this.wrap(id,src[id])}}
136
+ // MSIE doesn't list toString even if it is not native so handle it separately
137
+ if (src.toString !== this.prototype.toString && src.toString !== {}.toString)
138
+ {dst.toString = this.wrap('toString',src.toString)}
139
+ }
140
+ return dst;
141
+ },
142
+
143
+ wrap: function (id,f) {
144
+ if (typeof(f) !== 'function' || !f.toString().match(/\.\s*SUPER\s*\(/)) {return f}
145
+ var fn = function () {
146
+ this.SUPER = fn.SUPER[id];
147
+ try {var result = f.apply(this,arguments)} catch (err) {delete this.SUPER; throw err}
148
+ delete this.SUPER;
149
+ return result;
150
+ }
151
+ fn.toString = function () {return f.toString.apply(f,arguments)}
152
+ return fn;
153
+ }
154
+
155
+ })
156
+ });
157
+
158
+ BASE.Object.isArray = Array.isArray || function (obj) {
159
+ return Object.prototype.toString.call(obj) === "[object Array]";
160
+ };
161
+
162
+ BASE.Object.Array = Array;
163
+
164
+ })("MathJax");
165
+
166
+ /**********************************************************/
167
+
168
+ /*
169
+ * Create a callback function from various forms of data:
170
+ *
171
+ * MathJax.Callback(fn) -- callback to a function
172
+ *
173
+ * MathJax.Callback([fn]) -- callback to function
174
+ * MathJax.Callback([fn,data...])
175
+ * -- callback to function with given data as arguments
176
+ * MathJax.Callback([object,fn])
177
+ * -- call fn with object as "this"
178
+ * MathJax.Callback([object,fn,data...])
179
+ * -- call fn with object as "this" and data as arguments
180
+ * MathJax.Callback(["method",object])
181
+ * -- call method of object wth object as "this"
182
+ * MathJax.Callback(["method",object,data...])
183
+ * -- as above, but with data as arguments to method
184
+ *
185
+ * MathJax.Callback({hook: fn, data: [...], object: this})
186
+ * -- give function, data, and object to act as "this" explicitly
187
+ *
188
+ * MathJax.Callback("code") -- callback that compiles and executes a string
189
+ *
190
+ * MathJax.Callback([...],i)
191
+ * -- use slice of array starting at i and interpret
192
+ * result as above. (Used for passing "arguments" array
193
+ * and trimming initial arguments, if any.)
194
+ */
195
+
196
+ /*
197
+ * MathJax.Callback.After([...],cb1,cb2,...)
198
+ * -- make a callback that isn't called until all the other
199
+ * ones are called first. I.e., wait for a union of
200
+ * callbacks to occur before making the given callback.
201
+ */
202
+
203
+ /*
204
+ * MathJax.Callback.Queue([callback,...])
205
+ * -- make a synchronized queue of commands that process
206
+ * sequentially, waiting for those that return uncalled
207
+ * callbacks.
208
+ */
209
+
210
+ /*
211
+ * MathJax.Callback.Signal(name)
212
+ * -- finds or creates a names signal, to which listeners
213
+ * can be attached and are signaled by messages posted
214
+ * to the signal. Responses can be asynchronous.
215
+ */
216
+
217
+ (function (BASENAME) {
218
+ var BASE = window[BASENAME];
219
+ if (!BASE) {BASE = window[BASENAME] = {}}
220
+ var isArray = BASE.Object.isArray;
221
+ //
222
+ // Create a callback from an associative array
223
+ //
224
+ var CALLBACK = function (data) {
225
+ var cb = function () {return arguments.callee.execute.apply(arguments.callee,arguments)};
226
+ for (var id in CALLBACK.prototype) {
227
+ if (CALLBACK.prototype.hasOwnProperty(id)) {
228
+ if (typeof(data[id]) !== 'undefined') {cb[id] = data[id]}
229
+ else {cb[id] = CALLBACK.prototype[id]}
230
+ }
231
+ }
232
+ cb.toString = CALLBACK.prototype.toString;
233
+ return cb;
234
+ };
235
+ CALLBACK.prototype = {
236
+ isCallback: true,
237
+ hook: function () {},
238
+ data: [],
239
+ object: window,
240
+ execute: function () {
241
+ if (!this.called || this.autoReset) {
242
+ this.called = !this.autoReset;
243
+ return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)));
244
+ }
245
+ },
246
+ reset: function () {delete this.called},
247
+ toString: function () {return this.hook.toString.apply(this.hook,arguments)}
248
+ };
249
+ var ISCALLBACK = function (f) {
250
+ return (typeof(f) === "function" && f.isCallback);
251
+ }
252
+
253
+ //
254
+ // Evaluate a string in global context
255
+ //
256
+ var EVAL = function (code) {return eval.call(window,code)}
257
+ var TESTEVAL = function () {
258
+ EVAL("var __TeSt_VaR__ = 1"); // check if it works in global context
259
+ if (window.__TeSt_VaR__) {
260
+ try { delete window.__TeSt_VaR__; } // NOTE IE9 throws when in IE7 mode
261
+ catch (error) { window.__TeSt_VaR__ = null; }
262
+ } else {
263
+ if (window.execScript) {
264
+ // IE
265
+ EVAL = function (code) {
266
+ BASE.__code = code;
267
+ code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";
268
+ window.execScript(code);
269
+ var result = BASE.__result; delete BASE.__result; delete BASE.__code;
270
+ if (result instanceof Error) {throw result}
271
+ return result;
272
+ }
273
+ } else {
274
+ // Safari2
275
+ EVAL = function (code) {
276
+ BASE.__code = code;
277
+ code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";
278
+ var head = (document.getElementsByTagName("head"))[0]; if (!head) {head = document.body}
279
+ var script = document.createElement("script");
280
+ script.appendChild(document.createTextNode(code));
281
+ head.appendChild(script); head.removeChild(script);
282
+ var result = BASE.__result; delete BASE.__result; delete BASE.__code;
283
+ if (result instanceof Error) {throw result}
284
+ return result;
285
+ }
286
+ }
287
+ }
288
+ TESTEVAL = null;
289
+ };
290
+
291
+ //
292
+ // Create a callback from various types of data
293
+ //
294
+ var USING = function (args,i) {
295
+ if (arguments.length > 1) {
296
+ if (arguments.length === 2 && !(typeof arguments[0] === 'function') &&
297
+ arguments[0] instanceof Object && typeof arguments[1] === 'number')
298
+ {args = [].slice.call(args,i)}
299
+ else {args = [].slice.call(arguments,0)}
300
+ }
301
+ if (isArray(args) && args.length === 1 && typeof(args[0]) === 'function') {args = args[0]}
302
+ if (typeof args === 'function') {
303
+ if (args.execute === CALLBACK.prototype.execute) {return args}
304
+ return CALLBACK({hook: args});
305
+ } else if (isArray(args)) {
306
+ if (typeof(args[0]) === 'string' && args[1] instanceof Object &&
307
+ typeof args[1][args[0]] === 'function') {
308
+ return CALLBACK({hook: args[1][args[0]], object: args[1], data: args.slice(2)});
309
+ } else if (typeof args[0] === 'function') {
310
+ return CALLBACK({hook: args[0], data: args.slice(1)});
311
+ } else if (typeof args[1] === 'function') {
312
+ return CALLBACK({hook: args[1], object: args[0], data: args.slice(2)});
313
+ }
314
+ } else if (typeof(args) === 'string') {
315
+ if (TESTEVAL) TESTEVAL();
316
+ return CALLBACK({hook: EVAL, data: [args]});
317
+ } else if (args instanceof Object) {
318
+ return CALLBACK(args);
319
+ } else if (typeof(args) === 'undefined') {
320
+ return CALLBACK({});
321
+ }
322
+ throw Error("Can't make callback from given data");
323
+ };
324
+
325
+ //
326
+ // Wait for a given time to elapse and then perform the callback
327
+ //
328
+ var DELAY = function (time,callback) {
329
+ callback = USING(callback);
330
+ callback.timeout = setTimeout(callback,time);
331
+ return callback;
332
+ };
333
+
334
+ //
335
+ // Callback used by AFTER, QUEUE, and SIGNAL to check if calls have completed
336
+ //
337
+ var WAITFOR = function (callback,signal) {
338
+ callback = USING(callback);
339
+ if (!callback.called) {WAITSIGNAL(callback,signal); signal.pending++}
340
+ };
341
+ var WAITEXECUTE = function () {
342
+ var signals = this.signal; delete this.signal;
343
+ this.execute = this.oldExecute; delete this.oldExecute;
344
+ var result = this.execute.apply(this,arguments);
345
+ if (ISCALLBACK(result) && !result.called) {WAITSIGNAL(result,signals)} else {
346
+ for (var i = 0, m = signals.length; i < m; i++) {
347
+ signals[i].pending--;
348
+ if (signals[i].pending <= 0) {signals[i].call()}
349
+ }
350
+ }
351
+ };
352
+ var WAITSIGNAL = function (callback,signals) {
353
+ if (!isArray(signals)) {signals = [signals]}
354
+ if (!callback.signal) {
355
+ callback.oldExecute = callback.execute;
356
+ callback.execute = WAITEXECUTE;
357
+ callback.signal = signals;
358
+ } else if (signals.length === 1) {callback.signal.push(signals[0])}
359
+ else {callback.signal = callback.signal.concat(signals)}
360
+ };
361
+
362
+ //
363
+ // Create a callback that is called when a collection of other callbacks have
364
+ // all been executed. If the callback gets called immediately (i.e., the
365
+ // others are all already called), check if it returns another callback
366
+ // and return that instead.
367
+ //
368
+ var AFTER = function (callback) {
369
+ callback = USING(callback);
370
+ callback.pending = 0;
371
+ for (var i = 1, m = arguments.length; i < m; i++)
372
+ {if (arguments[i]) {WAITFOR(arguments[i],callback)}}
373
+ if (callback.pending === 0) {
374
+ var result = callback();
375
+ if (ISCALLBACK(result)) {callback = result}
376
+ }
377
+ return callback;
378
+ };
379
+
380
+ //
381
+ // An array of prioritized hooks that are executed sequentially
382
+ // with a given set of data.
383
+ //
384
+ var HOOKS = MathJax.Object.Subclass({
385
+ //
386
+ // Initialize the array and the auto-reset status
387
+ //
388
+ Init: function (reset) {
389
+ this.hooks = [];
390
+ this.remove = []; // used when hooks are removed during execution of list
391
+ this.reset = reset;
392
+ this.running = false;
393
+ },
394
+ //
395
+ // Add a callback to the list, in priority order (default priority is 10)
396
+ //
397
+ Add: function (hook,priority) {
398
+ if (priority == null) {priority = 10}
399
+ if (!ISCALLBACK(hook)) {hook = USING(hook)}
400
+ hook.priority = priority;
401
+ var i = this.hooks.length;
402
+ while (i > 0 && priority < this.hooks[i-1].priority) {i--}
403
+ this.hooks.splice(i,0,hook);
404
+ return hook;
405
+ },
406
+ Remove: function (hook) {
407
+ for (var i = 0, m = this.hooks.length; i < m; i++) {
408
+ if (this.hooks[i] === hook) {
409
+ if (this.running) {this.remove.push(i)}
410
+ else {this.hooks.splice(i,1)}
411
+ return;
412
+ }
413
+ }
414
+ },
415
+ //
416
+ // Execute the list of callbacks, resetting them if requested.
417
+ // If any return callbacks, return a callback that will be
418
+ // executed when they all have completed.
419
+ // Remove any hooks that requested being removed during processing.
420
+ //
421
+ Execute: function () {
422
+ var callbacks = [{}];
423
+ this.running = true;
424
+ for (var i = 0, m = this.hooks.length; i < m; i++) {
425
+ if (this.reset) {this.hooks[i].reset()}
426
+ var result = this.hooks[i].apply(window,arguments);
427
+ if (ISCALLBACK(result) && !result.called) {callbacks.push(result)}
428
+ }
429
+ this.running = false;
430
+ if (this.remove.length) {this.RemovePending()}
431
+ if (callbacks.length === 1) {return null}
432
+ if (callbacks.length === 2) {return callbacks[1]}
433
+ return AFTER.apply({},callbacks);
434
+ },
435
+ //
436
+ // Remove hooks that asked to be removed during execution of list
437
+ //
438
+ RemovePending: function () {
439
+ this.remove = this.remove.sort();
440
+ for (var i = this.remove.length-1; i >= 0; i--) {this.hooks.splice(i,1)}
441
+ this.remove = [];
442
+ }
443
+
444
+ });
445
+
446
+ //
447
+ // Run an array of callbacks passing them the given data.
448
+ // (Legacy function, since this has been replaced by the HOOKS object).
449
+ //
450
+ var EXECUTEHOOKS = function (hooks,data,reset) {
451
+ if (!hooks) {return null}
452
+ if (!isArray(hooks)) {hooks = [hooks]}
453
+ if (!isArray(data)) {data = (data == null ? [] : [data])}
454
+ var handler = HOOKS(reset);
455
+ for (var i = 0, m = hooks.length; i < m; i++) {handler.Add(hooks[i])}
456
+ return handler.Execute.apply(handler,data);
457
+ };
458
+
459
+ //
460
+ // Command queue that performs commands in order, waiting when
461
+ // necessary for commands to complete asynchronousely
462
+ //
463
+ var QUEUE = BASE.Object.Subclass({
464
+ //
465
+ // Create the queue and push any commands that are specified
466
+ //
467
+ Init: function () {
468
+ this.pending = this.running = 0;
469
+ this.queue = [];
470
+ this.Push.apply(this,arguments);
471
+ },
472
+ //
473
+ // Add commands to the queue and run them. Adding a callback object
474
+ // (rather than a callback specification) queues a wait for that callback.
475
+ // Return the final callback for synchronization purposes.
476
+ //
477
+ Push: function () {
478
+ var callback;
479
+ for (var i = 0, m = arguments.length; i < m; i++) {
480
+ callback = USING(arguments[i]);
481
+ if (callback === arguments[i] && !callback.called)
482
+ {callback = USING(["wait",this,callback])}
483
+ this.queue.push(callback);
484
+ }
485
+ if (!this.running && !this.pending) {this.Process()}
486
+ return callback;
487
+ },
488
+ //
489
+ // Process the command queue if we aren't waiting on another command
490
+ //
491
+ Process: function (queue) {
492
+ while (!this.running && !this.pending && this.queue.length) {
493
+ var callback = this.queue[0];
494
+ queue = this.queue.slice(1); this.queue = [];
495
+ this.Suspend(); var result = callback(); this.Resume();
496
+ if (queue.length) {this.queue = queue.concat(this.queue)}
497
+ if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)}
498
+ }
499
+ },
500
+ //
501
+ // Suspend/Resume command processing on this queue
502
+ //
503
+ Suspend: function () {this.running++},
504
+ Resume: function () {if (this.running) {this.running--}},
505
+ //
506
+ // Used by WAITFOR to restart the queue when an action completes
507
+ //
508
+ call: function () {this.Process.apply(this,arguments)},
509
+ wait: function (callback) {return callback}
510
+ });
511
+
512
+ //
513
+ // Create a named signal that listeners can attach to, to be signaled by
514
+ // postings made to the signal. Posts are queued if they occur while one
515
+ // is already in process.
516
+ //
517
+ var SIGNAL = QUEUE.Subclass({
518
+ Init: function (name) {
519
+ QUEUE.prototype.Init.call(this);
520
+ this.name = name;
521
+ this.posted = []; // the messages posted so far
522
+ this.listeners = HOOKS(true); // those with interest in this signal
523
+ this.posting = false;
524
+ this.callback = null;
525
+ },
526
+ //
527
+ // Post a message to the signal listeners, with callback for when complete
528
+ //
529
+ Post: function (message,callback,forget) {
530
+ callback = USING(callback);
531
+ if (this.posting || this.pending) {
532
+ this.Push(["Post",this,message,callback,forget]);
533
+ } else {
534
+ this.callback = callback; callback.reset();
535
+ if (!forget) {this.posted.push(message)}
536
+ this.Suspend(); this.posting = true;
537
+ var result = this.listeners.Execute(message);
538
+ if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)}
539
+ this.Resume(); this.posting = false;
540
+ if (!this.pending) {this.call()}
541
+ }
542
+ return callback;
543
+ },
544
+ //
545
+ // Clear the post history (so new listeners won't get old messages)
546
+ //
547
+ Clear: function (callback) {
548
+ callback = USING(callback);
549
+ if (this.posting || this.pending) {
550
+ callback = this.Push(["Clear",this,callback]);
551
+ } else {
552
+ this.posted = [];
553
+ callback();
554
+ }
555
+ return callback;
556
+ },
557
+ //
558
+ // Call the callback (all replies are in) and process the command queue
559
+ //
560
+ call: function () {this.callback(this); this.Process()},
561
+
562
+ //
563
+ // A listener calls this to register interest in the signal (so it will be called
564
+ // when posts occur). If ignorePast is true, it will not be sent the post history.
565
+ //
566
+ Interest: function (callback,ignorePast,priority) {
567
+ callback = USING(callback);
568
+ this.listeners.Add(callback,priority);
569
+ if (!ignorePast) {
570
+ for (var i = 0, m = this.posted.length; i < m; i++) {
571
+ callback.reset();
572
+ var result = callback(this.posted[i]);
573
+ if (ISCALLBACK(result) && i === this.posted.length-1) {WAITFOR(result,this)}
574
+ }
575
+ }
576
+ return callback;
577
+ },
578
+ //
579
+ // A listener calls this to remove itself from a signal
580
+ //
581
+ NoInterest: function (callback) {
582
+ this.listeners.Remove(callback);
583
+ },
584
+
585
+ //
586
+ // Hook a callback to a particular message on this signal
587
+ //
588
+ MessageHook: function (msg,callback,priority) {
589
+ callback = USING(callback);
590
+ if (!this.hooks) {this.hooks = {}; this.Interest(["ExecuteHooks",this])}
591
+ if (!this.hooks[msg]) {this.hooks[msg] = HOOKS(true)}
592
+ this.hooks[msg].Add(callback,priority);
593
+ for (var i = 0, m = this.posted.length; i < m; i++)
594
+ {if (this.posted[i] == msg) {callback.reset(); callback(this.posted[i])}}
595
+ callback.msg = msg; // keep track so we can remove it
596
+ return callback;
597
+ },
598
+ //
599
+ // Execute the message hooks for the given message
600
+ //
601
+ ExecuteHooks: function (msg) {
602
+ var type = (isArray(msg) ? msg[0] : msg);
603
+ if (!this.hooks[type]) {return null}
604
+ return this.hooks[type].Execute(msg);
605
+ },
606
+ //
607
+ // Remove a hook safely
608
+ //
609
+ RemoveHook: function (hook) {
610
+ this.hooks[hook.msg].Remove(hook);
611
+ }
612
+
613
+ },{
614
+ signals: {}, // the named signals
615
+ find: function (name) {
616
+ if (!SIGNAL.signals[name]) {SIGNAL.signals[name] = new SIGNAL(name)}
617
+ return SIGNAL.signals[name];
618
+ }
619
+ });
620
+
621
+ //
622
+ // The main entry-points
623
+ //
624
+ BASE.Callback = BASE.CallBack = USING;
625
+ BASE.Callback.Delay = DELAY;
626
+ BASE.Callback.After = AFTER;
627
+ BASE.Callback.Queue = QUEUE;
628
+ BASE.Callback.Signal = SIGNAL.find;
629
+ BASE.Callback.Hooks = HOOKS;
630
+ BASE.Callback.ExecuteHooks = EXECUTEHOOKS;
631
+ })("MathJax");
632
+
633
+
634
+ /**********************************************************/
635
+
636
+ (function (BASENAME) {
637
+ var BASE = window[BASENAME];
638
+ if (!BASE) {BASE = window[BASENAME] = {}}
639
+
640
+ var isSafari2 = (navigator.vendor === "Apple Computer, Inc." &&
641
+ typeof navigator.vendorSub === "undefined");
642
+ var sheets = 0; // used by Safari2
643
+
644
+ //
645
+ // Update sheets count and look up the head object
646
+ //
647
+ var HEAD = function (head) {
648
+ if (document.styleSheets && document.styleSheets.length > sheets)
649
+ {sheets = document.styleSheets.length}
650
+ if (!head) {
651
+ head = document.head || ((document.getElementsByTagName("head"))[0]);
652
+ if (!head) {head = document.body}
653
+ }
654
+ return head;
655
+ };
656
+
657
+ //
658
+ // Remove scripts that are completed so they don't clutter up the HEAD.
659
+ // This runs via setTimeout since IE7 can't remove the script while it is running.
660
+ //
661
+ var SCRIPTS = []; // stores scripts to be removed after a delay
662
+ var REMOVESCRIPTS = function () {
663
+ for (var i = 0, m = SCRIPTS.length; i < m; i++) {BASE.Ajax.head.removeChild(SCRIPTS[i])}
664
+ SCRIPTS = [];
665
+ };
666
+
667
+ var PATH = {};
668
+ PATH[BASENAME] = ""; // empty path gets the root URL
669
+ PATH.a11y = '[MathJax]/extensions/a11y'; // a11y extensions
670
+ PATH.Contrib = "https://cdn.mathjax.org/mathjax/contrib"; // the third-party extensions
671
+
672
+ BASE.Ajax = {
673
+ loaded: {}, // files already loaded
674
+ loading: {}, // files currently in process of loading
675
+ loadHooks: {}, // hooks to call when files are loaded
676
+ timeout: 15*1000, // timeout for loading of files (15 seconds)
677
+ styleDelay: 1, // delay to use before styles are available
678
+ config: {
679
+ root: "", // URL of root directory to load from
680
+ path: PATH // paths to named URL's (e.g., [MathJax]/...)
681
+ },
682
+ params: {}, // filled in from MathJax.js?...
683
+
684
+ STATUS: {
685
+ OK: 1, // file is loading or did load OK
686
+ ERROR: -1 // file timed out during load
687
+ },
688
+
689
+ //
690
+ // Return a complete URL to a file (replacing any root names)
691
+ //
692
+ fileURL: function (file) {
693
+ var match;
694
+ while ((match = file.match(/^\[([-._a-z0-9]+)\]/i)) && PATH.hasOwnProperty(match[1])) {
695
+ file = (PATH[match[1]]||this.config.root) + file.substr(match[1].length+2);
696
+ }
697
+ return file;
698
+ },
699
+ //
700
+ // Replace root names if URL includes one
701
+ //
702
+ fileName: function (url) {
703
+ var root = this.config.root;
704
+ if (url.substr(0,root.length) === root) {url = "["+BASENAME+"]"+url.substr(root.length)}
705
+ do {
706
+ var recheck = false;
707
+ for (var id in PATH) {if (PATH.hasOwnProperty(id) && PATH[id]) {
708
+ if (url.substr(0,PATH[id].length) === PATH[id]) {
709
+ url = "["+id+"]"+url.substr(PATH[id].length);
710
+ recheck = true;
711
+ break;
712
+ }
713
+ }}
714
+ } while (recheck);
715
+ return url;
716
+ },
717
+ //
718
+ // Cache-breaking revision number for file
719
+ //
720
+ fileRev: function (file) {
721
+ var V = BASE.cdnFileVersions[file] || BASE.cdnVersion || '';
722
+ if (V) {V = "?V="+V}
723
+ return V;
724
+ },
725
+ urlRev: function (file) {return this.fileURL(file)+this.fileRev(file)},
726
+
727
+ //
728
+ // Load a file if it hasn't been already.
729
+ // Make sure the file URL is "safe"?
730
+ //
731
+ Require: function (file,callback) {
732
+ callback = BASE.Callback(callback); var type;
733
+ if (file instanceof Object) {
734
+ for (var i in file)
735
+ {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}}
736
+ } else {type = file.split(/\./).pop().toUpperCase()}
737
+ if (this.params.noContrib && file.substr(0,9) === "[Contrib]") {
738
+ callback(this.STATUS.ERROR);
739
+ } else {
740
+ file = this.fileURL(file);
741
+ // FIXME: check that URL is OK
742
+ if (this.loaded[file]) {
743
+ callback(this.loaded[file]);
744
+ } else {
745
+ var FILE = {}; FILE[type] = file;
746
+ this.Load(FILE,callback);
747
+ }
748
+ }
749
+ return callback;
750
+ },
751
+
752
+ //
753
+ // Load a file regardless of where it is and whether it has
754
+ // already been loaded.
755
+ //
756
+ Load: function (file,callback) {
757
+ callback = BASE.Callback(callback); var type;
758
+ if (file instanceof Object) {
759
+ for (var i in file)
760
+ {if (file.hasOwnProperty(i)) {type = i.toUpperCase(); file = file[i]}}
761
+ } else {type = file.split(/\./).pop().toUpperCase()}
762
+ file = this.fileURL(file);
763
+ if (this.loading[file]) {
764
+ this.addHook(file,callback);
765
+ } else {
766
+ this.head = HEAD(this.head);
767
+ if (this.loader[type]) {this.loader[type].call(this,file,callback)}
768
+ else {throw Error("Can't load files of type "+type)}
769
+ }
770
+ return callback;
771
+ },
772
+
773
+ //
774
+ // Register a load hook for a particular file (it will be called when
775
+ // loadComplete() is called for that file)
776
+ //
777
+ LoadHook: function (file,callback,priority) {
778
+ callback = BASE.Callback(callback);
779
+ if (file instanceof Object)
780
+ {for (var i in file) {if (file.hasOwnProperty(i)) {file = file[i]}}}
781
+ file = this.fileURL(file);
782
+ if (this.loaded[file]) {callback(this.loaded[file])}
783
+ else {this.addHook(file,callback,priority)}
784
+ return callback;
785
+ },
786
+ addHook: function (file,callback,priority) {
787
+ if (!this.loadHooks[file]) {this.loadHooks[file] = MathJax.Callback.Hooks()}
788
+ this.loadHooks[file].Add(callback,priority);
789
+ callback.file = file;
790
+ },
791
+ removeHook: function (hook) {
792
+ if (this.loadHooks[hook.file]) {
793
+ this.loadHooks[hook.file].Remove(hook);
794
+ if (!this.loadHooks[hook.file].hooks.length) {delete this.loadHooks[hook.file]}
795
+ }
796
+ },
797
+
798
+ //
799
+ // Used when files are combined in a preloading configuration file
800
+ //
801
+ Preloading: function () {
802
+ for (var i = 0, m = arguments.length; i < m; i++) {
803
+ var file = this.fileURL(arguments[i]);
804
+ if (!this.loading[file]) {this.loading[file] = {preloaded: true}}
805
+ }
806
+ },
807
+
808
+ //
809
+ // Code used to load the various types of files
810
+ // (JS for JavaScript, CSS for style sheets)
811
+ //
812
+ loader: {
813
+ //
814
+ // Create a SCRIPT tag to load the file
815
+ //
816
+ JS: function (file,callback) {
817
+ var name = this.fileName(file);
818
+ var script = document.createElement("script");
819
+ var timeout = BASE.Callback(["loadTimeout",this,file]);
820
+ this.loading[file] = {
821
+ callback: callback,
822
+ timeout: setTimeout(timeout,this.timeout),
823
+ status: this.STATUS.OK,
824
+ script: script
825
+ };
826
+ //
827
+ // Add this to the structure above after it is created to prevent recursion
828
+ // when loading the initial localization file (before loading message is available)
829
+ //
830
+ this.loading[file].message = BASE.Message.File(name);
831
+ script.onerror = timeout; // doesn't work in IE and no apparent substitute
832
+ script.type = "text/javascript";
833
+ script.src = file+this.fileRev(name);
834
+ this.head.appendChild(script);
835
+ },
836
+ //
837
+ // Create a LINK tag to load the style sheet
838
+ //
839
+ CSS: function (file,callback) {
840
+ var name = this.fileName(file);
841
+ var link = document.createElement("link");
842
+ link.rel = "stylesheet"; link.type = "text/css";
843
+ link.href = file+this.fileRev(name);
844
+ this.loading[file] = {
845
+ callback: callback,
846
+ message: BASE.Message.File(name),
847
+ status: this.STATUS.OK
848
+ };
849
+ this.head.appendChild(link);
850
+ this.timer.create.call(this,[this.timer.file,file],link);
851
+ }
852
+ },
853
+
854
+ //
855
+ // Timing code for checking when style sheets are available.
856
+ //
857
+ timer: {
858
+ //
859
+ // Create the timing callback and start the timing loop.
860
+ // We use a delay because some browsers need it to allow the styles
861
+ // to be processed.
862
+ //
863
+ create: function (callback,node) {
864
+ callback = BASE.Callback(callback);
865
+ if (node.nodeName === "STYLE" && node.styleSheet &&
866
+ typeof(node.styleSheet.cssText) !== 'undefined') {
867
+ callback(this.STATUS.OK); // MSIE processes style immediately, but doesn't set its styleSheet!
868
+ } else if (window.chrome && node.nodeName === "LINK") {
869
+ callback(this.STATUS.OK); // Chrome doesn't give access to cssRules for stylesheet in
870
+ // a link node, so we can't detect when it is loaded.
871
+ } else if (isSafari2) {
872
+ this.timer.start(this,[this.timer.checkSafari2,sheets++,callback],this.styleDelay);
873
+ } else {
874
+ this.timer.start(this,[this.timer.checkLength,node,callback],this.styleDelay);
875
+ }
876
+ return callback;
877
+ },
878
+ //
879
+ // Start the timer for the given callback checker
880
+ //
881
+ start: function (AJAX,check,delay,timeout) {
882
+ check = BASE.Callback(check);
883
+ check.execute = this.execute; check.time = this.time;
884
+ check.STATUS = AJAX.STATUS; check.timeout = timeout || AJAX.timeout;
885
+ check.delay = check.total = delay || 0;
886
+ if (delay) {setTimeout(check,delay)} else {check()}
887
+ },
888
+ //
889
+ // Increment the time total, increase the delay
890
+ // and test if we are past the timeout time.
891
+ //
892
+ time: function (callback) {
893
+ this.total += this.delay;
894
+ this.delay = Math.floor(this.delay * 1.05 + 5);
895
+ if (this.total >= this.timeout) {callback(this.STATUS.ERROR); return 1}
896
+ return 0;
897
+ },
898
+ //
899
+ // For JS file loads, call the proper routine according to status
900
+ //
901
+ file: function (file,status) {
902
+ if (status < 0) {BASE.Ajax.loadTimeout(file)} else {BASE.Ajax.loadComplete(file)}
903
+ },
904
+ //
905
+ // Call the hook with the required data
906
+ //
907
+ execute: function () {this.hook.call(this.object,this,this.data[0],this.data[1])},
908
+ //
909
+ // Safari2 doesn't set the link's stylesheet, so we need to look in the
910
+ // document.styleSheets array for the new sheet when it is created
911
+ //
912
+ checkSafari2: function (check,length,callback) {
913
+ if (check.time(callback)) return;
914
+ if (document.styleSheets.length > length &&
915
+ document.styleSheets[length].cssRules &&
916
+ document.styleSheets[length].cssRules.length)
917
+ {callback(check.STATUS.OK)} else {setTimeout(check,check.delay)}
918
+ },
919
+ //
920
+ // Look for the stylesheets rules and check when they are defined
921
+ // and no longer of length zero. (This assumes there actually ARE
922
+ // some rules in the stylesheet.)
923
+ //
924
+ checkLength: function (check,node,callback) {
925
+ if (check.time(callback)) return;
926
+ var isStyle = 0; var sheet = (node.sheet || node.styleSheet);
927
+ try {if ((sheet.cssRules||sheet.rules||[]).length > 0) {isStyle = 1}} catch(err) {
928
+ if (err.message.match(/protected variable|restricted URI/)) {isStyle = 1}
929
+ else if (err.message.match(/Security error/)) {
930
+ // Firefox3 gives "Security error" for missing files, so
931
+ // can't distinguish that from OK files on remote servers.
932
+ // or OK files in different directory from local files.
933
+ isStyle = 1; // just say it is OK (can't really tell)
934
+ }
935
+ }
936
+ if (isStyle) {
937
+ // Opera 9.6 requires this setTimeout
938
+ setTimeout(BASE.Callback([callback,check.STATUS.OK]),0);
939
+ } else {
940
+ setTimeout(check,check.delay);
941
+ }
942
+ }
943
+ },
944
+
945
+ //
946
+ // JavaScript code must call this when they are completely initialized
947
+ // (this allows them to perform asynchronous actions before indicating
948
+ // that they are complete).
949
+ //
950
+ loadComplete: function (file) {
951
+ file = this.fileURL(file);
952
+ var loading = this.loading[file];
953
+ if (loading && !loading.preloaded) {
954
+ BASE.Message.Clear(loading.message);
955
+ clearTimeout(loading.timeout);
956
+ if (loading.script) {
957
+ if (SCRIPTS.length === 0) {setTimeout(REMOVESCRIPTS,0)}
958
+ SCRIPTS.push(loading.script);
959
+ }
960
+ this.loaded[file] = loading.status; delete this.loading[file];
961
+ this.addHook(file,loading.callback);
962
+ } else {
963
+ if (loading) {delete this.loading[file]}
964
+ this.loaded[file] = this.STATUS.OK;
965
+ loading = {status: this.STATUS.OK}
966
+ }
967
+ if (!this.loadHooks[file]) {return null}
968
+ return this.loadHooks[file].Execute(loading.status);
969
+ },
970
+
971
+ //
972
+ // If a file fails to load within the timeout period (or the onerror handler
973
+ // is called), this routine runs to signal the error condition.
974
+ //
975
+ loadTimeout: function (file) {
976
+ if (this.loading[file].timeout) {clearTimeout(this.loading[file].timeout)}
977
+ this.loading[file].status = this.STATUS.ERROR;
978
+ this.loadError(file);
979
+ this.loadComplete(file);
980
+ },
981
+
982
+ //
983
+ // The default error hook for file load failures
984
+ //
985
+ loadError: function (file) {
986
+ BASE.Message.Set(["LoadFailed","File failed to load: %1",file],null,2000);
987
+ BASE.Hub.signal.Post(["file load error",file]);
988
+ },
989
+
990
+ //
991
+ // Defines a style sheet from a hash of style declarations (key:value pairs
992
+ // where the key is the style selector and the value is a hash of CSS attributes
993
+ // and values).
994
+ //
995
+ Styles: function (styles,callback) {
996
+ var styleString = this.StyleString(styles);
997
+ if (styleString === "") {
998
+ callback = BASE.Callback(callback);
999
+ callback();
1000
+ } else {
1001
+ var style = document.createElement("style"); style.type = "text/css";
1002
+ this.head = HEAD(this.head);
1003
+ this.head.appendChild(style);
1004
+ if (style.styleSheet && typeof(style.styleSheet.cssText) !== 'undefined') {
1005
+ style.styleSheet.cssText = styleString;
1006
+ } else {
1007
+ style.appendChild(document.createTextNode(styleString));
1008
+ }
1009
+ callback = this.timer.create.call(this,callback,style);
1010
+ }
1011
+ return callback;
1012
+ },
1013
+
1014
+ //
1015
+ // Create a stylesheet string from a style declaration object
1016
+ //
1017
+ StyleString: function (styles) {
1018
+ if (typeof(styles) === 'string') {return styles}
1019
+ var string = "", id, style;
1020
+ for (id in styles) {if (styles.hasOwnProperty(id)) {
1021
+ if (typeof styles[id] === 'string') {
1022
+ string += id + " {"+styles[id]+"}\n";
1023
+ } else if (BASE.Object.isArray(styles[id])) {
1024
+ for (var i = 0; i < styles[id].length; i++) {
1025
+ style = {}; style[id] = styles[id][i];
1026
+ string += this.StyleString(style);
1027
+ }
1028
+ } else if (id.substr(0,6) === '@media') {
1029
+ string += id + " {"+this.StyleString(styles[id])+"}\n";
1030
+ } else if (styles[id] != null) {
1031
+ style = [];
1032
+ for (var name in styles[id]) {if (styles[id].hasOwnProperty(name)) {
1033
+ if (styles[id][name] != null)
1034
+ {style[style.length] = name + ': ' + styles[id][name]}
1035
+ }}
1036
+ string += id +" {"+style.join('; ')+"}\n";
1037
+ }
1038
+ }}
1039
+ return string;
1040
+ }
1041
+ };
1042
+
1043
+ })("MathJax");
1044
+
1045
+ /**********************************************************/
1046
+
1047
+ MathJax.HTML = {
1048
+ //
1049
+ // Create an HTML element with given attributes and content.
1050
+ // The def parameter is an (optional) object containing key:value pairs
1051
+ // of the attributes and their values, and contents is an (optional)
1052
+ // array of strings to be inserted as text, or arrays of the form
1053
+ // [type,def,contents] that describes an HTML element to be inserted
1054
+ // into the current element. Thus the contents can describe a complete
1055
+ // HTML snippet of arbitrary complexity. E.g.:
1056
+ //
1057
+ // MathJax.HTML.Element("span",{id:"mySpan",style{"font-style":"italic"}},[
1058
+ // "(See the ",["a",{href:"http://www.mathjax.org"},["MathJax home page"]],
1059
+ // " for more details.)"]);
1060
+ //
1061
+ Element: function (type,def,contents) {
1062
+ var obj = document.createElement(type), id;
1063
+ if (def) {
1064
+ if (def.hasOwnProperty("style")) {
1065
+ var style = def.style; def.style = {};
1066
+ for (id in style) {if (style.hasOwnProperty(id))
1067
+ {def.style[id.replace(/-([a-z])/g,this.ucMatch)] = style[id]}}
1068
+ }
1069
+ MathJax.Hub.Insert(obj,def);
1070
+ for (id in def) {
1071
+ if (id === "role" || id.substr(0,5) === "aria-") obj.setAttribute(id,def[id]);
1072
+ }
1073
+ }
1074
+ if (contents) {
1075
+ if (!MathJax.Object.isArray(contents)) {contents = [contents]}
1076
+ for (var i = 0, m = contents.length; i < m; i++) {
1077
+ if (MathJax.Object.isArray(contents[i])) {
1078
+ obj.appendChild(this.Element(contents[i][0],contents[i][1],contents[i][2]));
1079
+ } else if (type === "script") { // IE throws an error if script is added as a text node
1080
+ this.setScript(obj, contents[i]);
1081
+ } else {
1082
+ obj.appendChild(document.createTextNode(contents[i]));
1083
+ }
1084
+ }
1085
+ }
1086
+ return obj;
1087
+ },
1088
+ ucMatch: function (match,c) {return c.toUpperCase()},
1089
+ addElement: function (span,type,def,contents) {return span.appendChild(this.Element(type,def,contents))},
1090
+ TextNode: function (text) {return document.createTextNode(text)},
1091
+ addText: function (span,text) {return span.appendChild(this.TextNode(text))},
1092
+
1093
+ //
1094
+ // Set and get the text of a script
1095
+ //
1096
+ setScript: function (script,text) {
1097
+ if (this.setScriptBug) {script.text = text} else {
1098
+ while (script.firstChild) {script.removeChild(script.firstChild)}
1099
+ this.addText(script,text);
1100
+ }
1101
+ },
1102
+ getScript: function (script) {
1103
+ var text = (script.text === "" ? script.innerHTML : script.text);
1104
+ return text.replace(/^\s+/,"").replace(/\s+$/,"");
1105
+ },
1106
+
1107
+ //
1108
+ // Manage cookies
1109
+ //
1110
+ Cookie: {
1111
+ prefix: "mjx",
1112
+ expires: 365,
1113
+
1114
+ //
1115
+ // Save an object as a named cookie
1116
+ //
1117
+ Set: function (name,def) {
1118
+ var keys = [];
1119
+ if (def) {
1120
+ for (var id in def) {if (def.hasOwnProperty(id)) {
1121
+ keys.push(id+":"+def[id].toString().replace(/&/g,"&&"));
1122
+ }}
1123
+ }
1124
+ var cookie = this.prefix+"."+name+"="+escape(keys.join('&;'));
1125
+ if (this.expires) {
1126
+ var time = new Date(); time.setDate(time.getDate() + this.expires);
1127
+ cookie += '; expires='+time.toGMTString();
1128
+ }
1129
+ try {document.cookie = cookie+"; path=/"} catch (err) {} // ignore errors saving cookies
1130
+ },
1131
+
1132
+ //
1133
+ // Get the contents of a named cookie and incorporate
1134
+ // it into the given object (or return a fresh one)
1135
+ //
1136
+ Get: function (name,obj) {
1137
+ if (!obj) {obj = {}}
1138
+ var pattern = new RegExp("(?:^|;\\s*)"+this.prefix+"\\."+name+"=([^;]*)(?:;|$)");
1139
+ var match;
1140
+ try {match = pattern.exec(document.cookie)} catch (err) {}; // ignore errors reading cookies
1141
+ if (match && match[1] !== "") {
1142
+ var keys = unescape(match[1]).split('&;');
1143
+ for (var i = 0, m = keys.length; i < m; i++) {
1144
+ match = keys[i].match(/([^:]+):(.*)/);
1145
+ var value = match[2].replace(/&&/g,'&');
1146
+ if (value === "true") {value = true} else if (value === "false") {value = false}
1147
+ else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)}
1148
+ obj[match[1]] = value;
1149
+ }
1150
+ }
1151
+ return obj;
1152
+ }
1153
+ }
1154
+
1155
+ };
1156
+
1157
+
1158
+ /**********************************************************/
1159
+
1160
+ MathJax.Localization = {
1161
+
1162
+ locale: "en",
1163
+ directory: "[MathJax]/localization",
1164
+ strings: {
1165
+ // Currently, this list is not modified by the MathJax-i18n script. You can
1166
+ // run the following command in MathJax/unpacked/localization to update it:
1167
+ //
1168
+ // find . -name "*.js" | xargs grep menuTitle\: | grep -v qqq | sed 's/^\.\/\(.*\)\/.*\.js\: / "\1"\: \{/' | sed 's/,$/\},/' | sed 's/"English"/"English", isLoaded: true/' > tmp ; sort tmp > tmp2 ; sed '$ s/,$//' tmp2 ; rm tmp*
1169
+ //
1170
+ // This only takes languages with localization data so you must also add
1171
+ // the languages that use a remap but are not translated at all.
1172
+ //
1173
+ "ar": {menuTitle: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629"},
1174
+ "ast": {menuTitle: "asturianu"},
1175
+ "bg": {menuTitle: "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"},
1176
+ "bcc": {menuTitle: "\u0628\u0644\u0648\u0686\u06CC"},
1177
+ "br": {menuTitle: "brezhoneg"},
1178
+ "ca": {menuTitle: "catal\u00E0"},
1179
+ "cdo": {menuTitle: "M\u00ECng-d\u0115\u0324ng-ng\u1E73\u0304"},
1180
+ "cs": {menuTitle: "\u010De\u0161tina"},
1181
+ "da": {menuTitle: "dansk"},
1182
+ "de": {menuTitle: "Deutsch"},
1183
+ "diq": {menuTitle: "Zazaki"},
1184
+ "en": {menuTitle: "English", isLoaded: true},
1185
+ "eo": {menuTitle: "Esperanto"},
1186
+ "es": {menuTitle: "espa\u00F1ol"},
1187
+ "fa": {menuTitle: "\u0641\u0627\u0631\u0633\u06CC"},
1188
+ "fi": {menuTitle: "suomi"},
1189
+ "fr": {menuTitle: "fran\u00E7ais"},
1190
+ "gl": {menuTitle: "galego"},
1191
+ "he": {menuTitle: "\u05E2\u05D1\u05E8\u05D9\u05EA"},
1192
+ "ia": {menuTitle: "interlingua"},
1193
+ "it": {menuTitle: "italiano"},
1194
+ "ja": {menuTitle: "\u65E5\u672C\u8A9E"},
1195
+ "kn": {menuTitle: "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1"},
1196
+ "ko": {menuTitle: "\uD55C\uAD6D\uC5B4"},
1197
+ "lb": {menuTitle: "L\u00EBtzebuergesch"},
1198
+ "lki": {menuTitle: "\u0644\u06D5\u06A9\u06CC"},
1199
+ "lt": {menuTitle: "lietuvi\u0173"},
1200
+ "mk": {menuTitle: "\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438"},
1201
+ "nl": {menuTitle: "Nederlands"},
1202
+ "oc": {menuTitle: "occitan"},
1203
+ "pl": {menuTitle: "polski"},
1204
+ "pt": {menuTitle: "portugu\u00EAs"},
1205
+ "pt-br": {menuTitle: "portugu\u00EAs do Brasil"},
1206
+ "ru": {menuTitle: "\u0440\u0443\u0441\u0441\u043A\u0438\u0439"},
1207
+ "sco": {menuTitle: "Scots"},
1208
+ "scn": {menuTitle: "sicilianu"},
1209
+ "sk": {menuTitle: "sloven\u010Dina"},
1210
+ "sl": {menuTitle: "sloven\u0161\u010Dina"},
1211
+ "sv": {menuTitle: "svenska"},
1212
+ "th": {menuTitle: "\u0E44\u0E17\u0E22"},
1213
+ "tr": {menuTitle: "T\u00FCrk\u00E7e"},
1214
+ "uk": {menuTitle: "\u0443\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},
1215
+ "vi": {menuTitle: "Ti\u1EBFng Vi\u1EC7t"},
1216
+ "zh-hans": {menuTitle: "\u4E2D\u6587\uFF08\u7B80\u4F53\uFF09"},
1217
+ "zh-hant": {menuTitle: "\u6C49\u8BED"}
1218
+ },
1219
+
1220
+ //
1221
+ // The pattern for substitution escapes:
1222
+ // %n or %{n} or %{plural:%n|option1|option1|...} or %c
1223
+ //
1224
+ pattern: /%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g,
1225
+
1226
+ SPLIT: ("axb".split(/(x)/).length === 3 ?
1227
+ function (string,regex) {return string.split(regex)} :
1228
+ //
1229
+ // IE8 and below don't do split() correctly when the pattern includes
1230
+ // parentheses (the split should include the matched exrepssions).
1231
+ // So implement it by hand here.
1232
+ //
1233
+ function (string,regex) {
1234
+ var result = [], match, last = 0;
1235
+ regex.lastIndex = 0;
1236
+ while ((match = regex.exec(string))) {
1237
+ result.push(string.substr(last,match.index-last));
1238
+ result.push.apply(result,match.slice(1));
1239
+ last = match.index + match[0].length;
1240
+ }
1241
+ result.push(string.substr(last));
1242
+ return result;
1243
+ }),
1244
+
1245
+ _: function (id,phrase) {
1246
+ if (MathJax.Object.isArray(phrase)) {return this.processSnippet(id,phrase)}
1247
+ return this.processString(this.lookupPhrase(id,phrase),[].slice.call(arguments,2));
1248
+ },
1249
+
1250
+ processString: function (string,args,domain) {
1251
+ //
1252
+ // Process arguments for substitution
1253
+ // If the argument is a snippet (and we are processing snippets) do so,
1254
+ // Otherwise, if it is a number, convert it for the lacale
1255
+ //
1256
+ var i, m, isArray = MathJax.Object.isArray;
1257
+ for (i = 0, m = args.length; i < m; i++) {
1258
+ if (domain && isArray(args[i])) {args[i] = this.processSnippet(domain,args[i])}
1259
+ }
1260
+ //
1261
+ // Split string at escapes and process them individually
1262
+ //
1263
+ var parts = this.SPLIT(string,this.pattern);
1264
+ for (i = 1, m = parts.length; i < m; i += 2) {
1265
+ var c = parts[i].charAt(0); // first char will be { or \d or a char to be kept literally
1266
+ if (c >= "0" && c <= "9") { // %n
1267
+ parts[i] = args[parts[i]-1];
1268
+ if (typeof parts[i] === "number") parts[i] = this.number(parts[i]);
1269
+ } else if (c === "{") { // %{n} or %{plural:%n|...}
1270
+ c = parts[i].substr(1);
1271
+ if (c >= "0" && c <= "9") { // %{n}
1272
+ parts[i] = args[parts[i].substr(1,parts[i].length-2)-1];
1273
+ if (typeof parts[i] === "number") parts[i] = this.number(parts[i]);
1274
+ } else { // %{plural:%n|...}
1275
+ var match = parts[i].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/);
1276
+ if (match) {
1277
+ if (match[1] === "plural") {
1278
+ var n = args[match[2]-1];
1279
+ if (typeof n === "undefined") {
1280
+ parts[i] = "???"; // argument doesn't exist
1281
+ } else {
1282
+ n = this.plural(n) - 1; // index of the form to use
1283
+ var plurals = match[3].replace(/(^|[^%])(%%)*%\|/g,"$1$2%\uEFEF").split(/\|/); // the parts (replacing %| with a special character)
1284
+ if (n >= 0 && n < plurals.length) {
1285
+ parts[i] = this.processString(plurals[n].replace(/\uEFEF/g,"|"),args,domain);
1286
+ } else {
1287
+ parts[i] = "???"; // no string for this index
1288
+ }
1289
+ }
1290
+ } else {parts[i] = "%"+parts[i]} // not "plural", put back the % and leave unchanged
1291
+ }
1292
+ }
1293
+ }
1294
+ if (parts[i] == null) {parts[i] = "???"}
1295
+ }
1296
+ //
1297
+ // If we are not forming a snippet, return the completed string
1298
+ //
1299
+ if (!domain) {return parts.join("")}
1300
+ //
1301
+ // We need to return an HTML snippet, so buld it from the
1302
+ // broken up string with inserted parts (that could be snippets)
1303
+ //
1304
+ var snippet = [], part = "";
1305
+ for (i = 0; i < m; i++) {
1306
+ part += parts[i]; i++; // add the string and move on to substitution result
1307
+ if (i < m) {
1308
+ if (isArray(parts[i])) { // substitution was a snippet
1309
+ snippet.push(part); // add the accumulated string
1310
+ snippet = snippet.concat(parts[i]); // concatenate the substution snippet
1311
+ part = ""; // start accumulating a new string
1312
+ } else { // substitution was a string
1313
+ part += parts[i]; // add to accumulating string
1314
+ }
1315
+ }
1316
+ }
1317
+ if (part !== "") {snippet.push(part)} // add final string
1318
+ return snippet;
1319
+ },
1320
+
1321
+ processSnippet: function (domain,snippet) {
1322
+ var result = []; // the new snippet
1323
+ //
1324
+ // Look through the original snippet for
1325
+ // strings or snippets to translate
1326
+ //
1327
+ for (var i = 0, m = snippet.length; i < m; i++) {
1328
+ if (MathJax.Object.isArray(snippet[i])) {
1329
+ //
1330
+ // This could be a sub-snippet:
1331
+ // ["tag"] or ["tag",{properties}] or ["tag",{properties},snippet]
1332
+ // Or it could be something to translate:
1333
+ // [id,string,args] or [domain,snippet]
1334
+ var data = snippet[i];
1335
+ if (typeof data[1] === "string") { // [id,string,args]
1336
+ var id = data[0]; if (!MathJax.Object.isArray(id)) {id = [domain,id]}
1337
+ var phrase = this.lookupPhrase(id,data[1]);
1338
+ result = result.concat(this.processMarkdown(phrase,data.slice(2),domain));
1339
+ } else if (MathJax.Object.isArray(data[1])) { // [domain,snippet]
1340
+ result = result.concat(this.processSnippet.apply(this,data));
1341
+ } else if (data.length >= 3) { // ["tag",{properties},snippet]
1342
+ result.push([data[0],data[1],this.processSnippet(domain,data[2])]);
1343
+ } else { // ["tag"] or ["tag",{properties}]
1344
+ result.push(snippet[i]);
1345
+ }
1346
+ } else { // a string
1347
+ result.push(snippet[i]);
1348
+ }
1349
+ }
1350
+ return result;
1351
+ },
1352
+
1353
+ markdownPattern: /(%.)|(\*{1,3})((?:%.|.)+?)\2|(`+)((?:%.|.)+?)\4|\[((?:%.|.)+?)\]\(([^\s\)]+)\)/,
1354
+ // %c or *bold*, **italics**, ***bold-italics***, or `code`, or [link](url)
1355
+
1356
+ processMarkdown: function (phrase,args,domain) {
1357
+ var result = [], data;
1358
+ //
1359
+ // Split the string by the Markdown pattern
1360
+ // (the text blocks are separated by
1361
+ // c,stars,star-text,backtics,code-text,link-text,URL).
1362
+ // Start with the first text string from the split.
1363
+ //
1364
+ var parts = phrase.split(this.markdownPattern);
1365
+ var string = parts[0];
1366
+ //
1367
+ // Loop through the matches and process them
1368
+ //
1369
+ for (var i = 1, m = parts.length; i < m; i += 8) {
1370
+ if (parts[i+1]) { // stars (for bold/italic)
1371
+ //
1372
+ // Select the tag to use by number of stars (three stars requires two tags)
1373
+ //
1374
+ data = this.processString(parts[i+2],args,domain);
1375
+ if (!MathJax.Object.isArray(data)) {data = [data]}
1376
+ data = [["b","i","i"][parts[i+1].length-1],{},data]; // number of stars determines type
1377
+ if (parts[i+1].length === 3) {data = ["b",{},data]} // bold-italic
1378
+ } else if (parts[i+3]) { // backtics (for code)
1379
+ //
1380
+ // Remove one leading or trailing space, and process substitutions
1381
+ // Make a <code> tag
1382
+ //
1383
+ data = this.processString(parts[i+4].replace(/^\s/,"").replace(/\s$/,""),args,domain);
1384
+ if (!MathJax.Object.isArray(data)) {data = [data]}
1385
+ data = ["code",{},data];
1386
+ } else if (parts[i+5]) { // hyperlink
1387
+ //
1388
+ // Process the link text, and make an <a> tag with the URL
1389
+ //
1390
+ data = this.processString(parts[i+5],args,domain);
1391
+ if (!MathJax.Object.isArray(data)) {data = [data]}
1392
+ data = ["a",{href:this.processString(parts[i+6],args),target:"_blank"},data];
1393
+ } else {
1394
+ //
1395
+ // Escaped character (%c) gets added into the string.
1396
+ //
1397
+ string += parts[i]; data = null;
1398
+ }
1399
+ //
1400
+ // If there is a tag to insert,
1401
+ // Add any pending string, then push the tag
1402
+ //
1403
+ if (data) {
1404
+ result = this.concatString(result,string,args,domain);
1405
+ result.push(data); string = "";
1406
+ }
1407
+ //
1408
+ // Process the string that follows matches pattern
1409
+ //
1410
+ if (parts[i+7] !== "") {string += parts[i+7]}
1411
+ };
1412
+ //
1413
+ // Add any pending string and return the resulting snippet
1414
+ //
1415
+ result = this.concatString(result,string,args,domain);
1416
+ return result;
1417
+ },
1418
+ concatString: function (result,string,args,domain) {
1419
+ if (string != "") {
1420
+ //
1421
+ // Process the substutions.
1422
+ // If the result is not a snippet, turn it into one.
1423
+ // Then concatenate the snippet to the current one
1424
+ //
1425
+ string = this.processString(string,args,domain);
1426
+ if (!MathJax.Object.isArray(string)) {string = [string]}
1427
+ result = result.concat(string);
1428
+ }
1429
+ return result;
1430
+ },
1431
+
1432
+ lookupPhrase: function (id,phrase,domain) {
1433
+ //
1434
+ // Get the domain and messageID
1435
+ //
1436
+ if (!domain) {domain = "_"}
1437
+ if (MathJax.Object.isArray(id)) {domain = (id[0] || "_"); id = (id[1] || "")}
1438
+ //
1439
+ // Check if the data is available and if not,
1440
+ // load it and throw a restart error so the calling
1441
+ // code can wait for the load and try again.
1442
+ //
1443
+ var load = this.loadDomain(domain);
1444
+ if (load) {MathJax.Hub.RestartAfter(load)}
1445
+ //
1446
+ // Look up the message in the localization data
1447
+ // (if not found, the original English is used)
1448
+ //
1449
+ var localeData = this.strings[this.locale];
1450
+ if (localeData) {
1451
+ if (localeData.domains && domain in localeData.domains) {
1452
+ var domainData = localeData.domains[domain];
1453
+ if (domainData.strings && id in domainData.strings)
1454
+ {phrase = domainData.strings[id]}
1455
+ }
1456
+ }
1457
+ //
1458
+ // return the translated phrase
1459
+ //
1460
+ return phrase;
1461
+ },
1462
+
1463
+ //
1464
+ // Load a langauge data file from the proper
1465
+ // directory and file.
1466
+ //
1467
+ loadFile: function (file,data,callback) {
1468
+ callback = MathJax.Callback(callback);
1469
+ file = (data.file || file); // the data's file name or the default name
1470
+ if (!file.match(/\.js$/)) {file += ".js"} // add .js if needed
1471
+ //
1472
+ // Add the directory if the file doesn't
1473
+ // contain a full URL already.
1474
+ //
1475
+ if (!file.match(/^([a-z]+:|\[MathJax\])/)) {
1476
+ var dir = (this.strings[this.locale].directory ||
1477
+ this.directory + "/" + this.locale ||
1478
+ "[MathJax]/localization/" + this.locale);
1479
+ file = dir + "/" + file;
1480
+ }
1481
+ //
1482
+ // Load the file and mark the data as loaded (even if it
1483
+ // failed to load, so we don't continue to try to load it
1484
+ // over and over).
1485
+ //
1486
+ var load = MathJax.Ajax.Require(file,function () {data.isLoaded = true; return callback()});
1487
+ //
1488
+ // Return the callback if needed, otherwise null.
1489
+ //
1490
+ return (load.called ? null : load);
1491
+ },
1492
+
1493
+ //
1494
+ // Check to see if the localization data are loaded
1495
+ // for the given domain; if not, load the data file,
1496
+ // and return a callback for the loading operation.
1497
+ // Otherwise return null (data are loaded).
1498
+ //
1499
+ loadDomain: function (domain,callback) {
1500
+ var load, localeData = this.strings[this.locale];
1501
+ if (localeData) {
1502
+ if (!localeData.isLoaded) {
1503
+ load = this.loadFile(this.locale,localeData);
1504
+ if (load) {
1505
+ return MathJax.Callback.Queue(
1506
+ load,["loadDomain",this,domain] // call again to load domain
1507
+ ).Push(callback||{});
1508
+ }
1509
+ }
1510
+ if (localeData.domains && domain in localeData.domains) {
1511
+ var domainData = localeData.domains[domain];
1512
+ if (!domainData.isLoaded) {
1513
+ load = this.loadFile(domain,domainData);
1514
+ if (load) {return MathJax.Callback.Queue(load).Push(callback)}
1515
+ }
1516
+ }
1517
+ }
1518
+ // localization data are loaded, so just do the callback
1519
+ return MathJax.Callback(callback)();
1520
+ },
1521
+
1522
+ //
1523
+ // Perform a function, properly handling
1524
+ // restarts due to localization file loads.
1525
+ //
1526
+ // Note that this may return before the function
1527
+ // has been called successfully, so you should
1528
+ // consider fn as running asynchronously. (Callbacks
1529
+ // can be used to synchronize it with other actions.)
1530
+ //
1531
+ Try: function (fn) {
1532
+ fn = MathJax.Callback(fn); fn.autoReset = true;
1533
+ try {fn()} catch (err) {
1534
+ if (!err.restart) {throw err}
1535
+ MathJax.Callback.After(["Try",this,fn],err.restart);
1536
+ }
1537
+ },
1538
+
1539
+ //
1540
+ // Reset the current language
1541
+ //
1542
+ resetLocale: function(locale) {
1543
+ // Selection algorithm:
1544
+ // 1) Downcase locale name (e.g. "en-US" => "en-us")
1545
+ // 2) Try a parent language (e.g. "en-us" => "en")
1546
+ // 3) Try the fallback specified in the data (e.g. "pt" => "pt-br")
1547
+ // 4) Otherwise don't change the locale.
1548
+ if (!locale) return;
1549
+ locale = locale.toLowerCase();
1550
+ while (!this.strings[locale]) {
1551
+ var dashPos = locale.lastIndexOf("-");
1552
+ if (dashPos === -1) return;
1553
+ locale = locale.substring(0, dashPos);
1554
+ }
1555
+ var remap = this.strings[locale].remap;
1556
+ this.locale = remap ? remap : locale;
1557
+ MathJax.Callback.Signal("Hub").Post(["Locale Reset", this.locale]);
1558
+ },
1559
+
1560
+ //
1561
+ // Set the current language
1562
+ //
1563
+ setLocale: function(locale) {
1564
+ this.resetLocale(locale);
1565
+ if (MathJax.Menu) {this.loadDomain("MathMenu")}
1566
+ },
1567
+
1568
+ //
1569
+ // Add or update a language or domain
1570
+ //
1571
+ addTranslation: function (locale,domain,definition) {
1572
+ var data = this.strings[locale], isNew = false;
1573
+ if (!data) {data = this.strings[locale] = {}; isNew = true}
1574
+ if (!data.domains) {data.domains = {}}
1575
+ if (domain) {
1576
+ if (!data.domains[domain]) {data.domains[domain] = {}}
1577
+ data = data.domains[domain];
1578
+ }
1579
+ MathJax.Hub.Insert(data,definition);
1580
+ if (isNew && MathJax.Menu.menu) {MathJax.Menu.CreateLocaleMenu()}
1581
+ },
1582
+
1583
+ //
1584
+ // Set CSS for an element based on font requirements
1585
+ //
1586
+ setCSS: function (div) {
1587
+ var locale = this.strings[this.locale];
1588
+ if (locale) {
1589
+ if (locale.fontFamily) {div.style.fontFamily = locale.fontFamily}
1590
+ if (locale.fontDirection) {
1591
+ div.style.direction = locale.fontDirection;
1592
+ if (locale.fontDirection === "rtl") {div.style.textAlign = "right"}
1593
+ }
1594
+ }
1595
+ return div;
1596
+ },
1597
+
1598
+ //
1599
+ // Get the language's font family or direction
1600
+ //
1601
+ fontFamily: function () {
1602
+ var locale = this.strings[this.locale];
1603
+ return (locale ? locale.fontFamily : null);
1604
+ },
1605
+ fontDirection: function () {
1606
+ var locale = this.strings[this.locale];
1607
+ return (locale ? locale.fontDirection : null);
1608
+ },
1609
+
1610
+ //
1611
+ // Get the language's plural index for a number
1612
+ //
1613
+ plural: function (n) {
1614
+ var locale = this.strings[this.locale];
1615
+ if (locale && locale.plural) {return locale.plural(n)}
1616
+ // default
1617
+ if (n == 1) {return 1} // one
1618
+ return 2; // other
1619
+ },
1620
+
1621
+ //
1622
+ // Convert a number to language-specific form
1623
+ //
1624
+ number: function(n) {
1625
+ var locale = this.strings[this.locale];
1626
+ if (locale && locale.number) {return locale.number(n)}
1627
+ // default
1628
+ return n;
1629
+ }
1630
+ };
1631
+
1632
+
1633
+ /**********************************************************/
1634
+
1635
+ MathJax.Message = {
1636
+ ready: false, // used to tell when the styles are available
1637
+ log: [{}], current: null,
1638
+ textNodeBug: (navigator.vendor === "Apple Computer, Inc." &&
1639
+ typeof navigator.vendorSub === "undefined") ||
1640
+ (window.hasOwnProperty && window.hasOwnProperty("konqueror")), // Konqueror displays some gibberish with text.nodeValue = "..."
1641
+
1642
+ styles: {
1643
+ "#MathJax_Message": {
1644
+ position: "fixed", left: "1px", bottom: "2px",
1645
+ 'background-color': "#E6E6E6", border: "1px solid #959595",
1646
+ margin: "0px", padding: "2px 8px",
1647
+ 'z-index': "102", color: "black", 'font-size': "80%",
1648
+ width: "auto", 'white-space': "nowrap"
1649
+ },
1650
+
1651
+ "#MathJax_MSIE_Frame": {
1652
+ position: "absolute",
1653
+ top:0, left: 0, width: "0px", 'z-index': 101,
1654
+ border: "0px", margin: "0px", padding: "0px"
1655
+ }
1656
+ },
1657
+
1658
+ browsers: {
1659
+ MSIE: function (browser) {
1660
+ MathJax.Message.msieFixedPositionBug = ((document.documentMode||0) < 7);
1661
+ if (MathJax.Message.msieFixedPositionBug)
1662
+ {MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute"}
1663
+ MathJax.Message.quirks = (document.compatMode === "BackCompat");
1664
+ },
1665
+ Chrome: function (browser) {
1666
+ MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em";
1667
+ MathJax.Hub.config.styles["#MathJax_Message"].left = "1em";
1668
+ }
1669
+ },
1670
+
1671
+ Init: function (styles) {
1672
+ if (styles) {this.ready = true}
1673
+ if (!document.body || !this.ready) {return false}
1674
+ //
1675
+ // ASCIIMathML replaces the entire page with a copy of itself (@#!#%@!!)
1676
+ // so check that this.div is still part of the page, otherwise look up
1677
+ // the copy and use that.
1678
+ //
1679
+ if (this.div && this.div.parentNode == null) {
1680
+ this.div = document.getElementById("MathJax_Message");
1681
+ this.text = (this.div ? this.div.firstChild : null);
1682
+ }
1683
+ if (!this.div) {
1684
+ var frame = document.body;
1685
+ if (this.msieFixedPositionBug && window.attachEvent) {
1686
+ frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id");
1687
+ frame.style.position = "absolute";
1688
+ frame.style.border = frame.style.margin = frame.style.padding = "0px";
1689
+ frame.style.zIndex = "101"; frame.style.height = "0px";
1690
+ frame = this.addDiv(frame);
1691
+ frame.id = "MathJax_MSIE_Frame";
1692
+ window.attachEvent("onscroll",this.MoveFrame);
1693
+ window.attachEvent("onresize",this.MoveFrame);
1694
+ this.MoveFrame();
1695
+ }
1696
+ this.div = this.addDiv(frame); this.div.style.display = "none";
1697
+ }
1698
+ if (!this.text) {
1699
+ this.text = this.div.appendChild(document.createTextNode(""));
1700
+ }
1701
+ return true;
1702
+ },
1703
+
1704
+ addDiv: function (parent) {
1705
+ var div = document.createElement("div");
1706
+ div.id = "MathJax_Message";
1707
+ if (parent.firstChild) {parent.insertBefore(div,parent.firstChild)}
1708
+ else {parent.appendChild(div)}
1709
+ return div;
1710
+ },
1711
+
1712
+ MoveFrame: function () {
1713
+ var body = (MathJax.Message.quirks ? document.body : document.documentElement);
1714
+ var frame = MathJax.Message.frame;
1715
+ frame.style.left = body.scrollLeft + 'px';
1716
+ frame.style.top = body.scrollTop + 'px';
1717
+ frame.style.width = body.clientWidth + 'px';
1718
+ frame = frame.firstChild;
1719
+ frame.style.height = body.clientHeight + 'px';
1720
+ },
1721
+
1722
+ localize: function (message) {
1723
+ return MathJax.Localization._(message,message);
1724
+ },
1725
+
1726
+ filterText: function (text,n,id) {
1727
+ if (MathJax.Hub.config.messageStyle === "simple") {
1728
+ if (id === "LoadFile") {
1729
+ if (!this.loading) {this.loading = this.localize("Loading") + " "}
1730
+ text = this.loading; this.loading += ".";
1731
+ } else if (id === "ProcessMath") {
1732
+ if (!this.processing) {this.processing = this.localize("Processing") + " "}
1733
+ text = this.processing; this.processing += ".";
1734
+ } else if (id === "TypesetMath") {
1735
+ if (!this.typesetting) {this.typesetting = this.localize("Typesetting") + " "}
1736
+ text = this.typesetting; this.typesetting += ".";
1737
+ }
1738
+ }
1739
+ return text;
1740
+ },
1741
+
1742
+ clearCounts: function () {
1743
+ delete this.loading;
1744
+ delete this.processing;
1745
+ delete this.typesetting;
1746
+ },
1747
+
1748
+ Set: function (text,n,clearDelay) {
1749
+ if (n == null) {n = this.log.length; this.log[n] = {}}
1750
+ //
1751
+ // Translate message if it is [id,message,arguments]
1752
+ //
1753
+ var id = "";
1754
+ if (MathJax.Object.isArray(text)) {
1755
+ id = text[0]; if (MathJax.Object.isArray(id)) {id = id[1]}
1756
+ //
1757
+ // Localization._() will throw a restart error if a localization file
1758
+ // needs to be loaded, so trap that and redo the Set() call
1759
+ // after it is loaded.
1760
+ //
1761
+ try {
1762
+ text = MathJax.Localization._.apply(MathJax.Localization,text);
1763
+ } catch (err) {
1764
+ if (!err.restart) {throw err}
1765
+ if (!err.restart.called) {
1766
+ //
1767
+ // Mark it so we can tell if the Clear() comes before the message is displayed
1768
+ //
1769
+ if (this.log[n].restarted == null) {this.log[n].restarted = 0}
1770
+ this.log[n].restarted++; delete this.log[n].cleared;
1771
+ MathJax.Callback.After(["Set",this,text,n,clearDelay],err.restart);
1772
+ return n;
1773
+ }
1774
+ }
1775
+ }
1776
+ //
1777
+ // Clear the timout timer.
1778
+ //
1779
+ if (this.timer) {clearTimeout(this.timer); delete this.timer}
1780
+ //
1781
+ // Save the message and filtered message.
1782
+ //
1783
+ this.log[n].text = text; this.log[n].filteredText = text = this.filterText(text,n,id);
1784
+ //
1785
+ // Hook the message into the message list so we can tell
1786
+ // what message to put up when this one is removed.
1787
+ //
1788
+ if (typeof(this.log[n].next) === "undefined") {
1789
+ this.log[n].next = this.current;
1790
+ if (this.current != null) {this.log[this.current].prev = n}
1791
+ this.current = n;
1792
+ }
1793
+ //
1794
+ // Show the message if it is the currently active one.
1795
+ //
1796
+ if (this.current === n && MathJax.Hub.config.messageStyle !== "none") {
1797
+ if (this.Init()) {
1798
+ if (this.textNodeBug) {this.div.innerHTML = text} else {this.text.nodeValue = text}
1799
+ this.div.style.display = "";
1800
+ if (this.status) {window.status = ""; delete this.status}
1801
+ } else {
1802
+ window.status = text;
1803
+ this.status = true;
1804
+ }
1805
+ }
1806
+ //
1807
+ // Check if the message was resetarted to load a localization file
1808
+ // and if it has been cleared in the meanwhile.
1809
+ //
1810
+ if (this.log[n].restarted) {
1811
+ if (this.log[n].cleared) {clearDelay = 0}
1812
+ if (--this.log[n].restarted === 0) {delete this.log[n].cleared}
1813
+ }
1814
+ //
1815
+ // Check if we need to clear the message automatically.
1816
+ //
1817
+ if (clearDelay) {setTimeout(MathJax.Callback(["Clear",this,n]),clearDelay)}
1818
+ else if (clearDelay == 0) {this.Clear(n,0)}
1819
+ //
1820
+ // Return the message number.
1821
+ //
1822
+ return n;
1823
+ },
1824
+
1825
+ Clear: function (n,delay) {
1826
+ //
1827
+ // Detatch the message from the active list.
1828
+ //
1829
+ if (this.log[n].prev != null) {this.log[this.log[n].prev].next = this.log[n].next}
1830
+ if (this.log[n].next != null) {this.log[this.log[n].next].prev = this.log[n].prev}
1831
+ //
1832
+ // If it is the current message, get the next one to show.
1833
+ //
1834
+ if (this.current === n) {
1835
+ this.current = this.log[n].next;
1836
+ if (this.text) {
1837
+ if (this.div.parentNode == null) {this.Init()} // see ASCIIMathML comments above
1838
+ if (this.current == null) {
1839
+ //
1840
+ // If there are no more messages, remove the message box.
1841
+ //
1842
+ if (this.timer) {clearTimeout(this.timer); delete this.timer}
1843
+ if (delay == null) {delay = 600}
1844
+ if (delay === 0) {this.Remove()}
1845
+ else {this.timer = setTimeout(MathJax.Callback(["Remove",this]),delay)}
1846
+ } else if (MathJax.Hub.config.messageStyle !== "none") {
1847
+ //
1848
+ // If there is an old message, put it in place
1849
+ //
1850
+ if (this.textNodeBug) {this.div.innerHTML = this.log[this.current].filteredText}
1851
+ else {this.text.nodeValue = this.log[this.current].filteredText}
1852
+ }
1853
+ if (this.status) {window.status = ""; delete this.status}
1854
+ } else if (this.status) {
1855
+ window.status = (this.current == null ? "" : this.log[this.current].text);
1856
+ }
1857
+ }
1858
+ //
1859
+ // Clean up the log data no longer needed
1860
+ //
1861
+ delete this.log[n].next; delete this.log[n].prev;
1862
+ delete this.log[n].filteredText;
1863
+ //
1864
+ // If this is a restarted localization message, mark that it has been cleared
1865
+ // while waiting for the file to load.
1866
+ //
1867
+ if (this.log[n].restarted) {this.log[n].cleared = true}
1868
+ },
1869
+
1870
+ Remove: function () {
1871
+ // FIXME: do a fade out or something else interesting?
1872
+ this.text.nodeValue = "";
1873
+ this.div.style.display = "none";
1874
+ },
1875
+
1876
+ File: function (file) {
1877
+ return this.Set(["LoadFile","Loading %1",file],null,null);
1878
+ },
1879
+
1880
+ Log: function () {
1881
+ var strings = [];
1882
+ for (var i = 1, m = this.log.length; i < m; i++) {strings[i] = this.log[i].text}
1883
+ return strings.join("\n");
1884
+ }
1885
+
1886
+ };
1887
+
1888
+ /**********************************************************/
1889
+
1890
+ MathJax.Hub = {
1891
+ config: {
1892
+ root: "",
1893
+ config: [], // list of configuration files to load
1894
+ styleSheets: [], // list of CSS files to load
1895
+ styles: { // styles to generate in-line
1896
+ ".MathJax_Preview": {color: "#888"}
1897
+ },
1898
+ jax: [], // list of input and output jax to load
1899
+ extensions: [], // list of extensions to load
1900
+ preJax: null, // pattern to remove from before math script tag
1901
+ postJax: null, // pattern to remove from after math script tag
1902
+ displayAlign: 'center', // how to align displayed equations (left, center, right)
1903
+ displayIndent: '0', // indentation for displayed equations (when not centered)
1904
+ preRemoveClass: 'MathJax_Preview', // class of objects to remove preceding math script
1905
+ showProcessingMessages: true, // display "Processing math: nn%" messages or not
1906
+ messageStyle: "normal", // set to "none" or "simple" (for "Loading..." and "Processing...")
1907
+ delayStartupUntil: "none", // set to "onload" to delay setup until the onload handler runs
1908
+ // set to "configured" to delay startup until MathJax.Hub.Configured() is called
1909
+ // set to a Callback to wait for before continuing with the startup
1910
+ skipStartupTypeset: false, // set to true to skip PreProcess and Process during startup
1911
+ elements: [], // array of elements to process when none is given explicitly
1912
+ positionToHash: true, // after initial typeset pass, position to #hash location?
1913
+
1914
+ showMathMenu: true, // attach math context menu to typeset math?
1915
+ showMathMenuMSIE: true, // separtely determine if MSIE should have math menu
1916
+ // (since the code for that is a bit delicate)
1917
+
1918
+ menuSettings: {
1919
+ zoom: "None", // when to do MathZoom
1920
+ CTRL: false, // require CTRL for MathZoom?
1921
+ ALT: false, // require Alt or Option?
1922
+ CMD: false, // require CMD?
1923
+ Shift: false, // require Shift?
1924
+ discoverable: false, // make math menu discoverable on hover?
1925
+ zscale: "200%", // the scaling factor for MathZoom
1926
+ renderer: null, // set when Jax are loaded
1927
+ font: "Auto", // what font HTML-CSS should use
1928
+ context: "MathJax", // or "Browser" for pass-through to browser menu
1929
+ locale: null, // the language to use for messages
1930
+ mpContext: false, // true means pass menu events to MathPlayer in IE
1931
+ mpMouse: false, // true means pass mouse events to MathPlayer in IE
1932
+ texHints: true, // include class names for TeXAtom elements
1933
+ FastPreview: null, // use PreviewHTML output as preview?
1934
+ assistiveMML: null, // include hidden MathML for screen readers?
1935
+ inTabOrder: true, // set to false if math elements should be included in the tabindex
1936
+ semantics: false // add semantics tag with original form in MathML output
1937
+ },
1938
+
1939
+ errorSettings: {
1940
+ // localized HTML snippet structure for message to use
1941
+ message: ["[",["MathProcessingError","Math Processing Error"],"]"],
1942
+ style: {color: "#CC0000", "font-style":"italic"} // style for message
1943
+ },
1944
+
1945
+ ignoreMMLattributes: {} // attributes not to copy to HTML-CSS or SVG output
1946
+ // from MathML input (in addition to the ones in MML.nocopyAttributes).
1947
+ // An id set to true will be ignored, one set to false will
1948
+ // be allowed (even if other criteria normally would prevent
1949
+ // it from being copied); use false carefully!
1950
+ },
1951
+
1952
+ preProcessors: MathJax.Callback.Hooks(true), // list of callbacks for preprocessing (initialized by extensions)
1953
+ inputJax: {}, // mime-type mapped to input jax (by registration)
1954
+ outputJax: {order:{}}, // mime-type mapped to output jax list (by registration)
1955
+
1956
+ processSectionDelay: 50, // pause between input and output phases of processing
1957
+ processUpdateTime: 250, // time between screen updates when processing math (milliseconds)
1958
+ processUpdateDelay: 10, // pause between screen updates to allow other processing (milliseconds)
1959
+
1960
+ signal: MathJax.Callback.Signal("Hub"), // Signal used for Hub events
1961
+
1962
+ Config: function (def) {
1963
+ this.Insert(this.config,def);
1964
+ if (this.config.Augment) {this.Augment(this.config.Augment)}
1965
+ },
1966
+ CombineConfig: function (name,def) {
1967
+ var config = this.config, id, parent; name = name.split(/\./);
1968
+ for (var i = 0, m = name.length; i < m; i++) {
1969
+ id = name[i]; if (!config[id]) {config[id] = {}}
1970
+ parent = config; config = config[id];
1971
+ }
1972
+ parent[id] = config = this.Insert(def,config);
1973
+ return config;
1974
+ },
1975
+
1976
+ Register: {
1977
+ PreProcessor: function () {return MathJax.Hub.preProcessors.Add.apply(MathJax.Hub.preProcessors,arguments)},
1978
+ MessageHook: function () {return MathJax.Hub.signal.MessageHook.apply(MathJax.Hub.signal,arguments)},
1979
+ StartupHook: function () {return MathJax.Hub.Startup.signal.MessageHook.apply(MathJax.Hub.Startup.signal,arguments)},
1980
+ LoadHook: function () {return MathJax.Ajax.LoadHook.apply(MathJax.Ajax,arguments)}
1981
+ },
1982
+ UnRegister: {
1983
+ PreProcessor: function (hook) {MathJax.Hub.preProcessors.Remove(hook)},
1984
+ MessageHook: function (hook) {MathJax.Hub.signal.RemoveHook(hook)},
1985
+ StartupHook: function (hook) {MathJax.Hub.Startup.signal.RemoveHook(hook)},
1986
+ LoadHook: function (hook) {MathJax.Ajax.removeHook(hook)}
1987
+ },
1988
+
1989
+ getAllJax: function (element) {
1990
+ var jax = [], scripts = this.elementScripts(element);
1991
+ for (var i = 0, m = scripts.length; i < m; i++) {
1992
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax)
1993
+ {jax.push(scripts[i].MathJax.elementJax)}
1994
+ }
1995
+ return jax;
1996
+ },
1997
+
1998
+ getJaxByType: function (type,element) {
1999
+ var jax = [], scripts = this.elementScripts(element);
2000
+ for (var i = 0, m = scripts.length; i < m; i++) {
2001
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax &&
2002
+ scripts[i].MathJax.elementJax.mimeType === type)
2003
+ {jax.push(scripts[i].MathJax.elementJax)}
2004
+ }
2005
+ return jax;
2006
+ },
2007
+
2008
+ getJaxByInputType: function (type,element) {
2009
+ var jax = [], scripts = this.elementScripts(element);
2010
+ for (var i = 0, m = scripts.length; i < m; i++) {
2011
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax &&
2012
+ scripts[i].type && scripts[i].type.replace(/ *;(.|\s)*/,"") === type)
2013
+ {jax.push(scripts[i].MathJax.elementJax)}
2014
+ }
2015
+ return jax;
2016
+ },
2017
+
2018
+ getJaxFor: function (element) {
2019
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
2020
+ if (element && element.MathJax) {return element.MathJax.elementJax}
2021
+ if (this.isMathJaxNode(element)) {
2022
+ if (!element.isMathJax) {element = element.firstChild} // for NativeMML output
2023
+ while (element && !element.jaxID) {element = element.parentNode}
2024
+ if (element) {return MathJax.OutputJax[element.jaxID].getJaxFromMath(element)}
2025
+ }
2026
+ return null;
2027
+ },
2028
+
2029
+ isJax: function (element) {
2030
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
2031
+ if (this.isMathJaxNode(element)) {return 1}
2032
+ if (element && (element.tagName||"").toLowerCase() === 'script') {
2033
+ if (element.MathJax)
2034
+ {return (element.MathJax.state === MathJax.ElementJax.STATE.PROCESSED ? 1 : -1)}
2035
+ if (element.type && this.inputJax[element.type.replace(/ *;(.|\s)*/,"")]) {return -1}
2036
+ }
2037
+ return 0;
2038
+ },
2039
+ isMathJaxNode: function (element) {
2040
+ return !!element && (element.isMathJax || (element.className||"") === "MathJax_MathML");
2041
+ },
2042
+
2043
+ setRenderer: function (renderer,type) {
2044
+ if (!renderer) return;
2045
+ var JAX = MathJax.OutputJax[renderer];
2046
+ if (!JAX) {
2047
+ MathJax.OutputJax[renderer] = MathJax.OutputJax({id: "unknown", version:"1.0.0", isUnknown: true});
2048
+ this.config.menuSettings.renderer = "";
2049
+ var file = "[MathJax]/jax/output/"+renderer+"/config.js";
2050
+ return MathJax.Ajax.Require(file,["setRenderer",this,renderer,type]);
2051
+ } else {
2052
+ this.config.menuSettings.renderer = renderer;
2053
+ if (type == null) {type = "jax/mml"}
2054
+ if (JAX.isUnknown) JAX.Register(type);
2055
+ var jax = this.outputJax;
2056
+ if (jax[type] && jax[type].length) {
2057
+ if (renderer !== jax[type][0].id) {
2058
+ jax[type].unshift(JAX);
2059
+ return this.signal.Post(["Renderer Selected",renderer]);
2060
+ }
2061
+ }
2062
+ return null;
2063
+ }
2064
+ },
2065
+
2066
+ Queue: function () {
2067
+ return this.queue.Push.apply(this.queue,arguments);
2068
+ },
2069
+
2070
+ Typeset: function (element,callback) {
2071
+ if (!MathJax.isReady) return null;
2072
+ var ec = this.elementCallback(element,callback);
2073
+ if (ec.count) {
2074
+ var queue = MathJax.Callback.Queue(
2075
+ ["PreProcess",this,ec.elements],
2076
+ ["Process",this,ec.elements]
2077
+ );
2078
+ }
2079
+ return queue.Push(ec.callback);
2080
+ },
2081
+
2082
+ PreProcess: function (element,callback) {
2083
+ var ec = this.elementCallback(element,callback);
2084
+ var queue = MathJax.Callback.Queue();
2085
+ if (ec.count) {
2086
+ var elements = (ec.count === 1 ? [ec.elements] : ec.elements);
2087
+ queue.Push(["Post",this.signal,["Begin PreProcess",ec.elements]]);
2088
+ for (var i = 0, m = elements.length; i < m; i++) {
2089
+ if (elements[i]) {queue.Push(["Execute",this.preProcessors,elements[i]])}
2090
+ }
2091
+ queue.Push(["Post",this.signal,["End PreProcess",ec.elements]]);
2092
+ }
2093
+ return queue.Push(ec.callback);
2094
+ },
2095
+
2096
+ Process: function (element,callback) {return this.takeAction("Process",element,callback)},
2097
+ Update: function (element,callback) {return this.takeAction("Update",element,callback)},
2098
+ Reprocess: function (element,callback) {return this.takeAction("Reprocess",element,callback)},
2099
+ Rerender: function (element,callback) {return this.takeAction("Rerender",element,callback)},
2100
+
2101
+ takeAction: function (action,element,callback) {
2102
+ var ec = this.elementCallback(element,callback);
2103
+ var elements = ec.elements;
2104
+ var queue = MathJax.Callback.Queue(["Clear",this.signal]);
2105
+ var state = {
2106
+ scripts: [], // filled in by prepareScripts
2107
+ start: new Date().getTime(), // timer for processing messages
2108
+ i: 0, j: 0, // current script, current jax
2109
+ jax: {}, // scripts grouped by output jax
2110
+ jaxIDs: [] // id's of jax used
2111
+ };
2112
+ if (ec.count) {
2113
+ var delay = ["Delay",MathJax.Callback,this.processSectionDelay];
2114
+ if (!delay[2]) {delay = {}}
2115
+ queue.Push(
2116
+ ["clearCounts",MathJax.Message],
2117
+ ["Post",this.signal,["Begin "+action,elements]],
2118
+ ["Post",this.signal,["Begin Math",elements,action]],
2119
+ ["prepareScripts",this,action,elements,state],
2120
+ ["Post",this.signal,["Begin Math Input",elements,action]],
2121
+ ["processInput",this,state],
2122
+ ["Post",this.signal,["End Math Input",elements,action]],
2123
+ delay,
2124
+ ["prepareOutput",this,state,"preProcess"],
2125
+ delay,
2126
+ ["Post",this.signal,["Begin Math Output",elements,action]],
2127
+ ["processOutput",this,state],
2128
+ ["Post",this.signal,["End Math Output",elements,action]],
2129
+ delay,
2130
+ ["prepareOutput",this,state,"postProcess"],
2131
+ delay,
2132
+ ["Post",this.signal,["End Math",elements,action]],
2133
+ ["Post",this.signal,["End "+action,elements]],
2134
+ ["clearCounts",MathJax.Message]
2135
+ );
2136
+ }
2137
+ return queue.Push(ec.callback);
2138
+ },
2139
+
2140
+ scriptAction: {
2141
+ Process: function (script) {},
2142
+ Update: function (script) {
2143
+ var jax = script.MathJax.elementJax;
2144
+ if (jax && jax.needsUpdate()) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE}
2145
+ else {script.MathJax.state = jax.STATE.PROCESSED}
2146
+ },
2147
+ Reprocess: function (script) {
2148
+ var jax = script.MathJax.elementJax;
2149
+ if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE}
2150
+ },
2151
+ Rerender: function (script) {
2152
+ var jax = script.MathJax.elementJax;
2153
+ if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.OUTPUT}
2154
+ }
2155
+ },
2156
+
2157
+ prepareScripts: function (action,element,state) {
2158
+ if (arguments.callee.disabled) return;
2159
+ var scripts = this.elementScripts(element);
2160
+ var STATE = MathJax.ElementJax.STATE;
2161
+ for (var i = 0, m = scripts.length; i < m; i++) {
2162
+ var script = scripts[i];
2163
+ if (script.type && this.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) {
2164
+ if (script.MathJax) {
2165
+ if (script.MathJax.elementJax && script.MathJax.elementJax.hover) {
2166
+ MathJax.Extension.MathEvents.Hover.ClearHover(script.MathJax.elementJax);
2167
+ }
2168
+ if (script.MathJax.state !== STATE.PENDING) {this.scriptAction[action](script)}
2169
+ }
2170
+ if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}}
2171
+ if (script.MathJax.error) delete script.MathJax.error;
2172
+ if (script.MathJax.state !== STATE.PROCESSED) {state.scripts.push(script)}
2173
+ }
2174
+ }
2175
+ },
2176
+
2177
+ checkScriptSiblings: function (script) {
2178
+ if (script.MathJax.checked) return;
2179
+ var config = this.config, pre = script.previousSibling;
2180
+ if (pre && pre.nodeName === "#text") {
2181
+ var preJax,postJax, post = script.nextSibling;
2182
+ if (post && post.nodeName !== "#text") {post = null}
2183
+ if (config.preJax) {
2184
+ if (typeof(config.preJax) === "string") {config.preJax = new RegExp(config.preJax+"$")}
2185
+ preJax = pre.nodeValue.match(config.preJax);
2186
+ }
2187
+ if (config.postJax && post) {
2188
+ if (typeof(config.postJax) === "string") {config.postJax = new RegExp("^"+config.postJax)}
2189
+ postJax = post.nodeValue.match(config.postJax);
2190
+ }
2191
+ if (preJax && (!config.postJax || postJax)) {
2192
+ pre.nodeValue = pre.nodeValue.replace
2193
+ (config.preJax,(preJax.length > 1? preJax[1] : ""));
2194
+ pre = null;
2195
+ }
2196
+ if (postJax && (!config.preJax || preJax)) {
2197
+ post.nodeValue = post.nodeValue.replace
2198
+ (config.postJax,(postJax.length > 1? postJax[1] : ""));
2199
+ }
2200
+ if (pre && !pre.nodeValue.match(/\S/)) {pre = pre.previousSibling}
2201
+ }
2202
+ if (config.preRemoveClass && pre && pre.className === config.preRemoveClass)
2203
+ {script.MathJax.preview = pre}
2204
+ script.MathJax.checked = 1;
2205
+ },
2206
+
2207
+ processInput: function (state) {
2208
+ var jax, STATE = MathJax.ElementJax.STATE;
2209
+ var script, prev, m = state.scripts.length;
2210
+ try {
2211
+ //
2212
+ // Loop through the scripts
2213
+ //
2214
+ while (state.i < m) {
2215
+ script = state.scripts[state.i]; if (!script) {state.i++; continue}
2216
+ //
2217
+ // Remove previous error marker, if any
2218
+ //
2219
+ prev = script.previousSibling;
2220
+ if (prev && prev.className === "MathJax_Error") {prev.parentNode.removeChild(prev)}
2221
+ //
2222
+ // Check if already processed or needs processing
2223
+ //
2224
+ if (!script.parentNode || !script.MathJax || script.MathJax.state === STATE.PROCESSED) {state.i++; continue};
2225
+ if (!script.MathJax.elementJax || script.MathJax.state === STATE.UPDATE) {
2226
+ this.checkScriptSiblings(script); // remove preJax/postJax etc.
2227
+ var type = script.type.replace(/ *;(.|\s)*/,""); // the input jax type
2228
+ var input = this.inputJax[type]; // the input jax itself
2229
+ jax = input.Process(script,state); // run the input jax
2230
+ if (typeof jax === 'function') { // if a callback was returned
2231
+ if (jax.called) continue; // go back and call Process() again
2232
+ this.RestartAfter(jax); // wait for the callback
2233
+ }
2234
+ jax = jax.Attach(script,input.id); // register the jax on the script
2235
+ this.saveScript(jax,state,script,STATE); // add script to state
2236
+ this.postInputHooks.Execute(jax,input.id,script); // run global jax filters
2237
+ } else if (script.MathJax.state === STATE.OUTPUT) {
2238
+ this.saveScript(script.MathJax.elementJax,state,script,STATE); // add script to state
2239
+ }
2240
+ //
2241
+ // Go on to the next script, and check if we need to update the processing message
2242
+ //
2243
+ state.i++; var now = new Date().getTime();
2244
+ if (now - state.start > this.processUpdateTime && state.i < state.scripts.length)
2245
+ {state.start = now; this.RestartAfter(MathJax.Callback.Delay(1))}
2246
+ }
2247
+ } catch (err) {return this.processError(err,state,"Input")}
2248
+ //
2249
+ // Put up final message, reset the state and return
2250
+ //
2251
+ if (state.scripts.length && this.config.showProcessingMessages)
2252
+ {MathJax.Message.Set(["ProcessMath","Processing math: %1%%",100],0)}
2253
+ state.start = new Date().getTime(); state.i = state.j = 0;
2254
+ return null;
2255
+ },
2256
+ postInputHooks: MathJax.Callback.Hooks(true), // hooks to run after element jax is created
2257
+ saveScript: function (jax,state,script,STATE) {
2258
+ //
2259
+ // Check that output jax exists
2260
+ //
2261
+ if (!this.outputJax[jax.mimeType]) {
2262
+ script.MathJax.state = STATE.UPDATE;
2263
+ throw Error("No output jax registered for "+jax.mimeType);
2264
+ }
2265
+ //
2266
+ // Record the output jax
2267
+ // and put this script in the queue for that jax
2268
+ //
2269
+ jax.outputJax = this.outputJax[jax.mimeType][0].id;
2270
+ if (!state.jax[jax.outputJax]) {
2271
+ if (state.jaxIDs.length === 0) {
2272
+ // use original array until we know there are more (rather than two copies)
2273
+ state.jax[jax.outputJax] = state.scripts;
2274
+ } else {
2275
+ if (state.jaxIDs.length === 1) // get the script so far for the existing jax
2276
+ {state.jax[state.jaxIDs[0]] = state.scripts.slice(0,state.i)}
2277
+ state.jax[jax.outputJax] = []; // start a new array for the new jax
2278
+ }
2279
+ state.jaxIDs.push(jax.outputJax); // save the ID of the jax
2280
+ }
2281
+ if (state.jaxIDs.length > 1) {state.jax[jax.outputJax].push(script)}
2282
+ //
2283
+ // Mark script as needing output
2284
+ //
2285
+ script.MathJax.state = STATE.OUTPUT;
2286
+ },
2287
+
2288
+ //
2289
+ // Pre- and post-process scripts by jax
2290
+ // (to get scaling factors, hide/show output, and so on)
2291
+ // Since this can cause the jax to load, we need to trap restarts
2292
+ //
2293
+ prepareOutput: function (state,method) {
2294
+ while (state.j < state.jaxIDs.length) {
2295
+ var id = state.jaxIDs[state.j], JAX = MathJax.OutputJax[id];
2296
+ if (JAX[method]) {
2297
+ try {
2298
+ var result = JAX[method](state);
2299
+ if (typeof result === 'function') {
2300
+ if (result.called) continue; // go back and try again
2301
+ this.RestartAfter(result);
2302
+ }
2303
+ } catch (err) {
2304
+ if (!err.restart) {
2305
+ MathJax.Message.Set(["PrepError","Error preparing %1 output (%2)",id,method],null,600);
2306
+ MathJax.Hub.lastPrepError = err;
2307
+ state.j++;
2308
+ }
2309
+ return MathJax.Callback.After(["prepareOutput",this,state,method],err.restart);
2310
+ }
2311
+ }
2312
+ state.j++;
2313
+ }
2314
+ return null;
2315
+ },
2316
+
2317
+ processOutput: function (state) {
2318
+ var result, STATE = MathJax.ElementJax.STATE, script, m = state.scripts.length;
2319
+ try {
2320
+ //
2321
+ // Loop through the scripts
2322
+ //
2323
+ while (state.i < m) {
2324
+ //
2325
+ // Check that there is an element jax
2326
+ //
2327
+ script = state.scripts[state.i];
2328
+ if (!script || !script.parentNode || !script.MathJax || script.MathJax.error) {state.i++; continue}
2329
+ var jax = script.MathJax.elementJax; if (!jax) {state.i++; continue}
2330
+ //
2331
+ // Call the output Jax's Process method (which will be its Translate()
2332
+ // method once loaded). Mark it as complete and remove the preview unless
2333
+ // the Process() call returns an explicit false value (in which case, it will
2334
+ // handle this later during the postProcess phase, as HTML-CSS does).
2335
+ //
2336
+ result = MathJax.OutputJax[jax.outputJax].Process(script,state);
2337
+ if (result !== false) {
2338
+ script.MathJax.state = STATE.PROCESSED;
2339
+ if (script.MathJax.preview) {
2340
+ script.MathJax.preview.innerHTML = "";
2341
+ script.MathJax.preview.style.display = "none";
2342
+ }
2343
+ //
2344
+ // Signal that new math is available
2345
+ //
2346
+ this.signal.Post(["New Math",jax.inputID]); // FIXME: wait for this? (i.e., restart if returns uncalled callback)
2347
+ }
2348
+ //
2349
+ // Go on to next math expression
2350
+ //
2351
+ state.i++;
2352
+ //
2353
+ // Update the processing message, if needed
2354
+ //
2355
+ var now = new Date().getTime();
2356
+ if (now - state.start > this.processUpdateTime && state.i < state.scripts.length)
2357
+ {state.start = now; this.RestartAfter(MathJax.Callback.Delay(this.processUpdateDelay))}
2358
+ }
2359
+ } catch (err) {return this.processError(err,state,"Output")}
2360
+ //
2361
+ // Put up the typesetting-complete message
2362
+ //
2363
+ if (state.scripts.length && this.config.showProcessingMessages) {
2364
+ MathJax.Message.Set(["TypesetMath","Typesetting math: %1%%",100],0);
2365
+ MathJax.Message.Clear(0);
2366
+ }
2367
+ state.i = state.j = 0;
2368
+ return null;
2369
+ },
2370
+
2371
+ processMessage: function (state,type) {
2372
+ var m = Math.floor(state.i/(state.scripts.length)*100);
2373
+ var message = (type === "Output" ? ["TypesetMath","Typesetting math: %1%%"] :
2374
+ ["ProcessMath","Processing math: %1%%"]);
2375
+ if (this.config.showProcessingMessages) {MathJax.Message.Set(message.concat(m),0)}
2376
+ },
2377
+
2378
+ processError: function (err,state,type) {
2379
+ if (!err.restart) {
2380
+ if (!this.config.errorSettings.message) {throw err}
2381
+ this.formatError(state.scripts[state.i],err); state.i++;
2382
+ }
2383
+ this.processMessage(state,type);
2384
+ return MathJax.Callback.After(["process"+type,this,state],err.restart);
2385
+ },
2386
+
2387
+ formatError: function (script,err) {
2388
+ var LOCALIZE = function (id,text,arg1,arg2) {return MathJax.Localization._(id,text,arg1,arg2)};
2389
+ //
2390
+ // Get the error message, URL, and line, and save it for
2391
+ // reporting in the Show Math As Error menu
2392
+ //
2393
+ var message = LOCALIZE("ErrorMessage","Error: %1",err.message)+"\n";
2394
+ if (err.sourceURL||err.fileName) message += "\n"+LOCALIZE("ErrorFile","file: %1",err.sourceURL||err.fileName);
2395
+ if (err.line||err.lineNumber) message += "\n"+LOCALIZE("ErrorLine","line: %1",err.line||err.lineNumber);
2396
+ message += "\n\n"+LOCALIZE("ErrorTips","Debugging tips: use %1, inspect %2 in the browser console","'unpacked/MathJax.js'","'MathJax.Hub.lastError'");
2397
+ script.MathJax.error = MathJax.OutputJax.Error.Jax(message,script);
2398
+ if (script.MathJax.elementJax)
2399
+ script.MathJax.error.inputID = script.MathJax.elementJax.inputID;
2400
+ //
2401
+ // Create the [Math Processing Error] span
2402
+ //
2403
+ var errorSettings = this.config.errorSettings;
2404
+ var errorText = LOCALIZE(errorSettings.messageId,errorSettings.message);
2405
+ var error = MathJax.HTML.Element("span", {
2406
+ className:"MathJax_Error", jaxID:"Error", isMathJax:true,
2407
+ id: script.MathJax.error.inputID+"-Frame"
2408
+ },[["span",null,errorText]]);
2409
+ //
2410
+ // Attach the menu events
2411
+ //
2412
+ MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () {
2413
+ var EVENT = MathJax.Extension.MathEvents.Event,
2414
+ HUB = MathJax.Hub;
2415
+ error.oncontextmenu = EVENT.Menu;
2416
+ error.onmousedown = EVENT.Mousedown;
2417
+ error.onkeydown = EVENT.Keydown;
2418
+ error.tabIndex = HUB.getTabOrder(HUB.getJaxFor(script));
2419
+ });
2420
+ //
2421
+ // Insert the error into the page and remove any preview
2422
+ //
2423
+ var node = document.getElementById(error.id);
2424
+ if (node) node.parentNode.removeChild(node);
2425
+ if (script.parentNode) script.parentNode.insertBefore(error,script);
2426
+ if (script.MathJax.preview) {
2427
+ script.MathJax.preview.innerHTML = "";
2428
+ script.MathJax.preview.style.display = "none";
2429
+ }
2430
+ //
2431
+ // Save the error for debugging purposes
2432
+ // Report the error as a signal
2433
+ //
2434
+ this.lastError = err;
2435
+ this.signal.Post(["Math Processing Error",script,err]);
2436
+ },
2437
+
2438
+ RestartAfter: function (callback) {
2439
+ throw this.Insert(Error("restart"),{restart: MathJax.Callback(callback)});
2440
+ },
2441
+
2442
+ elementCallback: function (element,callback) {
2443
+ if (callback == null && (MathJax.Object.isArray(element) || typeof element === 'function'))
2444
+ {try {MathJax.Callback(element); callback = element; element = null} catch(e) {}}
2445
+ if (element == null) {element = this.config.elements || []}
2446
+ if (this.isHTMLCollection(element)) {element = this.HTMLCollection2Array(element)}
2447
+ if (!MathJax.Object.isArray(element)) {element = [element]}
2448
+ element = [].concat(element); // make a copy so the original isn't changed
2449
+ for (var i = 0, m = element.length; i < m; i++)
2450
+ {if (typeof(element[i]) === 'string') {element[i] = document.getElementById(element[i])}}
2451
+ if (!document.body) {document.body = document.getElementsByTagName("body")[0]}
2452
+ if (element.length == 0) {element.push(document.body)}
2453
+ if (!callback) {callback = {}}
2454
+ return {
2455
+ count: element.length,
2456
+ elements: (element.length === 1 ? element[0] : element),
2457
+ callback: callback
2458
+ };
2459
+ },
2460
+
2461
+ elementScripts: function (element) {
2462
+ var scripts = [];
2463
+ if (MathJax.Object.isArray(element) || this.isHTMLCollection(element)) {
2464
+ for (var i = 0, m = element.length; i < m; i++) {
2465
+ var alreadyDone = 0;
2466
+ for (var j = 0; j < i && !alreadyDone; j++)
2467
+ {alreadyDone = element[j].contains(element[i])}
2468
+ if (!alreadyDone) scripts.push.apply(scripts,this.elementScripts(element[i]));
2469
+ }
2470
+ return scripts;
2471
+ }
2472
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
2473
+ if (!document.body) {document.body = document.getElementsByTagName("body")[0]}
2474
+ if (element == null) {element = document.body}
2475
+ if (element.tagName != null && element.tagName.toLowerCase() === "script") {return [element]}
2476
+ scripts = element.getElementsByTagName("script");
2477
+ if (this.msieHTMLCollectionBug) {scripts = this.HTMLCollection2Array(scripts)}
2478
+ return scripts;
2479
+ },
2480
+
2481
+ //
2482
+ // IE8 fails to check "obj instanceof HTMLCollection" for some values of obj.
2483
+ //
2484
+ isHTMLCollection: function (obj) {
2485
+ return ("HTMLCollection" in window && typeof(obj) === "object" && obj instanceof HTMLCollection);
2486
+ },
2487
+ //
2488
+ // IE8 doesn't deal with HTMLCollection as an array, so convert to array
2489
+ //
2490
+ HTMLCollection2Array: function (nodes) {
2491
+ if (!this.msieHTMLCollectionBug) {return [].slice.call(nodes)}
2492
+ var NODES = [];
2493
+ for (var i = 0, m = nodes.length; i < m; i++) {NODES[i] = nodes[i]}
2494
+ return NODES;
2495
+ },
2496
+
2497
+ Insert: function (dst,src) {
2498
+ for (var id in src) {if (src.hasOwnProperty(id)) {
2499
+ // allow for concatenation of arrays?
2500
+ if (typeof src[id] === 'object' && !(MathJax.Object.isArray(src[id])) &&
2501
+ (typeof dst[id] === 'object' || typeof dst[id] === 'function')) {
2502
+ this.Insert(dst[id],src[id]);
2503
+ } else {
2504
+ dst[id] = src[id];
2505
+ }
2506
+ }}
2507
+ return dst;
2508
+ },
2509
+
2510
+ getTabOrder: function(script) {
2511
+ return this.config.menuSettings.inTabOrder ? 0 : -1;
2512
+ },
2513
+
2514
+ // Old browsers (e.g. Internet Explorer <= 8) do not support trim().
2515
+ SplitList: ("trim" in String.prototype ?
2516
+ function (list) {return list.trim().split(/\s+/)} :
2517
+ function (list) {return list.replace(/^\s+/,'').
2518
+ replace(/\s+$/,'').split(/\s+/)})
2519
+ };
2520
+ MathJax.Hub.Insert(MathJax.Hub.config.styles,MathJax.Message.styles);
2521
+ MathJax.Hub.Insert(MathJax.Hub.config.styles,{".MathJax_Error":MathJax.Hub.config.errorSettings.style});
2522
+
2523
+ //
2524
+ // Storage area for extensions and preprocessors
2525
+ //
2526
+ MathJax.Extension = {};
2527
+
2528
+ //
2529
+ // Hub Startup code
2530
+ //
2531
+ MathJax.Hub.Configured = MathJax.Callback({}); // called when configuration is complete
2532
+ MathJax.Hub.Startup = {
2533
+ script: "", // the startup script from the SCRIPT call that loads MathJax.js
2534
+ queue: MathJax.Callback.Queue(), // Queue used for startup actions
2535
+ signal: MathJax.Callback.Signal("Startup"), // Signal used for startup events
2536
+ params: {},
2537
+
2538
+ //
2539
+ // Load the configuration files
2540
+ //
2541
+ Config: function () {
2542
+ this.queue.Push(["Post",this.signal,"Begin Config"]);
2543
+ //
2544
+ // Make sure root is set before loading any files
2545
+ //
2546
+ if (MathJax.AuthorConfig && MathJax.AuthorConfig.root)
2547
+ MathJax.Ajax.config.root = MathJax.AuthorConfig.root;
2548
+ //
2549
+ // If a locale is given as a parameter,
2550
+ // set the locale and the default menu value for the locale
2551
+ //
2552
+ if (this.params.locale) {
2553
+ MathJax.Localization.resetLocale(this.params.locale);
2554
+ MathJax.Hub.config.menuSettings.locale = this.params.locale;
2555
+ }
2556
+ //
2557
+ // Run the config files, if any are given in the parameter list
2558
+ //
2559
+ if (this.params.config) {
2560
+ var files = this.params.config.split(/,/);
2561
+ for (var i = 0, m = files.length; i < m; i++) {
2562
+ if (!files[i].match(/\.js$/)) {files[i] += ".js"}
2563
+ this.queue.Push(["Require",MathJax.Ajax,this.URL("config",files[i])]);
2564
+ }
2565
+ }
2566
+ //
2567
+ // Perform author configuration from in-line MathJax = {...}
2568
+ //
2569
+ this.queue.Push(["Config",MathJax.Hub,MathJax.AuthorConfig]);
2570
+ //
2571
+ // Run the deprecated configuration script, if any (ignoring return value)
2572
+ // Wait for the startup delay signal
2573
+ // Run the mathjax-config blocks
2574
+ // Load the files in the configuration's config array
2575
+ //
2576
+ if (this.script.match(/\S/)) {this.queue.Push(this.script+";\n1;")}
2577
+ this.queue.Push(
2578
+ ["ConfigDelay",this],
2579
+ ["ConfigBlocks",this],
2580
+ [function (THIS) {return THIS.loadArray(MathJax.Hub.config.config,"config",null,true)},this],
2581
+ ["Post",this.signal,"End Config"]
2582
+ );
2583
+ },
2584
+ //
2585
+ // Return the delay callback
2586
+ //
2587
+ ConfigDelay: function () {
2588
+ var delay = this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil;
2589
+ if (delay === "onload") {return this.onload}
2590
+ if (delay === "configured") {return MathJax.Hub.Configured}
2591
+ return delay;
2592
+ },
2593
+ //
2594
+ // Run the scripts of type=text/x-mathjax-config
2595
+ //
2596
+ ConfigBlocks: function () {
2597
+ var scripts = document.getElementsByTagName("script");
2598
+ var queue = MathJax.Callback.Queue();
2599
+ for (var i = 0, m = scripts.length; i < m; i++) {
2600
+ var type = String(scripts[i].type).replace(/ /g,"");
2601
+ if (type.match(/^text\/x-mathjax-config(;.*)?$/) && !type.match(/;executed=true/)) {
2602
+ scripts[i].type += ";executed=true";
2603
+ queue.Push(scripts[i].innerHTML+";\n1;");
2604
+ }
2605
+ }
2606
+ return queue.Push(function () {MathJax.Ajax.config.root = MathJax.Hub.config.root});
2607
+ },
2608
+
2609
+ //
2610
+ // Read cookie and set up menu defaults
2611
+ // (set the locale according to the cookie)
2612
+ // (adjust the jax to accommodate renderer preferences)
2613
+ //
2614
+ Cookie: function () {
2615
+ return this.queue.Push(
2616
+ ["Post",this.signal,"Begin Cookie"],
2617
+ ["Get",MathJax.HTML.Cookie,"menu",MathJax.Hub.config.menuSettings],
2618
+ [function (config) {
2619
+ var SETTINGS = config.menuSettings;
2620
+ if (SETTINGS.locale) MathJax.Localization.resetLocale(SETTINGS.locale);
2621
+ var renderer = config.menuSettings.renderer, jax = config.jax;
2622
+ if (renderer) {
2623
+ var name = "output/"+renderer; jax.sort();
2624
+ for (var i = 0, m = jax.length; i < m; i++) {
2625
+ if (jax[i].substr(0,7) === "output/") break;
2626
+ }
2627
+ if (i == m-1) {jax.pop()} else {
2628
+ while (i < m) {if (jax[i] === name) {jax.splice(i,1); break}; i++}
2629
+ }
2630
+ jax.unshift(name);
2631
+ }
2632
+ if (SETTINGS.CHTMLpreview != null) {
2633
+ if (SETTINGS.FastPreview == null) SETTINGS.FastPreview = SETTINGS.CHTMLpreview;
2634
+ delete SETTINGS.CHTMLpreview;
2635
+ }
2636
+ if (SETTINGS.FastPreview && !MathJax.Extension["fast-preview"])
2637
+ MathJax.Hub.config.extensions.push("fast-preview.js");
2638
+ if (config.menuSettings.assistiveMML && !MathJax.Extension.AssistiveMML)
2639
+ MathJax.Hub.config.extensions.push("AssistiveMML.js");
2640
+ },MathJax.Hub.config],
2641
+ ["Post",this.signal,"End Cookie"]
2642
+ );
2643
+ },
2644
+ //
2645
+ // Setup stylesheets and extra styles
2646
+ //
2647
+ Styles: function () {
2648
+ return this.queue.Push(
2649
+ ["Post",this.signal,"Begin Styles"],
2650
+ ["loadArray",this,MathJax.Hub.config.styleSheets,"config"],
2651
+ ["Styles",MathJax.Ajax,MathJax.Hub.config.styles],
2652
+ ["Post",this.signal,"End Styles"]
2653
+ );
2654
+ },
2655
+ //
2656
+ // Load the input and output jax
2657
+ //
2658
+ Jax: function () {
2659
+ var config = MathJax.Hub.config, jax = MathJax.Hub.outputJax;
2660
+ // Save the order of the output jax since they are loading asynchronously
2661
+ for (var i = 0, m = config.jax.length, k = 0; i < m; i++) {
2662
+ var name = config.jax[i].substr(7);
2663
+ if (config.jax[i].substr(0,7) === "output/" && jax.order[name] == null)
2664
+ {jax.order[name] = k; k++}
2665
+ }
2666
+ var queue = MathJax.Callback.Queue();
2667
+ return queue.Push(
2668
+ ["Post",this.signal,"Begin Jax"],
2669
+ ["loadArray",this,config.jax,"jax","config.js"],
2670
+ ["Post",this.signal,"End Jax"]
2671
+ );
2672
+ },
2673
+ //
2674
+ // Load the extensions
2675
+ //
2676
+ Extensions: function () {
2677
+ var queue = MathJax.Callback.Queue();
2678
+ return queue.Push(
2679
+ ["Post",this.signal,"Begin Extensions"],
2680
+ ["loadArray",this,MathJax.Hub.config.extensions,"extensions"],
2681
+ ["Post",this.signal,"End Extensions"]
2682
+ );
2683
+ },
2684
+
2685
+ //
2686
+ // Initialize the Message system
2687
+ //
2688
+ Message: function () {
2689
+ MathJax.Message.Init(true);
2690
+ },
2691
+
2692
+ //
2693
+ // Set the math menu renderer, if it isn't already
2694
+ // (this must come after the jax are loaded)
2695
+ //
2696
+ Menu: function () {
2697
+ var menu = MathJax.Hub.config.menuSettings, jax = MathJax.Hub.outputJax, registered;
2698
+ for (var id in jax) {if (jax.hasOwnProperty(id)) {
2699
+ if (jax[id].length) {registered = jax[id]; break}
2700
+ }}
2701
+ if (registered && registered.length) {
2702
+ if (menu.renderer && menu.renderer !== registered[0].id)
2703
+ {registered.unshift(MathJax.OutputJax[menu.renderer])}
2704
+ menu.renderer = registered[0].id;
2705
+ }
2706
+ },
2707
+
2708
+ //
2709
+ // Set the location to the designated hash position
2710
+ //
2711
+ Hash: function () {
2712
+ if (MathJax.Hub.config.positionToHash && document.location.hash &&
2713
+ document.body && document.body.scrollIntoView) {
2714
+ var name = decodeURIComponent(document.location.hash.substr(1));
2715
+ var target = document.getElementById(name);
2716
+ if (!target) {
2717
+ var a = document.getElementsByTagName("a");
2718
+ for (var i = 0, m = a.length; i < m; i++)
2719
+ {if (a[i].name === name) {target = a[i]; break}}
2720
+ }
2721
+ if (target) {
2722
+ while (!target.scrollIntoView) {target = target.parentNode}
2723
+ target = this.HashCheck(target);
2724
+ if (target && target.scrollIntoView)
2725
+ {setTimeout(function () {target.scrollIntoView(true)},1)}
2726
+ }
2727
+ }
2728
+ },
2729
+ HashCheck: function (target) {
2730
+ var jax = MathJax.Hub.getJaxFor(target);
2731
+ if (jax && MathJax.OutputJax[jax.outputJax].hashCheck)
2732
+ {target = MathJax.OutputJax[jax.outputJax].hashCheck(target)}
2733
+ return target;
2734
+ },
2735
+
2736
+ //
2737
+ // Load the Menu and Zoom code, if it hasn't already been loaded.
2738
+ // This is called after the initial typeset, so should no longer be
2739
+ // competing with other page loads, but will make these available
2740
+ // if needed later on.
2741
+ //
2742
+ MenuZoom: function () {
2743
+ if (MathJax.Hub.config.showMathMenu) {
2744
+ if (!MathJax.Extension.MathMenu) {
2745
+ setTimeout(
2746
+ function () {
2747
+ MathJax.Callback.Queue(
2748
+ ["Require",MathJax.Ajax,"[MathJax]/extensions/MathMenu.js",{}],
2749
+ ["loadDomain",MathJax.Localization,"MathMenu"]
2750
+ )
2751
+ },1000
2752
+ );
2753
+ } else {
2754
+ setTimeout(
2755
+ MathJax.Callback(["loadDomain",MathJax.Localization,"MathMenu"]),
2756
+ 1000
2757
+ );
2758
+ }
2759
+ if (!MathJax.Extension.MathZoom) {
2760
+ setTimeout(
2761
+ MathJax.Callback(["Require",MathJax.Ajax,"[MathJax]/extensions/MathZoom.js",{}]),
2762
+ 2000
2763
+ );
2764
+ }
2765
+ }
2766
+ },
2767
+
2768
+ //
2769
+ // Setup the onload callback
2770
+ //
2771
+ onLoad: function () {
2772
+ var onload = this.onload =
2773
+ MathJax.Callback(function () {MathJax.Hub.Startup.signal.Post("onLoad")});
2774
+ if (document.body && document.readyState)
2775
+ if (MathJax.Hub.Browser.isMSIE) {
2776
+ // IE can change from loading to interactive before
2777
+ // full page is ready, so go with complete (even though
2778
+ // that means we may have to wait longer).
2779
+ if (document.readyState === "complete") {return [onload]}
2780
+ } else if (document.readyState !== "loading") {return [onload]}
2781
+ if (window.addEventListener) {
2782
+ window.addEventListener("load",onload,false);
2783
+ if (!this.params.noDOMContentEvent)
2784
+ {window.addEventListener("DOMContentLoaded",onload,false)}
2785
+ }
2786
+ else if (window.attachEvent) {window.attachEvent("onload",onload)}
2787
+ else {window.onload = onload}
2788
+ return onload;
2789
+ },
2790
+
2791
+ //
2792
+ // Perform the initial typesetting (or skip if configuration says to)
2793
+ //
2794
+ Typeset: function (element,callback) {
2795
+ if (MathJax.Hub.config.skipStartupTypeset) {return function () {}}
2796
+ return this.queue.Push(
2797
+ ["Post",this.signal,"Begin Typeset"],
2798
+ ["Typeset",MathJax.Hub,element,callback],
2799
+ ["Post",this.signal,"End Typeset"]
2800
+ );
2801
+ },
2802
+
2803
+ //
2804
+ // Create a URL in the MathJax hierarchy
2805
+ //
2806
+ URL: function (dir,name) {
2807
+ if (!name.match(/^([a-z]+:\/\/|\[|\/)/)) {name = "[MathJax]/"+dir+"/"+name}
2808
+ return name;
2809
+ },
2810
+
2811
+ //
2812
+ // Load an array of files, waiting for all of them
2813
+ // to be loaded before going on
2814
+ //
2815
+ loadArray: function (files,dir,name,synchronous) {
2816
+ if (files) {
2817
+ if (!MathJax.Object.isArray(files)) {files = [files]}
2818
+ if (files.length) {
2819
+ var queue = MathJax.Callback.Queue(), callback = {}, file;
2820
+ for (var i = 0, m = files.length; i < m; i++) {
2821
+ file = this.URL(dir,files[i]);
2822
+ if (name) {file += "/" + name}
2823
+ if (synchronous) {queue.Push(["Require",MathJax.Ajax,file,callback])}
2824
+ else {queue.Push(MathJax.Ajax.Require(file,callback))}
2825
+ }
2826
+ return queue.Push({}); // wait for everything to finish
2827
+ }
2828
+ }
2829
+ return null;
2830
+ }
2831
+
2832
+ };
2833
+
2834
+
2835
+ /**********************************************************/
2836
+
2837
+ (function (BASENAME) {
2838
+ var BASE = window[BASENAME], ROOT = "["+BASENAME+"]";
2839
+ var HUB = BASE.Hub, AJAX = BASE.Ajax, CALLBACK = BASE.Callback;
2840
+
2841
+ var JAX = MathJax.Object.Subclass({
2842
+ JAXFILE: "jax.js",
2843
+ require: null, // array of files to load before jax.js is complete
2844
+ config: {},
2845
+ //
2846
+ // Make a subclass and return an instance of it.
2847
+ // (FIXME: should we replace config with a copy of the constructor's
2848
+ // config? Otherwise all subclasses share the same config structure.)
2849
+ //
2850
+ Init: function (def,cdef) {
2851
+ if (arguments.length === 0) {return this}
2852
+ return (this.constructor.Subclass(def,cdef))();
2853
+ },
2854
+ //
2855
+ // Augment by merging with class definition (not replacing)
2856
+ //
2857
+ Augment: function (def,cdef) {
2858
+ var cObject = this.constructor, ndef = {};
2859
+ if (def != null) {
2860
+ for (var id in def) {if (def.hasOwnProperty(id)) {
2861
+ if (typeof def[id] === "function")
2862
+ {cObject.protoFunction(id,def[id])} else {ndef[id] = def[id]}
2863
+ }}
2864
+ // MSIE doesn't list toString even if it is not native so handle it separately
2865
+ if (def.toString !== cObject.prototype.toString && def.toString !== {}.toString)
2866
+ {cObject.protoFunction('toString',def.toString)}
2867
+ }
2868
+ HUB.Insert(cObject.prototype,ndef);
2869
+ cObject.Augment(null,cdef);
2870
+ return this;
2871
+ },
2872
+ Translate: function (script,state) {
2873
+ throw Error(this.directory+"/"+this.JAXFILE+" failed to define the Translate() method");
2874
+ },
2875
+ Register: function (mimetype) {},
2876
+ Config: function () {
2877
+ this.config = HUB.CombineConfig(this.id,this.config);
2878
+ if (this.config.Augment) {this.Augment(this.config.Augment)}
2879
+ },
2880
+ Startup: function () {},
2881
+ loadComplete: function (file) {
2882
+ if (file === "config.js") {
2883
+ return AJAX.loadComplete(this.directory+"/"+file);
2884
+ } else {
2885
+ var queue = CALLBACK.Queue();
2886
+ queue.Push(
2887
+ HUB.Register.StartupHook("End Config",{}), // wait until config complete
2888
+ ["Post",HUB.Startup.signal,this.id+" Jax Config"],
2889
+ ["Config",this],
2890
+ ["Post",HUB.Startup.signal,this.id+" Jax Require"],
2891
+ // Config may set the required and extensions array,
2892
+ // so use functions to delay making the reference until needed
2893
+ [function (THIS) {return MathJax.Hub.Startup.loadArray(THIS.require,this.directory)},this],
2894
+ [function (config,id) {return MathJax.Hub.Startup.loadArray(config.extensions,"extensions/"+id)},this.config||{},this.id],
2895
+ ["Post",HUB.Startup.signal,this.id+" Jax Startup"],
2896
+ ["Startup",this],
2897
+ ["Post",HUB.Startup.signal,this.id+" Jax Ready"]
2898
+ );
2899
+ if (this.copyTranslate) {
2900
+ queue.Push(
2901
+ [function (THIS) {
2902
+ THIS.preProcess = THIS.preTranslate;
2903
+ THIS.Process = THIS.Translate;
2904
+ THIS.postProcess = THIS.postTranslate;
2905
+ },this.constructor.prototype]
2906
+ );
2907
+ }
2908
+ return queue.Push(["loadComplete",AJAX,this.directory+"/"+file]);
2909
+ }
2910
+ }
2911
+ },{
2912
+ id: "Jax",
2913
+ version: "2.7.5",
2914
+ directory: ROOT+"/jax",
2915
+ extensionDir: ROOT+"/extensions"
2916
+ });
2917
+
2918
+ /***********************************/
2919
+
2920
+ BASE.InputJax = JAX.Subclass({
2921
+ elementJax: "mml", // the element jax to load for this input jax
2922
+ sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"],
2923
+ copyTranslate: true,
2924
+ Process: function (script,state) {
2925
+ var queue = CALLBACK.Queue(), file;
2926
+ // Load any needed element jax
2927
+ var jax = this.elementJax; if (!BASE.Object.isArray(jax)) {jax = [jax]}
2928
+ for (var i = 0, m = jax.length; i < m; i++) {
2929
+ file = BASE.ElementJax.directory+"/"+jax[i]+"/"+this.JAXFILE;
2930
+ if (!this.require) {this.require = []}
2931
+ else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]};
2932
+ this.require.push(file); // so Startup will wait for it to be loaded
2933
+ queue.Push(AJAX.Require(file));
2934
+ }
2935
+ // Load the input jax
2936
+ file = this.directory+"/"+this.JAXFILE;
2937
+ var load = queue.Push(AJAX.Require(file));
2938
+ if (!load.called) {
2939
+ this.constructor.prototype.Process = function () {
2940
+ if (!load.called) {return load}
2941
+ throw Error(file+" failed to load properly");
2942
+ }
2943
+ }
2944
+ // Load the associated output jax
2945
+ jax = HUB.outputJax["jax/"+jax[0]];
2946
+ if (jax) {queue.Push(AJAX.Require(jax[0].directory+"/"+this.JAXFILE))}
2947
+ return queue.Push({});
2948
+ },
2949
+ needsUpdate: function (jax) {
2950
+ var script = jax.SourceElement();
2951
+ return (jax.originalText !== BASE.HTML.getScript(script));
2952
+ },
2953
+ Register: function (mimetype) {
2954
+ if (!HUB.inputJax) {HUB.inputJax = {}}
2955
+ HUB.inputJax[mimetype] = this;
2956
+ }
2957
+ },{
2958
+ id: "InputJax",
2959
+ version: "2.7.5",
2960
+ directory: JAX.directory+"/input",
2961
+ extensionDir: JAX.extensionDir
2962
+ });
2963
+
2964
+ /***********************************/
2965
+
2966
+ BASE.OutputJax = JAX.Subclass({
2967
+ copyTranslate: true,
2968
+ preProcess: function (state) {
2969
+ var load, file = this.directory+"/"+this.JAXFILE;
2970
+ this.constructor.prototype.preProcess = function (state) {
2971
+ if (!load.called) {return load}
2972
+ throw Error(file+" failed to load properly");
2973
+ }
2974
+ load = AJAX.Require(file);
2975
+ return load;
2976
+ },
2977
+ Process: function (state) {throw Error(this.id + " output jax failed to load properly")},
2978
+ Register: function (mimetype) {
2979
+ var jax = HUB.outputJax;
2980
+ if (!jax[mimetype]) {jax[mimetype] = []}
2981
+ // If the output jax is earlier in the original configuration list, put it first here
2982
+ if (jax[mimetype].length && (this.id === HUB.config.menuSettings.renderer ||
2983
+ (jax.order[this.id]||0) < (jax.order[jax[mimetype][0].id]||0)))
2984
+ {jax[mimetype].unshift(this)} else {jax[mimetype].push(this)}
2985
+ // Make sure the element jax is loaded before Startup is called
2986
+ if (!this.require) {this.require = []}
2987
+ else if (!BASE.Object.isArray(this.require)) {this.require = [this.require]};
2988
+ this.require.push(BASE.ElementJax.directory+"/"+(mimetype.split(/\//)[1])+"/"+this.JAXFILE);
2989
+ },
2990
+ Remove: function (jax) {}
2991
+ },{
2992
+ id: "OutputJax",
2993
+ version: "2.7.5",
2994
+ directory: JAX.directory+"/output",
2995
+ extensionDir: JAX.extensionDir,
2996
+ fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts",
2997
+ imageDir: ROOT+(BASE.isPacked?"":"/..")+"/images"
2998
+ });
2999
+
3000
+ /***********************************/
3001
+
3002
+ BASE.ElementJax = JAX.Subclass({
3003
+ // make a subclass, not an instance
3004
+ Init: function (def,cdef) {return this.constructor.Subclass(def,cdef)},
3005
+
3006
+ inputJax: null,
3007
+ outputJax: null,
3008
+ inputID: null,
3009
+ originalText: "",
3010
+ mimeType: "",
3011
+ sourceMenuTitle: /*_(MathMenu)*/ ["MathMLcode","MathML Code"],
3012
+
3013
+ Text: function (text,callback) {
3014
+ var script = this.SourceElement();
3015
+ BASE.HTML.setScript(script,text);
3016
+ script.MathJax.state = this.STATE.UPDATE;
3017
+ return HUB.Update(script,callback);
3018
+ },
3019
+ Reprocess: function (callback) {
3020
+ var script = this.SourceElement();
3021
+ script.MathJax.state = this.STATE.UPDATE;
3022
+ return HUB.Reprocess(script,callback);
3023
+ },
3024
+ Update: function (callback) {return this.Rerender(callback)},
3025
+ Rerender: function (callback) {
3026
+ var script = this.SourceElement();
3027
+ script.MathJax.state = this.STATE.OUTPUT;
3028
+ return HUB.Process(script,callback);
3029
+ },
3030
+ Remove: function (keep) {
3031
+ if (this.hover) {this.hover.clear(this)}
3032
+ BASE.OutputJax[this.outputJax].Remove(this);
3033
+ if (!keep) {
3034
+ HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish?
3035
+ this.Detach();
3036
+ }
3037
+ },
3038
+ needsUpdate: function () {
3039
+ return BASE.InputJax[this.inputJax].needsUpdate(this);
3040
+ },
3041
+
3042
+ SourceElement: function () {return document.getElementById(this.inputID)},
3043
+
3044
+ Attach: function (script,inputJax) {
3045
+ var jax = script.MathJax.elementJax;
3046
+ if (script.MathJax.state === this.STATE.UPDATE) {
3047
+ jax.Clone(this);
3048
+ } else {
3049
+ jax = script.MathJax.elementJax = this;
3050
+ if (script.id) {this.inputID = script.id}
3051
+ else {script.id = this.inputID = BASE.ElementJax.GetID(); this.newID = 1}
3052
+ }
3053
+ jax.originalText = BASE.HTML.getScript(script);
3054
+ jax.inputJax = inputJax;
3055
+ if (jax.root) {jax.root.inputID = jax.inputID}
3056
+ return jax;
3057
+ },
3058
+ Detach: function () {
3059
+ var script = this.SourceElement(); if (!script) return;
3060
+ try {delete script.MathJax} catch(err) {script.MathJax = null}
3061
+ if (this.newID) {script.id = ""}
3062
+ },
3063
+ Clone: function (jax) {
3064
+ var id;
3065
+ for (id in this) {
3066
+ if (!this.hasOwnProperty(id)) continue;
3067
+ if (typeof(jax[id]) === 'undefined' && id !== 'newID') {delete this[id]}
3068
+ }
3069
+ for (id in jax) {
3070
+ if (!jax.hasOwnProperty(id)) continue;
3071
+ if (typeof(this[id]) === 'undefined' || (this[id] !== jax[id] && id !== 'inputID'))
3072
+ {this[id] = jax[id]}
3073
+ }
3074
+ }
3075
+ },{
3076
+ id: "ElementJax",
3077
+ version: "2.7.5",
3078
+ directory: JAX.directory+"/element",
3079
+ extensionDir: JAX.extensionDir,
3080
+ ID: 0, // jax counter (for IDs)
3081
+ STATE: {
3082
+ PENDING: 1, // script is identified as math but not yet processed
3083
+ PROCESSED: 2, // script has been processed
3084
+ UPDATE: 3, // elementJax should be updated
3085
+ OUTPUT: 4 // output should be updated (input is OK)
3086
+ },
3087
+
3088
+ GetID: function () {this.ID++; return "MathJax-Element-"+this.ID},
3089
+ Subclass: function () {
3090
+ var obj = JAX.Subclass.apply(this,arguments);
3091
+ obj.loadComplete = this.prototype.loadComplete;
3092
+ return obj;
3093
+ }
3094
+ });
3095
+ BASE.ElementJax.prototype.STATE = BASE.ElementJax.STATE;
3096
+
3097
+ //
3098
+ // Some "Fake" jax used to allow menu access for "Math Processing Error" messages
3099
+ //
3100
+ BASE.OutputJax.Error = {
3101
+ id: "Error", version: "2.7.5", config: {}, errors: 0,
3102
+ ContextMenu: function () {return BASE.Extension.MathEvents.Event.ContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)},
3103
+ Mousedown: function () {return BASE.Extension.MathEvents.Event.AltContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)},
3104
+ getJaxFromMath: function (math) {return (math.nextSibling.MathJax||{}).error},
3105
+ Jax: function (text,script) {
3106
+ var jax = MathJax.Hub.inputJax[script.type.replace(/ *;(.|\s)*/,"")];
3107
+ this.errors++;
3108
+ return {
3109
+ inputJax: (jax||{id:"Error"}).id, // Use Error InputJax as fallback
3110
+ outputJax: "Error",
3111
+ inputID: "MathJax-Error-"+this.errors,
3112
+ sourceMenuTitle: /*_(MathMenu)*/ ["ErrorMessage","Error Message"],
3113
+ sourceMenuFormat: "Error",
3114
+ originalText: MathJax.HTML.getScript(script),
3115
+ errorText: text
3116
+ }
3117
+ }
3118
+ };
3119
+ BASE.InputJax.Error = {
3120
+ id: "Error", version: "2.7.5", config: {},
3121
+ sourceMenuTitle: /*_(MathMenu)*/ ["Original","Original Form"]
3122
+ };
3123
+
3124
+ })("MathJax");
3125
+
3126
+ /**********************************************************/
3127
+
3128
+ (function (BASENAME) {
3129
+ var BASE = window[BASENAME];
3130
+ if (!BASE) {BASE = window[BASENAME] = {}}
3131
+
3132
+ var HUB = BASE.Hub; var STARTUP = HUB.Startup; var CONFIG = HUB.config;
3133
+ var HEAD = document.head || (document.getElementsByTagName("head")[0]);
3134
+ if (!HEAD) {HEAD = document.childNodes[0]};
3135
+ var scripts = (document.documentElement || document).getElementsByTagName("script");
3136
+ if (scripts.length === 0 && HEAD.namespaceURI)
3137
+ scripts = document.getElementsByTagNameNS(HEAD.namespaceURI,"script");
3138
+ var namePattern = new RegExp("(^|/)"+BASENAME+"\\.js(\\?.*)?$");
3139
+ for (var i = scripts.length-1; i >= 0; i--) {
3140
+ if ((scripts[i].src||"").match(namePattern)) {
3141
+ STARTUP.script = scripts[i].innerHTML;
3142
+ if (RegExp.$2) {
3143
+ var params = RegExp.$2.substr(1).split(/\&/);
3144
+ for (var j = 0, m = params.length; j < m; j++) {
3145
+ var KV = params[j].match(/(.*)=(.*)/);
3146
+ if (KV) {STARTUP.params[unescape(KV[1])] = unescape(KV[2])}
3147
+ else {STARTUP.params[params[j]] = true}
3148
+ }
3149
+ }
3150
+ CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,'');
3151
+ BASE.Ajax.config.root = CONFIG.root;
3152
+ BASE.Ajax.params = STARTUP.params;
3153
+ break;
3154
+ }
3155
+ }
3156
+
3157
+ var AGENT = navigator.userAgent;
3158
+ var BROWSERS = {
3159
+ isMac: (navigator.platform.substr(0,3) === "Mac"),
3160
+ isPC: (navigator.platform.substr(0,3) === "Win"),
3161
+ isMSIE: ("ActiveXObject" in window && "clipboardData" in window),
3162
+ isEdge: ("MSGestureEvent" in window && "chrome" in window &&
3163
+ window.chrome.loadTimes == null),
3164
+ isFirefox: (!!AGENT.match(/Gecko\//) && !AGENT.match(/like Gecko/)),
3165
+ isSafari: (!!AGENT.match(/ (Apple)?WebKit\//) && !AGENT.match(/ like iPhone /) &&
3166
+ (!window.chrome || window.chrome.app == null)),
3167
+ isChrome: ("chrome" in window && window.chrome.loadTimes != null),
3168
+ isOpera: ("opera" in window && window.opera.version != null),
3169
+ isKonqueror: ("konqueror" in window && navigator.vendor == "KDE"),
3170
+ versionAtLeast: function (v) {
3171
+ var bv = (this.version).split('.'); v = (new String(v)).split('.');
3172
+ for (var i = 0, m = v.length; i < m; i++)
3173
+ {if (bv[i] != v[i]) {return parseInt(bv[i]||"0") >= parseInt(v[i])}}
3174
+ return true;
3175
+ },
3176
+ Select: function (choices) {
3177
+ var browser = choices[HUB.Browser];
3178
+ if (browser) {return browser(HUB.Browser)}
3179
+ return null;
3180
+ }
3181
+ };
3182
+
3183
+ var xAGENT = AGENT
3184
+ .replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right
3185
+ .replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version
3186
+ .replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these
3187
+
3188
+ HUB.Browser = HUB.Insert(HUB.Insert(new String("Unknown"),{version: "0.0"}),BROWSERS);
3189
+ for (var browser in BROWSERS) {if (BROWSERS.hasOwnProperty(browser)) {
3190
+ if (BROWSERS[browser] && browser.substr(0,2) === "is") {
3191
+ browser = browser.slice(2);
3192
+ if (browser === "Mac" || browser === "PC") continue;
3193
+ HUB.Browser = HUB.Insert(new String(browser),BROWSERS);
3194
+ var VERSION = new RegExp(
3195
+ ".*(Version/| Trident/.*; rv:)((?:\\d+\\.)+\\d+)|" + // for Safari, Opera10, and IE11+
3196
+ ".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browsers
3197
+ "(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser
3198
+ var MATCH = VERSION.exec(xAGENT) || ["","","","unknown","0.0"];
3199
+ HUB.Browser.name = (MATCH[1] != "" ? browser : (MATCH[3] || MATCH[5]));
3200
+ HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6];
3201
+ break;
3202
+ }
3203
+ }};
3204
+
3205
+ //
3206
+ // Initial browser-specific info (e.g., touch up version or name, check for MathPlayer, etc.)
3207
+ // Wrap in try/catch just in case of error (see issue #1155).
3208
+ //
3209
+ try {HUB.Browser.Select({
3210
+ Safari: function (browser) {
3211
+ var v = parseInt((String(browser.version).split("."))[0]);
3212
+ if (v > 85) {browser.webkit = browser.version}
3213
+ if (v >= 538) {browser.version = "8.0"}
3214
+ else if (v >= 537) {browser.version = "7.0"}
3215
+ else if (v >= 536) {browser.version = "6.0"}
3216
+ else if (v >= 534) {browser.version = "5.1"}
3217
+ else if (v >= 533) {browser.version = "5.0"}
3218
+ else if (v >= 526) {browser.version = "4.0"}
3219
+ else if (v >= 525) {browser.version = "3.1"}
3220
+ else if (v > 500) {browser.version = "3.0"}
3221
+ else if (v > 400) {browser.version = "2.0"}
3222
+ else if (v > 85) {browser.version = "1.0"}
3223
+ browser.webkit = (navigator.appVersion.match(/WebKit\/(\d+)\./))[1];
3224
+ browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null);
3225
+ browser.noContextMenu = browser.isMobile;
3226
+ },
3227
+ Firefox: function (browser) {
3228
+ if ((browser.version === "0.0" || AGENT.match(/Firefox/) == null) &&
3229
+ navigator.product === "Gecko") {
3230
+ var rv = AGENT.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
3231
+ if (rv) {browser.version = rv[1]}
3232
+ else {
3233
+ var date = (navigator.buildID||navigator.productSub||"0").substr(0,8);
3234
+ if (date >= "20111220") {browser.version = "9.0"}
3235
+ else if (date >= "20111120") {browser.version = "8.0"}
3236
+ else if (date >= "20110927") {browser.version = "7.0"}
3237
+ else if (date >= "20110816") {browser.version = "6.0"}
3238
+ else if (date >= "20110621") {browser.version = "5.0"}
3239
+ else if (date >= "20110320") {browser.version = "4.0"}
3240
+ else if (date >= "20100121") {browser.version = "3.6"}
3241
+ else if (date >= "20090630") {browser.version = "3.5"}
3242
+ else if (date >= "20080617") {browser.version = "3.0"}
3243
+ else if (date >= "20061024") {browser.version = "2.0"}
3244
+ }
3245
+ }
3246
+ browser.isMobile = (navigator.appVersion.match(/Android/i) != null ||
3247
+ AGENT.match(/ Fennec\//) != null ||
3248
+ AGENT.match(/Mobile/) != null);
3249
+ },
3250
+ Chrome: function (browser) {
3251
+ browser.noContextMenu = browser.isMobile = !!navigator.userAgent.match(/ Mobile[ \/]/);
3252
+ },
3253
+ Opera: function (browser) {browser.version = opera.version()},
3254
+ Edge: function (browser) {
3255
+ browser.isMobile = !!navigator.userAgent.match(/ Phone/);
3256
+ },
3257
+ MSIE: function (browser) {
3258
+ browser.isMobile = !!navigator.userAgent.match(/ Phone/);
3259
+ browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance));
3260
+ MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9;
3261
+ MathJax.Hub.msieHTMLCollectionBug = (document.documentMode < 9);
3262
+ //
3263
+ // MathPlayer doesn't function properly in IE10, and not at all in IE11,
3264
+ // so don't even try to load it.
3265
+ //
3266
+ if (document.documentMode < 10 && !STARTUP.params.NoMathPlayer) {
3267
+ try {
3268
+ new ActiveXObject("MathPlayer.Factory.1");
3269
+ browser.hasMathPlayer = true;
3270
+ } catch (err) {}
3271
+ try {
3272
+ if (browser.hasMathPlayer) {
3273
+ var mathplayer = document.createElement("object");
3274
+ mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987";
3275
+ HEAD.appendChild(mathplayer);
3276
+ document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");
3277
+ browser.mpNamespace = true;
3278
+ if (document.readyState && (document.readyState === "loading" ||
3279
+ document.readyState === "interactive")) {
3280
+ document.write('<?import namespace="m" implementation="#MathPlayer">');
3281
+ browser.mpImported = true;
3282
+ }
3283
+ } else {
3284
+ // Adding any namespace avoids a crash in IE9 in IE9-standards mode
3285
+ // (any reference to document.namespaces before document.readyState is
3286
+ // "complete" causes an "unspecified error" to be thrown)
3287
+ document.namespaces.add("mjx_IE_fix","http://www.w3.org/1999/xlink");
3288
+ }
3289
+ } catch (err) {}
3290
+ }
3291
+ }
3292
+ });} catch (err) {
3293
+ console.error(err.message);
3294
+ }
3295
+ HUB.Browser.Select(MathJax.Message.browsers);
3296
+
3297
+ if (BASE.AuthorConfig && typeof BASE.AuthorConfig.AuthorInit === "function") {BASE.AuthorConfig.AuthorInit()}
3298
+ HUB.queue = BASE.Callback.Queue();
3299
+ HUB.queue.Push(
3300
+ ["Post",STARTUP.signal,"Begin"],
3301
+ ["Config",STARTUP],
3302
+ ["Cookie",STARTUP],
3303
+ ["Styles",STARTUP],
3304
+ ["Message",STARTUP],
3305
+ function () {
3306
+ // Do Jax and Extensions in parallel, but wait for them all to complete
3307
+ var queue = BASE.Callback.Queue(
3308
+ STARTUP.Jax(),
3309
+ STARTUP.Extensions()
3310
+ );
3311
+ return queue.Push({});
3312
+ },
3313
+ ["Menu",STARTUP],
3314
+ STARTUP.onLoad(),
3315
+ function () {MathJax.isReady = true}, // indicates that MathJax is ready to process math
3316
+ ["Typeset",STARTUP],
3317
+ ["Hash",STARTUP],
3318
+ ["MenuZoom",STARTUP],
3319
+ ["Post",STARTUP.signal,"End"]
3320
+ );
3321
+
3322
+ })("MathJax");
3323
+
3324
+ }}
vendor/MathJax/config/AM_CHTML-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_CHTML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/AsciiMath","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_CHTML-full.js");
vendor/MathJax/config/AM_CHTML.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_CHTML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/AsciiMath","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_CHTML.js");
vendor/MathJax/config/AM_HTMLorMML-full.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_HTMLorMML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/AsciiMath","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_HTMLorMML-full.js");
vendor/MathJax/config/AM_HTMLorMML.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_HTMLorMML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/AsciiMath","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_HTMLorMML.js");
vendor/MathJax/config/AM_SVG-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_SVG-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/AsciiMath","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_SVG-full.js");
vendor/MathJax/config/AM_SVG.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/AM_SVG.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/AsciiMath","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/AM_SVG.js");
vendor/MathJax/config/Accessible-full.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/Accessible-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"],
20
+ menuSettings: {
21
+ zoom: "Double-Click",
22
+ mpContext: true,
23
+ mpMouse: true
24
+ },
25
+ errorSettings: {
26
+ message: ["[",["MathError","Math Error"],"]"]
27
+ }
28
+ });
29
+
30
+ MathJax.Ajax.loadComplete("[MathJax]/config/Accessible-full.js");
vendor/MathJax/config/Accessible.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/Accessible.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"],
20
+ menuSettings: {
21
+ zoom: "Double-Click",
22
+ mpContext: true,
23
+ mpMouse: true
24
+ },
25
+ errorSettings: {
26
+ message: ["[",["MathError","Math Error"],"]"]
27
+ }
28
+ });
29
+
30
+ MathJax.Ajax.loadComplete("[MathJax]/config/Accessible.js");
vendor/MathJax/config/MML_CHTML-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_CHTML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/MathML","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_CHTML-full.js");
vendor/MathJax/config/MML_CHTML.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_CHTML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/MathML","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_CHTML.js");
vendor/MathJax/config/MML_HTMLorMML-full.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_HTMLorMML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_HTMLorMML-full.js");
vendor/MathJax/config/MML_HTMLorMML.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_HTMLorMML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_HTMLorMML.js");
vendor/MathJax/config/MML_SVG-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_SVG-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/MathML","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_SVG-full.js");
vendor/MathJax/config/MML_SVG.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/MML_SVG.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/MathML","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/MML_SVG.js");
vendor/MathJax/config/MMLorHTML.js ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/config/MMLorHTML.js
7
+ *
8
+ * Chooses between the NativeMML and HTML-CSS output jax depending
9
+ * on the capabilities of the browser and configuration settings
10
+ * of the page.
11
+ *
12
+ * This file should be added to the config array when configuring
13
+ * MathJax. Note that if you include this, you should NOT include
14
+ * an output jax in the jax array (it will be added for you by
15
+ * this file).
16
+ *
17
+ * You can specify the preferred output jax on a global or
18
+ * browser-by-browser basis. To specify it globally, use
19
+ *
20
+ * MathJax.Hub.Config({
21
+ * MMLorHTML: {prefer: "MML"} // or "HTML"
22
+ * });
23
+ *
24
+ * To specify on a browser-by-borwser basis, use
25
+ *
26
+ * MathJax.Hub.Config({
27
+ * MMLorHTML: {prefer: {
28
+ * MSIE: "MML",
29
+ * Firefox: "MML",
30
+ * Opera: "HTML",
31
+ * other: "HTML"
32
+ * }}
33
+ * });
34
+ *
35
+ * ---------------------------------------------------------------------
36
+ *
37
+ * Copyright (c) 2010-2018 The MathJax Consortium
38
+ *
39
+ * Licensed under the Apache License, Version 2.0 (the "License");
40
+ * you may not use this file except in compliance with the License.
41
+ * You may obtain a copy of the License at
42
+ *
43
+ * http://www.apache.org/licenses/LICENSE-2.0
44
+ *
45
+ * Unless required by applicable law or agreed to in writing, software
46
+ * distributed under the License is distributed on an "AS IS" BASIS,
47
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
48
+ * See the License for the specific language governing permissions and
49
+ * limitations under the License.
50
+ */
51
+
52
+ (function (HUB,BROWSER) {
53
+ var VERSION = "2.7.0";
54
+
55
+ var CONFIG = MathJax.Hub.CombineConfig("MMLorHTML",{
56
+ prefer: {
57
+ MSIE:"MML",
58
+ Firefox:"HTML",
59
+ Opera:"HTML",
60
+ Chrome:"HTML",
61
+ Safari:"HTML",
62
+ other:"HTML"
63
+ }
64
+ });
65
+
66
+ var MINBROWSERVERSION = {
67
+ Firefox: 3.0,
68
+ Opera: 9.52,
69
+ MSIE: 6.0,
70
+ Chrome: 0.3,
71
+ Safari: 2.0,
72
+ Konqueror: 4.0
73
+ };
74
+
75
+ var canUseHTML = (BROWSER.version === "0.0" ||
76
+ BROWSER.versionAtLeast(MINBROWSERVERSION[BROWSER]||0.0));
77
+
78
+ var canUseMML = (BROWSER.isFirefox && BROWSER.versionAtLeast("1.5")) ||
79
+ (BROWSER.isMSIE && BROWSER.hasMathPlayer) ||
80
+ (BROWSER.isSafari && BROWSER.versionAtLeast("5.0")) ||
81
+ (BROWSER.isOpera && BROWSER.versionAtLeast("9.52"));
82
+
83
+ HUB.Register.StartupHook("End Config",function () {
84
+ var prefer = (CONFIG.prefer && typeof(CONFIG.prefer) === "object" ?
85
+ CONFIG.prefer[MathJax.Hub.Browser]||CONFIG.prefer.other||"HTML" :
86
+ CONFIG.prefer);
87
+
88
+ if (canUseHTML || canUseMML) {
89
+ if (canUseMML && (prefer === "MML" || !canUseHTML)) {
90
+ if (MathJax.OutputJax.NativeMML) {MathJax.OutputJax.NativeMML.Register("jax/mml")}
91
+ else {HUB.config.jax.unshift("output/NativeMML")}
92
+ HUB.Startup.signal.Post("NativeMML output selected");
93
+ } else {
94
+ if (MathJax.OutputJax["HTML-CSS"]) {MathJax.OutputJax["HTML-CSS"].Register("jax/mml")}
95
+ else {HUB.config.jax.unshift("output/HTML-CSS")}
96
+ HUB.Startup.signal.Post("HTML-CSS output selected");
97
+ }
98
+ } else {
99
+ HUB.PreProcess.disabled = true;
100
+ HUB.prepareScripts.disabled = true;
101
+ MathJax.Message.Set(
102
+ ["MathJaxNotSupported","Your browser does not support MathJax"],
103
+ null,4000
104
+ );
105
+ HUB.Startup.signal.Post("MathJax not supported");
106
+ }
107
+ });
108
+
109
+ })(MathJax.Hub,MathJax.Hub.Browser);
110
+
111
+ MathJax.Ajax.loadComplete("[MathJax]/config/MMLorHTML.js");
vendor/MathJax/config/Safe.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/config/Safe.js
7
+ *
8
+ * Allows you to load the Safe extension as part of the config list
9
+ * when you load MathJax.js, e.g.
10
+ *
11
+ * <script
12
+ * src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML,Safe">
13
+ * </script>
14
+ *
15
+ * ---------------------------------------------------------------------
16
+ *
17
+ * Copyright (c) 2013-2018 The MathJax Consortium
18
+ *
19
+ * Licensed under the Apache License, Version 2.0 (the "License");
20
+ * you may not use this file except in compliance with the License.
21
+ * You may obtain a copy of the License at
22
+ *
23
+ * http://www.apache.org/licenses/LICENSE-2.0
24
+ *
25
+ * Unless required by applicable law or agreed to in writing, software
26
+ * distributed under the License is distributed on an "AS IS" BASIS,
27
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
+ * See the License for the specific language governing permissions and
29
+ * limitations under the License.
30
+ */
31
+
32
+ MathJax.Hub.Register.StartupHook("End Config", function () {
33
+ if (!MathJax.Hub.config.extensions) {MathJax.Hub.config.extensions = []}
34
+ MathJax.Hub.config.extensions.push("Safe.js");
35
+ });
36
+
37
+ MathJax.Ajax.loadComplete("[MathJax]/config/Safe.js");
vendor/MathJax/config/TeX-AMS-MML_HTMLorMML-full.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS-MML_HTMLorMML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS-MML_HTMLorMML-full.js");
vendor/MathJax/config/TeX-AMS-MML_HTMLorMML.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS-MML_HTMLorMML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS-MML_HTMLorMML.js");
vendor/MathJax/config/TeX-AMS-MML_SVG-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS-MML_SVG-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS-MML_SVG-full.js");
vendor/MathJax/config/TeX-AMS-MML_SVG.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS-MML_SVG.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS-MML_SVG.js");
vendor/MathJax/config/TeX-AMS_CHTML-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_CHTML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_CHTML-full.js");
vendor/MathJax/config/TeX-AMS_CHTML.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_CHTML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_CHTML.js");
vendor/MathJax/config/TeX-AMS_HTML-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_HTML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/HTML-CSS","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_HTML-full.js");
vendor/MathJax/config/TeX-AMS_HTML.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_HTML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/HTML-CSS","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_HTML.js");
vendor/MathJax/config/TeX-AMS_SVG-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_SVG-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_SVG-full.js");
vendor/MathJax/config/TeX-AMS_SVG.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-AMS_SVG.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-AMS_SVG.js");
vendor/MathJax/config/TeX-MML-AM_CHTML-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_CHTML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_CHTML-full.js");
vendor/MathJax/config/TeX-MML-AM_CHTML.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_CHTML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/CommonHTML","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_CHTML.js");
vendor/MathJax/config/TeX-MML-AM_HTMLorMML-full.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_HTMLorMML-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_HTMLorMML-full.js");
vendor/MathJax/config/TeX-MML-AM_HTMLorMML.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_HTMLorMML.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ config: ["MMLorHTML.js"],
18
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
19
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/HTML-CSS","output/NativeMML","output/PreviewHTML"]
20
+ });
21
+
22
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_HTMLorMML.js");
vendor/MathJax/config/TeX-MML-AM_SVG-full.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_SVG-full.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_SVG-full.js");
vendor/MathJax/config/TeX-MML-AM_SVG.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * /MathJax/unpacked/config/TeX-MML-AM_SVG.js
4
+ *
5
+ * Copyright (c) 2010-2018 The MathJax Consortium
6
+ *
7
+ * Part of the MathJax library.
8
+ * See http://www.mathjax.org for details.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0;
11
+ * you may not use this file except in compliance with the License.
12
+ *
13
+ * http://www.apache.org/licenses/LICENSE-2.0
14
+ */
15
+
16
+ MathJax.Hub.Config({
17
+ extensions: ["tex2jax.js","mml2jax.js","asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js","TeX/noErrors.js","TeX/noUndefined.js","TeX/AMSmath.js","TeX/AMSsymbols.js","fast-preview.js","AssistiveMML.js","[a11y]/accessibility-menu.js"],
18
+ jax: ["input/TeX","input/MathML","input/AsciiMath","output/SVG","output/PreviewHTML"]
19
+ });
20
+
21
+ MathJax.Ajax.loadComplete("[MathJax]/config/TeX-MML-AM_SVG.js");
vendor/MathJax/config/default.js ADDED
@@ -0,0 +1,1104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/config/default.js
7
+ *
8
+ * This configuration file is loaded when you load MathJax
9
+ * via <script src="MathJax.js?config=default"></script>
10
+ *
11
+ * Use it to customize the MathJax settings. See comments below.
12
+ *
13
+ * ---------------------------------------------------------------------
14
+ *
15
+ * Copyright (c) 2009-2018 The MathJax Consortium
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an "AS IS" BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+
31
+ /*
32
+ * This file lists most, but not all, of the options that can be set for
33
+ * MathJax and its various components. Some additional options are
34
+ * available, however, and are listed in the various links at:
35
+ *
36
+ * http://www.mathjax.org/resources/docs/?configuration.html#configuration-options-by-component
37
+ *
38
+ * You can add these to the configuration object below if you
39
+ * want to change them from their default values.
40
+ */
41
+
42
+ MathJax.Hub.Config({
43
+
44
+ //
45
+ // A comma-separated list of configuration files to load
46
+ // when MathJax starts up. E.g., to define local macros, etc.
47
+ // The default directory is the MathJax/config directory.
48
+ //
49
+ // Example: config: ["local/local.js"],
50
+ // Example: config: ["local/local.js","MMLtoHTML.js"],
51
+ //
52
+ config: [],
53
+
54
+ //
55
+ // A comma-separated list of CSS stylesheet files to be loaded
56
+ // when MathJax starts up. The default directory is the
57
+ // MathJax/config directory.
58
+ //
59
+ // Example: styleSheets: ["MathJax.css"],
60
+ //
61
+ styleSheets: [],
62
+
63
+ //
64
+ // Styles to be defined dynamically at startup time.
65
+ //
66
+ // Example:
67
+ // styles: {
68
+ // ".MathJax_Preview": {
69
+ // color: "#888"
70
+ // }
71
+ // },
72
+ //
73
+ styles: {},
74
+
75
+ //
76
+ // A comma-separated list of input and output jax to initialize at startup.
77
+ // Their main code is loaded only when they are actually used, so it is not
78
+ // inefficient to include jax that may not actually be used on the page. These
79
+ // are found in the MathJax/jax directory. The choices include
80
+ //
81
+ // input/TeX
82
+ // input/MathML
83
+ // input/AsciiMath
84
+ //
85
+ // output/HTML-CSS
86
+ // output/NativeMML
87
+ // output/SVG
88
+ //
89
+ // If you change the input jax, you may need to include the appropriate
90
+ // preprocessor in the extensions array below.
91
+ //
92
+ jax: ["input/TeX", "output/HTML-CSS"],
93
+
94
+ //
95
+ // A comma-separated list of extensions to load at startup. The default
96
+ // directory is MathJax/extensions.
97
+ //
98
+ // Example: extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"],
99
+ //
100
+ // You may wish to include "mml2jax.js" if you are using "input/MathML" in the
101
+ // jax array above, and "asciimath2jax.js" if you using "input/AsciiMath".
102
+ // Include "jsmath2jax.js" if you are converting from using jsMath to MathJax.
103
+ //
104
+ extensions: ["tex2jax.js"],
105
+
106
+ //
107
+ // Patterns to remove from before and after math script tags. If you are not
108
+ // using one of the preprocessors (e.g., tex2jax), you need to insert something
109
+ // extra into your HTML file in order to avoid a bug in Internet Explorer. IE
110
+ // removes spaces from the DOM that it thinks are redundent, and since a SCRIPT
111
+ // tag usually doesn't add content to the page, if there is a space before and after
112
+ // a MathJax SCRIPT tag, IE will remove the first space. When MathJax inserts
113
+ // the typeset mathematics, this means there will be no space before it and the
114
+ // preceding text. In order to avoid this, you should include some "guard characters"
115
+ // before or after the math SCRIPT tag; define the patterns you want to use below.
116
+ // Note that these are used as regular expressions, so you will need to quote
117
+ // special characters. Furthermore, since they are javascript strings, you must
118
+ // quote javascript special characters as well. So to obtain a backslash, you must
119
+ // use \\ (doubled for javascript). For example, "\\[" is the pattern \[ in the
120
+ // regular expression. That means that if you want an actual backslash in your
121
+ // guard characters, you need to use "\\\\" in order to get \\ in the regular
122
+ // expression, and \ in the actual text. If both preJax and postJax are defined,
123
+ // both must be present in order to be removed.
124
+ //
125
+ // See also the preRemoveClass comments below.
126
+ //
127
+ // Example:
128
+ // preJax: "\\\\\\\\", // makes a double backslash the preJax text
129
+ // or
130
+ // preJax: "\\[\\[", // jax scripts must be enclosed in double brackets
131
+ // postJax: "\\]\\]",
132
+ //
133
+ preJax: null,
134
+ postJax: null,
135
+
136
+ //
137
+ // The CSS class for a math preview to be removed preceding a MathJax
138
+ // SCRIPT tag. If the tag just before the MathJax SCRIPT tag is of this
139
+ // class, its contents are removed when MathJax processes the SCRIPT
140
+ // tag. This allows you to include a math preview in a form that will
141
+ // be displayed prior to MathJax performing its typesetting. It also
142
+ // avoids the Internet Explorer space-removal bug, and can be used in
143
+ // place of preJax and postJax if that is more convenient.
144
+ //
145
+ // For example
146
+ //
147
+ // <span class="MathJax_Preview">[math]</span><script type="math/tex">...</script>
148
+ //
149
+ // would display "[math]" in place of the math until MathJax is able to typeset it.
150
+ //
151
+ preRemoveClass: "MathJax_Preview",
152
+
153
+ //
154
+ // This value controls whether the "Processing Math: nn%" message are displayed
155
+ // in the lower left-hand corner. Set to "false" to prevent those messages (though
156
+ // file loading and other messages will still be shown).
157
+ //
158
+ showProcessingMessages: true,
159
+
160
+ //
161
+ // This value controls the verbosity of the messages in the lower left-hand corner.
162
+ // Set it to "none" to eliminate all messages, or set it to "simple" to show
163
+ // "Loading..." and "Processing..." rather than showing the full file name and the
164
+ // percentage of the mathematics processed.
165
+ //
166
+ messageStyle: "normal",
167
+
168
+ //
169
+ // These two parameters control the alignment and shifting of displayed equations.
170
+ // The first can be "left", "center", or "right", and determines the alignment of
171
+ // displayed equations. When the alignment is not "center", the second determines
172
+ // an indentation from the left or right side for the displayed equations. When
173
+ // the alignment is "center", the indent allows you to shift the center to the right
174
+ // or left (negative is left).
175
+ //
176
+ displayAlign: "center",
177
+ displayIndent: "0",
178
+
179
+ //
180
+ // Normally MathJax will perform its starup commands (loading of
181
+ // configuration, styles, jax, and so on) as soon as it can. If you
182
+ // expect to be doing additional configuration on the page, however, you
183
+ // may want to have it wait until the page's onload hander is called. If so,
184
+ // set this to "onload".
185
+ //
186
+ delayStartupUntil: "none",
187
+
188
+ //
189
+ // Normally MathJax will typeset the mathematics on the page as soon as
190
+ // the page is loaded. If you want to delay that process, in which case
191
+ // you will need to call MathJax.Hub.Typeset() yourself by hand, set
192
+ // this value to true.
193
+ //
194
+ skipStartupTypeset: false,
195
+
196
+ //
197
+ // A list of element ID's that are the ones to process for mathematics
198
+ // when any of the Hub typesetting calls (Typeset, Process, Update, etc)
199
+ // are called with no element specified. This lets you restrict the
200
+ // processing to particular containers rather than scanning the entire
201
+ // document for mathematics. If none are supplied, the entire document
202
+ // is processed.
203
+ //
204
+ elements: [],
205
+
206
+ //
207
+ // Since typesetting usually changes the vertical dimensions of the
208
+ // page, if the URL contains an anchor position you may no longer be
209
+ // positioned at the correct position on the page, so MathJax can
210
+ // reposition to that location after it completes its initial
211
+ // typesetting of the page. This value controls whether MathJax will
212
+ // reposition the browser to the #hash location from the page URL after
213
+ // typesetting for the page.
214
+ //
215
+ positionToHash: true,
216
+
217
+ //
218
+ // These control whether to attach the MathJax contextual menu to the
219
+ // expressions typeset by MathJax. Since the code for handling
220
+ // MathPlayer in Internet Explorer is somewhat delicate, it is
221
+ // controlled separately via (showMathMenuMSIE). The latter is now
222
+ // deprecated in favor of the MathJax contextual menu settings for
223
+ // MathPlayer.
224
+ //
225
+ // These values used to be listed in the separate output jax, but
226
+ // have been moved to this more central location since they are shared
227
+ // by all output jax.
228
+ //
229
+ showMathMenu: true,
230
+ showMathMenuMSIE: true,
231
+
232
+
233
+ //
234
+ // The default settings for the MathJax contextual menu (overridden by
235
+ // the MathJax cookie when users change the menu settings).
236
+ //
237
+ menuSettings: {
238
+ zoom: "None", // when to do MathZoom
239
+ CTRL: false, // require CTRL for MathZoom?
240
+ ALT: false, // require Alt or Option?
241
+ CMD: false, // require CMD?
242
+ Shift: false, // require Shift?
243
+ discoverable: false, // make math menu discoverable on hover?
244
+ zscale: "200%", // the scaling factor for MathZoom
245
+ renderer: null, // set when Jax are loaded
246
+ font: "Auto", // what font HTML-CSS should use
247
+ context: "MathJax", // or "Browser" for pass-through to browser menu
248
+ locale: null, // the language to use for messages
249
+ mpContext: false, // true means pass menu events to MathPlayer in IE
250
+ mpMouse: false, // true means pass mouse events to MathPlayer in IE
251
+ texHints: true, // include class names for TeXAtom elements
252
+ FastPreview: null, // use PreviewHTML output as preview?
253
+ assistiveMML: null, // include hidden MathML for screen readers?
254
+ inTabOrder: true, // set to true if math elements should be included in the tabindex
255
+ semantics: false // add semantics tag with original form in MathML output
256
+ },
257
+
258
+ //
259
+ // The message and style for when there is a processing error handling
260
+ // the mathematics (something has gone wrong with the input or output
261
+ // jax that prevents it from operating properly).
262
+ //
263
+ errorSettings: {
264
+ message: ["[",["MathProcessingError","Math Processing Error"],"]"],
265
+ style: {color: "#CC0000", "font-style":"italic"} // style for message
266
+ },
267
+
268
+
269
+ //============================================================================
270
+ //
271
+ // These parameters control the tex2jax preprocessor (when you have included
272
+ // "tex2jax.js" in the extensions list above).
273
+ //
274
+ tex2jax: {
275
+
276
+ //
277
+ // The delimiters that surround in-line math expressions. The first in each
278
+ // pair is the initial delimiter and the second is the terminal delimiter.
279
+ // Comment out any that you don't want, but be sure there is no extra
280
+ // comma at the end of the last item in the list -- some browsers won't
281
+ // be able to handle that.
282
+ //
283
+ inlineMath: [
284
+ // ['$','$'], // uncomment this for standard TeX math delimiters
285
+ ['\\(','\\)']
286
+ ],
287
+
288
+ //
289
+ // The delimiters that surround displayed math expressions. The first in each
290
+ // pair is the initial delimiter and the second is the terminal delimiter.
291
+ // Comment out any that you don't want, but be sure there is no extra
292
+ // comma at the end of the last item in the list -- some browsers won't
293
+ // be able to handle that.
294
+ //
295
+ displayMath: [
296
+ ['$$','$$'],
297
+ ['\\[','\\]']
298
+ ],
299
+
300
+ //
301
+ // This array lists the names of the tags whose contents should not be
302
+ // processed by tex2jax (other than to look for ignore/process classes
303
+ // as listed below). You can add to (or remove from) this list to prevent
304
+ // MathJax from processing mathematics in specific contexts.
305
+ //
306
+ skipTags: ["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],
307
+
308
+ //
309
+ // This is the class name used to mark elements whose contents should
310
+ // not be processed by tex2jax (other than to look for the
311
+ // processClass pattern below). Note that this is a regular
312
+ // expression, and so you need to be sure to quote any regexp special
313
+ // characters. The pattern is automatically preceded by '(^| )(' and
314
+ // followed by ')( |$)', so your pattern will have to match full words
315
+ // in the class name. Assigning an element this class name will
316
+ // prevent `tex2jax` from processing its contents.
317
+ //
318
+ ignoreClass: "tex2jax_ignore",
319
+
320
+ //
321
+ // This is the class name used to mark elements whose contents SHOULD
322
+ // be processed by tex2jax. This is used to turn on processing within
323
+ // tags that have been marked as ignored or skipped above. Note that
324
+ // this is a regular expression, and so you need to be sure to quote
325
+ // any regexp special characters. The pattern is automatically
326
+ // preceded by '(^| )(' and followed by ')( |$)', so your pattern
327
+ // will have to match full words in the class name. Use this to
328
+ // restart processing within an element that has been marked as
329
+ // ignored above.
330
+ //
331
+ processClass: "tex2jax_process",
332
+
333
+ //
334
+ // Set to "true" to allow \$ to produce a dollar without starting in-line
335
+ // math mode. If you uncomment the ['$','$'] line above, you should change
336
+ // this to true so that you can insert plain dollar signs into your documents
337
+ //
338
+ processEscapes: false,
339
+
340
+ //
341
+ // Controls whether tex2jax processes LaTeX environments outside of math
342
+ // mode. Set to "false" to prevent processing of environments except within
343
+ // math mode.
344
+ //
345
+ processEnvironments: true,
346
+
347
+ //
348
+ // Controls whether tex2jax processes \ref{...} commands outside
349
+ // of math mode. Set to "false" to prevent processing of \ref
350
+ // except within math mode.
351
+ //
352
+ processRefs: true,
353
+
354
+ //
355
+ // Controls whether tex2jax inserts MathJax_Preview spans to make a
356
+ // preview available, and what preview to use, when it locates in-line
357
+ // and display mathetics on the page. The default is "TeX", which
358
+ // means use the TeX code as the preview (until it is processed by
359
+ // MathJax). Set to "none" to prevent the previews from being
360
+ // inserted (the math will simply disappear until it is typeset). Set
361
+ // to an array containing the description of an HTML snippet in order
362
+ // to use the same preview for all equations on the page (e.g., you
363
+ // could have it say "[math]" or load an image).
364
+ //
365
+ // E.g., preview: ["[math]"],
366
+ // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]]
367
+ //
368
+ preview: "TeX"
369
+
370
+ },
371
+
372
+ //============================================================================
373
+ //
374
+ // These parameters control the asciimath2jax preprocessor (when you have included
375
+ // "asciimath2jax.js" in the extensions list above).
376
+ //
377
+ asciimath2jax: {
378
+
379
+ //
380
+ // The delimiters that surround asciimath expressions. The first in each
381
+ // pair is the initial delimiter and the second is the terminal delimiter.
382
+ //
383
+ delimiters: [
384
+ ['`','`']
385
+ ],
386
+
387
+ //
388
+ // This array lists the names of the tags whose contents should not be
389
+ // processed by asciimath2jax (other than to look for ignore/process classes
390
+ // as listed below). You can add to (or remove from) this list to prevent
391
+ // MathJax from processing mathematics in specific contexts.
392
+ //
393
+ skipTags: ["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],
394
+
395
+ //
396
+ // This is the class name used to mark elements whose contents should
397
+ // not be processed by asciimath2jax (other than to look for the
398
+ // processClass pattern below). Note that this is a regular
399
+ // expression, and so you need to be sure to quote any regexp special
400
+ // characters. The pattern is automatically preceded by '(^| )(' and
401
+ // followed by ')( |$)', so your pattern will have to match full words
402
+ // in the class name. Assigning an element this class name will
403
+ // prevent `asciimath2jax` from processing its contents.
404
+ //
405
+ ignoreClass: "asciimath2jax_ignore",
406
+
407
+ //
408
+ // This is the class name used to mark elements whose contents SHOULD
409
+ // be processed by asciimath2jax. This is used to turn on processing
410
+ // within tags that have been marked as ignored or skipped above.
411
+ // Note that this is a regular expression, and so you need to be sure
412
+ // to quote any regexp special characters. The pattern is
413
+ // automatically preceded by '(^| )(' and followed by ')( |$)', so
414
+ // your pattern will have to match full words in the class name. Use
415
+ // this to restart processing within an element that has been marked
416
+ // as ignored above.
417
+ //
418
+ processClass: "asciimath2jax_process",
419
+
420
+ // Controls whether asciimath2jax inserts MathJax_Preview spans to make a
421
+ // preview available, and what preview to use, when it locates in-line
422
+ // and display mathetics on the page. The default is "AsciiMath", which
423
+ // means use the AsciiMath code as the preview (until it is processed by
424
+ // MathJax). Set to "none" to prevent the previews from being
425
+ // inserted (the math will simply disappear until it is typeset). Set
426
+ // to an array containing the description of an HTML snippet in order
427
+ // to use the same preview for all equations on the page (e.g., you
428
+ // could have it say "[math]" or load an image).
429
+ //
430
+ // E.g., preview: ["[math]"],
431
+ // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]]
432
+ //
433
+ preview: "AsciiMath"
434
+
435
+ },
436
+
437
+ //============================================================================
438
+ //
439
+ // These parameters control the mml2jax preprocessor (when you have included
440
+ // "mml2jax.js" in the extensions list above).
441
+ //
442
+ mml2jax: {
443
+
444
+ //
445
+ // Controls whether mml2jax inserts MathJax_Preview spans to make a
446
+ // preview available, and what preview to use, when it locates
447
+ // mathematics on the page. The default is "mathml" which means use
448
+ // the <math> tag as the preview (until it is processed by MathJax).
449
+ // Set to "alttext", to use the <math> tag's alttext attribute as the
450
+ // preview, if the tag has one. Set to "none" to
451
+ // prevent the previews from being inserted (the math will simply
452
+ // disappear until it is typeset). Set to "altimg" to use an image
453
+ // described by the altimg* attributes of the <math> element.
454
+ // Set to an array containing the
455
+ // description of an HTML snippet in order to use the same preview for
456
+ // all equations on the page (e.g., you could have it say "[math]" or
457
+ // load an image).
458
+ //
459
+ // E.g., preview: ["[math]"],
460
+ // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]]
461
+ //
462
+ preview: "mathml"
463
+
464
+ },
465
+
466
+ //============================================================================
467
+ //
468
+ // These parameters control the jsMath2jax preprocessor (when you have included
469
+ // "jsMath2jax.js" in the extensions list above).
470
+ //
471
+ jsMath2jax: {
472
+
473
+ //
474
+ // Controls whether jsMath2jax inserts MathJax_Preview spans to make a
475
+ // preview available, and what preview to use, when it locates
476
+ // mathematics on the page. The default is "TeX", which means use the
477
+ // TeX code as the preview (until it is processed by MathJax). Set to
478
+ // "none" to prevent the previews from being inserted (the math will
479
+ // simply disappear until it is typeset). Set to an array containing
480
+ // the description of an HTML snippet in order to use the same preview
481
+ // for all equations on the page (e.g., you could have it say "[math]"
482
+ // or load an image).
483
+ //
484
+ // E.g., preview: ["[math]"],
485
+ // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]]
486
+ //
487
+ preview: "TeX"
488
+
489
+ },
490
+
491
+ //============================================================================
492
+ //
493
+ // These parameters control the TeX input jax.
494
+ //
495
+ TeX: {
496
+
497
+ //
498
+ // This specifies the side on which \tag{} macros will place the tags.
499
+ // Set to "left" to place on the left-hand side.
500
+ //
501
+ TagSide: "right",
502
+
503
+ //
504
+ // This is the amound of indentation (from right or left) for the tags.
505
+ //
506
+ TagIndent: "0.8em",
507
+
508
+ //
509
+ // This is the width to use for the multline environment
510
+ //
511
+ MultLineWidth: "85%",
512
+
513
+ //
514
+ // List of macros to define. These are of the form
515
+ // name: value
516
+ // where 'value' is the replacement text for the macro \name.
517
+ // The 'value' can also be [value,n] where 'value' is the replacement
518
+ // text and 'n' is the number of parameters for the macro.
519
+ // Note that backslashes must be doubled in the replacement string.
520
+ //
521
+ // E.g.,
522
+ //
523
+ // Macros: {
524
+ // RR: '{\\bf R}',
525
+ // bold: ['{\\bf #1}', 1]
526
+ // }
527
+ //
528
+ Macros: {},
529
+
530
+ //
531
+ // Equation numbering parameters.
532
+ //
533
+ equationNumbers: {
534
+ autoNumber: "none", // "AMS" for standard AMS environment numbering,
535
+ // or "all" to number all displayed equations
536
+ // formatNumber: function (n) {return n}, // format for equation number n
537
+ // formatTag: function (n) {return '('+n+')'}, // format for \tag and \eqref
538
+ // formatID: function (n) {return 'mjx-eqn-'+String(n).replace(/\s/g,"_")},
539
+ // // element ID to use for reference
540
+ // formatURL: function (id,base) {return base+'#'+encodeURIComponent(id)},
541
+ // // URL to use for references
542
+ useLabelIds: true // make element ID's use \label name rather than equation number
543
+ },
544
+
545
+ //
546
+ // Controls the TeX/noErrors extension
547
+ //
548
+ noErrors: {
549
+ disabled: false, // set to true to return to original error messages
550
+ multiLine: true, // false to not include original line breaks
551
+ inlineDelimiters: ["",""], // or use ["$","$"] or ["\\(","\\)"] to put back delimiters
552
+ style: {
553
+ "font-size": "90%",
554
+ "text-align": "left",
555
+ "color": "black",
556
+ "padding": "1px 3px",
557
+ "border": "1px solid"
558
+ }
559
+ },
560
+
561
+ //
562
+ // Controls the TeX/noUndefined extension
563
+ //
564
+ noUndefined: {
565
+ disabled: false, // set to true to return to original error messages
566
+ attributes: { // attributes to set for the undefined control sequence
567
+ mathcolor: "red"
568
+ }
569
+ },
570
+
571
+ //
572
+ // Controls the TeX/unicode extension
573
+ unicode: {
574
+ fonts: "STIXGeneral,'Arial Unicode MS'" // the default font list for unknown characters
575
+ }
576
+
577
+ },
578
+
579
+ //============================================================================
580
+ //
581
+ // These parameters control the AsciiMath input jax.
582
+ //
583
+ AsciiMath: {
584
+ //
585
+ // Determines whether the unicode positions for phi and varphi are
586
+ // to be swapped or not. (Unicode originally had these reversed, and
587
+ // many fonts have them reversed as well.) When set to true, phi
588
+ // and varphi will correspond to the LaTeX macros of the same name.
589
+ //
590
+ fixphi: true,
591
+
592
+ //
593
+ // Determines whether the MathML should be marked so that the HTML-CSS
594
+ // and SVG output jax will use MathML spacing rules rather than TeX
595
+ // spacing rules. Since AsciiMath was designed for MathML output, the
596
+ // MathML rules are used by default.
597
+ //
598
+ useMathMLspacing: true,
599
+
600
+ //
601
+ // Determines whether limits are placed above and below operators,
602
+ // or next to them. (AsciiMath doesn't have separate in-line and
603
+ // display modes like TeX and MathML do, so this is the only control
604
+ // you have over its output)
605
+ //
606
+ displaystyle: true,
607
+
608
+ //
609
+ // The character to use for decimal places when scanning for a number.
610
+ // If you change it to ",", beware of things like "(1,2)" which would need
611
+ // to be changed to "(1, 2)" to be parsed correctly.
612
+ //
613
+ decimal: "."
614
+ },
615
+
616
+ //============================================================================
617
+ //
618
+ // These parameters control the MathML input jax.
619
+ //
620
+ MathML: {
621
+ //
622
+ // This specifies whether to use TeX spacing or MathML spacing when the
623
+ // HTML-CSS output jax is used.
624
+ //
625
+ useMathMLspacing: false
626
+ },
627
+
628
+ //============================================================================
629
+ //
630
+ // These parameters control the HTML-CSS output jax.
631
+ //
632
+ "HTML-CSS": {
633
+
634
+ //
635
+ // This controls the global scaling of mathematics as compared to the
636
+ // surrounding text. Values between 100 and 133 are usually good choices.
637
+ //
638
+ scale: 100,
639
+
640
+ //
641
+ // Don't allow the matching of math text to surrounding text to use a scaling
642
+ // factor smaller than this.
643
+ //
644
+ minScaleAdjust: 50,
645
+
646
+ //
647
+ // This is a list of the fonts to look for on a user's computer in
648
+ // preference to using MathJax's web-based fonts. These must
649
+ // correspond to directories available in the jax/output/HTML-CSS/fonts
650
+ // directory, where MathJax stores data about the characters available
651
+ // in the fonts. Set this to ["TeX"], for example, to prevent the
652
+ // use of the STIX fonts, or set it to an empty list, [], if
653
+ // you want to force MathJax to use web-based or image fonts.
654
+ //
655
+ availableFonts: ["STIX","TeX"],
656
+
657
+ //
658
+ // This is the preferred font to use when more than one of those
659
+ // listed above is available.
660
+ //
661
+ preferredFont: "TeX",
662
+
663
+ //
664
+ // This is the web-based font to use when none of the fonts listed
665
+ // above are available on the user's computer. Note that currently
666
+ // only the TeX font is available in a web-based form. Set this to
667
+ //
668
+ // webFont: null,
669
+ //
670
+ // if you want to prevent the use of web-based fonts.
671
+ //
672
+ webFont: "TeX",
673
+
674
+ //
675
+ // This is the font to use for image fallback mode (when none of the
676
+ // fonts listed above are available and the browser doesn't support
677
+ // web-fonts via the @font-face CSS directive). Note that currently
678
+ // only the TeX font is available as an image font. Set this to
679
+ //
680
+ // imageFont: null,
681
+ //
682
+ // if you want to prevent the use of image fonts (e.g., you have not
683
+ // installed the image fonts on your server). In this case, only
684
+ // browsers that support web-based fonts will be able to view your pages
685
+ // without having the fonts installed on the client computer. The browsers
686
+ // that support web-based fonts include: IE6 and later, Chrome, Safari3.1
687
+ // and above, Firefox3.5 and later, and Opera10 and later. Note that
688
+ // Firefox3.0 is NOT on this list, so without image fonts, FF3.0 users
689
+ // will be required to to download and install either the STIX fonts or the
690
+ // MathJax TeX fonts.
691
+ //
692
+ imageFont: "TeX",
693
+
694
+ //
695
+ // This is the font-family CSS value used for characters that are not
696
+ // in the selected font (e.g., for web-based fonts, this is where to
697
+ // look for characters not included in the MathJax_* fonts). IE will
698
+ // stop looking after the first font that exists on the system (even
699
+ // if it doesn't contain the needed character), so order these carefully.
700
+ //
701
+ undefinedFamily: "STIXGeneral,'Arial Unicode MS',serif",
702
+
703
+ //
704
+ // This setting controls whether <mtext> elements will be typeset
705
+ // using the math fonts or the font of the surrounding text. When
706
+ // false, the mathvariant="normal" font will be used; when true,
707
+ // the font will be inherited from the surrounding paragraph.
708
+ //
709
+ mtextFontInherit: false,
710
+
711
+ //
712
+ // These values control how "chunky" the display of mathematical
713
+ // expressions will be.
714
+ //
715
+ // EqnChunk is the number of equations that will be typeset before
716
+ // they appear on screen. Larger values make for less visual flicker
717
+ // as the equations are drawn, but also mean longer delays before the
718
+ // reader sees anything.
719
+ //
720
+ // EqChunkFactor is the factor by which the EqnChunk will grow after each
721
+ // chunk is displayed.
722
+ //
723
+ // EqChunkDelay is the time (in milliseconds) to delay between chunks
724
+ // (to allow the browser to respond to other user interaction).
725
+ //
726
+ // Set EqnChunk to 1, EqnChunkFactor to 1, and EqnChunkDelay to 10 to get
727
+ // the behavior from MathJax v1.1 and below.
728
+ //
729
+ EqnChunk: 50,
730
+ EqnChunkFactor: 1.5,
731
+ EqnChunkDelay: 100,
732
+
733
+ //
734
+ // This option indicates whether MathJax should try to correct the
735
+ // x-height of equations to match the size of the surrounding text.
736
+ //
737
+ matchFontHeight: true,
738
+
739
+ //
740
+ // When true, MathJax will not measure the widths or heights of the
741
+ // subexpressions as it creates its output, but instead will rely on
742
+ // its internal calculations based on the bounding boxes of the
743
+ // characters it uses, and will only take measurements when it
744
+ // absolutely has to. Since measurements cause display reflows, they
745
+ // slows down MathJax considerably, so without them MathJax runs
746
+ // faster, but can produce slightly less accurate character placements,
747
+ // especially in width fractions or roots.
748
+ //
749
+ noReflows: true,
750
+
751
+
752
+ //
753
+ // These settings control automatic line breaking. It is off by
754
+ // default, so only explicit line breaks are performed (via
755
+ // linebreak="newline" attributes on <mo> and <mspace> elements). To
756
+ // perform automatic line breaking on line expressions, set
757
+ // 'automatic' to 'true' below. The line breaks will be applied via a
758
+ // penalty-based heuristic, which does well, but isn't perfect. You
759
+ // might need to use linebreak="goodbreak" or linebreak="badbreak" by
760
+ // hand in order to get better effects. It is also possible to modify
761
+ // the penalty values; contact the MathJax user's forum for details.
762
+ //
763
+ linebreaks: {
764
+
765
+ //
766
+ // This controls the automatic breaking of expressions:
767
+ // when false, only process linebreak="newline",
768
+ // when true, line breaks are inserted automatically in long expressions.
769
+ //
770
+ automatic: false,
771
+
772
+ //
773
+ // This controls how wide the lines of mathematics can be
774
+ //
775
+ // Use an explicit width like "30em" for a fixed width.
776
+ // Use "container" to compute the size from the containing element.
777
+ // Use "nn% container" for a portion of the container.
778
+ // Use "nn%" for a portion of the window size.
779
+ //
780
+ // The container-based widths may be slower, and may not produce the
781
+ // expected results if the layout width changes due to the removal
782
+ // of previews or inclusion of mathematics during typesetting.
783
+ //
784
+ width: "container"
785
+ },
786
+
787
+ //
788
+ // This allows you to define or modify the styles used to display
789
+ // various math elements created by MathJax.
790
+ //
791
+ // Example:
792
+ // styles: {
793
+ // ".MathJax .merror": {
794
+ // color: "#CC0000",
795
+ // border: "1px solid #CC0000"
796
+ // }
797
+ // }
798
+ //
799
+ styles: {},
800
+
801
+ //
802
+ // Configuration for <maction> tooltips
803
+ // (see also the #MathJax_Tooltip CSS in MathJax/jax/output/HTML-CSS/config.js,
804
+ // which can be overridden using the styles values above).
805
+ //
806
+ tooltip: {
807
+ delayPost: 600, // milliseconds delay before tooltip is posted after mouseover
808
+ delayClear: 600, // milliseconds delay before tooltip is cleared after mouseout
809
+ offsetX: 10, offsetY: 5 // pixels to offset tooltip from mouse position
810
+ }
811
+ },
812
+
813
+ //============================================================================
814
+ //
815
+ // These parameters control the NativeMML output jax.
816
+ //
817
+ NativeMML: {
818
+
819
+ //
820
+ // This controls the global scaling of mathematics as compared to the
821
+ // surrounding text. Values between 100 and 133 are usually good choices.
822
+ //
823
+ scale: 100,
824
+
825
+ //
826
+ // Don't allow the matching of math text to surrounding text to use a scaling
827
+ // factor smaller than this.
828
+ //
829
+ minScaleAdjust: 50,
830
+
831
+ // This option indicates whether MathJax should try to correct the
832
+ // x-height of equations to match the size of the surrounding text.
833
+ matchFontHeight: true,
834
+
835
+ //
836
+ // This allows you to define or modify the styles used to display
837
+ // various math elements created by MathJax.
838
+ //
839
+ // Example:
840
+ // styles: {
841
+ // ".MathJax_MathML": {
842
+ // color: "red" // MathML is in red
843
+ // }
844
+ // }
845
+ //
846
+ styles: {}
847
+ },
848
+
849
+ //============================================================================
850
+ //
851
+ // These parameters control the SVG output jax.
852
+ //
853
+ "SVG": {
854
+
855
+ //
856
+ // This controls the global scaling of mathematics as compared to the
857
+ // surrounding text. Values between 100 and 133 are usually good choices.
858
+ //
859
+ scale: 100,
860
+
861
+ //
862
+ // Don't allow the matching of math text to surrounding text to use a scaling
863
+ // factor smaller than this.
864
+ //
865
+ minScaleAdjust: 50,
866
+
867
+ //
868
+ // This specifies the font to use for SVG output (currently the only
869
+ // one available)
870
+ //
871
+ font: "TeX",
872
+
873
+ //
874
+ // This is the stroke width to use for all character paths (1em = 1000
875
+ // units). This is a cheap way of getting slightly lighter or darker
876
+ // characters
877
+ //
878
+ blacker: 10,
879
+
880
+ //
881
+ // This is the font-family CSS value used for characters that are not
882
+ // in the selected font. IE will stop looking after the first font
883
+ // that exists on the system (even if it doesn't contain the needed
884
+ // character), so order these carefully.
885
+ //
886
+ undefinedFamily: "STIXGeneral,'Arial Unicode MS',serif",
887
+
888
+ //
889
+ // This setting controls whether <mtext> elements will be typeset
890
+ // using the math fonts or the font of the surrounding text. When
891
+ // false, the mathvariant="normal" font will be used; when true,
892
+ // the font will be inherited from the surrounding paragraph.
893
+ //
894
+ mtextFontInherit: false,
895
+
896
+ //
897
+ // This controls whether the MathML structure is retained and CSS
898
+ // classes are added to mark the original MathML elements (as in the
899
+ // HTML-CSS output). By default, the SVG output jax removes unneeded
900
+ // nesting in order to produce a more efficient markup, but if you
901
+ // want to use CSS to style the elements as if they were MathML, you
902
+ // might need to set this to true.
903
+ //
904
+ addMMLclasses: false,
905
+
906
+ //
907
+ // These values control how "chunky" the display of mathematical
908
+ // expressions will be.
909
+ //
910
+ // EqnChunk is the number of equations that will be typeset before
911
+ // they appear on screen. Larger values make for less visual flicker
912
+ // as the equations are drawn, but also mean longer delays before the
913
+ // reader sees anything.
914
+ //
915
+ // EqChunkFactor is the factor by which the EqnChunk will grow after each
916
+ // chunk is displayed.
917
+ //
918
+ // EqChunkDelay is the time (in milliseconds) to delay between chunks
919
+ // (to allow the browser to respond to other user interaction).
920
+ //
921
+ // Set EqnChunk to 1, EqnChunkFactor to 1, and EwnChunkDelay to 10 to get
922
+ // the behavior from MathJax v1.1 and below.
923
+ //
924
+ EqnChunk: 50,
925
+ EqnChunkFactor: 1.5,
926
+ EqnChunkDelay: 100,
927
+
928
+ // This option indicates whether MathJax should try to correct the
929
+ // x-height of equations to match the size of the surrounding text.
930
+ matchFontHeight: true,
931
+
932
+ //
933
+ // These settings control automatic line breaking. It is off by
934
+ // default, so only explicit line breaks are performed (via
935
+ // linebreak="newline" attributes on <mo> and <mspace> elements). To
936
+ // perform automatic line breaking on line expressions, set
937
+ // 'automatic' to 'true' below. The line breaks will be applied via a
938
+ // penalty-based heuristic, which does well, but isn't perfect. You
939
+ // might need to use linebreak="goodbreak" or linebreak="badbreak" by
940
+ // hand in order to get better effects. It is also possible to modify
941
+ // the penalty values; contact the MathJax user's forum for details.
942
+ //
943
+ linebreaks: {
944
+
945
+ //
946
+ // This controls the automatic breaking of expressions:
947
+ // when false, only process linebreak="newline",
948
+ // when true, line breaks are inserted automatically in long expressions.
949
+ //
950
+ automatic: false,
951
+
952
+ //
953
+ // This controls how wide the lines of mathematics can be
954
+ //
955
+ // Use an explicit width like "30em" for a fixed width.
956
+ // Use "container" to compute the size from the containing element.
957
+ // Use "nn% container" for a portion of the container.
958
+ // Use "nn%" for a portion of the window size.
959
+ //
960
+ // The container-based widths may be slower, and may not produce the
961
+ // expected results if the layout width changes due to the removal
962
+ // of previews or inclusion of mathematics during typesetting.
963
+ //
964
+ width: "container"
965
+ },
966
+
967
+ //
968
+ // These are the styles used for merror elements in SVG output. Note
969
+ // that only a limited number of style attributes are supported by
970
+ // SVG, but you can at least change the colors and borders.
971
+ //
972
+ //
973
+ merrorStyle: {
974
+ fontSize:"90%", color:"#C00", background:"#FF8",
975
+ border: "1px solid #C00", padding:"3px"
976
+ },
977
+
978
+ //
979
+ // This allows you to define or modify the styles used to display
980
+ // various math elements created by MathJax.
981
+ //
982
+ // Example:
983
+ // styles: {
984
+ // ".MathJax .merror": {
985
+ // color: "#CC0000",
986
+ // border: "1px solid #CC0000"
987
+ // }
988
+ // }
989
+ //
990
+ styles: {},
991
+
992
+ //
993
+ // Configuration for <maction> tooltips
994
+ // (see also the #MathJax_Tooltip CSS in MathJax/jax/output/SVG/config.js,
995
+ // which can be overridden using the styles values above).
996
+ //
997
+ tooltip: {
998
+ delayPost: 600, // milliseconds delay before tooltip is posted after mouseover
999
+ delayClear: 600, // milliseconds delay before tooltip is cleared after mouseout
1000
+ offsetX: 10, offsetY: 5 // pixels to offset tooltip from mouse position
1001
+ }
1002
+ },
1003
+
1004
+ //============================================================================
1005
+ //
1006
+ // These parameters control the contextual menus that are available on the
1007
+ // mathematics within the page (provided the showMathMenu value is true above).
1008
+ //
1009
+ MathMenu: {
1010
+ //
1011
+ // This is the hover delay for the display of submenus in the
1012
+ // contextual menu. When the mouse is still over a submenu label for
1013
+ // this long, the menu will appear. (The menu also will appear if you
1014
+ // click on the label.) It is in milliseconds.
1015
+ //
1016
+ delay: 150,
1017
+
1018
+ //
1019
+ // This is the URL for the MathJax Help menu item.
1020
+ //
1021
+ helpURL: "http://www.mathjax.org/help-v2/user/",
1022
+
1023
+ //
1024
+ // These control whether the "Math Renderer", "MathPlayer", "Font
1025
+ // Preferences", "Contextual Menu", and "Discoverable" menu items will
1026
+ // be displayed or not.
1027
+ //
1028
+ showRenderer: true,
1029
+ showMathPlayer: true,
1030
+ showFontMenu: false,
1031
+ showContext: false,
1032
+ showDiscoverable: false,
1033
+
1034
+ //
1035
+ // These are the settings for the Annotation menu. If the <math> root has
1036
+ // a <semantics> child that contains one of the following annotation
1037
+ // formats, the source will be available via the "Show Math As" menu.
1038
+ // Each format has a list of possible encodings.
1039
+ //
1040
+ semanticsAnnotations: {
1041
+ "TeX": ["TeX", "LaTeX", "application/x-tex"],
1042
+ "StarMath": ["StarMath 5.0"],
1043
+ "Maple": ["Maple"],
1044
+ "ContentMathML": ["MathML-Content", "application/mathml-content+xml"],
1045
+ "OpenMath": ["OpenMath"]
1046
+ },
1047
+
1048
+ //
1049
+ // These are the settings for the Show Source window. The initial
1050
+ // width and height will be reset after the source is shown in an
1051
+ // attempt to make the window fit the output better.
1052
+ //
1053
+ windowSettings: {
1054
+ status: "no", toolbar: "no", locationbar: "no", menubar: "no",
1055
+ directories: "no", personalbar: "no", resizable: "yes", scrollbars: "yes",
1056
+ width: 100, height: 50
1057
+ },
1058
+
1059
+ //
1060
+ // This allows you to change the CSS that controls the menu
1061
+ // appearance. See the extensions/MathMenu.js file for details
1062
+ // of the default settings.
1063
+ //
1064
+ styles: {}
1065
+
1066
+ },
1067
+
1068
+ //============================================================================
1069
+ //
1070
+ // These parameters control the contextual menus that are available on the
1071
+ // mathematics within the page (provided the showMathMenu value is true above).
1072
+ //
1073
+ MathEvents: {
1074
+ //
1075
+ // This is the time required for the mouse to be held still over a
1076
+ // typeset equation in order for it to count as a hover (used when the
1077
+ // zoom trigger is "Hover"). It is in milliseconds.
1078
+ //
1079
+ hover: 500
1080
+ },
1081
+
1082
+ //============================================================================
1083
+ //
1084
+ // These parameters control the MMLorHTML configuration file.
1085
+ // NOTE: if you add MMLorHTML.js to the config array above,
1086
+ // you must REMOVE the output jax from the jax array.
1087
+ //
1088
+ MMLorHTML: {
1089
+ //
1090
+ // The output jax that is to be preferred when both are possible
1091
+ // (set to "MML" for native MathML, "HTML" for MathJax's HTML-CSS output jax).
1092
+ //
1093
+ prefer: {
1094
+ MSIE: "MML",
1095
+ Firefox: "HTML",
1096
+ Opera: "HTML",
1097
+ Safari: "HTML",
1098
+ Chrome: "HTML",
1099
+ other: "HTML"
1100
+ }
1101
+ }
1102
+ });
1103
+
1104
+ MathJax.Ajax.loadComplete("[MathJax]/config/default.js");
vendor/MathJax/config/local/local.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/config/local/local.js
7
+ *
8
+ * Include changes and configuration local to your installation
9
+ * in this file. For example, common macros can be defined here
10
+ * (see below). To use this file, add "local/local.js" to the
11
+ * config array in MathJax.js or your MathJax.Hub.Config() call.
12
+ *
13
+ * ---------------------------------------------------------------------
14
+ *
15
+ * Copyright (c) 2009-2018 The MathJax Consortium
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an "AS IS" BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+
31
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
32
+ var TEX = MathJax.InputJax.TeX;
33
+
34
+ // place macros here. E.g.:
35
+ // TEX.Macro("R","{\\bf R}");
36
+ // TEX.Macro("op","\\mathop{\\rm #1}",1); // a macro with 1 parameter
37
+
38
+ });
39
+
40
+ MathJax.Ajax.loadComplete("[MathJax]/config/local/local.js");
vendor/MathJax/extensions/AssistiveMML.js ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/AssistiveMML.js
7
+ *
8
+ * Implements an extension that inserts hidden MathML into the
9
+ * page for screen readers or other asistive technology.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2015-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ (function (AJAX,CALLBACK,HUB,HTML) {
29
+ var SETTINGS = HUB.config.menuSettings;
30
+
31
+ var AssistiveMML = MathJax.Extension["AssistiveMML"] = {
32
+ version: "2.7.5",
33
+
34
+ config: HUB.CombineConfig("AssistiveMML",{
35
+ disabled: false,
36
+ styles: {
37
+ ".MJX_Assistive_MathML": {
38
+ position:"absolute!important",
39
+ top: 0, left: 0,
40
+ clip: (HUB.Browser.isMSIE && (document.documentMode||0) < 8 ?
41
+ "rect(1px 1px 1px 1px)" : "rect(1px, 1px, 1px, 1px)"),
42
+ padding: "1px 0 0 0!important",
43
+ border: "0!important",
44
+ height: "1px!important",
45
+ width: "1px!important",
46
+ overflow: "hidden!important",
47
+ display:"block!important",
48
+ //
49
+ // Don't allow the assistive MathML become part of the selection
50
+ //
51
+ "-webkit-touch-callout": "none",
52
+ "-webkit-user-select": "none",
53
+ "-khtml-user-select": "none",
54
+ "-moz-user-select": "none",
55
+ "-ms-user-select": "none",
56
+ "user-select": "none"
57
+ },
58
+ ".MJX_Assistive_MathML.MJX_Assistive_MathML_Block": {
59
+ width: "100%!important"
60
+ }
61
+ }
62
+ }),
63
+
64
+ Config: function () {
65
+ if (!this.config.disabled && SETTINGS.assistiveMML == null)
66
+ HUB.Config({menuSettings:{assistiveMML:true}});
67
+ AJAX.Styles(this.config.styles);
68
+ HUB.Register.MessageHook("End Math",function (msg) {
69
+ if (SETTINGS.assistiveMML) return AssistiveMML.AddAssistiveMathML(msg[1])
70
+ });
71
+ },
72
+
73
+ //
74
+ // This sets up a state object that lists the jax and index into the jax,
75
+ // and a dummy callback that is used to synchronizing with MathJax.
76
+ // It will be called when the jax are all processed, and that will
77
+ // let the MathJax queue continue (it will block until then).
78
+ //
79
+ AddAssistiveMathML: function (node) {
80
+ var state = {
81
+ jax: HUB.getAllJax(node), i: 0,
82
+ callback: MathJax.Callback({})
83
+ };
84
+ this.HandleMML(state);
85
+ return state.callback;
86
+ },
87
+
88
+ //
89
+ // This removes the data-mathml attribute and the assistive MathML from
90
+ // all the jax.
91
+ //
92
+ RemoveAssistiveMathML: function (node) {
93
+ var jax = HUB.getAllJax(node), frame;
94
+ for (var i = 0, m = jax.length; i < m; i++) {
95
+ frame = document.getElementById(jax[i].inputID+"-Frame");
96
+ if (frame && frame.getAttribute("data-mathml")) {
97
+ frame.removeAttribute("data-mathml");
98
+ if (frame.lastChild && frame.lastChild.className.match(/MJX_Assistive_MathML/))
99
+ frame.removeChild(frame.lastChild);
100
+ }
101
+ }
102
+ },
103
+
104
+ //
105
+ // For each jax in the state, look up the frame.
106
+ // If the jax doesn't use NativeMML and hasn't already been handled:
107
+ // Get the MathML for the jax, taking resets into account.
108
+ // Add a data-mathml attribute to the frame, and
109
+ // Create a span that is not visible on screen and put the MathML in it,
110
+ // and add it to the frame.
111
+ // When all the jax are processed, call the callback.
112
+ //
113
+ HandleMML: function (state) {
114
+ var m = state.jax.length, jax, mml, frame, span;
115
+ while (state.i < m) {
116
+ jax = state.jax[state.i];
117
+ frame = document.getElementById(jax.inputID+"-Frame");
118
+ if (jax.outputJax !== "NativeMML" && jax.outputJax !== "PlainSource" &&
119
+ frame && !frame.getAttribute("data-mathml")) {
120
+ try {
121
+ mml = jax.root.toMathML("").replace(/\n */g,"").replace(/<!--.*?-->/g,"");
122
+ } catch (err) {
123
+ if (!err.restart) throw err; // an actual error
124
+ return MathJax.Callback.After(["HandleMML",this,state],err.restart);
125
+ }
126
+ frame.setAttribute("data-mathml",mml);
127
+ span = HTML.addElement(frame,"span",{
128
+ isMathJax: true, unselectable: "on",
129
+ className: "MJX_Assistive_MathML"
130
+ + (jax.root.Get("display") === "block" ? " MJX_Assistive_MathML_Block" : "")
131
+ });
132
+ try {span.innerHTML = mml} catch (err) {}
133
+ frame.style.position = "relative";
134
+ frame.setAttribute("role","presentation");
135
+ frame.firstChild.setAttribute("aria-hidden","true");
136
+ span.setAttribute("role","presentation");
137
+ }
138
+ state.i++;
139
+ }
140
+ state.callback();
141
+ }
142
+
143
+ };
144
+
145
+ HUB.Startup.signal.Post("AssistiveMML Ready");
146
+
147
+ })(MathJax.Ajax,MathJax.Callback,MathJax.Hub,MathJax.HTML);
148
+
149
+ //
150
+ // Make sure the toMathML extension is loaded before we signal
151
+ // the load complete for this extension. Then wait for the end
152
+ // of the user configuration before configuring this extension.
153
+ //
154
+ MathJax.Callback.Queue(
155
+ ["Require",MathJax.Ajax,"[MathJax]/extensions/toMathML.js"],
156
+ ["loadComplete",MathJax.Ajax,"[MathJax]/extensions/AssistiveMML.js"],
157
+ function () {
158
+ MathJax.Hub.Register.StartupHook("End Config",["Config",MathJax.Extension.AssistiveMML]);
159
+ }
160
+ );
161
+
vendor/MathJax/extensions/CHTML-preview.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/CHTML-preview.js
7
+ *
8
+ * Backward compatibility with old CHTML-preview extension.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2014-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Callback.Queue(
28
+ ["Require",MathJax.Ajax,"[MathJax]/extensions/fast-preview.js"],
29
+ ["loadComplete",MathJax.Ajax,"[MathJax]/extensions/CHTML-preview.js"]
30
+ );
vendor/MathJax/extensions/FontWarnings.js ADDED
@@ -0,0 +1,313 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/FontWarnings.js
7
+ *
8
+ * Implements a font warning message window that appears when
9
+ * the image fonts, no fonts, or web fonts are used, informing
10
+ * the user where to download the fonts, or to update to a more
11
+ * modern browser. The window will fade out automatically after
12
+ * a time, and the user can dismiss it by a close box.
13
+ *
14
+ * To include font warning messages, add "FontWarnings.js" to the
15
+ * extensions array in your MathJax configuration.
16
+ *
17
+ * You can customize the warning messages in a number of ways. Use the
18
+ * FontWarnings section of the configuration to specify any of the items
19
+ * shown in the CONFIG variable below. These include
20
+ *
21
+ * messageStyle the style to apply to the warning box that is
22
+ * displayed when MathJax uses one of its fallback
23
+ * methods.
24
+ *
25
+ * removeAfter the amount of time to show the warning message (in ms)
26
+ * fadeoutTime how long the message should take to fade out
27
+ * fadeoutSteps how many separate steps to use during the fade out
28
+ * (set to 0 to use no fadeout and simply remove the window)
29
+ *
30
+ * Messages stores the descriptions of the messages to use for the
31
+ * various warnings (webFonts, imageFonts, and noFonts).
32
+ * These are arrays of strings to be inserted into the window,
33
+ * or identifiers within brackets, which refer to the HTML
34
+ * snippets in the HTML section described below. To disable a
35
+ * specific message, set its value to null (see example below).
36
+ *
37
+ * HTML stores snippets of HTML descriptions for various
38
+ * common parts of the error messages. These include
39
+ * the closeBox, the message about web fonts being available
40
+ * in modern browser, and messages about downloadable fonts.
41
+ * The STIX and TeX font messages are used when only one
42
+ * of these is in the availableFonts list. The data for these
43
+ * are arrays of either strings to include or a description of
44
+ * an HTML item enclosed in square brackets. That description
45
+ * has (up to) three parts: the name of the tag to be included,
46
+ * a list (enclosed in braces) of attributes and their values
47
+ * to be set on the tag (optional), and an array of the contents
48
+ * of the tag (optional). See the definitions below for examples.
49
+ *
50
+ * For example,
51
+ *
52
+ * MathJax.Hub.Config({
53
+ * ...
54
+ * extensions: ["FontWarnings.js"],
55
+ * FontWarnings: {
56
+ * removeAfter: 20*1000, // 20 seconds
57
+ * messageStyle: {
58
+ * border: "2px solid black",
59
+ * padding: "2em"
60
+ * },
61
+ * Message: {
62
+ * webFont: null // no webfont messages (only image and no fonts)
63
+ * }
64
+ * }
65
+ * });
66
+ *
67
+ * would extend the time the message is displayed from 12 seconds to 20,
68
+ * and changes the border to a solid black one, with 2em of padding
69
+ * rather than the default of 1em.
70
+ *
71
+ * ---------------------------------------------------------------------
72
+ *
73
+ * Copyright (c) 2010-2018 The MathJax Consortium
74
+ *
75
+ * Licensed under the Apache License, Version 2.0 (the "License");
76
+ * you may not use this file except in compliance with the License.
77
+ * You may obtain a copy of the License at
78
+ *
79
+ * http://www.apache.org/licenses/LICENSE-2.0
80
+ *
81
+ * Unless required by applicable law or agreed to in writing, software
82
+ * distributed under the License is distributed on an "AS IS" BASIS,
83
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
84
+ * See the License for the specific language governing permissions and
85
+ * limitations under the License.
86
+ */
87
+
88
+ (function (HUB,HTML) {
89
+ var VERSION = "2.7.5";
90
+
91
+ var STIXURL = "http://www.stixfonts.org/";
92
+ var MATHJAXURL = "https://github.com/mathjax/MathJax/tree/master/fonts/HTML-CSS/TeX/otf";
93
+
94
+ var CONFIG = HUB.CombineConfig("FontWarnings",{
95
+ //
96
+ // The CSS for the message window
97
+ //
98
+ messageStyle: {
99
+ position:"fixed", bottom:"4em", left:"3em", width:"40em",
100
+ border: "3px solid #880000", "background-color": "#E0E0E0", color: "black",
101
+ padding: "1em", "font-size":"small", "white-space":"normal",
102
+
103
+ "border-radius": ".75em", // Opera 10.5 and IE9
104
+ "-webkit-border-radius": ".75em", // Safari and Chrome
105
+ "-moz-border-radius": ".75em", // Firefox
106
+ "-khtml-border-radius": ".75em", // Konqueror
107
+
108
+ "box-shadow": "4px 4px 10px #AAAAAA", // Opera 10.5 and IE9
109
+ "-webkit-box-shadow": "4px 4px 10px #AAAAAA", // Safari 3 and Chrome
110
+ "-moz-box-shadow": "4px 4px 10px #AAAAAA", // Forefox 3.5
111
+ "-khtml-box-shadow": "4px 4px 10px #AAAAAA", // Konqueror
112
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=3, OffY=3, Color='gray', Positive='true')" // IE
113
+ },
114
+
115
+ //
116
+ // The messages for the various situations
117
+ //
118
+ Message: {
119
+
120
+ webFont: [
121
+ ["closeBox"],
122
+ ["webFont",
123
+ "MathJax is using web-based fonts to display the mathematics "+
124
+ "on this page. These take time to download, so the page would "+
125
+ "render faster if you installed math fonts directly in your "+
126
+ "system's font folder."],
127
+ ["fonts"]
128
+ ],
129
+
130
+ imageFonts: [
131
+ ["closeBox"],
132
+ ["imageFonts",
133
+ "MathJax is using its image fonts rather than local or web-based fonts. "+
134
+ "This will render slower than usual, and the mathematics may not print "+
135
+ "at the full resolution of your printer."],
136
+ ["fonts"],
137
+ ["webFonts"]
138
+ ],
139
+
140
+ noFonts: [
141
+ ["closeBox"],
142
+ ["noFonts",
143
+ "MathJax is unable to locate a font to use to display "+
144
+ "its mathematics, and image fonts are not available, so it "+
145
+ "is falling back on generic unicode characters in hopes that "+
146
+ "your browser will be able to display them. Some characters "+
147
+ "may not show up properly, or possibly not at all."],
148
+ ["fonts"],
149
+ ["webFonts"]
150
+ ]
151
+ },
152
+
153
+ //
154
+ // HTML objects that can be referred to in the message definitions
155
+ //
156
+ HTML: {
157
+ //
158
+ // The definition of the close box
159
+ //
160
+ closeBox: [[
161
+ "div",{
162
+ style: {
163
+ position:"absolute", overflow:"hidden", top:".1em", right:".1em",
164
+ border: "1px outset", width:"1em", height:"1em",
165
+ "text-align": "center", cursor: "pointer",
166
+ "background-color": "#EEEEEE", color:"#606060",
167
+
168
+ "border-radius": ".5em", // Opera 10.5
169
+ "-webkit-border-radius": ".5em", // Safari and Chrome
170
+ "-moz-border-radius": ".5em", // Firefox
171
+ "-khtml-border-radius": ".5em" // Konqueror
172
+ },
173
+ onclick: function () {
174
+ if (DATA.div && DATA.fade === 0)
175
+ {if (DATA.timer) {clearTimeout(DATA.timer)}; DATA.div.style.display = "none"}
176
+ }
177
+ },
178
+ [["span",{style:{position:"relative", bottom:".2em"}},["x"]]]
179
+ ]],
180
+
181
+ webFonts: [
182
+ ["p"],
183
+ ["webFonts",
184
+ "Most modern browsers allow for fonts to be downloaded over the web. "+
185
+ "Updating to a more recent version of your browser (or changing "+
186
+ "browsers) could improve the quality of the mathematics on this page."
187
+ ]
188
+ ],
189
+
190
+ fonts: [
191
+ ["p"],
192
+ ["fonts",
193
+ "MathJax can use either the [STIX fonts](%1) or the [MathJax TeX fonts](%2). " +
194
+ "Download and install one of those fonts to improve your MathJax experience.",
195
+ STIXURL,MATHJAXURL
196
+ ]
197
+ ],
198
+
199
+ STIXfonts: [
200
+ ["p"],
201
+ ["STIXPage",
202
+ "This page is designed to use the [STIX fonts](%1). " +
203
+ "Download and install those fonts to improve your MathJax experience.",
204
+ STIXURL
205
+ ]
206
+ ],
207
+
208
+ TeXfonts: [
209
+ ["p"],
210
+ ["TeXPage",
211
+ "This page is designed to use the [MathJax TeX fonts](%1). " +
212
+ "Download and install those fonts to improve your MathJax experience.",
213
+ MATHJAXURL
214
+ ]
215
+ ]
216
+
217
+ },
218
+
219
+ removeAfter: 12*1000, // time to show message (in ms)
220
+ fadeoutSteps: 10, // fade-out steps
221
+ fadeoutTime: 1.5*1000 // fadeout over this amount of time (in ms)
222
+
223
+ });
224
+ if (MathJax.Hub.Browser.isIE9 && document.documentMode >= 9)
225
+ {delete CONFIG.messageStyle.filter}
226
+
227
+ //
228
+ // Data for the window
229
+ //
230
+ var DATA = {
231
+ div: null, // the message window, when displayed
232
+ fade: 0 // number of fade-out steps so far
233
+ };
234
+
235
+ //
236
+ // Create the message window and start the fade-out timer
237
+ //
238
+ var CREATEMESSAGE = function (data) {
239
+ if (DATA.div) return;
240
+ var HTMLCSS = MathJax.OutputJax["HTML-CSS"], frame = document.body;
241
+ if (HUB.Browser.isMSIE) {
242
+ if (CONFIG.messageStyle.position === "fixed") {
243
+ MathJax.Message.Init(); // make sure MathJax_MSIE_frame exists
244
+ frame = document.getElementById("MathJax_MSIE_Frame") || frame;
245
+ if (frame !== document.body) {CONFIG.messageStyle.position = "absolute"}
246
+ }
247
+ } else {delete CONFIG.messageStyle.filter}
248
+ CONFIG.messageStyle.maxWidth = (document.body.clientWidth-75) + "px";
249
+ var i = 0; while (i < data.length) {
250
+ if (MathJax.Object.isArray(data[i])) {
251
+ if (data[i].length === 1 && CONFIG.HTML[data[i][0]]) {
252
+ data.splice.apply(data,[i,1].concat(CONFIG.HTML[data[i][0]]));
253
+ } else if (typeof data[i][1] === "string") {
254
+ var message = MathJax.Localization.lookupPhrase(["FontWarnings",data[i][0]],data[i][1]);
255
+ message = MathJax.Localization.processMarkdown(message,data[i].slice(2),"FontWarnings");
256
+ data.splice.apply(data,[i,1].concat(message));
257
+ i += message.length;
258
+ } else {i++}
259
+ } else {i++}
260
+ }
261
+ DATA.div = HTMLCSS.addElement(frame,"div",
262
+ {id:"MathJax_FontWarning",style:CONFIG.messageStyle},data);
263
+ MathJax.Localization.setCSS(DATA.div);
264
+ if (CONFIG.removeAfter) {
265
+ HUB.Register.StartupHook("End",function ()
266
+ {DATA.timer = setTimeout(FADEOUT,CONFIG.removeAfter)});
267
+ }
268
+ HTML.Cookie.Set("fontWarn",{warned:true});
269
+ };
270
+
271
+ //
272
+ // Set the opacity based on the number of steps taken so far
273
+ // and remove the window when it gets to 0
274
+ //
275
+ var FADEOUT = function () {
276
+ DATA.fade++; if (DATA.timer) {delete DATA.timer}
277
+ if (DATA.fade < CONFIG.fadeoutSteps) {
278
+ var opacity = 1 - DATA.fade/CONFIG.fadeoutSteps;
279
+ DATA.div.style.opacity = opacity;
280
+ DATA.div.style.filter = "alpha(opacity="+Math.floor(100*opacity)+")";
281
+ setTimeout(FADEOUT,CONFIG.fadeoutTime/CONFIG.fadeoutSteps);
282
+ } else {
283
+ DATA.div.style.display = "none";
284
+ }
285
+ };
286
+
287
+ //
288
+ // Check that we haven't already issued a warning
289
+ //
290
+ if (!HTML.Cookie.Get("fontWarn").warned) {
291
+ //
292
+ // Hook into the Startup signal and look for font warning messages.
293
+ // When one comes, issue the correct message.
294
+ //
295
+ HUB.Startup.signal.Interest(function (message) {
296
+ if (message.match(/HTML-CSS Jax - /) && !DATA.div) {
297
+ var HTMLCSS = MathJax.OutputJax["HTML-CSS"], FONTS = HTMLCSS.config.availableFonts, MSG;
298
+ var localFonts = (FONTS && FONTS.length);
299
+ if (!localFonts) {CONFIG.HTML.fonts = [""]}
300
+ else if (FONTS.length === 1) {CONFIG.HTML.fonts = CONFIG.HTML[FONTS[0]+"fonts"]}
301
+ if (HTMLCSS.allowWebFonts) {CONFIG.HTML.webfonts = [""]}
302
+ if (message.match(/- Web-Font/)) {if (localFonts) {MSG = "webFont"}}
303
+ else if (message.match(/- using image fonts/)) {MSG = "imageFonts"}
304
+ else if (message.match(/- no valid font/)) {MSG = "noFonts"}
305
+ if (MSG && CONFIG.Message[MSG])
306
+ {MathJax.Localization.loadDomain("FontWarnings",[CREATEMESSAGE,CONFIG.Message[MSG]])}
307
+ }
308
+ });
309
+ }
310
+
311
+ })(MathJax.Hub,MathJax.HTML);
312
+
313
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/FontWarnings.js");
vendor/MathJax/extensions/HTML-CSS/handle-floats.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/HTML-CSS/handle-floats.js
7
+ *
8
+ * This extension allows HTML-CSS output to deal with floating elements
9
+ * better. In particular, when there are tags or equation numbers, these
10
+ * would overlap floating elements, but with this extension, the width of
11
+ * the line should properly correspond to the amount of space remaining.
12
+ *
13
+ * To load it, include
14
+ *
15
+ * "HTML-CSS": {
16
+ * extensions: ["handle-floats.js"]
17
+ * }
18
+ *
19
+ * in your configuration.
20
+ *
21
+ * ---------------------------------------------------------------------
22
+ *
23
+ * Copyright (c) 2012-2018 The MathJax Consortium
24
+ *
25
+ * Licensed under the Apache License, Version 2.0 (the "License");
26
+ * you may not use this file except in compliance with the License.
27
+ * You may obtain a copy of the License at
28
+ *
29
+ * http://www.apache.org/licenses/LICENSE-2.0
30
+ *
31
+ * Unless required by applicable law or agreed to in writing, software
32
+ * distributed under the License is distributed on an "AS IS" BASIS,
33
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
34
+ * See the License for the specific language governing permissions and
35
+ * limitations under the License.
36
+ */
37
+
38
+
39
+ MathJax.Extension["HTML-CSS/handle-floats"] = {
40
+ version: "2.7.5"
41
+ };
42
+
43
+ //
44
+ // This file is now obsolete, since the HTML-CSS output already handles
45
+ // floating elements properly.
46
+ //
47
+
48
+ MathJax.Hub.Startup.signal.Post("HTML-CSS handle-floats Ready");
49
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/HTML-CSS/handle-floats.js");
vendor/MathJax/extensions/HelpDialog.js ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * MathJax/extensions/HelpDialog.js
4
+ *
5
+ * Implements the MathJax Help dialog box.
6
+ *
7
+ * ---------------------------------------------------------------------
8
+ *
9
+ * Copyright (c) 2013-2018 The MathJax Consortium
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ (function (HUB,HTML,AJAX,OUTPUT,LOCALE) {
25
+
26
+ var HELP = MathJax.Extension.Help = {
27
+ version: "2.7.5"
28
+ };
29
+
30
+ var STIXURL = "http://www.stixfonts.org/";
31
+ var MENU = MathJax.Menu;
32
+ var FALSE, KEY;
33
+ HUB.Register.StartupHook("MathEvents Ready",function () {
34
+ FALSE = MathJax.Extension.MathEvents.Event.False;
35
+ KEY = MathJax.Extension.MathEvents.Event.KEY;
36
+ });
37
+
38
+
39
+ var CONFIG = HUB.CombineConfig("HelpDialog",{
40
+
41
+ styles: {
42
+ "#MathJax_Help": {
43
+ position:"fixed", left:"50%", width:"auto", "max-width": "90%", "text-align":"center",
44
+ border:"3px outset", padding:"1em 2em", "background-color":"#DDDDDD", color:"black",
45
+ cursor: "default", "font-family":"message-box", "font-size":"120%",
46
+ "font-style":"normal", "text-indent":0, "text-transform":"none",
47
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
48
+ "word-wrap":"normal", "white-space":"wrap", "float":"none", "z-index":201,
49
+
50
+ "border-radius": "15px", // Opera 10.5 and IE9
51
+ "-webkit-border-radius": "15px", // Safari and Chrome
52
+ "-moz-border-radius": "15px", // Firefox
53
+ "-khtml-border-radius": "15px", // Konqueror
54
+
55
+ "box-shadow":"0px 10px 20px #808080", // Opera 10.5 and IE9
56
+ "-webkit-box-shadow":"0px 10px 20px #808080", // Safari 3 and Chrome
57
+ "-moz-box-shadow":"0px 10px 20px #808080", // Forefox 3.5
58
+ "-khtml-box-shadow":"0px 10px 20px #808080", // Konqueror
59
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
60
+ },
61
+ "#MathJax_Help.MathJax_MousePost": {
62
+ outline:"none"
63
+ },
64
+
65
+ "#MathJax_HelpContent": {
66
+ overflow:"auto", "text-align":"left", "font-size":"80%",
67
+ padding:".4em .6em", border:"1px inset", margin:"1em 0px",
68
+ "max-height":"20em", "max-width":"30em", "background-color":"#EEEEEE"
69
+ },
70
+
71
+ "#MathJax_HelpClose": {
72
+ position:"absolute", top:".2em", right:".2em",
73
+ cursor:"pointer",
74
+ display:"inline-block",
75
+ border:"2px solid #AAA",
76
+ "border-radius":"18px",
77
+ "-webkit-border-radius": "18px", // Safari and Chrome
78
+ "-moz-border-radius": "18px", // Firefox
79
+ "-khtml-border-radius": "18px", // Konqueror
80
+ "font-family":"'Courier New',Courier",
81
+ "font-size":"24px",
82
+ color:"#F0F0F0"
83
+ },
84
+ "#MathJax_HelpClose span": {
85
+ display:"block", "background-color":"#AAA", border:"1.5px solid",
86
+ "border-radius":"18px",
87
+ "-webkit-border-radius": "18px", // Safari and Chrome
88
+ "-moz-border-radius": "18px", // Firefox
89
+ "-khtml-border-radius": "18px", // Konqueror
90
+ "line-height":0,
91
+ padding:"8px 0 6px" // may need to be browser-specific
92
+ },
93
+ "#MathJax_HelpClose:hover": {
94
+ color:"white!important",
95
+ border:"2px solid #CCC!important"
96
+ },
97
+ "#MathJax_HelpClose:hover span": {
98
+ "background-color":"#CCC!important"
99
+ },
100
+ "#MathJax_HelpClose:hover:focus": {
101
+ outline:"none"
102
+ }
103
+ }
104
+ });
105
+
106
+ /*
107
+ * Handle the Help Dialog box
108
+ */
109
+ HELP.Dialog = function (event) {
110
+ LOCALE.loadDomain("HelpDialog",["Post",HELP,event]);
111
+ };
112
+
113
+ HELP.Post = function (event) {
114
+ this.div = MENU.Background(this);
115
+ var help = HTML.addElement(this.div,"div",{
116
+ id: "MathJax_Help", tabIndex: 0, onkeydown: HELP.Keydown
117
+ },LOCALE._("HelpDialog",[
118
+ ["b",{style:{fontSize:"120%"}},[["Help","MathJax Help"]]],
119
+ ["div",{id: "MathJax_HelpContent", tabIndex: 0},[
120
+ ["p",{},[["MathJax",
121
+ "*MathJax* is a JavaScript library that allows page authors to include " +
122
+ "mathematics within their web pages. As a reader, you don't need to do " +
123
+ "anything to make that happen."]]
124
+ ],
125
+ ["p",{},[["Browsers",
126
+ "*Browsers*: MathJax works with all modern browsers including IE6+, Firefox 3+, " +
127
+ "Chrome 0.2+, Safari 2+, Opera 9.6+ and most mobile browsers."]]
128
+ ],
129
+ ["p",{},[["Menu",
130
+ "*Math Menu*: MathJax adds a contextual menu to equations. Right-click or " +
131
+ "CTRL-click on any mathematics to access the menu."]]
132
+ ],
133
+ ["div",{style:{"margin-left":"1em"}},[
134
+ ["p",{},[["ShowMath",
135
+ "*Show Math As* allows you to view the formula's source markup " +
136
+ "for copy & paste (as MathML or in its original format)."]]
137
+ ],
138
+ ["p",{},[["Settings",
139
+ "*Settings* gives you control over features of MathJax, such as the " +
140
+ "size of the mathematics, and the mechanism used to display equations."]]
141
+ ],
142
+ ["p",{},[["Language",
143
+ "*Language* lets you select the language used by MathJax for its menus " +
144
+ "and warning messages."]]
145
+ ],
146
+ ]],
147
+ ["p",{},[["Zoom",
148
+ "*Math Zoom*: If you are having difficulty reading an equation, MathJax can " +
149
+ "enlarge it to help you see it better."]]
150
+ ],
151
+ ["p",{},[["Accessibilty",
152
+ "*Accessibility*: MathJax will automatically work with screen readers to make " +
153
+ "mathematics accessible to the visually impaired."]]
154
+ ],
155
+ ["p",{},[["Fonts",
156
+ "*Fonts*: MathJax will use certain math fonts if they are installed on your " +
157
+ "computer; otherwise, it will use web-based fonts. Although not required, " +
158
+ "locally installed fonts will speed up typesetting. We suggest installing " +
159
+ "the [STIX fonts](%1).",STIXURL]]
160
+ ]
161
+ ]],
162
+ ["a",{href:"http://www.mathjax.org/"},["www.mathjax.org"]],
163
+ ["span",{id: "MathJax_HelpClose", onclick: HELP.Remove,
164
+ onkeydown: HELP.Keydown, tabIndex: 0, role: "button",
165
+ "aria-label": LOCALE._(["HelpDialog","CloseDialog"],"Close help dialog")},
166
+ [["span",{},["\u00D7"]]]
167
+ ]
168
+ ]));
169
+ if (event.type === "mouseup") help.className += " MathJax_MousePost";
170
+ help.focus();
171
+ LOCALE.setCSS(help);
172
+ var doc = (document.documentElement||{});
173
+ var H = window.innerHeight || doc.clientHeight || doc.scrollHeight || 0;
174
+ if (MENU.prototype.msieAboutBug) {
175
+ help.style.width = "20em"; help.style.position = "absolute";
176
+ help.style.left = Math.floor((document.documentElement.scrollWidth - help.offsetWidth)/2)+"px";
177
+ help.style.top = (Math.floor((H-help.offsetHeight)/3)+document.body.scrollTop)+"px";
178
+ } else {
179
+ help.style.marginLeft = Math.floor(-help.offsetWidth/2)+"px";
180
+ help.style.top = Math.floor((H-help.offsetHeight)/3)+"px";
181
+ }
182
+ };
183
+ HELP.Remove = function (event) {
184
+ if (HELP.div) {document.body.removeChild(HELP.div); delete HELP.div}
185
+ };
186
+ HELP.Keydown = function(event) {
187
+ if (event.keyCode === KEY.ESCAPE ||
188
+ (this.id === "MathJax_HelpClose" &&
189
+ (event.keyCode === KEY.SPACE || event.keyCode === KEY.RETURN))) {
190
+ HELP.Remove(event);
191
+ MENU.CurrentNode().focus();
192
+ FALSE(event);
193
+ }
194
+ },
195
+
196
+ MathJax.Callback.Queue(
197
+ HUB.Register.StartupHook("End Config",{}), // wait until config is complete
198
+ ["Styles",AJAX,CONFIG.styles],
199
+ ["Post",HUB.Startup.signal,"HelpDialog Ready"],
200
+ ["loadComplete",AJAX,"[MathJax]/extensions/HelpDialog.js"]
201
+ );
202
+
203
+ })(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax,MathJax.Localization);
vendor/MathJax/extensions/MatchWebFonts.js ADDED
@@ -0,0 +1,309 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/MatchWebFonts.js
7
+ *
8
+ * Adds code to the output jax so that if web fonts are used on the page,
9
+ * MathJax will be able to detect their arrival and update the math to
10
+ * accommodate the change in font. For the NativeMML output, this works
11
+ * both for web fonts in main text, and for web fonts in the math as well.
12
+ *
13
+ * ---------------------------------------------------------------------
14
+ *
15
+ * Copyright (c) 2013-2018 The MathJax Consortium
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an "AS IS" BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+ (function (HUB,AJAX) {
31
+ var VERSION = "2.7.5";
32
+
33
+ var CONFIG = MathJax.Hub.CombineConfig("MatchWebFonts",{
34
+ matchFor: {
35
+ "HTML-CSS": true,
36
+ NativeMML: true,
37
+ SVG: true
38
+ },
39
+ fontCheckDelay: 500, // initial delay for the first check for web fonts
40
+ fontCheckTimeout: 15 * 1000, // how long to keep looking for fonts (15 seconds)
41
+ });
42
+
43
+ MathJax.Extension.MatchWebFonts = {
44
+ version: VERSION,
45
+ config: CONFIG
46
+ };
47
+
48
+ HUB.Register.StartupHook("HTML-CSS Jax Ready",function () {
49
+ var HTMLCSS = MathJax.OutputJax["HTML-CSS"];
50
+ var POSTTRANSLATE = HTMLCSS.postTranslate;
51
+
52
+ HTMLCSS.Augment({
53
+ postTranslate: function (state,partial) {
54
+ if (!partial && CONFIG.matchFor["HTML-CSS"] && this.config.matchFontHeight) {
55
+ //
56
+ // Check for changes in the web fonts that might affect the font
57
+ // size for math elements. This is a periodic check that goes on
58
+ // until a timeout is reached.
59
+ //
60
+ AJAX.timer.start(AJAX,["checkFonts",this,state.jax[this.id]],
61
+ CONFIG.fontCheckDelay,CONFIG.fontCheckTimeout);
62
+ }
63
+ return POSTTRANSLATE.apply(this,arguments); // do the original function
64
+ },
65
+
66
+ checkFonts: function (check,scripts) {
67
+ if (check.time(function () {})) return;
68
+ var size = [], i, m, retry = false;
69
+ //
70
+ // Add the elements used for testing ex and em sizes
71
+ //
72
+ for (i = 0, m = scripts.length; i < m; i++) {
73
+ script = scripts[i];
74
+ if (script.parentNode && script.MathJax.elementJax) {
75
+ script.parentNode.insertBefore(this.EmExSpan.cloneNode(true),script);
76
+ }
77
+ }
78
+ //
79
+ // Check to see if anything has changed
80
+ //
81
+ for (i = 0, m = scripts.length; i < m; i++) {
82
+ script = scripts[i]; if (!script.parentNode) continue; retry = true;
83
+ var jax = script.MathJax.elementJax; if (!jax) continue;
84
+ //
85
+ // Check if ex or mex has changed
86
+ //
87
+ var test = script.previousSibling;
88
+ var ex = test.firstChild.offsetHeight/60;
89
+ var em = test.lastChild.lastChild.offsetHeight/60;
90
+ if (ex === 0 || ex === "NaN") {ex = this.defaultEx; em = this.defaultEm}
91
+ if (ex !== jax.HTMLCSS.ex || em !== jax.HTMLCSS.em) {
92
+ var scale = ex/this.TeX.x_height/em;
93
+ scale = Math.floor(Math.max(this.config.minScaleAdjust/100,scale)*this.config.scale);
94
+ if (scale/100 !== jax.scale) {size.push(script); scripts[i] = {}}
95
+ }
96
+ }
97
+ //
98
+ // Remove markers
99
+ //
100
+ scripts = scripts.concat(size); // some scripts have been moved to the size array
101
+ for (i = 0, m = scripts.length; i < m; i++) {
102
+ script = scripts[i];
103
+ if (script && script.parentNode && script.MathJax.elementJax) {
104
+ script.parentNode.removeChild(script.previousSibling);
105
+ }
106
+ }
107
+ //
108
+ // Rerender the changed items
109
+ //
110
+ if (size.length) {HUB.Queue(["Rerender",HUB,[size],{}])}
111
+ //
112
+ // Try again later
113
+ //
114
+ if (retry) {setTimeout(check,check.delay)}
115
+ }
116
+ });
117
+ });
118
+
119
+ HUB.Register.StartupHook("SVG Jax Ready",function () {
120
+ var SVG = MathJax.OutputJax.SVG;
121
+ var POSTTRANSLATE = SVG.postTranslate;
122
+
123
+ SVG.Augment({
124
+ postTranslate: function (state,partial) {
125
+ if (!partial && CONFIG.matchFor.SVG) {
126
+ //
127
+ // Check for changes in the web fonts that might affect the font
128
+ // size for math elements. This is a periodic check that goes on
129
+ // until a timeout is reached.
130
+ //
131
+ AJAX.timer.start(AJAX,["checkFonts",this,state.jax[this.id]],
132
+ CONFIG.fontCheckDelay,CONFIG.fontCheckTimeout);
133
+ }
134
+ return POSTTRANSLATE.apply(this,arguments); // do the original function
135
+ },
136
+
137
+ checkFonts: function (check,scripts) {
138
+ if (check.time(function () {})) return;
139
+ var size = [], i, m, retry = false;
140
+ //
141
+ // Add the elements used for testing ex and em sizes
142
+ //
143
+ for (i = 0, m = scripts.length; i < m; i++) {
144
+ script = scripts[i];
145
+ if (script.parentNode && script.MathJax.elementJax) {
146
+ script.parentNode.insertBefore(this.ExSpan.cloneNode(true),script);
147
+ }
148
+ }
149
+ //
150
+ // Check to see if anything has changed
151
+ //
152
+ for (i = 0, m = scripts.length; i < m; i++) {
153
+ script = scripts[i]; if (!script.parentNode) continue; retry = true;
154
+ var jax = script.MathJax.elementJax; if (!jax) continue;
155
+ //
156
+ // Check if ex or mex has changed
157
+ //
158
+ var test = script.previousSibling;
159
+ var ex = test.firstChild.offsetHeight/60;
160
+ if (ex === 0 || ex === "NaN") {ex = this.defaultEx}
161
+ if (ex !== jax.SVG.ex) {size.push(script); scripts[i] = {}}
162
+ }
163
+ //
164
+ // Remove markers
165
+ //
166
+ scripts = scripts.concat(size); // some scripts have been moved to the size array
167
+ for (i = 0, m = scripts.length; i < m; i++) {
168
+ script = scripts[i];
169
+ if (script.parentNode && script.MathJax.elementJax) {
170
+ script.parentNode.removeChild(script.previousSibling);
171
+ }
172
+ }
173
+ //
174
+ // Rerender the changed items
175
+ //
176
+ if (size.length) {HUB.Queue(["Rerender",HUB,[size],{}])}
177
+ //
178
+ // Try again later (if not all the scripts are null)
179
+ //
180
+
181
+ if (retry) setTimeout(check,check.delay);
182
+ }
183
+ });
184
+ });
185
+
186
+ HUB.Register.StartupHook("NativeMML Jax Ready",function () {
187
+ var nMML = MathJax.OutputJax.NativeMML;
188
+ var POSTTRANSLATE = nMML.postTranslate;
189
+
190
+ nMML.Augment({
191
+ postTranslate: function (state) {
192
+ if (!HUB.Browser.isMSIE && CONFIG.matchFor.NativeMML) {
193
+ //
194
+ // Check for changes in the web fonts that might affect the sizes
195
+ // of math elements. This is a periodic check that goes on until
196
+ // a timeout is reached.
197
+ //
198
+ AJAX.timer.start(AJAX,["checkFonts",this,state.jax[this.id]],
199
+ CONFIG.fontCheckDelay,CONFIG.fontCheckTimeout);
200
+ }
201
+ POSTTRANSLATE.apply(this,arguments); // do the original routine
202
+ },
203
+
204
+ //
205
+ // Check to see if web fonts have been loaded that change the ex size
206
+ // of the surrounding font, the ex size within the math, or the widths
207
+ // of math elements. We do this by rechecking the ex and mex sizes
208
+ // (to see if the font scaling needs adjusting) and by checking the
209
+ // size of the inner mrow of math elements and mtd elements. The
210
+ // sizes of these have been stored in the NativeMML object of the
211
+ // element jax so that we can check for them here.
212
+ //
213
+ checkFonts: function (check,scripts) {
214
+ if (check.time(function () {})) return;
215
+ var adjust = [], mtd = [], size = [], i, m, script;
216
+ //
217
+ // Add the elements used for testing ex and em sizes
218
+ //
219
+ for (i = 0, m = scripts.length; i < m; i++) {
220
+ script = scripts[i];
221
+ if (script.parentNode && script.MathJax.elementJax) {
222
+ script.parentNode.insertBefore(this.EmExSpan.cloneNode(true),script);
223
+ }
224
+ }
225
+ //
226
+ // Check to see if anything has changed
227
+ //
228
+ for (i = 0, m = scripts.length; i < m; i++) {
229
+ script = scripts[i]; if (!script.parentNode) continue;
230
+ var jax = script.MathJax.elementJax; if (!jax) continue;
231
+ var span = document.getElementById(jax.inputID+"-Frame");
232
+ var math = span.getElementsByTagName("math")[0]; if (!math) continue;
233
+ jax = jax.NativeMML;
234
+ //
235
+ // Check if ex or mex has changed
236
+ //
237
+ var test = script.previousSibling;
238
+ var ex = test.firstChild.offsetWidth/60;
239
+ var mex = test.lastChild.offsetWidth/60;
240
+ if (ex === 0 || ex === "NaN") {ex = this.defaultEx; mex = this.defaultMEx}
241
+ var newEx = (ex !== jax.ex);
242
+ if (newEx || mex != jax.mex) {
243
+ var scale = (this.config.matchFontHeight && mex > 1 ? ex/mex : 1);
244
+ scale = Math.floor(Math.max(this.config.minScaleAdjust/100,scale) * this.config.scale);
245
+ if (scale/100 !== jax.scale) {size.push([span.style,scale])}
246
+ jax.scale = scale/100; jax.fontScale = scale+"%"; jax.ex = ex; jax.mex = mex;
247
+ }
248
+
249
+ //
250
+ // Check width of math elements
251
+ //
252
+ if ("scrollWidth" in jax && (newEx || jax.scrollWidth !== math.firstChild.scrollWidth)) {
253
+ jax.scrollWidth = math.firstChild.scrollWidth;
254
+ adjust.push([math.parentNode.style,jax.scrollWidth/jax.ex/jax.scale]);
255
+ }
256
+ //
257
+ // Check widths of mtd elements
258
+ //
259
+ if (math.MathJaxMtds) {
260
+ for (var j = 0, n = math.MathJaxMtds.length; j < n; j++) {
261
+ if (!math.MathJaxMtds[j].parentNode) continue;
262
+ if (newEx || math.MathJaxMtds[j].firstChild.scrollWidth !== jax.mtds[j]) {
263
+ jax.mtds[j] = math.MathJaxMtds[j].firstChild.scrollWidth;
264
+ mtd.push([math.MathJaxMtds[j],jax.mtds[j]/jax.ex]);
265
+ }
266
+ }
267
+ }
268
+ }
269
+ //
270
+ // Remove markers
271
+ //
272
+ for (i = 0, m = scripts.length; i < m; i++) {
273
+ script = scripts[i];
274
+ if (script.parentNode && script.MathJax.elementJax) {
275
+ script.parentNode.removeChild(script.previousSibling);
276
+ }
277
+ }
278
+ //
279
+ // Adjust scaling factor
280
+ //
281
+ for (i = 0, m = size.length; i < m; i++) {
282
+ size[i][0].fontSize = size[i][1] + "%";
283
+ }
284
+ //
285
+ // Adjust width of spans containing math elements that have changed
286
+ //
287
+ for (i = 0, m = adjust.length; i < m; i++) {
288
+ adjust[i][0].width = adjust[i][1].toFixed(3)+"ex";
289
+ }
290
+ //
291
+ // Adjust widths of mtd elements that have changed
292
+ //
293
+ for (i = 0, m = mtd.length; i < m; i++) {
294
+ var style = mtd[i][0].getAttribute("style");
295
+ style = style.replace(/(($|;)\s*min-width:).*?ex/,"$1 "+mtd[i][1].toFixed(3)+"ex");
296
+ mtd[i][0].setAttribute("style",style);
297
+ }
298
+ //
299
+ // Try again later
300
+ //
301
+ setTimeout(check,check.delay);
302
+ }
303
+ });
304
+ });
305
+
306
+ HUB.Startup.signal.Post("MatchWebFonts Extension Ready");
307
+ AJAX.loadComplete("[MathJax]/extensions/MatchWebFonts.js");
308
+
309
+ })(MathJax.Hub,MathJax.Ajax);
vendor/MathJax/extensions/MathEvents.js ADDED
@@ -0,0 +1,619 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/MathEvents.js
7
+ *
8
+ * Implements the event handlers needed by the output jax to perform
9
+ * menu, hover, and other events.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2011-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ (function (HUB,HTML,AJAX,CALLBACK,LOCALE,OUTPUT,INPUT) {
29
+ var VERSION = "2.7.5";
30
+
31
+ var EXTENSION = MathJax.Extension;
32
+ var ME = EXTENSION.MathEvents = {version: VERSION};
33
+
34
+ var SETTINGS = HUB.config.menuSettings;
35
+
36
+ var CONFIG = {
37
+ hover: 500, // time required to be considered a hover
38
+ frame: {
39
+ x: 3.5, y: 5, // frame padding and
40
+ bwidth: 1, // frame border width (in pixels)
41
+ bcolor: "#A6D", // frame border color
42
+ hwidth: "15px", // haze width
43
+ hcolor: "#83A" // haze color
44
+ },
45
+ button: {
46
+ x: -6, y: -3, // menu button offsets
47
+ wx: -2 // button offset for full-width equations
48
+ },
49
+ fadeinInc: .2, // increment for fade-in
50
+ fadeoutInc: .05, // increment for fade-out
51
+ fadeDelay: 50, // delay between fade-in or fade-out steps
52
+ fadeoutStart: 400, // delay before fade-out after mouseout
53
+ fadeoutDelay: 15*1000, // delay before automatic fade-out
54
+
55
+ styles: {
56
+ ".MathJax_Hover_Frame": {
57
+ "border-radius": ".25em", // Opera 10.5 and IE9
58
+ "-webkit-border-radius": ".25em", // Safari and Chrome
59
+ "-moz-border-radius": ".25em", // Firefox
60
+ "-khtml-border-radius": ".25em", // Konqueror
61
+
62
+ "box-shadow": "0px 0px 15px #83A", // Opera 10.5 and IE9
63
+ "-webkit-box-shadow": "0px 0px 15px #83A", // Safari and Chrome
64
+ "-moz-box-shadow": "0px 0px 15px #83A", // Forefox
65
+ "-khtml-box-shadow": "0px 0px 15px #83A", // Konqueror
66
+
67
+ border: "1px solid #A6D ! important",
68
+ display: "inline-block", position:"absolute"
69
+ },
70
+
71
+ ".MathJax_Menu_Button .MathJax_Hover_Arrow": {
72
+ position:"absolute",
73
+ cursor:"pointer",
74
+ display:"inline-block",
75
+ border:"2px solid #AAA",
76
+ "border-radius":"4px",
77
+ "-webkit-border-radius": "4px", // Safari and Chrome
78
+ "-moz-border-radius": "4px", // Firefox
79
+ "-khtml-border-radius": "4px", // Konqueror
80
+ "font-family":"'Courier New',Courier",
81
+ "font-size":"9px",
82
+ color:"#F0F0F0"
83
+ },
84
+ ".MathJax_Menu_Button .MathJax_Hover_Arrow span": {
85
+ display:"block",
86
+ "background-color":"#AAA",
87
+ border:"1px solid",
88
+ "border-radius":"3px",
89
+ "line-height":0,
90
+ padding:"4px"
91
+ },
92
+ ".MathJax_Hover_Arrow:hover": {
93
+ color:"white!important",
94
+ border:"2px solid #CCC!important"
95
+ },
96
+ ".MathJax_Hover_Arrow:hover span": {
97
+ "background-color":"#CCC!important"
98
+ }
99
+ }
100
+ };
101
+
102
+
103
+ //
104
+ // Common event-handling code
105
+ //
106
+ var EVENT = ME.Event = {
107
+
108
+ LEFTBUTTON: 0, // the event.button value for left button
109
+ RIGHTBUTTON: 2, // the event.button value for right button
110
+ MENUKEY: "altKey", // the event value for alternate context menu
111
+
112
+ /*************************************************************/
113
+ /*
114
+ * Enum element for key codes.
115
+ */
116
+ KEY: {
117
+ RETURN: 13,
118
+ ESCAPE: 27,
119
+ SPACE: 32,
120
+ LEFT: 37,
121
+ UP: 38,
122
+ RIGHT: 39,
123
+ DOWN: 40
124
+ },
125
+
126
+ Mousedown: function (event) {return EVENT.Handler(event,"Mousedown",this)},
127
+ Mouseup: function (event) {return EVENT.Handler(event,"Mouseup",this)},
128
+ Mousemove: function (event) {return EVENT.Handler(event,"Mousemove",this)},
129
+ Mouseover: function (event) {return EVENT.Handler(event,"Mouseover",this)},
130
+ Mouseout: function (event) {return EVENT.Handler(event,"Mouseout",this)},
131
+ Click: function (event) {return EVENT.Handler(event,"Click",this)},
132
+ DblClick: function (event) {return EVENT.Handler(event,"DblClick",this)},
133
+ Menu: function (event) {return EVENT.Handler(event,"ContextMenu",this)},
134
+
135
+ //
136
+ // Call the output jax's event handler or the zoom handler
137
+ //
138
+ Handler: function (event,type,math) {
139
+ if (AJAX.loadingMathMenu) {return EVENT.False(event)}
140
+ var jax = OUTPUT[math.jaxID];
141
+ if (!event) {event = window.event}
142
+ event.isContextMenu = (type === "ContextMenu");
143
+ if (jax[type]) {return jax[type](event,math)}
144
+ if (EXTENSION.MathZoom) {return EXTENSION.MathZoom.HandleEvent(event,type,math)}
145
+ },
146
+
147
+ //
148
+ // Try to cancel the event in every way we can
149
+ //
150
+ False: function (event) {
151
+ if (!event) {event = window.event}
152
+ if (event) {
153
+ if (event.preventDefault) {event.preventDefault()} else {event.returnValue = false}
154
+ if (event.stopPropagation) {event.stopPropagation()}
155
+ event.cancelBubble = true;
156
+ }
157
+ return false;
158
+ },
159
+
160
+ //
161
+ // Keydown event handler. Should only fire on Space key.
162
+ //
163
+ Keydown: function (event, math) {
164
+ if (!event) event = window.event;
165
+ if (event.keyCode === EVENT.KEY.SPACE) {
166
+ EVENT.ContextMenu(event, this);
167
+ };
168
+ },
169
+
170
+ //
171
+ // Load the contextual menu code, if needed, and post the menu
172
+ //
173
+ ContextMenu: function (event,math,force) {
174
+ //
175
+ // Check if we are showing menus
176
+ //
177
+ var JAX = OUTPUT[math.jaxID], jax = JAX.getJaxFromMath(math);
178
+ var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
179
+ if (!show || (SETTINGS.context !== "MathJax" && !force)) return;
180
+
181
+ //
182
+ // Remove selections, remove hover fades
183
+ //
184
+ if (ME.msieEventBug) {event = window.event || event}
185
+ EVENT.ClearSelection(); HOVER.ClearHoverTimer();
186
+ if (jax.hover) {
187
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove); delete jax.hover.remove}
188
+ jax.hover.nofade = true;
189
+ }
190
+
191
+ //
192
+ // If the menu code is loaded,
193
+ // Check if localization needs loading;
194
+ // If not, post the menu, and return.
195
+ // Otherwise wait for the localization to load
196
+ // Otherwse load the menu code.
197
+ // Try again after the file is loaded.
198
+ //
199
+ var MENU = MathJax.Menu; var load, fn;
200
+ if (MENU) {
201
+ if (MENU.loadingDomain) {return EVENT.False(event)}
202
+ load = LOCALE.loadDomain("MathMenu");
203
+ if (!load) {
204
+ MENU.jax = jax;
205
+ var source = MENU.menu.Find("Show Math As").submenu;
206
+ source.items[0].name = jax.sourceMenuTitle;
207
+ source.items[0].format = (jax.sourceMenuFormat||"MathML");
208
+ source.items[1].name = INPUT[jax.inputJax].sourceMenuTitle;
209
+ source.items[5].disabled = !INPUT[jax.inputJax].annotationEncoding;
210
+
211
+ //
212
+ // Try and find each known annotation format and enable the menu
213
+ // items accordingly.
214
+ //
215
+ var annotations = source.items[2]; annotations.disabled = true;
216
+ var annotationItems = annotations.submenu.items;
217
+ annotationList = MathJax.Hub.Config.semanticsAnnotations;
218
+ for (var i = 0, m = annotationItems.length; i < m; i++) {
219
+ var name = annotationItems[i].name[1]
220
+ if (jax.root && jax.root.getAnnotation(name) !== null) {
221
+ annotations.disabled = false;
222
+ annotationItems[i].hidden = false;
223
+ } else {
224
+ annotationItems[i].hidden = true;
225
+ }
226
+ }
227
+
228
+ var MathPlayer = MENU.menu.Find("Math Settings","MathPlayer");
229
+ MathPlayer.hidden = !(jax.outputJax === "NativeMML" && HUB.Browser.hasMathPlayer);
230
+ return MENU.menu.Post(event);
231
+ }
232
+ MENU.loadingDomain = true;
233
+ fn = function () {delete MENU.loadingDomain};
234
+ } else {
235
+ if (AJAX.loadingMathMenu) {return EVENT.False(event)}
236
+ AJAX.loadingMathMenu = true;
237
+ load = AJAX.Require("[MathJax]/extensions/MathMenu.js");
238
+ fn = function () {
239
+ delete AJAX.loadingMathMenu;
240
+ if (!MathJax.Menu) {MathJax.Menu = {}}
241
+ }
242
+ }
243
+ var ev = {
244
+ pageX:event.pageX, pageY:event.pageY,
245
+ clientX:event.clientX, clientY:event.clientY
246
+ };
247
+ CALLBACK.Queue(
248
+ load, fn, // load the file and delete the marker when done
249
+ ["ContextMenu",EVENT,ev,math,force] // call this function again
250
+ );
251
+ return EVENT.False(event);
252
+ },
253
+
254
+ //
255
+ // Mousedown handler for alternate means of accessing menu
256
+ //
257
+ AltContextMenu: function (event,math) {
258
+ var JAX = OUTPUT[math.jaxID];
259
+ var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
260
+ if (show) {
261
+ show = (JAX.config.showMathMenuMSIE != null ? JAX : HUB).config.showMathMenuMSIE;
262
+ if (SETTINGS.context === "MathJax" && !SETTINGS.mpContext && show) {
263
+ if (!ME.noContextMenuBug || event.button !== EVENT.RIGHTBUTTON) return;
264
+ } else {
265
+ if (!event[EVENT.MENUKEY] || event.button !== EVENT.LEFTBUTTON) return;
266
+ }
267
+ return JAX.ContextMenu(event,math,true);
268
+ }
269
+ },
270
+
271
+ ClearSelection: function () {
272
+ if (ME.safariContextMenuBug) {setTimeout("window.getSelection().empty()",0)}
273
+ if (document.selection) {setTimeout("document.selection.empty()",0)}
274
+ },
275
+
276
+ getBBox: function (span) {
277
+ span.appendChild(ME.topImg);
278
+ var h = ME.topImg.offsetTop, d = span.offsetHeight-h, w = span.offsetWidth;
279
+ span.removeChild(ME.topImg);
280
+ return {w:w, h:h, d:d};
281
+ }
282
+
283
+ };
284
+
285
+ //
286
+ // Handle hover "discoverability"
287
+ //
288
+ var HOVER = ME.Hover = {
289
+
290
+ //
291
+ // Check if we are moving from a non-MathJax element to a MathJax one
292
+ // and either start fading in again (if it is fading out) or start the
293
+ // timer for the hover
294
+ //
295
+ Mouseover: function (event,math) {
296
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
297
+ var from = event.fromElement || event.relatedTarget,
298
+ to = event.toElement || event.target;
299
+ if (from && to && (HUB.isMathJaxNode(from) !== HUB.isMathJaxNode(to) ||
300
+ HUB.getJaxFor(from) !== HUB.getJaxFor(to))) {
301
+ var jax = this.getJaxFromMath(math);
302
+ if (jax.hover) {HOVER.ReHover(jax)} else {HOVER.HoverTimer(jax,math)}
303
+ return EVENT.False(event);
304
+ }
305
+ }
306
+ },
307
+ //
308
+ // Check if we are moving from a MathJax element to a non-MathJax one
309
+ // and either start fading out, or clear the timer if we haven't
310
+ // hovered yet
311
+ //
312
+ Mouseout: function (event,math) {
313
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
314
+ var from = event.fromElement || event.relatedTarget,
315
+ to = event.toElement || event.target;
316
+ if (from && to && (HUB.isMathJaxNode(from) !== HUB.isMathJaxNode(to) ||
317
+ HUB.getJaxFor(from) !== HUB.getJaxFor(to))) {
318
+ var jax = this.getJaxFromMath(math);
319
+ if (jax.hover) {HOVER.UnHover(jax)} else {HOVER.ClearHoverTimer()}
320
+ return EVENT.False(event);
321
+ }
322
+ }
323
+ },
324
+ //
325
+ // Restart hover timer if the mouse moves
326
+ //
327
+ Mousemove: function (event,math) {
328
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
329
+ var jax = this.getJaxFromMath(math); if (jax.hover) return;
330
+ if (HOVER.lastX == event.clientX && HOVER.lastY == event.clientY) return;
331
+ HOVER.lastX = event.clientX; HOVER.lastY = event.clientY;
332
+ HOVER.HoverTimer(jax,math);
333
+ return EVENT.False(event);
334
+ }
335
+ },
336
+
337
+ //
338
+ // Clear the old timer and start a new one
339
+ //
340
+ HoverTimer: function (jax,math) {
341
+ this.ClearHoverTimer();
342
+ this.hoverTimer = setTimeout(CALLBACK(["Hover",this,jax,math]),CONFIG.hover);
343
+ },
344
+ ClearHoverTimer: function () {
345
+ if (this.hoverTimer) {clearTimeout(this.hoverTimer); delete this.hoverTimer}
346
+ },
347
+
348
+ //
349
+ // Handle putting up the hover frame
350
+ //
351
+ Hover: function (jax,math) {
352
+ //
353
+ // Check if Zoom handles the hover event
354
+ //
355
+ if (EXTENSION.MathZoom && EXTENSION.MathZoom.Hover({},math)) return;
356
+ //
357
+ // Get the hover data
358
+ //
359
+ var JAX = OUTPUT[jax.outputJax],
360
+ span = JAX.getHoverSpan(jax,math),
361
+ bbox = JAX.getHoverBBox(jax,span,math),
362
+ show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
363
+ var dx = CONFIG.frame.x, dy = CONFIG.frame.y, dd = CONFIG.frame.bwidth; // frame size
364
+ if (ME.msieBorderWidthBug) {dd = 0}
365
+ jax.hover = {opacity:0, id:jax.inputID+"-Hover"};
366
+ //
367
+ // The frame and menu button
368
+ //
369
+ var frame = HTML.Element("span",{
370
+ id:jax.hover.id, isMathJax: true,
371
+ style:{display:"inline-block", width:0, height:0, position:"relative"}
372
+ },[["span",{
373
+ className:"MathJax_Hover_Frame", isMathJax: true,
374
+ style:{
375
+ display:"inline-block", position:"absolute",
376
+ top:this.Px(-bbox.h-dy-dd-(bbox.y||0)), left:this.Px(-dx-dd+(bbox.x||0)),
377
+ width:this.Px(bbox.w+2*dx), height:this.Px(bbox.h+bbox.d+2*dy),
378
+ opacity:0, filter:"alpha(opacity=0)"
379
+ }}
380
+ ]]
381
+ );
382
+ var button = HTML.Element("span",{
383
+ isMathJax: true, id:jax.hover.id+"Menu", className:"MathJax_Menu_Button",
384
+ style:{display:"inline-block", "z-index": 1, width:0, height:0, position:"relative"}
385
+ },[["span",{
386
+ className: "MathJax_Hover_Arrow", isMathJax: true, math: math,
387
+ onclick: this.HoverMenu, jax:JAX.id,
388
+ style: {
389
+ left:this.Px(bbox.w+dx+dd+(bbox.x||0)+CONFIG.button.x),
390
+ top:this.Px(-bbox.h-dy-dd-(bbox.y||0)-CONFIG.button.y),
391
+ opacity:0, filter:"alpha(opacity=0)"
392
+ }
393
+ },[["span",{isMathJax:true},"\u25BC"]]]]
394
+ );
395
+ if (bbox.width) {
396
+ frame.style.width = button.style.width = bbox.width;
397
+ frame.style.marginRight = button.style.marginRight = "-"+bbox.width;
398
+ frame.firstChild.style.width = bbox.width;
399
+ button.firstChild.style.left = "";
400
+ button.firstChild.style.right = this.Px(CONFIG.button.wx);
401
+ }
402
+ //
403
+ // Add the frame and button
404
+ //
405
+ span.parentNode.insertBefore(frame,span);
406
+ if (show) {span.parentNode.insertBefore(button,span)}
407
+ if (span.style) {span.style.position = "relative"} // so math is on top of hover frame
408
+ //
409
+ // Start the hover fade-in
410
+ //
411
+ this.ReHover(jax);
412
+ },
413
+ //
414
+ // Restart the hover fade in and fade-out timers
415
+ //
416
+ ReHover: function (jax) {
417
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
418
+ jax.hover.remove = setTimeout(CALLBACK(["UnHover",this,jax]),CONFIG.fadeoutDelay);
419
+ this.HoverFadeTimer(jax,CONFIG.fadeinInc);
420
+ },
421
+ //
422
+ // Start the fade-out
423
+ //
424
+ UnHover: function (jax) {
425
+ if (!jax.hover.nofade) {this.HoverFadeTimer(jax,-CONFIG.fadeoutInc,CONFIG.fadeoutStart)}
426
+ },
427
+ //
428
+ // Handle the fade-in and fade-out
429
+ //
430
+ HoverFade: function (jax) {
431
+ delete jax.hover.timer;
432
+ jax.hover.opacity = Math.max(0,Math.min(1,jax.hover.opacity + jax.hover.inc));
433
+ jax.hover.opacity = Math.floor(1000*jax.hover.opacity)/1000;
434
+ var frame = document.getElementById(jax.hover.id),
435
+ button = document.getElementById(jax.hover.id+"Menu");
436
+ frame.firstChild.style.opacity = jax.hover.opacity;
437
+ frame.firstChild.style.filter = "alpha(opacity="+Math.floor(100*jax.hover.opacity)+")";
438
+ if (button) {
439
+ button.firstChild.style.opacity = jax.hover.opacity;
440
+ button.firstChild.style.filter = frame.style.filter;
441
+ }
442
+ if (jax.hover.opacity === 1) {return}
443
+ if (jax.hover.opacity > 0) {this.HoverFadeTimer(jax,jax.hover.inc); return}
444
+ frame.parentNode.removeChild(frame);
445
+ if (button) {button.parentNode.removeChild(button)}
446
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
447
+ delete jax.hover;
448
+ },
449
+ //
450
+ // Set the fade to in or out (via inc) and start the timer, if needed
451
+ //
452
+ HoverFadeTimer: function (jax,inc,delay) {
453
+ jax.hover.inc = inc;
454
+ if (!jax.hover.timer) {
455
+ jax.hover.timer = setTimeout(CALLBACK(["HoverFade",this,jax]),(delay||CONFIG.fadeDelay));
456
+ }
457
+ },
458
+
459
+ //
460
+ // Handle a click on the menu button
461
+ //
462
+ HoverMenu: function (event) {
463
+ if (!event) {event = window.event}
464
+ return OUTPUT[this.jax].ContextMenu(event,this.math,true);
465
+ },
466
+
467
+ //
468
+ // Clear all hover timers
469
+ //
470
+ ClearHover: function (jax) {
471
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
472
+ if (jax.hover.timer) {clearTimeout(jax.hover.timer)}
473
+ HOVER.ClearHoverTimer();
474
+ delete jax.hover;
475
+ },
476
+
477
+ //
478
+ // Make a measurement in pixels
479
+ //
480
+ Px: function (m) {
481
+ if (Math.abs(m) < .006) {return "0px"}
482
+ return m.toFixed(2).replace(/\.?0+$/,"") + "px";
483
+ },
484
+
485
+ //
486
+ // Preload images so they show up with the menu
487
+ //
488
+ getImages: function () {
489
+ if (SETTINGS.discoverable) {
490
+ var menu = new Image();
491
+ menu.src = CONFIG.button.src;
492
+ }
493
+ }
494
+
495
+ };
496
+
497
+ //
498
+ // Handle touch events.
499
+ //
500
+ // Use double-tap-and-hold as a replacement for context menu event.
501
+ // Use double-tap as a replacement for double click.
502
+ //
503
+ var TOUCH = ME.Touch = {
504
+
505
+ last: 0, // time of last tap event
506
+ delay: 500, // delay time for double-click
507
+
508
+ //
509
+ // Check if this is a double-tap, and if so, start the timer
510
+ // for the double-tap and hold (to trigger the contextual menu)
511
+ //
512
+ start: function (event) {
513
+ var now = new Date().getTime();
514
+ var dblTap = (now - TOUCH.last < TOUCH.delay && TOUCH.up);
515
+ TOUCH.last = now; TOUCH.up = false;
516
+ if (dblTap) {
517
+ TOUCH.timeout = setTimeout(TOUCH.menu,TOUCH.delay,event,this);
518
+ event.preventDefault();
519
+ }
520
+ },
521
+
522
+ //
523
+ // Check if there is a timeout pending, i.e., we have a
524
+ // double-tap and were waiting to see if it is held long
525
+ // enough for the menu. Since we got the end before the
526
+ // timeout, it is a double-click, not a double-tap-and-hold.
527
+ // Prevent the default action and issue a double click.
528
+ //
529
+ end: function (event) {
530
+ var now = new Date().getTime();
531
+ TOUCH.up = (now - TOUCH.last < TOUCH.delay);
532
+ if (TOUCH.timeout) {
533
+ clearTimeout(TOUCH.timeout);
534
+ delete TOUCH.timeout; TOUCH.last = 0; TOUCH.up = false;
535
+ event.preventDefault();
536
+ return EVENT.Handler((event.touches[0]||event.touch),"DblClick",this);
537
+ }
538
+ },
539
+
540
+ //
541
+ // If the timeout passes without an end event, we issue
542
+ // the contextual menu event.
543
+ //
544
+ menu: function (event,math) {
545
+ delete TOUCH.timeout; TOUCH.last = 0; TOUCH.up = false;
546
+ return EVENT.Handler((event.touches[0]||event.touch),"ContextMenu",math);
547
+ }
548
+
549
+ };
550
+
551
+ /*
552
+ * //
553
+ * // Mobile screens are small, so use larger version of arrow
554
+ * //
555
+ * if (HUB.Browser.isMobile) {
556
+ * var arrow = CONFIG.styles[".MathJax_Hover_Arrow"];
557
+ * arrow.width = "25px"; arrow.height = "18px";
558
+ * CONFIG.button.x = -6;
559
+ * }
560
+ */
561
+
562
+ //
563
+ // Set up browser-specific values
564
+ //
565
+ HUB.Browser.Select({
566
+ MSIE: function (browser) {
567
+ var mode = (document.documentMode || 0);
568
+ var isIE8 = browser.versionAtLeast("8.0");
569
+ ME.msieBorderWidthBug = (document.compatMode === "BackCompat"); // borders are inside offsetWidth/Height
570
+ ME.msieEventBug = browser.isIE9; // must get event from window even though event is passed
571
+ ME.msieAlignBug = (!isIE8 || mode < 8); // inline-block spans don't rest on baseline
572
+ if (mode < 9) {EVENT.LEFTBUTTON = 1} // IE < 9 has wrong event.button values
573
+ },
574
+ Safari: function (browser) {
575
+ ME.safariContextMenuBug = true; // selection can be started by contextmenu event
576
+ },
577
+ Opera: function (browser) {
578
+ ME.operaPositionBug = true; // position is wrong unless border is used
579
+ },
580
+ Konqueror: function (browser) {
581
+ ME.noContextMenuBug = true; // doesn't produce contextmenu event
582
+ }
583
+ });
584
+
585
+ //
586
+ // Used in measuring zoom and hover positions
587
+ //
588
+ ME.topImg = (ME.msieAlignBug ?
589
+ HTML.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}) :
590
+ HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}})
591
+ );
592
+ if (ME.operaPositionBug) {ME.topImg.style.border="1px solid"}
593
+
594
+ //
595
+ // Get configuration from user
596
+ //
597
+ ME.config = CONFIG = HUB.CombineConfig("MathEvents",CONFIG);
598
+ var SETFRAME = function () {
599
+ var haze = CONFIG.styles[".MathJax_Hover_Frame"];
600
+ haze.border = CONFIG.frame.bwidth+"px solid "+CONFIG.frame.bcolor+" ! important";
601
+ haze["box-shadow"] = haze["-webkit-box-shadow"] =
602
+ haze["-moz-box-shadow"] = haze["-khtml-box-shadow"] =
603
+ "0px 0px "+CONFIG.frame.hwidth+" "+CONFIG.frame.hcolor;
604
+ };
605
+
606
+ //
607
+ // Queue the events needed for startup
608
+ //
609
+ CALLBACK.Queue(
610
+ HUB.Register.StartupHook("End Config",{}), // wait until config is complete
611
+ [SETFRAME],
612
+ ["getImages",HOVER],
613
+ ["Styles",AJAX,CONFIG.styles],
614
+ ["Post",HUB.Startup.signal,"MathEvents Ready"],
615
+ ["loadComplete",AJAX,"[MathJax]/extensions/MathEvents.js"]
616
+ );
617
+
618
+ })(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.Callback,
619
+ MathJax.Localization,MathJax.OutputJax,MathJax.InputJax);
vendor/MathJax/extensions/MathML/content-mathml.js ADDED
@@ -0,0 +1,1743 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/MathML/content-mathml.js
7
+ *
8
+ * This file provides methods to convert Content-MathML to
9
+ * Presentation MathML for processing by MathJax. The transform is
10
+ * performed in a DOM filter for the MathML input jax, so that the
11
+ * Show Math As menu will still show the Original MathML as Content MathML,
12
+ * but the Presentation MathML can be obtained from the main MathML menu.
13
+ *
14
+ * To load it, include
15
+ *
16
+ * MathML: {
17
+ * extensions: ["content-mathml.js"]
18
+ * }
19
+ *
20
+ * in your configuration.
21
+ *
22
+ * A portion of this file is taken from ctop.js which is
23
+ * Copyright (c) David Carlisle 2001, 2002, 2008, 2009, 2013,
24
+ * and is used by permission of David Carlisle, who has agreed to allow us
25
+ * to release it under the Apache2 license (see below). That portion is
26
+ * indicated via comments.
27
+ *
28
+ * The remainder falls under the copyright that follows.
29
+ * ---------------------------------------------------------------------
30
+ *
31
+ * Copyright (c) 2013-2018 The MathJax Consortium
32
+ *
33
+ * Licensed under the Apache License, Version 2.0 (the "License");
34
+ * you may not use this file except in compliance with the License.
35
+ * You may obtain a copy of the License at
36
+ *
37
+ * http://www.apache.org/licenses/LICENSE-2.0
38
+ *
39
+ * Unless required by applicable law or agreed to in writing, software
40
+ * distributed under the License is distributed on an "AS IS" BASIS,
41
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42
+ * See the License for the specific language governing permissions and
43
+ * limitations under the License.
44
+ */
45
+
46
+
47
+ MathJax.Extension["MathML/content-mathml"] = (function(HUB) {
48
+ /*
49
+ * Content MathML to Presentation MathML conversion
50
+ *
51
+ * based on David Carlisle's ctop.js - https://web-xslt.googlecode.com/svn/trunk/ctop/ctop.js
52
+ *
53
+ */
54
+
55
+
56
+ var isMSIE = HUB.Browser.isMSIE;
57
+
58
+ if (isMSIE) {
59
+ try {document.namespaces.add("m","http://www.w3.org/1998/Math/MathML")} catch (err) {}
60
+ }
61
+
62
+ var CONFIG = HUB.CombineConfig("MathML.content-mathml",{
63
+ // render `a+(-b)` as `a-b`?
64
+ collapsePlusMinus: true,
65
+
66
+ /* mathvariant to use with corresponding <ci> type attribute */
67
+ cistyles: {
68
+ vector: 'bold-italic',
69
+ matrix: 'bold-upright'
70
+ },
71
+
72
+ /* Symbol names to translate to characters
73
+ */
74
+ symbols: {
75
+ gamma: '\u03B3'
76
+ }
77
+
78
+ });
79
+
80
+ var CToP = {
81
+ version: "2.7.5",
82
+ settings: CONFIG,
83
+
84
+ /* Transform the given <math> elements from Content MathML to Presentation MathML and replace the original elements
85
+ */
86
+ transformElements: function(elements) {
87
+ for (var i = 0, l = elements.length; i<l; i++ ) {
88
+ var mathNode = CToP.transformElement(elements[i]);
89
+ elements[i].parentNode.replaceChild(mathNode,elements[i]);
90
+ }
91
+ },
92
+
93
+ /* Transform a Content MathML element into Presentation MathML, and return the new element
94
+ */
95
+ transformElement: function(element) {
96
+ if (element.nodeName.indexOf(":") >= 0) element = CToP.cloneNode(element,true); // removes namespaces
97
+ var mathNode = CToP.cloneNode(element);
98
+ for (var j = 0, l = element.childNodes.length; j<l; j++ ) {
99
+ CToP.applyTransform(mathNode,element.childNodes[j],0);
100
+ }
101
+ return mathNode;
102
+ },
103
+
104
+ getTextContent: function(element) {
105
+ return element.text !== undefined ? element.text : element.innerText !== undefined ? element.innerText : element.textContent;
106
+ },
107
+
108
+ setTextContent: function(element,textContent) {
109
+ for (var i = 0, l = element.childNodes.length; i<l; i++) {
110
+ if (element.childNodes[i].nodeType === 3) {
111
+ element.removeChild(element.childNodes[i]);
112
+ i--;
113
+ l--;
114
+ }
115
+ }
116
+ element.appendChild(document.createTextNode(textContent));
117
+ },
118
+
119
+ cloneNode: function(element,deep) {
120
+ var clone, i, l;
121
+ if (element.nodeType === 1) {
122
+ clone = CToP.createElement(element.nodeName);
123
+ for (i = 0, l = element.attributes.length; i<l; i++ ) {
124
+ clone.setAttribute(element.attributes[i].nodeName,element.attributes[i].nodeValue);
125
+ }
126
+ if (deep) {
127
+ for (i = 0, l = element.childNodes.length; i<l; i++ ) {
128
+ var clonedChild = CToP.cloneNode(element.childNodes[i],true);
129
+ clone.appendChild(clonedChild);
130
+ }
131
+ }
132
+ } else if (element.nodeType === 3) {
133
+ clone = document.createTextNode(element.nodeValue);
134
+ }
135
+ return clone;
136
+ },
137
+
138
+ /* Create an element with given name, belonging to the MathML namespace
139
+ */
140
+ createElement: function(name) {
141
+ name = name.replace(/^.*:/,""); // remove namespace
142
+ return (document.createElementNS ?
143
+ document.createElementNS("http://www.w3.org/1998/Math/MathML",name) :
144
+ document.createElement("m:"+name));
145
+ },
146
+
147
+ /* Get node's children
148
+ */
149
+ getChildren: function(node) {
150
+ var children = [];
151
+ for (var j = 0, l = node.childNodes.length; j<l; j++ ) {
152
+ if (node.childNodes[j].nodeType === 1) {
153
+ children.push(node.childNodes[j]);
154
+ }
155
+ }
156
+ return children;
157
+ },
158
+
159
+ /* Classify node's children as argumentss, variable bindings, or qualifiers
160
+ */
161
+ classifyChildren: function(contentMMLNode) {
162
+ var args = [], bvars = [], qualifiers = [];
163
+ for (var j = 0, l = contentMMLNode.childNodes.length; j<l; j++ ) {
164
+ if (contentMMLNode.childNodes[j].nodeType === 1) {
165
+ var childNode = contentMMLNode.childNodes[j], name = childNode.nodeName;
166
+ if (name === 'bvar') {
167
+ bvars.push(childNode);
168
+ } else if (name === 'condition'||
169
+ name === 'degree'||
170
+ name === 'momentabout'||
171
+ name === 'logbase'||
172
+ name === 'lowlimit'||
173
+ name === 'uplimit'||
174
+ (name === 'interval' && args.length<2)||
175
+ name === 'domainofapplication') {
176
+ qualifiers.push(childNode);
177
+ } else {
178
+ args.push(childNode);
179
+ }
180
+ }
181
+ }
182
+ return {
183
+ args:args,
184
+ bvars:bvars,
185
+ qualifiers:qualifiers
186
+ };
187
+ },
188
+
189
+ /* Add an element with given name and text content
190
+ */
191
+ appendToken: function(parentNode,name,textContent) {
192
+ var element = CToP.createElement(name);
193
+ textContent = textContent.replace(/^\s+/,"").replace(/\s+$/,"");
194
+ if (name === 'mn' && textContent.substr(0,1) === "-") {
195
+ //
196
+ // use <mrow><mo>&#x2212;</mo><mn>n</mn></mrow> instead of <mn>-n</mn>
197
+ //
198
+ element.appendChild(document.createTextNode(textContent.substr(1)));
199
+ var mrow = CToP.createElement('mrow');
200
+ CToP.appendToken(mrow,'mo','\u2212');
201
+ mrow.appendChild(element);
202
+ element = mrow;
203
+ } else {
204
+ element.appendChild(document.createTextNode(textContent));
205
+ }
206
+ parentNode.appendChild(element);
207
+ return element;
208
+ },
209
+
210
+ /* Transform a Content MathML node to Presentation MathML node(s), and attach it to the parent
211
+ */
212
+ applyTransform: function(parentNode,contentMMLNode,precedence) {
213
+ if (!contentMMLNode) {
214
+ var merror = CToP.createElement('merror');
215
+ CToP.appendToken(merror,'mtext','Missing child node');
216
+ parentNode.appendChild(merror);
217
+ return;
218
+ }
219
+ var nodeName = contentMMLNode.nodeName.replace(/.*:/,'');
220
+ if (contentMMLNode.nodeType === 1) {
221
+ if (CToP.tokens[nodeName]) {
222
+ CToP.tokens[nodeName](parentNode,contentMMLNode,precedence);
223
+ } else if (contentMMLNode.childNodes.length === 0) {
224
+ var mml = CToP.MML[nodeName];
225
+ if (mml && mml.isa && mml.isa(CToP.mbase)) {
226
+ parentNode.appendChild(CToP.cloneNode(contentMMLNode));
227
+ } else {
228
+ CToP.appendToken(parentNode,'mi',nodeName);
229
+ }
230
+ } else {
231
+ var clonedChild = CToP.cloneNode(contentMMLNode);
232
+ parentNode.appendChild(clonedChild);
233
+ for (var j = 0, l = contentMMLNode.childNodes.length; j<l; j++ ) {
234
+ CToP.applyTransform(clonedChild,contentMMLNode.childNodes[j],precedence);
235
+ }
236
+ }
237
+ } else if (contentMMLNode.nodeType === 3) {
238
+ parentNode.appendChild(CToP.cloneNode(contentMMLNode));
239
+ }
240
+ },
241
+
242
+ /* Make an mfenced environment
243
+ */
244
+ createmfenced: function(children,open,close) {
245
+ var mf = CToP.createElement('mfenced');
246
+ mf.setAttribute('open',open);
247
+ mf.setAttribute('close',close);
248
+ for (var j = 0, l = children.length; j<l; j++ ) {
249
+ CToP.applyTransform(mf,children[j],0);
250
+ }
251
+ return mf;
252
+ },
253
+
254
+ transforms: {
255
+
256
+ /* Transform an identifier symbol
257
+ */
258
+ identifier: function(textContent) {
259
+ return function(parentNode,contentMMLNode,precedence) {
260
+ CToP.appendToken(parentNode,'mi',textContent);
261
+ }
262
+ },
263
+
264
+ /* Transform a set or set-like notation
265
+ */
266
+ set: function(open,close) {
267
+ var bindSet = CToP.transforms.bind('',',','|');
268
+ return function(parentNode,contentMMLNode) {
269
+ var children = CToP.classifyChildren(contentMMLNode);
270
+
271
+ var args = children.args, bvars = children.bvars, qualifiers = children.qualifiers;
272
+ if (bvars.length) {
273
+ var firstArg = children.args[0];
274
+ args = args.slice(1);
275
+ var mfenced = CToP.createElement('mfenced');
276
+ mfenced.setAttribute('open',open);
277
+ mfenced.setAttribute('close',close);
278
+ bindSet(mfenced,contentMMLNode,firstArg,args,bvars,qualifiers,0);
279
+ parentNode.appendChild(mfenced);
280
+ } else {
281
+ parentNode.appendChild(CToP.createmfenced(args,open,close));
282
+ }
283
+ }
284
+ },
285
+
286
+ /* Transform a content token to a presentation token
287
+ *
288
+ * (function factory)
289
+ * @param {string} name - name of the corresponding presentation MML tag
290
+ */
291
+ token: function(name) {
292
+ return function(parentNode,contentMMLNode) {
293
+ if (contentMMLNode.childNodes.length === 1 && contentMMLNode.childNodes[0].nodeType === 3) {
294
+ CToP.appendToken(parentNode,name,CToP.getTextContent(contentMMLNode));
295
+ } else {
296
+ var mrow = CToP.createElement('mrow');
297
+ for (var j = 0, l = contentMMLNode.childNodes.length; j<l; j++ ) {
298
+ if (contentMMLNode.childNodes[j].nodeType === 3) {
299
+ CToP.appendToken(parentNode,name,CToP.getTextContent(contentMMLNode.childNodes[j]));
300
+ }else{
301
+ CToP.applyTransform(mrow,contentMMLNode.childNodes[j],0);
302
+ }
303
+ }
304
+ if (mrow.childNodes.length) {
305
+ parentNode.appendChild(mrow);
306
+ }
307
+ }
308
+ }
309
+ },
310
+
311
+ /* Transform a binary operation
312
+ *
313
+ * (function factory)
314
+ */
315
+ binary: function(name,tokenPrecedence) {
316
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
317
+ var mrow = CToP.createElement('mrow');
318
+ var needsBrackets = tokenPrecedence<precedence || (tokenPrecedence == precedence && name === "-");
319
+ if (needsBrackets) {
320
+ CToP.appendToken(mrow,'mo','(');
321
+ }
322
+ if (args.length>1) {
323
+ CToP.applyTransform(mrow,args[0],tokenPrecedence);
324
+ }
325
+ CToP.appendToken(mrow,'mo',name);
326
+ if (args.length>0) {
327
+ var z = args[(args.length === 1)?0:1];
328
+ CToP.applyTransform(mrow,z,tokenPrecedence);
329
+ }
330
+ if (needsBrackets) {
331
+ CToP.appendToken(mrow,'mo',')');
332
+ }
333
+ parentNode.appendChild(mrow);
334
+ }
335
+ },
336
+
337
+ /* Transform an infix operator
338
+ *
339
+ * (function factory)
340
+ */
341
+ infix: function(name,tokenPrecedence) {
342
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
343
+ var mrow = CToP.createElement('mrow');
344
+ var needsBrackets = precedence>tokenPrecedence;
345
+ if (needsBrackets) {
346
+ CToP.appendToken(mrow,'mo','(');
347
+ }
348
+ for (var j = 0, l = args.length; j<l; j++ ) {
349
+ if (j>0) {
350
+ CToP.appendToken(mrow,'mo',name);
351
+ }
352
+ CToP.applyTransform(mrow,args[j],tokenPrecedence);
353
+ }
354
+ if (needsBrackets) {
355
+ CToP.appendToken(mrow,'mo',')');
356
+ }
357
+ parentNode.appendChild(mrow);
358
+ }
359
+ },
360
+
361
+ /* Transform an iterated operation, e.g. summation
362
+ *
363
+ * (function factory
364
+ */
365
+ iteration: function(name,limitSymbol) {
366
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
367
+ var mrow = CToP.createElement('mrow');
368
+ var mo = CToP.createElement('mo');
369
+ CToP.setTextContent(mo,name);
370
+ var munderover = CToP.createElement('munderover');
371
+ munderover.appendChild(mo);
372
+ var mrow1 = CToP.createElement('mrow');
373
+ var i, j, num_qualifiers, num_bvars, children, bvar, num_children, num_args;
374
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
375
+ if (qualifiers[i].nodeName === 'lowlimit'||
376
+ qualifiers[i].nodeName === 'condition'||
377
+ qualifiers[i].nodeName === 'domainofapplication')
378
+ {
379
+ if (qualifiers[i].nodeName === 'lowlimit') {
380
+ for (j = 0, num_bvars = bvars.length; j<num_bvars; j++ ) {
381
+ bvar = bvars[j];
382
+ children = CToP.getChildren(bvar);
383
+ if (children.length) {
384
+ CToP.applyTransform(mrow1,children[0],0);
385
+ }
386
+ }
387
+ if (bvars.length) {
388
+ CToP.appendToken(mrow1,"mo",limitSymbol);
389
+ }
390
+ }
391
+ children = CToP.getChildren(qualifiers[i]);
392
+ for (j = 0;j<children.length;j++) {
393
+ CToP.applyTransform(mrow1,children[j],0);
394
+ }
395
+ } else {
396
+ children = CToP.getChildren(qualifiers[i]);
397
+ if (qualifiers[i].nodeName === 'interval' && children.length === 2) {
398
+ for (j = 0, num_bvars = bvars.length; j<num_bvars; j++ ) {
399
+ bvar = bvars[j];
400
+ children = CToP.getChildren(bvar);
401
+ if (children.length) {
402
+ CToP.applyTransform(mrow1,children[0],0);
403
+ }
404
+ }
405
+ if (bvars.length) {
406
+ CToP.appendToken(mrow1,"mo","=");
407
+ }
408
+ CToP.applyTransform(mrow1,CToP.getChildren(qualifiers[i])[0],0);
409
+ }
410
+ }
411
+ }
412
+ munderover.appendChild(mrow1);
413
+ var mjrow = CToP.createElement('mrow');
414
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
415
+ if (qualifiers[i].nodeName === 'uplimit' ||qualifiers[i].nodeName === 'interval' )
416
+ {
417
+ children = CToP.getChildren(qualifiers[i]);
418
+ for (j = 0, num_children = children.length; j<num_children; j++ ) {
419
+ CToP.applyTransform(mjrow,children[j],0);
420
+ }
421
+ }
422
+ }
423
+ munderover.appendChild(mjrow);
424
+ mrow.appendChild(munderover);
425
+
426
+ for (i = 0, num_args = args.length; i<num_args; i++ ) {
427
+ CToP.applyTransform(mrow,args[i],precedence);
428
+ }
429
+
430
+ parentNode.appendChild(mrow);
431
+ }
432
+ },
433
+
434
+ /* Transform something which binds a variable, e.g. forall or lambda
435
+ *
436
+ * (function factory)
437
+ */
438
+ bind: function(name,argSeparator,conditionSeparator) {
439
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
440
+ var mrow = CToP.createElement('mrow');
441
+ var children, i, j, l, num_qualifiers, num_children;
442
+ if (name) {
443
+ CToP.appendToken(mrow,'mo',name);
444
+ }
445
+ for (j = 0, l = bvars.length; j<l; j++ ) {
446
+ var bvar = bvars[j];
447
+ if (j>0) {
448
+ CToP.appendToken(mrow,'mo',',');
449
+ }
450
+ children = CToP.getChildren(bvar);
451
+ if (children.length) {
452
+ CToP.applyTransform(mrow,children[0],0);
453
+ }
454
+ }
455
+
456
+ var conditions_mrow = CToP.createElement('mrow');
457
+ var conditions = false;
458
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
459
+ if (qualifiers[i].nodeName === 'condition') {
460
+ conditions = true;
461
+ children = CToP.getChildren(qualifiers[i]);
462
+ for (j = 0, num_children = children.length; j<num_children; j++ ) {
463
+ CToP.applyTransform(conditions_mrow,children[j],0);
464
+ }
465
+ }
466
+ }
467
+ if (conditions) {
468
+ CToP.appendToken(mrow,'mo',conditionSeparator);
469
+ }
470
+ mrow.appendChild(conditions_mrow);
471
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
472
+ if (qualifiers[i].nodeName != 'condition') {
473
+ CToP.appendToken(mrow,'mo','\u2208');
474
+ children = CToP.getChildren(qualifiers[i]);
475
+ for (j = 0, num_children = children.length; j<num_children; j++ ) {
476
+ CToP.applyTransform(mrow,children[j],0);
477
+ }
478
+ }
479
+ }
480
+ if (args.length && (bvars.length||children.length)) {
481
+ CToP.appendToken(mrow,'mo',argSeparator);
482
+ }
483
+ for (i = 0, l = args.length; i<l; i++ ) {
484
+ CToP.applyTransform(mrow,args[i],0);
485
+ }
486
+ parentNode.appendChild(mrow);
487
+ }
488
+ },
489
+
490
+ /** Transform a function application
491
+ *
492
+ * i.e. something which ends up looking like `f(x,y,z)`, where `f` is a string
493
+ *
494
+ * (function factory)
495
+ */
496
+ fn: function(name) {
497
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
498
+ var mrow = CToP.createElement('mrow');
499
+ if (firstArg.childNodes.length) {
500
+ CToP.applyTransform(mrow,firstArg,1);
501
+ } else {
502
+ CToP.appendToken(mrow,'mi',name);
503
+ }
504
+ CToP.appendToken(mrow,'mo','\u2061');
505
+ mrow.appendChild(CToP.createmfenced(args,'(',')'));
506
+ parentNode.appendChild(mrow);
507
+ }
508
+ },
509
+
510
+ /** Transform a min/max operation
511
+ *
512
+ * (function factory)
513
+ */
514
+ minmax: function(name) {
515
+ return function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
516
+ var mrow = CToP.createElement('mrow');
517
+ CToP.appendToken(mrow,'mi',name);
518
+ var mrow2 = CToP.createElement('mrow');
519
+ CToP.appendToken(mrow2,'mo','{');
520
+ for (var i = 0, l = args.length; i<l; i++ ) {
521
+ if (i>0) {
522
+ CToP.appendToken(mrow2,'mo',',');
523
+ }
524
+ CToP.applyTransform(mrow2,args[i],0);
525
+ }
526
+ if (qualifiers.length) {
527
+ CToP.appendToken(mrow2,'mo','|');
528
+ for (i = 0, l = qualifiers.length; i<l; i++ ) {
529
+ CToP.applyTransform(mrow2,qualifiers[i],0);
530
+ }
531
+ }
532
+ CToP.appendToken(mrow2,'mo','}');
533
+ mrow.appendChild(mrow2);
534
+ parentNode.appendChild(mrow);
535
+ }
536
+ }
537
+ }
538
+ }
539
+
540
+ /* Functions to transform variable/atom tokens
541
+ */
542
+ CToP.tokens = {
543
+ ci: function(parentNode,contentMMLNode,precedence) {
544
+ if (contentMMLNode.childNodes.length === 1 && contentMMLNode.childNodes[0].nodeType === 3) {
545
+ var mi = CToP.appendToken(parentNode,'mi',CToP.getTextContent(contentMMLNode));
546
+ var type = contentMMLNode.getAttribute('type');
547
+ if (type in CToP.settings.cistyles) {
548
+ mi.setAttribute('mathvariant',CToP.settings.cistyles[type]);
549
+ }
550
+ } else {
551
+ CToP.transforms.token('mi')(parentNode,contentMMLNode,precedence);
552
+ }
553
+ },
554
+ cs: CToP.transforms.token('ms'),
555
+
556
+ csymbol: function(parentNode,contentMMLNode,precedence) {
557
+ var cd = contentMMLNode.getAttribute('cd');
558
+ if (cd && CToP.contentDictionaries[cd]) {
559
+ CToP.contentDictionaries[cd](parentNode,contentMMLNode,precedence);
560
+ } else if (CToP.settings.symbols[name]) {
561
+ CToP.appendToken(parentNode,'mi',CToP.settings.symbols[name]);
562
+ } else {
563
+ CToP.tokens.ci(parentNode,contentMMLNode);
564
+ }
565
+ },
566
+ fn: function(parentNode,contentMMLNode,precedence) {
567
+ CToP.applyTransform(parentNode,CToP.getChildren(contentMMLNode)[0],precedence);
568
+ },
569
+
570
+ naturalnumbers: CToP.transforms.identifier('\u2115'),
571
+ integers: CToP.transforms.identifier('\u2124'),
572
+ reals: CToP.transforms.identifier('\u211D'),
573
+ rationals: CToP.transforms.identifier('\u211A'),
574
+ complexes: CToP.transforms.identifier('\u2102'),
575
+ primes: CToP.transforms.identifier('\u2119'),
576
+ exponentiale: CToP.transforms.identifier('e'),
577
+ imaginaryi: CToP.transforms.identifier('i'),
578
+ notanumber: CToP.transforms.identifier('NaN'),
579
+ eulergamma: CToP.transforms.identifier('\u03B3'),
580
+ gamma: CToP.transforms.identifier('\u0263'),
581
+ pi: CToP.transforms.identifier('\u03C0'),
582
+ infinity: CToP.transforms.identifier('\u221E'),
583
+ emptyset: CToP.transforms.identifier('\u2205'),
584
+ "true": CToP.transforms.identifier('true'),
585
+ "false": CToP.transforms.identifier('false'),
586
+ set: CToP.transforms.set('{','}'),
587
+ list: CToP.transforms.set('(',')'),
588
+
589
+ interval: function(parentNode,contentMMLNode,precedence) {
590
+ var closure = contentMMLNode.getAttribute('closure');
591
+
592
+ var open, close;
593
+ switch(closure) {
594
+ case 'open':
595
+ open = '(';
596
+ close = ')';
597
+ break;
598
+ case 'open-closed':
599
+ open = '(';
600
+ close = ']';
601
+ break;
602
+ case 'closed-open':
603
+ open = '[';
604
+ close = ')';
605
+ break;
606
+ case 'closed':
607
+ default:
608
+ open = '[';
609
+ close = ']';
610
+ }
611
+
612
+ parentNode.appendChild(CToP.createmfenced(CToP.getChildren(contentMMLNode),open,close));
613
+ },
614
+
615
+ apply: function(parentNode,contentMMLNode,precedence) {
616
+ var children = CToP.classifyChildren(contentMMLNode);
617
+
618
+ var firstArg = children.args[0];
619
+ var args = children.args.slice(1), bvars = children.bvars, qualifiers = children.qualifiers;
620
+
621
+ if (firstArg) {
622
+ var name = firstArg.nodeName;
623
+ name = (name === "csymbol") ? CToP.getTextContent(firstArg).toLowerCase() : name;
624
+ if (CToP.applyTokens[name]) {
625
+ CToP.applyTokens[name](parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
626
+ } else {
627
+ CToP.transforms.fn(name)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
628
+ }
629
+ } else {
630
+ parentNode.appendChild(CToP.createElement('mrow'));
631
+ }
632
+ },
633
+
634
+ cn: function(parentNode,contentMMLNode,precedence) {
635
+ var type = contentMMLNode.getAttribute("type");
636
+ var base = contentMMLNode.getAttribute("base");
637
+ if (type || base) {
638
+ if (base) {
639
+ type = 'based-integer';
640
+ }
641
+ switch(type) {
642
+ case 'integer':
643
+ case 'real':
644
+ case 'double':
645
+ case 'constant':
646
+ CToP.transforms.token('mn')(parentNode,contentMMLNode);
647
+ break;
648
+ case 'hexdouble':
649
+ CToP.appendToken(parentNode,'mn','0x'+CToP.getTextContent(contentMMLNode));
650
+ break;
651
+ default:
652
+ var apply = CToP.createElement('apply');
653
+ var mrow = CToP.createElement('mrow');
654
+ var c = CToP.createElement(type);
655
+ apply.appendChild(c);
656
+ if (base) {
657
+ CToP.appendToken(apply,'mn',base);
658
+ }
659
+ for (var j = 0, l = contentMMLNode.childNodes.length; j<l; j++ ) {
660
+ if (contentMMLNode.childNodes[j].nodeType === 3) {
661
+ CToP.appendToken(mrow,'cn',CToP.getTextContent(contentMMLNode.childNodes[j]));
662
+ }else if (contentMMLNode.childNodes[j].nodeName === 'sep') {
663
+ apply.appendChild(mrow);
664
+ mrow = CToP.createElement('mrow');
665
+ } else {
666
+ mrow.appendChild(CToP.cloneNode(contentMMLNode.childNodes[j],true));
667
+ }
668
+ }
669
+ apply.appendChild(mrow);
670
+ CToP.applyTransform(parentNode,apply,0);
671
+ }
672
+ } else {
673
+ CToP.transforms.token('mn')(parentNode,contentMMLNode);
674
+ }
675
+ },
676
+
677
+ vector: function(parentNode,contentMMLNode,precedence) {
678
+ var mrow = CToP.createElement('mrow');
679
+ CToP.appendToken(mrow,'mo','(');
680
+
681
+ var mtable = CToP.createElement('mtable');
682
+ var children = CToP.getChildren(contentMMLNode);
683
+ for (var i = 0, l = children.length; i<l; i++ ) {
684
+ var mtr = CToP.createElement('mtr');
685
+ var mtd = CToP.createElement('mtd');
686
+ CToP.applyTransform(mtd,children[i],0);
687
+ mtr.appendChild(mtd);
688
+ mtable.appendChild(mtr);
689
+ }
690
+
691
+ mrow.appendChild(mtable);
692
+ CToP.appendToken(mrow,'mo',')');
693
+ parentNode.appendChild(mrow);
694
+ },
695
+
696
+ piecewise: function(parentNode,contentMMLNode,precedence) {
697
+ var mrow = CToP.createElement('mrow');
698
+ CToP.appendToken(mrow,'mo','{');
699
+ var mtable = CToP.createElement('mtable');
700
+ mrow.appendChild(mtable);
701
+ var children = CToP.getChildren(contentMMLNode);
702
+ for (var i = 0, l = children.length; i<l; i++ ) {
703
+ CToP.applyTransform(mtable,children[i],0);
704
+ }
705
+ parentNode.appendChild(mrow);
706
+ },
707
+
708
+ piece: function(parentNode,contentMMLNode,precedence) {
709
+ var mtr = CToP.createElement('mtr');
710
+ var children = CToP.getChildren(contentMMLNode);
711
+ for (var i = 0, l = children.length; i<l; i++ ) {
712
+ var mtd = CToP.createElement('mtd');
713
+ mtr.appendChild(mtd);
714
+ CToP.applyTransform(mtd,children[i],0);
715
+ if (i === 0) {
716
+ mtd = CToP.createElement('mtd');
717
+ CToP.appendToken(mtd,"mtext","\u00A0if\u00A0");
718
+ mtr.appendChild(mtd);
719
+ }
720
+ }
721
+ parentNode.appendChild(mtr);
722
+ },
723
+
724
+ otherwise: function(parentNode,contentMMLNode,precedence) {
725
+ var mtr = CToP.createElement('mtr');
726
+ var children = CToP.getChildren(contentMMLNode);
727
+ if (children.length) {
728
+ var mtd = CToP.createElement('mtd');
729
+ mtr.appendChild(mtd);
730
+ CToP.applyTransform(mtd,children[0],0);
731
+ mtd = CToP.createElement('mtd');
732
+ mtd.setAttribute('columnspan','2');
733
+ CToP.appendToken(mtd,"mtext","\u00A0otherwise");
734
+ mtr.appendChild(mtd);
735
+ }
736
+ parentNode.appendChild(mtr);
737
+ },
738
+
739
+ matrix: function(parentNode,contentMMLNode,precedence) {
740
+ var children = CToP.classifyChildren(contentMMLNode);
741
+ var args = children.args, bvars = children.bvars, qualifiers = children.qualifiers;
742
+
743
+ if (bvars.length || qualifiers.length) {
744
+ var mrow = CToP.createElement('mrow');
745
+ CToP.appendToken(mrow,"mo","[");
746
+ var msub = CToP.createElement('msub');
747
+ CToP.appendToken(msub,'mi','m');
748
+ var mrow2 = CToP.createElement('mrow');
749
+ for (var i = 0, l = bvars.length; i<l; i++ ) {
750
+ if (i != 0) {
751
+ CToP.appendToken(mrow2,'mo',',');
752
+ }
753
+ CToP.applyTransform(mrow2,bvars[i].childNodes[0],0);
754
+ }
755
+ msub.appendChild(mrow2);
756
+ mrow.appendChild(msub);
757
+ var msub2 = CToP.cloneNode(msub,true);
758
+ CToP.appendToken(mrow,'mo','|');
759
+ mrow.appendChild(msub2);
760
+ CToP.appendToken(mrow,'mo','=');
761
+ for (i = 0, l = args.length; i<l; i++ ) {
762
+ if (i != 0) {
763
+ CToP.appendToken(mrow,'mo',',');
764
+ }
765
+ CToP.applyTransform(mrow,args[i],0);
766
+ }
767
+ CToP.appendToken(mrow,'mo',';');
768
+ for (i = 0, l = qualifiers.length; i<l; i++) {
769
+ if (i != 0) {
770
+ CToP.appendToken(mrow,'mo',',');
771
+ }
772
+ CToP.applyTransform(mrow,qualifiers[i],0);
773
+ }
774
+ CToP.appendToken(mrow,'mo',']');
775
+ parentNode.appendChild(mrow);
776
+ } else {
777
+ var mfenced = CToP.createElement('mfenced');
778
+ var mtable = CToP.createElement('mtable');
779
+ for (i = 0, l = args.length; i<l; i++ ) {
780
+ CToP.applyTransform(mtable,args[i],0);
781
+ }
782
+ mfenced.appendChild(mtable);
783
+ parentNode.appendChild(mfenced);
784
+ }
785
+ },
786
+
787
+ matrixrow: function(parentNode,contentMMLNode,precedence) {
788
+ var mtr = CToP.createElement('mtr');
789
+ var children = CToP.getChildren(contentMMLNode);
790
+ for (var i = 0, l = children.length; i<l; i++ ) {
791
+ var mtd = CToP.createElement('mtd');
792
+ CToP.applyTransform(mtd,children[i],0);
793
+ mtr.appendChild(mtd);
794
+ }
795
+ parentNode.appendChild(mtr);
796
+ },
797
+
798
+ condition: function(parentNode,contentMMLNode,precedence) {
799
+ var mrow = CToP.createElement('mrow');
800
+ var children = CToP.getChildren(contentMMLNode);
801
+ for (var i = 0, l = children.length; i<l; i++ ) {
802
+ CToP.applyTransform(mrow,children[i],0);
803
+ }
804
+ parentNode.appendChild(mrow);
805
+ },
806
+
807
+ lambda: function(parentNode,contentMMLNode,precedence) {
808
+ var firstArg = CToP.createElement('lambda');
809
+ var children = CToP.classifyChildren(contentMMLNode);
810
+ var args = children.args, bvars = children.bvars, qualifiers = children.qualifiers;
811
+ var i, l, num_qualifiers;
812
+
813
+ if (bvars.length) {
814
+ CToP.applyTokens.lambda(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
815
+ } else {
816
+ var mrow = CToP.createElement('mrow');
817
+ for (i = 0, l = args.length; i<l; i++ ) {
818
+ CToP.applyTransform(mrow,args[i],0);
819
+ }
820
+ if (qualifiers.length) {
821
+ var msub = CToP.createElement('msub');
822
+ CToP.appendToken(msub,'mo','|');
823
+ var mrow2 = CToP.createElement('mrow');
824
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
825
+ children = CToP.getChildren(qualifiers[i]);
826
+ for (var j = 0, num_children = children.length; j<num_children; j++ ) {
827
+ CToP.applyTransform(mrow2,children[j],0);
828
+ }
829
+ }
830
+ msub.appendChild(mrow2);
831
+ mrow.appendChild(msub);
832
+ }
833
+ parentNode.appendChild(mrow);
834
+ }
835
+ },
836
+
837
+ ident: function(parentNode,contentMMLNode,precedence) {
838
+ CToP.appendToken(parentNode,"mi","id")
839
+ },
840
+
841
+ domainofapplication: function(parentNode,contentMMLNode,precedence) {
842
+ var merror = CToP.createElement('merror');
843
+ CToP.appendToken(merror,'mtext','unexpected domainofapplication');
844
+ parentNode.appendChild(merror);
845
+ },
846
+
847
+ share: function(parentNode,contentMMLNode,precedence) {
848
+ var mi = CToP.createElement('mi');
849
+ mi.setAttribute('href',contentMMLNode.getAttribute('href'));
850
+ CToP.setTextContent(mi,"Share " + contentMMLNode.getAttribute('href'));
851
+ parentNode.appendChild(mi);
852
+ },
853
+
854
+ cerror: function(parentNode,contentMMLNode,precedence) {
855
+ var merror = CToP.createElement('merror');
856
+ var children = CToP.getChildren(contentMMLNode);
857
+ for (var i = 0, l = children.length; i<l; i++ ) {
858
+ CToP.applyTransform(merror,children[i],0);
859
+ }
860
+ parentNode.appendChild(merror);
861
+ },
862
+
863
+ semantics: function(parentNode,contentMMLNode,precedence) {
864
+ var mrow = CToP.createElement('mrow');
865
+ var children = CToP.getChildren(contentMMLNode);
866
+ if (children.length) {
867
+ var z = children[0];
868
+ for (var i = 0, l = children.length; i<l; i++ ) {
869
+ if (children[i].nodeName === 'annotation-xml' && children[i].getAttribute('encoding') === 'MathML-Presentation') {
870
+ z = children[i];
871
+ break;
872
+ }
873
+ }
874
+ CToP.applyTransform(mrow,z,0);
875
+ }
876
+ parentNode.appendChild(mrow);
877
+ },
878
+
879
+ "annotation-xml": function(parentNode,contentMMLNode,precedence) {
880
+ var mrow = CToP.createElement('mrow');
881
+ var children = CToP.getChildren(contentMMLNode);
882
+ for (var i = 0, l = children.length; i<l; i++ ) {
883
+ CToP.applyTransform(mrow,children[i],0);
884
+ }
885
+ parentNode.appendChild(mrow);
886
+ }
887
+ };
888
+
889
+ CToP.tokens.reln = CToP.tokens.bind = CToP.tokens.apply;
890
+
891
+ CToP.contentDictionaries = {
892
+ "setname1": function(parentNode,contentMMLNode,precedence) {
893
+ var sets = {
894
+ C: '\u2102',
895
+ N: '\u2115',
896
+ P: '\u2119',
897
+ Q: '\u211A',
898
+ R: '\u211D',
899
+ Z: '\u2124'
900
+ }
901
+ var name = CToP.getTextContent(contentMMLNode);
902
+ CToP.appendToken(parentNode,'mi',sets[name]);
903
+ },
904
+ aritherror: function(parentNode,contentMMLNode,precedence) {
905
+ var name = CToP.getTextContent(contentMMLNode);
906
+ CToP.appendToken(parentNode,'mi',name+':');
907
+ }
908
+ }
909
+
910
+ /* Functions to transform function/operation application tokens
911
+ */
912
+ CToP.applyTokens = {
913
+ rem: CToP.transforms.binary('mod',3),
914
+ divide: CToP.transforms.binary('/',3),
915
+ remainder: CToP.transforms.binary('mod',3),
916
+ implies: CToP.transforms.binary('\u21D2',3),
917
+ factorof: CToP.transforms.binary('|',3),
918
+ "in": CToP.transforms.binary('\u2208',3),
919
+ notin: CToP.transforms.binary('\u2209',3),
920
+ notsubset: CToP.transforms.binary('\u2288',2),
921
+ notprsubset: CToP.transforms.binary('\u2284',2),
922
+ setdiff: CToP.transforms.binary('\u2216',2),
923
+ eq: CToP.transforms.infix('=',1),
924
+ compose: CToP.transforms.infix('\u2218',0),
925
+ "left_compose": CToP.transforms.infix('\u2218',1),
926
+ xor: CToP.transforms.infix('xor',3),
927
+ neq: CToP.transforms.infix('\u2260',1),
928
+ gt: CToP.transforms.infix('>',1),
929
+ lt: CToP.transforms.infix('<',1),
930
+ geq: CToP.transforms.infix('\u2265',1),
931
+ leq: CToP.transforms.infix('\u2264',1),
932
+ equivalent: CToP.transforms.infix('\u2261',1),
933
+ approx: CToP.transforms.infix('\u2248',1),
934
+ subset: CToP.transforms.infix('\u2286',2),
935
+ prsubset: CToP.transforms.infix('\u2282',2),
936
+ cartesianproduct: CToP.transforms.infix('\u00D7',2),
937
+ "cartesian_product": CToP.transforms.infix('\u00D7',2),
938
+ vectorproduct: CToP.transforms.infix('\u00D7',2),
939
+ scalarproduct: CToP.transforms.infix('.',2),
940
+ outerproduct: CToP.transforms.infix('\u2297',2),
941
+ sum: CToP.transforms.iteration('\u2211','='),
942
+ product: CToP.transforms.iteration('\u220F','='),
943
+ forall: CToP.transforms.bind('\u2200','.',','),
944
+ exists: CToP.transforms.bind('\u2203','.',','),
945
+ lambda: CToP.transforms.bind('\u03BB','.',','),
946
+ limit: CToP.transforms.iteration('lim','\u2192'),
947
+ sdev: CToP.transforms.fn('\u03c3'),
948
+ determinant: CToP.transforms.fn('det'),
949
+ max: CToP.transforms.minmax('max'),
950
+ min: CToP.transforms.minmax('min'),
951
+ real: CToP.transforms.fn('\u211b'),
952
+ imaginary: CToP.transforms.fn('\u2111'),
953
+ set: CToP.transforms.set('{','}'),
954
+ list: CToP.transforms.set('(',')'),
955
+
956
+ exp: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
957
+ var msup = CToP.createElement('msup');
958
+ CToP.appendToken(msup,'mi','e');
959
+ CToP.applyTransform(msup,args[0],0);
960
+ parentNode.appendChild(msup);
961
+ },
962
+
963
+ union: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
964
+ if (bvars.length) {
965
+ CToP.transforms.iteration('\u22C3','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
966
+ } else {
967
+ CToP.transforms.infix('\u222A',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
968
+ }
969
+ },
970
+
971
+ intersect: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
972
+ if (bvars.length) {
973
+ CToP.transforms.iteration('\u22C2','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
974
+ } else {
975
+ var mrow = CToP.createElement('mrow');
976
+ var needsBrackets = precedence>2;
977
+ if (needsBrackets) {
978
+ CToP.appendToken(mrow,'mo','(');
979
+ }
980
+ for (var j = 0, l = args.length; j<l; j++ ) {
981
+ var argBrackets = false;
982
+ if (j>0) {
983
+ CToP.appendToken(mrow,'mo','\u2229');
984
+ if (args[j].nodeName === 'apply') {
985
+ var child = CToP.getChildren(args[j])[0];
986
+ argBrackets = child.nodeName === 'union';
987
+ }
988
+ }
989
+ if (argBrackets) {
990
+ CToP.appendToken(mrow,'mo','(');
991
+ }
992
+ CToP.applyTransform(mrow,args[j],2);
993
+ if (argBrackets) {
994
+ CToP.appendToken(mrow,'mo',')');
995
+ }
996
+ }
997
+ if (needsBrackets) {
998
+ CToP.appendToken(mrow,'mo',')');
999
+ }
1000
+ parentNode.appendChild(mrow);
1001
+ }
1002
+ },
1003
+
1004
+ floor: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1005
+ var mrow = CToP.createElement('mrow');
1006
+ CToP.appendToken(mrow,'mo','\u230a');
1007
+ CToP.applyTransform(mrow,args[0],0);
1008
+ CToP.appendToken(mrow,'mo','\u230b');
1009
+ parentNode.appendChild(mrow);
1010
+ },
1011
+
1012
+ conjugate: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1013
+ var mover = CToP.createElement('mover');
1014
+ CToP.applyTransform(mover,args[0],0);
1015
+ CToP.appendToken(mover,'mo','\u00af');
1016
+ parentNode.appendChild(mover);
1017
+ },
1018
+
1019
+ abs: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1020
+ var mrow = CToP.createElement('mrow');
1021
+ CToP.appendToken(mrow,'mo','|');
1022
+ CToP.applyTransform(mrow,args[0],0);
1023
+ CToP.appendToken(mrow,'mo','|');
1024
+ parentNode.appendChild(mrow);
1025
+ },
1026
+
1027
+ and: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1028
+ if (bvars.length || qualifiers.length) {
1029
+ CToP.transforms.iteration('\u22c0','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4);
1030
+ } else {
1031
+ CToP.transforms.infix('\u2227',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
1032
+ }
1033
+ },
1034
+
1035
+ or: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1036
+ if (bvars.length || qualifiers.length) {
1037
+ CToP.transforms.iteration('\u22c1','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4);
1038
+ } else {
1039
+ CToP.transforms.infix('\u2228',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
1040
+ }
1041
+ },
1042
+
1043
+ xor: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1044
+ if (bvars.length || qualifiers.length) {
1045
+ CToP.transforms.iteration('xor','=')(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,4);
1046
+ } else {
1047
+ CToP.transforms.infix('xor',2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
1048
+ }
1049
+ },
1050
+
1051
+ card: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1052
+ var mrow = CToP.createElement('mrow');
1053
+ CToP.appendToken(mrow,'mo','|');
1054
+ CToP.applyTransform(mrow,args[0],0);
1055
+ CToP.appendToken(mrow,'mo','|');
1056
+ parentNode.appendChild(mrow);
1057
+ },
1058
+
1059
+ mean: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1060
+ if (args.length === 1) {
1061
+ var mover = CToP.createElement('mover');
1062
+ CToP.applyTransform(mover,args[0],0);
1063
+ CToP.appendToken(mover,'mo','\u00af');
1064
+ parentNode.appendChild(mover);
1065
+ } else {
1066
+ parentNode.appendChild(CToP.createmfenced(args,'\u27e8','\u27e9'));
1067
+ }
1068
+ },
1069
+
1070
+ moment: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1071
+ var degree, momentabout, children, i, j, l;
1072
+
1073
+ for (i = 0, l = qualifiers.length; i<l; i++ ) {
1074
+ if (qualifiers[i].nodeName === 'degree') {
1075
+ degree = qualifiers[i];
1076
+ } else if (qualifiers[i].nodeName === 'momentabout') {
1077
+ momentabout = qualifiers[i];
1078
+ }
1079
+ }
1080
+
1081
+ var mrow = CToP.createElement('mrow');
1082
+ CToP.appendToken(mrow,'mo','\u27e8');
1083
+ var argrow = CToP.createElement('mrow');
1084
+ if (args.length>1) {
1085
+ argrow.appendChild(CToP.createmfenced(args,'(',')'));
1086
+ } else {
1087
+ CToP.applyTransform(argrow,args[0],0);
1088
+ }
1089
+ if (degree) {
1090
+ var msup = CToP.createElement('msup');
1091
+ msup.appendChild(argrow);
1092
+ children = CToP.getChildren(degree);
1093
+ for (j = 0, l = children.length; j<l; j++ ) {
1094
+ CToP.applyTransform(msup,children[j],0);
1095
+ }
1096
+ mrow.appendChild(msup);
1097
+ } else {
1098
+ mrow.appendChild(argrow);
1099
+ }
1100
+ CToP.appendToken(mrow,'mo','\u27e9');
1101
+
1102
+ if (momentabout) {
1103
+ var msub = CToP.createElement('msub');
1104
+ msub.appendChild(mrow);
1105
+ children = CToP.getChildren(momentabout);
1106
+ for (j = 0, l = children.length; j<l; j++ ) {
1107
+ CToP.applyTransform(msub,children[j],0);
1108
+ }
1109
+ parentNode.appendChild(msub);
1110
+ } else {
1111
+ parentNode.appendChild(mrow);
1112
+ }
1113
+ },
1114
+
1115
+ variance: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1116
+ var mrow = CToP.createElement('mrow');
1117
+ var msup = CToP.createElement('msup');
1118
+ CToP.appendToken(msup,'mo','\u03c3');
1119
+ CToP.appendToken(msup,'mn','2');
1120
+ mrow.appendChild(msup);
1121
+ CToP.appendToken(mrow,'mo','\u2061');
1122
+ mrow.appendChild(CToP.createmfenced(args,'(',')'));
1123
+ parentNode.appendChild(mrow);
1124
+ },
1125
+
1126
+ grad: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1127
+ var mrow = CToP.createElement('mrow');
1128
+ CToP.appendToken(mrow,'mo','\u2207');
1129
+ CToP.appendToken(mrow,'mo','\u2061');
1130
+ mrow.appendChild(CToP.createmfenced(args,'(',')'));
1131
+ parentNode.appendChild(mrow);
1132
+ },
1133
+
1134
+ laplacian: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1135
+ var mrow = CToP.createElement('mrow');
1136
+ var msup = CToP.createElement('msup');
1137
+ CToP.appendToken(msup,'mo','\u2207');
1138
+ CToP.appendToken(msup,'mn','2');
1139
+ mrow.appendChild(msup);
1140
+ CToP.appendToken(mrow,'mo','\u2061');
1141
+ mrow.appendChild(CToP.createmfenced(args,'(',')'));
1142
+ parentNode.appendChild(mrow);
1143
+ },
1144
+
1145
+ curl: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1146
+ var mrow = CToP.createElement('mrow');
1147
+ CToP.appendToken(mrow,'mo','\u2207');
1148
+ CToP.appendToken(mrow,'mo','\u00d7');
1149
+ var needsBrackets = args[0].nodeName === 'apply';
1150
+ if (needsBrackets) {
1151
+ mrow.appendChild(CToP.createmfenced(args,'(', ')'));
1152
+ }
1153
+ else {
1154
+ CToP.applyTransform(mrow,args[0],precedence);
1155
+ }
1156
+ parentNode.appendChild(mrow);
1157
+ },
1158
+
1159
+ divergence: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1160
+ var mrow = CToP.createElement('mrow');
1161
+ CToP.appendToken(mrow,'mo','\u2207');
1162
+ CToP.appendToken(mrow,'mo','\u22c5');
1163
+ var needsBrackets = args[0].nodeName === 'apply';
1164
+ if (needsBrackets) {
1165
+ mrow.appendChild(CToP.createmfenced(args,'(', ')'));
1166
+ }
1167
+ else {
1168
+ CToP.applyTransform(mrow,args[0],precedence);
1169
+ }
1170
+ parentNode.appendChild(mrow);
1171
+ },
1172
+
1173
+ not: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1174
+ var mrow = CToP.createElement('mrow');
1175
+ CToP.appendToken(mrow,'mo','\u00ac');
1176
+ var needsBrackets = args[0].nodeName === 'apply' || args[0].nodeName === 'bind';
1177
+ if (needsBrackets) {
1178
+ CToP.appendToken(mrow,'mo','(');
1179
+ }
1180
+ CToP.applyTransform(mrow,args[0],precedence);
1181
+ if (needsBrackets) {
1182
+ CToP.appendToken(mrow,'mo',')');
1183
+ }
1184
+ parentNode.appendChild(mrow)
1185
+ },
1186
+
1187
+ divide: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1188
+ var mfrac = CToP.createElement('mfrac');
1189
+ CToP.applyTransform(mfrac,args[0],0);
1190
+ CToP.applyTransform(mfrac,args[1],0);
1191
+ parentNode.appendChild(mfrac);
1192
+ },
1193
+
1194
+ tendsto: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1195
+ var type;
1196
+ if (firstArg.nodeName === 'tendsto') {
1197
+ type = firstArg.getAttribute('type');
1198
+ } else {
1199
+ type = CToP.getTextContent(args[0]);
1200
+ args = args.slice(1);
1201
+ }
1202
+ var name = (type === 'above')? '\u2198' :
1203
+ (type === 'below') ? '\u2197' : '\u2192' ;
1204
+ CToP.transforms.binary(name,2)(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence);
1205
+ },
1206
+
1207
+ minus: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1208
+ var tokenPrecedence = args.length === 1 ? 5 : 2;
1209
+
1210
+ var mrow = CToP.createElement('mrow');
1211
+ var needsBrackets = tokenPrecedence<precedence;
1212
+ if (needsBrackets) {
1213
+ CToP.appendToken(mrow,'mo','(');
1214
+ }
1215
+
1216
+ if (args.length === 1) {
1217
+ CToP.appendToken(mrow,'mo','-');
1218
+ CToP.applyTransform(mrow,args[0],tokenPrecedence);
1219
+ } else {
1220
+ CToP.applyTransform(mrow,args[0],tokenPrecedence);
1221
+ CToP.appendToken(mrow,'mo','-');
1222
+ var bracketArg;
1223
+ if (args[1].nodeName === 'apply') {
1224
+ var argOp = CToP.getChildren(args[1])[0];
1225
+ bracketArg = argOp.nodeName === 'plus' || argOp.nodeName === 'minus';
1226
+ }
1227
+ if (bracketArg) {
1228
+ CToP.appendToken(mrow,'mo','(');
1229
+ }
1230
+ CToP.applyTransform(mrow,args[1],tokenPrecedence);
1231
+ if (bracketArg) {
1232
+ CToP.appendToken(mrow,'mo',')');
1233
+ }
1234
+ }
1235
+
1236
+ if (needsBrackets) {
1237
+ CToP.appendToken(mrow,'mo',')');
1238
+ }
1239
+ parentNode.appendChild(mrow);
1240
+ },
1241
+
1242
+ "complex-cartesian": function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1243
+ var mrow = CToP.createElement('mrow');
1244
+ CToP.applyTransform(mrow,args[0],0);
1245
+ CToP.appendToken(mrow,'mo','+');
1246
+ CToP.applyTransform(mrow,args[1],0);
1247
+ CToP.appendToken(mrow,'mo','\u2062');
1248
+ CToP.appendToken(mrow,'mi','i');
1249
+ parentNode.appendChild(mrow);
1250
+ },
1251
+
1252
+ "complex-polar": function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1253
+ var mrow = CToP.createElement('mrow');
1254
+ CToP.applyTransform(mrow,args[0],0);
1255
+ CToP.appendToken(mrow,'mo','\u2062');
1256
+ var msup = CToP.createElement('msup');
1257
+ CToP.appendToken(msup,'mi','e');
1258
+ var exponent = CToP.createElement('mrow');
1259
+ CToP.applyTransform(exponent,args[1],0);
1260
+ CToP.appendToken(exponent,'mo','\u2062');
1261
+ CToP.appendToken(exponent,'mi','i');
1262
+ msup.appendChild(exponent);
1263
+ mrow.appendChild(msup);
1264
+ parentNode.appendChild(mrow);
1265
+ },
1266
+
1267
+ integer: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1268
+ CToP.applyTransform(parentNode,args[0],0);
1269
+ },
1270
+
1271
+ "based-integer": function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1272
+ var msub = CToP.createElement('msub');
1273
+ CToP.applyTransform(msub,args[1],0);
1274
+ CToP.applyTransform(msub,args[0],0);
1275
+ parentNode.appendChild(msub);
1276
+ },
1277
+
1278
+ rational: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1279
+ var mfrac = CToP.createElement('mfrac');
1280
+ CToP.applyTransform(mfrac,args[0],0);
1281
+ CToP.applyTransform(mfrac,args[1],0);
1282
+ parentNode.appendChild(mfrac);
1283
+ },
1284
+
1285
+ times: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1286
+ var mrow = CToP.createElement('mrow');
1287
+ var needsBrackets = precedence>3;
1288
+ if (needsBrackets) {
1289
+ CToP.appendToken(mrow,'mo','(');
1290
+ }
1291
+ for (var j = 0, l = args.length; j<l; j++ ) {
1292
+ if (j>0) {
1293
+ CToP.appendToken(mrow,'mo',(args[j].nodeName === 'cn') ? "\u00D7" :"\u2062");
1294
+ }
1295
+ CToP.applyTransform(mrow,args[j],3);
1296
+ }
1297
+ if (needsBrackets) {
1298
+ CToP.appendToken(mrow,'mo',')');
1299
+ }
1300
+ parentNode.appendChild(mrow);
1301
+ },
1302
+
1303
+ plus: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1304
+ var mrow = CToP.createElement('mrow');
1305
+ var needsBrackets = precedence>2;
1306
+ if (needsBrackets) {
1307
+ CToP.appendToken(mrow,'mo','(');
1308
+ }
1309
+ for (var j = 0, l = args.length; j<l; j++ ) {
1310
+ var arg = args[j];
1311
+ var children = CToP.getChildren(arg);
1312
+ if (j>0) {
1313
+ var n;
1314
+ if (CToP.settings.collapsePlusMinus) {
1315
+ if (arg.nodeName === 'cn' && !(children.length) && (n = Number(CToP.getTextContent(arg))) <0) {
1316
+ CToP.appendToken(mrow,'mo','\u2212');
1317
+ CToP.appendToken(mrow,'mn', -n);
1318
+ } else if (arg.nodeName === 'apply' && children.length === 2 && children[0].nodeName === 'minus') {
1319
+ CToP.appendToken(mrow,'mo','\u2212');
1320
+ CToP.applyTransform(mrow,children[1],2);
1321
+ } else if (arg.nodeName === 'apply' && children.length>2 && children[0].nodeName === 'times' && children[1].nodeName === 'cn' && (n = Number(CToP.getTextContent(children[1]))) < 0) {
1322
+ CToP.appendToken(mrow,'mo','\u2212');
1323
+ children[1].textContent = -n; // OK to change MathML since it is being discarded afterward
1324
+ CToP.applyTransform(mrow,arg,2);
1325
+ } else{
1326
+ CToP.appendToken(mrow,'mo','+');
1327
+ CToP.applyTransform(mrow,arg,2);
1328
+ }
1329
+ } else {
1330
+ CToP.appendToken(mrow,'mo','+');
1331
+ CToP.applyTransform(mrow,arg,2);
1332
+ }
1333
+ } else {
1334
+ CToP.applyTransform(mrow,arg,2);
1335
+ }
1336
+ }
1337
+ if (needsBrackets) {
1338
+ CToP.appendToken(mrow,'mo',')');
1339
+ }
1340
+ parentNode.appendChild(mrow);
1341
+ },
1342
+
1343
+ transpose: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1344
+ var msup = CToP.createElement('msup');
1345
+ CToP.applyTransform(msup,args[0],precedence);
1346
+ CToP.appendToken(msup,'mi','T');
1347
+ parentNode.appendChild(msup);
1348
+ },
1349
+
1350
+ power: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1351
+ var msup = CToP.createElement('msup');
1352
+ CToP.applyTransform(msup,args[0],3);
1353
+ CToP.applyTransform(msup,args[1],precedence);
1354
+ parentNode.appendChild(msup);
1355
+ },
1356
+
1357
+ selector: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1358
+ var msub = CToP.createElement('msub');
1359
+ var mrow = args ? args[0]: CToP.createElement('mrow');
1360
+ CToP.applyTransform(msub,mrow,0);
1361
+ var mrow2 = CToP.createElement('mrow');
1362
+ for (var i = 1, l = args.length; i<l; i++ ) {
1363
+ if (i != 1) {
1364
+ CToP.appendToken(mrow2,'mo',',');
1365
+ }
1366
+ CToP.applyTransform(mrow2,args[i],0);
1367
+ }
1368
+ msub.appendChild(mrow2);
1369
+ parentNode.appendChild(msub);
1370
+ },
1371
+
1372
+ log: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1373
+ var mrow = CToP.createElement('mrow');
1374
+ var mi = CToP.createElement('mi');
1375
+ CToP.setTextContent(mi,'log');
1376
+ if (qualifiers.length && qualifiers[0].nodeName === 'logbase') {
1377
+ var msub = CToP.createElement('msub');
1378
+ msub.appendChild(mi);
1379
+ CToP.applyTransform(msub,CToP.getChildren(qualifiers[0])[0],0);
1380
+ mrow.appendChild(msub);
1381
+ } else {
1382
+ mrow.appendChild(mi);
1383
+ }
1384
+ CToP.applyTransform(mrow,args[0],7);
1385
+ parentNode.appendChild(mrow);
1386
+ },
1387
+
1388
+ "int": function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1389
+ var mrow = CToP.createElement('mrow');
1390
+ var mo = CToP.createElement('mo');
1391
+ CToP.setTextContent(mo,'\u222B');
1392
+ var msubsup = CToP.createElement('msubsup');
1393
+ msubsup.appendChild(mo);
1394
+ var mrow1 = CToP.createElement('mrow');
1395
+ var children, i, j, l, num_qualifiers, num_children;
1396
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
1397
+ if (qualifiers[i].nodeName === 'lowlimit'||
1398
+ qualifiers[i].nodeName === 'condition'||
1399
+ qualifiers[i].nodeName === 'domainofapplication')
1400
+ {
1401
+ children = CToP.getChildren(qualifiers[i]);
1402
+ for (j = 0, num_children = children.length; j<num_children; j++ ) {
1403
+ CToP.applyTransform(mrow1,children[j],0);
1404
+ }
1405
+ } else {
1406
+ children = CToP.getChildren(qualifiers[i]);
1407
+ if (qualifiers[i].nodeName === 'interval' && children.length === 2) {
1408
+ CToP.applyTransform(mrow1,children[0],0);
1409
+ }
1410
+ }
1411
+ }
1412
+ msubsup.appendChild(mrow1);
1413
+ var mrow2 = CToP.createElement('mrow');
1414
+ for (i = 0, num_qualifiers = qualifiers.length; i<num_qualifiers; i++ ) {
1415
+ if (qualifiers[i].nodeName === 'uplimit') {
1416
+ children = CToP.getChildren(qualifiers[i]);
1417
+ for (j = 0, num_children = children.length; j<num_children; j++ ) {
1418
+ CToP.applyTransform(mrow2,children[j],0);
1419
+ }
1420
+ break;
1421
+ } else if (qualifiers[i].nodeName === 'interval' ) {
1422
+ children = CToP.getChildren(qualifiers[i]);
1423
+ CToP.applyTransform(mrow2,children[children.length-1],0);
1424
+ break;
1425
+ }
1426
+ }
1427
+ msubsup.appendChild(mrow2);
1428
+ mrow.appendChild(msubsup);
1429
+ for (i = 0, l = args.length; i<l; i++ ) {
1430
+ CToP.applyTransform(mrow,args[i],0);
1431
+ }
1432
+ for (i = 0, l = bvars.length; i<l; i++ ) {
1433
+ var bvar = bvars[i];
1434
+ children = CToP.getChildren(bvar);
1435
+ if (children.length) {
1436
+ var mrow3 = CToP.createElement("mrow");
1437
+ CToP.appendToken(mrow3,'mi','d');
1438
+ CToP.applyTransform(mrow3,children[0],0);
1439
+ mrow.appendChild(mrow3);
1440
+ }
1441
+ }
1442
+ parentNode.appendChild(mrow);
1443
+ },
1444
+
1445
+ inverse: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1446
+ var msup = CToP.createElement('msup');
1447
+ var arg = (args.length) ? args[0] : CToP.createElement('mrow');
1448
+ CToP.applyTransform(msup,arg,precedence);
1449
+ var mfenced = CToP.createElement('mfenced');
1450
+ CToP.appendToken(mfenced,'mn','-1');
1451
+ msup.appendChild(mfenced);
1452
+ parentNode.appendChild(msup);
1453
+ },
1454
+
1455
+ quotient: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1456
+ var mrow = CToP.createElement('mrow');
1457
+ CToP.appendToken(mrow,'mo','\u230A');
1458
+ if (args.length) {
1459
+ CToP.applyTransform(mrow,args[0],0);
1460
+ CToP.appendToken(mrow,'mo','/');
1461
+ if (args.length>1) {
1462
+ CToP.applyTransform(mrow,args[1],0);
1463
+ }
1464
+ }
1465
+ CToP.appendToken(mrow,'mo','\u230B');
1466
+ parentNode.appendChild(mrow);
1467
+ },
1468
+
1469
+ factorial: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1470
+ var mrow = CToP.createElement('mrow');
1471
+ CToP.applyTransform(mrow,args[0],4);
1472
+ CToP.appendToken(mrow,'mo','!');
1473
+ parentNode.appendChild(mrow);
1474
+ },
1475
+
1476
+ root: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1477
+ var mr;
1478
+ if (firstArg.nodeName === 'root' && (qualifiers.length === 0 || (qualifiers[0].nodeName === 'degree' && CToP.getTextContent(qualifiers[0]) === '2'))) {
1479
+ mr = CToP.createElement('msqrt');
1480
+ for (var i = 0, l = args.length; i<l; i++ ) {
1481
+ CToP.applyTransform(mr,args[i],0);
1482
+ }
1483
+ } else {
1484
+ mr = CToP.createElement('mroot');
1485
+ CToP.applyTransform(mr,args[0],0);
1486
+ var arg = (firstArg.nodeName === 'root') ? qualifiers[0].childNodes[0] : args[1];
1487
+ CToP.applyTransform(mr,arg,0);
1488
+ }
1489
+ parentNode.appendChild(mr);
1490
+ },
1491
+
1492
+ diff: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1493
+ if (bvars.length) { // d/dx form
1494
+ var outNode;
1495
+ var mfrac = CToP.createElement('mfrac');
1496
+ var toprow = CToP.createElement('mrow');
1497
+ var bottomrow = CToP.createElement('mrow');
1498
+ mfrac.appendChild(toprow);
1499
+ mfrac.appendChild(bottomrow);
1500
+
1501
+ var bvar, degreeNode, msup, mrow;
1502
+
1503
+ var d = CToP.createElement('mi');
1504
+ CToP.setTextContent(d,'d');
1505
+
1506
+ var children = CToP.getChildren(bvars[0]);
1507
+ for (var j = 0, l = children.length; j<l; j++ ) {
1508
+ if (children[j].nodeName === 'degree') {
1509
+ var childNode = CToP.getChildren(children[j])[0];
1510
+ if (CToP.getTextContent(childNode) != '1') {
1511
+ degreeNode = childNode;
1512
+ msup = CToP.createElement('msup');
1513
+ msup.appendChild(d);
1514
+ d = msup;
1515
+ CToP.applyTransform(d,degreeNode,0);
1516
+ }
1517
+ } else {
1518
+ bvar = children[j];
1519
+ }
1520
+ }
1521
+ toprow.appendChild(d);
1522
+
1523
+ if (args.length) {
1524
+ switch(args[0].nodeName) {
1525
+ case 'apply':
1526
+ case 'bind':
1527
+ case 'reln':
1528
+ mrow = CToP.createElement('mrow');
1529
+ mrow.appendChild(mfrac);
1530
+ CToP.applyTransform(mrow,args[0],3);
1531
+ outNode = mrow;
1532
+ break;
1533
+ default:
1534
+ CToP.applyTransform(toprow,args[0],0);
1535
+ outNode = mfrac;
1536
+ }
1537
+ }
1538
+
1539
+ CToP.appendToken(bottomrow,'mi','d');
1540
+
1541
+ if (degreeNode) {
1542
+ var msup2 = CToP.createElement('msup');
1543
+ CToP.applyTransform(msup2,bvar,0);
1544
+ CToP.applyTransform(msup2,degreeNode,0);
1545
+ bottomrow.appendChild(msup2);
1546
+ } else {
1547
+ CToP.applyTransform(bottomrow,bvar,0);
1548
+ }
1549
+
1550
+
1551
+ parentNode.appendChild(outNode);
1552
+ } else { // f' form
1553
+ msup = CToP.createElement('msup');
1554
+ mrow = CToP.createElement('mrow');
1555
+ msup.appendChild(mrow);
1556
+ CToP.applyTransform(mrow,args[0],0);
1557
+ CToP.appendToken(msup,'mo','\u2032'); // tick
1558
+ parentNode.appendChild(msup);
1559
+ }
1560
+ },
1561
+
1562
+ partialdiff: function(parentNode,contentMMLNode,firstArg,args,bvars,qualifiers,precedence) {
1563
+ var msup, msub, mrow;
1564
+
1565
+ var mfrac = CToP.createElement('mfrac');
1566
+ var toprow = CToP.createElement('mrow');
1567
+ var bottomrow = CToP.createElement('mrow');
1568
+ mfrac.appendChild(toprow);
1569
+ mfrac.appendChild(bottomrow);
1570
+
1571
+ var differendNode, degree, children;
1572
+
1573
+ if (bvars.length === 0 && args.length === 2 && args[0].nodeName === 'list') {
1574
+ if (args[1].nodeName === 'lambda') { // `d^(n+m)/(dx^n dy^m) f` form, through a lambda
1575
+ degree = CToP.getChildren(args[0]).length;
1576
+ if (degree != 1) {
1577
+ msup = CToP.createElement('msup');
1578
+ CToP.appendToken(msup,'mo','\u2202'); // curly d
1579
+ CToP.appendToken(msup,'mn',degree);
1580
+ toprow.appendChild(msup);
1581
+ } else {
1582
+ CToP.appendToken(toprow,'mo','\u2202');
1583
+ }
1584
+
1585
+ children = CToP.getChildren(args[1]);
1586
+
1587
+ differendNode = children[children.length - 1]; // thing being differentiated
1588
+
1589
+ var bvarNames = [];
1590
+ var lambdaChildren = CToP.getChildren(args[1]); // names of bound variables
1591
+ var lambdaSequence = CToP.getChildren(args[0]); // indices of bound variable names, in order
1592
+ for (var i = 0, l = lambdaChildren.length; i<l; i++ ) {
1593
+ if (lambdaChildren[i].nodeName === 'bvar') {
1594
+ bvarNames.push(CToP.getChildren(lambdaChildren[i])[0]);
1595
+ }
1596
+ }
1597
+
1598
+ var lastN = null;
1599
+ degree = 0;
1600
+ function addDiff(n,degree) {
1601
+ CToP.appendToken(bottomrow,'mo','\u2202');
1602
+ var bvar = bvarNames[n];
1603
+ if (degree>1) {
1604
+ var msup = CToP.createElement('msup');
1605
+ CToP.applyTransform(msup,bvar,0);
1606
+ CToP.appendToken(msup,'mn',degree);
1607
+ bottomrow.appendChild(msup);
1608
+ } else {
1609
+ CToP.applyTransform(bottomrow,bvar,0);
1610
+ }
1611
+ }
1612
+ for (i = 0, l = lambdaSequence.length; i<l; i++ ) {
1613
+ var n = Number(CToP.getTextContent(lambdaSequence[i]))-1;
1614
+ if (lastN !== null && n != lastN) {
1615
+ addDiff(lastN,degree);
1616
+ degree = 0;
1617
+ }
1618
+ lastN = n;
1619
+ degree += 1;
1620
+ }
1621
+ if (lastN) {
1622
+ addDiff(lastN,degree);
1623
+ }
1624
+ } else { // `D_i_j f` form
1625
+ mrow = CToP.createElement('mrow');
1626
+ msub = CToP.createElement('msub');
1627
+ CToP.appendToken(msub,'mi','D');
1628
+ var bvar = CToP.getChildren(args[0]);
1629
+ msub.appendChild(CToP.createmfenced(bvar,'',''));
1630
+ mrow.appendChild(msub);
1631
+ CToP.applyTransform(mrow,args[1],0);
1632
+ parentNode.appendChild(mrow);
1633
+ return;
1634
+ }
1635
+ } else { // `d^(n+m)/(dx^n dy^m) f` form, with bvars
1636
+ msup = CToP.createElement('msup');
1637
+ toprow.appendChild(msup);
1638
+ CToP.appendToken(msup,'mo','\u2202');
1639
+
1640
+ var degreeRow = CToP.createElement('mrow');
1641
+ msup.appendChild(degreeRow);
1642
+
1643
+ var qualifier;
1644
+
1645
+ if (qualifiers.length && qualifiers[0].nodeName === 'degree' && CToP.getChildren(qualifiers[0]).length) {
1646
+ qualifier = CToP.getChildren(qualifiers[0])[0];
1647
+ CToP.applyTransform(degreeRow,qualifier,0);
1648
+ } else {
1649
+ degree = 0;
1650
+ var hadFirst = false;
1651
+ for (i = 0, l = bvars.length; i<l; i++ ) {
1652
+ children = CToP.getChildren(bvars[i]);
1653
+ if (children.length === 2) {
1654
+ for (var j = 0;j<2;j++) {
1655
+ if (children[j].nodeName === 'degree') {
1656
+ if (/^\s*\d+\s*$/.test(CToP.getTextContent(children[j]))) {
1657
+ degree += Number(CToP.getTextContent(children[j]));
1658
+ } else {
1659
+ if (hadFirst) {
1660
+ CToP.appendToken(degreeRow,'mo','+');
1661
+ }
1662
+ hadFirst = true;
1663
+ CToP.applyTransform(degreeRow,CToP.getChildren(children[j])[0],0);
1664
+ }
1665
+ }
1666
+ }
1667
+ } else {
1668
+ degree++;
1669
+ }
1670
+ }
1671
+ if (degree>0) {
1672
+ if (hadFirst) {
1673
+ CToP.appendToken(degreeRow,'mo','+');
1674
+ }
1675
+ CToP.appendToken(degreeRow,'mn',degree);
1676
+ }
1677
+ }
1678
+
1679
+ if (args.length) {
1680
+ differendNode = args[0];
1681
+ }
1682
+
1683
+ for (i = 0, l = bvars.length; i<l; i++ ) {
1684
+ CToP.appendToken(bottomrow,'mo','\u2202');
1685
+ children = CToP.getChildren(bvars[i]);
1686
+
1687
+ if (children.length === 2) {
1688
+ for (j = 0;j<2;j++) {
1689
+ if (children[j].nodeName === 'degree') {
1690
+ var msup2 = CToP.createElement('msup');
1691
+ CToP.applyTransform(msup2,children[1-j],0);
1692
+ var bvarDegreeNode = CToP.getChildren(children[j])[0];
1693
+ CToP.applyTransform(msup2,bvarDegreeNode,0);
1694
+ bottomrow.appendChild(msup2);
1695
+ }
1696
+ }
1697
+ } else if (children.length === 1) {
1698
+ CToP.applyTransform(bottomrow,children[0],0);
1699
+ }
1700
+ }
1701
+ }
1702
+ if (differendNode) {
1703
+ switch(differendNode.nodeName) {
1704
+ case 'apply':
1705
+ case 'bind':
1706
+ case 'reln':
1707
+ mrow = CToP.createElement('mrow');
1708
+ mrow.appendChild(mfrac);
1709
+ CToP.applyTransform(mrow,differendNode,3);
1710
+ outNode = mrow;
1711
+ break;
1712
+ default:
1713
+ CToP.applyTransform(toprow,differendNode,0);
1714
+ outNode = mfrac;
1715
+ }
1716
+ } else {
1717
+ outNode = mfrac;
1718
+ }
1719
+ parentNode.appendChild(outNode);
1720
+ }
1721
+ };
1722
+ CToP.applyTokens.size = CToP.applyTokens.card;
1723
+
1724
+ return CToP;
1725
+ })(MathJax.Hub);
1726
+
1727
+
1728
+ MathJax.Hub.Register.StartupHook("MathML Jax Ready",function () {
1729
+
1730
+ var MATHML = MathJax.InputJax.MathML;
1731
+
1732
+ var CToP = MathJax.Extension["MathML/content-mathml"];
1733
+ CToP.mbase = MathJax.ElementJax.mml.mbase;
1734
+ CToP.MML = MathJax.ElementJax.mml;
1735
+
1736
+ MATHML.DOMfilterHooks.Add(function (data) {
1737
+ data.math = CToP.transformElement(data.math);
1738
+ });
1739
+
1740
+ MathJax.Hub.Startup.signal.Post("MathML/content-mathml Ready");
1741
+ });
1742
+
1743
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/MathML/content-mathml.js");
vendor/MathJax/extensions/MathML/mml3.js ADDED
@@ -0,0 +1,784 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * MathJax/extensions/MathML/mml3.js
4
+ *
5
+ * This file implements an XSLT transform to convert some MathML 3
6
+ * constructs to constructs MathJax can render. The transform is
7
+ * performed in a pre-filter for the MathML input jax, so that the
8
+ * Show Math As menu will still show the Original MathML correctly,
9
+ * but the transformed MathML can be obtained from the regular MathML menu.
10
+ *
11
+ * To load it, include
12
+ *
13
+ * MathML: {
14
+ * extensions: ["mml3.js"]
15
+ * }
16
+ *
17
+ * in your configuration.
18
+ *
19
+ * A portion of this file is taken from mml3mj.xsl which is
20
+ * Copyright (c) David Carlisle 2008-2015
21
+ * and is used by permission of David Carlisle, who has agreed to allow us
22
+ * to release it under the Apache2 license (see below). That portion is
23
+ * indicated via comments.
24
+ *
25
+ * The remainder falls under the copyright that follows.
26
+ * ---------------------------------------------------------------------
27
+ *
28
+ * Copyright (c) 2013-2018 The MathJax Consortium
29
+ *
30
+ * Licensed under the Apache License, Version 2.0 (the "License");
31
+ * you may not use this file except in compliance with the License.
32
+ * You may obtain a copy of the License at
33
+ *
34
+ * http://www.apache.org/licenses/LICENSE-2.0
35
+ *
36
+ * Unless required by applicable law or agreed to in writing, software
37
+ * distributed under the License is distributed on an "AS IS" BASIS,
38
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39
+ * See the License for the specific language governing permissions and
40
+ * limitations under the License.
41
+ */
42
+
43
+
44
+ MathJax.Extension["MathML/mml3"] = {
45
+ version: "2.7.5"
46
+ };
47
+
48
+ MathJax.Hub.Register.StartupHook("MathML Jax Ready",function () {
49
+
50
+ var MATHML = MathJax.InputJax.MathML,
51
+ PARSE = MATHML.Parse.prototype;
52
+
53
+ MATHML.prefilterHooks.Add(function (data) {
54
+ if (!MATHML.mml3XSLT) return;
55
+
56
+ // Parse the <math> but use MATHML.Parse's preProcessMath to apply the normal preprocessing.
57
+ if (!MATHML.ParseXML) {MATHML.ParseXML = MATHML.createParser()}
58
+ var doc = MATHML.ParseXML(PARSE.preProcessMath(data.math));
59
+
60
+ // Now transform the <math> using the mml3 stylesheet.
61
+ var newdoc = MATHML.mml3XSLT.transformToDocument(doc);
62
+
63
+ if ((typeof newdoc) === "string") {
64
+ // Internet Explorer returns a string, so just use it.
65
+ data.math = newdoc;
66
+ } else if (window.XMLSerializer) {
67
+ // Serialize the <math> again. We could directly provide the DOM content
68
+ // but other prefilterHooks may assume data.math is still a string.
69
+ var serializer = new XMLSerializer();
70
+ data.math = serializer.serializeToString(newdoc.documentElement, doc);
71
+ }
72
+ });
73
+
74
+ /*
75
+ * The following is derived from mml3mj.xsl
76
+ * (https://github.com/davidcarlisle/web-xslt/blob/master/ctop/mml3mj.xsl)
77
+ * which is Copyright (c) David Carlisle 2008-2015.
78
+ * It is used by permission of David Carlisle, who has agreed to allow it to
79
+ * be released under the Apache License, Version 2.0.
80
+ */
81
+ var BROWSER = MathJax.Hub.Browser;
82
+ var exslt = '';
83
+ if (BROWSER.isEdge || BROWSER.isMSIE) {
84
+ exslt = 'urn:schemas-microsoft-com:xslt'
85
+ } else {
86
+ exslt = 'http://exslt.org/common';
87
+ }
88
+ var mml3Stylesheet =
89
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ' +
90
+ ' xmlns:m="http://www.w3.org/1998/Math/MathML"' +
91
+ ' xmlns:c="' + exslt + '"' +
92
+ ' exclude-result-prefixes="m c">' +
93
+ '<xsl:output indent="yes" omit-xml-declaration="yes"/>' +
94
+ '<xsl:output indent="yes" omit-xml-declaration="yes"/><xsl:template match="*">' +
95
+ ' <xsl:copy>' +
96
+ ' <xsl:copy-of select="@*"/>' +
97
+ ' <xsl:apply-templates/>' +
98
+ ' </xsl:copy>' +
99
+ '</xsl:template><xsl:template match="m:*[@dir=\'rtl\']" priority="10">' +
100
+ ' <xsl:apply-templates mode="rtl" select="."/>' +
101
+ '</xsl:template><xsl:template match="@*" mode="rtl">' +
102
+ ' <xsl:copy-of select="."/>' +
103
+ ' <xsl:attribute name="dir">ltr</xsl:attribute>' +
104
+ '</xsl:template>' +
105
+ '<xsl:template match="*" mode="rtl">' +
106
+ ' <xsl:copy>' +
107
+ ' <xsl:apply-templates select="@*" mode="rtl"/>' +
108
+ ' <xsl:for-each select="node()">' +
109
+ ' <xsl:sort data-type="number" order="descending" select="position()"/>' +
110
+ ' <xsl:text> </xsl:text>' +
111
+ ' <xsl:apply-templates mode="rtl" select="."/>' +
112
+ ' </xsl:for-each>' +
113
+ ' </xsl:copy>' +
114
+ '</xsl:template><xsl:template match="@open" mode="rtl">' +
115
+ ' <xsl:attribute name="close"><xsl:value-of select="."/></xsl:attribute>' +
116
+ '</xsl:template><xsl:template match="@open[.=\'(\']" mode="rtl">' +
117
+ ' <xsl:attribute name="close">)</xsl:attribute>' +
118
+ '</xsl:template><xsl:template match="@open[.=\')\']" mode="rtl">' +
119
+ ' <xsl:attribute name="close">(</xsl:attribute>' +
120
+ '</xsl:template>' +
121
+ '<xsl:template match="@open[.=\'[\']" mode="rtl">' +
122
+ ' <xsl:attribute name="close">]</xsl:attribute>' +
123
+ '</xsl:template>' +
124
+ '<xsl:template match="@open[.=\']\']" mode="rtl">' +
125
+ ' <xsl:attribute name="close">[</xsl:attribute>' +
126
+ '</xsl:template>' +
127
+ '<xsl:template match="@open[.=\'{\']" mode="rtl">' +
128
+ ' <xsl:attribute name="close">}</xsl:attribute>' +
129
+ '</xsl:template>' +
130
+ '<xsl:template match="@open[.=\'}\']" mode="rtl">' +
131
+ ' <xsl:attribute name="close">{</xsl:attribute>' +
132
+ '</xsl:template>' +
133
+ '<xsl:template match="@close" mode="rtl">' +
134
+ ' <xsl:attribute name="open"><xsl:value-of select="."/></xsl:attribute>' +
135
+ '</xsl:template><xsl:template match="@close[.=\'(\']" mode="rtl">' +
136
+ ' <xsl:attribute name="open">)</xsl:attribute>' +
137
+ '</xsl:template><xsl:template match="@close[.=\')\']" mode="rtl">' +
138
+ ' <xsl:attribute name="open">(</xsl:attribute>' +
139
+ '</xsl:template>' +
140
+ '<xsl:template match="@close[.=\'[\']" mode="rtl">' +
141
+ ' <xsl:attribute name="open">]</xsl:attribute>' +
142
+ '</xsl:template>' +
143
+ '<xsl:template match="@close[.=\']\']" mode="rtl">' +
144
+ ' <xsl:attribute name="open">[</xsl:attribute>' +
145
+ '</xsl:template>' +
146
+ '<xsl:template match="@close[.=\'{\']" mode="rtl">' +
147
+ ' <xsl:attribute name="open">}</xsl:attribute>' +
148
+ '</xsl:template>' +
149
+ '<xsl:template match="@close[.=\'}\']" mode="rtl">' +
150
+ ' <xsl:attribute name="open">{</xsl:attribute>' +
151
+ '</xsl:template><xsl:template match="m:mfrac[@bevelled=\'true\']" mode="rtl">' +
152
+ ' <m:mrow>' +
153
+ ' <m:msub><m:mi></m:mi><xsl:apply-templates select="*[2]" mode="rtl"/></m:msub>' +
154
+ ' <m:mo>&#x5c;</m:mo>' +
155
+ ' <m:msup><m:mi></m:mi><xsl:apply-templates select="*[1]" mode="rtl"/></m:msup>' +
156
+ ' </m:mrow>' +
157
+ '</xsl:template><xsl:template match="m:mfrac" mode="rtl">' +
158
+ ' <xsl:copy>' +
159
+ ' <xsl:apply-templates mode="rtl" select="@*|*"/>' +
160
+ ' </xsl:copy>' +
161
+ '</xsl:template><xsl:template match="m:mroot" mode="rtl">' +
162
+ ' <m:msup>' +
163
+ ' <m:menclose notation="top right">' +
164
+ ' <xsl:apply-templates mode="rtl" select="@*|*[1]"/>' +
165
+ ' </m:menclose>' +
166
+ ' <xsl:apply-templates mode="rtl" select="*[2]"/>' +
167
+ ' </m:msup>' +
168
+ '</xsl:template>' +
169
+ '<xsl:template match="m:msqrt" mode="rtl">' +
170
+ ' <m:menclose notation="top right">' +
171
+ ' <xsl:apply-templates mode="rtl" select="@*|*[1]"/>' +
172
+ ' </m:menclose>' +
173
+ '</xsl:template><xsl:template match="m:mtable|m:munder|m:mover|m:munderover" mode="rtl" priority="2">' +
174
+ ' <xsl:copy>' +
175
+ ' <xsl:apply-templates select="@*" mode="rtl"/>' +
176
+ ' <xsl:apply-templates mode="rtl">' +
177
+ ' </xsl:apply-templates>' +
178
+ ' </xsl:copy>' +
179
+ '</xsl:template>' +
180
+ '<xsl:template match="m:msup" mode="rtl" priority="2">' +
181
+ ' <m:mmultiscripts>' +
182
+ ' <xsl:apply-templates select="*[1]" mode="rtl"/>' +
183
+ ' <m:mprescripts/>' +
184
+ ' <m:none/>' +
185
+ ' <xsl:apply-templates select="*[2]" mode="rtl"/>' +
186
+ ' </m:mmultiscripts>' +
187
+ '</xsl:template>' +
188
+ '<xsl:template match="m:msub" mode="rtl" priority="2">' +
189
+ ' <m:mmultiscripts>' +
190
+ ' <xsl:apply-templates select="*[1]" mode="rtl"/>' +
191
+ ' <m:mprescripts/>' +
192
+ ' <xsl:apply-templates select="*[2]" mode="rtl"/>' +
193
+ ' <m:none/>' +
194
+ ' </m:mmultiscripts>' +
195
+ '</xsl:template>' +
196
+ '<xsl:template match="m:msubsup" mode="rtl" priority="2">' +
197
+ ' <m:mmultiscripts>' +
198
+ ' <xsl:apply-templates select="*[1]" mode="rtl"/>' +
199
+ ' <m:mprescripts/>' +
200
+ ' <xsl:apply-templates select="*[2]" mode="rtl"/>' +
201
+ ' <xsl:apply-templates select="*[3]" mode="rtl"/>' +
202
+ ' </m:mmultiscripts>' +
203
+ '</xsl:template>' +
204
+ '<xsl:template match="m:mmultiscripts" mode="rtl" priority="2">' +
205
+ ' <m:mmultiscripts>' +
206
+ ' <xsl:apply-templates select="*[1]" mode="rtl"/>' +
207
+ ' <xsl:for-each select="m:mprescripts/following-sibling::*[position() mod 2 = 1]">' +
208
+ ' <xsl:sort data-type="number" order="descending" select="position()"/>' +
209
+ ' <xsl:apply-templates select="." mode="rtl"/>' +
210
+ ' <xsl:apply-templates select="following-sibling::*[1]" mode="rtl"/>' +
211
+ ' </xsl:for-each>' +
212
+ ' <m:mprescripts/>' +
213
+ ' <xsl:for-each select="m:mprescripts/preceding-sibling::*[position()!=last()][position() mod 2 = 0]">' +
214
+ ' <xsl:sort data-type="number" order="descending" select="position()"/>' +
215
+ ' <xsl:apply-templates select="." mode="rtl"/>' +
216
+ ' <xsl:apply-templates select="following-sibling::*[1]" mode="rtl"/>' +
217
+ ' </xsl:for-each>' +
218
+ ' </m:mmultiscripts>' +
219
+ '</xsl:template>' +
220
+ '<xsl:template match="m:mmultiscripts[not(m:mprescripts)]" mode="rtl" priority="3">' +
221
+ ' <m:mmultiscripts>' +
222
+ ' <xsl:apply-templates select="*[1]" mode="rtl"/>' +
223
+ ' <m:mprescripts/>' +
224
+ ' <xsl:for-each select="*[position() mod 2 = 0]">' +
225
+ ' <xsl:sort data-type="number" order="descending" select="position()"/>' +
226
+ ' <xsl:apply-templates select="." mode="rtl"/>' +
227
+ ' <xsl:apply-templates select="following-sibling::*[1]" mode="rtl"/>' +
228
+ ' </xsl:for-each>' +
229
+ ' </m:mmultiscripts>' +
230
+ '</xsl:template>' +
231
+ '<xsl:template match="text()[.=\'(\']" mode="rtl">)</xsl:template>' +
232
+ '<xsl:template match="text()[.=\')\']" mode="rtl">(</xsl:template>' +
233
+ '<xsl:template match="text()[.=\'{\']" mode="rtl">}</xsl:template>' +
234
+ '<xsl:template match="text()[.=\'}\']" mode="rtl">{</xsl:template>' +
235
+ '<xsl:template match="text()[.=\'&lt;\']" mode="rtl">&gt;</xsl:template>' +
236
+ '<xsl:template match="text()[.=\'&gt;\']" mode="rtl">&lt;</xsl:template>' +
237
+ '<xsl:template match="text()[.=\'&#x2208;\']" mode="rtl">&#x220b;</xsl:template>' +
238
+ '<xsl:template match="text()[.=\'&#x220b;\']" mode="rtl">&#x2208;</xsl:template>' +
239
+ '<xsl:template match="@notation[.=\'radical\']" mode="rtl">' +
240
+ ' <xsl:attribute name="notation">top right</xsl:attribute>' +
241
+ '</xsl:template>' +
242
+ '<xsl:template match="m:mlongdiv|m:mstack" mode="rtl">' +
243
+ ' <m:mrow dir="ltr">' +
244
+ ' <xsl:apply-templates select="."/>' +
245
+ ' </m:mrow>' +
246
+ '</xsl:template>' +
247
+ '<xsl:template match="m:mstack" priority="11">' +
248
+ ' <xsl:variable name="m">' +
249
+ ' <m:mtable columnspacing="0em">' +
250
+ ' <xsl:copy-of select="@align"/>' +
251
+ ' <xsl:variable name="t">' +
252
+ ' <xsl:apply-templates select="*" mode="mstack1">' +
253
+ ' <xsl:with-param name="p" select="0"/>' +
254
+ ' </xsl:apply-templates>' +
255
+ ' </xsl:variable>' +
256
+ ' <xsl:variable name="maxl">' +
257
+ ' <xsl:for-each select="c:node-set($t)/*/@l">' +
258
+ ' <xsl:sort data-type="number" order="descending"/>' +
259
+ ' <xsl:if test="position()=1">' +
260
+ ' <xsl:value-of select="."/>' +
261
+ ' </xsl:if>' +
262
+ ' </xsl:for-each>' +
263
+ ' </xsl:variable>' +
264
+ ' <xsl:for-each select="c:node-set($t)/*[not(@class=\'mscarries\') or following-sibling::*[1]/@class=\'mscarries\']">' +
265
+ '<xsl:variable name="c" select="preceding-sibling::*[1][@class=\'mscarries\']"/>' +
266
+ ' <xsl:text>&#10;</xsl:text>' +
267
+ ' <m:mtr>' +
268
+ ' <xsl:copy-of select="@class[.=\'msline\']"/>' +
269
+ ' <xsl:variable name="offset" select="$maxl - @l"/>' +
270
+ ' <xsl:choose>' +
271
+ ' <xsl:when test="@class=\'msline\' and @l=\'*\'">' +
272
+ ' <xsl:variable name="msl" select="*[1]"/>' +
273
+ ' <xsl:for-each select="(//node())[position()&lt;=$maxl]">' +
274
+ ' <xsl:copy-of select="$msl"/>' +
275
+ ' </xsl:for-each>' +
276
+ ' </xsl:when>' +
277
+ ' <xsl:when test="$c">' +
278
+ ' <xsl:variable name="ldiff" select="$c/@l - @l"/>' +
279
+ ' <xsl:variable name="loffset" select="$maxl - $c/@l"/>' +
280
+ ' <xsl:for-each select="(//*)[position()&lt;= $offset]">' +
281
+ ' <xsl:variable name="pn" select="position()"/>' +
282
+ ' <xsl:variable name="cy" select="$c/*[position()=$pn - $loffset]"/>' +
283
+ ' <m:mtd>' +
284
+ ' <xsl:if test="$cy/*">' +
285
+ ' <m:mover><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mpadded width="0em" lspace="-0.5width">' +
286
+ ' <xsl:copy-of select="$cy/*"/></m:mpadded></m:mover>' +
287
+ ' </xsl:if>' +
288
+ ' </m:mtd>' +
289
+ ' </xsl:for-each>' +
290
+ ' <xsl:for-each select="*">' +
291
+ ' <xsl:variable name="pn" select="position()"/>' +
292
+ ' <xsl:variable name="cy" select="$c/*[position()=$pn + $ldiff]"/>' +
293
+ ' <xsl:copy>' +
294
+ ' <xsl:copy-of select="@*"/>' +
295
+ ' <xsl:variable name="b">' +
296
+ ' <xsl:choose>' +
297
+ ' <xsl:when test="not(string($cy/@crossout) or $cy/@crossout=\'none\')"><xsl:copy-of select="*"/></xsl:when>' +
298
+ ' <xsl:otherwise>' +
299
+ ' <m:menclose notation="{$cy/@crossout}"><xsl:copy-of select="*"/></m:menclose>' +
300
+ ' </xsl:otherwise>' +
301
+ ' </xsl:choose>' +
302
+ ' </xsl:variable>' +
303
+ ' <xsl:choose>' +
304
+ ' <xsl:when test="$cy/m:none or not($cy/*)"><xsl:copy-of select="$b"/></xsl:when>' +
305
+ ' <xsl:when test="not(string($cy/@location)) or $cy/@location=\'n\'">' +
306
+ ' <m:mover>' +
307
+ ' <xsl:copy-of select="$b"/><m:mpadded width="0em" lspace="-0.5width">' +
308
+ ' <xsl:copy-of select="$cy/*"/>' +
309
+ ' </m:mpadded>' +
310
+ ' </m:mover>' +
311
+ ' </xsl:when>' +
312
+ ' <xsl:when test="$cy/@location=\'nw\'">' +
313
+ ' <m:mmultiscripts><xsl:copy-of select="$b"/><m:mprescripts/><m:none/><m:mpadded lspace="-1width" width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded></m:mmultiscripts>' +
314
+ ' </xsl:when>' +
315
+ ' <xsl:when test="$cy/@location=\'s\'">' +
316
+ ' <m:munder><xsl:copy-of select="$b"/><m:mpadded width="0em" lspace="-0.5width"><xsl:copy-of select="$cy/*"/></m:mpadded></m:munder>' +
317
+ ' </xsl:when>' +
318
+ ' <xsl:when test="$cy/@location=\'sw\'">' +
319
+ ' <m:mmultiscripts><xsl:copy-of select="$b"/><m:mprescripts/><m:mpadded lspace="-1width" width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded><m:none/></m:mmultiscripts>' +
320
+ ' </xsl:when>' +
321
+ ' <xsl:when test="$cy/@location=\'ne\'">' +
322
+ ' <m:msup><xsl:copy-of select="$b"/><m:mpadded width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded></m:msup>' +
323
+ ' </xsl:when>' +
324
+ ' <xsl:when test="$cy/@location=\'se\'">' +
325
+ ' <m:msub><xsl:copy-of select="$b"/><m:mpadded width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded></m:msub>' +
326
+ ' </xsl:when>' +
327
+ ' <xsl:when test="$cy/@location=\'w\'">' +
328
+ ' <m:msup><m:mrow/><m:mpadded lspace="-1width" width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded></m:msup>' +
329
+ ' <xsl:copy-of select="$b"/>' +
330
+ ' </xsl:when>' +
331
+ ' <xsl:when test="$cy/@location=\'e\'">' +
332
+ ' <xsl:copy-of select="$b"/>' +
333
+ ' <m:msup><m:mrow/><m:mpadded width="0em"><xsl:copy-of select="$cy/*"/></m:mpadded></m:msup>' +
334
+ ' </xsl:when>' +
335
+ ' <xsl:otherwise>' +
336
+ ' <xsl:copy-of select="$b"/>' +
337
+ ' </xsl:otherwise>' +
338
+ ' </xsl:choose>' +
339
+ ' </xsl:copy>' +
340
+ ' </xsl:for-each>' +
341
+ ' </xsl:when>' +
342
+ ' <xsl:otherwise>' +
343
+ ' <xsl:for-each select="(//*)[position()&lt;= $offset]"><m:mtd/></xsl:for-each>' +
344
+ ' <xsl:copy-of select="*"/>' +
345
+ ' </xsl:otherwise>' +
346
+ ' </xsl:choose>' +
347
+ ' </m:mtr>' +
348
+ ' </xsl:for-each>' +
349
+ ' </m:mtable>' +
350
+ '</xsl:variable>' +
351
+ '<xsl:apply-templates mode="ml" select="c:node-set($m)"/>' +
352
+ '</xsl:template>' +
353
+ '<xsl:template match="*" mode="ml">' +
354
+ ' <xsl:copy>' +
355
+ ' <xsl:copy-of select="@*"/>' +
356
+ ' <xsl:apply-templates mode="ml"/>' +
357
+ ' </xsl:copy>' +
358
+ '</xsl:template>' +
359
+ '<xsl:template mode="ml" match="m:mtr[following-sibling::*[1][@class=\'msline\']]">' +
360
+ ' <m:mtr>' +
361
+ ' <xsl:copy-of select="@*"/>' +
362
+ ' <xsl:variable name="m" select="following-sibling::*[1]/m:mtd"/>' +
363
+ ' <xsl:for-each select="m:mtd">' +
364
+ ' <xsl:variable name="p" select="position()"/>' +
365
+ ' <m:mtd>' +
366
+ ' <xsl:copy-of select="@*"/>' +
367
+ ' <xsl:choose>' +
368
+ ' <xsl:when test="$m[$p]/m:mpadded">' +
369
+ ' <m:menclose notation="bottom">' +
370
+ ' <m:mpadded depth=".1em" height="1em" width=".4em">' +
371
+ ' <xsl:copy-of select="*"/>' +
372
+ ' </m:mpadded>' +
373
+ ' </m:menclose>' +
374
+ ' </xsl:when>' +
375
+ ' <xsl:otherwise>' +
376
+ ' <xsl:copy-of select="*"/>' +
377
+ ' </xsl:otherwise>' +
378
+ ' </xsl:choose>' +
379
+ ' </m:mtd>' +
380
+ ' </xsl:for-each>' +
381
+ ' </m:mtr>' +
382
+ '</xsl:template><xsl:template mode="ml" match="m:mtr[not(preceding-sibling::*)][@class=\'msline\']" priority="3">' +
383
+ ' <m:mtr>' +
384
+ ' <xsl:copy-of select="@*"/>' +
385
+ ' <xsl:for-each select="m:mtd">' +
386
+ ' <m:mtd>' +
387
+ ' <xsl:copy-of select="@*"/>' +
388
+ ' <xsl:if test="m:mpadded">' +
389
+ ' <m:menclose notation="bottom">' +
390
+ ' <m:mpadded depth=".1em" height="1em" width=".4em">' +
391
+ ' <m:mspace width=".2em"/>' +
392
+ ' </m:mpadded>' +
393
+ ' </m:menclose>' +
394
+ ' </xsl:if>' +
395
+ ' </m:mtd>' +
396
+ ' </xsl:for-each>' +
397
+ ' </m:mtr>' +
398
+ '</xsl:template><xsl:template mode="ml" match="m:mtr[@class=\'msline\']" priority="2"/>' +
399
+ '<xsl:template mode="mstack1" match="*">' +
400
+ ' <xsl:param name="p"/>' +
401
+ ' <xsl:param name="maxl" select="0"/>' +
402
+ ' <m:mtr l="{1 + $p}">' +
403
+ ' <xsl:if test="ancestor::mstack[1]/@stackalign=\'left\'">' +
404
+ ' <xsl:attribute name="l"><xsl:value-of select="$p"/></xsl:attribute>' +
405
+ ' </xsl:if>' +
406
+ ' <m:mtd><xsl:apply-templates select="."/></m:mtd>' +
407
+ ' </m:mtr>' +
408
+ '</xsl:template>' +
409
+ '<xsl:template mode="mstack1" match="m:msrow">' +
410
+ ' <xsl:param name="p"/>' +
411
+ ' <xsl:param name="maxl" select="0"/>' +
412
+ ' <xsl:variable name="align1" select="ancestor::m:mstack[1]/@stackalign"/>' +
413
+ ' <xsl:variable name="align">' +
414
+ ' <xsl:choose>' +
415
+ ' <xsl:when test="string($align1)=\'\'">decimalpoint</xsl:when>' +
416
+ ' <xsl:otherwise><xsl:value-of select="$align1"/></xsl:otherwise>' +
417
+ ' </xsl:choose>' +
418
+ ' </xsl:variable>' +
419
+ ' <xsl:variable name="row">' +
420
+ ' <xsl:apply-templates mode="mstack1" select="*">' +
421
+ ' <xsl:with-param name="p" select="0"/>' +
422
+ ' </xsl:apply-templates>' +
423
+ ' </xsl:variable>' +
424
+ ' <xsl:text>&#10;</xsl:text>' +
425
+ ' <xsl:variable name="l1">' +
426
+ ' <xsl:choose>' +
427
+ ' <xsl:when test="$align=\'decimalpoint\' and m:mn">' +
428
+ ' <xsl:for-each select="c:node-set($row)/m:mtr[m:mtd/m:mn][1]">' +
429
+ ' <xsl:value-of select="number(sum(@l))+count(preceding-sibling::*/@l)"/>' +
430
+ ' </xsl:for-each>' +
431
+ ' </xsl:when>' +
432
+ ' <xsl:when test="$align=\'right\' or $align=\'decimalpoint\'">' +
433
+ ' <xsl:value-of select="count(c:node-set($row)/m:mtr/m:mtd)"/>' +
434
+ ' </xsl:when>' +
435
+ ' <xsl:otherwise>' +
436
+ ' <xsl:value-of select="0"/>' +
437
+ ' </xsl:otherwise>' +
438
+ ' </xsl:choose>' +
439
+ ' </xsl:variable>' +
440
+ ' <m:mtr class="msrow" l="{number($l1) + number(sum(@position)) +$p}">' +
441
+ ' <xsl:copy-of select="c:node-set($row)/m:mtr/*"/>' +
442
+ ' </m:mtr>' +
443
+ '</xsl:template><xsl:template mode="mstack1" match="m:mn">' +
444
+ ' <xsl:param name="p"/>' +
445
+ ' <xsl:variable name="align1" select="ancestor::m:mstack[1]/@stackalign"/>' +
446
+ ' <xsl:variable name="dp1" select="ancestor::*[@decimalpoint][1]/@decimalpoint"/>' +
447
+ ' <xsl:variable name="align">' +
448
+ ' <xsl:choose>' +
449
+ ' <xsl:when test="string($align1)=\'\'">decimalpoint</xsl:when>' +
450
+ ' <xsl:otherwise><xsl:value-of select="$align1"/></xsl:otherwise>' +
451
+ ' </xsl:choose>' +
452
+ ' </xsl:variable>' +
453
+ ' <xsl:variable name="dp">' +
454
+ ' <xsl:choose>' +
455
+ ' <xsl:when test="string($dp1)=\'\'">.</xsl:when>' +
456
+ ' <xsl:otherwise><xsl:value-of select="$dp1"/></xsl:otherwise>' +
457
+ ' </xsl:choose>' +
458
+ ' </xsl:variable>' +
459
+ ' <m:mtr l="$p">' +
460
+ ' <xsl:variable name="mn" select="normalize-space(.)"/>' +
461
+ ' <xsl:variable name="len" select="string-length($mn)"/>' +
462
+ ' <xsl:choose>' +
463
+ ' <xsl:when test="$align=\'right\' or ($align=\'decimalpoint\' and not(contains($mn,$dp)))">' +
464
+ ' <xsl:attribute name="l"><xsl:value-of select="$p + $len"/></xsl:attribute>' +
465
+ ' </xsl:when>' +
466
+ ' <xsl:when test="$align=\'center\'">' +
467
+ ' <xsl:attribute name="l"><xsl:value-of select="round(($p + $len) div 2)"/></xsl:attribute>' +
468
+ ' </xsl:when>' +
469
+ ' <xsl:when test="$align=\'decimalpoint\'">' +
470
+ ' <xsl:attribute name="l"><xsl:value-of select="$p + string-length(substring-before($mn,$dp))"/></xsl:attribute>' +
471
+ ' </xsl:when>' +
472
+ ' </xsl:choose> <xsl:for-each select="(//node())[position() &lt;=$len]">' +
473
+ ' <xsl:variable name="pos" select="position()"/>' +
474
+ ' <m:mtd><m:mn><xsl:value-of select="substring($mn,$pos,1)"/></m:mn></m:mtd>' +
475
+ ' </xsl:for-each>' +
476
+ ' </m:mtr>' +
477
+ '</xsl:template>' +
478
+ '<xsl:template match="m:msgroup" mode="mstack1">' +
479
+ ' <xsl:param name="p"/>' +
480
+ ' <xsl:variable name="s" select="number(sum(@shift))"/>' +
481
+ ' <xsl:variable name="thisp" select="number(sum(@position))"/>' +
482
+ ' <xsl:for-each select="*">' +
483
+ ' <xsl:apply-templates mode="mstack1" select=".">' +
484
+ ' <xsl:with-param name="p" select="number($p)+$thisp+(position()-1)*$s"/>' +
485
+ ' </xsl:apply-templates>' +
486
+ ' </xsl:for-each>' +
487
+ '</xsl:template>' +
488
+ '<xsl:template match="m:msline" mode="mstack1">' +
489
+ ' <xsl:param name="p"/>' +
490
+ ' <xsl:variable name="align1" select="ancestor::m:mstack[1]/@stackalign"/>' +
491
+ ' <xsl:variable name="align">' +
492
+ ' <xsl:choose>' +
493
+ ' <xsl:when test="string($align1)=\'\'">decimalpoint</xsl:when>' +
494
+ ' <xsl:otherwise><xsl:value-of select="$align1"/></xsl:otherwise>' +
495
+ ' </xsl:choose>' +
496
+ ' </xsl:variable>' +
497
+ ' <m:mtr class="msline">' +
498
+ ' <xsl:attribute name="l">' +
499
+ ' <xsl:choose>' +
500
+ ' <xsl:when test="not(string(@length)) or @length=0">*</xsl:when>' +
501
+ ' <xsl:when test="string($align)=\'right\' or string($align)=\'decimalpoint\' "><xsl:value-of select="$p+ @length"/></xsl:when>' +
502
+ ' <xsl:otherwise><xsl:value-of select="$p"/></xsl:otherwise>' +
503
+ ' </xsl:choose>' +
504
+ ' </xsl:attribute>' +
505
+ ' <xsl:variable name="w">' +
506
+ ' <xsl:choose>' +
507
+ ' <xsl:when test="@mslinethickness=\'thin\'">0.1em</xsl:when>' +
508
+ ' <xsl:when test="@mslinethickness=\'medium\'">0.15em</xsl:when>' +
509
+ ' <xsl:when test="@mslinethickness=\'thick\'">0.2em</xsl:when>' +
510
+ ' <xsl:when test="@mslinethickness"><xsl:value-of select="@mslinethickness"/></xsl:when>' +
511
+ ' <xsl:otherwise>0.15em</xsl:otherwise>' +
512
+ ' </xsl:choose>' +
513
+ ' </xsl:variable>' +
514
+ ' <xsl:choose>' +
515
+ ' <xsl:when test="not(string(@length)) or @length=0">' +
516
+ ' <m:mtd class="mslinemax">' +
517
+ ' <m:mpadded lspace="-0.2em" width="0em" height="0em">' +
518
+ ' <m:mfrac linethickness="{$w}">' +
519
+ ' <m:mspace width=".4em"/>' +
520
+ ' <m:mrow/>' +
521
+ ' </m:mfrac>' +
522
+ ' </m:mpadded>' +
523
+ ' </m:mtd>' +
524
+ ' </xsl:when>' +
525
+ ' <xsl:otherwise>' +
526
+ ' <xsl:variable name="l" select="@length"/>' +
527
+ ' <xsl:for-each select="(//node())[position()&lt;=$l]">' +
528
+ ' <m:mtd class="msline">' +
529
+ ' <m:mpadded lspace="-0.2em" width="0em" height="0em">' +
530
+ ' <m:mfrac linethickness="{$w}">' +
531
+ ' <m:mspace width=".4em"/>' +
532
+ ' <m:mrow/>' +
533
+ ' </m:mfrac>' +
534
+ ' </m:mpadded>' +
535
+ ' </m:mtd>' +
536
+ ' </xsl:for-each>' +
537
+ ' </xsl:otherwise>' +
538
+ ' </xsl:choose>' +
539
+ ' </m:mtr>' +
540
+ '</xsl:template>' +
541
+ '<xsl:template match="m:mscarries" mode="mstack1">' +
542
+ ' <xsl:param name="p"/>' +
543
+ ' <xsl:variable name="align1" select="ancestor::m:mstack[1]/@stackalign"/>' +
544
+ ' <xsl:variable name="l1">' +
545
+ ' <xsl:choose>' +
546
+ ' <xsl:when test="string($align1)=\'left\'">0</xsl:when>' +
547
+ ' <xsl:otherwise><xsl:value-of select="count(*)"/></xsl:otherwise>' +
548
+ ' </xsl:choose>' +
549
+ ' </xsl:variable>' +
550
+ ' <m:mtr class="mscarries" l="{$p + $l1 + sum(@position)}">' +
551
+ ' <xsl:apply-templates select="*" mode="msc"/>' +
552
+ ' </m:mtr>' +
553
+ '</xsl:template><xsl:template match="*" mode="msc">' +
554
+ ' <m:mtd>' +
555
+ ' <xsl:copy-of select="../@location|../@crossout"/>' +
556
+ ' <xsl:choose>' +
557
+ ' <xsl:when test="../@scriptsizemultiplier">' +
558
+ ' <m:mstyle mathsize="{round(../@scriptsizemultiplier div .007)}%">' +
559
+ ' <xsl:apply-templates select="."/>' +
560
+ ' </m:mstyle>' +
561
+ ' </xsl:when>' +
562
+ ' <xsl:otherwise>' +
563
+ ' <xsl:apply-templates select="."/>' +
564
+ ' </xsl:otherwise>' +
565
+ ' </xsl:choose>' +
566
+ ' </m:mtd>' +
567
+ '</xsl:template><xsl:template match="m:mscarry" mode="msc">' +
568
+ ' <m:mtd>' +
569
+ ' <xsl:copy-of select="@location|@crossout"/>' +
570
+ ' <xsl:choose>' +
571
+ ' <xsl:when test="../@scriptsizemultiplier">' +
572
+ ' <m:mstyle mathsize="{round(../@scriptsizemultiplier div .007)}%">' +
573
+ ' <xsl:apply-templates/>' +
574
+ ' </m:mstyle>' +
575
+ ' </xsl:when>' +
576
+ ' <xsl:otherwise>' +
577
+ ' <xsl:apply-templates/>' +
578
+ ' </xsl:otherwise>' +
579
+ ' </xsl:choose>' +
580
+ ' </m:mtd>' +
581
+ '</xsl:template>' +
582
+ '<xsl:template match="m:mlongdiv" priority="11">' +
583
+ ' <xsl:variable name="ms">' +
584
+ ' <m:mstack>' +
585
+ ' <xsl:copy-of select="(ancestor-or-self::*/@decimalpoint)[last()]"/>' +
586
+ ' <xsl:choose>' +
587
+ ' <xsl:when test="@longdivstyle=\'left)(right\'">' +
588
+ ' <m:msrow>' +
589
+ ' <m:mrow><xsl:copy-of select="*[1]"/></m:mrow>' +
590
+ ' <m:mo>)</m:mo>' +
591
+ ' <xsl:copy-of select="*[3]"/>' +
592
+ ' <m:mo>(</m:mo>' +
593
+ ' <xsl:copy-of select="*[2]"/>' +
594
+ ' </m:msrow>' +
595
+ ' </xsl:when>' +
596
+ ' <xsl:when test="@longdivstyle=\'left/\right\'">' +
597
+ ' <m:msrow>' +
598
+ ' <m:mrow><xsl:copy-of select="*[1]"/></m:mrow>' +
599
+ ' <m:mo>/</m:mo>' +
600
+ ' <xsl:copy-of select="*[3]"/>' +
601
+ ' <m:mo>\</m:mo>' +
602
+ ' <xsl:copy-of select="*[2]"/>' +
603
+ ' </m:msrow>' +
604
+ ' </xsl:when>' +
605
+ ' <xsl:when test="@longdivstyle=\':right=right\'">' +
606
+ ' <m:msrow>' +
607
+ ' <xsl:copy-of select="*[3]"/>' +
608
+ ' <m:mo>:</m:mo>' +
609
+ ' <xsl:copy-of select="*[1]"/>' +
610
+ ' <m:mo>=</m:mo>' +
611
+ ' <xsl:copy-of select="*[2]"/>' +
612
+ ' </m:msrow>' +
613
+ ' </xsl:when>' +
614
+ ' <xsl:when test="@longdivstyle=\'stackedrightright\'' +
615
+ ' or @longdivstyle=\'mediumstackedrightright\'' +
616
+ ' or @longdivstyle=\'shortstackedrightright\'' +
617
+ ' or @longdivstyle=\'stackedleftleft\'' +
618
+ ' ">' +
619
+ ' <xsl:attribute name="align">top</xsl:attribute>' +
620
+ ' <xsl:copy-of select="*[3]"/>' +
621
+ ' </xsl:when>' +
622
+ ' <xsl:when test="@longdivstyle=\'stackedleftlinetop\'">' +
623
+ ' <xsl:copy-of select="*[2]"/>' +
624
+ ' <m:msline length="{string-length(*[3])-1}"/>' +
625
+ ' <m:msrow>' +
626
+ ' <m:mrow>' +
627
+ ' <m:menclose notation="bottom right">' +
628
+ ' <xsl:copy-of select="*[1]"/>' +
629
+ ' </m:menclose>' +
630
+ ' </m:mrow>' +
631
+ ' <xsl:copy-of select="*[3]"/>' +
632
+ ' </m:msrow>' +
633
+ ' </xsl:when>' +
634
+ ' <xsl:when test="@longdivstyle=\'righttop\'">' +
635
+ ' <xsl:copy-of select="*[2]"/>' +
636
+ ' <m:msline length="{string-length(*[3])}"/>' +
637
+ ' <m:msrow>' +
638
+ ' <xsl:copy-of select="*[3]"/>' +
639
+ ' <m:menclose notation="top left bottom">' +
640
+ ' <xsl:copy-of select="*[1]"/></m:menclose>' +
641
+ ' </m:msrow>' +
642
+ ' </xsl:when>' +
643
+ ' <xsl:otherwise>' +
644
+ ' <xsl:copy-of select="*[2]"/>' +
645
+ ' <m:msline length="{string-length(*[3])}"/>' +
646
+ ' <m:msrow>' +
647
+ ' <m:mrow><xsl:copy-of select="*[1]"/></m:mrow>' +
648
+ ' <m:mo>)</m:mo>' +
649
+ ' <xsl:copy-of select="*[3]"/>' +
650
+ ' </m:msrow>' +
651
+ ' </xsl:otherwise>' +
652
+ ' </xsl:choose>' +
653
+ ' <xsl:copy-of select="*[position()&gt;3]"/>' +
654
+ ' </m:mstack>' +
655
+ ' </xsl:variable>' +
656
+ ' <xsl:choose>' +
657
+ ' <xsl:when test="@longdivstyle=\'stackedrightright\'">' +
658
+ ' <m:menclose notation="right">' +
659
+ ' <xsl:apply-templates select="c:node-set($ms)"/>' +
660
+ ' </m:menclose>' +
661
+ ' <m:mtable align="top">' +
662
+ ' <m:mtr>' +
663
+ ' <m:menclose notation="bottom">' +
664
+ ' <xsl:copy-of select="*[1]"/>' +
665
+ ' </m:menclose>' +
666
+ ' </m:mtr>' +
667
+ ' <m:mtr>' +
668
+ ' <mtd><xsl:copy-of select="*[2]"/></mtd>' +
669
+ ' </m:mtr>' +
670
+ ' </m:mtable>' +
671
+ ' </xsl:when>' +
672
+ ' <xsl:when test="@longdivstyle=\'mediumstackedrightright\'">' +
673
+ ' <xsl:apply-templates select="c:node-set($ms)"/>' +
674
+ ' <m:menclose notation="left">' +
675
+ ' <m:mtable align="top">' +
676
+ ' <m:mtr>' +
677
+ ' <m:menclose notation="bottom">' +
678
+ ' <xsl:copy-of select="*[1]"/>' +
679
+ ' </m:menclose>' +
680
+ ' </m:mtr>' +
681
+ ' <m:mtr>' +
682
+ ' <mtd><xsl:copy-of select="*[2]"/></mtd>' +
683
+ ' </m:mtr>' +
684
+ ' </m:mtable>' +
685
+ ' </m:menclose>' +
686
+ ' </xsl:when>' +
687
+ ' <xsl:when test="@longdivstyle=\'shortstackedrightright\'">' +
688
+ ' <xsl:apply-templates select="c:node-set($ms)"/>' +
689
+ ' <m:mtable align="top">' +
690
+ ' <m:mtr>' +
691
+ ' <m:menclose notation="left bottom">' +
692
+ ' <xsl:copy-of select="*[1]"/>' +
693
+ ' </m:menclose>' +
694
+ ' </m:mtr>' +
695
+ ' <m:mtr>' +
696
+ ' <mtd><xsl:copy-of select="*[2]"/></mtd>' +
697
+ ' </m:mtr>' +
698
+ ' </m:mtable>' +
699
+ ' </xsl:when>' +
700
+ ' <xsl:when test="@longdivstyle=\'stackedleftleft\'">' +
701
+ ' <m:mtable align="top">' +
702
+ ' <m:mtr>' +
703
+ ' <m:menclose notation="bottom">' +
704
+ ' <xsl:copy-of select="*[1]"/>' +
705
+ ' </m:menclose>' +
706
+ ' </m:mtr>' +
707
+ ' <m:mtr>' +
708
+ ' <mtd><xsl:copy-of select="*[2]"/></mtd>' +
709
+ ' </m:mtr>' +
710
+ ' </m:mtable>' +
711
+ ' <m:menclose notation="left">' +
712
+ ' <xsl:apply-templates select="c:node-set($ms)"/>' +
713
+ ' </m:menclose>' +
714
+ ' </xsl:when>' +
715
+ ' <xsl:otherwise>' +
716
+ ' <xsl:apply-templates select="c:node-set($ms)"/>' +
717
+ ' </xsl:otherwise>' +
718
+ ' </xsl:choose>' +
719
+ '</xsl:template>' +
720
+ '<xsl:template match="m:menclose[@notation=\'madruwb\']" mode="rtl">' +
721
+ ' <m:menclose notation="bottom right">' +
722
+ ' <xsl:apply-templates mode="rtl"/>' +
723
+ ' </m:menclose>' +
724
+ '</xsl:template></xsl:stylesheet>';
725
+
726
+ /*
727
+ * End of mml3mj.xsl material.
728
+ */
729
+
730
+ var mml3;
731
+ if (window.XSLTProcessor) {
732
+ // standard method: just use an XSLTProcessor and parse the stylesheet
733
+ if (!MATHML.ParseXML) {MATHML.ParseXML = MATHML.createParser()}
734
+ MATHML.mml3XSLT = new XSLTProcessor();
735
+ MATHML.mml3XSLT.importStylesheet(MATHML.ParseXML(mml3Stylesheet));
736
+ } else if (MathJax.Hub.Browser.isMSIE) {
737
+ // nonstandard methods for Internet Explorer
738
+ if (MathJax.Hub.Browser.versionAtLeast("9.0") || (document.documentMode||0) >= 9) {
739
+ // For Internet Explorer >= 9, use createProcessor
740
+ mml3 = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
741
+ mml3.loadXML(mml3Stylesheet);
742
+ var xslt = new ActiveXObject("Msxml2.XSLTemplate");
743
+ xslt.stylesheet = mml3;
744
+ MATHML.mml3XSLT = {
745
+ mml3: xslt.createProcessor(),
746
+ transformToDocument: function(doc) {
747
+ this.mml3.input = doc;
748
+ this.mml3.transform();
749
+ return this.mml3.output;
750
+ }
751
+ }
752
+ } else {
753
+ // For Internet Explorer <= 8, use transformNode
754
+ mml3 = MATHML.createMSParser();
755
+ mml3.async = false;
756
+ mml3.loadXML(mml3Stylesheet);
757
+ MATHML.mml3XSLT = {
758
+ mml3: mml3,
759
+ transformToDocument: function(doc) {
760
+ return doc.documentElement.transformNode(this.mml3);
761
+ }
762
+ }
763
+ }
764
+ } else {
765
+ // No XSLT support. Do not change the <math> content.
766
+ MATHML.mml3XSLT = null;
767
+ }
768
+
769
+ // Tweak CSS to avoid some browsers rearranging HTML output
770
+ MathJax.Ajax.Styles({
771
+ ".MathJax .mi, .MathJax .mo, .MathJax .mn, .MathJax .mtext": {
772
+ direction: "ltr",
773
+ display: "inline-block"
774
+ },
775
+ ".MathJax .ms, .MathJax .mspace, .MathJax .mglyph": {
776
+ direction: "ltr",
777
+ display: "inline-block"
778
+ }
779
+ });
780
+
781
+ MathJax.Hub.Startup.signal.Post("MathML mml3.js Ready");
782
+ });
783
+
784
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/MathML/mml3.js");
vendor/MathJax/extensions/MathMenu.js ADDED
@@ -0,0 +1,1664 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/MathMenu.js
7
+ *
8
+ * Implements a right-mouse (or CTRL-click) menu over mathematics
9
+ * elements that gives the user the ability to copy the source,
10
+ * change the math size, and zoom settings.
11
+ *
12
+ * ---------------------------------------------------------------------
13
+ *
14
+ * Copyright (c) 2010-2018 The MathJax Consortium
15
+ *
16
+ * Licensed under the Apache License, Version 2.0 (the "License");
17
+ * you may not use this file except in compliance with the License.
18
+ * You may obtain a copy of the License at
19
+ *
20
+ * http://www.apache.org/licenses/LICENSE-2.0
21
+ *
22
+ * Unless required by applicable law or agreed to in writing, software
23
+ * distributed under the License is distributed on an "AS IS" BASIS,
24
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ * See the License for the specific language governing permissions and
26
+ * limitations under the License.
27
+ */
28
+
29
+ (function (HUB,HTML,AJAX,CALLBACK,OUTPUT) {
30
+ var VERSION = "2.7.5";
31
+
32
+ var SIGNAL = MathJax.Callback.Signal("menu"); // signal for menu events
33
+
34
+ MathJax.Extension.MathMenu = {
35
+ version: VERSION,
36
+ signal: SIGNAL
37
+ };
38
+
39
+ var _ = function (id) {
40
+ return MathJax.Localization._.apply(
41
+ MathJax.Localization,
42
+ [["MathMenu",id]].concat([].slice.call(arguments,1))
43
+ );
44
+ };
45
+
46
+ var isArray = MathJax.Object.isArray;
47
+
48
+ var isPC = HUB.Browser.isPC, isMSIE = HUB.Browser.isMSIE, isIE9 = ((document.documentMode||0) > 8);
49
+ var ROUND = (isPC ? null : "5px");
50
+
51
+ var CONFIG = HUB.CombineConfig("MathMenu",{
52
+ delay: 150, // the delay for submenus
53
+
54
+ showRenderer: true, // show the "Math Renderer" menu?
55
+ showMathPlayer: true, // show the "MathPlayer" menu?
56
+ showFontMenu: false, // show the "Font Preference" menu?
57
+ showContext: false, // show the "Context Menu" menu?
58
+ showDiscoverable: false, // show the "Discoverable" menu?
59
+ showLocale: true, // show the "Locale" menu?
60
+ showLocaleURL: false, // show the "Load from URL" menu?
61
+
62
+ semanticsAnnotations: {
63
+ "TeX": ["TeX", "LaTeX", "application/x-tex"],
64
+ "StarMath": ["StarMath 5.0"],
65
+ "Maple": ["Maple"],
66
+ "ContentMathML": ["MathML-Content", "application/mathml-content+xml"],
67
+ "OpenMath": ["OpenMath"]
68
+ },
69
+
70
+ windowSettings: { // for source window
71
+ status: "no", toolbar: "no", locationbar: "no", menubar: "no",
72
+ directories: "no", personalbar: "no", resizable: "yes", scrollbars: "yes",
73
+ width: 400, height: 300,
74
+ left: Math.round((screen.width - 400)/2),
75
+ top: Math.round((screen.height - 300)/3)
76
+ },
77
+
78
+ styles: {
79
+ "#MathJax_About": {
80
+ position:"fixed", left:"50%", width:"auto", "text-align":"center",
81
+ border:"3px outset", padding:"1em 2em", "background-color":"#DDDDDD", color:"black",
82
+ cursor: "default", "font-family":"message-box", "font-size":"120%",
83
+ "font-style":"normal", "text-indent":0, "text-transform":"none",
84
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
85
+ "word-wrap":"normal", "white-space":"nowrap", "float":"none", "z-index":201,
86
+
87
+ "border-radius": "15px", // Opera 10.5 and IE9
88
+ "-webkit-border-radius": "15px", // Safari and Chrome
89
+ "-moz-border-radius": "15px", // Firefox
90
+ "-khtml-border-radius": "15px", // Konqueror
91
+
92
+ "box-shadow":"0px 10px 20px #808080", // Opera 10.5 and IE9
93
+ "-webkit-box-shadow":"0px 10px 20px #808080", // Safari 3 and Chrome
94
+ "-moz-box-shadow":"0px 10px 20px #808080", // Forefox 3.5
95
+ "-khtml-box-shadow":"0px 10px 20px #808080", // Konqueror
96
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
97
+ },
98
+ "#MathJax_About.MathJax_MousePost": {
99
+ outline:"none"
100
+ },
101
+
102
+ ".MathJax_Menu": {
103
+ position:"absolute", "background-color":"white", color:"black",
104
+ width:"auto", padding:(isPC ? "2px" : "5px 0px"),
105
+ border:"1px solid #CCCCCC", margin:0, cursor:"default",
106
+ font: "menu", "text-align":"left", "text-indent":0, "text-transform":"none",
107
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
108
+ "word-wrap":"normal", "white-space":"nowrap", "float":"none", "z-index":201,
109
+
110
+ "border-radius": ROUND, // Opera 10.5 and IE9
111
+ "-webkit-border-radius": ROUND, // Safari and Chrome
112
+ "-moz-border-radius": ROUND, // Firefox
113
+ "-khtml-border-radius": ROUND, // Konqueror
114
+
115
+ "box-shadow":"0px 10px 20px #808080", // Opera 10.5 and IE9
116
+ "-webkit-box-shadow":"0px 10px 20px #808080", // Safari 3 and Chrome
117
+ "-moz-box-shadow":"0px 10px 20px #808080", // Forefox 3.5
118
+ "-khtml-box-shadow":"0px 10px 20px #808080", // Konqueror
119
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
120
+ },
121
+
122
+ ".MathJax_MenuItem": {
123
+ padding: (isPC ? "2px 2em" : "1px 2em"),
124
+ background:"transparent"
125
+ },
126
+
127
+ ".MathJax_MenuArrow": {
128
+ position:"absolute", right:".5em", "padding-top":".25em", color:"#666666",
129
+ "font-family": (isMSIE ? "'Arial unicode MS'" : null), "font-size": ".75em"
130
+ },
131
+ ".MathJax_MenuActive .MathJax_MenuArrow": {color:"white"},
132
+ ".MathJax_MenuArrow.RTL": {left:".5em", right:"auto"},
133
+
134
+ ".MathJax_MenuCheck": {
135
+ position:"absolute", left:".7em",
136
+ "font-family": (isMSIE ? "'Arial unicode MS'" : null)
137
+ },
138
+ ".MathJax_MenuCheck.RTL": {right:".7em", left:"auto"},
139
+
140
+ ".MathJax_MenuRadioCheck": {
141
+ position:"absolute", left: (isPC ? "1em" : ".7em")
142
+ },
143
+ ".MathJax_MenuRadioCheck.RTL": {
144
+ right: (isPC ? "1em" : ".7em"), left:"auto"
145
+ },
146
+
147
+ ".MathJax_MenuLabel": {
148
+ padding: (isPC ? "2px 2em 4px 1.33em" : "1px 2em 3px 1.33em"),
149
+ "font-style":"italic"
150
+ },
151
+
152
+ ".MathJax_MenuRule": {
153
+ "border-top": (isPC ? "1px solid #CCCCCC" : "1px solid #DDDDDD"),
154
+ margin: (isPC ? "4px 1px 0px" : "4px 3px")
155
+ },
156
+
157
+ ".MathJax_MenuDisabled": {
158
+ color:"GrayText"
159
+ },
160
+ ".MathJax_MenuActive": {
161
+ "background-color": (isPC ? "Highlight" : "#606872"),
162
+ color: (isPC ? "HighlightText" : "white")
163
+ },
164
+
165
+ ".MathJax_MenuDisabled:focus, .MathJax_MenuLabel:focus": {
166
+ "background-color": "#E8E8E8"
167
+ },
168
+ ".MathJax_ContextMenu:focus": {
169
+ outline:"none"
170
+ },
171
+ ".MathJax_ContextMenu .MathJax_MenuItem:focus": {
172
+ outline:"none"
173
+ },
174
+
175
+ "#MathJax_AboutClose": {
176
+ top:".2em", right:".2em"
177
+ },
178
+ ".MathJax_Menu .MathJax_MenuClose": {
179
+ top:"-10px", left:"-10px"
180
+ },
181
+
182
+ ".MathJax_MenuClose": {
183
+ position:"absolute",
184
+ cursor:"pointer",
185
+ display:"inline-block",
186
+ border:"2px solid #AAA",
187
+ "border-radius":"18px",
188
+ "-webkit-border-radius": "18px", // Safari and Chrome
189
+ "-moz-border-radius": "18px", // Firefox
190
+ "-khtml-border-radius": "18px", // Konqueror
191
+ "font-family":"'Courier New',Courier",
192
+ "font-size":"24px",
193
+ color:"#F0F0F0"
194
+ },
195
+ ".MathJax_MenuClose span": {
196
+ display:"block", "background-color":"#AAA", border:"1.5px solid",
197
+ "border-radius":"18px",
198
+ "-webkit-border-radius": "18px", // Safari and Chrome
199
+ "-moz-border-radius": "18px", // Firefox
200
+ "-khtml-border-radius": "18px", // Konqueror
201
+ "line-height":0,
202
+ padding:"8px 0 6px" // may need to be browser-specific
203
+ },
204
+ ".MathJax_MenuClose:hover": {
205
+ color:"white!important",
206
+ border:"2px solid #CCC!important"
207
+ },
208
+ ".MathJax_MenuClose:hover span": {
209
+ "background-color":"#CCC!important"
210
+ },
211
+ ".MathJax_MenuClose:hover:focus": {
212
+ outline:"none"
213
+ }
214
+ }
215
+ });
216
+
217
+ var FALSE, HOVER, KEY;
218
+ HUB.Register.StartupHook("MathEvents Ready",function () {
219
+ FALSE = MathJax.Extension.MathEvents.Event.False;
220
+ HOVER = MathJax.Extension.MathEvents.Hover;
221
+ KEY = MathJax.Extension.MathEvents.Event.KEY;
222
+ });
223
+
224
+
225
+ /*************************************************************/
226
+ /*
227
+ * Abstract class of all keyboard navigatable objects.
228
+ */
229
+ var NAV = MathJax.Object.Subclass({
230
+ /*
231
+ * Moving in the list of items.
232
+ */
233
+ Keydown: function(event, menu) {
234
+ switch (event.keyCode) {
235
+ case KEY.ESCAPE:
236
+ this.Remove(event, menu);
237
+ break;
238
+ case KEY.RIGHT:
239
+ this.Right(event, menu);
240
+ break;
241
+ case KEY.LEFT:
242
+ this.Left(event, menu);
243
+ break;
244
+ case KEY.UP:
245
+ this.Up(event, menu);
246
+ break;
247
+ case KEY.DOWN:
248
+ this.Down(event, menu);
249
+ break;
250
+ case KEY.RETURN:
251
+ case KEY.SPACE:
252
+ this.Space(event, menu);
253
+ break;
254
+ default:
255
+ return;
256
+ break;
257
+ }
258
+ return FALSE(event);
259
+ },
260
+ Escape: function(event, menu) { },
261
+ Right: function(event, menu) { },
262
+ Left: function(event, menu) { },
263
+ Up: function(event, menu) { },
264
+ Down: function(event, menu) { },
265
+ Space: function(event, menu) { }
266
+ }, {});
267
+
268
+
269
+ /*************************************************************/
270
+ /*
271
+ * The main menu class
272
+ */
273
+ var MENU = MathJax.Menu = NAV.Subclass({
274
+ version: VERSION,
275
+ items: [],
276
+ posted: false,
277
+ title: null,
278
+ margin: 5,
279
+
280
+ Init: function (def) {this.items = [].slice.call(arguments,0)},
281
+ With: function (def) {if (def) {HUB.Insert(this,def)}; return this},
282
+
283
+ /*
284
+ * Display the menu
285
+ */
286
+ Post: function (event,parent,forceLTR) {
287
+ if (!event) {event = window.event||{}}
288
+ var div = document.getElementById("MathJax_MenuFrame");
289
+ if (!div) {
290
+ div = MENU.Background(this);
291
+ delete ITEM.lastItem; delete ITEM.lastMenu;
292
+ delete MENU.skipUp;
293
+ SIGNAL.Post(["post",MENU.jax]);
294
+ MENU.isRTL = (MathJax.Localization.fontDirection() === "rtl");
295
+ }
296
+ var menu = HTML.Element("div",{
297
+ onmouseup: MENU.Mouseup, ondblclick: FALSE,
298
+ ondragstart: FALSE, onselectstart: FALSE, oncontextmenu: FALSE,
299
+ menuItem: this, className: "MathJax_Menu", onkeydown: MENU.Keydown,
300
+ role: "menu"
301
+ });
302
+ if (event.type === "contextmenu" || event.type === "mouseover")
303
+ menu.className += " MathJax_ContextMenu";
304
+ if (!forceLTR) {MathJax.Localization.setCSS(menu)}
305
+
306
+ for (var i = 0, m = this.items.length; i < m; i++) {this.items[i].Create(menu)}
307
+ if (MENU.isMobile) {
308
+ HTML.addElement(menu,"span",{
309
+ className: "MathJax_MenuClose", menu: parent,
310
+ ontouchstart: MENU.Close, ontouchend: FALSE, onmousedown: MENU.Close, onmouseup: FALSE
311
+ },[["span",{},"\u00D7"]]);
312
+ }
313
+
314
+ div.appendChild(menu);
315
+ this.posted = true;
316
+ if (menu.offsetWidth) menu.style.width = (menu.offsetWidth+2) + "px";
317
+ var x = event.pageX, y = event.pageY;
318
+ var bbox = document.body.getBoundingClientRect();
319
+ var styles = (window.getComputedStyle ? window.getComputedStyle(document.body) : {marginLeft: "0px"});
320
+ var bodyRight = bbox.right - Math.min(0,bbox.left) + parseFloat(styles.marginLeft);
321
+ if (!x && !y && "clientX" in event) {
322
+ x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
323
+ y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
324
+ }
325
+ if (!parent) {
326
+ var node = MENU.CurrentNode() || event.target;
327
+ if ((event.type === "keydown" || (!x && !y)) && node) {
328
+ var offsetX = window.pageXOffset || document.documentElement.scrollLeft;
329
+ var offsetY = window.pageYOffset || document.documentElement.scrollTop;
330
+ var rect = node.getBoundingClientRect();
331
+ x = (rect.right + rect.left) / 2 + offsetX;
332
+ y = (rect.bottom + rect.top) / 2 + offsetY;
333
+ }
334
+ if (x + menu.offsetWidth > bodyRight - this.margin)
335
+ {x = bodyRight - menu.offsetWidth - this.margin}
336
+ if (MENU.isMobile) {x = Math.max(5,x-Math.floor(menu.offsetWidth/2)); y -= 20}
337
+ MENU.skipUp = event.isContextMenu;
338
+ } else {
339
+ var side = "left", mw = parent.offsetWidth;
340
+ x = (MENU.isMobile ? 30 : mw - 2); y = 0;
341
+ while (parent && parent !== div) {
342
+ x += parent.offsetLeft; y += parent.offsetTop;
343
+ parent = parent.parentNode;
344
+ }
345
+ if (!MENU.isMobile) {
346
+ if ((MENU.isRTL && x - mw - menu.offsetWidth > this.margin) ||
347
+ (!MENU.isRTL && x + menu.offsetWidth > bodyRight - this.margin))
348
+ {side = "right"; x = Math.max(this.margin,x - mw - menu.offsetWidth + 6)}
349
+ }
350
+ if (!isPC) {
351
+ // in case these ever get implemented
352
+ menu.style["borderRadiusTop"+side] = 0; // Opera 10.5
353
+ menu.style["WebkitBorderRadiusTop"+side] = 0; // Safari and Chrome
354
+ menu.style["MozBorderRadiusTop"+side] = 0; // Firefox
355
+ menu.style["KhtmlBorderRadiusTop"+side] = 0; // Konqueror
356
+ }
357
+ }
358
+
359
+ menu.style.left = x+"px"; menu.style.top = y+"px";
360
+ if (document.selection && document.selection.empty) {document.selection.empty()}
361
+
362
+ // Focusing while keeping the scroll position.
363
+ var oldX = window.pageXOffset || document.documentElement.scrollLeft;
364
+ var oldY = window.pageYOffset || document.documentElement.scrollTop;
365
+ MENU.Focus(menu);
366
+ if (event.type === "keydown") {
367
+ MENU.skipMouseoverFromKey = true;
368
+ setTimeout(function() {delete MENU.skipMouseoverFromKey;}, CONFIG.delay);
369
+ }
370
+ window.scrollTo(oldX, oldY);
371
+ return FALSE(event);
372
+ },
373
+
374
+ /*
375
+ * Remove the menu from the screen
376
+ */
377
+ Remove: function (event,menu) {
378
+ SIGNAL.Post(["unpost",MENU.jax]);
379
+ var div = document.getElementById("MathJax_MenuFrame");
380
+ if (div) {
381
+ div.parentNode.removeChild(div);
382
+ if (this.msieFixedPositionBug) {detachEvent("onresize",MENU.Resize)}
383
+ }
384
+ if (MENU.jax.hover) {
385
+ delete MENU.jax.hover.nofade;
386
+ HOVER.UnHover(MENU.jax);
387
+ }
388
+ MENU.Unfocus(menu);
389
+ if (event.type === "mousedown") MENU.CurrentNode().blur();
390
+ return FALSE(event);
391
+ },
392
+
393
+ /*
394
+ * Find an item in a menu (or submenu) by name (Find) or ID (FindID).
395
+ * A list of names or IDs means descend into submenus.
396
+ */
397
+ Find: function (name) {return this.FindN(1,name,[].slice.call(arguments,1))},
398
+ FindId: function (name) {return this.FindN(0,name,[].slice.call(arguments,1))},
399
+ FindN: function (n,name,names) {
400
+ for (var i = 0, m = this.items.length; i < m; i++) {
401
+ if (this.items[i].name[n] === name) {
402
+ if (names.length) {
403
+ if (!this.items[i].submenu) {return null}
404
+ return this.items[i].submenu.FindN(n,names[0],names.slice(1));
405
+ }
406
+ return this.items[i];
407
+ }
408
+ }
409
+ return null;
410
+ },
411
+
412
+ /*
413
+ * Find the index of a menu item (so we can insert before or after it)
414
+ */
415
+ IndexOf: function (name) {return this.IndexOfN(1,name)},
416
+ IndexOfId: function (name) {return this.IndexOfN(0,name)},
417
+ IndexOfN: function (n,name) {
418
+ for (var i = 0, m = this.items.length; i < m; i++)
419
+ {if (this.items[i].name[n] === name) {return i}}
420
+ return null;
421
+ },
422
+
423
+ Right: function(event, menu) {
424
+ MENU.Right(event, menu);
425
+ },
426
+ Left: function(event, menu) {
427
+ MENU.Left(event, menu);
428
+ },
429
+ Up: function(event, menu) {
430
+ var node = menu.lastChild;
431
+ node.menuItem.Activate(event, node);
432
+ },
433
+ Down: function(event, menu) {
434
+ var node = menu.firstChild;
435
+ node.menuItem.Activate(event, node);
436
+ },
437
+ Space: function(event, menu) {
438
+ this.Remove(event, menu);
439
+ }
440
+ },{
441
+
442
+ config: CONFIG,
443
+
444
+ Remove: function (event) {return MENU.Event(event,this,"Remove")},
445
+ Mouseover: function (event) {return MENU.Event(event,this,"Mouseover")},
446
+ Mouseout: function (event) {return MENU.Event(event,this,"Mouseout")},
447
+ Mousedown: function (event) {return MENU.Event(event,this,"Mousedown")},
448
+ Mouseup: function (event) {return MENU.Event(event,this,"Mouseup")},
449
+ Keydown: function (event) {return MENU.Event(event,this,"Keydown")},
450
+ /*
451
+ * Events for mobile devices.
452
+ */
453
+ Touchstart: function (event) {return MENU.Event(event,this,"Touchstart")},
454
+ Touchend: function (event) {return MENU.Event(event,this,"Touchend")},
455
+ Close: function (event) {
456
+ return MENU.Event(event,this.menu||this.parentNode,(this.menu?"Touchend":"Remove"));
457
+ },
458
+ Event: function (event,menu,type,force) {
459
+ if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
460
+ if (MENU.skipMouseoverFromKey && type === "Mouseover") {
461
+ delete MENU.skipMouseoverFromKey;
462
+ return FALSE(event);
463
+ }
464
+ if (MENU.skipUp) {
465
+ if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
466
+ if (type === "Touchstart" ||
467
+ (type === "Mousedown" && !MENU.skipMousedown)) {delete MENU.skipUp}
468
+ }
469
+ if (!event) {event = window.event}
470
+ var item = menu.menuItem;
471
+ if (item && item[type]) {return item[type](event,menu)}
472
+ return null;
473
+ },
474
+ /*
475
+ * Style for the background DIV
476
+ */
477
+ BGSTYLE: {
478
+ position:"absolute", left:0, top:0, "z-index":200,
479
+ width:"100%", height:"100%", border:0, padding:0, margin:0
480
+ },
481
+
482
+ Background: function (menu) {
483
+ var div = HTML.addElement(document.body,"div",
484
+ {style:this.BGSTYLE, id:"MathJax_MenuFrame"},
485
+ [["div",{style: this.BGSTYLE, menuItem: menu, onmousedown: this.Remove}]]);
486
+ var bg = div.firstChild;
487
+ if (MENU.msieBackgroundBug) {
488
+ // MSIE doesn't allow transparent background to be hit boxes, so
489
+ // fake it using opacity with solid background color
490
+ bg.style.backgroundColor = "white"; bg.style.filter = "alpha(opacity=0)";
491
+ }
492
+ if (MENU.msieFixedPositionBug) {
493
+ // MSIE can't do fixed position, so use a full-sized background
494
+ // and an onresize handler to update it (stupid, but necessary)
495
+ div.width = div.height = 0; this.Resize();
496
+ attachEvent("onresize",this.Resize);
497
+ } else {
498
+ // otherwise, use a fixed position DIV to cover the viewport
499
+ bg.style.position = "fixed";
500
+ }
501
+ return div;
502
+ },
503
+ Resize: function () {setTimeout(MENU.SetWH,0)},
504
+ SetWH: function () {
505
+ var bg = document.getElementById("MathJax_MenuFrame");
506
+ if (bg) {
507
+ bg = bg.firstChild;
508
+ bg.style.width = bg.style.height = "1px"; // so scrollWidth/Height will be right below
509
+ bg.style.width = document.body.scrollWidth + "px";
510
+ bg.style.height = document.body.scrollHeight + "px";
511
+ }
512
+ },
513
+
514
+ /*************************************************************/
515
+ /*
516
+ * Keyboard navigation of menu.
517
+ */
518
+ posted: false, // Is a menu open?
519
+ active: null, // The focused in HTML node in the menu.
520
+
521
+ GetNode: function(jax) {
522
+ var node = document.getElementById(jax.inputID + "-Frame");
523
+ return node.isMathJax ? node : node.firstChild;
524
+ },
525
+ CurrentNode: function() {
526
+ return MENU.GetNode(MENU.jax);
527
+ },
528
+ AllNodes: function() {
529
+ var jaxs = MathJax.Hub.getAllJax();
530
+ var nodes = [];
531
+ for (var i = 0, jax; jax = jaxs[i]; i++) {
532
+ nodes.push(MENU.GetNode(jax));
533
+ }
534
+ return nodes;
535
+ },
536
+ ActiveNode: function() {
537
+ return MENU.active;
538
+ },
539
+ FocusNode: function(node) {
540
+ MENU.active = node;
541
+ node.focus();
542
+ },
543
+ //
544
+ // Focus is a global affair, since we only ever want a single focused item.
545
+ //
546
+ Focus: function(menu) {
547
+ !MENU.posted ? MENU.Activate(menu) : MENU.ActiveNode().tabIndex = -1;
548
+ menu.tabIndex = 0;
549
+ MENU.FocusNode(menu);
550
+ },
551
+ Activate: function(event, menu) {
552
+ MENU.UnsetTabIndex();
553
+ MENU.posted = true;
554
+ },
555
+ Unfocus: function() {
556
+ MENU.ActiveNode().tabIndex = -1;
557
+ MENU.SetTabIndex();
558
+ MENU.FocusNode(MENU.CurrentNode());
559
+ MENU.posted = false;
560
+ },
561
+ MoveHorizontal: function(event, menu, move) {
562
+ if (!event.shiftKey) return;
563
+ var jaxs = MENU.AllNodes();
564
+ var len = jaxs.length;
565
+ if (len === 0) return;
566
+ var next = jaxs[MENU.Mod(move(MENU.IndexOf(jaxs, MENU.CurrentNode())), len)];
567
+ if (next === MENU.CurrentNode()) return;
568
+ MENU.menu.Remove(event, menu);
569
+ MENU.jax = MathJax.Hub.getJaxFor(next);
570
+ MENU.FocusNode(next);
571
+ MENU.menu.Post(null);
572
+ },
573
+ Right: function(event, menu) {
574
+ MENU.MoveHorizontal(event, menu, function(x) {return x + 1;});
575
+ },
576
+ Left: function(event, menu) {
577
+ MENU.MoveHorizontal(event, menu, function(x) {return x - 1;});
578
+ },
579
+ UnsetTabIndex: function () {
580
+ var jaxs = MENU.AllNodes();
581
+ for (var j = 0, jax; jax = jaxs[j]; j++) {
582
+ if (jax.tabIndex > 0) {
583
+ jax.oldTabIndex = jax.tabIndex;
584
+ }
585
+ jax.tabIndex = -1;
586
+ }
587
+ },
588
+ SetTabIndex: function () {
589
+ var jaxs = MENU.AllNodes();
590
+ for (var j = 0, jax; jax = jaxs[j]; j++) {
591
+ if (jax.oldTabIndex !== undefined) {
592
+ jax.tabIndex = jax.oldTabIndex
593
+ delete jax.oldTabIndex;
594
+ } else {
595
+ jax.tabIndex = HUB.getTabOrder(jax);
596
+ }
597
+ }
598
+ },
599
+
600
+ //TODO: Move to utility class.
601
+ // Computes a mod n.
602
+ Mod: function(a, n) {
603
+ return ((a % n) + n) % n;
604
+ },
605
+ IndexOf: (Array.prototype.indexOf ?
606
+ function (A, item, start) {return A.indexOf(item, start);} :
607
+ function (A, item, start) {
608
+ for (var i = (start || 0), j = A.length; i < j; i++) {
609
+ if (item === A[i]) return i;
610
+ }
611
+ return -1;
612
+ }),
613
+
614
+ saveCookie: function () {HTML.Cookie.Set("menu",this.cookie)},
615
+ getCookie: function () {this.cookie = HTML.Cookie.Get("menu")}
616
+
617
+ });
618
+
619
+ MathJax.Menu.NAV = NAV;
620
+
621
+ /*************************************************************/
622
+ /*
623
+ * Abstract class of menu items.
624
+ */
625
+ var ITEM = MENU.ITEM = NAV.Subclass({
626
+
627
+ name: "", // The menu item's label as [id,label] pair.
628
+ node: null, // The HTML node of the item.
629
+ menu: null, // The parent menu containing that item. HTML node.
630
+
631
+ Attributes: function(def) {
632
+ return HUB.Insert(
633
+ {onmouseup: MENU.Mouseup,
634
+ ondragstart: FALSE, onselectstart: FALSE, onselectend: FALSE,
635
+ ontouchstart: MENU.Touchstart, ontouchend: MENU.Touchend,
636
+ className: "MathJax_MenuItem", role: this.role,
637
+ menuItem: this},
638
+ def);
639
+ },
640
+
641
+ Create: function (menu) {
642
+ if (!this.hidden) {
643
+ var def = this.Attributes();
644
+ var label = this.Label(def,menu);
645
+ HTML.addElement(menu, "div", def, label);
646
+ }
647
+ },
648
+ Name: function () {return _(this.name[0],this.name[1])},
649
+
650
+ Mouseover: function (event,menu) {
651
+ if (menu.parentNode === MENU.ActiveNode().parentNode) {
652
+ this.Deactivate(MENU.ActiveNode());
653
+ }
654
+ this.Activate(event, menu);
655
+ },
656
+ Mouseout: function (event,menu) {
657
+ this.Deactivate(menu);
658
+ },
659
+ Mouseup: function (event,menu) {return this.Remove(event,menu)},
660
+
661
+
662
+ DeactivateSubmenus: function(menu) {
663
+ var menus = document.getElementById("MathJax_MenuFrame").childNodes,
664
+ items = ITEM.GetMenuNode(menu).childNodes;
665
+ for (var i = 0, m = items.length; i < m; i++) {
666
+ var item = items[i].menuItem;
667
+ // Deactivates submenu items.
668
+ if (item && item.submenu && item.submenu.posted &&
669
+ item !== menu.menuItem) {
670
+ item.Deactivate(items[i]);
671
+ }
672
+ }
673
+ this.RemoveSubmenus(menu, menus);
674
+ },
675
+ RemoveSubmenus: function(menu, menus) {
676
+ menus = menus || document.getElementById("MathJax_MenuFrame").childNodes;
677
+ var m = menus.length-1;
678
+ while (m >= 0 && ITEM.GetMenuNode(menu).menuItem !== menus[m].menuItem) {
679
+ menus[m].menuItem.posted = false;
680
+ menus[m].parentNode.removeChild(menus[m]);
681
+ m--;
682
+ }
683
+ },
684
+
685
+ Touchstart: function (event,menu) {return this.TouchEvent(event,menu,"Mousedown")},
686
+ Touchend: function (event,menu) {return this.TouchEvent(event,menu,"Mouseup")},
687
+ TouchEvent: function (event,menu,type) {
688
+ if (this !== ITEM.lastItem) {
689
+ if (ITEM.lastMenu) {MENU.Event(event,ITEM.lastMenu,"Mouseout")}
690
+ MENU.Event(event,menu,"Mouseover",true);
691
+ ITEM.lastItem = this; ITEM.lastMenu = menu;
692
+ }
693
+ if (this.nativeTouch) {return null}
694
+ MENU.Event(event,menu,type);
695
+ return false;
696
+ },
697
+
698
+ Remove: function (event,menu) {
699
+ menu = menu.parentNode.menuItem;
700
+ return menu.Remove(event,menu);
701
+ },
702
+
703
+ With: function (def) {if (def) {HUB.Insert(this,def)}; return this},
704
+
705
+ isRTL: function () {return MENU.isRTL},
706
+ rtlClass: function () {return (this.isRTL() ? " RTL" : "")}
707
+ }, {
708
+ GetMenuNode: function(item) {
709
+ return item.parentNode;
710
+ }
711
+ });
712
+
713
+ /*************************************************************/
714
+ /*
715
+ * Abstract class of menu items that are focusable and perform some action
716
+ */
717
+ MENU.ENTRY = MENU.ITEM.Subclass({
718
+ role: "menuitem", // Aria role.
719
+
720
+ Attributes: function(def) {
721
+ def = HUB.Insert(
722
+ {onmouseover: MENU.Mouseover, onmouseout: MENU.Mouseout,
723
+ onmousedown: MENU.Mousedown, onkeydown: MENU.Keydown,
724
+ "aria-disabled": !!this.disabled},
725
+ def);
726
+ def = this.SUPER(arguments).Attributes.call(this, def);
727
+ if (this.disabled) {
728
+ def.className += " MathJax_MenuDisabled";
729
+ }
730
+ return def;
731
+ },
732
+ MoveVertical: function(event, item, move) {
733
+ var menuNode = ITEM.GetMenuNode(item);
734
+ var items = [];
735
+ for (var i = 0, allItems = menuNode.menuItem.items, it;
736
+ it = allItems[i]; i++) {
737
+ if (!it.hidden) {
738
+ items.push(it);
739
+ }
740
+ }
741
+ var index = MENU.IndexOf(items, this);
742
+ if (index === -1) return;
743
+ var len = items.length;
744
+ var children = menuNode.childNodes;
745
+ do {
746
+ index = MENU.Mod(move(index), len);
747
+ } while (items[index].hidden || !children[index].role ||
748
+ children[index].role === "separator");
749
+ this.Deactivate(item);
750
+ items[index].Activate(event, children[index]);
751
+ },
752
+ Up: function(event, item) {
753
+ this.MoveVertical(event, item, function(x) { return x - 1; });
754
+ },
755
+ Down: function(event, item) {
756
+ this.MoveVertical(event, item, function(x) { return x + 1; });
757
+ },
758
+ Right: function(event, item) {
759
+ this.MoveHorizontal(event, item, MENU.Right, !this.isRTL());
760
+ },
761
+ Left: function(event, item) {
762
+ this.MoveHorizontal(event, item, MENU.Left, this.isRTL());
763
+ },
764
+ MoveHorizontal: function(event, item, move, rtl) {
765
+ var menuNode = ITEM.GetMenuNode(item);
766
+ if (menuNode.menuItem === MENU.menu && event.shiftKey) {
767
+ move(event, item);
768
+ }
769
+ if (rtl) return;
770
+ if (menuNode.menuItem !== MENU.menu) {
771
+ this.Deactivate(item);
772
+ }
773
+ var parentNodes = menuNode.previousSibling.childNodes;
774
+ var length = parentNodes.length;
775
+ while (length--) {
776
+ var parent = parentNodes[length];
777
+ if (parent.menuItem.submenu &&
778
+ parent.menuItem.submenu === menuNode.menuItem) {
779
+ MENU.Focus(parent);
780
+ break;
781
+ }
782
+ }
783
+ this.RemoveSubmenus(item);
784
+ },
785
+ Space: function (event, menu) {
786
+ this.Mouseup(event, menu);
787
+ },
788
+
789
+ Activate: function (event, menu) {
790
+ this.Deactivate(menu);
791
+ if (!this.disabled) {
792
+ menu.className += " MathJax_MenuActive";
793
+ }
794
+ this.DeactivateSubmenus(menu);
795
+ MENU.Focus(menu);
796
+ },
797
+ Deactivate: function (menu) {
798
+ menu.className = menu.className.replace(/ MathJax_MenuActive/,"");
799
+ }
800
+
801
+ });
802
+
803
+ /*************************************************************/
804
+ /*
805
+ * A menu item that performs a command when selected
806
+ */
807
+ MENU.ITEM.COMMAND = MENU.ENTRY.Subclass({
808
+ action: function () {},
809
+
810
+ Init: function (name,action,def) {
811
+ if (!isArray(name)) {name = [name,name]} // make [id,label] pair
812
+ this.name = name; this.action = action;
813
+ this.With(def);
814
+ },
815
+
816
+ Label: function (def,menu) {return [this.Name()]},
817
+ Mouseup: function (event,menu) {
818
+ if (!this.disabled) {
819
+ this.Remove(event,menu);
820
+ SIGNAL.Post(["command",this]);
821
+ this.action.call(this,event);
822
+ }
823
+ return FALSE(event);
824
+ }
825
+ });
826
+
827
+ /*************************************************************/
828
+ /*
829
+ * A menu item that posts a submenu
830
+ */
831
+ MENU.ITEM.SUBMENU = MENU.ENTRY.Subclass({
832
+ submenu: null, // the submenu
833
+ marker: "\u25BA", // the submenu arrow
834
+ markerRTL: "\u25C4", // the submenu arrow for RTL
835
+
836
+ Attributes: function(def) {
837
+ def = HUB.Insert({"aria-haspopup": "true"}, def);
838
+ def = this.SUPER(arguments).Attributes.call(this, def);
839
+ return def;
840
+ },
841
+ Init: function (name,def) {
842
+ if (!isArray(name)) {name = [name,name]} // make [id,label] pair
843
+ this.name = name; var i = 1;
844
+ if (!(def instanceof MENU.ITEM)) {this.With(def), i++}
845
+ this.submenu = MENU.apply(MENU,[].slice.call(arguments,i));
846
+ },
847
+ Label: function (def,menu) {
848
+ this.submenu.posted = false;
849
+ return [this.Name()+" ",["span",{
850
+ className:"MathJax_MenuArrow" + this.rtlClass()
851
+ },[this.isRTL() ? this.markerRTL : this.marker]]];
852
+ },
853
+ Timer: function (event,menu) {
854
+ this.ClearTimer();
855
+ event = {type: event.type,
856
+ clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below
857
+ this.timer = setTimeout(CALLBACK(["Mouseup",this,event,menu]),CONFIG.delay);
858
+ },
859
+ ClearTimer: function() {
860
+ if (this.timer) {
861
+ clearTimeout(this.timer);
862
+ }
863
+ },
864
+ Touchend: function (event,menu) {
865
+ var forceout = this.submenu.posted;
866
+ var result = this.SUPER(arguments).Touchend.apply(this,arguments);
867
+ if (forceout) {this.Deactivate(menu); delete ITEM.lastItem; delete ITEM.lastMenu}
868
+ return result;
869
+ },
870
+ Mouseout: function(event, menu) {
871
+ if (!this.submenu.posted) {
872
+ this.Deactivate(menu);
873
+ }
874
+ this.ClearTimer();
875
+ },
876
+ Mouseover: function(event, menu) {
877
+ this.Activate(event, menu);
878
+ },
879
+ Mouseup: function (event,menu) {
880
+ if (!this.disabled) {
881
+ if (!this.submenu.posted) {
882
+ this.ClearTimer();
883
+ this.submenu.Post(event, menu, this.ltr);
884
+ MENU.Focus(menu);
885
+ } else {
886
+ this.DeactivateSubmenus(menu);
887
+ }
888
+ }
889
+ return FALSE(event);
890
+ },
891
+ Activate: function (event, menu) {
892
+ if (!this.disabled) {
893
+ this.Deactivate(menu);
894
+ menu.className += " MathJax_MenuActive";
895
+ }
896
+ if (!this.submenu.posted) {
897
+ this.DeactivateSubmenus(menu);
898
+ if (!MENU.isMobile) {
899
+ this.Timer(event,menu);
900
+ }
901
+ }
902
+ MENU.Focus(menu);
903
+ },
904
+ MoveVertical: function(event, item, move) {
905
+ this.ClearTimer();
906
+ this.SUPER(arguments).MoveVertical.apply(this, arguments);
907
+ },
908
+ MoveHorizontal: function(event, menu, move, rtl) {
909
+ if (!rtl) {
910
+ this.SUPER(arguments).MoveHorizontal.apply(this, arguments);
911
+ return;
912
+ }
913
+ if (this.disabled) return;
914
+ if (!this.submenu.posted) {
915
+ this.Activate(event, menu);
916
+ return;
917
+ }
918
+ var submenuNodes = ITEM.GetMenuNode(menu).nextSibling.childNodes;
919
+ if (submenuNodes.length > 0) {
920
+ this.submenu.items[0].Activate(event, submenuNodes[0]);
921
+ }
922
+ }
923
+ });
924
+
925
+ /*************************************************************/
926
+ /*
927
+ * A menu item that is one of several radio buttons
928
+ */
929
+ MENU.ITEM.RADIO = MENU.ENTRY.Subclass({
930
+ variable: null, // the variable name
931
+ marker: (isPC ? "\u25CF" : "\u2713"), // the checkmark
932
+ role: "menuitemradio",
933
+
934
+ Attributes: function(def) {
935
+ var checked = CONFIG.settings[this.variable] === this.value ? "true" : "false";
936
+ def = HUB.Insert({"aria-checked": checked}, def);
937
+ def = this.SUPER(arguments).Attributes.call(this, def);
938
+ return def;
939
+ },
940
+ Init: function (name,variable,def) {
941
+ if (!isArray(name)) {name = [name,name]} // make [id,label] pair
942
+ this.name = name; this.variable = variable; this.With(def);
943
+ if (this.value == null) {this.value = this.name[0]}
944
+ },
945
+ Label: function (def,menu) {
946
+ var span = {className:"MathJax_MenuRadioCheck" + this.rtlClass()};
947
+ if (CONFIG.settings[this.variable] !== this.value) {
948
+ span = {style:{display:"none"}};
949
+ }
950
+ return [["span",span,[this.marker]]," "+this.Name()];
951
+ },
952
+ Mouseup: function (event,menu) {
953
+ if (!this.disabled) {
954
+ var child = menu.parentNode.childNodes;
955
+ for (var i = 0, m = child.length; i < m; i++) {
956
+ var item = child[i].menuItem;
957
+ if (item && item.variable === this.variable) {
958
+ child[i].firstChild.style.display = "none";
959
+ }
960
+ }
961
+ menu.firstChild.display = "";
962
+ CONFIG.settings[this.variable] = this.value;
963
+ MENU.cookie[this.variable] = CONFIG.settings[this.variable]; MENU.saveCookie();
964
+ SIGNAL.Post(["radio button",this]);
965
+ }
966
+ this.Remove(event,menu);
967
+ if (this.action && !this.disabled) {this.action.call(MENU,this)}
968
+ return FALSE(event);
969
+ }
970
+ });
971
+
972
+ /*************************************************************/
973
+ /*
974
+ * A menu item that is checkable
975
+ */
976
+ MENU.ITEM.CHECKBOX = MENU.ENTRY.Subclass({
977
+ variable: null, // the variable name
978
+ marker: "\u2713", // the checkmark
979
+ role: "menuitemcheckbox",
980
+
981
+ Attributes: function(def) {
982
+ var checked = CONFIG.settings[this.variable] ? "true" : "false";
983
+ def = HUB.Insert({"aria-checked": checked}, def);
984
+ def = this.SUPER(arguments).Attributes.call(this, def);
985
+ return def;
986
+ },
987
+ Init: function (name,variable,def) {
988
+ if (!isArray(name)) {name = [name,name]} // make [id,label] pair
989
+ this.name = name; this.variable = variable; this.With(def);
990
+ },
991
+ Label: function (def,menu) {
992
+ var span = {className:"MathJax_MenuCheck" + this.rtlClass()};
993
+ if (!CONFIG.settings[this.variable]) {span = {style:{display:"none"}}}
994
+ return [["span",span,[this.marker]]," "+this.Name()];
995
+ },
996
+ Mouseup: function (event,menu) {
997
+ if (!this.disabled) {
998
+ menu.firstChild.display = (CONFIG.settings[this.variable] ? "none" : "");
999
+ CONFIG.settings[this.variable] = !CONFIG.settings[this.variable];
1000
+ MENU.cookie[this.variable] = CONFIG.settings[this.variable]; MENU.saveCookie();
1001
+ SIGNAL.Post(["checkbox",this]);
1002
+ }
1003
+ this.Remove(event,menu);
1004
+ if (this.action && !this.disabled) {this.action.call(MENU,this)}
1005
+ return FALSE(event);
1006
+ }
1007
+ });
1008
+
1009
+ /*************************************************************/
1010
+ /*
1011
+ * A menu item that is a label
1012
+ */
1013
+ MENU.ITEM.LABEL = MENU.ENTRY.Subclass({
1014
+ role: "menuitem", // Aria role.
1015
+
1016
+ Init: function (name,def) {
1017
+ if (!isArray(name)) {name = [name,name]} // make [id,label] pair
1018
+ this.name = name; this.With(def);
1019
+ },
1020
+ Label: function (def,menu) {
1021
+ def.className += " MathJax_MenuLabel";
1022
+ return [this.Name()];
1023
+ },
1024
+ Activate: function(event, menu) {
1025
+ this.Deactivate(menu);
1026
+ MENU.Focus(menu);
1027
+ },
1028
+ Mouseup: function (event,menu) { }
1029
+ });
1030
+
1031
+ /*************************************************************/
1032
+ /*
1033
+ * A rule in a menu
1034
+ */
1035
+ MENU.ITEM.RULE = MENU.ITEM.Subclass({
1036
+ role: "separator",
1037
+
1038
+ Attributes: function(def) {
1039
+ def = HUB.Insert({"aria-orientation": "vertical"}, def);
1040
+ def = this.SUPER(arguments).Attributes.call(this, def);
1041
+ return def;
1042
+ },
1043
+ Label: function (def,menu) {
1044
+ def.className += " MathJax_MenuRule";
1045
+ return null;
1046
+ }
1047
+ });
1048
+
1049
+ /*************************************************************/
1050
+ /*************************************************************/
1051
+
1052
+ /*
1053
+ * Handle the ABOUT box
1054
+ */
1055
+ MENU.About = function (event) {
1056
+ var font = MENU.About.GetFont();
1057
+ var format = MENU.About.GetFormat();
1058
+ var jax = ["MathJax.js v"+MathJax.fileversion,["br"]];
1059
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}]);
1060
+ MENU.About.GetJax(jax,MathJax.InputJax,["InputJax","%1 Input Jax v%2"]);
1061
+ MENU.About.GetJax(jax,MathJax.OutputJax,["OutputJax","%1 Output Jax v%2"]);
1062
+ MENU.About.GetJax(jax,MathJax.ElementJax,["ElementJax","%1 Element Jax v%2"]);
1063
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}]);
1064
+ MENU.About.GetJax(jax,MathJax.Extension,["Extension","%1 Extension v%2"],true);
1065
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}],["center",{},[
1066
+ HUB.Browser + " v"+HUB.Browser.version + (format ?
1067
+ " \u2014 " + _(format.replace(/ /g,""),format) : "")
1068
+ ]]);
1069
+ MENU.About.div = MENU.Background(MENU.About);
1070
+ var about = HTML.addElement(MENU.About.div,"div",{
1071
+ id: "MathJax_About", tabIndex: 0, onkeydown: MENU.About.Keydown
1072
+ },[
1073
+ ["b",{style:{fontSize:"120%"}},["MathJax"]]," v"+MathJax.version,["br"],
1074
+ _(font.replace(/ /g,""),"using "+font),["br"],["br"],
1075
+ ["span",{style:{
1076
+ display:"inline-block", "text-align":"left", "font-size":"80%",
1077
+ "max-height":"20em", overflow:"auto",
1078
+ "background-color":"#E4E4E4", padding:".4em .6em", border:"1px inset"
1079
+ }, tabIndex: 0},jax],["br"],["br"],
1080
+ ["a",{href:"http://www.mathjax.org/"},["www.mathjax.org"]],
1081
+ ["span",{className:"MathJax_MenuClose",id:"MathJax_AboutClose",
1082
+ onclick:MENU.About.Remove,
1083
+ onkeydown: MENU.About.Keydown, tabIndex: 0, role: "button",
1084
+ "aria-label": _("CloseAboutDialog","Close about MathJax dialog")},
1085
+ [["span",{},"\u00D7"]]]
1086
+ ]);
1087
+ if (event.type === "mouseup") about.className += " MathJax_MousePost";
1088
+ about.focus();
1089
+ MathJax.Localization.setCSS(about);
1090
+ var doc = (document.documentElement||{});
1091
+ var H = window.innerHeight || doc.clientHeight || doc.scrollHeight || 0;
1092
+ if (MENU.prototype.msieAboutBug) {
1093
+ about.style.width = "20em"; about.style.position = "absolute";
1094
+ about.style.left = Math.floor((document.documentElement.scrollWidth - about.offsetWidth)/2)+"px";
1095
+ about.style.top = (Math.floor((H-about.offsetHeight)/3)+document.body.scrollTop)+"px";
1096
+ } else {
1097
+ about.style.marginLeft = Math.floor(-about.offsetWidth/2)+"px";
1098
+ about.style.top = Math.floor((H-about.offsetHeight)/3)+"px";
1099
+ }
1100
+ };
1101
+ MENU.About.Remove = function (event) {
1102
+ if (MENU.About.div) {document.body.removeChild(MENU.About.div); delete MENU.About.div}
1103
+ };
1104
+ MENU.About.Keydown = function(event) {
1105
+ if (event.keyCode === KEY.ESCAPE ||
1106
+ (this.id === "MathJax_AboutClose" &&
1107
+ (event.keyCode === KEY.SPACE || event.keyCode === KEY.RETURN))) {
1108
+ MENU.About.Remove(event);
1109
+ MENU.CurrentNode().focus();
1110
+ FALSE(event);
1111
+ }
1112
+ },
1113
+ MENU.About.GetJax = function (jax,JAX,type,noTypeCheck) {
1114
+ var info = [];
1115
+ for (var id in JAX) {if (JAX.hasOwnProperty(id) && JAX[id]) {
1116
+ if ((noTypeCheck && JAX[id].version) || (JAX[id].isa && JAX[id].isa(JAX)))
1117
+ {info.push(_(type[0],type[1],(JAX[id].id||id),JAX[id].version))}
1118
+ }}
1119
+ info.sort();
1120
+ for (var i = 0, m = info.length; i < m; i++) {jax.push(info[i],["br"])}
1121
+ return jax;
1122
+ };
1123
+ MENU.About.GetFont = function () {
1124
+ var jax = MathJax.Hub.outputJax["jax/mml"][0] || {};
1125
+ var font = {
1126
+ SVG: "web SVG",
1127
+ CommonHTML: "web TeX",
1128
+ "HTML-CSS": (jax.imgFonts ? "image" : (jax.webFonts ? "web" : "local")+" "+jax.fontInUse)
1129
+ }[jax.id] || "generic";
1130
+ return font + " fonts";
1131
+ };
1132
+ MENU.About.GetFormat = function () {
1133
+ var jax = MathJax.Hub.outputJax["jax/mml"][0] || {};
1134
+ if (jax.id !== "HTML-CSS"|| !jax.webFonts || jax.imgFonts) return;
1135
+ return jax.allowWebFonts.replace(/otf/,"woff or otf") + " fonts";
1136
+ };
1137
+
1138
+
1139
+ /*
1140
+ * Handle the MathJax HELP menu
1141
+ */
1142
+ MENU.Help = function (event) {
1143
+ AJAX.Require("[MathJax]/extensions/HelpDialog.js",
1144
+ function () {MathJax.Extension.Help.Dialog({type:event.type})});
1145
+ };
1146
+
1147
+ /*
1148
+ * Handle showing of element's source
1149
+ */
1150
+ MENU.ShowSource = function (event) {
1151
+ if (!event) {event = window.event}
1152
+ var EVENT = {screenX:event.screenX, screenY:event.screenY};
1153
+ if (!MENU.jax) return;
1154
+ if (this.format === "MathML") {
1155
+ var MML = MathJax.ElementJax.mml;
1156
+ if (MML && typeof(MML.mbase.prototype.toMathML) !== "undefined") {
1157
+ // toMathML() can call MathJax.Hub.RestartAfter, so trap errors and check
1158
+ try {MENU.ShowSource.Text(MENU.jax.root.toMathML("",MENU.jax),event)} catch (err) {
1159
+ if (!err.restart) {throw err}
1160
+ CALLBACK.After([this,MENU.ShowSource,EVENT],err.restart);
1161
+ }
1162
+ } else if (!AJAX.loadingToMathML) {
1163
+ AJAX.loadingToMathML = true;
1164
+ MENU.ShowSource.Window(event); // WeBKit needs to open window on click event
1165
+ CALLBACK.Queue(
1166
+ AJAX.Require("[MathJax]/extensions/toMathML.js"),
1167
+ function () {
1168
+ delete AJAX.loadingToMathML;
1169
+ if (!MML.mbase.prototype.toMathML) {MML.mbase.prototype.toMathML = function () {}}
1170
+ },
1171
+ [this,MENU.ShowSource,EVENT] // call this function again
1172
+ );
1173
+ return;
1174
+ }
1175
+ } else if (this.format === "Error") {
1176
+ MENU.ShowSource.Text(MENU.jax.errorText,event);
1177
+ } else if (CONFIG.semanticsAnnotations[this.format]) {
1178
+ var annotation = MENU.jax.root.getAnnotation(this.format);
1179
+ if (annotation.data[0]) MENU.ShowSource.Text(annotation.data[0].toString());
1180
+ } else {
1181
+ if (MENU.jax.originalText == null) {
1182
+ alert(_("NoOriginalForm","No original form available"));
1183
+ return;
1184
+ }
1185
+ MENU.ShowSource.Text(MENU.jax.originalText,event);
1186
+ }
1187
+ };
1188
+ MENU.ShowSource.Window = function (event) {
1189
+ if (!MENU.ShowSource.w) {
1190
+ var def = [], DEF = CONFIG.windowSettings;
1191
+ for (var id in DEF) {if (DEF.hasOwnProperty(id)) {def.push(id+"="+DEF[id])}}
1192
+ MENU.ShowSource.w = window.open("","_blank",def.join(","));
1193
+ }
1194
+ return MENU.ShowSource.w;
1195
+ };
1196
+ MENU.ShowSource.Text = function (text,event) {
1197
+ var w = MENU.ShowSource.Window(event); delete MENU.ShowSource.w;
1198
+ text = text.replace(/^\s*/,"").replace(/\s*$/,"");
1199
+ text = text.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
1200
+ var title = _("EqSource","MathJax Equation Source");
1201
+ if (MENU.isMobile) {
1202
+ w.document.open();
1203
+ w.document.write("<html><head><meta name='viewport' content='width=device-width, initial-scale=1.0' /><title>"+title+"</title></head><body style='font-size:85%'>");
1204
+ w.document.write("<pre>"+text+"</pre>");
1205
+ w.document.write("<hr><input type='button' value='"+_("Close","Close")+"' onclick='window.close()' />");
1206
+ w.document.write("</body></html>");
1207
+ w.document.close();
1208
+ } else {
1209
+ w.document.open();
1210
+ w.document.write("<html><head><title>"+title+"</title></head><body style='font-size:85%'>");
1211
+ w.document.write("<table><tr><td><pre>"+text+"</pre></td></tr></table>");
1212
+ w.document.write("</body></html>");
1213
+ w.document.close();
1214
+ var table = w.document.body.firstChild;
1215
+ setTimeout(function () {
1216
+ var H = (w.outerHeight-w.innerHeight)||30, W = (w.outerWidth-w.innerWidth)||30, x, y;
1217
+ W = Math.max(140,Math.min(Math.floor(.5*screen.width),table.offsetWidth+W+25));
1218
+ H = Math.max(40,Math.min(Math.floor(.5*screen.height),table.offsetHeight+H+25));
1219
+ if (MENU.prototype.msieHeightBug) {H += 35}; // for title bar in XP
1220
+ w.resizeTo(W,H);
1221
+ var X; try {X = event.screenX} catch (e) {}; // IE8 throws an error accessing screenX
1222
+ if (event && X != null) {
1223
+ x = Math.max(0,Math.min(event.screenX-Math.floor(W/2), screen.width-W-20));
1224
+ y = Math.max(0,Math.min(event.screenY-Math.floor(H/2), screen.height-H-20));
1225
+ w.moveTo(x,y);
1226
+ }
1227
+ },50);
1228
+ }
1229
+ };
1230
+
1231
+ /*
1232
+ * Handle rescaling all the math
1233
+ */
1234
+ MENU.Scale = function () {
1235
+ var JAX = ["CommonHTML","HTML-CSS","SVG","NativeMML","PreviewHTML"], m = JAX.length,
1236
+ SCALE = 100, i, jax;
1237
+ for (i = 0; i < m; i++) {
1238
+ jax = OUTPUT[JAX[i]];
1239
+ if (jax) {SCALE = jax.config.scale; break}
1240
+ }
1241
+ var scale = prompt(_("ScaleMath","Scale all mathematics (compared to surrounding text) by"),SCALE+"%");
1242
+ if (scale) {
1243
+ if (scale.match(/^\s*\d+(\.\d*)?\s*%?\s*$/)) {
1244
+ scale = parseFloat(scale);
1245
+ if (scale) {
1246
+ if (scale !== SCALE) {
1247
+ for (i = 0; i < m; i++) {
1248
+ jax = OUTPUT[JAX[i]];
1249
+ if (jax) jax.config.scale = scale;
1250
+ }
1251
+ MENU.cookie.scale = HUB.config.scale = scale;
1252
+ MENU.saveCookie();
1253
+ HUB.Queue(["Rerender",HUB]);
1254
+ }
1255
+ } else {alert(_("NonZeroScale","The scale should not be zero"))}
1256
+ } else {alert(_("PercentScale",
1257
+ "The scale should be a percentage (e.g., 120%%)"))}
1258
+ }
1259
+ };
1260
+
1261
+ /*
1262
+ * Handle loading the zoom code
1263
+ */
1264
+ MENU.Zoom = function () {
1265
+ if (!MathJax.Extension.MathZoom) {AJAX.Require("[MathJax]/extensions/MathZoom.js")}
1266
+ };
1267
+
1268
+ /*
1269
+ * Handle changing the renderer
1270
+ */
1271
+ MENU.Renderer = function () {
1272
+ var jax = HUB.outputJax["jax/mml"];
1273
+ if (jax[0] !== CONFIG.settings.renderer) {
1274
+ var BROWSER = HUB.Browser, message, MESSAGE = MENU.Renderer.Messages, warned;
1275
+ //
1276
+ // Check that the new renderer is appropriate for the browser
1277
+ //
1278
+ switch (CONFIG.settings.renderer) {
1279
+ case "NativeMML":
1280
+ if (!CONFIG.settings.warnedMML) {
1281
+ if (BROWSER.isChrome && BROWSER.version.substr(0,3) !== "24.") {message = MESSAGE.MML.WebKit}
1282
+ else if (BROWSER.isSafari && !BROWSER.versionAtLeast("5.0")) {message = MESSAGE.MML.WebKit}
1283
+ else if (BROWSER.isMSIE) {if (!BROWSER.hasMathPlayer) {message = MESSAGE.MML.MSIE}}
1284
+ else if (BROWSER.isEdge) {message = MESSAGE.MML.WebKit}
1285
+ else {message = MESSAGE.MML[BROWSER]}
1286
+ warned = "warnedMML";
1287
+ }
1288
+ break;
1289
+
1290
+ case "SVG":
1291
+ if (!CONFIG.settings.warnedSVG) {
1292
+ if (BROWSER.isMSIE && !isIE9) {message = MESSAGE.SVG.MSIE}
1293
+ }
1294
+ break;
1295
+ }
1296
+ if (message) {
1297
+ message = _(message[0],message[1]);
1298
+ message += "\n\n";
1299
+ message += _("SwitchAnyway",
1300
+ "Switch the renderer anyway?\n\n" +
1301
+ "(Press OK to switch, CANCEL to continue with the current renderer)");
1302
+ MENU.cookie.renderer = jax[0].id; MENU.saveCookie();
1303
+ if (!confirm(message)) {
1304
+ MENU.cookie.renderer = CONFIG.settings.renderer = HTML.Cookie.Get("menu").renderer;
1305
+ MENU.saveCookie();
1306
+ return;
1307
+ }
1308
+ if (warned) {MENU.cookie.warned = CONFIG.settings.warned = true}
1309
+ MENU.cookie.renderer = CONFIG.settings.renderer; MENU.saveCookie();
1310
+ }
1311
+ HUB.Queue(
1312
+ ["setRenderer",HUB,CONFIG.settings.renderer,"jax/mml"],
1313
+ ["Rerender",HUB]
1314
+ );
1315
+ }
1316
+ };
1317
+ MENU.Renderer.Messages = {
1318
+ MML: {
1319
+ WebKit: ["WebkitNativeMMLWarning",
1320
+ "Your browser doesn't seem to support MathML natively, " +
1321
+ "so switching to MathML output may cause the mathematics " +
1322
+ "on the page to become unreadable."],
1323
+
1324
+ MSIE: ["MSIENativeMMLWarning",
1325
+ "Internet Explorer requires the MathPlayer plugin " +
1326
+ "in order to process MathML output."],
1327
+
1328
+ Opera: ["OperaNativeMMLWarning",
1329
+ "Opera's support for MathML is limited, so switching to " +
1330
+ "MathML output may cause some expressions to render poorly."],
1331
+
1332
+ Safari: ["SafariNativeMMLWarning",
1333
+ "Your browser's native MathML does not implement all the features " +
1334
+ "used by MathJax, so some expressions may not render properly."],
1335
+
1336
+ Firefox: ["FirefoxNativeMMLWarning",
1337
+ "Your browser's native MathML does not implement all the features " +
1338
+ "used by MathJax, so some expressions may not render properly."]
1339
+ },
1340
+
1341
+ SVG: {
1342
+ MSIE: ["MSIESVGWarning",
1343
+ "SVG is not implemented in Internet Explorer prior to " +
1344
+ "IE9 or when it is emulating IE8 or below. " +
1345
+ "Switching to SVG output will cause the mathematics to " +
1346
+ "not display properly."]
1347
+ }
1348
+ };
1349
+
1350
+ /*
1351
+ * Toggle assistive MML settings
1352
+ */
1353
+ MENU.AssistiveMML = function (item,restart) {
1354
+ var AMML = MathJax.Extension.AssistiveMML;
1355
+ if (!AMML) {
1356
+ // Try to load the extension, but only try once.
1357
+ if (!restart)
1358
+ AJAX.Require("[MathJax]/extensions/AssistiveMML.js",["AssistiveMML",MENU,item,true]);
1359
+ return;
1360
+ }
1361
+ MathJax.Hub.Queue([(CONFIG.settings.assistiveMML ? "Add" : "Remove")+"AssistiveMathML",AMML]);
1362
+ };
1363
+
1364
+ /*
1365
+ * Handle setting the HTMLCSS fonts
1366
+ */
1367
+ MENU.Font = function () {
1368
+ var HTMLCSS = OUTPUT["HTML-CSS"]; if (!HTMLCSS) return;
1369
+ document.location.reload();
1370
+ };
1371
+
1372
+ /*
1373
+ * Handle selection of locale and rerender the page
1374
+ */
1375
+ MENU.Locale = function () {
1376
+ MathJax.Localization.setLocale(CONFIG.settings.locale);
1377
+ MathJax.Hub.Queue(["Reprocess",MathJax.Hub]); // FIXME: Just reprocess error messages?
1378
+ };
1379
+ MENU.LoadLocale = function () {
1380
+ var url = prompt(_("LoadURL","Load translation data from this URL:"));
1381
+ if (url) {
1382
+ if (!url.match(/\.js$/)) {
1383
+ alert(_("BadURL",
1384
+ "The URL should be for a javascript file that defines MathJax translation data. " +
1385
+ "Javascript file names should end with '.js'"
1386
+ ));
1387
+ }
1388
+ AJAX.Require(url,function (status) {
1389
+ if (status != AJAX.STATUS.OK) {alert(_("BadData","Failed to load translation data from %1",url))}
1390
+ });
1391
+ }
1392
+ };
1393
+
1394
+ /*
1395
+ * Handle setting MathPlayer events
1396
+ */
1397
+ MENU.MPEvents = function (item) {
1398
+ var discoverable = CONFIG.settings.discoverable,
1399
+ MESSAGE = MENU.MPEvents.Messages;
1400
+ if (!isIE9) {
1401
+ if (CONFIG.settings.mpMouse && !confirm(_.apply(_,MESSAGE.IE8warning))) {
1402
+ delete MENU.cookie.mpContext; delete CONFIG.settings.mpContext;
1403
+ delete MENU.cookie.mpMouse; delete CONFIG.settings.mpMouse;
1404
+ MENU.saveCookie();
1405
+ return;
1406
+ }
1407
+ CONFIG.settings.mpContext = CONFIG.settings.mpMouse;
1408
+ MENU.cookie.mpContext = MENU.cookie.mpMouse = CONFIG.settings.mpMouse;
1409
+ MENU.saveCookie();
1410
+ MathJax.Hub.Queue(["Rerender",MathJax.Hub])
1411
+ } else if (!discoverable && item.name[1] === "Menu Events" && CONFIG.settings.mpContext) {
1412
+ alert(_.apply(_,MESSAGE.IE9warning));
1413
+ }
1414
+ };
1415
+
1416
+ MENU.MPEvents.Messages = {
1417
+ IE8warning: ["IE8warning",
1418
+ "This will disable the MathJax menu and zoom features, " +
1419
+ "but you can Alt-Click on an expression to obtain the MathJax " +
1420
+ "menu instead.\n\nReally change the MathPlayer settings?"],
1421
+
1422
+ IE9warning: ["IE9warning",
1423
+ "The MathJax contextual menu will be disabled, but you can " +
1424
+ "Alt-Click on an expression to obtain the MathJax menu instead."]
1425
+ };
1426
+
1427
+ /*************************************************************/
1428
+ /*************************************************************/
1429
+
1430
+ HUB.Browser.Select({
1431
+ MSIE: function (browser) {
1432
+ var quirks = (document.compatMode === "BackCompat");
1433
+ var isIE8 = browser.versionAtLeast("8.0") && document.documentMode > 7;
1434
+ MENU.Augment({
1435
+ margin: 20,
1436
+ msieBackgroundBug: ((document.documentMode||0) < 9),
1437
+ msieFixedPositionBug: (quirks || !isIE8),
1438
+ msieAboutBug: quirks,
1439
+ msieHeightBug: ((document.documentMode||0) < 9)
1440
+ // height of window doesn't include title bar in XP
1441
+ });
1442
+ if (isIE9) {
1443
+ delete CONFIG.styles["#MathJax_About"].filter;
1444
+ delete CONFIG.styles[".MathJax_Menu"].filter;
1445
+ }
1446
+ },
1447
+ Firefox: function (browser) {
1448
+ MENU.skipMouseover = browser.isMobile && browser.versionAtLeast("6.0");
1449
+ MENU.skipMousedown = browser.isMobile;
1450
+ }
1451
+ });
1452
+ MENU.isMobile = HUB.Browser.isMobile;
1453
+ MENU.noContextMenu = HUB.Browser.noContextMenu;
1454
+
1455
+ /*************************************************************/
1456
+
1457
+ //
1458
+ // Creates the locale menu from the list of locales in MathJax.Localization.strings
1459
+ //
1460
+ MENU.CreateLocaleMenu = function () {
1461
+ if (!MENU.menu) return;
1462
+ var menu = MENU.menu.Find("Language").submenu, items = menu.items;
1463
+ //
1464
+ // Get the names of the languages and sort them
1465
+ //
1466
+ var locales = [], LOCALE = MathJax.Localization.strings;
1467
+ for (var id in LOCALE) {if (LOCALE.hasOwnProperty(id)) {locales.push(id)}}
1468
+ locales = locales.sort(); menu.items = [];
1469
+ //
1470
+ // Add a menu item for each
1471
+ //
1472
+ for (var i = 0, m = locales.length; i < m; i++) {
1473
+ var title = LOCALE[locales[i]].menuTitle;
1474
+ if (title) {title += " ("+locales[i]+")"} else {title = locales[i]}
1475
+ menu.items.push(ITEM.RADIO([locales[i],title],"locale",{action:MENU.Locale}));
1476
+ }
1477
+ //
1478
+ // Add the rule and "Load from URL" items
1479
+ //
1480
+ menu.items.push(items[items.length-2],items[items.length-1]);
1481
+ };
1482
+
1483
+ //
1484
+ // Create the annotation menu from MathJax.Hub.config.semanticsAnnotations
1485
+ //
1486
+ MENU.CreateAnnotationMenu = function () {
1487
+ if (!MENU.menu) return;
1488
+ var menu = MENU.menu.Find("Show Math As","Annotation").submenu;
1489
+ var annotations = CONFIG.semanticsAnnotations;
1490
+ for (var a in annotations) {
1491
+ if (annotations.hasOwnProperty(a)) {
1492
+ menu.items.push(ITEM.COMMAND([a,a], MENU.ShowSource, {hidden: true, nativeTouch: true, format: a}));
1493
+ }
1494
+ }
1495
+ };
1496
+
1497
+ /*************************************************************/
1498
+
1499
+ HUB.Register.StartupHook("End Config",function () {
1500
+
1501
+ /*
1502
+ * Get the menu settings from the HUB (which includes the
1503
+ * data from the cookie already), and add the format, if
1504
+ * it wasn't set in the cookie.
1505
+ */
1506
+ CONFIG.settings = HUB.config.menuSettings;
1507
+ if (typeof(CONFIG.settings.showRenderer) !== "undefined") {CONFIG.showRenderer = CONFIG.settings.showRenderer}
1508
+ if (typeof(CONFIG.settings.showFontMenu) !== "undefined") {CONFIG.showFontMenu = CONFIG.settings.showFontMenu}
1509
+ if (typeof(CONFIG.settings.showContext) !== "undefined") {CONFIG.showContext = CONFIG.settings.showContext}
1510
+ MENU.getCookie();
1511
+
1512
+ /*
1513
+ * The main menu
1514
+ */
1515
+ // Localization: items used as key, should be refactored.
1516
+ MENU.menu = MENU(
1517
+ ITEM.SUBMENU(["Show","Show Math As"],
1518
+ ITEM.COMMAND(["MathMLcode","MathML Code"], MENU.ShowSource, {nativeTouch: true, format: "MathML"}),
1519
+ ITEM.COMMAND(["Original","Original Form"], MENU.ShowSource, {nativeTouch: true}),
1520
+ ITEM.SUBMENU(["Annotation","Annotation"], {disabled:true}),
1521
+ ITEM.RULE(),
1522
+ ITEM.CHECKBOX(["texHints","Show TeX hints in MathML"], "texHints"),
1523
+ ITEM.CHECKBOX(["semantics","Add original form as annotation"], "semantics")
1524
+ ),
1525
+ ITEM.RULE(),
1526
+ ITEM.SUBMENU(["Settings","Math Settings"],
1527
+ ITEM.SUBMENU(["ZoomTrigger","Zoom Trigger"],
1528
+ ITEM.RADIO(["Hover","Hover"], "zoom", {action: MENU.Zoom}),
1529
+ ITEM.RADIO(["Click","Click"], "zoom", {action: MENU.Zoom}),
1530
+ ITEM.RADIO(["DoubleClick","Double-Click"], "zoom", {action: MENU.Zoom}),
1531
+ ITEM.RADIO(["NoZoom","No Zoom"], "zoom", {value: "None"}),
1532
+ ITEM.RULE(),
1533
+ ITEM.LABEL(["TriggerRequires","Trigger Requires:"]),
1534
+ ITEM.CHECKBOX((HUB.Browser.isMac ? ["Option","Option"] : ["Alt","Alt"]), "ALT"),
1535
+ ITEM.CHECKBOX(["Command","Command"], "CMD", {hidden: !HUB.Browser.isMac}),
1536
+ ITEM.CHECKBOX(["Control","Control"], "CTRL", {hidden: HUB.Browser.isMac}),
1537
+ ITEM.CHECKBOX(["Shift","Shift"], "Shift")
1538
+ ),
1539
+ ITEM.SUBMENU(["ZoomFactor","Zoom Factor"],
1540
+ ITEM.RADIO("125%", "zscale"),
1541
+ ITEM.RADIO("133%", "zscale"),
1542
+ ITEM.RADIO("150%", "zscale"),
1543
+ ITEM.RADIO("175%", "zscale"),
1544
+ ITEM.RADIO("200%", "zscale"),
1545
+ ITEM.RADIO("250%", "zscale"),
1546
+ ITEM.RADIO("300%", "zscale"),
1547
+ ITEM.RADIO("400%", "zscale")
1548
+ ),
1549
+ ITEM.RULE(),
1550
+ ITEM.SUBMENU(["Renderer","Math Renderer"], {hidden:!CONFIG.showRenderer},
1551
+ ITEM.RADIO(["HTML-CSS","HTML-CSS"], "renderer", {action: MENU.Renderer}),
1552
+ ITEM.RADIO(["CommonHTML","Common HTML"], "renderer", {action: MENU.Renderer, value:"CommonHTML"}),
1553
+ ITEM.RADIO(["PreviewHTML","Preview HTML"],"renderer", {action: MENU.Renderer, value:"PreviewHTML"}),
1554
+ ITEM.RADIO(["MathML","MathML"], "renderer", {action: MENU.Renderer, value:"NativeMML"}),
1555
+ ITEM.RADIO(["SVG","SVG"], "renderer", {action: MENU.Renderer}),
1556
+ ITEM.RADIO(["PlainSource","Plain Source"],"renderer", {action: MENU.Renderer, value:"PlainSource"}),
1557
+ ITEM.RULE(),
1558
+ ITEM.CHECKBOX(["FastPreview","Fast Preview"], "FastPreview")
1559
+ ),
1560
+ ITEM.SUBMENU("MathPlayer", {hidden:!HUB.Browser.isMSIE || !CONFIG.showMathPlayer,
1561
+ disabled:!HUB.Browser.hasMathPlayer},
1562
+ ITEM.LABEL(["MPHandles","Let MathPlayer Handle:"]),
1563
+ ITEM.CHECKBOX(["MenuEvents","Menu Events"], "mpContext", {action: MENU.MPEvents, hidden:!isIE9}),
1564
+ ITEM.CHECKBOX(["MouseEvents","Mouse Events"], "mpMouse", {action: MENU.MPEvents, hidden:!isIE9}),
1565
+ ITEM.CHECKBOX(["MenuAndMouse","Mouse and Menu Events"], "mpMouse", {action: MENU.MPEvents, hidden:isIE9})
1566
+ ),
1567
+ ITEM.SUBMENU(["FontPrefs","Font Preference"], {hidden:!CONFIG.showFontMenu},
1568
+ ITEM.LABEL(["ForHTMLCSS","For HTML-CSS:"]),
1569
+ ITEM.RADIO(["Auto","Auto"], "font", {action: MENU.Font}),
1570
+ ITEM.RULE(),
1571
+ ITEM.RADIO(["TeXLocal","TeX (local)"], "font", {action: MENU.Font}),
1572
+ ITEM.RADIO(["TeXWeb","TeX (web)"], "font", {action: MENU.Font}),
1573
+ ITEM.RADIO(["TeXImage","TeX (image)"], "font", {action: MENU.Font}),
1574
+ ITEM.RULE(),
1575
+ ITEM.RADIO(["STIXLocal","STIX (local)"], "font", {action: MENU.Font}),
1576
+ ITEM.RADIO(["STIXWeb","STIX (web)"], "font", {action: MENU.Font}),
1577
+ ITEM.RULE(),
1578
+ ITEM.RADIO(["AsanaMathWeb","Asana Math (web)"], "font", {action: MENU.Font}),
1579
+ ITEM.RADIO(["GyrePagellaWeb","Gyre Pagella (web)"], "font", {action: MENU.Font}),
1580
+ ITEM.RADIO(["GyreTermesWeb","Gyre Termes (web)"], "font", {action: MENU.Font}),
1581
+ ITEM.RADIO(["LatinModernWeb","Latin Modern (web)"], "font", {action: MENU.Font}),
1582
+ ITEM.RADIO(["NeoEulerWeb","Neo Euler (web)"], "font", {action: MENU.Font})
1583
+ ),
1584
+ ITEM.SUBMENU(["ContextMenu","Contextual Menu"], {hidden:!CONFIG.showContext},
1585
+ ITEM.RADIO(["MathJax","MathJax"], "context"),
1586
+ ITEM.RADIO(["Browser","Browser"], "context")
1587
+ ),
1588
+ ITEM.COMMAND(["Scale","Scale All Math ..."],MENU.Scale),
1589
+ ITEM.RULE().With({hidden:!CONFIG.showDiscoverable, name:["","discover_rule"]}),
1590
+ ITEM.CHECKBOX(["Discoverable","Highlight on Hover"], "discoverable", {hidden:!CONFIG.showDiscoverable})
1591
+ ),
1592
+ ITEM.SUBMENU(["Accessibility","Accessibility"],
1593
+ ITEM.CHECKBOX(["AssistiveMML","Assistive MathML"], "assistiveMML", {action:MENU.AssistiveMML}),
1594
+ ITEM.CHECKBOX(["InTabOrder","Include in Tab Order"], "inTabOrder")
1595
+ ),
1596
+ ITEM.SUBMENU(["Locale","Language"], {hidden:!CONFIG.showLocale, ltr:true},
1597
+ ITEM.RADIO("en", "locale", {action: MENU.Locale}),
1598
+ ITEM.RULE().With({hidden:!CONFIG.showLocaleURL, name:["","localURL_rule"]}),
1599
+ ITEM.COMMAND(["LoadLocale","Load from URL ..."], MENU.LoadLocale, {hidden:!CONFIG.showLocaleURL})
1600
+ ),
1601
+ ITEM.RULE(),
1602
+ ITEM.COMMAND(["About","About MathJax"],MENU.About),
1603
+ ITEM.COMMAND(["Help","MathJax Help"],MENU.Help)
1604
+ );
1605
+
1606
+ if (MENU.isMobile) {
1607
+ (function () {
1608
+ var settings = CONFIG.settings;
1609
+ var trigger = MENU.menu.Find("Math Settings","Zoom Trigger").submenu;
1610
+ trigger.items[0].disabled = trigger.items[1].disabled = true;
1611
+ if (settings.zoom === "Hover" || settings.zoom == "Click") {settings.zoom = "None"}
1612
+ trigger.items = trigger.items.slice(0,4);
1613
+
1614
+ if (navigator.appVersion.match(/[ (]Android[) ]/)) {
1615
+ MENU.ITEM.SUBMENU.Augment({marker: "\u00BB"});
1616
+ }
1617
+ })();
1618
+ }
1619
+
1620
+ MENU.CreateLocaleMenu();
1621
+ MENU.CreateAnnotationMenu();
1622
+ });
1623
+
1624
+ MENU.showRenderer = function (show) {
1625
+ MENU.cookie.showRenderer = CONFIG.showRenderer = show; MENU.saveCookie();
1626
+ MENU.menu.Find("Math Settings","Math Renderer").hidden = !show;
1627
+ };
1628
+ MENU.showMathPlayer = function (show) {
1629
+ MENU.cookie.showMathPlayer = CONFIG.showMathPlayer = show; MENU.saveCookie();
1630
+ MENU.menu.Find("Math Settings","MathPlayer").hidden = !show;
1631
+ };
1632
+ MENU.showFontMenu = function (show) {
1633
+ MENU.cookie.showFontMenu = CONFIG.showFontMenu = show; MENU.saveCookie();
1634
+ MENU.menu.Find("Math Settings","Font Preference").hidden = !show;
1635
+ };
1636
+ MENU.showContext = function (show) {
1637
+ MENU.cookie.showContext = CONFIG.showContext = show; MENU.saveCookie();
1638
+ MENU.menu.Find("Math Settings","Contextual Menu").hidden = !show;
1639
+ };
1640
+ MENU.showDiscoverable = function (show) {
1641
+ MENU.cookie.showDiscoverable = CONFIG.showDiscoverable = show; MENU.saveCookie();
1642
+ MENU.menu.Find("Math Settings","Highlight on Hover").hidden = !show;
1643
+ MENU.menu.Find("Math Settings","discover_rule").hidden = !show;
1644
+ };
1645
+ MENU.showLocale = function (show) {
1646
+ MENU.cookie.showLocale = CONFIG.showLocale = show; MENU.saveCookie();
1647
+ MENU.menu.Find("Language").hidden = !show;
1648
+ };
1649
+
1650
+ MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready",function () {
1651
+ if (!MathJax.OutputJax["HTML-CSS"].config.imageFont)
1652
+ {MENU.menu.Find("Math Settings","Font Preference","TeX (image)").disabled = true}
1653
+ });
1654
+
1655
+ /*************************************************************/
1656
+
1657
+ CALLBACK.Queue(
1658
+ HUB.Register.StartupHook("End Config",{}), // wait until config is complete
1659
+ ["Styles",AJAX,CONFIG.styles],
1660
+ ["Post",HUB.Startup.signal,"MathMenu Ready"],
1661
+ ["loadComplete",AJAX,"[MathJax]/extensions/MathMenu.js"]
1662
+ );
1663
+
1664
+ })(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.CallBack,MathJax.OutputJax);
vendor/MathJax/extensions/MathZoom.js ADDED
@@ -0,0 +1,366 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/MathZoom.js
7
+ *
8
+ * Implements the zoom feature for enlarging math expressions. It is
9
+ * loaded automatically when the Zoom menu selection changes from "None".
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2010-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ (function (HUB,HTML,AJAX,HTMLCSS,nMML) {
29
+ var VERSION = "2.7.5";
30
+
31
+ var CONFIG = HUB.CombineConfig("MathZoom",{
32
+ styles: {
33
+ //
34
+ // The styles for the MathZoom display box
35
+ //
36
+ "#MathJax_Zoom": {
37
+ position:"absolute", "background-color":"#F0F0F0", overflow:"auto",
38
+ display:"block", "z-index":301, padding:".5em", border:"1px solid black", margin:0,
39
+ "font-weight":"normal", "font-style":"normal",
40
+ "text-align":"left", "text-indent":0, "text-transform":"none",
41
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
42
+ "word-wrap":"normal", "white-space":"nowrap", "float":"none",
43
+ "-webkit-box-sizing":"content-box", // Android ≤ 2.3, iOS ≤ 4
44
+ "-moz-box-sizing":"content-box", // Firefox ≤ 28
45
+ "box-sizing":"content-box", // Chrome, Firefox 29+, IE 8+, Opera, Safari 5.1
46
+ "box-shadow":"5px 5px 15px #AAAAAA", // Opera 10.5 and IE9
47
+ "-webkit-box-shadow":"5px 5px 15px #AAAAAA", // Safari 3 and Chrome
48
+ "-moz-box-shadow":"5px 5px 15px #AAAAAA", // Forefox 3.5
49
+ "-khtml-box-shadow":"5px 5px 15px #AAAAAA", // Konqueror
50
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
51
+ },
52
+
53
+ //
54
+ // The styles for the hidden overlay (should not need to be adjusted by the page author)
55
+ //
56
+ "#MathJax_ZoomOverlay": {
57
+ position:"absolute", left:0, top:0, "z-index":300, display:"inline-block",
58
+ width:"100%", height:"100%", border:0, padding:0, margin:0,
59
+ "background-color":"white", opacity:0, filter:"alpha(opacity=0)"
60
+ },
61
+
62
+ "#MathJax_ZoomFrame": {
63
+ position:"relative", display:"inline-block",
64
+ height:0, width:0
65
+ },
66
+
67
+ "#MathJax_ZoomEventTrap": {
68
+ position:"absolute", left:0, top:0, "z-index":302,
69
+ display:"inline-block", border:0, padding:0, margin:0,
70
+ "background-color":"white", opacity:0, filter:"alpha(opacity=0)"
71
+ }
72
+ }
73
+ });
74
+
75
+ var FALSE, HOVER, EVENT;
76
+ MathJax.Hub.Register.StartupHook("MathEvents Ready",function () {
77
+ EVENT = MathJax.Extension.MathEvents.Event;
78
+ FALSE = MathJax.Extension.MathEvents.Event.False;
79
+ HOVER = MathJax.Extension.MathEvents.Hover;
80
+ });
81
+
82
+ /*************************************************************/
83
+
84
+ var ZOOM = MathJax.Extension.MathZoom = {
85
+ version: VERSION,
86
+ settings: HUB.config.menuSettings,
87
+ scrollSize: 18, // width of scrool bars
88
+
89
+ //
90
+ // Process events passed from output jax
91
+ //
92
+ HandleEvent: function (event,type,math) {
93
+ if (ZOOM.settings.CTRL && !event.ctrlKey) return true;
94
+ if (ZOOM.settings.ALT && !event.altKey) return true;
95
+ if (ZOOM.settings.CMD && !event.metaKey) return true;
96
+ if (ZOOM.settings.Shift && !event.shiftKey) return true;
97
+ if (!ZOOM[type]) return true;
98
+ return ZOOM[type](event,math);
99
+ },
100
+
101
+ //
102
+ // Zoom on click
103
+ //
104
+ Click: function (event,math) {
105
+ if (this.settings.zoom === "Click") {return this.Zoom(event,math)}
106
+ },
107
+
108
+ //
109
+ // Zoom on double click
110
+ //
111
+ DblClick: function (event,math) {
112
+ if (this.settings.zoom === "Double-Click" || this.settings.zoom === "DoubleClick") {return this.Zoom(event,math)}
113
+ },
114
+
115
+ //
116
+ // Zoom on hover (called by MathEvents.Hover)
117
+ //
118
+ Hover: function (event,math) {
119
+ if (this.settings.zoom === "Hover") {this.Zoom(event,math); return true}
120
+ return false;
121
+ },
122
+
123
+
124
+ //
125
+ // Handle the actual zooming
126
+ //
127
+ Zoom: function (event,math) {
128
+ //
129
+ // Remove any other zoom and clear timers
130
+ //
131
+ this.Remove(); HOVER.ClearHoverTimer(); EVENT.ClearSelection();
132
+
133
+ //
134
+ // Find the jax
135
+ //
136
+ var JAX = MathJax.OutputJax[math.jaxID];
137
+ var jax = JAX.getJaxFromMath(math);
138
+ if (jax.hover) {HOVER.UnHover(jax)}
139
+
140
+ //
141
+ // Create the DOM elements for the zoom box
142
+ //
143
+ var container = this.findContainer(math);
144
+ var Mw = Math.floor(.85*container.clientWidth),
145
+ Mh = Math.max(document.body.clientHeight,document.documentElement.clientHeight);
146
+ if (this.getOverflow(container) !== "visible") {Mh = Math.min(container.clientHeight,Mh)}
147
+ Mh = Math.floor(.85*Mh);
148
+ var div = HTML.Element(
149
+ "span",{id:"MathJax_ZoomFrame"},[
150
+ ["span",{id:"MathJax_ZoomOverlay", onmousedown:this.Remove}],
151
+ ["span",{
152
+ id:"MathJax_Zoom", onclick:this.Remove,
153
+ style:{visibility:"hidden", fontSize:this.settings.zscale}
154
+ },[["span",{style:{display:"inline-block", "white-space":"nowrap"}}]]
155
+ ]]
156
+ );
157
+ var zoom = div.lastChild, span = zoom.firstChild, overlay = div.firstChild;
158
+ math.parentNode.insertBefore(div,math); math.parentNode.insertBefore(math,div); // put div after math
159
+ if (span.addEventListener) {span.addEventListener("mousedown",this.Remove,true)}
160
+ var eW = zoom.offsetWidth || zoom.clientWidth; Mw -= eW; Mh -= eW;
161
+ zoom.style.maxWidth = Mw+"px"; zoom.style.maxHeight = Mh+"px";
162
+
163
+ if (this.msieTrapEventBug) {
164
+ var trap = HTML.Element("span",{id:"MathJax_ZoomEventTrap", onmousedown:this.Remove});
165
+ div.insertBefore(trap,zoom);
166
+ }
167
+
168
+ //
169
+ // Display the zoomed math
170
+ //
171
+ if (this.msieZIndexBug) {
172
+ // MSIE doesn't do z-index properly, so move the div to the document.body,
173
+ // and use an image as a tracker for the usual position
174
+ var tracker = HTML.addElement(document.body,"img",{
175
+ src:"about:blank", id:"MathJax_ZoomTracker", width:0, height:0,
176
+ style:{width:0, height:0, position:"relative"}
177
+ });
178
+ div.style.position = "relative";
179
+ div.style.zIndex = CONFIG.styles["#MathJax_ZoomOverlay"]["z-index"];
180
+ div = tracker;
181
+ }
182
+
183
+ var bbox = JAX.Zoom(jax,span,math,Mw,Mh);
184
+
185
+ //
186
+ // Fix up size and position for browsers with bugs (IE)
187
+ //
188
+ if (this.msiePositionBug) {
189
+ if (this.msieSizeBug)
190
+ {zoom.style.height = bbox.zH+"px"; zoom.style.width = bbox.zW+"px"} // IE8 gets the dimensions completely wrong
191
+ if (zoom.offsetHeight > Mh) {zoom.style.height = Mh+"px"; zoom.style.width = (bbox.zW+this.scrollSize)+"px"} // IE doesn't do max-height?
192
+ if (zoom.offsetWidth > Mw) {zoom.style.width = Mw+"px"; zoom.style.height = (bbox.zH+this.scrollSize)+"px"}
193
+ }
194
+ if (this.operaPositionBug) {zoom.style.width = Math.min(Mw,bbox.zW)+"px"} // Opera gets width as 0?
195
+ if (zoom.offsetWidth > eW && zoom.offsetWidth-eW < Mw && zoom.offsetHeight-eW < Mh)
196
+ {zoom.style.overflow = "visible"} // don't show scroll bars if we don't need to
197
+ this.Position(zoom,bbox);
198
+ if (this.msieTrapEventBug) {
199
+ trap.style.height = zoom.clientHeight+"px"; trap.style.width = zoom.clientWidth+"px";
200
+ trap.style.left = (parseFloat(zoom.style.left)+zoom.clientLeft)+"px";
201
+ trap.style.top = (parseFloat(zoom.style.top)+zoom.clientTop)+"px";
202
+ }
203
+ zoom.style.visibility = "";
204
+
205
+ //
206
+ // Add event handlers
207
+ //
208
+ if (this.settings.zoom === "Hover") {overlay.onmouseover = this.Remove}
209
+ if (window.addEventListener) {addEventListener("resize",this.Resize,false)}
210
+ else if (window.attachEvent) {attachEvent("onresize",this.Resize)}
211
+ else {this.onresize = window.onresize; window.onresize = this.Resize}
212
+
213
+ //
214
+ // Let others know about the zoomed math
215
+ //
216
+ HUB.signal.Post(["math zoomed",jax]);
217
+
218
+ //
219
+ // Canel further actions
220
+ //
221
+ return FALSE(event);
222
+ },
223
+
224
+ //
225
+ // Set the position of the zoom box and overlay
226
+ //
227
+ Position: function (zoom,bbox) {
228
+ zoom.style.display = "none"; // avoids getting excessive width in Resize()
229
+ var XY = this.Resize(), x = XY.x, y = XY.y, W = bbox.mW;
230
+ zoom.style.display = "";
231
+ var dx = -W-Math.floor((zoom.offsetWidth-W)/2), dy = bbox.Y;
232
+ zoom.style.left = Math.max(dx,10-x)+"px"; zoom.style.top = Math.max(dy,10-y)+"px";
233
+ if (!ZOOM.msiePositionBug) {ZOOM.SetWH()} // refigure overlay width/height
234
+ },
235
+
236
+ //
237
+ // Handle resizing of overlay while zoom is displayed
238
+ //
239
+ Resize: function (event) {
240
+ if (ZOOM.onresize) {ZOOM.onresize(event)}
241
+ var div = document.getElementById("MathJax_ZoomFrame"),
242
+ overlay = document.getElementById("MathJax_ZoomOverlay");
243
+ var xy = ZOOM.getXY(div), obj = ZOOM.findContainer(div);
244
+ if (ZOOM.getOverflow(obj) !== "visible") {
245
+ overlay.scroll_parent = obj; // Save this for future reference.
246
+ var XY = ZOOM.getXY(obj); // Remove container position
247
+ xy.x -= XY.x; xy.y -= XY.y;
248
+ XY = ZOOM.getBorder(obj); // Remove container border
249
+ xy.x -= XY.x; xy.y -= XY.y;
250
+ }
251
+ overlay.style.left = (-xy.x)+"px"; overlay.style.top = (-xy.y)+"px";
252
+ if (ZOOM.msiePositionBug) {setTimeout(ZOOM.SetWH,0)} else {ZOOM.SetWH()}
253
+ return xy;
254
+ },
255
+ SetWH: function () {
256
+ var overlay = document.getElementById("MathJax_ZoomOverlay");
257
+ if (!overlay) return;
258
+ overlay.style.display = "none"; // so scrollWidth/Height will be right below
259
+ var doc = overlay.scroll_parent || document.documentElement || document.body;
260
+ overlay.style.width = doc.scrollWidth + "px";
261
+ overlay.style.height = Math.max(doc.clientHeight,doc.scrollHeight) + "px";
262
+ overlay.style.display = "";
263
+ },
264
+ findContainer: function (obj) {
265
+ obj = obj.parentNode;
266
+ while (obj.parentNode && obj !== document.body && ZOOM.getOverflow(obj) === "visible")
267
+ {obj = obj.parentNode}
268
+ return obj;
269
+ },
270
+ //
271
+ // Look up CSS properties (use getComputeStyle if available, or currentStyle if not)
272
+ //
273
+ getOverflow: (window.getComputedStyle ?
274
+ function (obj) {return getComputedStyle(obj).overflow} :
275
+ function (obj) {return (obj.currentStyle||{overflow:"visible"}).overflow}),
276
+ getBorder: function (obj) {
277
+ var size = {thin: 1, medium: 2, thick: 3};
278
+ var style = (window.getComputedStyle ? getComputedStyle(obj) :
279
+ (obj.currentStyle || {borderLeftWidth:0,borderTopWidth:0}));
280
+ var x = style.borderLeftWidth, y = style.borderTopWidth;
281
+ if (size[x]) {x = size[x]} else {x = parseInt(x)}
282
+ if (size[y]) {y = size[y]} else {y = parseInt(y)}
283
+ return {x:x, y:y};
284
+ },
285
+ //
286
+ // Get the position of an element on the page
287
+ //
288
+ getXY: function (div) {
289
+ var x = 0, y = 0, obj;
290
+ obj = div; while (obj.offsetParent) {x += obj.offsetLeft; obj = obj.offsetParent}
291
+ if (ZOOM.operaPositionBug) {div.style.border = "1px solid"} // to get vertical position right
292
+ obj = div; while (obj.offsetParent) {y += obj.offsetTop; obj = obj.offsetParent}
293
+ if (ZOOM.operaPositionBug) {div.style.border = ""}
294
+ return {x:x, y:y};
295
+ },
296
+
297
+ //
298
+ // Remove zoom display and event handlers
299
+ //
300
+ Remove: function (event) {
301
+ var div = document.getElementById("MathJax_ZoomFrame");
302
+ if (div) {
303
+ var JAX = MathJax.OutputJax[div.previousSibling.jaxID];
304
+ var jax = JAX.getJaxFromMath(div.previousSibling);
305
+ HUB.signal.Post(["math unzoomed",jax]);
306
+ div.parentNode.removeChild(div);
307
+ div = document.getElementById("MathJax_ZoomTracker");
308
+ if (div) {div.parentNode.removeChild(div)}
309
+ if (ZOOM.operaRefreshBug) {
310
+ // force a redisplay of the page
311
+ // (Opera doesn't refresh properly after the zoom is removed)
312
+ var overlay = HTML.addElement(document.body,"div",{
313
+ style:{position:"fixed", left:0, top:0, width:"100%", height:"100%",
314
+ backgroundColor:"white", opacity:0},
315
+ id: "MathJax_OperaDiv"
316
+ });
317
+ document.body.removeChild(overlay);
318
+ }
319
+ if (window.removeEventListener) {removeEventListener("resize",ZOOM.Resize,false)}
320
+ else if (window.detachEvent) {detachEvent("onresize",ZOOM.Resize)}
321
+ else {window.onresize = ZOOM.onresize; delete ZOOM.onresize}
322
+ }
323
+ return FALSE(event);
324
+ }
325
+
326
+ };
327
+
328
+
329
+ /*************************************************************/
330
+
331
+ HUB.Browser.Select({
332
+ MSIE: function (browser) {
333
+ var mode = (document.documentMode || 0);
334
+ var isIE9 = (mode >= 9);
335
+ ZOOM.msiePositionBug = !isIE9;
336
+ ZOOM.msieSizeBug = browser.versionAtLeast("7.0") &&
337
+ (!document.documentMode || mode === 7 || mode === 8);
338
+ ZOOM.msieZIndexBug = (mode <= 7);
339
+ ZOOM.msieInlineBlockAlignBug = (mode <= 7);
340
+ ZOOM.msieTrapEventBug = !window.addEventListener;
341
+ if (document.compatMode === "BackCompat") {ZOOM.scrollSize = 52} // don't know why this is so far off
342
+ if (isIE9) {delete CONFIG.styles["#MathJax_Zoom"].filter}
343
+ },
344
+
345
+ Opera: function (browser) {
346
+ ZOOM.operaPositionBug = true;
347
+ ZOOM.operaRefreshBug = true;
348
+ }
349
+ });
350
+
351
+ ZOOM.topImg = (ZOOM.msieInlineBlockAlignBug ?
352
+ HTML.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}) :
353
+ HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}})
354
+ );
355
+ if (ZOOM.operaPositionBug || ZOOM.msieTopBug) {ZOOM.topImg.style.border="1px solid"}
356
+
357
+ /*************************************************************/
358
+
359
+ MathJax.Callback.Queue(
360
+ ["StartupHook",MathJax.Hub.Register,"Begin Styles",{}],
361
+ ["Styles",AJAX,CONFIG.styles],
362
+ ["Post",HUB.Startup.signal,"MathZoom Ready"],
363
+ ["loadComplete",AJAX,"[MathJax]/extensions/MathZoom.js"]
364
+ );
365
+
366
+ })(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.OutputJax["HTML-CSS"],MathJax.OutputJax.NativeMML);
vendor/MathJax/extensions/Safe.js ADDED
@@ -0,0 +1,428 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/Safe.js
7
+ *
8
+ * Implements a "Safe" mode that disables features that could be
9
+ * misused in a shared environment (such as href's to javascript URL's).
10
+ * See the CONFIG variable below for configuration options.
11
+ *
12
+ * ---------------------------------------------------------------------
13
+ *
14
+ * Copyright (c) 2013-2018 The MathJax Consortium
15
+ *
16
+ * Licensed under the Apache License, Version 2.0 (the "License");
17
+ * you may not use this file except in compliance with the License.
18
+ * You may obtain a copy of the License at
19
+ *
20
+ * http://www.apache.org/licenses/LICENSE-2.0
21
+ *
22
+ * Unless required by applicable law or agreed to in writing, software
23
+ * distributed under the License is distributed on an "AS IS" BASIS,
24
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
+ * See the License for the specific language governing permissions and
26
+ * limitations under the License.
27
+ */
28
+
29
+ (function (HUB,AJAX) {
30
+ var VERSION = "2.7.5";
31
+
32
+ var CONFIG = MathJax.Hub.CombineConfig("Safe",{
33
+ allow: {
34
+ //
35
+ // Values can be "all", "safe", or "none"
36
+ //
37
+ URLs: "safe", // safe are in safeProtocols below
38
+ classes: "safe", // safe start with MJX-
39
+ cssIDs: "safe", // safe start with MJX-
40
+ styles: "safe", // safe are in safeStyles below
41
+ fontsize: "all", // safe are between sizeMin and sizeMax em's
42
+ require: "safe" // safe are in safeRequire below
43
+ },
44
+ sizeMin: .7, // \scriptsize
45
+ sizeMax: 1.44, // \large
46
+ lengthMax: 3, // largest padding/border/margin, etc. in em's
47
+ safeProtocols: {
48
+ http: true,
49
+ https: true,
50
+ file: true,
51
+ javascript: false
52
+ },
53
+ safeStyles: {
54
+ color: true,
55
+ backgroundColor: true,
56
+ border: true,
57
+ cursor: true,
58
+ margin: true,
59
+ padding: true,
60
+ textShadow: true,
61
+ fontFamily: true,
62
+ fontSize: true,
63
+ fontStyle: true,
64
+ fontWeight: true,
65
+ opacity: true,
66
+ outline: true
67
+ },
68
+ safeRequire: {
69
+ action: true,
70
+ amscd: true,
71
+ amsmath: true,
72
+ amssymbols: true,
73
+ autobold: false,
74
+ "autoload-all": false,
75
+ bbox: true,
76
+ begingroup: true,
77
+ boldsymbol: true,
78
+ cancel: true,
79
+ color: true,
80
+ enclose: true,
81
+ extpfeil: true,
82
+ HTML: true,
83
+ mathchoice: true,
84
+ mhchem: true,
85
+ newcommand: true,
86
+ noErrors: false,
87
+ noUndefined: false,
88
+ unicode: true,
89
+ verb: true
90
+ },
91
+ //
92
+ // CSS styles that have Top/Right/Bottom/Left versions
93
+ //
94
+ styleParts: {
95
+ border: true,
96
+ padding: true,
97
+ margin: true,
98
+ outline: true
99
+ },
100
+ //
101
+ // CSS styles that are lengths needing max/min testing
102
+ // A string value means test that style value;
103
+ // An array gives [min,max] in em's
104
+ // Otherwise use [-lengthMax,lengthMax] from above
105
+ //
106
+ styleLengths: {
107
+ borderTop: "borderTopWidth",
108
+ borderRight: "borderRightWidth",
109
+ borderBottom: "borderBottomWidth",
110
+ borderLeft: "borderLeftWidth",
111
+ paddingTop: true,
112
+ paddingRight: true,
113
+ paddingBottom: true,
114
+ paddingLeft: true,
115
+ marginTop: true,
116
+ marginRight: true,
117
+ marginBottom: true,
118
+ marginLeft: true,
119
+ outlineTop: true,
120
+ outlineRight: true,
121
+ outlineBottom: true,
122
+ outlineLeft: true,
123
+ fontSize: [.7,1.44]
124
+ }
125
+ });
126
+
127
+ var ALLOW = CONFIG.allow;
128
+ if (ALLOW.fontsize !== "all") {CONFIG.safeStyles.fontSize = false}
129
+
130
+ var SAFE = MathJax.Extension.Safe = {
131
+ version: VERSION,
132
+ config: CONFIG,
133
+ div1: document.createElement("div"), // for CSS processing
134
+ div2: document.createElement("div"),
135
+
136
+ //
137
+ // Methods called for MathML attribute processing
138
+ //
139
+ filter: {
140
+ href: "filterURL",
141
+ src: "filterURL",
142
+ altimg: "filterURL",
143
+ "class": "filterClass",
144
+ style: "filterStyles",
145
+ id: "filterID",
146
+ fontsize: "filterFontSize",
147
+ mathsize: "filterFontSize",
148
+ scriptminsize: "filterFontSize",
149
+ scriptsizemultiplier: "filterSizeMultiplier",
150
+ scriptlevel: "filterScriptLevel"
151
+ },
152
+
153
+ //
154
+ // Filter HREF URL's
155
+ //
156
+ filterURL: function (url) {
157
+ var protocol = (url.match(/^\s*([a-z]+):/i)||[null,""])[1].toLowerCase();
158
+ if (ALLOW.URLs === "none" ||
159
+ (ALLOW.URLs !== "all" && !CONFIG.safeProtocols[protocol])) {url = null}
160
+ return url;
161
+ },
162
+
163
+ //
164
+ // Filter class names and css ID's
165
+ //
166
+ filterClass: function (CLASS) {
167
+ if (ALLOW.classes === "none" ||
168
+ (ALLOW.classes !== "all" && !CLASS.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {CLASS = null}
169
+ return CLASS;
170
+ },
171
+ filterID: function (id) {
172
+ if (ALLOW.cssIDs === "none" ||
173
+ (ALLOW.cssIDs !== "all" && !id.match(/^MJX-[-a-zA-Z0-9_.]+$/))) {id = null}
174
+ return id;
175
+ },
176
+
177
+ //
178
+ // Filter style strings
179
+ //
180
+ filterStyles: function (styles) {
181
+ if (ALLOW.styles === "all") {return styles}
182
+ if (ALLOW.styles === "none") {return null}
183
+ try {
184
+ //
185
+ // Set the div1 styles to the given styles, and clear div2
186
+ //
187
+ var STYLE1 = this.div1.style, STYLE2 = this.div2.style, value;
188
+ STYLE1.cssText = styles; STYLE2.cssText = "";
189
+ //
190
+ // Check each allowed style and transfer OK ones to div2
191
+ // If the style has Top/Right/Bottom/Left, look at all four separately
192
+ //
193
+ for (var name in CONFIG.safeStyles) {if (CONFIG.safeStyles.hasOwnProperty(name)) {
194
+ if (CONFIG.styleParts[name]) {
195
+ for (var i = 0; i < 4; i++) {
196
+ var NAME = name+["Top","Right","Bottom","Left"][i]
197
+ value = this.filterStyle(NAME,STYLE1);
198
+ if (value) {STYLE2[NAME] = value}
199
+ }
200
+ } else {
201
+ value = this.filterStyle(name,STYLE1);
202
+ if (value) {STYLE2[name] = value}
203
+ }
204
+ }}
205
+ //
206
+ // Return the div2 style string
207
+ //
208
+ styles = STYLE2.cssText;
209
+ } catch (e) {styles = null}
210
+ return styles;
211
+ },
212
+ //
213
+ // Filter an individual name:value style pair
214
+ //
215
+ filterStyle: function (name,styles) {
216
+ var value = styles[name];
217
+ if (typeof value !== "string" || value === "") {return null}
218
+ if (value.match(/^\s*expression/)) {return null}
219
+ if (value.match(/javascript:/)) {return null}
220
+ var NAME = name.replace(/Top|Right|Left|Bottom/,"");
221
+ if (!CONFIG.safeStyles[name] && !CONFIG.safeStyles[NAME]) {return null}
222
+ if (!CONFIG.styleLengths[name]) {return value}
223
+ return (this.filterStyleLength(name,value,styles) ? value : null);
224
+ },
225
+ filterStyleLength: function (name,value,styles) {
226
+ if (typeof CONFIG.styleLengths[name] === "string") value = styles[CONFIG.styleLengths[name]];
227
+ value = this.length2em(value);
228
+ if (value == null) return false;
229
+ var mM = [-CONFIG.lengthMax,CONFIG.lengthMax];
230
+ if (MathJax.Object.isArray(CONFIG.styleLengths[name])) mM = CONFIG.styleLengths[name];
231
+ return (value >= mM[0] && value <= mM[1]);
232
+ },
233
+ //
234
+ // Conversion of units to em's
235
+ //
236
+ unit2em: {
237
+ em: 1,
238
+ ex: .5, // assume 1ex = .5em
239
+ ch: .5, // assume 1ch = .5em
240
+ rem: 1, // assume 1rem = 1em
241
+ px: 1/16, // assume 1em = 16px
242
+ mm: 96/25.4/16, // 25.4mm = 96px
243
+ cm: 96/2.54/16, // 2.54cm = 96px
244
+ 'in': 96/16, // 1in = 96px
245
+ pt: 96/72/16, // 72pt = 1in
246
+ pc: 96/6/16 // 1pc = 12pt
247
+ },
248
+ length2em: function (value) {
249
+ var match = value.match(/(.+)(em|ex|ch|rem|px|mm|cm|in|pt|pc)/);
250
+ if (!match) return null;
251
+ return parseFloat(match[1])*this.unit2em[match[2]];
252
+ },
253
+
254
+ //
255
+ // Filter TeX font size values (in em's)
256
+ //
257
+ filterSize: function (size) {
258
+ if (ALLOW.fontsize === "none") {return null}
259
+ if (ALLOW.fontsize !== "all")
260
+ {size = Math.min(Math.max(size,CONFIG.sizeMin),CONFIG.sizeMax)}
261
+ return size;
262
+ },
263
+ filterFontSize: function (size) {
264
+ return (ALLOW.fontsize === "all" ? size: null);
265
+ },
266
+
267
+ //
268
+ // Filter scriptsizemultiplier
269
+ //
270
+ filterSizeMultiplier: function (size) {
271
+ if (ALLOW.fontsize === "none") {size = null}
272
+ else if (ALLOW.fontsize !== "all") {size = Math.min(1,Math.max(.6,size)).toString()}
273
+ return size;
274
+ },
275
+ //
276
+ // Filter scriptLevel
277
+ //
278
+ filterScriptLevel: function (level) {
279
+ if (ALLOW.fontsize === "none") {level = null}
280
+ else if (ALLOW.fontsize !== "all") {level = Math.max(0,level).toString()}
281
+ return level;
282
+ },
283
+
284
+ //
285
+ // Filter TeX extension names
286
+ //
287
+ filterRequire: function (name) {
288
+ if (ALLOW.require === "none" ||
289
+ (ALLOW.require !== "all" && !CONFIG.safeRequire[name.toLowerCase()]))
290
+ {name = null}
291
+ return name;
292
+ }
293
+
294
+ };
295
+
296
+ HUB.Register.StartupHook("TeX HTML Ready",function () {
297
+ var TEX = MathJax.InputJax.TeX;
298
+
299
+ TEX.Parse.Augment({
300
+
301
+ //
302
+ // Implements \href{url}{math} with URL filter
303
+ //
304
+ HREF_attribute: function (name) {
305
+ var url = SAFE.filterURL(this.GetArgument(name)),
306
+ arg = this.GetArgumentMML(name);
307
+ if (url) {arg.With({href:url})}
308
+ this.Push(arg);
309
+ },
310
+
311
+ //
312
+ // Implements \class{name}{math} with class-name filter
313
+ //
314
+ CLASS_attribute: function (name) {
315
+ var CLASS = SAFE.filterClass(this.GetArgument(name)),
316
+ arg = this.GetArgumentMML(name);
317
+ if (CLASS) {
318
+ if (arg["class"] != null) {CLASS = arg["class"] + " " + CLASS}
319
+ arg.With({"class":CLASS});
320
+ }
321
+ this.Push(arg);
322
+ },
323
+
324
+ //
325
+ // Implements \style{style-string}{math} with style filter
326
+ //
327
+ STYLE_attribute: function (name) {
328
+ var style = SAFE.filterStyles(this.GetArgument(name)),
329
+ arg = this.GetArgumentMML(name);
330
+ if (style) {
331
+ if (arg.style != null) {
332
+ if (style.charAt(style.length-1) !== ";") {style += ";"}
333
+ style = arg.style + " " + style;
334
+ }
335
+ arg.With({style: style});
336
+ }
337
+ this.Push(arg);
338
+ },
339
+
340
+ //
341
+ // Implements \cssId{id}{math} with ID filter
342
+ //
343
+ ID_attribute: function (name) {
344
+ var ID = SAFE.filterID(this.GetArgument(name)),
345
+ arg = this.GetArgumentMML(name);
346
+ if (ID) {arg.With({id:ID})}
347
+ this.Push(arg);
348
+ }
349
+
350
+ });
351
+
352
+ });
353
+
354
+ HUB.Register.StartupHook("TeX Jax Ready",function () {
355
+ var TEX = MathJax.InputJax.TeX,
356
+ PARSE = TEX.Parse, METHOD = SAFE.filter;
357
+
358
+ PARSE.Augment({
359
+
360
+ //
361
+ // Implements \require{name} with filtering
362
+ //
363
+ Require: function (name) {
364
+ var file = this.GetArgument(name).replace(/.*\//,"").replace(/[^a-z0-9_.-]/ig,"");
365
+ file = SAFE.filterRequire(file);
366
+ if (file) {this.Extension(null,file)}
367
+ },
368
+
369
+ //
370
+ // Controls \mmlToken attributes
371
+ //
372
+ MmlFilterAttribute: function (name,value) {
373
+ if (METHOD[name]) {value = SAFE[METHOD[name]](value)}
374
+ return value;
375
+ },
376
+
377
+ //
378
+ // Handles font size macros with filtering
379
+ //
380
+ SetSize: function (name,size) {
381
+ size = SAFE.filterSize(size);
382
+ if (size) {
383
+ this.stack.env.size = size;
384
+ this.Push(TEX.Stack.Item.style().With({styles: {mathsize: size+"em"}}));
385
+ }
386
+ }
387
+
388
+ });
389
+ });
390
+
391
+ HUB.Register.StartupHook("TeX bbox Ready",function () {
392
+ var TEX = MathJax.InputJax.TeX;
393
+
394
+ //
395
+ // Filter the styles for \bbox
396
+ //
397
+ TEX.Parse.Augment({
398
+ BBoxStyle: function (styles) {return SAFE.filterStyles(styles)},
399
+ BBoxPadding: function (pad) {
400
+ var styles = SAFE.filterStyles("padding: "+pad);
401
+ return (styles ? pad : 0);
402
+ }
403
+ });
404
+
405
+ });
406
+
407
+ HUB.Register.StartupHook("MathML Jax Ready",function () {
408
+ var PARSE = MathJax.InputJax.MathML.Parse,
409
+ METHOD = SAFE.filter;
410
+
411
+ //
412
+ // Filter MathML attributes
413
+ //
414
+ PARSE.Augment({
415
+ filterAttribute: function (name,value) {
416
+ if (METHOD[name]) {value = SAFE[METHOD[name]](value)}
417
+ return value;
418
+ }
419
+ });
420
+
421
+ });
422
+
423
+ // MathML input (href, style, fontsize, class, id)
424
+
425
+ HUB.Startup.signal.Post("Safe Extension Ready");
426
+ AJAX.loadComplete("[MathJax]/extensions/Safe.js");
427
+
428
+ })(MathJax.Hub,MathJax.Ajax);
vendor/MathJax/extensions/TeX/AMScd.js ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/AMScd.js
7
+ *
8
+ * Implements the CD environment for commutative diagrams.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2013-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Extension["TeX/AMScd"] = {
28
+ version: "2.7.5",
29
+ config: MathJax.Hub.CombineConfig("TeX.CD",{
30
+ colspace: "5pt",
31
+ rowspace: "5pt",
32
+ harrowsize: "2.75em",
33
+ varrowsize: "1.75em",
34
+ hideHorizontalLabels: false
35
+ })
36
+ };
37
+
38
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
39
+ var MML = MathJax.ElementJax.mml,
40
+ TEX = MathJax.InputJax.TeX,
41
+ STACKITEM = TEX.Stack.Item,
42
+ TEXDEF = TEX.Definitions,
43
+ CONFIG = MathJax.Extension["TeX/AMScd"].config;
44
+
45
+ TEXDEF.environment.CD = "CD_env";
46
+ TEXDEF.special["@"] = "CD_arrow";
47
+ TEXDEF.macros.minCDarrowwidth = "CD_minwidth";
48
+ TEXDEF.macros.minCDarrowheight = "CD_minheight";
49
+
50
+ TEX.Parse.Augment({
51
+ //
52
+ // Implements \begin{CD}...\end{CD}
53
+ //
54
+ CD_env: function (begin) {
55
+ this.Push(begin);
56
+ return STACKITEM.array().With({
57
+ arraydef: {
58
+ columnalign: "center",
59
+ columnspacing: CONFIG.colspace,
60
+ rowspacing: CONFIG.rowspace,
61
+ displaystyle: true
62
+ },
63
+ minw: this.stack.env.CD_minw || CONFIG.harrowsize,
64
+ minh: this.stack.env.CD_minh || CONFIG.varrowsize
65
+ });
66
+ },
67
+
68
+ CD_arrow: function (name) {
69
+ var c = this.string.charAt(this.i);
70
+ if (!c.match(/[><VA.|=]/)) {return this.Other(name)} else {this.i++}
71
+
72
+ var top = this.stack.Top();
73
+ if (!top.isa(STACKITEM.array) || top.data.length) {
74
+ this.CD_cell(name);
75
+ top = this.stack.Top();
76
+ }
77
+ //
78
+ // Add enough cells to place the arrow correctly
79
+ //
80
+ var arrowRow = ((top.table.length % 2) === 1);
81
+ var n = (top.row.length + (arrowRow ? 0 : 1)) % 2;
82
+ while (n) {this.CD_cell(name); n--}
83
+
84
+ var mml;
85
+ var hdef = {minsize: top.minw, stretchy:true},
86
+ vdef = {minsize: top.minh, stretchy:true, symmetric:true, lspace:0, rspace:0};
87
+
88
+ if (c === ".") {}
89
+ else if (c === "|") {mml = this.mmlToken(MML.mo("\u2225").With(vdef))}
90
+ else if (c === "=") {mml = this.mmlToken(MML.mo("=").With(hdef))}
91
+ else {
92
+ //
93
+ // for @>>> @<<< @VVV and @AAA, get the arrow and labels
94
+ //
95
+ var arrow = {">":"\u2192", "<":"\u2190", V:"\u2193", A:"\u2191"}[c];
96
+ var a = this.GetUpTo(name+c,c),
97
+ b = this.GetUpTo(name+c,c);
98
+
99
+ if (c === ">" || c === "<") {
100
+ //
101
+ // Lay out horizontal arrows with munderover if it has labels
102
+ //
103
+ mml = MML.mo(arrow).With(hdef);
104
+ if (!a) {a = "\\kern "+top.minw} // minsize needs work
105
+ if (a || b) {
106
+ var pad = {width:"+11mu", lspace:"6mu"};
107
+ mml = MML.munderover(this.mmlToken(mml));
108
+ if (a) {
109
+ a = TEX.Parse(a,this.stack.env).mml();
110
+ mml.SetData(mml.over,MML.mpadded(a).With(pad).With({voffset:".1em"}));
111
+ }
112
+ if (b) {
113
+ b = TEX.Parse(b,this.stack.env).mml();
114
+ mml.SetData(mml.under,MML.mpadded(b).With(pad));
115
+ }
116
+ if (CONFIG.hideHorizontalLabels)
117
+ {mml = MML.mpadded(mml).With({depth:0, height:".67em"})}
118
+ }
119
+ } else {
120
+ //
121
+ // Lay out vertical arrows with mrow if there are labels
122
+ //
123
+ mml = arrow = this.mmlToken(MML.mo(arrow).With(vdef));
124
+ if (a || b) {
125
+ mml = MML.mrow();
126
+ if (a) {mml.Append(TEX.Parse("\\scriptstyle\\llap{"+a+"}",this.stack.env).mml())}
127
+ mml.Append(arrow.With({texClass: MML.TEXCLASS.ORD}));
128
+ if (b) {mml.Append(TEX.Parse("\\scriptstyle\\rlap{"+b+"}",this.stack.env).mml())}
129
+ }
130
+ }
131
+ }
132
+ if (mml) {this.Push(mml)};
133
+ this.CD_cell(name);
134
+ },
135
+ CD_cell: function (name) {
136
+ var top = this.stack.Top();
137
+ if ((top.table||[]).length % 2 === 0 && (top.row||[]).length === 0) {
138
+ //
139
+ // Add a strut to the first cell in even rows to get
140
+ // better spacing of arrow rows.
141
+ //
142
+ this.Push(MML.mpadded().With({height:"8.5pt",depth:"2pt"}));
143
+ }
144
+ this.Push(STACKITEM.cell().With({isEntry:true, name:name}));
145
+ },
146
+
147
+ CD_minwidth: function (name) {
148
+ this.stack.env.CD_minw = this.GetDimen(name);
149
+ },
150
+ CD_minheight: function (name) {
151
+ this.stack.env.CD_minh = this.GetDimen(name);
152
+ }
153
+
154
+ });
155
+
156
+ });
157
+
158
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/AMScd.js");
vendor/MathJax/extensions/TeX/AMSmath.js ADDED
@@ -0,0 +1,658 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/AMSmath.js
7
+ *
8
+ * Implements AMS math environments and macros.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2009-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Extension["TeX/AMSmath"] = {
28
+ version: "2.7.5",
29
+
30
+ number: 0, // current equation number
31
+ startNumber: 0, // current starting equation number (for when equation is restarted)
32
+ IDs: {}, // IDs used in previous equations
33
+ eqIDs: {}, // IDs used in this equation
34
+ labels: {}, // the set of labels
35
+ eqlabels: {}, // labels in the current equation
36
+ refs: [] // array of jax with unresolved references
37
+ };
38
+
39
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
40
+
41
+ var MML = MathJax.ElementJax.mml,
42
+ TEX = MathJax.InputJax.TeX,
43
+ AMS = MathJax.Extension["TeX/AMSmath"];
44
+
45
+ var TEXDEF = TEX.Definitions,
46
+ STACKITEM = TEX.Stack.Item,
47
+ CONFIG = TEX.config.equationNumbers;
48
+
49
+ var COLS = function (W) {
50
+ var WW = [];
51
+ for (var i = 0, m = W.length; i < m; i++)
52
+ {WW[i] = TEX.Parse.prototype.Em(W[i])}
53
+ return WW.join(" ");
54
+ };
55
+
56
+ //
57
+ // Get the URL of the page (for use with formatURL) when there
58
+ // is a <base> element on the page.
59
+ //
60
+ var baseURL = (document.getElementsByTagName("base").length === 0) ? "" :
61
+ String(document.location).replace(/#.*$/,"");
62
+
63
+
64
+ /******************************************************************************/
65
+
66
+ TEXDEF.Add({
67
+ mathchar0mo: {
68
+ iiiint: ['2A0C',{texClass: MML.TEXCLASS.OP}]
69
+ },
70
+
71
+ macros: {
72
+ mathring: ['Accent','2DA'], // or 0x30A
73
+
74
+ nobreakspace: 'Tilde',
75
+ negmedspace: ['Spacer',MML.LENGTH.NEGATIVEMEDIUMMATHSPACE],
76
+ negthickspace: ['Spacer',MML.LENGTH.NEGATIVETHICKMATHSPACE],
77
+
78
+ // intI: ['Macro','\\mathchoice{\\!}{}{}{}\\!\\!\\int'],
79
+ // iint: ['MultiIntegral','\\int\\intI'], // now in core TeX input jax
80
+ // iiint: ['MultiIntegral','\\int\\intI\\intI'], // now in core TeX input jax
81
+ // iiiint: ['MultiIntegral','\\int\\intI\\intI\\intI'], // now in mathchar0mo above
82
+ idotsint: ['MultiIntegral','\\int\\cdots\\int'],
83
+
84
+ // dddot: ['Macro','\\mathop{#1}\\limits^{\\textstyle \\mathord{.}\\mathord{.}\\mathord{.}}',1],
85
+ // ddddot: ['Macro','\\mathop{#1}\\limits^{\\textstyle \\mathord{.}\\mathord{.}\\mathord{.}\\mathord{.}}',1],
86
+ dddot: ['Accent','20DB'],
87
+ ddddot: ['Accent','20DC'],
88
+
89
+ sideset: ['Macro','\\mathop{\\mathop{\\rlap{\\phantom{#3}}}\\nolimits#1\\!\\mathop{#3}\\nolimits#2}',3],
90
+
91
+ boxed: ['Macro','\\fbox{$\\displaystyle{#1}$}',1],
92
+
93
+ tag: 'HandleTag',
94
+ notag: 'HandleNoTag',
95
+ label: 'HandleLabel',
96
+ ref: 'HandleRef',
97
+ eqref: ['HandleRef',true],
98
+
99
+ substack: ['Macro','\\begin{subarray}{c}#1\\end{subarray}',1],
100
+
101
+ injlim: ['NamedOp','inj&thinsp;lim'],
102
+ projlim: ['NamedOp','proj&thinsp;lim'],
103
+ varliminf: ['Macro','\\mathop{\\underline{\\mmlToken{mi}{lim}}}'],
104
+ varlimsup: ['Macro','\\mathop{\\overline{\\mmlToken{mi}{lim}}}'],
105
+ varinjlim: ['Macro','\\mathop{\\underrightarrow{\\mmlToken{mi}{lim}}}'],
106
+ varprojlim: ['Macro','\\mathop{\\underleftarrow{\\mmlToken{mi}{lim}}}'],
107
+
108
+ DeclareMathOperator: 'HandleDeclareOp',
109
+ operatorname: 'HandleOperatorName',
110
+ SkipLimits: 'SkipLimits',
111
+
112
+ genfrac: 'Genfrac',
113
+ frac: ['Genfrac',"","","",""],
114
+ tfrac: ['Genfrac',"","","",1],
115
+ dfrac: ['Genfrac',"","","",0],
116
+ binom: ['Genfrac',"(",")","0",""],
117
+ tbinom: ['Genfrac',"(",")","0",1],
118
+ dbinom: ['Genfrac',"(",")","0",0],
119
+
120
+ cfrac: 'CFrac',
121
+
122
+ shoveleft: ['HandleShove',MML.ALIGN.LEFT],
123
+ shoveright: ['HandleShove',MML.ALIGN.RIGHT],
124
+
125
+ xrightarrow: ['xArrow',0x2192,5,6],
126
+ xleftarrow: ['xArrow',0x2190,7,3]
127
+ },
128
+
129
+ environment: {
130
+ align: ['AMSarray',null,true,true, 'rlrlrlrlrlrl',COLS([0,2,0,2,0,2,0,2,0,2,0])],
131
+ 'align*': ['AMSarray',null,false,true, 'rlrlrlrlrlrl',COLS([0,2,0,2,0,2,0,2,0,2,0])],
132
+ multline: ['Multline',null,true],
133
+ 'multline*': ['Multline',null,false],
134
+ split: ['AMSarray',null,false,false,'rl',COLS([0])],
135
+ gather: ['AMSarray',null,true,true, 'c'],
136
+ 'gather*': ['AMSarray',null,false,true, 'c'],
137
+
138
+ alignat: ['AlignAt',null,true,true],
139
+ 'alignat*': ['AlignAt',null,false,true],
140
+ alignedat: ['AlignAt',null,false,false],
141
+
142
+ aligned: ['AlignedAMSArray',null,null,null,'rlrlrlrlrlrl',COLS([0,2,0,2,0,2,0,2,0,2,0]),".5em",'D'],
143
+ gathered: ['AlignedAMSArray',null,null,null,'c',null,".5em",'D'],
144
+
145
+ subarray: ['Array',null,null,null,null,COLS([0]),"0.1em",'S',1],
146
+ smallmatrix: ['Array',null,null,null,'c',COLS([1/3]),".2em",'S',1],
147
+
148
+ 'equation': ['EquationBegin','Equation',true],
149
+ 'equation*': ['EquationBegin','EquationStar',false],
150
+
151
+ eqnarray: ['AMSarray',null,true,true, 'rcl',"0 "+MML.LENGTH.THICKMATHSPACE,".5em"],
152
+ 'eqnarray*': ['AMSarray',null,false,true,'rcl',"0 "+MML.LENGTH.THICKMATHSPACE,".5em"]
153
+ },
154
+
155
+ delimiter: {
156
+ '\\lvert': ['007C',{texClass:MML.TEXCLASS.OPEN}],
157
+ '\\rvert': ['007C',{texClass:MML.TEXCLASS.CLOSE}],
158
+ '\\lVert': ['2016',{texClass:MML.TEXCLASS.OPEN}],
159
+ '\\rVert': ['2016',{texClass:MML.TEXCLASS.CLOSE}]
160
+ }
161
+ },null,true);
162
+
163
+
164
+ /******************************************************************************/
165
+
166
+ TEX.Parse.Augment({
167
+
168
+ /*
169
+ * Add the tag to the environment (to be added to the table row later)
170
+ */
171
+ HandleTag: function (name) {
172
+ var star = this.GetStar();
173
+ var arg = this.trimSpaces(this.GetArgument(name)), tag = arg;
174
+ if (!star) {arg = CONFIG.formatTag(arg)}
175
+ var global = this.stack.global; global.tagID = tag;
176
+ if (global.notags) {
177
+ TEX.Error(["CommandNotAllowedInEnv",
178
+ "%1 not allowed in %2 environment",
179
+ name,global.notags]
180
+ );
181
+ }
182
+ if (global.tag) {TEX.Error(["MultipleCommand","Multiple %1",name])}
183
+ global.tag = MML.mtd.apply(MML,this.InternalMath(arg)).With({id:CONFIG.formatID(tag)});
184
+ },
185
+ HandleNoTag: function (name) {
186
+ if (this.stack.global.tag) {delete this.stack.global.tag}
187
+ this.stack.global.notag = true; // prevent auto-tagging
188
+ },
189
+
190
+ /*
191
+ * Record a label name for a tag
192
+ */
193
+ HandleLabel: function (name) {
194
+ var global = this.stack.global, label = this.GetArgument(name);
195
+ if (label === "") return;
196
+ if (!AMS.refUpdate) {
197
+ if (global.label) {TEX.Error(["MultipleCommand","Multiple %1",name])}
198
+ global.label = label;
199
+ if (AMS.labels[label] || AMS.eqlabels[label])
200
+ {TEX.Error(["MultipleLabel","Label '%1' multiply defined",label])}
201
+ AMS.eqlabels[label] = {tag:"???", id:""}; // will be replaced by tag value later
202
+ }
203
+ },
204
+
205
+ /*
206
+ * Handle a label reference
207
+ */
208
+ HandleRef: function (name,eqref) {
209
+ var label = this.GetArgument(name);
210
+ var ref = AMS.labels[label] || AMS.eqlabels[label];
211
+ if (!ref) {ref = {tag:"???",id:""}; AMS.badref = !AMS.refUpdate}
212
+ var tag = ref.tag; if (eqref) {tag = CONFIG.formatTag(tag)}
213
+ this.Push(MML.mrow.apply(MML,this.InternalMath(tag)).With({
214
+ href:CONFIG.formatURL(ref.id,baseURL), "class":"MathJax_ref"
215
+ }));
216
+ },
217
+
218
+ /*
219
+ * Handle \DeclareMathOperator
220
+ */
221
+ HandleDeclareOp: function (name) {
222
+ var limits = (this.GetStar() ? "" : "\\nolimits\\SkipLimits");
223
+ var cs = this.trimSpaces(this.GetArgument(name));
224
+ if (cs.charAt(0) == "\\") {cs = cs.substr(1)}
225
+ var op = this.GetArgument(name);
226
+ op = op.replace(/\*/g,'\\text{*}').replace(/-/g,'\\text{-}');
227
+ this.setDef(cs, ['Macro', '\\mathop{\\rm '+op+'}'+limits]);
228
+ },
229
+
230
+ HandleOperatorName: function (name) {
231
+ var limits = (this.GetStar() ? "" : "\\nolimits\\SkipLimits");
232
+ var op = this.trimSpaces(this.GetArgument(name));
233
+ op = op.replace(/\*/g,'\\text{*}').replace(/-/g,'\\text{-}');
234
+ this.string = '\\mathop{\\rm '+op+'}'+limits+" "+this.string.slice(this.i);
235
+ this.i = 0;
236
+ },
237
+
238
+ SkipLimits: function (name) {
239
+ var c = this.GetNext(), i = this.i;
240
+ if (c === "\\" && ++this.i && this.GetCS() !== "limits") this.i = i;
241
+ },
242
+
243
+ /*
244
+ * Record presence of \shoveleft and \shoveright
245
+ */
246
+ HandleShove: function (name,shove) {
247
+ var top = this.stack.Top();
248
+ if (top.type !== "multline") {
249
+ TEX.Error(["CommandInMultline",
250
+ "%1 can only appear within the multline environment",name]);
251
+ }
252
+ if (top.data.length) {
253
+ TEX.Error(["CommandAtTheBeginingOfLine",
254
+ "%1 must come at the beginning of the line",name]);
255
+ }
256
+ top.data.shove = shove;
257
+ },
258
+
259
+ /*
260
+ * Handle \cfrac
261
+ */
262
+ CFrac: function (name) {
263
+ var lr = this.trimSpaces(this.GetBrackets(name,"")),
264
+ num = this.GetArgument(name),
265
+ den = this.GetArgument(name);
266
+ var frac = MML.mfrac(TEX.Parse('\\strut\\textstyle{'+num+'}',this.stack.env).mml(),
267
+ TEX.Parse('\\strut\\textstyle{'+den+'}',this.stack.env).mml());
268
+ lr = ({l:MML.ALIGN.LEFT, r:MML.ALIGN.RIGHT,"":""})[lr];
269
+ if (lr == null)
270
+ {TEX.Error(["IllegalAlign","Illegal alignment specified in %1",name])}
271
+ if (lr) {frac.numalign = frac.denomalign = lr}
272
+ this.Push(frac);
273
+ },
274
+
275
+ /*
276
+ * Implement AMS generalized fraction
277
+ */
278
+ Genfrac: function (name,left,right,thick,style) {
279
+ if (left == null) {left = this.GetDelimiterArg(name)}
280
+ if (right == null) {right = this.GetDelimiterArg(name)}
281
+ if (thick == null) {thick = this.GetArgument(name)}
282
+ if (style == null) {style = this.trimSpaces(this.GetArgument(name))}
283
+ var num = this.ParseArg(name);
284
+ var den = this.ParseArg(name);
285
+ var frac = MML.mfrac(num,den);
286
+ if (thick !== "") {frac.linethickness = thick}
287
+ if (left || right) {frac = TEX.fixedFence(left,frac.With({texWithDelims:true}),right)}
288
+ if (style !== "") {
289
+ var STYLE = (["D","T","S","SS"])[style];
290
+ if (STYLE == null)
291
+ {TEX.Error(["BadMathStyleFor","Bad math style for %1",name])}
292
+ frac = MML.mstyle(frac);
293
+ if (STYLE === "D") {frac.displaystyle = true; frac.scriptlevel = 0}
294
+ else {frac.displaystyle = false; frac.scriptlevel = style - 1}
295
+ }
296
+ this.Push(frac);
297
+ },
298
+
299
+ /*
300
+ * Implements multline environment (mostly handled through STACKITEM below)
301
+ */
302
+ Multline: function (begin,numbered) {
303
+ this.Push(begin); this.checkEqnEnv();
304
+ return STACKITEM.multline(numbered,this.stack).With({
305
+ arraydef: {
306
+ displaystyle: true,
307
+ rowspacing: ".5em",
308
+ width: TEX.config.MultLineWidth, columnwidth:"100%",
309
+ side: TEX.config.TagSide,
310
+ minlabelspacing: TEX.config.TagIndent
311
+ }
312
+ });
313
+ },
314
+
315
+ /*
316
+ * Handle AMS aligned environments
317
+ */
318
+ AMSarray: function (begin,numbered,taggable,align,spacing) {
319
+ this.Push(begin); if (taggable) {this.checkEqnEnv()}
320
+ align = align.replace(/[^clr]/g,'').split('').join(' ');
321
+ align = align.replace(/l/g,'left').replace(/r/g,'right').replace(/c/g,'center');
322
+ return STACKITEM.AMSarray(begin.name,numbered,taggable,this.stack).With({
323
+ arraydef: {
324
+ displaystyle: true,
325
+ rowspacing: ".5em",
326
+ columnalign: align,
327
+ columnspacing: (spacing||"1em"),
328
+ rowspacing: "3pt",
329
+ side: TEX.config.TagSide,
330
+ minlabelspacing: TEX.config.TagIndent
331
+ }
332
+ });
333
+ },
334
+
335
+ AlignedAMSArray: function (begin) {
336
+ var align = this.GetBrackets("\\begin{"+begin.name+"}");
337
+ return this.setArrayAlign(this.AMSarray.apply(this,arguments),align);
338
+ },
339
+
340
+ /*
341
+ * Handle alignat environments
342
+ */
343
+ AlignAt: function (begin,numbered,taggable) {
344
+ var n, valign, align = "", spacing = [];
345
+ if (!taggable) {valign = this.GetBrackets("\\begin{"+begin.name+"}")}
346
+ n = this.GetArgument("\\begin{"+begin.name+"}");
347
+ if (n.match(/[^0-9]/)) {
348
+ TEX.Error(["PositiveIntegerArg","Argument to %1 must me a positive integer",
349
+ "\\begin{"+begin.name+"}"]);
350
+ }
351
+ while (n > 0) {align += "rl"; spacing.push("0em 0em"); n--}
352
+ spacing = spacing.join(" ");
353
+ if (taggable) {return this.AMSarray(begin,numbered,taggable,align,spacing)}
354
+ var array = this.AMSarray(begin,numbered,taggable,align,spacing);
355
+ return this.setArrayAlign(array,valign);
356
+ },
357
+
358
+ /*
359
+ * Handle equation environment
360
+ */
361
+ EquationBegin: function (begin,force) {
362
+ this.checkEqnEnv();
363
+ this.stack.global.forcetag = (force && CONFIG.autoNumber !== "none");
364
+ return begin;
365
+ },
366
+ EquationStar: function (begin,row) {
367
+ this.stack.global.tagged = true; // prevent automatic tagging
368
+ return row;
369
+ },
370
+
371
+ /*
372
+ * Check for bad nesting of equation environments
373
+ */
374
+ checkEqnEnv: function () {
375
+ if (this.stack.global.eqnenv)
376
+ {TEX.Error(["ErroneousNestingEq","Erroneous nesting of equation structures"])}
377
+ this.stack.global.eqnenv = true;
378
+ },
379
+
380
+ /*
381
+ * Handle multiple integrals (make a mathop if followed by limits)
382
+ */
383
+ MultiIntegral: function (name,integral) {
384
+ var next = this.GetNext();
385
+ if (next === "\\") {
386
+ var i = this.i; next = this.GetArgument(name); this.i = i;
387
+ if (next === "\\limits") {
388
+ if (name === "\\idotsint") {integral = "\\!\\!\\mathop{\\,\\,"+integral+"}"}
389
+ else {integral = "\\!\\!\\!\\mathop{\\,\\,\\,"+integral+"}"}
390
+ }
391
+ }
392
+ this.string = integral + " " + this.string.slice(this.i);
393
+ this.i = 0;
394
+ },
395
+
396
+ /*
397
+ * Handle stretchable arrows
398
+ */
399
+ xArrow: function (name,chr,l,r) {
400
+ var def = {width: "+"+(l+r)+"mu", lspace: l+"mu"};
401
+ var bot = this.GetBrackets(name),
402
+ top = this.ParseArg(name);
403
+ var arrow = MML.mo(MML.chars(String.fromCharCode(chr))).With({
404
+ stretchy: true, texClass: MML.TEXCLASS.REL
405
+ });
406
+ var mml = MML.munderover(arrow);
407
+ mml.SetData(mml.over,MML.mpadded(top).With(def).With({voffset:".15em"}));
408
+ if (bot) {
409
+ bot = TEX.Parse(bot,this.stack.env).mml()
410
+ mml.SetData(mml.under,MML.mpadded(bot).With(def).With({voffset:"-.24em"}));
411
+ }
412
+ this.Push(mml.With({subsupOK:true}));
413
+ },
414
+
415
+ /*
416
+ * Get a delimiter or empty argument
417
+ */
418
+ GetDelimiterArg: function (name) {
419
+ var c = this.trimSpaces(this.GetArgument(name));
420
+ if (c == "") return null;
421
+ if (c in TEXDEF.delimiter) return c;
422
+ TEX.Error(["MissingOrUnrecognizedDelim","Missing or unrecognized delimiter for %1",name]);
423
+ },
424
+
425
+ /*
426
+ * Get a star following a control sequence name, if any
427
+ */
428
+ GetStar: function () {
429
+ var star = (this.GetNext() === "*");
430
+ if (star) {this.i++}
431
+ return star;
432
+ }
433
+
434
+ });
435
+
436
+ /******************************************************************************/
437
+
438
+ STACKITEM.Augment({
439
+ /*
440
+ * Increment equation number and form tag mtd element
441
+ */
442
+ autoTag: function () {
443
+ var global = this.global;
444
+ if (!global.notag) {
445
+ AMS.number++; global.tagID = CONFIG.formatNumber(AMS.number.toString());
446
+ var mml = TEX.Parse("\\text{"+CONFIG.formatTag(global.tagID)+"}",{}).mml();
447
+ global.tag = MML.mtd(mml).With({id:CONFIG.formatID(global.tagID)});
448
+ }
449
+ },
450
+
451
+ /*
452
+ * Get the tag and record the label, if any
453
+ */
454
+ getTag: function () {
455
+ var global = this.global, tag = global.tag; global.tagged = true;
456
+ if (global.label) {
457
+ if (CONFIG.useLabelIds) {tag.id = CONFIG.formatID(global.label)}
458
+ AMS.eqlabels[global.label] = {tag:global.tagID, id:tag.id};
459
+ }
460
+ //
461
+ // Check for repeated ID's (either in the document or as
462
+ // a previous tag) and find a unique related one. (#240)
463
+ //
464
+ if (document.getElementById(tag.id) || AMS.IDs[tag.id] || AMS.eqIDs[tag.id]) {
465
+ var i = 0, ID;
466
+ do {i++; ID = tag.id+"_"+i}
467
+ while (document.getElementById(ID) || AMS.IDs[ID] || AMS.eqIDs[ID]);
468
+ tag.id = ID; if (global.label) {AMS.eqlabels[global.label].id = ID}
469
+ }
470
+ AMS.eqIDs[tag.id] = 1;
471
+ this.clearTag();
472
+ return tag;
473
+ },
474
+ clearTag: function () {
475
+ var global = this.global;
476
+ delete global.tag; delete global.tagID; delete global.label;
477
+ },
478
+
479
+ /*
480
+ * If the initial child, skipping any initial space or
481
+ * empty braces (TeXAtom with child being an empty inferred row),
482
+ * is an <mo>, precede it by an empty <mi> to force the <mo> to
483
+ * be infix.
484
+ */
485
+ fixInitialMO: function (data) {
486
+ for (var i = 0, m = data.length; i < m; i++) {
487
+ if (data[i] && (data[i].type !== "mspace" &&
488
+ (data[i].type !== "texatom" || (data[i].data[0] && data[i].data[0].data.length)))) {
489
+ if (data[i].isEmbellished()) data.unshift(MML.mi());
490
+ break;
491
+ }
492
+ }
493
+ }
494
+ });
495
+
496
+ /*
497
+ * Implement multline environment via a STACKITEM
498
+ */
499
+ STACKITEM.multline = STACKITEM.array.Subclass({
500
+ type: "multline",
501
+ Init: function (numbered,stack) {
502
+ this.SUPER(arguments).Init.apply(this);
503
+ this.numbered = (numbered && CONFIG.autoNumber !== "none");
504
+ this.save = {notag: stack.global.notag};
505
+ stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
506
+ },
507
+ EndEntry: function () {
508
+ if (this.table.length) {this.fixInitialMO(this.data)}
509
+ var mtd = MML.mtd.apply(MML,this.data);
510
+ if (this.data.shove) {mtd.columnalign = this.data.shove}
511
+ this.row.push(mtd);
512
+ this.data = [];
513
+ },
514
+ EndRow: function () {
515
+ if (this.row.length != 1) {
516
+ TEX.Error(["MultlineRowsOneCol",
517
+ "The rows within the %1 environment must have exactly one column",
518
+ "multline"]);
519
+ }
520
+ this.table.push(this.row); this.row = [];
521
+ },
522
+ EndTable: function () {
523
+ this.SUPER(arguments).EndTable.call(this);
524
+ if (this.table.length) {
525
+ var m = this.table.length-1, i, label = -1;
526
+ if (!this.table[0][0].columnalign) {this.table[0][0].columnalign = MML.ALIGN.LEFT}
527
+ if (!this.table[m][0].columnalign) {this.table[m][0].columnalign = MML.ALIGN.RIGHT}
528
+ if (!this.global.tag && this.numbered) {this.autoTag()}
529
+ if (this.global.tag && !this.global.notags) {
530
+ label = (this.arraydef.side === "left" ? 0 : this.table.length - 1);
531
+ this.table[label] = [this.getTag()].concat(this.table[label]);
532
+ }
533
+ for (i = 0, m = this.table.length; i < m; i++) {
534
+ var mtr = (i === label ? MML.mlabeledtr : MML.mtr);
535
+ this.table[i] = mtr.apply(MML,this.table[i]);
536
+ }
537
+ }
538
+ this.global.notag = this.save.notag;
539
+ }
540
+ });
541
+
542
+ /*
543
+ * Save data about numbering and taging equations, and add
544
+ * tags at the ends of rows.
545
+ */
546
+ STACKITEM.AMSarray = STACKITEM.array.Subclass({
547
+ type: "AMSarray",
548
+ Init: function (name,numbered,taggable,stack) {
549
+ this.SUPER(arguments).Init.apply(this);
550
+ this.numbered = (numbered && CONFIG.autoNumber !== "none");
551
+ this.save = {notags: stack.global.notags, notag: stack.global.notag};
552
+ stack.global.notags = (taggable ? null : name);
553
+ stack.global.tagged = !numbered && !stack.global.forcetag; // prevent automatic tagging in starred environments
554
+ },
555
+ EndEntry: function () {
556
+ if (this.row.length % 2 === 1) {this.fixInitialMO(this.data)}
557
+ this.row.push(MML.mtd.apply(MML,this.data));
558
+ this.data = [];
559
+ },
560
+ EndRow: function () {
561
+ var mtr = MML.mtr;
562
+ if (!this.global.tag && this.numbered) {this.autoTag()}
563
+ if (this.global.tag && !this.global.notags) {
564
+ this.row = [this.getTag()].concat(this.row);
565
+ mtr = MML.mlabeledtr;
566
+ } else {this.clearTag()}
567
+ if (this.numbered) {delete this.global.notag}
568
+ this.table.push(mtr.apply(MML,this.row)); this.row = [];
569
+ },
570
+ EndTable: function () {
571
+ this.SUPER(arguments).EndTable.call(this);
572
+ this.global.notags = this.save.notags;
573
+ this.global.notag = this.save.notag;
574
+ }
575
+ });
576
+
577
+ //
578
+ // Look for \tag on a formula and make an mtable to include it
579
+ //
580
+ STACKITEM.start.Augment({
581
+ oldCheckItem: STACKITEM.start.prototype.checkItem,
582
+ checkItem: function (item) {
583
+ if (item.type === "stop") {
584
+ var mml = this.mmlData(), global = this.global;
585
+ if (AMS.display && !global.tag && !global.tagged && !global.isInner &&
586
+ (CONFIG.autoNumber === "all" || global.forcetag)) {this.autoTag()}
587
+ if (global.tag) {
588
+ var row = [this.getTag(),MML.mtd(mml)];
589
+ var def = {
590
+ side: TEX.config.TagSide,
591
+ minlabelspacing: TEX.config.TagIndent,
592
+ displaystyle: "inherit" // replaced by TeX input jax Translate() function with actual value
593
+ };
594
+ mml = MML.mtable(MML.mlabeledtr.apply(MML,row)).With(def);
595
+ }
596
+ return STACKITEM.mml(mml);
597
+ }
598
+ return this.oldCheckItem.call(this,item);
599
+ }
600
+ });
601
+
602
+ /******************************************************************************/
603
+
604
+ /*
605
+ * Add pre- and post-filters to handle the equation number maintenance.
606
+ */
607
+ TEX.prefilterHooks.Add(function (data) {
608
+ AMS.display = data.display;
609
+ AMS.number = AMS.startNumber; // reset equation numbers (in case the equation restarted)
610
+ AMS.eqlabels = {};
611
+ AMS.eqIDs = {};
612
+ AMS.badref = false;
613
+ if (AMS.refUpdate) {AMS.number = data.script.MathJax.startNumber}
614
+ });
615
+ TEX.postfilterHooks.Add(function (data) {
616
+ data.script.MathJax.startNumber = AMS.startNumber;
617
+ AMS.startNumber = AMS.number; // equation numbers for next equation
618
+ MathJax.Hub.Insert(AMS.IDs,AMS.eqIDs); // save IDs from this equation
619
+ MathJax.Hub.Insert(AMS.labels,AMS.eqlabels); // save labels from this equation
620
+ if (AMS.badref && !data.math.texError) {AMS.refs.push(data.script)} // reprocess later
621
+ },100);
622
+
623
+ MathJax.Hub.Register.MessageHook("Begin Math Input",function () {
624
+ AMS.refs = []; // array of jax with bad references
625
+ AMS.refUpdate = false;
626
+ });
627
+ MathJax.Hub.Register.MessageHook("End Math Input",function (message) {
628
+ if (AMS.refs.length) {
629
+ AMS.refUpdate = true;
630
+ for (var i = 0, m = AMS.refs.length; i < m; i++)
631
+ {AMS.refs[i].MathJax.state = MathJax.ElementJax.STATE.UPDATE}
632
+ return MathJax.Hub.processInput({
633
+ scripts:AMS.refs,
634
+ start: new Date().getTime(),
635
+ i:0, j:0, jax:{}, jaxIDs:[]
636
+ });
637
+ }
638
+ return null;
639
+ });
640
+
641
+ //
642
+ // Clear the equation numbers and labels
643
+ //
644
+ TEX.resetEquationNumbers = function (n,keepLabels) {
645
+ AMS.startNumber = (n || 0);
646
+ if (!keepLabels) {
647
+ AMS.labels = {};
648
+ AMS.IDs = {};
649
+ }
650
+ }
651
+
652
+ /******************************************************************************/
653
+
654
+ MathJax.Hub.Startup.signal.Post("TeX AMSmath Ready");
655
+
656
+ });
657
+
658
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/AMSmath.js");
vendor/MathJax/extensions/TeX/AMSsymbols.js ADDED
@@ -0,0 +1,349 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/AMSsymbols.js
7
+ *
8
+ * Implements macros for accessing the AMS symbol fonts.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2009-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Extension["TeX/AMSsymbols"] = {
28
+ version: "2.7.5"
29
+ };
30
+
31
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
32
+ var MML = MathJax.ElementJax.mml,
33
+ TEXDEF = MathJax.InputJax.TeX.Definitions;
34
+
35
+ TEXDEF.Add({
36
+
37
+ mathchar0mi: {
38
+ // Lowercase Greek letters
39
+ digamma: '03DD',
40
+ varkappa: '03F0',
41
+
42
+ // Uppercase Greek letters
43
+ varGamma: ['0393',{mathvariant: MML.VARIANT.ITALIC}],
44
+ varDelta: ['0394',{mathvariant: MML.VARIANT.ITALIC}],
45
+ varTheta: ['0398',{mathvariant: MML.VARIANT.ITALIC}],
46
+ varLambda: ['039B',{mathvariant: MML.VARIANT.ITALIC}],
47
+ varXi: ['039E',{mathvariant: MML.VARIANT.ITALIC}],
48
+ varPi: ['03A0',{mathvariant: MML.VARIANT.ITALIC}],
49
+ varSigma: ['03A3',{mathvariant: MML.VARIANT.ITALIC}],
50
+ varUpsilon: ['03A5',{mathvariant: MML.VARIANT.ITALIC}],
51
+ varPhi: ['03A6',{mathvariant: MML.VARIANT.ITALIC}],
52
+ varPsi: ['03A8',{mathvariant: MML.VARIANT.ITALIC}],
53
+ varOmega: ['03A9',{mathvariant: MML.VARIANT.ITALIC}],
54
+
55
+ // Hebrew letters
56
+ beth: '2136',
57
+ gimel: '2137',
58
+ daleth: '2138',
59
+
60
+ // Miscellaneous symbols
61
+ // hbar: '0127', // in TeX/jax.js
62
+ backprime: ['2035',{variantForm: true}],
63
+ hslash: '210F',
64
+ varnothing: ['2205',{variantForm: true}],
65
+ blacktriangle: '25B4',
66
+ triangledown: ['25BD',{variantForm: true}],
67
+ blacktriangledown: '25BE',
68
+ square: '25FB',
69
+ Box: '25FB',
70
+ blacksquare: '25FC',
71
+ lozenge: '25CA',
72
+ Diamond: '25CA',
73
+ blacklozenge: '29EB',
74
+ circledS: ['24C8',{mathvariant: MML.VARIANT.NORMAL}],
75
+ bigstar: '2605',
76
+ // angle: '2220', // in TeX/jax.js
77
+ sphericalangle: '2222',
78
+ measuredangle: '2221',
79
+ nexists: '2204',
80
+ complement: '2201',
81
+ mho: '2127',
82
+ eth: ['00F0',{mathvariant: MML.VARIANT.NORMAL}],
83
+ Finv: '2132',
84
+ diagup: '2571',
85
+ Game: '2141',
86
+ diagdown: '2572',
87
+ Bbbk: ['006B',{mathvariant: MML.VARIANT.DOUBLESTRUCK}],
88
+
89
+ yen: '00A5',
90
+ circledR: '00AE',
91
+ checkmark: '2713',
92
+ maltese: '2720'
93
+ },
94
+
95
+ mathchar0mo: {
96
+ // Binary operators
97
+ dotplus: '2214',
98
+ ltimes: '22C9',
99
+ smallsetminus: '2216',
100
+ rtimes: '22CA',
101
+ Cap: '22D2',
102
+ doublecap: '22D2',
103
+ leftthreetimes: '22CB',
104
+ Cup: '22D3',
105
+ doublecup: '22D3',
106
+ rightthreetimes: '22CC',
107
+ barwedge: '22BC',
108
+ curlywedge: '22CF',
109
+ veebar: '22BB',
110
+ curlyvee: '22CE',
111
+ doublebarwedge: '2A5E',
112
+ boxminus: '229F',
113
+ circleddash: '229D',
114
+ boxtimes: '22A0',
115
+ circledast: '229B',
116
+ boxdot: '22A1',
117
+ circledcirc: '229A',
118
+ boxplus: '229E',
119
+ centerdot: ['22C5',{variantForm: true}],
120
+ divideontimes: '22C7',
121
+ intercal: '22BA',
122
+
123
+ // Binary relations
124
+ leqq: '2266',
125
+ geqq: '2267',
126
+ leqslant: '2A7D',
127
+ geqslant: '2A7E',
128
+ eqslantless: '2A95',
129
+ eqslantgtr: '2A96',
130
+ lesssim: '2272',
131
+ gtrsim: '2273',
132
+ lessapprox: '2A85',
133
+ gtrapprox: '2A86',
134
+ approxeq: '224A',
135
+ lessdot: '22D6',
136
+ gtrdot: '22D7',
137
+ lll: '22D8',
138
+ llless: '22D8',
139
+ ggg: '22D9',
140
+ gggtr: '22D9',
141
+ lessgtr: '2276',
142
+ gtrless: '2277',
143
+ lesseqgtr: '22DA',
144
+ gtreqless: '22DB',
145
+ lesseqqgtr: '2A8B',
146
+ gtreqqless: '2A8C',
147
+ doteqdot: '2251',
148
+ Doteq: '2251',
149
+ eqcirc: '2256',
150
+ risingdotseq: '2253',
151
+ circeq: '2257',
152
+ fallingdotseq: '2252',
153
+ triangleq: '225C',
154
+ backsim: '223D',
155
+ thicksim: ['223C',{variantForm: true}],
156
+ backsimeq: '22CD',
157
+ thickapprox: ['2248',{variantForm: true}],
158
+ subseteqq: '2AC5',
159
+ supseteqq: '2AC6',
160
+ Subset: '22D0',
161
+ Supset: '22D1',
162
+ sqsubset: '228F',
163
+ sqsupset: '2290',
164
+ preccurlyeq: '227C',
165
+ succcurlyeq: '227D',
166
+ curlyeqprec: '22DE',
167
+ curlyeqsucc: '22DF',
168
+ precsim: '227E',
169
+ succsim: '227F',
170
+ precapprox: '2AB7',
171
+ succapprox: '2AB8',
172
+ vartriangleleft: '22B2',
173
+ lhd: '22B2',
174
+ vartriangleright: '22B3',
175
+ rhd: '22B3',
176
+ trianglelefteq: '22B4',
177
+ unlhd: '22B4',
178
+ trianglerighteq: '22B5',
179
+ unrhd: '22B5',
180
+ vDash: '22A8',
181
+ Vdash: '22A9',
182
+ Vvdash: '22AA',
183
+ smallsmile: ['2323',{variantForm: true}],
184
+ shortmid: ['2223',{variantForm: true}],
185
+ smallfrown: ['2322',{variantForm: true}],
186
+ shortparallel: ['2225',{variantForm: true}],
187
+ bumpeq: '224F',
188
+ between: '226C',
189
+ Bumpeq: '224E',
190
+ pitchfork: '22D4',
191
+ varpropto: '221D',
192
+ backepsilon: '220D',
193
+ blacktriangleleft: '25C2',
194
+ blacktriangleright: '25B8',
195
+ therefore: '2234',
196
+ because: '2235',
197
+ eqsim: '2242',
198
+ vartriangle: ['25B3',{variantForm: true}],
199
+ Join: '22C8',
200
+
201
+ // Negated relations
202
+ nless: '226E',
203
+ ngtr: '226F',
204
+ nleq: '2270',
205
+ ngeq: '2271',
206
+ nleqslant: ['2A87',{variantForm: true}],
207
+ ngeqslant: ['2A88',{variantForm: true}],
208
+ nleqq: ['2270',{variantForm: true}],
209
+ ngeqq: ['2271',{variantForm: true}],
210
+ lneq: '2A87',
211
+ gneq: '2A88',
212
+ lneqq: '2268',
213
+ gneqq: '2269',
214
+ lvertneqq: ['2268',{variantForm: true}],
215
+ gvertneqq: ['2269',{variantForm: true}],
216
+ lnsim: '22E6',
217
+ gnsim: '22E7',
218
+ lnapprox: '2A89',
219
+ gnapprox: '2A8A',
220
+ nprec: '2280',
221
+ nsucc: '2281',
222
+ npreceq: ['22E0',{variantForm: true}],
223
+ nsucceq: ['22E1',{variantForm: true}],
224
+ precneqq: '2AB5',
225
+ succneqq: '2AB6',
226
+ precnsim: '22E8',
227
+ succnsim: '22E9',
228
+ precnapprox: '2AB9',
229
+ succnapprox: '2ABA',
230
+ nsim: '2241',
231
+ ncong: '2246',
232
+ nshortmid: ['2224',{variantForm: true}],
233
+ nshortparallel: ['2226',{variantForm: true}],
234
+ nmid: '2224',
235
+ nparallel: '2226',
236
+ nvdash: '22AC',
237
+ nvDash: '22AD',
238
+ nVdash: '22AE',
239
+ nVDash: '22AF',
240
+ ntriangleleft: '22EA',
241
+ ntriangleright: '22EB',
242
+ ntrianglelefteq: '22EC',
243
+ ntrianglerighteq: '22ED',
244
+ nsubseteq: '2288',
245
+ nsupseteq: '2289',
246
+ nsubseteqq: ['2288',{variantForm: true}],
247
+ nsupseteqq: ['2289',{variantForm: true}],
248
+ subsetneq: '228A',
249
+ supsetneq: '228B',
250
+ varsubsetneq: ['228A',{variantForm: true}],
251
+ varsupsetneq: ['228B',{variantForm: true}],
252
+ subsetneqq: '2ACB',
253
+ supsetneqq: '2ACC',
254
+ varsubsetneqq: ['2ACB',{variantForm: true}],
255
+ varsupsetneqq: ['2ACC',{variantForm: true}],
256
+
257
+
258
+ // Arrows
259
+ leftleftarrows: '21C7',
260
+ rightrightarrows: '21C9',
261
+ leftrightarrows: '21C6',
262
+ rightleftarrows: '21C4',
263
+ Lleftarrow: '21DA',
264
+ Rrightarrow: '21DB',
265
+ twoheadleftarrow: '219E',
266
+ twoheadrightarrow: '21A0',
267
+ leftarrowtail: '21A2',
268
+ rightarrowtail: '21A3',
269
+ looparrowleft: '21AB',
270
+ looparrowright: '21AC',
271
+ leftrightharpoons: '21CB',
272
+ rightleftharpoons: ['21CC',{variantForm: true}],
273
+ curvearrowleft: '21B6',
274
+ curvearrowright: '21B7',
275
+ circlearrowleft: '21BA',
276
+ circlearrowright: '21BB',
277
+ Lsh: '21B0',
278
+ Rsh: '21B1',
279
+ upuparrows: '21C8',
280
+ downdownarrows: '21CA',
281
+ upharpoonleft: '21BF',
282
+ upharpoonright: '21BE',
283
+ downharpoonleft: '21C3',
284
+ restriction: '21BE',
285
+ multimap: '22B8',
286
+ downharpoonright: '21C2',
287
+ leftrightsquigarrow: '21AD',
288
+ rightsquigarrow: '21DD',
289
+ leadsto: '21DD',
290
+ dashrightarrow: '21E2',
291
+ dashleftarrow: '21E0',
292
+
293
+ // Negated arrows
294
+ nleftarrow: '219A',
295
+ nrightarrow: '219B',
296
+ nLeftarrow: '21CD',
297
+ nRightarrow: '21CF',
298
+ nleftrightarrow: '21AE',
299
+ nLeftrightarrow: '21CE'
300
+ },
301
+
302
+ delimiter: {
303
+ // corners
304
+ "\\ulcorner": '231C',
305
+ "\\urcorner": '231D',
306
+ "\\llcorner": '231E',
307
+ "\\lrcorner": '231F'
308
+ },
309
+
310
+ macros: {
311
+ implies: ['Macro','\\;\\Longrightarrow\\;'],
312
+ impliedby: ['Macro','\\;\\Longleftarrow\\;']
313
+ }
314
+
315
+ },null,true);
316
+
317
+ var REL = MML.mo.OPTYPES.REL;
318
+
319
+ MathJax.Hub.Insert(MML.mo.prototype,{
320
+ OPTABLE: {
321
+ infix: {
322
+ '\u2322': REL, // smallfrown
323
+ '\u2323': REL, // smallsmile
324
+ '\u25B3': REL, // vartriangle
325
+ '\uE006': REL, // nshortmid
326
+ '\uE007': REL, // nshortparallel
327
+ '\uE00C': REL, // lvertneqq
328
+ '\uE00D': REL, // gvertneqq
329
+ '\uE00E': REL, // ngeqq
330
+ '\uE00F': REL, // ngeqslant
331
+ '\uE010': REL, // nleqslant
332
+ '\uE011': REL, // nleqq
333
+ '\uE016': REL, // nsubseteqq
334
+ '\uE017': REL, // varsubsetneqq
335
+ '\uE018': REL, // nsupseteqq
336
+ '\uE019': REL, // varsupsetneqq
337
+ '\uE01A': REL, // varsubsetneq
338
+ '\uE01B': REL, // varsupsetneq
339
+ '\uE04B': REL, // npreceq
340
+ '\uE04F': REL // nsucceq
341
+ }
342
+ }
343
+ });
344
+
345
+ MathJax.Hub.Startup.signal.Post("TeX AMSsymbols Ready");
346
+
347
+ });
348
+
349
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/AMSsymbols.js");
vendor/MathJax/extensions/TeX/HTML.js ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/HTML.js
7
+ *
8
+ * Implements the \href, \class, \style, \cssId macros.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2010-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Extension["TeX/HTML"] = {
28
+ version: "2.7.5"
29
+ };
30
+
31
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
32
+
33
+ var TEX = MathJax.InputJax.TeX;
34
+ var TEXDEF = TEX.Definitions;
35
+
36
+ TEXDEF.Add({
37
+ macros: {
38
+ href: 'HREF_attribute',
39
+ "class": 'CLASS_attribute',
40
+ style: 'STYLE_attribute',
41
+ cssId: 'ID_attribute'
42
+ }
43
+ },null,true);
44
+
45
+ TEX.Parse.Augment({
46
+
47
+ //
48
+ // Implements \href{url}{math}
49
+ //
50
+ HREF_attribute: function (name) {
51
+ var url = this.GetArgument(name),
52
+ arg = this.GetArgumentMML(name);
53
+ this.Push(arg.With({href:url}));
54
+ },
55
+
56
+ //
57
+ // Implements \class{name}{math}
58
+ //
59
+ CLASS_attribute: function (name) {
60
+ var CLASS = this.GetArgument(name),
61
+ arg = this.GetArgumentMML(name);
62
+ if (arg["class"] != null) {CLASS = arg["class"] + " " + CLASS}
63
+ this.Push(arg.With({"class":CLASS}));
64
+ },
65
+
66
+ //
67
+ // Implements \style{style-string}{math}
68
+ //
69
+ STYLE_attribute: function (name) {
70
+ var style = this.GetArgument(name),
71
+ arg = this.GetArgumentMML(name);
72
+ // check that it looks like a style string
73
+ if (arg.style != null) {
74
+ if (style.charAt(style.length-1) !== ";") {style += ";"}
75
+ style = arg.style + " " + style;
76
+ }
77
+ this.Push(arg.With({style: style}));
78
+ },
79
+
80
+ //
81
+ // Implements \cssId{id}{math}
82
+ //
83
+ ID_attribute: function (name) {
84
+ var ID = this.GetArgument(name),
85
+ arg = this.GetArgumentMML(name);
86
+ this.Push(arg.With({id:ID}));
87
+ },
88
+
89
+ //
90
+ // returns an argument that is a single MathML element
91
+ // (in an mrow if necessary)
92
+ //
93
+ GetArgumentMML: function (name) {
94
+ var arg = this.ParseArg(name);
95
+ if (arg.inferred && arg.data.length == 1)
96
+ {arg = arg.data[0]} else {delete arg.inferred}
97
+ return arg;
98
+ }
99
+
100
+ });
101
+
102
+ MathJax.Hub.Startup.signal.Post("TeX HTML Ready");
103
+
104
+ });
105
+
106
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/HTML.js");
vendor/MathJax/extensions/TeX/action.js ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/action.js
7
+ *
8
+ * Implements the \mathtip, \texttip, and \toggle macros, which give
9
+ * access from TeX to the <maction> tag in the MathML that underlies
10
+ * MathJax's internal format.
11
+ *
12
+ * Usage:
13
+ *
14
+ * \mathtip{math}{tip} % use "tip" (in math mode) as tooltip for "math"
15
+ * \texttip{math}{tip} % use "tip" (in text mode) as tooltip for "math"
16
+ * \toggle{math1}{math2}...\endtoggle
17
+ * % show math1, and when clicked, show math2, and so on.
18
+ * % When the last one is clicked, go back to math1.
19
+ *
20
+ * ---------------------------------------------------------------------
21
+ *
22
+ * Copyright (c) 2011-2018 The MathJax Consortium
23
+ *
24
+ * Licensed under the Apache License, Version 2.0 (the "License");
25
+ * you may not use this file except in compliance with the License.
26
+ * You may obtain a copy of the License at
27
+ *
28
+ * http://www.apache.org/licenses/LICENSE-2.0
29
+ *
30
+ * Unless required by applicable law or agreed to in writing, software
31
+ * distributed under the License is distributed on an "AS IS" BASIS,
32
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33
+ * See the License for the specific language governing permissions and
34
+ * limitations under the License.
35
+ */
36
+
37
+ MathJax.Extension["TeX/action"] = {
38
+ version: "2.7.5"
39
+ };
40
+
41
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
42
+ var TEX = MathJax.InputJax.TeX,
43
+ MML = MathJax.ElementJax.mml;
44
+
45
+ //
46
+ // Set up control sequenecs
47
+ //
48
+ TEX.Definitions.Add({
49
+ macros: {
50
+ toggle: 'Toggle',
51
+ mathtip: 'Mathtip',
52
+ texttip: ['Macro','\\mathtip{#1}{\\text{#2}}',2]
53
+ }
54
+ },null,true);
55
+
56
+ TEX.Parse.Augment({
57
+
58
+ //
59
+ // Implement \toggle {math1} {math2} ... \endtoggle
60
+ // (as an <maction actiontype="toggle">)
61
+ //
62
+ Toggle: function (name) {
63
+ var data = [], arg;
64
+ while ((arg = this.GetArgument(name)) !== "\\endtoggle")
65
+ {data.push(TEX.Parse(arg,this.stack.env).mml())}
66
+ this.Push(MML.maction.apply(MML,data).With({actiontype: MML.ACTIONTYPE.TOGGLE}));
67
+ },
68
+
69
+ //
70
+ // Implement \mathtip{math}{tip}
71
+ // (an an <maction actiontype="tooltip">)
72
+ //
73
+ Mathtip: function(name) {
74
+ var arg = this.ParseArg(name), tip = this.ParseArg(name);
75
+ this.Push(MML.maction(arg,tip).With({actiontype: MML.ACTIONTYPE.TOOLTIP}));
76
+ }
77
+ });
78
+
79
+ MathJax.Hub.Startup.signal.Post("TeX action Ready");
80
+
81
+ });
82
+
83
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/action.js");
vendor/MathJax/extensions/TeX/autobold.js ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/autobold.js
7
+ *
8
+ * Adds \boldsymbol around mathematics that appears in a section
9
+ * of an HTML page that is in bold.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2009-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ MathJax.Extension["TeX/autobold"] = {
29
+ version: "2.7.5"
30
+ };
31
+
32
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
33
+ var TEX = MathJax.InputJax.TeX;
34
+
35
+ TEX.prefilterHooks.Add(function (data) {
36
+ var span = data.script.parentNode.insertBefore(document.createElement("span"),data.script);
37
+ span.visibility = "hidden";
38
+ span.style.fontFamily = "Times, serif";
39
+ span.appendChild(document.createTextNode("ABCXYZabcxyz"));
40
+ var W = span.offsetWidth;
41
+ span.style.fontWeight = "bold";
42
+ if (W && span.offsetWidth === W) {data.math = "\\boldsymbol{"+data.math+"}"}
43
+ span.parentNode.removeChild(span);
44
+ });
45
+
46
+ MathJax.Hub.Startup.signal.Post("TeX autobold Ready");
47
+
48
+ });
49
+
50
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/autobold.js");
vendor/MathJax/extensions/TeX/autoload-all.js ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/autoload-all.js
7
+ *
8
+ * Provides pre-defined macros to autoload all the extensions
9
+ * so that all macros that MathJax knows about are available.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2013-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ MathJax.Extension["TeX/autoload-all"] = {
29
+ version: "2.7.5"
30
+ };
31
+
32
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
33
+
34
+ var EXTENSIONS = {
35
+ action: ["mathtip","texttip","toggle"],
36
+ AMSmath: ["mathring","nobreakspace","negmedspace","negthickspace","intI",
37
+ "iiiint","idotsint","dddot","ddddot","sideset","boxed",
38
+ "substack","injlim","projlim","varliminf","varlimsup",
39
+ "varinjlim","varprojlim","DeclareMathOperator","operatorname",
40
+ "genfrac","tfrac","dfrac","binom","tbinom","dbinom","cfrac",
41
+ "shoveleft","shoveright","xrightarrow","xleftarrow"],
42
+ begingroup: ["begingroup","endgroup","gdef","global"],
43
+ cancel: ["cancel","bcancel","xcancel","cancelto"],
44
+ color: ["color","textcolor","colorbox","fcolorbox","definecolor"],
45
+ enclose: ["enclose"],
46
+ extpfeil: ["Newextarrow","xlongequal","xmapsto","xtofrom",
47
+ "xtwoheadleftarrow","xtwoheadrightarrow"],
48
+ mhchem: ["ce","cee","cf"]
49
+ };
50
+
51
+ var ENVIRONMENTS = {
52
+ AMSmath: ["subarray","smallmatrix","equation","equation*"],
53
+ AMScd: ["CD"]
54
+ };
55
+
56
+ var name, i, m, defs = {macros:{}, environment:{}};
57
+
58
+ for (name in EXTENSIONS) {if (EXTENSIONS.hasOwnProperty(name)) {
59
+ if (!MathJax.Extension["TeX/"+name]) {
60
+ var macros = EXTENSIONS[name];
61
+ for (i = 0, m = macros.length; i < m; i++)
62
+ {defs.macros[macros[i]] = ["Extension",name]}
63
+ }
64
+ }}
65
+
66
+ for (name in ENVIRONMENTS) {if (ENVIRONMENTS.hasOwnProperty(name)) {
67
+ if (!MathJax.Extension["TeX/"+name]) {
68
+ var envs = ENVIRONMENTS[name];
69
+ for (i = 0, m = envs.length; i < m; i++)
70
+ {defs.environment[envs[i]] = ["ExtensionEnv",null,name]}
71
+ }
72
+ }}
73
+
74
+ MathJax.InputJax.TeX.Definitions.Add(defs);
75
+
76
+ MathJax.Hub.Startup.signal.Post("TeX autoload-all Ready");
77
+
78
+ });
79
+
80
+ MathJax.Callback.Queue(
81
+ ["Require",MathJax.Ajax,"[MathJax]/extensions/TeX/AMSsymbols.js"],
82
+ ["loadComplete",MathJax.Ajax,"[MathJax]/extensions/TeX/autoload-all.js"]
83
+ );
vendor/MathJax/extensions/TeX/bbox.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/bbox.js
7
+ *
8
+ * This file implements the \bbox macro, which creates an box that
9
+ * can be styled (for background colors, and so on). You can include
10
+ * an optional dimension that tells how much extra padding to include
11
+ * around the bounding box for the mathematics, or a color specification
12
+ * for the background color to use, or both. E.g.,
13
+ *
14
+ * \bbox[2pt]{x+y} % an invisible box around x+y with 2pt of extra space
15
+ * \bbox[green]{x+y} % a green box around x+y
16
+ * \bbox[green,2pt]{x+y} % a green box with 2pt of extra space
17
+ *
18
+ * You can also specify style attributes, for example
19
+ *
20
+ * \bbox[red,border:3px solid blue,5px]{x+y}
21
+ *
22
+ * would give a red background with a 3px solid blue border that has 5px
23
+ * of padding between the border and the mathematics. Note that not all
24
+ * output formats support the style specifications. In particular, the
25
+ * NativeMML output depends on the browser to render the attributes, and
26
+ * not all MathML renderers will honor them (e.g., MathPlayer2 doesn't
27
+ * render border styles).
28
+ *
29
+ * This file will be loaded automatically when \bbox is first used.
30
+ *
31
+ * ---------------------------------------------------------------------
32
+ *
33
+ * Copyright (c) 2011-2018 The MathJax Consortium
34
+ *
35
+ * Licensed under the Apache License, Version 2.0 (the "License");
36
+ * you may not use this file except in compliance with the License.
37
+ * You may obtain a copy of the License at
38
+ *
39
+ * http://www.apache.org/licenses/LICENSE-2.0
40
+ *
41
+ * Unless required by applicable law or agreed to in writing, software
42
+ * distributed under the License is distributed on an "AS IS" BASIS,
43
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44
+ * See the License for the specific language governing permissions and
45
+ * limitations under the License.
46
+ */
47
+
48
+ MathJax.Extension["TeX/bbox"] = {
49
+ version: "2.7.5"
50
+ };
51
+
52
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
53
+
54
+ var TEX = MathJax.InputJax.TeX,
55
+ MML = MathJax.ElementJax.mml;
56
+
57
+ TEX.Definitions.Add({macros: {bbox: "BBox"}},null,true);
58
+
59
+ TEX.Parse.Augment({
60
+ BBox: function (name) {
61
+ var bbox = this.GetBrackets(name,""),
62
+ math = this.ParseArg(name);
63
+ var parts = bbox.split(/,/), def, background, style;
64
+ for (var i = 0, m = parts.length; i < m; i++) {
65
+ var part = parts[i].replace(/^\s+/,'').replace(/\s+$/,'');
66
+ var match = part.match(/^(\.\d+|\d+(\.\d*)?)(pt|em|ex|mu|px|in|cm|mm)$/);
67
+ if (match) {
68
+ if (def)
69
+ {TEX.Error(["MultipleBBoxProperty","%1 specified twice in %2","Padding",name])}
70
+ var pad = this.BBoxPadding(match[1]+match[3]);
71
+ if (pad) def = {height:"+"+pad, depth:"+"+pad, lspace:pad, width:"+"+(2*match[1])+match[3]};
72
+ } else if (part.match(/^([a-z0-9]+|\#[0-9a-f]{6}|\#[0-9a-f]{3})$/i)) {
73
+ if (background)
74
+ {TEX.Error(["MultipleBBoxProperty","%1 specified twice in %2","Background",name])}
75
+ background = part;
76
+ } else if (part.match(/^[-a-z]+:/i)) {
77
+ if (style)
78
+ {TEX.Error(["MultipleBBoxProperty","%1 specified twice in %2", "Style",name])}
79
+ style = this.BBoxStyle(part);
80
+ } else if (part !== "") {
81
+ TEX.Error(
82
+ ["InvalidBBoxProperty",
83
+ "'%1' doesn't look like a color, a padding dimension, or a style",
84
+ part]
85
+ );
86
+ }
87
+ }
88
+ if (def) {math = MML.mpadded(math).With(def)}
89
+ if (background || style) {
90
+ math = MML.mstyle(math).With({mathbackground:background, style:style});
91
+ }
92
+ this.Push(math);
93
+ },
94
+ BBoxStyle: function (styles) {return styles},
95
+ BBoxPadding: function (pad) {return pad}
96
+ });
97
+
98
+ MathJax.Hub.Startup.signal.Post("TeX bbox Ready");
99
+
100
+ });
101
+
102
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/bbox.js");
vendor/MathJax/extensions/TeX/begingroup.js ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/begingroup.js
7
+ *
8
+ * Implements \begingroup and \endgroup commands that make local
9
+ * definitions possible and are removed when the \endgroup occurs.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2011-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ MathJax.Extension["TeX/begingroup"] = {
29
+ version: "2.7.5"
30
+ };
31
+
32
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
33
+
34
+ var TEX = MathJax.InputJax.TeX,
35
+ TEXDEF = TEX.Definitions;
36
+
37
+ /****************************************************/
38
+
39
+ //
40
+ // A namespace for localizing macros and environments
41
+ // (\begingroup and \endgroup create and destroy these)
42
+ //
43
+ var NSFRAME = MathJax.Object.Subclass({
44
+ macros: null, // the local macro definitions
45
+ environments: null, // the local environments
46
+ Init: function (macros,environments) {
47
+ this.macros = (macros || {});
48
+ this.environments = (environments || {});
49
+ },
50
+ //
51
+ // Find a macro or environment by name
52
+ //
53
+ Find: function (name,type) {if (this[type].hasOwnProperty(name)) {return this[type][name]}},
54
+ //
55
+ // Define or remove a macro or environment
56
+ //
57
+ Def: function (name,value,type) {this[type][name] = value},
58
+ Undef: function (name,type) {delete this[type][name]},
59
+ //
60
+ // Merge two namespaces (used when the equation namespace is combined with the root one)
61
+ //
62
+ Merge: function (frame) {
63
+ MathJax.Hub.Insert(this.macros,frame.macros);
64
+ MathJax.Hub.Insert(this.environments,frame.environments);
65
+ },
66
+ //
67
+ // Move global macros to the stack (globally) and remove from the frame
68
+ //
69
+ MergeGlobals: function (stack) {
70
+ var macros = this.macros;
71
+ for (var cs in macros) {if (macros.hasOwnProperty(cs) && macros[cs].global) {
72
+ stack.Def(cs,macros[cs],"macros",true);
73
+ delete macros[cs].global; delete macros[cs];
74
+ }}
75
+ },
76
+ //
77
+ // Clear the macro and environment lists
78
+ // (but not global macros unless "all" is true)
79
+ //
80
+ Clear: function (all) {
81
+ this.environments = {};
82
+ if (all) {this.macros = {}} else {
83
+ var macros = this.macros;
84
+ for (var cs in macros) {
85
+ if (macros.hasOwnProperty(cs) && !macros[cs].global) {delete macros[cs]}
86
+ }
87
+ }
88
+ return this;
89
+ }
90
+ });
91
+
92
+ /****************************************************/
93
+
94
+ //
95
+ // A Stack of namespace frames
96
+ //
97
+ var NSSTACK = TEX.nsStack = MathJax.Object.Subclass({
98
+ stack: null, // the namespace frames
99
+ top: 0, // the current top one (we don't pop for real until the equation completes)
100
+ isEqn: false, // true if this is the equation stack (not the global one)
101
+ //
102
+ // Set up the initial stack frame
103
+ //
104
+ Init: function (eqn) {
105
+ this.isEqn = eqn; this.stack = [];
106
+ if (!eqn) {this.Push(NSFRAME(TEXDEF.macros,TEXDEF.environment))}
107
+ else {this.Push(NSFRAME())}
108
+ },
109
+ //
110
+ // Define a macro or environment in the top frame
111
+ //
112
+ Def: function (name,value,type,global) {
113
+ var n = this.top-1;
114
+ if (global) {
115
+ //
116
+ // Define global macros in the base frame and remove that cs
117
+ // from all other frames. Mark the global ones in equations
118
+ // so they can be made global when merged with the root stack.
119
+ //
120
+ while (n > 0) {this.stack[n].Undef(name,type); n--}
121
+ if (!MathJax.Object.isArray(value)) {value = [value]}
122
+ if (this.isEqn) {value.global = true}
123
+ }
124
+ this.stack[n].Def(name,value,type);
125
+ },
126
+ //
127
+ // Push a new namespace frame on the stack
128
+ //
129
+ Push: function (frame) {
130
+ this.stack.push(frame);
131
+ this.top = this.stack.length;
132
+ },
133
+ //
134
+ // Pop the top stack frame
135
+ // (if it is the root, just keep track of the pop so we can
136
+ // reset it if the equation is reprocessed)
137
+ //
138
+ Pop: function () {
139
+ var top;
140
+ if (this.top > 1) {
141
+ top = this.stack[--this.top];
142
+ if (this.isEqn) {this.stack.pop()}
143
+ } else if (this.isEqn) {
144
+ this.Clear();
145
+ }
146
+ return top;
147
+ },
148
+ //
149
+ // Search the stack from top to bottom for the first
150
+ // definition of the given control sequence in the given type
151
+ //
152
+ Find: function (name,type) {
153
+ for (var i = this.top-1; i >= 0; i--) {
154
+ var def = this.stack[i].Find(name,type);
155
+ if (def) {return def}
156
+ }
157
+ return null;
158
+ },
159
+ //
160
+ // Combine the equation stack with the global one
161
+ // (The bottom frame of the equation goes with the top frame of the global one,
162
+ // and the remainder are pushed on the global stack, truncated to the
163
+ // position where items were poped from it.)
164
+ //
165
+ Merge: function (stack) {
166
+ stack.stack[0].MergeGlobals(this);
167
+ this.stack[this.top-1].Merge(stack.stack[0]);
168
+ var data = [this.top,this.stack.length-this.top].concat(stack.stack.slice(1));
169
+ this.stack.splice.apply(this.stack,data);
170
+ this.top = this.stack.length;
171
+ },
172
+ //
173
+ // Put back the temporarily poped items
174
+ //
175
+ Reset: function () {this.top = this.stack.length},
176
+ //
177
+ // Clear the stack and start with a blank frame
178
+ //
179
+ Clear: function (all) {
180
+ this.stack = [this.stack[0].Clear()];
181
+ this.top = this.stack.length;
182
+ }
183
+ },{
184
+ nsFrame: NSFRAME
185
+ });
186
+
187
+ /****************************************************/
188
+
189
+ //
190
+ // Define the new macros
191
+ //
192
+ TEXDEF.Add({
193
+ macros: {
194
+ begingroup: "BeginGroup",
195
+ endgroup: "EndGroup",
196
+ global: "Global",
197
+ gdef: ["Macro","\\global\\def"]
198
+ }
199
+ },null,true);
200
+
201
+ TEX.Parse.Augment({
202
+ //
203
+ // Implement \begingroup
204
+ //
205
+ BeginGroup: function (name) {
206
+ TEX.eqnStack.Push(NSFRAME());
207
+ },
208
+ //
209
+ // Implements \endgroup
210
+ //
211
+ EndGroup: function (name) {
212
+ //
213
+ // If the equation has pushed frames, pop one,
214
+ // Otherwise clear the equation stack and pop the top global one
215
+ //
216
+ if (TEX.eqnStack.top > 1) {
217
+ TEX.eqnStack.Pop();
218
+ } else if (TEX.rootStack.top === 1) {
219
+ TEX.Error(["ExtraEndMissingBegin","Extra %1 or missing \\begingroup",name]);
220
+ } else {
221
+ TEX.eqnStack.Clear();
222
+ TEX.rootStack.Pop();
223
+ }
224
+ },
225
+
226
+ //
227
+ // Replace the original routines with ones that looks through the
228
+ // equation and root stacks for the given name
229
+ //
230
+ csFindMacro: function (name) {
231
+ return (TEX.eqnStack.Find(name,"macros") || TEX.rootStack.Find(name,"macros"));
232
+ },
233
+ envFindName: function (name) {
234
+ return (TEX.eqnStack.Find(name,"environments") || TEX.rootStack.Find(name,"environments"));
235
+ },
236
+
237
+ //
238
+ // Modify the way macros and environments are defined
239
+ // to make them go into the equation namespace stack
240
+ //
241
+ setDef: function (name,value) {
242
+ value.isUser = true;
243
+ TEX.eqnStack.Def(name,value,"macros",this.stack.env.isGlobal);
244
+ delete this.stack.env.isGlobal;
245
+ },
246
+ setEnv: function (name,value) {
247
+ value.isUser = true;
248
+ TEX.eqnStack.Def(name,value,"environments")
249
+ },
250
+
251
+ //
252
+ // Implement \global (for \global\let, \global\def and \global\newcommand)
253
+ //
254
+ Global: function (name) {
255
+ var i = this.i; var cs = this.GetCSname(name); this.i = i;
256
+ if (cs !== "let" && cs !== "def" && cs !== "newcommand" &&
257
+ cs !== "DeclareMathOperator" && cs !== "Newextarrow") {
258
+ TEX.Error(["GlobalNotFollowedBy",
259
+ "%1 not followed by \\let, \\def, or \\newcommand",name]);
260
+ }
261
+ this.stack.env.isGlobal = true;
262
+ }
263
+ });
264
+
265
+ /****************************************************/
266
+
267
+ TEX.rootStack = NSSTACK(); // the global namespace stack
268
+ TEX.eqnStack = NSSTACK(true); // the equation stack
269
+
270
+ //
271
+ // Reset the global stack and clear the equation stack
272
+ // (this gets us back to the initial stack state as it was
273
+ // before the equation was first processed, in case the equation
274
+ // get restarted due to an autoloaded file)
275
+ //
276
+ TEX.prefilterHooks.Add(function () {TEX.rootStack.Reset(); TEX.eqnStack.Clear(true)});
277
+
278
+ //
279
+ // We only get here if there were no errors and the equation is fully
280
+ // processed (all restarts are complete). So we merge the equation
281
+ // stack into the global stack, thus making the changes from this
282
+ // equation permanent.
283
+ //
284
+ TEX.postfilterHooks.Add(function () {TEX.rootStack.Merge(TEX.eqnStack)});
285
+
286
+ /*********************************************************/
287
+
288
+ MathJax.Hub.Startup.signal.Post("TeX begingroup Ready");
289
+
290
+ });
291
+
292
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/begingroup.js");
vendor/MathJax/extensions/TeX/boldsymbol.js ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/boldsymbol.js
7
+ *
8
+ * Implements the \boldsymbol{...} command to make bold
9
+ * versions of all math characters (not just variables).
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2009-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+ MathJax.Extension["TeX/boldsymbol"] = {
29
+ version: "2.7.5"
30
+ };
31
+
32
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
33
+
34
+ var MML = MathJax.ElementJax.mml;
35
+ var TEX = MathJax.InputJax.TeX;
36
+ var TEXDEF = TEX.Definitions;
37
+
38
+ var BOLDVARIANT = {};
39
+ BOLDVARIANT[MML.VARIANT.NORMAL] = MML.VARIANT.BOLD;
40
+ BOLDVARIANT[MML.VARIANT.ITALIC] = MML.VARIANT.BOLDITALIC;
41
+ BOLDVARIANT[MML.VARIANT.FRAKTUR] = MML.VARIANT.BOLDFRAKTUR;
42
+ BOLDVARIANT[MML.VARIANT.SCRIPT] = MML.VARIANT.BOLDSCRIPT;
43
+ BOLDVARIANT[MML.VARIANT.SANSSERIF] = MML.VARIANT.BOLDSANSSERIF;
44
+ BOLDVARIANT["-tex-caligraphic"] = "-tex-caligraphic-bold";
45
+ BOLDVARIANT["-tex-oldstyle"] = "-tex-oldstyle-bold";
46
+
47
+ TEXDEF.Add({macros: {boldsymbol: 'Boldsymbol'}},null,true);
48
+
49
+ TEX.Parse.Augment({
50
+ mmlToken: function (token) {
51
+ if (this.stack.env.boldsymbol) {
52
+ var variant = token.Get("mathvariant");
53
+ if (variant == null) {token.mathvariant = MML.VARIANT.BOLD}
54
+ else {token.mathvariant = (BOLDVARIANT[variant]||variant)}
55
+ }
56
+ return token;
57
+ },
58
+
59
+ Boldsymbol: function (name) {
60
+ var boldsymbol = this.stack.env.boldsymbol,
61
+ font = this.stack.env.font;
62
+ this.stack.env.boldsymbol = true;
63
+ this.stack.env.font = null;
64
+ var mml = this.ParseArg(name);
65
+ this.stack.env.font = font;
66
+ this.stack.env.boldsymbol = boldsymbol;
67
+ this.Push(mml);
68
+ }
69
+ });
70
+
71
+ MathJax.Hub.Startup.signal.Post("TeX boldsymbol Ready");
72
+
73
+ });
74
+
75
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/boldsymbol.js");
vendor/MathJax/extensions/TeX/cancel.js ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/cancel.js
7
+ *
8
+ * Implements the \cancel, \bcancel, \xcancel, and \cancelto macros.
9
+ *
10
+ * Usage:
11
+ *
12
+ * \cancel{math} % strikeout math from lower left to upper right
13
+ * \bcancel{math} % strikeout from upper left to lower right
14
+ * \xcancel{math} % strikeout with an X
15
+ * \cancelto{value}{math} % strikeout with arrow going to value
16
+ *
17
+ * ---------------------------------------------------------------------
18
+ *
19
+ * Copyright (c) 2011-2018 The MathJax Consortium
20
+ *
21
+ * Licensed under the Apache License, Version 2.0 (the "License");
22
+ * you may not use this file except in compliance with the License.
23
+ * You may obtain a copy of the License at
24
+ *
25
+ * http://www.apache.org/licenses/LICENSE-2.0
26
+ *
27
+ * Unless required by applicable law or agreed to in writing, software
28
+ * distributed under the License is distributed on an "AS IS" BASIS,
29
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
+ * See the License for the specific language governing permissions and
31
+ * limitations under the License.
32
+ */
33
+
34
+ MathJax.Extension["TeX/cancel"] = {
35
+ version: "2.7.5",
36
+
37
+ //
38
+ // The attributes allowed in \enclose{notation}[attributes]{math}
39
+ //
40
+ ALLOWED: {
41
+ color: 1, mathcolor: 1,
42
+ background: 1, mathbackground: 1,
43
+ padding: 1,
44
+ thickness: 1
45
+ }
46
+ };
47
+
48
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
49
+ var TEX = MathJax.InputJax.TeX,
50
+ MML = MathJax.ElementJax.mml,
51
+ CANCEL = MathJax.Extension["TeX/cancel"];
52
+
53
+ CANCEL.setAttributes = function (def,attr) {
54
+ if (attr !== "") {
55
+ attr = attr.replace(/ /g,"").split(/,/);
56
+ for (var i = 0, m = attr.length; i < m; i++) {
57
+ var keyvalue = attr[i].split(/[:=]/);
58
+ if (CANCEL.ALLOWED[keyvalue[0]]) {
59
+ if (keyvalue[1] === "true") {keyvalue[1] = true}
60
+ if (keyvalue[1] === "false") {keyvalue[1] = false}
61
+ def[keyvalue[0]] = keyvalue[1];
62
+ }
63
+ }
64
+ }
65
+ return def;
66
+ };
67
+
68
+ //
69
+ // Set up macros
70
+ //
71
+ TEX.Definitions.Add({
72
+ macros: {
73
+ cancel: ['Cancel',MML.NOTATION.UPDIAGONALSTRIKE],
74
+ bcancel: ['Cancel',MML.NOTATION.DOWNDIAGONALSTRIKE],
75
+ xcancel: ['Cancel',MML.NOTATION.UPDIAGONALSTRIKE+" "+MML.NOTATION.DOWNDIAGONALSTRIKE],
76
+ cancelto: 'CancelTo'
77
+ }
78
+ },null,true);
79
+
80
+ TEX.Parse.Augment({
81
+ //
82
+ // Implement \cancel[attributes]{math},
83
+ // \bcancel[attributes]{math}, and
84
+ // \xcancel[attributes]{math}
85
+ //
86
+ Cancel: function(name,notation) {
87
+ var attr = this.GetBrackets(name,""), math = this.ParseArg(name);
88
+ var def = CANCEL.setAttributes({notation: notation},attr);
89
+ this.Push(MML.menclose(math).With(def));
90
+ },
91
+
92
+ //
93
+ // Implement \cancelto{value}[attributes]{math}
94
+ //
95
+ CancelTo: function(name,notation) {
96
+ var value = this.ParseArg(name),
97
+ attr = this.GetBrackets(name,""),
98
+ math = this.ParseArg(name);
99
+ var def = CANCEL.setAttributes({notation: MML.NOTATION.UPDIAGONALSTRIKE+" "+MML.NOTATION.UPDIAGONALARROW},attr);
100
+ value = MML.mpadded(value).With({depth:"-.1em",height:"+.1em",voffset:".1em"});
101
+ this.Push(MML.msup(MML.menclose(math).With(def),value));
102
+ }
103
+
104
+ });
105
+
106
+ MathJax.Hub.Startup.signal.Post("TeX cancel Ready");
107
+
108
+ });
109
+
110
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/cancel.js");
vendor/MathJax/extensions/TeX/color.js ADDED
@@ -0,0 +1,281 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/color.js
7
+ *
8
+ * Implements LaTeX-compatible \color macro rather than MathJax's original
9
+ * (non-standard) version. It includes the rgb, RGB, gray, and named color
10
+ * models, and the \textcolor, \definecolor, \colorbox, and \fcolorbox
11
+ * macros.
12
+ *
13
+ * ---------------------------------------------------------------------
14
+ *
15
+ * Copyright (c) 2011-2018 The MathJax Consortium
16
+ *
17
+ * Licensed under the Apache License, Version 2.0 (the "License");
18
+ * you may not use this file except in compliance with the License.
19
+ * You may obtain a copy of the License at
20
+ *
21
+ * http://www.apache.org/licenses/LICENSE-2.0
22
+ *
23
+ * Unless required by applicable law or agreed to in writing, software
24
+ * distributed under the License is distributed on an "AS IS" BASIS,
25
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ * See the License for the specific language governing permissions and
27
+ * limitations under the License.
28
+ */
29
+
30
+ //
31
+ // The configuration defaults, augmented by the user settings
32
+ //
33
+ MathJax.Extension["TeX/color"] = {
34
+ version: "2.7.5",
35
+
36
+ config: MathJax.Hub.CombineConfig("TeX.color",{
37
+ padding: "5px",
38
+ border: "2px"
39
+ }),
40
+
41
+ colors: {
42
+ Apricot: "#FBB982",
43
+ Aquamarine: "#00B5BE",
44
+ Bittersweet: "#C04F17",
45
+ Black: "#221E1F",
46
+ Blue: "#2D2F92",
47
+ BlueGreen: "#00B3B8",
48
+ BlueViolet: "#473992",
49
+ BrickRed: "#B6321C",
50
+ Brown: "#792500",
51
+ BurntOrange: "#F7921D",
52
+ CadetBlue: "#74729A",
53
+ CarnationPink: "#F282B4",
54
+ Cerulean: "#00A2E3",
55
+ CornflowerBlue: "#41B0E4",
56
+ Cyan: "#00AEEF",
57
+ Dandelion: "#FDBC42",
58
+ DarkOrchid: "#A4538A",
59
+ Emerald: "#00A99D",
60
+ ForestGreen: "#009B55",
61
+ Fuchsia: "#8C368C",
62
+ Goldenrod: "#FFDF42",
63
+ Gray: "#949698",
64
+ Green: "#00A64F",
65
+ GreenYellow: "#DFE674",
66
+ JungleGreen: "#00A99A",
67
+ Lavender: "#F49EC4",
68
+ LimeGreen: "#8DC73E",
69
+ Magenta: "#EC008C",
70
+ Mahogany: "#A9341F",
71
+ Maroon: "#AF3235",
72
+ Melon: "#F89E7B",
73
+ MidnightBlue: "#006795",
74
+ Mulberry: "#A93C93",
75
+ NavyBlue: "#006EB8",
76
+ OliveGreen: "#3C8031",
77
+ Orange: "#F58137",
78
+ OrangeRed: "#ED135A",
79
+ Orchid: "#AF72B0",
80
+ Peach: "#F7965A",
81
+ Periwinkle: "#7977B8",
82
+ PineGreen: "#008B72",
83
+ Plum: "#92268F",
84
+ ProcessBlue: "#00B0F0",
85
+ Purple: "#99479B",
86
+ RawSienna: "#974006",
87
+ Red: "#ED1B23",
88
+ RedOrange: "#F26035",
89
+ RedViolet: "#A1246B",
90
+ Rhodamine: "#EF559F",
91
+ RoyalBlue: "#0071BC",
92
+ RoyalPurple: "#613F99",
93
+ RubineRed: "#ED017D",
94
+ Salmon: "#F69289",
95
+ SeaGreen: "#3FBC9D",
96
+ Sepia: "#671800",
97
+ SkyBlue: "#46C5DD",
98
+ SpringGreen: "#C6DC67",
99
+ Tan: "#DA9D76",
100
+ TealBlue: "#00AEB3",
101
+ Thistle: "#D883B7",
102
+ Turquoise: "#00B4CE",
103
+ Violet: "#58429B",
104
+ VioletRed: "#EF58A0",
105
+ White: "#FFFFFF",
106
+ WildStrawberry: "#EE2967",
107
+ Yellow: "#FFF200",
108
+ YellowGreen: "#98CC70",
109
+ YellowOrange: "#FAA21A"
110
+ },
111
+
112
+ /*
113
+ * Look up a color based on its model and definition
114
+ */
115
+ getColor: function (model,def) {
116
+ if (!model) {model = "named"}
117
+ var fn = this["get_"+model];
118
+ if (!fn) {this.TEX.Error(["UndefinedColorModel","Color model '%1' not defined",model])}
119
+ return fn.call(this,def);
120
+ },
121
+
122
+ /*
123
+ * Get an rgb color
124
+ */
125
+ get_rgb: function (rgb) {
126
+ rgb = rgb.replace(/^\s+/,"").replace(/\s+$/,"").split(/\s*,\s*/); var RGB = "#";
127
+ if (rgb.length !== 3)
128
+ {this.TEX.Error(["ModelArg1","Color values for the %1 model require 3 numbers","rgb"])}
129
+ for (var i = 0; i < 3; i++) {
130
+ if (!rgb[i].match(/^(\d+(\.\d*)?|\.\d+)$/))
131
+ {this.TEX.Error(["InvalidDecimalNumber","Invalid decimal number"])}
132
+ var n = parseFloat(rgb[i]);
133
+ if (n < 0 || n > 1) {
134
+ this.TEX.Error(["ModelArg2",
135
+ "Color values for the %1 model must be between %2 and %3",
136
+ "rgb",0,1]);
137
+ }
138
+ n = Math.floor(n*255).toString(16); if (n.length < 2) {n = "0"+n}
139
+ RGB += n;
140
+ }
141
+ return RGB;
142
+ },
143
+
144
+ /*
145
+ * Get an RGB color
146
+ */
147
+ get_RGB: function (rgb) {
148
+ rgb = rgb.replace(/^\s+/,"").replace(/\s+$/,"").split(/\s*,\s*/); var RGB = "#";
149
+ if (rgb.length !== 3)
150
+ {this.TEX.Error(["ModelArg1","Color values for the %1 model require 3 numbers","RGB"])}
151
+ for (var i = 0; i < 3; i++) {
152
+ if (!rgb[i].match(/^\d+$/))
153
+ {this.TEX.Error(["InvalidNumber","Invalid number"])}
154
+ var n = parseInt(rgb[i]);
155
+ if (n > 255) {
156
+ this.TEX.Error(["ModelArg2",
157
+ "Color values for the %1 model must be between %2 and %3",
158
+ "RGB",0,255]);
159
+ }
160
+ n = n.toString(16); if (n.length < 2) {n = "0"+n}
161
+ RGB += n;
162
+ }
163
+ return RGB;
164
+ },
165
+
166
+ /*
167
+ * Get a gray-scale value
168
+ */
169
+ get_gray: function (gray) {
170
+ if (!gray.match(/^\s*(\d+(\.\d*)?|\.\d+)\s*$/))
171
+ {this.TEX.Error(["InvalidDecimalNumber","Invalid decimal number"])}
172
+ var n = parseFloat(gray);
173
+ if (n < 0 || n > 1) {
174
+ this.TEX.Error(["ModelArg2",
175
+ "Color values for the %1 model must be between %2 and %3",
176
+ "gray",0,1]);
177
+ }
178
+ n = Math.floor(n*255).toString(16); if (n.length < 2) {n = "0"+n}
179
+ return "#"+n+n+n;
180
+ },
181
+
182
+ /*
183
+ * Get a named value
184
+ */
185
+ get_named: function (name) {
186
+ if (this.colors.hasOwnProperty(name)) {return this.colors[name]}
187
+ return name;
188
+ },
189
+
190
+ padding: function () {
191
+ var pad = "+"+this.config.padding;
192
+ var unit = this.config.padding.replace(/^.*?([a-z]*)$/,"$1");
193
+ var pad2 = "+"+(2*parseFloat(pad))+unit;
194
+ return {width:pad2, height:pad, depth:pad, lspace:this.config.padding};
195
+ }
196
+
197
+ };
198
+
199
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
200
+ var TEX = MathJax.InputJax.TeX,
201
+ MML = MathJax.ElementJax.mml;
202
+ var STACKITEM = TEX.Stack.Item;
203
+ var COLOR = MathJax.Extension["TeX/color"];
204
+
205
+ COLOR.TEX = TEX; // for reference in getColor above
206
+
207
+ TEX.Definitions.Add({
208
+ macros: {
209
+ color: "Color",
210
+ textcolor: "TextColor",
211
+ definecolor: "DefineColor",
212
+ colorbox: "ColorBox",
213
+ fcolorbox: "fColorBox"
214
+ }
215
+ },null,true);
216
+
217
+ TEX.Parse.Augment({
218
+
219
+ //
220
+ // Override \color macro definition
221
+ //
222
+ Color: function (name) {
223
+ var model = this.GetBrackets(name),
224
+ color = this.GetArgument(name);
225
+ color = COLOR.getColor(model,color);
226
+ var mml = STACKITEM.style().With({styles:{mathcolor:color}});
227
+ this.stack.env.color = color;
228
+ this.Push(mml);
229
+ },
230
+
231
+ TextColor: function (name) {
232
+ var model = this.GetBrackets(name),
233
+ color = this.GetArgument(name);
234
+ color = COLOR.getColor(model,color);
235
+ var old = this.stack.env.color; this.stack.env.color = color;
236
+ var math = this.ParseArg(name);
237
+ if (old) {this.stack.env.color} else {delete this.stack.env.color}
238
+ this.Push(MML.mstyle(math).With({mathcolor: color}));
239
+ },
240
+
241
+ //
242
+ // Define the \definecolor macro
243
+ //
244
+ DefineColor: function (name) {
245
+ var cname = this.GetArgument(name),
246
+ model = this.GetArgument(name),
247
+ def = this.GetArgument(name);
248
+ COLOR.colors[cname] = COLOR.getColor(model,def);
249
+ },
250
+
251
+ //
252
+ // Produce a text box with a colored background
253
+ //
254
+ ColorBox: function (name) {
255
+ var cname = this.GetArgument(name),
256
+ arg = this.InternalMath(this.GetArgument(name));
257
+ this.Push(MML.mpadded.apply(MML,arg).With({
258
+ mathbackground:COLOR.getColor("named",cname)
259
+ }).With(COLOR.padding()));
260
+ },
261
+
262
+ //
263
+ // Procude a framed text box with a colored background
264
+ //
265
+ fColorBox: function (name) {
266
+ var fname = this.GetArgument(name),
267
+ cname = this.GetArgument(name),
268
+ arg = this.InternalMath(this.GetArgument(name));
269
+ this.Push(MML.mpadded.apply(MML,arg).With({
270
+ mathbackground: COLOR.getColor("named",cname),
271
+ style: "border: "+COLOR.config.border+" solid "+COLOR.getColor("named",fname)
272
+ }).With(COLOR.padding()));
273
+ }
274
+
275
+ });
276
+
277
+ MathJax.Hub.Startup.signal.Post("TeX color Ready");
278
+
279
+ });
280
+
281
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/color.js");
vendor/MathJax/extensions/TeX/enclose.js ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/enclose.js
7
+ *
8
+ * Implements the \enclose macros, which give access from TeX to the
9
+ * <menclose> tag in the MathML that underlies MathJax's internal format.
10
+ *
11
+ * Usage:
12
+ *
13
+ * \enclose{notation}{math} % enclose math using given notation
14
+ * \enclose{notation,notation,...}{math} % enclose with several notations
15
+ * \enclose{notation}[attributes]{math} % enclose with attributes
16
+ *
17
+ * ---------------------------------------------------------------------
18
+ *
19
+ * Copyright (c) 2011-2018 The MathJax Consortium
20
+ *
21
+ * Licensed under the Apache License, Version 2.0 (the "License");
22
+ * you may not use this file except in compliance with the License.
23
+ * You may obtain a copy of the License at
24
+ *
25
+ * http://www.apache.org/licenses/LICENSE-2.0
26
+ *
27
+ * Unless required by applicable law or agreed to in writing, software
28
+ * distributed under the License is distributed on an "AS IS" BASIS,
29
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
+ * See the License for the specific language governing permissions and
31
+ * limitations under the License.
32
+ */
33
+
34
+ MathJax.Extension["TeX/enclose"] = {
35
+ version: "2.7.5",
36
+
37
+ //
38
+ // The attributes allowed in \enclose{notation}[attributes]{math}
39
+ //
40
+ ALLOWED: {
41
+ arrow: 1,
42
+ color: 1, mathcolor: 1,
43
+ background: 1, mathbackground: 1,
44
+ padding: 1,
45
+ thickness: 1
46
+ }
47
+ };
48
+
49
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
50
+ var TEX = MathJax.InputJax.TeX,
51
+ MML = MathJax.ElementJax.mml,
52
+ ALLOW = MathJax.Extension["TeX/enclose"].ALLOWED;
53
+
54
+ //
55
+ // Set up macro
56
+ //
57
+ TEX.Definitions.Add({macros: {enclose: 'Enclose'}},null,true);
58
+
59
+ TEX.Parse.Augment({
60
+ //
61
+ // Implement \enclose{notation}[attr]{math}
62
+ // (create <menclose notation="notation">math</menclose>)
63
+ //
64
+ Enclose: function(name) {
65
+ var notation = this.GetArgument(name),
66
+ attr = this.GetBrackets(name),
67
+ math = this.ParseArg(name);
68
+ var def = {notation: notation.replace(/,/g," ")};
69
+ if (attr) {
70
+ attr = attr.replace(/ /g,"").split(/,/);
71
+ for (var i = 0, m = attr.length; i < m; i++) {
72
+ var keyvalue = attr[i].split(/[:=]/);
73
+ if (ALLOW[keyvalue[0]]) {
74
+ keyvalue[1] = keyvalue[1].replace(/^"(.*)"$/,"$1");
75
+ if (keyvalue[1] === "true") {keyvalue[1] = true}
76
+ if (keyvalue[1] === "false") {keyvalue[1] = false}
77
+ if (keyvalue[0] === "arrow" && keyvalue[1])
78
+ {def.notation = def.notation + " updiagonalarrow"} else
79
+ {def[keyvalue[0]] = keyvalue[1]}
80
+ }
81
+ }
82
+ }
83
+ this.Push(MML.menclose(math).With(def));
84
+ }
85
+ });
86
+
87
+ MathJax.Hub.Startup.signal.Post("TeX enclose Ready");
88
+
89
+ });
90
+
91
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/enclose.js");
vendor/MathJax/extensions/TeX/extpfeil.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/extpfeil.js
7
+ *
8
+ * Implements additional stretchy arrow macros.
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2011-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Extension["TeX/extpfeil"] = {
28
+ version: "2.7.5"
29
+ };
30
+
31
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
32
+
33
+ var TEX = MathJax.InputJax.TeX,
34
+ TEXDEF = TEX.Definitions;
35
+
36
+ //
37
+ // Define the arrows to load the AMSmath extension
38
+ // (since they need its xArrow method)
39
+ //
40
+ TEXDEF.Add({
41
+ macros: {
42
+ xtwoheadrightarrow: ['Extension','AMSmath'],
43
+ xtwoheadleftarrow: ['Extension','AMSmath'],
44
+ xmapsto: ['Extension','AMSmath'],
45
+ xlongequal: ['Extension','AMSmath'],
46
+ xtofrom: ['Extension','AMSmath'],
47
+ Newextarrow: ['Extension','AMSmath']
48
+ }
49
+ },null,true);
50
+
51
+ //
52
+ // Redefine the macros when AMSmath is loaded
53
+ //
54
+ MathJax.Hub.Register.StartupHook("TeX AMSmath Ready",function () {
55
+ MathJax.Hub.Insert(TEXDEF,{
56
+ macros: {
57
+ xtwoheadrightarrow: ['xArrow',0x21A0,12,16],
58
+ xtwoheadleftarrow: ['xArrow',0x219E,17,13],
59
+ xmapsto: ['xArrow',0x21A6,6,7],
60
+ xlongequal: ['xArrow',0x003D,7,7],
61
+ xtofrom: ['xArrow',0x21C4,12,12],
62
+ Newextarrow: 'NewExtArrow'
63
+ }
64
+ });
65
+ });
66
+
67
+ //
68
+ // Implements \Newextarrow to define a new arrow (not compatible with \newextarrow, but
69
+ // the equivalent for MathJax)
70
+ //
71
+ TEX.Parse.Augment({
72
+ NewExtArrow: function (name) {
73
+ var cs = this.GetArgument(name),
74
+ space = this.GetArgument(name),
75
+ chr = this.GetArgument(name);
76
+ if (!cs.match(/^\\([a-z]+|.)$/i)) {
77
+ TEX.Error(["NewextarrowArg1",
78
+ "First argument to %1 must be a control sequence name",name]);
79
+ }
80
+ if (!space.match(/^(\d+),(\d+)$/)) {
81
+ TEX.Error(
82
+ ["NewextarrowArg2",
83
+ "Second argument to %1 must be two integers separated by a comma",
84
+ name]
85
+ );
86
+ }
87
+ if (!chr.match(/^(\d+|0x[0-9A-F]+)$/i)) {
88
+ TEX.Error(
89
+ ["NewextarrowArg3",
90
+ "Third argument to %1 must be a unicode character number",
91
+ name]
92
+ );
93
+ }
94
+ cs = cs.substr(1); space = space.split(","); chr = parseInt(chr);
95
+ this.setDef(cs, ['xArrow', chr, parseInt(space[0]), parseInt(space[1])]);
96
+ }
97
+ });
98
+
99
+ MathJax.Hub.Startup.signal.Post("TeX extpfeil Ready");
100
+ });
101
+
102
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/extpfeil.js");
vendor/MathJax/extensions/TeX/mathchoice.js ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/mathchoice.js
7
+ *
8
+ * Implements the \mathchoice macro (rarely used)
9
+ *
10
+ * ---------------------------------------------------------------------
11
+ *
12
+ * Copyright (c) 2009-2018 The MathJax Consortium
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
28
+ var VERSION = "2.7.5";
29
+
30
+ var MML = MathJax.ElementJax.mml;
31
+ var TEX = MathJax.InputJax.TeX;
32
+ var TEXDEF = TEX.Definitions;
33
+
34
+ TEXDEF.Add({macros: {mathchoice: 'MathChoice'}},null,true);
35
+
36
+ TEX.Parse.Augment({
37
+ MathChoice: function (name) {
38
+ var D = this.ParseArg(name),
39
+ T = this.ParseArg(name),
40
+ S = this.ParseArg(name),
41
+ SS = this.ParseArg(name);
42
+ this.Push(MML.TeXmathchoice(D,T,S,SS));
43
+ }
44
+ });
45
+
46
+ MML.TeXmathchoice = MML.mbase.Subclass({
47
+ type: "TeXmathchoice", notParent: true,
48
+ choice: function () {
49
+ if (this.selection != null) return this.selection;
50
+ if (this.choosing) return 2; // prevent infinite loops: see issue #1151
51
+ this.choosing = true;
52
+ var selection = 0, values = this.getValues("displaystyle","scriptlevel");
53
+ if (values.scriptlevel > 0) {selection = Math.min(3,values.scriptlevel+1)}
54
+ else {selection = (values.displaystyle ? 0 : 1)}
55
+ // only cache the result if we are actually in place in a <math> tag.
56
+ var node = this.inherit; while (node && node.type !== "math") node = node.inherit;
57
+ if (node) this.selection = selection;
58
+ this.choosing = false;
59
+ return selection;
60
+ },
61
+ selected: function () {return this.data[this.choice()]},
62
+ setTeXclass: function (prev) {return this.selected().setTeXclass(prev)},
63
+ isSpacelike: function () {return this.selected().isSpacelike()},
64
+ isEmbellished: function () {return this.selected().isEmbellished()},
65
+ Core: function () {return this.selected()},
66
+ CoreMO: function () {return this.selected().CoreMO()},
67
+ toHTML: function (span) {
68
+ span = this.HTMLcreateSpan(span);
69
+ span.bbox = this.Core().toHTML(span).bbox;
70
+ // Firefox doesn't correctly handle a span with a negatively sized content,
71
+ // so move marginLeft to main span (this is a hack to get \iiiint to work).
72
+ // FIXME: This is a symptom of a more general problem with Firefox, and
73
+ // there probably needs to be a more general solution (e.g., modifying
74
+ // HTMLhandleSpace() to get the width and adjust the right margin to
75
+ // compensate for negative-width contents)
76
+ if (span.firstChild && span.firstChild.style.marginLeft) {
77
+ span.style.marginLeft = span.firstChild.style.marginLeft;
78
+ span.firstChild.style.marginLeft = "";
79
+ }
80
+ return span;
81
+ },
82
+ toSVG: function () {
83
+ var svg = this.Core().toSVG();
84
+ this.SVGsaveData(svg);
85
+ return svg;
86
+ },
87
+ toCommonHTML: function (node) {
88
+ node = this.CHTMLcreateNode(node);
89
+ this.CHTMLhandleStyle(node);
90
+ this.CHTMLhandleColor(node);
91
+ this.CHTMLaddChild(node,this.choice(),{});
92
+ return node;
93
+ },
94
+ toPreviewHTML: function(span) {
95
+ span = this.PHTMLcreateSpan(span);
96
+ this.PHTMLhandleStyle(span);
97
+ this.PHTMLhandleColor(span);
98
+ this.PHTMLaddChild(span,this.choice(),{});
99
+ return span;
100
+ }
101
+ });
102
+
103
+ MathJax.Hub.Startup.signal.Post("TeX mathchoice Ready");
104
+
105
+ });
106
+
107
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mathchoice.js");
vendor/MathJax/extensions/TeX/mediawiki-texvc.js ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*************************************************************
2
+ *
3
+ * MathJax/extensions/TeX/mediawiki-texvc.js
4
+ *
5
+ * Implements macros used by mediawiki with their texvc preprocessor.
6
+ *
7
+ * ---------------------------------------------------------------------
8
+ *
9
+ * Copyright (c) 2015-2018 The MathJax Consortium
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ MathJax.Extension["TeX/mediawiki-texvc"] = {
25
+ version: "2.7.5"
26
+ };
27
+
28
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready", function () {
29
+ MathJax.InputJax.TeX.Definitions.Add({
30
+ macros: {
31
+ AA: ["Macro", "\u00c5"],
32
+ alef: ["Macro", "\\aleph"],
33
+ alefsym: ["Macro", "\\aleph"],
34
+ Alpha: ["Macro", "\\mathrm{A}"],
35
+ and: ["Macro", "\\land"],
36
+ ang: ["Macro", "\\angle"],
37
+ Bbb: ["Macro", "\\mathbb"],
38
+ Beta: ["Macro", "\\mathrm{B}"],
39
+ bold: ["Macro", "\\mathbf"],
40
+ bull: ["Macro", "\\bullet"],
41
+ C: ["Macro", "\\mathbb{C}"],
42
+ Chi: ["Macro", "\\mathrm{X}"],
43
+ clubs: ["Macro", "\\clubsuit"],
44
+ cnums: ["Macro", "\\mathbb{C}"],
45
+ Complex: ["Macro", "\\mathbb{C}"],
46
+ coppa: ["Macro", "\u03D9"],
47
+ Coppa: ["Macro", "\u03D8"],
48
+ Dagger: ["Macro", "\\ddagger"],
49
+ Digamma: ["Macro", "\u03DC"],
50
+ darr: ["Macro", "\\downarrow"],
51
+ dArr: ["Macro", "\\Downarrow"],
52
+ Darr: ["Macro", "\\Downarrow"],
53
+ dashint: ["Macro", "\\unicodeInt{x2A0D}"],
54
+ ddashint: ["Macro", "\\unicodeInt{x2A0E}"],
55
+ diamonds: ["Macro", "\\diamondsuit"],
56
+ empty: ["Macro", "\\emptyset"],
57
+ Epsilon: ["Macro", "\\mathrm{E}"],
58
+ Eta: ["Macro", "\\mathrm{H}"],
59
+ euro: ["Macro", "\u20AC"],
60
+ exist: ["Macro", "\\exists"],
61
+ geneuro: ["Macro", "\u20AC"],
62
+ geneuronarrow: ["Macro", "\u20AC"],
63
+ geneurowide: ["Macro", "\u20AC"],
64
+ H: ["Macro", "\\mathbb{H}"],
65
+ hAar: ["Macro", "\\Leftrightarrow"],
66
+ harr: ["Macro", "\\leftrightarrow"],
67
+ Harr: ["Macro", "\\Leftrightarrow"],
68
+ hearts: ["Macro", "\\heartsuit"],
69
+ image: ["Macro", "\\Im"],
70
+ infin: ["Macro", "\\infty"],
71
+ Iota: ["Macro", "\\mathrm{I}"],
72
+ isin: ["Macro", "\\in"],
73
+ Kappa: ["Macro", "\\mathrm{K}"],
74
+ koppa: ["Macro", "\u03DF"],
75
+ Koppa: ["Macro", "\u03DE"],
76
+ lang: ["Macro", "\\langle"],
77
+ larr: ["Macro", "\\leftarrow"],
78
+ Larr: ["Macro", "\\Leftarrow"],
79
+ lArr: ["Macro", "\\Leftarrow"],
80
+ lrarr: ["Macro", "\\leftrightarrow"],
81
+ Lrarr: ["Macro", "\\Leftrightarrow"],
82
+ lrArr: ["Macro", "\\Leftrightarrow"],
83
+ Mu: ["Macro", "\\mathrm{M}"],
84
+ N: ["Macro", "\\mathbb{N}"],
85
+ natnums: ["Macro", "\\mathbb{N}"],
86
+ Nu: ["Macro", "\\mathrm{N}"],
87
+ O: ["Macro", "\\emptyset"],
88
+ oint: ["Macro", "\\unicodeInt{x222E}"],
89
+ oiint: ["Macro", "\\unicodeInt{x222F}"],
90
+ oiiint: ["Macro", "\\unicodeInt{x2230}"],
91
+ ointctrclockwise: ["Macro", "\\unicodeInt{x2233}"],
92
+ officialeuro: ["Macro", "\u20AC"],
93
+ Omicron: ["Macro", "\\mathrm{O}"],
94
+ or: ["Macro", "\\lor"],
95
+ P: ["Macro", "\u00B6"],
96
+ pagecolor: ['Macro','',1], // ignore \pagecolor{}
97
+ part: ["Macro", "\\partial"],
98
+ plusmn: ["Macro", "\\pm"],
99
+ Q: ["Macro", "\\mathbb{Q}"],
100
+ R: ["Macro", "\\mathbb{R}"],
101
+ rang: ["Macro", "\\rangle"],
102
+ rarr: ["Macro", "\\rightarrow"],
103
+ Rarr: ["Macro", "\\Rightarrow"],
104
+ rArr: ["Macro", "\\Rightarrow"],
105
+ real: ["Macro", "\\Re"],
106
+ reals: ["Macro", "\\mathbb{R}"],
107
+ Reals: ["Macro", "\\mathbb{R}"],
108
+ Rho: ["Macro", "\\mathrm{P}"],
109
+ sdot: ["Macro", "\\cdot"],
110
+ sampi: ["Macro", "\u03E1"],
111
+ Sampi: ["Macro", "\u03E0"],
112
+ sect: ["Macro", "\\S"],
113
+ spades: ["Macro", "\\spadesuit"],
114
+ stigma: ["Macro", "\u03DB"],
115
+ Stigma: ["Macro", "\u03DA"],
116
+ sub: ["Macro", "\\subset"],
117
+ sube: ["Macro", "\\subseteq"],
118
+ supe: ["Macro", "\\supseteq"],
119
+ Tau: ["Macro", "\\mathrm{T}"],
120
+ textvisiblespace: ["Macro", "\u2423"],
121
+ thetasym: ["Macro", "\\vartheta"],
122
+ uarr: ["Macro", "\\uparrow"],
123
+ uArr: ["Macro", "\\Uparrow"],
124
+ Uarr: ["Macro", "\\Uparrow"],
125
+ unicodeInt: ["Macro", "\\mathop{\\vcenter{\\mathchoice{\\huge\\unicode{#1}\\,}{\\unicode{#1}}{\\unicode{#1}}{\\unicode{#1}}}\\,}\\nolimits", 1],
126
+ varcoppa: ["Macro", "\u03D9"],
127
+ varstigma: ["Macro", "\u03DB"],
128
+ varointclockwise: ["Macro", "\\unicodeInt{x2232}"],
129
+ vline: ['Macro','\\smash{\\large\\lvert}',0],
130
+ weierp: ["Macro", "\\wp"],
131
+ Z: ["Macro", "\\mathbb{Z}"],
132
+ Zeta: ["Macro", "\\mathrm{Z}"]
133
+ }
134
+ });
135
+ });
136
+
137
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mediawiki-texvc.js");
vendor/MathJax/extensions/TeX/mhchem.js ADDED
@@ -0,0 +1,520 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */
2
+ /* vim: set ts=2 et sw=2 tw=80: */
3
+
4
+ /*************************************************************
5
+ *
6
+ * MathJax/extensions/TeX/mhchem.js
7
+ *
8
+ * Implements the \ce command for handling chemical formulas
9
+ * from the mhchem LaTeX package.
10
+ *
11
+ * ---------------------------------------------------------------------
12
+ *
13
+ * Copyright (c) 2011-2018 The MathJax Consortium
14
+ *
15
+ * Licensed under the Apache License, Version 2.0 (the "License");
16
+ * you may not use this file except in compliance with the License.
17
+ * You may obtain a copy of the License at
18
+ *
19
+ * http://www.apache.org/licenses/LICENSE-2.0
20
+ *
21
+ * Unless required by applicable law or agreed to in writing, software
22
+ * distributed under the License is distributed on an "AS IS" BASIS,
23
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
+ * See the License for the specific language governing permissions and
25
+ * limitations under the License.
26
+ */
27
+
28
+
29
+ //
30
+ // Don't replace [Contrib]/mhchem if it is already loaded
31
+ //
32
+ if (MathJax.Extension["TeX/mhchem"]) {
33
+ MathJax.Ajax.loadComplete("[MathJax]/extensions/TeX/mhchem.js");
34
+ } else {
35
+
36
+ MathJax.Extension["TeX/mhchem"] = {
37
+ version: "2.7.5",
38
+ config: MathJax.Hub.CombineConfig("TeX.mhchem",{
39
+ legacy: true
40
+ })
41
+ };
42
+
43
+ //
44
+ // Load [mhchem]/mhchem.js if not configured for legacy vesion
45
+ //
46
+ if (!MathJax.Extension["TeX/mhchem"].config.legacy) {
47
+ if (!MathJax.Ajax.config.path.mhchem) {
48
+ MathJax.Ajax.config.path.mhchem = MathJax.Hub.config.root + "/extensions/TeX/mhchem3";
49
+ }
50
+ MathJax.Callback.Queue(
51
+ ["Require",MathJax.Ajax,"[mhchem]/mhchem.js"],
52
+ ["loadComplete",MathJax.Ajax,"[MathJax]/extensions/TeX/mhchem.js"]
53
+ );
54
+ } else {
55
+
56
+ MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () {
57
+
58
+ var TEX = MathJax.InputJax.TeX;
59
+
60
+ /*
61
+ * This is the main class for handing the \ce and related commands.
62
+ * Its main method is Parse() which takes the argument to \ce and
63
+ * returns the corresponding TeX string.
64
+ */
65
+
66
+ var CE = MathJax.Object.Subclass({
67
+ string: "", // the \ce string being parsed
68
+ i: 0, // the current position in the string
69
+ tex: "", // the partially processed TeX result
70
+ TEX: "", // the full TeX result
71
+ atom: false, // last processed token is an atom
72
+ sup: "", // pending superscript
73
+ sub: "", // pending subscript
74
+ presup: "", // pending pre-superscript
75
+ presub: "", // pending pre-subscript
76
+
77
+ //
78
+ // Store the string when a CE object is created
79
+ //
80
+ Init: function (string) {this.string = string},
81
+
82
+ //
83
+ // These are the special characters and the methods that
84
+ // handle them. All others are passed through verbatim.
85
+ //
86
+ ParseTable: {
87
+ '-': "Minus",
88
+ '+': "Plus",
89
+ '(': "Open",
90
+ ')': "Close",
91
+ '[': "Open",
92
+ ']': "Close",
93
+ '<': "Less",
94
+ '^': "Superscript",
95
+ '_': "Subscript",
96
+ '*': "Dot",
97
+ '.': "Dot",
98
+ '=': "Equal",
99
+ '#': "Pound",
100
+ '$': "Math",
101
+ '\\': "Macro",
102
+ ' ': "Space"
103
+ },
104
+ //
105
+ // Basic arrow names for reactions
106
+ //
107
+ Arrows: {
108
+ '->': "rightarrow",
109
+ '<-': "leftarrow",
110
+ '<->': "leftrightarrow",
111
+ '<=>': "rightleftharpoons",
112
+ '<=>>': "Rightleftharpoons",
113
+ '<<=>': "Leftrightharpoons",
114
+ '^': "uparrow",
115
+ 'v': "downarrow"
116
+ },
117
+
118
+ //
119
+ // Implementations for the various bonds
120
+ // (the ~ ones are hacks that don't work well in NativeMML)
121
+ //
122
+ Bonds: {
123
+ '-': "-",
124
+ '=': "=",
125
+ '#': "\\equiv",
126
+ '~': "\\tripledash",
127
+ '~-': "\\begin{CEstack}{}\\tripledash\\\\-\\end{CEstack}",
128
+ '~=': "\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}",
129
+ '~--': "\\raise2mu{\\begin{CEstack}{}\\tripledash\\\\-\\\\-\\end{CEstack}}",
130
+ '-~-': "\\raise2mu{\\begin{CEstack}{}-\\\\\\tripledash\\\\-\\end{CEstack}}",
131
+ '...': "{\\cdot}{\\cdot}{\\cdot}",
132
+ '....': "{\\cdot}{\\cdot}{\\cdot}{\\cdot}",
133
+ '->': "\\rightarrow",
134
+ '<-': "\\leftarrow",
135
+ '??': "\\text{??}" // unknown bond
136
+ },
137
+
138
+ //
139
+ // This converts the CE string to a TeX string.
140
+ // It loops through the string and calls the proper
141
+ // method depending on the ccurrent character.
142
+ //
143
+ Parse: function () {
144
+ this.tex = ""; this.atom = false;
145
+ while (this.i < this.string.length) {
146
+ var c = this.string.charAt(this.i);
147
+ if (c.match(/[a-z]/i)) {this.ParseLetter()}
148
+ else if (c.match(/[0-9]/)) {this.ParseNumber()}
149
+ else {this["Parse"+(this.ParseTable[c]||"Other")](c)}
150
+ }
151
+ this.FinishAtom(true);
152
+ return this.TEX;
153
+ },
154
+
155
+ //
156
+ // Make an atom name or a down arrow
157
+ //
158
+ ParseLetter: function () {
159
+ this.FinishAtom();
160
+ if (this.Match(/^v( |$)/)) {
161
+ this.tex += "{\\"+this.Arrows["v"]+"}";
162
+ } else {
163
+ this.tex += "\\text{"+this.Match(/^[a-z]+/i)+"}";
164
+ this.atom = true;
165
+ }
166
+ },
167
+
168
+ //
169
+ // Make a number or fraction preceding an atom,
170
+ // or a subscript for an atom.
171
+ //
172
+ ParseNumber: function () {
173
+ var n = this.Match(/^\d+/);
174
+ if (this.atom && !this.sub) {
175
+ this.sub = n;
176
+ } else {
177
+ this.FinishAtom();
178
+ var match = this.Match(/^\/\d+/);
179
+ if (match) {
180
+ var frac = "\\frac{"+n+"}{"+match.substr(1)+"}";
181
+ this.tex += "\\mathchoice{\\textstyle"+frac+"}{"+frac+"}{"+frac+"}{"+frac+"}";
182
+ } else {
183
+ this.tex += n;
184
+ if (this.i < this.string.length) {this.tex += "\\,"}
185
+ }
186
+ }
187
+ },
188
+
189
+ //
190
+ // Make a superscript minus, or an arrow, or a single bond.
191
+ //
192
+ ParseMinus: function (c) {
193
+ if (this.atom && (this.i === this.string.length-1 || this.string.charAt(this.i+1) === " ")) {
194
+ this.sup += c;
195
+ } else {
196
+ this.FinishAtom();
197
+ if (this.string.substr(this.i,2) === "->") {this.i += 2; this.AddArrow("->"); return}
198
+ else {this.tex += "{-}"}
199
+ }
200
+ this.i++;
201
+ },
202
+
203
+ //
204
+ // Make a superscript plus, or pass it through
205
+ //
206
+ ParsePlus: function (c) {
207
+ if (this.atom) {this.sup += c} else {this.FinishAtom(); this.tex += c}
208
+ this.i++;
209
+ },
210
+
211
+ //
212
+ // Handle dots and double or triple bonds
213
+ //
214
+ ParseDot: function (c) {this.FinishAtom(); this.tex += "\\cdot "; this.i++},
215
+ ParseEqual: function (c) {this.FinishAtom(); this.tex += "{=}"; this.i++},
216
+ ParsePound: function (c) {this.FinishAtom(); this.tex += "{\\equiv}"; this.i++},
217
+
218
+ //
219
+ // Look for (v) or (^), or pass it through
220
+ //
221
+ ParseOpen: function (c) {
222
+ this.FinishAtom();
223
+ var match = this.Match(/^\([v^]\)/);
224
+ if (match) {this.tex += "{\\"+this.Arrows[match.charAt(1)]+"}"}
225
+ else {this.tex += "{"+c; this.i++}
226
+ },
227
+ //
228
+ // Allow ) and ] to get super- and subscripts
229
+ //
230
+ ParseClose: function (c) {this.FinishAtom(); this.atom = true; this.tex += c+"}"; this.i++},
231
+
232
+ //
233
+ // Make the proper arrow
234
+ //
235
+ ParseLess: function (c) {
236
+ this.FinishAtom();
237
+ var arrow = this.Match(/^(<->?|<=>>?|<<=>)/);
238
+ if (!arrow) {this.tex += c; this.i++} else {this.AddArrow(arrow)}
239
+ },
240
+
241
+ //
242
+ // Look for a superscript, or an up arrow
243
+ //
244
+ ParseSuperscript: function (c) {
245
+ c = this.string.charAt(++this.i);
246
+ if (c === "{") {
247
+ this.i++; var m = this.Find("}");
248
+ if (m === "-.") {this.sup += "{-}{\\cdot}"}
249
+ else if (m) {this.sup += CE(m).Parse().replace(/^\{-\}/,"-")}
250
+ } else if (c === " " || c === "") {
251
+ this.tex += "{\\"+this.Arrows["^"]+"}"; this.i++;
252
+ } else {
253
+ var n = this.Match(/^(\d+|-\.)/);
254
+ if (n) {this.sup += n}
255
+ }
256
+ },
257
+ //
258
+ // Look for subscripts
259
+ //
260
+ ParseSubscript: function (c) {
261
+ if (this.string.charAt(++this.i) == "{") {
262
+ this.i++; this.sub += CE(this.Find("}")).Parse().replace(/^\{-\}/,"-");
263
+ } else {
264
+ var n = this.Match(/^\d+/);
265
+ if (n) {this.sub += n}
266
+ }
267
+ },
268
+
269
+ //
270
+ // Look for raw TeX code to include
271
+ //
272
+ ParseMath: function (c) {
273
+ this.FinishAtom();
274
+ this.i++; this.tex += this.Find(c);
275
+ },
276
+
277
+ //
278
+ // Look for specific macros for bonds
279
+ // and allow \} to have subscripts
280
+ //
281
+ ParseMacro: function (c) {
282
+ this.FinishAtom();
283
+ this.i++; var match = this.Match(/^([a-z]+|.)/i)||" ";
284
+ if (match === "sbond") {this.tex += "{-}"}
285
+ else if (match === "dbond") {this.tex += "{=}"}
286
+ else if (match === "tbond") {this.tex += "{\\equiv}"}
287
+ else if (match === "bond") {
288
+ var bond = (this.Match(/^\{.*?\}/)||"");
289
+ bond = bond.substr(1,bond.length-2);
290
+ this.tex += "{"+(this.Bonds[bond]||"\\text{??}")+"}";
291
+ }
292
+ else if (match === "{") {this.tex += "{\\{"}
293
+ else if (match === "}") {this.tex += "\\}}"; this.atom = true}
294
+ else {this.tex += c+match}
295
+ },
296
+
297
+ //
298
+ // Ignore spaces
299
+ //
300
+ ParseSpace: function (c) {this.FinishAtom(); this.i++},
301
+
302
+ //
303
+ // Pass anything else on verbatim
304
+ //
305
+ ParseOther: function (c) {this.FinishAtom(); this.tex += c; this.i++},
306
+
307
+ //
308
+ // Process an arrow (looking for brackets for above and below)
309
+ //
310
+ AddArrow: function (arrow) {
311
+ var c = this.Match(/^[CT]\[/);
312
+ if (c) {this.i--; c = c.charAt(0)}
313
+ var above = this.GetBracket(c), below = this.GetBracket(c);
314
+ arrow = this.Arrows[arrow];
315
+ if (above || below) {
316
+ if (below) {arrow += "["+below+"]"}
317
+ arrow += "{"+above+"}";
318
+ arrow = "\\mathrel{\\x"+arrow+"}";
319
+ } else {
320
+ arrow = "\\long"+arrow+" ";
321
+ }
322
+ this.tex += arrow;
323
+ },
324
+
325
+ //
326
+ // Handle the super and subscripts for an atom
327
+ //
328
+ FinishAtom: function (force) {
329
+ if (this.sup || this.sub || this.presup || this.presub) {
330
+ if (!force && !this.atom) {
331
+ if (this.tex === "" && !this.sup && !this.sub) return;
332
+ if (!this.presup && !this.presub &&
333
+ (this.tex === "" || this.tex === "{" ||
334
+ (this.tex === "}" && this.TEX.substr(-1) === "{"))) {
335
+ this.presup = this.sup, this.presub = this.sub; // save for later
336
+ this.sub = this.sup = "";
337
+ this.TEX += this.tex; this.tex = "";
338
+ return;
339
+ }
340
+ }
341
+ if (this.sub && !this.sup) {this.sup = "\\Space{0pt}{0pt}{.2em}"} // forces subscripts to align properly
342
+ if ((this.presup || this.presub) && this.tex !== "{") {
343
+ if (!this.presup && !this.sup) {this.presup = "\\Space{0pt}{0pt}{.2em}"}
344
+ this.tex = "\\CEprescripts{"+(this.presub||"\\CEnone")+"}{"+(this.presup||"\\CEnone")+"}"
345
+ + "{"+(this.tex !== "}" ? this.tex : "")+"}"
346
+ + "{"+(this.sub||"\\CEnone")+"}{"+(this.sup||"\\CEnone")+"}"
347
+ + (this.tex === "}" ? "}" : "");
348
+ this.presub = this.presup = "";
349
+ } else {
350
+ if (this.sup) this.tex += "^{"+this.sup+"}";
351
+ if (this.sub) this.tex += "_{"+this.sub+"}";
352
+ }
353
+ this.sup = this.sub = "";
354
+ }
355
+ this.TEX += this.tex; this.tex = "";
356
+ this.atom = false;
357
+ },
358
+
359
+ //
360
+ // Find a bracket group and handle C and T prefixes
361
+ //
362
+ GetBracket: function