Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch 'codemirror' of git://github.com/nbeloglazov/4clojure in…

…to develop
  • Loading branch information...
commit b9b81332f6552e95dbfe543745e1ae9a5efd15f8 2 parents 5b83f3f + cea5b50
@Raynes Raynes authored
Showing with 683 additions and 3,253 deletions.
  1. +173 −0 resources/public/css/codemirror.css
  2. +0 −226 resources/public/css/shCore.css
  3. +0 −117 resources/public/css/shThemeDefault.css
  4. +33 −8 resources/public/css/style.css
  5. +81 −0 resources/public/css/theme/ambiance.css
  6. +25 −0 resources/public/css/theme/blackboard.css
  7. +18 −0 resources/public/css/theme/cobalt.css
  8. +25 −0 resources/public/css/theme/eclipse.css
  9. +10 −0 resources/public/css/theme/elegant.css
  10. +21 −0 resources/public/css/theme/erlang-dark.css
  11. +44 −0 resources/public/css/theme/lesser-dark.css
  12. +28 −0 resources/public/css/theme/monokai.css
  13. +9 −0 resources/public/css/theme/neat.css
  14. +21 −0 resources/public/css/theme/night.css
  15. +21 −0 resources/public/css/theme/rubyblue.css
  16. +27 −0 resources/public/css/theme/vibrant-ink.css
  17. +46 −0 resources/public/css/theme/xq-dark.css
  18. +16 −21 resources/public/script/codebox.js
  19. +19 −0 resources/public/script/foreclojure.js
  20. +0 −1  resources/public/vendor/script/ace/ace.js
  21. +0 −1  resources/public/vendor/script/ace/mode-clojure.js
  22. +1 −0  resources/public/vendor/script/codemirror-clojure-compressed.js
  23. +0 −130 resources/public/vendor/script/shAutoloader.js
  24. +0 −189 resources/public/vendor/script/shBrushClojure.js
  25. +0 −1,721 resources/public/vendor/script/shCore.js
  26. +0 −157 resources/public/vendor/script/shLegacy.js
  27. +0 −651 resources/public/vendor/script/xregexp.js
  28. +7 −9 src/foreclojure/problems.clj
  29. +37 −9 src/foreclojure/settings.clj
  30. +1 −2  src/foreclojure/social.clj
  31. +2 −3 src/foreclojure/static.clj
  32. +7 −7 src/foreclojure/template.clj
  33. +11 −1 src/foreclojure/utils.clj
View
173 resources/public/css/codemirror.css
@@ -0,0 +1,173 @@
+.CodeMirror {
+ line-height: 1em;
+ font-family: monospace;
+
+ /* Necessary so the scrollbar can be absolutely positioned within the wrapper on Lion. */
+ position: relative;
+ /* This prevents unwanted scrollbars from showing up on the body and wrapper in IE. */
+ overflow: hidden;
+}
+
+.CodeMirror-scroll {
+ overflow: auto;
+ height: 300px;
+ /* This is needed to prevent an IE[67] bug where the scrolled content
+ is visible outside of the scrolling box. */
+ position: relative;
+ outline: none;
+}
+
+/* Vertical scrollbar */
+.CodeMirror-scrollbar {
+ position: absolute;
+ right: 0; top: 0;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ z-index: 5;
+}
+.CodeMirror-scrollbar-inner {
+ /* This needs to have a nonzero width in order for the scrollbar to appear
+ in Firefox and IE9. */
+ width: 1px;
+}
+.CodeMirror-scrollbar.cm-sb-overlap {
+ /* Ensure that the scrollbar appears in Lion, and that it overlaps the content
+ rather than sitting to the right of it. */
+ position: absolute;
+ z-index: 1;
+ float: none;
+ right: 0;
+ min-width: 12px;
+}
+.CodeMirror-scrollbar.cm-sb-nonoverlap {
+ min-width: 12px;
+}
+.CodeMirror-scrollbar.cm-sb-ie7 {
+ min-width: 18px;
+}
+
+.CodeMirror-gutter {
+ position: absolute; left: 0; top: 0;
+ z-index: 10;
+ background-color: #f7f7f7;
+ border-right: 1px solid #eee;
+ min-width: 2em;
+ height: 100%;
+}
+.CodeMirror-gutter-text {
+ color: #aaa;
+ text-align: right;
+ padding: .4em .2em .4em .4em;
+ white-space: pre !important;
+ cursor: default;
+}
+.CodeMirror-lines {
+ padding: .4em;
+ white-space: pre;
+ cursor: text;
+}
+
+.CodeMirror pre {
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ border-width: 0; margin: 0; padding: 0; background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ padding: 0; margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+ line-height: inherit;
+ color: inherit;
+}
+
+.CodeMirror-wrap pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: normal;
+}
+.CodeMirror-wrap .CodeMirror-scroll {
+ overflow-x: hidden;
+}
+
+.CodeMirror textarea {
+ outline: none !important;
+}
+
+.CodeMirror pre.CodeMirror-cursor {
+ z-index: 10;
+ position: absolute;
+ visibility: hidden;
+ border-left: 1px solid black;
+ border-right: none;
+ width: 0;
+}
+.cm-keymap-fat-cursor pre.CodeMirror-cursor {
+ width: auto;
+ border: 0;
+ background: transparent;
+ background: rgba(0, 200, 0, .4);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#6600c800, endColorstr=#4c00c800);
+}
+/* Kludge to turn off filter in ie9+, which also accepts rgba */
+.cm-keymap-fat-cursor pre.CodeMirror-cursor:not(#nonsense_id) {
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+.CodeMirror pre.CodeMirror-cursor.CodeMirror-overwrite {}
+.CodeMirror-focused pre.CodeMirror-cursor {
+ visibility: visible;
+}
+
+div.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused div.CodeMirror-selected { background: #d7d4f0; }
+
+.CodeMirror-searching {
+ background: #ffa;
+ background: rgba(255, 255, 0, .4);
+}
+
+/* Default theme */
+
+.cm-s-default span.cm-keyword {color: #708;}
+.cm-s-default span.cm-atom {color: #219;}
+.cm-s-default span.cm-number {color: #164;}
+.cm-s-default span.cm-def {color: #00f;}
+.cm-s-default span.cm-variable {color: black;}
+.cm-s-default span.cm-variable-2 {color: #05a;}
+.cm-s-default span.cm-variable-3 {color: #085;}
+.cm-s-default span.cm-property {color: black;}
+.cm-s-default span.cm-operator {color: black;}
+.cm-s-default span.cm-comment {color: #a50;}
+.cm-s-default span.cm-string {color: #a11;}
+.cm-s-default span.cm-string-2 {color: #f50;}
+.cm-s-default span.cm-meta {color: #555;}
+.cm-s-default span.cm-error {color: #f00;}
+.cm-s-default span.cm-qualifier {color: #555;}
+.cm-s-default span.cm-builtin {color: #30a;}
+.cm-s-default span.cm-bracket {color: #cc7;}
+.cm-s-default span.cm-tag {color: #170;}
+.cm-s-default span.cm-attribute {color: #00c;}
+.cm-s-default span.cm-header {color: blue;}
+.cm-s-default span.cm-quote {color: #090;}
+.cm-s-default span.cm-hr {color: #999;}
+.cm-s-default span.cm-link {color: #00c;}
+
+span.cm-header, span.cm-strong {font-weight: bold;}
+span.cm-em {font-style: italic;}
+span.cm-emstrong {font-style: italic; font-weight: bold;}
+span.cm-link {text-decoration: underline;}
+
+span.cm-invalidchar {color: #f00;}
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
+
+@media print {
+
+ /* Hide the cursor when printing */
+ .CodeMirror pre.CodeMirror-cursor {
+ visibility: hidden;
+ }
+
+}
View
226 resources/public/css/shCore.css
@@ -1,226 +0,0 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/SyntaxHighlighter
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
- *
- * @version
- * 3.0.83 (July 02 2010)
- *
- * @copyright
- * Copyright (C) 2004-2010 Alex Gorbatchev.
- *
- * @license
- * Dual licensed under the MIT and GPL licenses.
- */
-.syntaxhighlighter a,
-.syntaxhighlighter div,
-.syntaxhighlighter code,
-.syntaxhighlighter table,
-.syntaxhighlighter table td,
-.syntaxhighlighter table tr,
-.syntaxhighlighter table tbody,
-.syntaxhighlighter table thead,
-.syntaxhighlighter table caption,
-.syntaxhighlighter textarea {
- -moz-border-radius: 0 0 0 0 !important;
- -webkit-border-radius: 0 0 0 0 !important;
- background: none !important;
- border: 0 !important;
- bottom: auto !important;
- float: none !important;
- height: auto !important;
- left: auto !important;
- line-height: 1.1em !important;
- margin: 0 !important;
- outline: 0 !important;
- overflow: visible !important;
- padding: 0 !important;
- position: static !important;
- right: auto !important;
- text-align: left !important;
- top: auto !important;
- vertical-align: baseline !important;
- width: auto !important;
- box-sizing: content-box !important;
- font-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important;
- font-weight: normal !important;
- font-style: normal !important;
- font-size: 1em !important;
- min-height: inherit !important;
- min-height: auto !important;
-}
-
-.syntaxhighlighter {
- width: 100% !important;
- margin: 1em 0 1em 0 !important;
- position: relative !important;
- overflow: auto !important;
- font-size: 1em !important;
-}
-.syntaxhighlighter.source {
- overflow: hidden !important;
-}
-.syntaxhighlighter .bold {
- font-weight: bold !important;
-}
-.syntaxhighlighter .italic {
- font-style: italic !important;
-}
-.syntaxhighlighter .line {
- white-space: pre !important;
-}
-.syntaxhighlighter table {
- width: 100% !important;
-}
-.syntaxhighlighter table caption {
- text-align: left !important;
- padding: .5em 0 0.5em 1em !important;
-}
-.syntaxhighlighter table td.code {
- width: 100% !important;
-}
-.syntaxhighlighter table td.code .container {
- position: relative !important;
-}
-.syntaxhighlighter table td.code .container textarea {
- box-sizing: border-box !important;
- position: absolute !important;
- left: 0 !important;
- top: 0 !important;
- width: 100% !important;
- height: 100% !important;
- border: none !important;
- background: white !important;
- padding-left: 1em !important;
- overflow: hidden !important;
- white-space: pre !important;
-}
-.syntaxhighlighter table td.gutter .line {
- text-align: right !important;
- padding: 0 0.5em 0 1em !important;
-}
-.syntaxhighlighter table td.code .line {
- padding: 0 1em !important;
-}
-.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
- padding-left: 0em !important;
-}
-.syntaxhighlighter.show {
- display: block !important;
-}
-.syntaxhighlighter.collapsed table {
- display: none !important;
-}
-.syntaxhighlighter.collapsed .toolbar {
- padding: 0.1em 0.8em 0em 0.8em !important;
- font-size: 1em !important;
- position: static !important;
- width: auto !important;
- height: auto !important;
-}
-.syntaxhighlighter.collapsed .toolbar span {
- display: inline !important;
- margin-right: 1em !important;
-}
-.syntaxhighlighter.collapsed .toolbar span a {
- padding: 0 !important;
- display: none !important;
-}
-.syntaxhighlighter.collapsed .toolbar span a.expandSource {
- display: inline !important;
-}
-.syntaxhighlighter .toolbar {
- position: absolute !important;
- right: 1px !important;
- top: 1px !important;
- width: 11px !important;
- height: 11px !important;
- font-size: 10px !important;
- z-index: 10 !important;
-}
-.syntaxhighlighter .toolbar span.title {
- display: inline !important;
-}
-.syntaxhighlighter .toolbar a {
- display: block !important;
- text-align: center !important;
- text-decoration: none !important;
- padding-top: 1px !important;
-}
-.syntaxhighlighter .toolbar a.expandSource {
- display: none !important;
-}
-.syntaxhighlighter.ie {
- font-size: .9em !important;
- padding: 1px 0 1px 0 !important;
-}
-.syntaxhighlighter.ie .toolbar {
- line-height: 8px !important;
-}
-.syntaxhighlighter.ie .toolbar a {
- padding-top: 0px !important;
-}
-.syntaxhighlighter.printing .line.alt1 .content,
-.syntaxhighlighter.printing .line.alt2 .content,
-.syntaxhighlighter.printing .line.highlighted .number,
-.syntaxhighlighter.printing .line.highlighted.alt1 .content,
-.syntaxhighlighter.printing .line.highlighted.alt2 .content {
- background: none !important;
-}
-.syntaxhighlighter.printing .line .number {
- color: #bbbbbb !important;
-}
-.syntaxhighlighter.printing .line .content {
- color: black !important;
-}
-.syntaxhighlighter.printing .toolbar {
- display: none !important;
-}
-.syntaxhighlighter.printing a {
- text-decoration: none !important;
-}
-.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a {
- color: black !important;
-}
-.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a {
- color: #008200 !important;
-}
-.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a {
- color: blue !important;
-}
-.syntaxhighlighter.printing .keyword {
- color: #006699 !important;
- font-weight: bold !important;
-}
-.syntaxhighlighter.printing .preprocessor {
- color: gray !important;
-}
-.syntaxhighlighter.printing .variable {
- color: #aa7700 !important;
-}
-.syntaxhighlighter.printing .value {
- color: #009900 !important;
-}
-.syntaxhighlighter.printing .functions {
- color: #ff1493 !important;
-}
-.syntaxhighlighter.printing .constants {
- color: #0066cc !important;
-}
-.syntaxhighlighter.printing .script {
- font-weight: bold !important;
-}
-.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a {
- color: gray !important;
-}
-.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a {
- color: #ff1493 !important;
-}
-.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a {
- color: red !important;
-}
-.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a {
- color: black !important;
-}
View
117 resources/public/css/shThemeDefault.css
@@ -1,117 +0,0 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/SyntaxHighlighter
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
- *
- * @version
- * 3.0.83 (July 02 2010)
- *
- * @copyright
- * Copyright (C) 2004-2010 Alex Gorbatchev.
- *
- * @license
- * Dual licensed under the MIT and GPL licenses.
- */
-.syntaxhighlighter {
- background-color: white !important;
-}
-.syntaxhighlighter .line.alt1 {
- background-color: white !important;
-}
-.syntaxhighlighter .line.alt2 {
- background-color: white !important;
-}
-.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 {
- background-color: #e0e0e0 !important;
-}
-.syntaxhighlighter .line.highlighted.number {
- color: black !important;
-}
-.syntaxhighlighter table caption {
- color: black !important;
-}
-.syntaxhighlighter .gutter {
- color: #afafaf !important;
-}
-.syntaxhighlighter .gutter .line {
- border-right: 3px solid #6ce26c !important;
-}
-.syntaxhighlighter .gutter .line.highlighted {
- background-color: #6ce26c !important;
- color: white !important;
-}
-.syntaxhighlighter.printing .line .content {
- border: none !important;
-}
-.syntaxhighlighter.collapsed {
- overflow: visible !important;
-}
-.syntaxhighlighter.collapsed .toolbar {
- color: blue !important;
- background: white !important;
- border: 1px solid #6ce26c !important;
-}
-.syntaxhighlighter.collapsed .toolbar a {
- color: blue !important;
-}
-.syntaxhighlighter.collapsed .toolbar a:hover {
- color: red !important;
-}
-.syntaxhighlighter .toolbar {
- color: white !important;
- background: #6ce26c !important;
- border: none !important;
-}
-.syntaxhighlighter .toolbar a {
- color: white !important;
-}
-.syntaxhighlighter .toolbar a:hover {
- color: black !important;
-}
-.syntaxhighlighter .plain, .syntaxhighlighter .plain a {
- color: black !important;
-}
-.syntaxhighlighter .comments, .syntaxhighlighter .comments a {
- color: #008200 !important;
-}
-.syntaxhighlighter .string, .syntaxhighlighter .string a {
- color: blue !important;
-}
-.syntaxhighlighter .keyword {
- color: #006699 !important;
-}
-.syntaxhighlighter .preprocessor {
- color: gray !important;
-}
-.syntaxhighlighter .variable {
- color: #aa7700 !important;
-}
-.syntaxhighlighter .value {
- color: #009900 !important;
-}
-.syntaxhighlighter .functions {
- color: #ff1493 !important;
-}
-.syntaxhighlighter .constants {
- color: #0066cc !important;
-}
-.syntaxhighlighter .script {
- font-weight: bold !important;
- color: #006699 !important;
- background-color: none !important;
-}
-.syntaxhighlighter .color1, .syntaxhighlighter .color1 a {
- color: gray !important;
-}
-.syntaxhighlighter .color2, .syntaxhighlighter .color2 a {
- color: #ff1493 !important;
-}
-.syntaxhighlighter .color3, .syntaxhighlighter .color3 a {
- color: red !important;
-}
-
-.syntaxhighlighter .keyword {
- font-weight: bold !important;
-}
View
41 resources/public/css/style.css
@@ -561,8 +561,12 @@ button:active {
#instruct{
font-weight: bold;
- width: 100%;
padding-top: 25px;
+ width: 100%;
+}
+
+#theme {
+ margin-bottom: 10px;
}
#golfheader{
@@ -616,21 +620,42 @@ a.graph-class :hover {color: #445599;}
font-weight: bold;
}
-.syntaxhighlighter.solution-code.solution-user-code {
- background-color: #DDD !important;
- padding: 15px;
+.solution-code {
+ padding: 10px;
+}
+
+.solution-user-code {
+ border: #AAA solid 10px;
+ padding: 0px;
margin-bottom: 25px;
+ border-radius: 5px;
}
-.syntaxhighlighter.solution-code.solution-user-code div {
- background-color: #DDD !important;
+.CodeMirror {
+ font-size: 14px;
}
-.syntaxhighlighter.solution-code {
- padding-left: 10px;
+.CodeMirror .CodeMirror-scroll {
+ height: auto;
+ overflow: visible;
+}
+
+.CodeMirror.codebox .CodeMirror-scroll {
+ height: 300px;
+ overflow: auto;
+}
+
+.codebox {
+ border: 1px solid black;
+}
+
+.CodeMirror.test {
+ padding-top: 10px;
+ padding-bottom: 10px;
}
hr.solution {
margin-top: 20px;
margin-bottom: 20px;
}
+
View
81 resources/public/css/theme/ambiance.css
@@ -0,0 +1,81 @@
+/* ambiance theme for code-mirror */
+
+/* Color scheme */
+
+.cm-s-ambiance .cm-keyword { color: #cda869; }
+.cm-s-ambiance .cm-atom { color: #CF7EA9; }
+.cm-s-ambiance .cm-number { color: #78CF8A; }
+.cm-s-ambiance .cm-def { color: #aac6e3; }
+.cm-s-ambiance .cm-variable { color: #ffb795; }
+.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }
+.cm-s-ambiance .cm-variable-3 { color: #faded3; }
+.cm-s-ambiance .cm-property { color: #eed1b3; }
+.cm-s-ambiance .cm-operator {color: #fa8d6a;}
+.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }
+.cm-s-ambiance .cm-string { color: #8f9d6a; }
+.cm-s-ambiance .cm-string-2 { color: #9d937c; }
+.cm-s-ambiance .cm-meta { color: #D2A8A1; }
+.cm-s-ambiance .cm-error { color: #AF2018; }
+.cm-s-ambiance .cm-qualifier { color: yellow; }
+.cm-s-ambiance .cm-builtin { color: #9999cc; }
+.cm-s-ambiance .cm-bracket { color: #24C2C7; }
+.cm-s-ambiance .cm-tag { color: #fee4ff }
+.cm-s-ambiance .cm-attribute { color: #9B859D; }
+.cm-s-ambiance .cm-header {color: blue;}
+.cm-s-ambiance .cm-quote { color: #24C2C7; }
+.cm-s-ambiance .cm-hr { color: pink; }
+.cm-s-ambiance .cm-link { color: #F4C20B; }
+.cm-s-ambiance .cm-special { color: #FF9D00; }
+
+.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }
+.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }
+
+.cm-s-ambiance .CodeMirror-selected {
+ background: rgba(255, 255, 255, 0.15);
+}
+.CodeMirror-focused .cm-s-ambiance .CodeMirror-selected {
+ background: rgba(255, 255, 255, 0.10);
+}
+
+/* Editor styling */
+
+.cm-s-ambiance {
+ line-height: 1.40em;
+ font-family: Monaco, Menlo,"Andale Mono","lucida console","Courier New",monospace !important;
+ color: #E6E1DC;
+ background-color: #202020;
+ -webkit-box-shadow: inset 0 0 10px black;
+ -moz-box-shadow: inset 0 0 10px black;
+ -o-box-shadow: inset 0 0 10px black;
+ box-shadow: inset 0 0 10px black;
+}
+
+.cm-s-ambiance .CodeMirror-gutter {
+ background: #3D3D3D;
+ padding: 0 5px;
+ text-shadow: #333 1px 1px;
+ border-right: 1px solid #4D4D4D;
+ box-shadow: 0 10px 20px black;
+}
+
+.cm-s-ambiance .CodeMirror-gutter .CodeMirror-gutter-text {
+ text-shadow: 0px 1px 1px #4d4d4d;
+ color: #222;
+}
+
+.cm-s-ambiance .CodeMirror-lines {
+
+}
+
+.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor {
+ border-left: 1px solid #7991E8;
+}
+
+.cm-s-ambiance .activeline {
+ background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);
+}
+
+.cm-s-ambiance,
+.cm-s-ambiance .CodeMirror-gutter {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC");
+}
View
25 resources/public/css/theme/blackboard.css
@@ -0,0 +1,25 @@
+/* Port of TextMate's Blackboard theme */
+
+.cm-s-blackboard { background: #0C1021; color: #F8F8F8; }
+.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; }
+.cm-s-blackboard .CodeMirror-gutter { background: #0C1021; border-right: 0; }
+.cm-s-blackboard .CodeMirror-gutter-text { color: #888; }
+.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
+
+.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
+.cm-s-blackboard .cm-atom { color: #D8FA3C; }
+.cm-s-blackboard .cm-number { color: #D8FA3C; }
+.cm-s-blackboard .cm-def { color: #8DA6CE; }
+.cm-s-blackboard .cm-variable { color: #FF6400; }
+.cm-s-blackboard .cm-operator { color: #FBDE2D;}
+.cm-s-blackboard .cm-comment { color: #AEAEAE; }
+.cm-s-blackboard .cm-string { color: #61CE3C; }
+.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
+.cm-s-blackboard .cm-meta { color: #D8FA3C; }
+.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
+.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
+.cm-s-blackboard .cm-tag { color: #8DA6CE; }
+.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
+.cm-s-blackboard .cm-header { color: #FF6400; }
+.cm-s-blackboard .cm-hr { color: #AEAEAE; }
+.cm-s-blackboard .cm-link { color: #8DA6CE; }
View
18 resources/public/css/theme/cobalt.css
@@ -0,0 +1,18 @@
+.cm-s-cobalt { background: #002240; color: white; }
+.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }
+.cm-s-cobalt .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-cobalt .CodeMirror-gutter-text { color: #d0d0d0; }
+.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-cobalt span.cm-comment { color: #08f; }
+.cm-s-cobalt span.cm-atom { color: #845dc4; }
+.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }
+.cm-s-cobalt span.cm-keyword { color: #ffee80; }
+.cm-s-cobalt span.cm-string { color: #3ad900; }
+.cm-s-cobalt span.cm-meta { color: #ff9d00; }
+.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
+.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
+.cm-s-cobalt span.cm-error { color: #9d1e15; }
+.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
+.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
+.cm-s-cobalt span.cm-link { color: #845dc4; }
View
25 resources/public/css/theme/eclipse.css
@@ -0,0 +1,25 @@
+.cm-s-eclipse span.cm-meta {color: #FF1717;}
+.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }
+.cm-s-eclipse span.cm-atom {color: #219;}
+.cm-s-eclipse span.cm-number {color: #164;}
+.cm-s-eclipse span.cm-def {color: #00f;}
+.cm-s-eclipse span.cm-variable {color: black;}
+.cm-s-eclipse span.cm-variable-2 {color: #0000C0;}
+.cm-s-eclipse span.cm-variable-3 {color: #0000C0;}
+.cm-s-eclipse span.cm-property {color: black;}
+.cm-s-eclipse span.cm-operator {color: black;}
+.cm-s-eclipse span.cm-comment {color: #3F7F5F;}
+.cm-s-eclipse span.cm-string {color: #2A00FF;}
+.cm-s-eclipse span.cm-string-2 {color: #f50;}
+.cm-s-eclipse span.cm-error {color: #f00;}
+.cm-s-eclipse span.cm-qualifier {color: #555;}
+.cm-s-eclipse span.cm-builtin {color: #30a;}
+.cm-s-eclipse span.cm-bracket {color: #cc7;}
+.cm-s-eclipse span.cm-tag {color: #170;}
+.cm-s-eclipse span.cm-attribute {color: #00c;}
+.cm-s-eclipse span.cm-link {color: #219;}
+
+.cm-s-eclipse .CodeMirror-matchingbracket {
+ border:1px solid grey;
+ color:black !important;;
+}
View
10 resources/public/css/theme/elegant.css
@@ -0,0 +1,10 @@
+.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}
+.cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}
+.cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}
+.cm-s-elegant span.cm-variable {color: black;}
+.cm-s-elegant span.cm-variable-2 {color: #b11;}
+.cm-s-elegant span.cm-qualifier {color: #555;}
+.cm-s-elegant span.cm-keyword {color: #730;}
+.cm-s-elegant span.cm-builtin {color: #30a;}
+.cm-s-elegant span.cm-error {background-color: #fdd;}
+.cm-s-elegant span.cm-link {color: #762;}
View
21 resources/public/css/theme/erlang-dark.css
@@ -0,0 +1,21 @@
+.cm-s-erlang-dark { background: #002240; color: white; }
+.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }
+.cm-s-erlang-dark .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-erlang-dark .CodeMirror-gutter-text { color: #d0d0d0; }
+.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-erlang-dark span.cm-atom { color: #845dc4; }
+.cm-s-erlang-dark span.cm-attribute { color: #ff80e1; }
+.cm-s-erlang-dark span.cm-bracket { color: #ff9d00; }
+.cm-s-erlang-dark span.cm-builtin { color: #eeaaaa; }
+.cm-s-erlang-dark span.cm-comment { color: #7777ff; }
+.cm-s-erlang-dark span.cm-def { color: #ee77aa; }
+.cm-s-erlang-dark span.cm-error { color: #9d1e15; }
+.cm-s-erlang-dark span.cm-keyword { color: #ffee80; }
+.cm-s-erlang-dark span.cm-meta { color: #50fefe; }
+.cm-s-erlang-dark span.cm-number { color: #ffd0d0; }
+.cm-s-erlang-dark span.cm-operator { color: #dd1111; }
+.cm-s-erlang-dark span.cm-string { color: #3ad900; }
+.cm-s-erlang-dark span.cm-tag { color: #9effff; }
+.cm-s-erlang-dark span.cm-variable { color: #50fe50; }
+.cm-s-erlang-dark span.cm-variable-2 { color: #ee00ee; }
View
44 resources/public/css/theme/lesser-dark.css
@@ -0,0 +1,44 @@
+/*
+http://lesscss.org/ dark theme
+Ported to CodeMirror by Peter Kroon
+*/
+.cm-s-lesser-dark {
+ line-height: 1.3em;
+}
+.cm-s-lesser-dark {
+ font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', Courier, monospace !important;
+}
+
+.cm-s-lesser-dark { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
+.cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/
+.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+.cm-s-lesser-dark .CodeMirror-lines { margin-left:3px; margin-right:3px; }/*editable code holder*/
+
+div.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
+
+.cm-s-lesser-dark .CodeMirror-gutter { background: #262626; border-right:1px solid #aaa; padding-right:3px; min-width:2.5em; }
+.cm-s-lesser-dark .CodeMirror-gutter-text { color: #777; }
+
+.cm-s-lesser-dark span.cm-keyword { color: #599eff; }
+.cm-s-lesser-dark span.cm-atom { color: #C2B470; }
+.cm-s-lesser-dark span.cm-number { color: #B35E4D; }
+.cm-s-lesser-dark span.cm-def {color: white;}
+.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }
+.cm-s-lesser-dark span.cm-variable-2 { color: #669199; }
+.cm-s-lesser-dark span.cm-variable-3 { color: white; }
+.cm-s-lesser-dark span.cm-property {color: #92A75C;}
+.cm-s-lesser-dark span.cm-operator {color: #92A75C;}
+.cm-s-lesser-dark span.cm-comment { color: #666; }
+.cm-s-lesser-dark span.cm-string { color: #BCD279; }
+.cm-s-lesser-dark span.cm-string-2 {color: #f50;}
+.cm-s-lesser-dark span.cm-meta { color: #738C73; }
+.cm-s-lesser-dark span.cm-error { color: #9d1e15; }
+.cm-s-lesser-dark span.cm-qualifier {color: #555;}
+.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }
+.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }
+.cm-s-lesser-dark span.cm-tag { color: #669199; }
+.cm-s-lesser-dark span.cm-attribute {color: #00c;}
+.cm-s-lesser-dark span.cm-header {color: #a0a;}
+.cm-s-lesser-dark span.cm-quote {color: #090;}
+.cm-s-lesser-dark span.cm-hr {color: #999;}
+.cm-s-lesser-dark span.cm-link {color: #00c;}
View
28 resources/public/css/theme/monokai.css
@@ -0,0 +1,28 @@
+/* Based on Sublime Text's Monokai theme */
+
+.cm-s-monokai {background: #272822; color: #f8f8f2;}
+.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;}
+.cm-s-monokai .CodeMirror-gutter {background: #272822; border-right: 0px;}
+.cm-s-monokai .CodeMirror-gutter-text {color: #d0d0d0;}
+.cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;}
+
+.cm-s-monokai span.cm-comment {color: #75715e;}
+.cm-s-monokai span.cm-atom {color: #ae81ff;}
+.cm-s-monokai span.cm-number {color: #ae81ff;}
+
+.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;}
+.cm-s-monokai span.cm-keyword {color: #f92672;}
+.cm-s-monokai span.cm-string {color: #e6db74;}
+
+.cm-s-monokai span.cm-variable {color: #a6e22e;}
+.cm-s-monokai span.cm-variable-2 {color: #9effff;}
+.cm-s-monokai span.cm-def {color: #fd971f;}
+.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}
+.cm-s-monokai span.cm-bracket {color: #f8f8f2;}
+.cm-s-monokai span.cm-tag {color: #f92672;}
+.cm-s-monokai span.cm-link {color: #ae81ff;}
+
+.cm-s-monokai .CodeMirror-matchingbracket {
+ text-decoration: underline;
+ color: white !important;
+}
View
9 resources/public/css/theme/neat.css
@@ -0,0 +1,9 @@
+.cm-s-neat span.cm-comment { color: #a86; }
+.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }
+.cm-s-neat span.cm-string { color: #a22; }
+.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }
+.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }
+.cm-s-neat span.cm-variable { color: black; }
+.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
+.cm-s-neat span.cm-meta {color: #555;}
+.cm-s-neat span.cm-link { color: #3a3; }
View
21 resources/public/css/theme/night.css
@@ -0,0 +1,21 @@
+/* Loosely based on the Midnight Textmate theme */
+
+.cm-s-night { background: #0a001f; color: #f8f8f8; }
+.cm-s-night div.CodeMirror-selected { background: #447 !important; }
+.cm-s-night .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-night .CodeMirror-gutter-text { color: #f8f8f8; }
+.cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-night span.cm-comment { color: #6900a1; }
+.cm-s-night span.cm-atom { color: #845dc4; }
+.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
+.cm-s-night span.cm-keyword { color: #599eff; }
+.cm-s-night span.cm-string { color: #37f14a; }
+.cm-s-night span.cm-meta { color: #7678e2; }
+.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
+.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
+.cm-s-night span.cm-error { color: #9d1e15; }
+.cm-s-night span.cm-bracket { color: #8da6ce; }
+.cm-s-night span.cm-comment { color: #6900a1; }
+.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
+.cm-s-night span.cm-link { color: #845dc4; }
View
21 resources/public/css/theme/rubyblue.css
@@ -0,0 +1,21 @@
+.cm-s-rubyblue { font:13px/1.4em Trebuchet, Verdana, sans-serif; } /* - customized editor font - */
+
+.cm-s-rubyblue { background: #112435; color: white; }
+.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; }
+.cm-s-rubyblue .CodeMirror-gutter { background: #1F4661; border-right: 7px solid #3E7087; min-width:2.5em; }
+.cm-s-rubyblue .CodeMirror-gutter-text { color: white; }
+.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }
+.cm-s-rubyblue span.cm-atom { color: #F4C20B; }
+.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }
+.cm-s-rubyblue span.cm-keyword { color: #F0F; }
+.cm-s-rubyblue span.cm-string { color: #F08047; }
+.cm-s-rubyblue span.cm-meta { color: #F0F; }
+.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
+.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
+.cm-s-rubyblue span.cm-error { color: #AF2018; }
+.cm-s-rubyblue span.cm-bracket { color: #F0F; }
+.cm-s-rubyblue span.cm-link { color: #F4C20B; }
+.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
+.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
View
27 resources/public/css/theme/vibrant-ink.css
@@ -0,0 +1,27 @@
+/* Taken from the popular Visual Studio Vibrant Ink Schema */
+
+.cm-s-vibrant-ink { background: black; color: white; }
+.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; }
+
+.cm-s-vibrant-ink .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-vibrant-ink .CodeMirror-gutter-text { color: #d0d0d0; }
+.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-vibrant-ink .cm-keyword { color: #CC7832; }
+.cm-s-vibrant-ink .cm-atom { color: #FC0; }
+.cm-s-vibrant-ink .cm-number { color: #FFEE98; }
+.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }
+.cm-s-vibrant-ink span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #FFC66D }
+.cm-s-vibrant-ink span.cm-variable-3, .cm-s-cobalt span.cm-def { color: #FFC66D }
+.cm-s-vibrant-ink .cm-operator { color: #888; }
+.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }
+.cm-s-vibrant-ink .cm-string { color: #A5C25C }
+.cm-s-vibrant-ink .cm-string-2 { color: red }
+.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }
+.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }
+.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-header { color: #FF6400; }
+.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }
+.cm-s-vibrant-ink .cm-link { color: blue; }
View
46 resources/public/css/theme/xq-dark.css
@@ -0,0 +1,46 @@
+/*
+Copyright (C) 2011 by MarkLogic Corporation
+Author: Mike Brevoort <mike@brevoort.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+.cm-s-xq-dark { background: #0a001f; color: #f8f8f8; }
+.cm-s-xq-dark span.CodeMirror-selected { background: #a8f !important; }
+.cm-s-xq-dark .CodeMirror-gutter { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-xq-dark .CodeMirror-gutter-text { color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-xq-dark span.cm-keyword {color: #FFBD40;}
+.cm-s-xq-dark span.cm-atom {color: #6C8CD5;}
+.cm-s-xq-dark span.cm-number {color: #164;}
+.cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;}
+.cm-s-xq-dark span.cm-variable {color: #FFF;}
+.cm-s-xq-dark span.cm-variable-2 {color: #EEE;}
+.cm-s-xq-dark span.cm-variable-3 {color: #DDD;}
+.cm-s-xq-dark span.cm-property {}
+.cm-s-xq-dark span.cm-operator {}
+.cm-s-xq-dark span.cm-comment {color: gray;}
+.cm-s-xq-dark span.cm-string {color: #9FEE00;}
+.cm-s-xq-dark span.cm-meta {color: yellow;}
+.cm-s-xq-dark span.cm-error {color: #f00;}
+.cm-s-xq-dark span.cm-qualifier {color: #FFF700;}
+.cm-s-xq-dark span.cm-builtin {color: #30a;}
+.cm-s-xq-dark span.cm-bracket {color: #cc7;}
+.cm-s-xq-dark span.cm-tag {color: #FFBD40;}
+.cm-s-xq-dark span.cm-attribute {color: #FFF700;}
View
37 resources/public/script/codebox.js
@@ -4,20 +4,21 @@ var CodeBox = {
element: null,
submitButtons: null,
editor: null,
- editorSession: null,
- editorElement: null,
+ allEditors: [],
high: false,
animationTime: 800,
waitTimePerItem: 500,
images: null,
+
initialize: function() {
this.disableJavascript = $('#disable-javascript-codebox').length > 0
|| $.browser.mobile;
this.element = $("#code-box");
this.submitButtons = $("#run-button, #submission-button");
+ var isSettingsPage = $('#settings #code-box').length > 0;
- if(!this.disableJavascript && this.submitButtons.length > 0) {
+ if(!this.disableJavascript && this.submitButtons.length > 0 || isSettingsPage) {
this.setupEditor();
}
@@ -26,36 +27,30 @@ var CodeBox = {
},
setupEditor: function() {
- this.element.after("<div id=\"code-div\"> <pre id=\"editor\">" +
- this.element.val() + "</pre></div>");
-
- this.element.hide();
- this.editorElement = $("#editor");
-
- this.editor = ace.edit("editor");
- this.editor.setTheme("ace/theme/textmate");
- this.editor.setShowPrintMargin(false);
-
- var ClojureMode = require("ace/mode/clojure").Mode;
- this.editorSession = this.editor.getSession();
- this.editorSession.setMode(new ClojureMode());
- this.editorSession.setUseSoftTabs(true);
- this.editorSession.setTabSize(2);
- this.editorElement.css("font-size", "13px");
+ this.editor = CodeMirror.fromTextArea(this.element[0],
+ {mode: 'clojure',
+ lineNumbers: true,
+ theme: this.theme});
+ $(this.editor.getWrapperElement()).addClass('codebox');
+ $('#theme').live('change', function() {
+ var theme = $(this).val();
+ CodeBox.editor.setOption('theme', theme);
+ });
+ $('#theme').val(this.theme);
},
getCode: function() {
if(this.disableJavascript)
return $("#code-box").val();
else
- return this.editorSession.getValue();
+ return this.editor.getValue();
},
toggle: function() {
if(this.disableJavascript)
$("#code-box").toggle('fast');
else
- $("#code-div").toggle('fast');
+ $(".codebox").toggle('fast');
},
submitProblem: function(e) {
View
19 resources/public/script/foreclojure.js
@@ -3,6 +3,7 @@ var updateProblemCountDelay = 4000; // milliseconds
$(document).ready(function() {
configureDataTables();
+ highlightPreElements();
CodeBox.initialize();
configureGolf();
@@ -194,6 +195,7 @@ function changeToCodeView() {
function configureGolf(){
$('#graph-link').show();
$('#golfgraph').hide();
+ $('.theme-holder').addClass('margin-right');
$('#graph-link').click(function() {
CodeBox.toggle();
$('#golfgraph').toggle('fast', function() {
@@ -240,3 +242,20 @@ function updateProblemCount() {
setTimeout("updateProblemCount()", updateProblemCountDelay);
}
}
+
+function highlightPreElements() {
+ $('pre').each(function() {
+ var el = $(this);
+ // Don't show line numbers if current element is test or it is an example on help page.
+ var hasLineNumbers = !(el.hasClass('test') || el.parents('#getting-started').length > 0);
+ var editor = CodeMirror(function(editor) {
+ el.replaceWith(editor);
+ }, {value: el.text(),
+ mode: 'clojure',
+ readOnly: true,
+ lineNumbers: hasLineNumbers,
+ theme: CodeBox.theme});
+ var editorDiv = $(editor.getWrapperElement());
+ editorDiv.attr('class', editorDiv.attr('class') + ' ' + el.attr('class'));
+ });
+}
View
1  resources/public/vendor/script/ace/ace.js
0 additions, 1 deletion not shown
View
1  resources/public/vendor/script/ace/mode-clojure.js
@@ -1 +0,0 @@
-define("ace/mode/clojure",["require","exports","module","pilot/oop","ace/mode/text","ace/tokenizer","ace/mode/clojure_highlight_rules","ace/mode/matching_parens_outdent","ace/range"],function(a,b,c){var d=a("pilot/oop"),e=a("ace/mode/text").Mode,f=a("ace/tokenizer").Tokenizer,g=a("ace/mode/clojure_highlight_rules").ClojureHighlightRules,h=a("ace/mode/matching_parens_outdent").MatchingParensOutdent,i=a("ace/range").Range,j=function(){this.$tokenizer=new f((new g).getRules()),this.$outdent=new h};d.inherits(j,e),function(){this.toggleCommentLines=function(a,b,c,d){var e=!0,f=[],g=/^(\s*)#/;for(var h=c;h<=d;h++)if(!g.test(b.getLine(h))){e=!1;break}if(e){var j=new i(0,0,0,0);for(var h=c;h<=d;h++){var k=b.getLine(h),l=k.match(g);j.start.row=h,j.end.row=h,j.end.column=l[0].length,b.replace(j,l[1])}}else b.indentRows(c,d,";")},this.getNextLineIndent=function(a,b,c){var d=this.$getIndent(b),e=d,f=this.$tokenizer.getLineTokens(b,a),g=f.tokens,h=f.state;if(g.length&&g[g.length-1].type=="comment")return d;if(a=="start"){var i=b.match(/[\(\[]/);i&&(d+=" "),i=b.match(/[\)]/),i&&(d="")}return d},this.checkOutdent=function(a,b,c){return this.$outdent.checkOutdent(b,c)},this.autoOutdent=function(a,b,c){this.$outdent.autoOutdent(b,c)}}.call(j.prototype),b.Mode=j}),define("ace/mode/clojure_highlight_rules",["require","exports","module","pilot/oop","pilot/lang","ace/mode/text_highlight_rules"],function(a,b,c){var d=a("pilot/oop"),e=a("pilot/lang"),f=a("ace/mode/text_highlight_rules").TextHighlightRules,g=function(){var a=e.arrayToMap("* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> -&gt; ->> -&gt;&gt; .. / < &lt; <= &lt;= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap ".split(" ")),b=e.arrayToMap("def do fn if let loop monitor-enter monitor-exit new quote recur set! ' +\n\t\t\t'throw try var".split(" ")),c=e.arrayToMap("true false nil".split(" "));this.$rules={start:[{token:"comment",regex:";.*$"},{token:"comment",regex:"^=begin$",next:"comment"},{token:"keyword",regex:"[\\(|\\)]"},{token:"keyword",regex:"[\\'\\(]"},{token:"keyword",regex:"[\\[|\\]]"},{token:"keyword",regex:"[\\{|\\}|\\#\\{|\\#\\}]"},{token:"keyword",regex:"[\\&]"},{token:"keyword",regex:"[\\#\\^\\{]"},{token:"keyword",regex:"[\\%]"},{token:"keyword",regex:"[@]"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"[!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+||=|!=|<=|>=|<>|<|>|!|&&]"},{token:function(d){return b.hasOwnProperty(d)?"keyword":c.hasOwnProperty(d)?"constant.language":a.hasOwnProperty(d)?"support.function":"identifier"},regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"[:](?:[a-zA-Z]|d)+"},{token:"string.regexp",regex:'/#"(?:.|(\\")|[^""\n])*"/g'}],comment:[{token:"comment",regex:"^=end$",next:"start"},{token:"comment",regex:".+"}]}};d.inherits(g,f),b.ClojureHighlightRules=g}),define("ace/mode/matching_parens_outdent",["require","exports","module","ace/range"],function(a,b,c){var d=a("ace/range").Range,e=function(){};(function(){this.checkOutdent=function(a,b){if(!/^\s+$/.test(a))return!1;return/^\s*\)/.test(b)},this.autoOutdent=function(a,b){var c=a.getLine(b),e=c.match(/^(\s*\))/);if(!e)return 0;var f=e[1].length,g=a.findMatchingBracket({row:b,column:f});if(!g||g.row==b)return 0;var h=this.$getIndent(a.getLine(g.row));a.replace(new d(b,0,b,f-1),h)},this.$getIndent=function(a){var b=a.match(/^(\s+)/);if(b)return b[1];return""}}).call(e.prototype),b.MatchingParensOutdent=e})
View
1  resources/public/vendor/script/codemirror-clojure-compressed.js
@@ -0,0 +1 @@
+window.CodeMirror=function(){"use strict";function e(r,i){function sn(e){if(s.onDragEvent&&s.onDragEvent(fn,F(e)))return;R(e)}function an(e){return e>=0&&e<Lt.size}function ln(e){return _(Lt,e)}function cn(e,t){Wt=!0;var n=t-e.height;for(var r=e;r;r=r.parent)r.height+=n}function hn(e,t){return e.styles||e.highlight(kt,e.stateAfter=ni(D(e)),s.tabSize),e.getContent(s.tabSize,t,s.lineWrapping)}function pn(e){var t={line:0,ch:0};Mn(t,{line:Lt.size-1,ch:ln(Lt.size-1).text.length},pt(e),t,t),It=!0}function dn(e){var t=[];return Lt.iter(0,Lt.size,function(e){t.push(e.text)}),t.join(e||"\n")}function vn(e){q.scrollTop!=Ht&&(Ht=St.scrollTop=q.scrollTop,tr([]))}function mn(e){s.fixedGutter&&bt.style.left!=St.scrollLeft+"px"&&(bt.style.left=St.scrollLeft+"px"),St.scrollTop!=Ht&&(Ht=St.scrollTop,q.scrollTop!=Ht&&(q.scrollTop=Ht),tr([])),s.onScroll&&s.onScroll(fn)}function gn(e){function u(t){g&&(St.draggable=!1),Bt=!1,l(),c(),Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)<10&&(I(t),lr(n.line,n.ch,!0),Kn())}function m(e){if(i=="single")ur(n,e);else if(i=="double"){var t=gr(e);it(e,d)?ur(t.from,v):ur(d,t.to)}else i=="triple"&&(it(e,d)?ur(v,hr({line:e.line,ch:0})):ur(d,hr({line:e.line+1,ch:0})))}function y(e){var t=Kr(e,!0);if(t&&!rt(t,a)){Ot||An(),a=t,m(t),It=!1;var n=er();if(t.line>=n.to||t.line<n.from)f=setTimeout(ai(function(){y(e)}),150)}}function b(e){clearTimeout(f);var t=Kr(e);t&&m(t),I(e),Kn(),It=!0,w(),l()}or(W(e,"shiftKey"));for(var t=U(e);t!=xt;t=t.parentNode)if(t.parentNode==Et&&t!=wt)return;for(var t=U(e);t!=xt;t=t.parentNode)if(t.parentNode==yt)return s.onGutterClick&&s.onGutterClick(fn,ct(yt.childNodes,t)+$t,e),I(e);var n=Kr(e);switch(z(e)){case 3:h&&Gr(e);return;case 2:n&&lr(n.line,n.ch,!0),setTimeout(Kn,20),I(e);return}if(!n){U(e)==St&&I(e);return}Ot||An();var r=+(new Date),i="single";if(Pt&&Pt.time>r-400&&rt(Pt.pos,n))i="triple",I(e),setTimeout(Kn,20),yr(n.line);else if(Dt&&Dt.time>r-400&&rt(Dt.pos,n)){i="double",Pt={time:r,pos:n},I(e);var o=gr(n);ur(o.from,o.to)}else Dt={time:r,pos:n};var a=n,f;if(s.dragDrop&&J&&!s.readOnly&&!rt(Mt.from,Mt.to)&&!it(n,Mt.from)&&!it(Mt.to,n)&&i=="single"){g&&(St.draggable=!0);var l=X(document,"mouseup",ai(u),!0),c=X(St,"drop",ai(u),!0);Bt=!0,St.dragDrop&&St.dragDrop();return}I(e),i=="single"&&lr(n.line,n.ch,!0);var d=Mt.from,v=Mt.to,w=X(document,"mousemove",ai(function(e){clearTimeout(f),I(e),!p&&!z(e)?b(e):y(e)}),!0),l=X(document,"mouseup",ai(b),!0)}function yn(e){for(var t=U(e);t!=xt;t=t.parentNode)if(t.parentNode==yt)return I(e);I(e)}function bn(e){if(s.onDragEvent&&s.onDragEvent(fn,F(e)))return;I(e);var t=Kr(e,!0),n=e.dataTransfer.files;if(!t||s.readOnly)return;if(n&&n.length&&window.FileReader&&window.File){var r=n.length,i=Array(r),o=0,u=function(e,n){var s=new FileReader;s.onload=function(){i[n]=s.result,++o==r&&(t=hr(t),ai(function(){var e=In(i.join(""),t,t);ur(t,e)})())},s.readAsText(e)};for(var a=0;a<r;++a)u(n[a],a)}else{if(Bt&&!it(t,Mt.from)&&!it(Mt.to,t))return;try{var i=e.dataTransfer.getData("Text");i&&fi(function(){var e=Mt.from,n=Mt.to;ur(t,t),Bt&&In("",e,n),qn(i),Kn()})}catch(e){}}}function wn(e){var t=zn();e.dataTransfer.setData("Text",t),e.dataTransfer.setDragImage&&e.dataTransfer.setDragImage(ot("img"),0,0)}function En(e,t){if(typeof e=="string"){e=u[e];if(!e)return!1}var n=_t;try{s.readOnly&&(Ft=!0),t&&(_t=null),e(fn)}catch(r){if(r!=$)throw r;return!1}finally{_t=n,Ft=!1}return!0}function xn(e){function u(){o=!0}var t=f(s.keyMap),n=t.auto;clearTimeout(Sn),n&&!c(e)&&(Sn=setTimeout(function(){f(s.keyMap)==t&&(s.keyMap=n.call?n.call(null,fn):n)},50));var r=vt[W(e,"keyCode")],i=!1;if(r==null||e.altGraphKey)return!1;W(e,"altKey")&&(r="Alt-"+r),W(e,"ctrlKey")&&(r="Ctrl-"+r),W(e,"metaKey")&&(r="Cmd-"+r);var o=!1;return W(e,"shiftKey")?i=l("Shift-"+r,s.extraKeys,s.keyMap,function(e){return En(e,!0)},u)||l(r,s.extraKeys,s.keyMap,function(e){if(typeof e=="string"&&/^go[A-Z]/.test(e))return En(e)},u):i=l(r,s.extraKeys,s.keyMap,En,u),o&&(i=!1),i&&(I(e),Yr(),p&&(e.oldKeyCode=e.keyCode,e.keyCode=0)),i}function Tn(e,t){var n=l("'"+t+"'",s.extraKeys,s.keyMap,function(e){return En(e,!0)});return n&&(I(e),Yr()),n}function Cn(e){Ot||An(),p&&e.keyCode==27&&(e.returnValue=!1),en&&$n()&&(en=!1);if(s.onKeyEvent&&s.onKeyEvent(fn,F(e)))return;var t=W(e,"keyCode");or(t==16||W(e,"shiftKey"));var r=xn(e);b&&(Nn=r?t:null,!r&&t==88&&W(e,n?"metaKey":"ctrlKey")&&qn(""))}function kn(e){en&&$n();if(s.onKeyEvent&&s.onKeyEvent(fn,F(e)))return;var t=W(e,"keyCode"),n=W(e,"charCode");if(b&&t==Nn){Nn=null,I(e);return}if((b&&(!e.which||e.which<10)||E)&&xn(e))return;var r=String.fromCharCode(n==null?t:n);s.electricChars&&kt.electricChars&&s.smartIndent&&!s.readOnly&&kt.electricChars.indexOf(r)>-1&&setTimeout(ai(function(){wr(Mt.to.line,"smart")}),75);if(Tn(e,r))return;Xn()}function Ln(e){if(s.onKeyEvent&&s.onKeyEvent(fn,F(e)))return;W(e,"keyCode")==16&&(_t=null)}function An(){if(s.readOnly=="nocursor")return;Ot||(s.onFocus&&s.onFocus(fn),Ot=!0,St.className.search(/\bCodeMirror-focused\b/)==-1&&(St.className+=" CodeMirror-focused")),Wn(),Yr()}function On(){Ot&&(s.onBlur&&s.onBlur(fn),Ot=!1,Qt&&ai(function(){Qt&&(Qt(),Qt=null)})(),St.className=St.className.replace(" CodeMirror-focused","")),clearInterval(Ct),setTimeout(function(){Ot||(_t=null)},150)}function Mn(e,t,n,r,i){if(Ft)return;if(nn){var o=[];Lt.iter(e.line,t.line+1,function(e){o.push(e.text)}),nn.addChange(e.line,n.length,o);while(nn.done.length>s.undoDepth)nn.done.shift()}Hn(e,t,n,r,i)}function _n(e,t){if(!e.length)return;var n=e.pop(),r=[];for(var i=n.length-1;i>=0;i-=1){var s=n[i],o=[],u=s.start+s.added;Lt.iter(s.start,u,function(e){o.push(e.text)}),r.push({start:s.start,added:s.old.length,old:o});var a={line:s.start+s.old.length-1,ch:lt(o[o.length-1],s.old[s.old.length-1])};Hn({line:s.start,ch:0},{line:u-1,ch:ln(u-1).text.length},s.old,a,a)}It=!0,t.push(r)}function Dn(){_n(nn.done,nn.undone)}function Pn(){_n(nn.undone,nn.done)}function Hn(e,t,n,r,i){function b(e){return e<=Math.min(t.line,t.line+m)?e:e+m}if(Ft)return;var o=!1,u=Gt.text.length;s.lineWrapping||Lt.iter(e.line,t.line+1,function(e){if(!e.hidden&&e.text.length==u)return o=!0,!0});if(e.line!=t.line||n.length>1)Wt=!0;var a=t.line-e.line,f=ln(e.line),l=ln(t.line);if(e.ch==0&&t.ch==0&&n[n.length-1]==""){var c=[],h=null;e.line?(h=ln(e.line-1),h.fixMarkEnds(l)):l.fixMarkStarts();for(var p=0,d=n.length-1;p<d;++p)c.push(A.inheritMarks(n[p],h));a&&Lt.remove(e.line,a,Xt),c.length&&Lt.insert(e.line,c)}else if(f==l)if(n.length==1)f.replace(e.ch,t.ch,n[0]);else{l=f.split(t.ch,n[n.length-1]),f.replace(e.ch,null,n[0]),f.fixMarkEnds(l);var c=[];for(var p=1,d=n.length-1;p<d;++p)c.push(A.inheritMarks(n[p],f));c.push(l),Lt.insert(e.line+1,c)}else if(n.length==1)f.replace(e.ch,null,n[0]),l.replace(null,t.ch,""),f.append(l),Lt.remove(e.line+1,a,Xt);else{var c=[];f.replace(e.ch,null,n[0]),l.replace(null,t.ch,n[n.length-1]),f.fixMarkEnds(l);for(var p=1,d=n.length-1;p<d;++p)c.push(A.inheritMarks(n[p],f));a>1&&Lt.remove(e.line+1,a-1,Xt),Lt.insert(e.line+1,c)}if(s.lineWrapping){var v=Math.max(5,St.clientWidth/Vr()-3);Lt.iter(e.line,e.line+n.length,function(e){if(e.hidden)return;var t=Math.ceil(e.text.length/v)||1;t!=e.height&&cn(e,t)})}else Lt.iter(e.line,e.line+n.length,function(e){var t=e.text;!e.hidden&&t.length>u&&(Gt=e,u=t.length,Zt=!0,o=!1)}),o&&(Yt=!0);At=Math.min(At,e.line),ii(400);var m=n.length-a-1;Rt.push({from:e.line,to:t.line+1,diff:m});var g={from:e,to:t,text:n};if(Ut){for(var y=Ut;y.next;y=y.next);y.next=g}else Ut=g;ar(hr(r),hr(i),b(Mt.from.line),b(Mt.to.line))}function Bn(){var e=Lt.height*zr()+2*$r();return e*.99>St.offsetHeight?e:!1}function jn(e){var t=Bn();q.style.display=t?"block":"none",t?(j.style.height=Et.style.minHeight=t+"px",q.style.height=St.clientHeight+"px",e!=null&&(q.scrollTop=St.scrollTop=e,g&&setTimeout(function(){if(q.scrollTop!=e)return;q.scrollTop=e+(e?-1:1),q.scrollTop=e},0))):Et.style.minHeight="",wt.style.top=Vt*zr()+"px"}function Fn(){Gt=ln(0),Zt=!0;var e=Gt.text.length;Lt.iter(1,Lt.size,function(t){var n=t.text;!t.hidden&&n.length>e&&(e=n.length,Gt=t)}),Yt=!1}function In(e,t,n){function r(r){if(it(r,t))return r;if(!it(n,r))return i;var s=r.line+e.length-(n.line-t.line)-1,o=r.ch;return r.line==n.line&&(o+=e[e.length-1].length-(n.ch-(n.line==t.line?t.ch:0))),{line:s,ch:o}}t=hr(t),n?n=hr(n):n=t,e=pt(e);var i;return Rn(e,t,n,function(e){return i=e,{from:r(Mt.from),to:r(Mt.to)}}),i}function qn(e,t){Rn(pt(e),Mt.from,Mt.to,function(e){return t=="end"?{from:e,to:e}:t=="start"?{from:Mt.from,to:Mt.from}:{from:Mt.from,to:e}})}function Rn(e,t,n,r){var i=e.length==1?e[0].length+t.ch:e[e.length-1].length,s=r({line:t.line+e.length-1,ch:i});Mn(t,n,e,s.from,s.to)}function Un(e,t,n){var r=e.line,i=t.line;if(r==i)return ln(r).text.slice(e.ch,t.ch);var s=[ln(r).text.slice(e.ch)];return Lt.iter(r+1,i,function(e){s.push(e.text)}),s.push(ln(i).text.slice(0,t.ch)),s.join(n||"\n")}function zn(e){return Un(Mt.from,Mt.to,e)}function Wn(){if(en)return;Tt.set(s.pollInterval,function(){$n(),Ot&&Wn()})}function Xn(){function t(){var n=$n();!n&&!e?(e=!0,Tt.set(60,t)):(en=!1,Wn())}var e=!1;en=!0,Tt.set(20,t)}function $n(){if(!Ot||dt(N)||s.readOnly)return!1;var e=N.value;if(e==Vn)return!1;si(),_t=null;var t=0,n=Math.min(Vn.length,e.length);while(t<n&&Vn[t]==e[t])++t;return t<Vn.length?Mt.from={line:Mt.from.line,ch:Mt.from.ch-(Vn.length-t)}:jt&&rt(Mt.from,Mt.to)&&(Mt.to={line:Mt.to.line,ch:Math.min(ln(Mt.to.line).text.length,Mt.to.ch+(e.length-t))}),qn(e.slice(t),"end"),e.length>1e3?N.value=Vn="":Vn=e,oi(),!0}function Jn(e){rt(Mt.from,Mt.to)?e&&(Vn=N.value=""):(Vn="",N.value=zn(),Ot&&nt(N))}function Kn(){s.readOnly!="nocursor"&&N.focus()}function Qn(){var e=Gn();Yn(e.x,e.y,e.x,e.yBot);if(!Ot)return;var t=Et.getBoundingClientRect(),n=null;e.y+t.top<0?n=!0:e.y+t.top+zr()>(window.innerHeight||document.documentElement.clientHeight)&&(n=!1);if(n!=null){var r=et.style.display=="none";r&&(et.style.display="",et.style.left=e.x+"px",et.style.top=e.y-Vt+"px"),et.scrollIntoView(n),r&&(et.style.display="none")}}function Gn(){var e=jr(Mt.inverted?Mt.from:Mt.to),t=s.lineWrapping?Math.min(e.x,gt.offsetWidth):e.x;return{x:t,y:e.y,yBot:e.yBot}}function Yn(e,t,n,r){var i=Zn(e,t,n,r);i.scrollLeft!=null&&(St.scrollLeft=i.scrollLeft),i.scrollTop!=null&&(q.scrollTop=St.scrollTop=i.scrollTop)}function Zn(e,t,n,r){var i=Jr(),o=$r();t+=o,r+=o,e+=i,n+=i;var u=St.clientHeight,a=q.scrollTop,f={},l=Bn()||Infinity,c=t<o+10,h=r+o>l-10;t<a?f.scrollTop=c?0:Math.max(0,t):r>a+u&&(f.scrollTop=(h?l:r)-u);var p=St.clientWidth,d=St.scrollLeft,v=s.fixedGutter?bt.clientWidth:0,m=e<v+i+10;return e<d+v||m?(m&&(e=0),f.scrollLeft=Math.max(0,e-10-v)):n>p+d-3&&(f.scrollLeft=n+10-p),f}function er(e){var t=zr(),n=(e!=null?e:q.scrollTop)-$r(),r=Math.max(0,Math.floor(n/t)),i=Math.ceil((n+St.clientHeight)/t);return{from:P(Lt,r),to:P(Lt,i)}}function tr(e,t,n){function d(){var e=K.firstChild,t=!1;return Lt.iter($t,Jt,function(n){if(!e)return;if(!n.hidden){var r=Math.round(e.offsetHeight/c)||1;n.height!=r&&(cn(n,r),Wt=t=!0)}e=e.nextSibling}),t}if(!St.clientWidth){$t=Jt=Vt=0;return}var r=er(n);if(e!==!0&&e.length==0&&r.from>$t&&r.to<Jt){jn(n);return}var i=Math.max(r.from-100,0),o=Math.min(Lt.size,r.to+100);$t<i&&i-$t<20&&(i=$t),Jt>o&&Jt-o<20&&(o=Math.min(Lt.size,Jt));var u=e===!0?[]:nr([{from:$t,to:Jt,domStart:0}],e),a=0;for(var f=0;f<u.length;++f){var l=u[f];l.from<i&&(l.domStart+=i-l.from,l.from=i),l.to>o&&(l.to=o),l.from>=l.to?u.splice(f--,1):a+=l.to-l.from}if(a==o-i&&i==$t&&o==Jt){jn(n);return}u.sort(function(e,t){return e.domStart-t.domStart});var c=zr(),h=bt.style.display;K.style.display="none",rr(i,o,u),K.style.display=bt.style.display="";var p=i!=$t||o!=Jt||Kt!=St.clientHeight+c;p&&(Kt=St.clientHeight+c),(i!=$t||o!=Jt&&s.onViewportChange)&&setTimeout(function(){s.onViewportChange&&s.onViewportChange(fn,i,o)}),$t=i,Jt=o,Vt=H(Lt,i),ii(100);if(K.childNodes.length!=Jt-$t)throw new Error("BAD PATCH! "+JSON.stringify(u)+" size="+(Jt-$t)+" nodes="+K.childNodes.length);return s.lineWrapping&&d(),bt.style.display=h,(p||Wt)&&ir()&&s.lineWrapping&&d()&&ir(),jn(n),sr(),!t&&s.onUpdate&&s.onUpdate(fn),!0}function nr(e,t){for(var n=0,r=t.length||0;n<r;++n){var i=t[n],s=[],o=i.diff||0;for(var u=0,a=e.length;u<a;++u){var f=e[u];i.to<=f.from&&i.diff?s.push({from:f.from+o,to:f.to+o,domStart:f.domStart}):i.to<=f.from||i.from>=f.to?s.push(f):(i.from>f.from&&s.push({from:f.from,to:i.from,domStart:f.domStart}),i.to<f.to&&s.push({from:i.to+o,to:f.to+o,domStart:f.domStart+(i.to-f.from)}))}e=s}return e}function rr(e,t,n){function r(e){var t=e.nextSibling;return e.parentNode.removeChild(e),t}if(!n.length)ut(K);else{var i=0,s=K.firstChild,o;for(var u=0;u<n.length;++u){var a=n[u];while(a.domStart>i)s=r(s),i++;for(var f=0,l=a.to-a.from;f<l;++f)s=s.nextSibling,i++}while(s)s=r(s)}var c=n.shift(),s=K.firstChild,f=e;Lt.iter(e,t,function(e){c&&c.to==f&&(c=n.shift());if(!c||c.from>f){if(e.hidden)var t=ot("pre");else{var t=hn(e);e.className&&(t.className=e.className);if(e.bgClassName){var r=ot("pre","\u00a0",e.bgClassName,"position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: -2");t=ot("div",[r,t],null,"position: relative")}}K.insertBefore(t,s)}else s=s.nextSibling;++f})}function ir(){if(!s.gutter&&!s.lineNumbers)return;var e=wt.offsetHeight,t=St.clientHeight;bt.style.height=(e-t<2?t:e)+"px";var n=document.createDocumentFragment(),r=$t,i;Lt.iter($t,Math.max(Jt,$t+1),function(e){if(e.hidden)n.appendChild(ot("pre"));else{var t=e.gutterMarker,o=s.lineNumbers?s.lineNumberFormatter(r+s.firstLineNumber):null;t&&t.text?o=t.text.replace("%N%",o!=null?o:""):o==null&&(o="\u00a0");var u=n.appendChild(ot("pre",null,t&&t.style));u.innerHTML=o;for(var a=1;a<e.height;++a)u.appendChild(ot("br")),u.appendChild(document.createTextNode("\u00a0"));t||(i=r)}++r}),bt.style.display="none",at(yt,n);if(i!=null&&s.lineNumbers){var o=yt.childNodes[i-$t],u=String(Lt.size).length,a=Z(o.firstChild),f="";while(a.length+f.length<u)f+="\u00a0";f&&o.insertBefore(document.createTextNode(f),o.firstChild)}bt.style.display="";var l=Math.abs((parseInt(gt.style.marginLeft)||0)-bt.offsetWidth)>2;return gt.style.marginLeft=bt.offsetWidth+"px",Wt=!1,l}function sr(){var e=rt(Mt.from,Mt.to),t=jr(Mt.from,!0),n=e?t:jr(Mt.to,!0),r=Mt.inverted?t:n,i=zr(),o=Y(xt),u=Y(K);L.style.top=Math.max(0,Math.min(St.offsetHeight,r.y+u.top-o.top))+"px",L.style.left=Math.max(0,Math.min(St.offsetWidth,r.x+u.left-o.left))+"px";if(e)et.style.top=r.y+"px",et.style.left=(s.lineWrapping?Math.min(r.x,gt.offsetWidth):r.x)+"px",et.style.display="",G.style.display="none";else{var a=t.y==n.y,f=document.createDocumentFragment(),l=gt.clientWidth||gt.offsetWidth,c=gt.clientHeight||gt.offsetHeight,h=function(e,t,n,r){var i=m?"width: "+(n?l-n-e:l)+"px":"right: "+n+"px";f.appendChild(ot("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px; top: "+t+"px; "+i+"; height: "+r+"px"))};if(Mt.from.ch&&t.y>=0){var p=a?l-n.x:0;h(t.x,t.y,p,i)}var d=Math.max(0,t.y+(Mt.from.ch?i:0)),v=Math.min(n.y,c)-d;v>.2*i&&h(0,d,0,v),(!a||!Mt.from.ch)&&n.y<c-.5*i&&h(0,n.y,l-n.x,i),at(G,f),et.style.display="none",G.style.display=""}}function or(e){e?_t=_t||(Mt.inverted?Mt.to:Mt.from):_t=null}function ur(e,t){var n=_t&&hr(_t);n&&(it(n,e)?e=n:it(t,n)&&(t=n)),ar(e,t),qt=!0}function ar(e,t,n,r){tn=null,n==null&&(n=Mt.from.line,r=Mt.to.line);if(rt(Mt.from,e)&&rt(Mt.to,t))return;if(it(t,e)){var i=t;t=e,e=i}if(e.line!=n){var o=fr(e,n,Mt.from.ch);o?e=o:Pr(e.line,!1)}t.line!=r&&(t=fr(t,r,Mt.to.ch)),rt(e,t)?Mt.inverted=!1:rt(e,Mt.to)?Mt.inverted=!1:rt(t,Mt.from)&&(Mt.inverted=!0);if(s.autoClearEmptyLines&&rt(Mt.from,Mt.to)){var u=Mt.inverted?e:t;if(u.line!=Mt.from.line&&Mt.from.line<Lt.size){var a=ln(Mt.from.line);/^\s+$/.test(a.text)&&setTimeout(ai(function(){if(a.parent&&/^\s+$/.test(a.text)){var e=D(a);In("",{line:e,ch:0},{line:e,ch:a.text.length})}},10))}}Mt.from=e,Mt.to=t,zt=!0}function fr(e,t,n){function r(t){var r=e.line+t,i=t==1?Lt.size:-1;while(r!=i){var o=ln(r);if(!o.hidden){var u=e.ch;if(s||u>n||u>o.text.length)u=o.text.length;return{line:r,ch:u}}r+=t}}var i=ln(e.line),s=e.ch==i.text.length&&e.ch!=n;return i.hidden?e.line>=t?r(1)||r(-1):r(-1)||r(1):e}function lr(e,t,n){var r=hr({line:e,ch:t||0});(n?ur:ar)(r,r)}function cr(e){return Math.max(0,Math.min(e,Lt.size-1))}function hr(e){if(e.line<0)return{line:0,ch:0};if(e.line>=Lt.size)return{line:Lt.size-1,ch:ln(Lt.size-1).text.length};var t=e.ch,n=ln(e.line).text.length;return t==null||t>n?{line:e.line,ch:n}:t<0?{line:e.line,ch:0}:e}function pr(e,t){function o(){for(var t=r+e,n=e<0?-1:Lt.size;t!=n;t+=e){var i=ln(t);if(!i.hidden)return r=t,s=i,!0}}function u(t){if(i==(e<0?0:s.text.length)){if(!!t||!o())return!1;i=e<0?s.text.length:0}else i+=e;return!0}var n=Mt.inverted?Mt.from:Mt.to,r=n.line,i=n.ch,s=ln(r);if(t=="char")u();else if(t=="column")u(!0);else if(t=="word"){var a=!1;for(;;){if(e<0&&!u())break;if(ht(s.text.charAt(i)))a=!0;else if(a){e<0&&(e=1,u());break}if(e>0&&!u())break}}return{line:r,ch:i}}function dr(e,t){var n=e<0?Mt.from:Mt.to;if(_t||rt(Mt.from,Mt.to))n=pr(e,t);lr(n.line,n.ch,!0)}function vr(e,t){rt(Mt.from,Mt.to)?e<0?In("",pr(e,t),Mt.to):In("",Mt.from,pr(e,t)):In("",Mt.from,Mt.to),qt=!0}function mr(e,t){var n=0,r=jr(Mt.inverted?Mt.from:Mt.to,!0);tn!=null&&(r.x=tn);if(t=="page")var i=Math.min(St.clientHeight,window.innerHeight||document.documentElement.clientHeight),s=Fr(r.x,r.y+i*e);else if(t=="line")var o=zr(),s=Fr(r.x,r.y+.5*o+e*o);t=="page"&&(q.scrollTop+=jr(s,!0).y-r.y),lr(s.line,s.ch,!0),tn=r.x}function gr(e){var t=ln(e.line).text,n=e.ch,r=e.ch;if(t){e.after===!1||r==t.length?--n:++r;var i=t.charAt(n),s=ht(i)?ht:/\s/.test(i)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!ht(e)};while(n>0&&s(t.charAt(n-1)))--n;while(r<t.length&&s(t.charAt(r)))++r}return{from:{line:e.line,ch:n},to:{line:e.line,ch:r}}}function yr(e){ur({line:e,ch:0},hr({line:e+1,ch:0}))}function br(e){if(rt(Mt.from,Mt.to))return wr(Mt.from.line,e);var t=Mt.to.line-(Mt.to.ch?0:1);for(var n=Mt.from.line;n<=t;++n)wr(n,e)}function wr(e,t){t||(t="add");if(t=="smart")if(!kt.indent)t="prev";else var n=ni(e);var r=ln(e),i=r.indentation(s.tabSize),o=r.text.match(/^\s*/)[0],u;t=="smart"&&(u=kt.indent(n,r.text.slice(o.length),r.text),u==$&&(t="prev")),t=="prev"?e?u=ln(e-1).indentation(s.tabSize):u=0:t=="add"?u=i+s.indentUnit:t=="subtract"&&(u=i-s.indentUnit),u=Math.max(0,u);var a=u-i,f="",l=0;if(s.indentWithTabs)for(var c=Math.floor(u/s.tabSize);c;--c)l+=s.tabSize,f+=" ";l<u&&(f+=tt(u-l)),f!=o&&In(f,{line:e,ch:0},{line:e,ch:o.length})}function Er(){kt=e.getMode(s,s.mode),Lt.iter(0,Lt.size,function(e){e.stateAfter=null}),At=0,ii(100)}function Sr(){var e=s.gutter||s.lineNumbers;bt.style.display=e?"":"none",e?Wt=!0:K.parentNode.style.marginLeft=0}function xr(e,t){if(s.lineWrapping){xt.className+=" CodeMirror-wrap";var n=St.clientWidth/Vr()-3;Lt.iter(0,Lt.size,function(e){if(e.hidden)return;var t=Math.ceil(e.text.length/n)||1;t!=1&&cn(e,t)}),gt.style.minWidth=ft.style.left=""}else xt.className=xt.className.replace(" CodeMirror-wrap",""),Fn(),Lt.iter(0,Lt.size,function(e){e.height!=1&&!e.hidden&&cn(e,1)});Rt.push({from:0,to:Lt.size})}function Tr(){St.className=St.className.replace(/\s*cm-s-\S+/g,"")+s.theme.replace(/(^|\s)\s*/g," cm-s-")}function Nr(){var e=a[s.keyMap].style;xt.className=xt.className.replace(/\s*cm-keymap-\S+/g,"")+(e?" cm-keymap-"+e:"")}function Cr(){this.set=[]}function kr(e,t,n){function i(e,t,n,i){ln(e).addMark(new C(t,n,i,r))}e=hr(e),t=hr(t);var r=new Cr;if(!it(e,t))return r;if(e.line==t.line)i(e.line,e.ch,t.ch,n);else{i(e.line,e.ch,null,n);for(var s=e.line+1,o=t.line;s<o;++s)i(s,null,null,n);i(t.line,null,t.ch,n)}return Rt.push({from:e.line,to:t.line+1}),r}function Lr(e){e=hr(e);var t=new k(e.ch);return ln(e.line).addMark(t),t}function Ar(e){e=hr(e);var t=[],n=ln(e.line).marked;if(!n)return t;for(var r=0,i=n.length;r<i;++r){var s=n[r];(s.from==null||s.from<=e.ch)&&(s.to==null||s.to>=e.ch)&&t.push(s.marker||s)}return t}function Or(e,t,n){return typeof e=="number"&&(e=ln(cr(e))),e.gutterMarker={text:t,style:n},Wt=!0,e}function Mr(e){typeof e=="number"&&(e=ln(cr(e))),e.gutterMarker=null,Wt=!0}function _r(e,t){var n=e,r=e;return typeof e=="number"?r=ln(cr(e)):n=D(e),n==null?null:t(r,n)?(Rt.push({from:n,to:n+1}),r):null}function Dr(e,t,n){return _r(e,function(e){if(e.className!=t||e.bgClassName!=n)return e.className=t,e.bgClassName=n,!0})}function Pr(e,t){return _r(e,function(e,n){if(e.hidden!=t){e.hidden=t,s.lineWrapping||(t&&e.text.length==Gt.text.length?Yt=!0:!t&&e.text.length>Gt.text.length&&(Gt=e,Yt=!1)),cn(e,t?0:1);var r=Mt.from.line,i=Mt.to.line;if(t&&(r==n||i==n)){var o=r==n?fr({line:r,ch:0},r,0):Mt.from,u=i==n?fr({line:i,ch:0},i,0):Mt.to;if(!u)return;ar(o,u)}return Wt=!0}})}function Hr(e){if(typeof e=="number"){if(!an(e))return null;var t=e;e=ln(e);if(!e)return null}else{var t=D(e);if(t==null)return null}var n=e.gutterMarker;return{line:t,handle:e,text:e.text,markerText:n&&n.text,markerClass:n&&n.style,lineClass:e.className,bgClass:e.bgClassName}}function Br(e,t){if(t==0)return{top:0,left:0};var n=s.lineWrapping&&t<e.text.length&&Q.test(e.text.slice(t-1,t+1)),r=hn(e,t);at(mt,r);var i=r.anchor,o=i.offsetTop,u=i.offsetLeft;if(p&&o==0&&u==0){var a=ot("span","x");i.parentNode.insertBefore(a,i.nextSibling),o=a.offsetTop}return{top:o,left:u}}function jr(e,t){var n,r=zr(),i=r*(H(Lt,e.line)-(t?Vt:0));if(e.ch==0)n=0;else{var o=Br(ln(e.line),e.ch);n=o.left,s.lineWrapping&&(i+=Math.max(0,o.top))}return{x:n,y:i,yBot:i+r}}function Fr(e,t){function h(e){var t=Br(u,e);if(f){var r=Math.round(t.top/n);return c=r!=l,Math.max(0,t.left+(r-l)*St.clientWidth)}return t.left}var n=zr(),r=Vr(),i=Vt+Math.floor(t/n);if(i<0)return{line:0,ch:0};var o=P(Lt,i);if(o>=Lt.size)return{line:Lt.size-1,ch:ln(Lt.size-1).text.length};var u=ln(o),a=u.text,f=s.lineWrapping,l=f?i-H(Lt,o):0;if(e<=0&&l==0)return{line:o,ch:0};var c=!1,p=0,d=0,v=a.length,m,g=Math.min(v,Math.ceil((e+l*St.clientWidth*.9)/r));for(;;){var y=h(g);if(!(y<=e&&g<v)){m=y,v=g;break}g=Math.min(v,Math.ceil(g*1.2))}if(e>m)return{line:o,ch:v};g=Math.floor(v*.8),y=h(g),y<e&&(p=g,d=y);for(;;){if(v-p<=1){var b=e-d<m-e;return{line:o,ch:b?p:v,after:b}}var w=Math.ceil((p+v)/2),E=h(w);E>e?(v=w,m=E,c&&(m+=1e3)):(p=w,d=E)}}function Ir(e){var t=jr(e,!0),n=Y(gt);return{x:n.left+t.x,y:n.top+t.y,yBot:n.top+t.yBot}}function zr(){if(Ur==null){Ur=ot("pre");for(var e=0;e<49;++e)Ur.appendChild(document.createTextNode("x")),Ur.appendChild(ot("br"));Ur.appendChild(document.createTextNode("x"))}var t=K.clientHeight;return t==Rr?qr:(Rr=t,at(mt,Ur.cloneNode(!0)),qr=mt.firstChild.offsetHeight/50||1,ut(mt),qr)}function Vr(){if(St.clientWidth==Xr)return Wr;Xr=St.clientWidth;var e=ot("span","x"),t=ot("pre",[e]);return at(mt,t),Wr=e.offsetWidth||10}function $r(){return gt.offsetTop}function Jr(){return gt.offsetLeft}function Kr(e,t){var n=Y(St,!0),r,i;try{r=e.clientX,i=e.clientY}catch(e){return null}if(!t&&(r-n.left>St.clientWidth||i-n.top>St.clientHeight))return null;var s=Y(gt,!0);return Fr(r-s.left,i-s.top)}function Gr(e){function i(){L.style.position="relative",N.style.cssText=r,v&&(q.scrollTop=n),Jn(!0),Wn();if(N.selectionStart!=null){var e=N.value=" "+N.value,t=0;Vn=" ",N.selectionStart=1,N.selectionEnd=e.length,Qr=setTimeout(function i(){Vn==" "&&N.selectionStart==0?ai(u.selectAll)(fn):t++<10?Qr=setTimeout(i,500):Jn()},200)}}var t=Kr(e),n=q.scrollTop;if(!t||b)return;(rt(Mt.from,Mt.to)||it(t,Mt.from)||!it(t,Mt.to))&&ai(lr)(t.line,t.ch);var r=N.style.cssText;L.style.position="absolute",N.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(e.clientY-5)+"px; left: "+(e.clientX-5)+"px; z-index: 1000; background: white; "+"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",Kn(),nt(N),clearTimeout(Qr);if(h){R(e);var s=X(window,"mouseup",function(){s(),setTimeout(i,20)},!0)}else setTimeout(i,50)}function Yr(){clearInterval(Ct);var e=!0;et.style.visibility="",Ct=setInterval(function(){et.style.visibility=(e=!e)?"":"hidden"},s.cursorBlinkRate)}function ei(e){function v(e,t,n){if(!e.text)return;var r=e.styles,i=o?0:e.text.length-1,s;for(var a=o?0:r.length-2,f=o?r.length:-2;a!=f;a+=2*u){var l=r[a];if(r[a+1]!=h){i+=u*l.length;continue}for(var c=o?0:l.length-1,v=o?l.length:-1;c!=v;c+=u,i+=u)if(i>=t&&i<n&&d.test(s=l.charAt(c))){var m=Zr[s];if(m.charAt(1)==">"==o)p.push(s);else{if(p.pop()!=m.charAt(0))return{pos:i,match:!1};if(!p.length)return{pos:i,match:!0}}}}}var t=Mt.inverted?Mt.from:Mt.to,n=ln(t.line),r=t.ch-1,i=r>=0&&Zr[n.text.charAt(r)]||Zr[n.text.charAt(++r)];if(!i)return;var s=i.charAt(0),o=i.charAt(1)==">",u=o?1:-1,a=n.styles;for(var f=r+1,l=0,c=a.length;l<c;l+=2)if((f-=a[l].length)<=0){var h=a[l+1];break}var p=[n.text.charAt(r)],d=/[(){}[\]]/;for(var l=t.line,c=o?Math.min(l+100,Lt.size):Math.max(-1,l-100);l!=c;l+=u){var n=ln(l),m=l==t.line,g=v(n,m&&o?r+1:0,m&&!o?r:n.text.length);if(g)break}g||(g={pos:null,match:!1});var h=g.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket",y=kr({line:t.line,ch:r},{line:t.line,ch:r+1},h),b=g.pos!=null&&kr({line:l,ch:g.pos},{line:l,ch:g.pos+1},h),w=ai(function(){y.clear(),b&&b.clear()});e?setTimeout(w,800):Qt=w}function ti(e){var t,n;for(var r=e,i=e-40;r>i;--r){if(r==0)return 0;var o=ln(r-1);if(o.stateAfter)return r;var u=o.indentation(s.tabSize);if(n==null||t>u)n=r-1,t=u}return n}function ni(e){var t=ti(e),n=t&&ln(t-1).stateAfter;return n?n=x(kt,n):n=T(kt),Lt.iter(t,e,function(r){r.process(kt,n,s.tabSize),r.stateAfter=t==e-1||t%5==0?x(kt,n):null}),n}function ri(){if(At>=Jt)return;var e=+(new Date)+s.workTime,t=x(kt,ni(At)),n=At;Lt.iter(At,Jt,function(n){At>=$t?(n.highlight(kt,t,s.tabSize),n.stateAfter=x(kt,t)):(n.process(kt,t,s.tabSize),n.stateAfter=At%5==0?x(kt,t):null),++At;if(+(new Date)>e)return ii(s.workDelay),!0}),Jt>n&&At>=$t&&ai(function(){Rt.push({from:n,to:At})})()}function ii(e){At<Jt&&Nt.set(e,ri)}function si(){It=qt=Ut=null,Rt=[],zt=!1,Xt=[]}function oi(){Yt&&Fn();if(Zt&&!s.lineWrapping){var e=ft.offsetWidth,t=Br(Gt,Gt.text.length).left;d||(ft.style.left=t+"px",gt.style.minWidth=t+e+"px"),Zt=!1}var n,r;if(zt){var i=Gn();n=Zn(i.x,i.y,i.x,i.yBot)}if(Rt.length||n&&n.scrollTop!=null)r=tr(Rt,!0,n&&n.scrollTop);r||(zt&&sr(),Wt&&ir()),n&&Qn(),zt&&Yr(),Ot&&(It===!0||It!==!1&&zt)&&Jn(qt),zt&&s.matchBrackets&&setTimeout(ai(function(){Qt&&(Qt(),Qt=null),rt(Mt.from,Mt.to)&&ei(!1)}),20);var o=zt,u=Xt;Ut&&s.onChange&&fn&&s.onChange(fn,Ut),o&&s.onCursorActivity&&s.onCursorActivity(fn);for(var a=0;a<u.length;++a)u[a](fn);r&&s.onUpdate&&s.onUpdate(fn)}function ai(e){return function(){ui++||si();try{var t=e.apply(this,arguments)}finally{--ui||oi()}return t}}function fi(e){nn.startCompound();try{return e()}finally{nn.endCompound()}}var s={},y=e.defaults;for(var w in y)y.hasOwnProperty(w)&&(s[w]=(i&&i.hasOwnProperty(w)?i:y)[w]);var N=ot("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em");N.setAttribute("wrap","off"),N.setAttribute("autocorrect","off"),N.setAttribute("autocapitalize","off");var L=ot("div",[N],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),j=ot("div",null,"CodeMirror-scrollbar-inner"),q=ot("div",[j],"CodeMirror-scrollbar"),K=ot("div"),G=ot("div",null,null,"position: relative; z-index: -1"),et=ot("pre","\u00a0","CodeMirror-cursor"),ft=ot("pre","\u00a0","CodeMirror-cursor","visibility: hidden"),mt=ot("div",null,null,"position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden;"),gt=ot("div",[mt,et,ft,G,K],null,"position: relative; z-index: 0"),yt=ot("div",null,"CodeMirror-gutter-text"),bt=ot("div",[yt],"CodeMirror-gutter"),wt=ot("div",[bt,ot("div",[gt],"CodeMirror-lines")],null,"position: relative"),Et=ot("div",[wt],null,"position: relative"),St=ot("div",[Et],"CodeMirror-scroll");St.setAttribute("tabIndex","-1");var xt=ot("div",[L,q,St],"CodeMirror"+(s.lineWrapping?" CodeMirror-wrap":""));r.appendChild?r.appendChild(xt):r(xt),Tr(),Nr(),t&&(N.style.width="0px"),g||(St.draggable=!0),gt.style.outline="none",s.tabindex!=null&&(N.tabIndex=s.tabindex),s.autofocus&&Kn(),!s.gutter&&!s.lineNumbers&&(bt.style.display="none"),E&&(L.style.height="1px",L.style.position="absolute"),S?(q.style.zIndex=-2,q.style.visibility="hidden"):d&&(q.style.minWidth="18px");var Tt=new V,Nt=new V,Ct,kt,Lt=new M([new O([new A("")])]),At=0,Ot;Er();var Mt={from:{line:0,ch:0},to:{line:0,ch:0},inverted:!1},_t,Dt,Pt,Ht=0,Bt,jt=!1,Ft=!1,It,qt,Rt,Ut,zt,Wt,Xt,Vt=0,$t=0,Jt=0,Kt=0,Qt,Gt=ln(0),Yt=!1,Zt=!0,en=!1,tn=null;ai(function(){pn(s.value||""),It=!1})();var nn=new B;X(St,"mousedown",ai(gn)),X(St,"dblclick",ai(yn)),X(gt,"selectstart",I),h||X(St,"contextmenu",Gr),X(St,"scroll",mn),X(q,"scroll",vn),X(q,"mousedown",function(){Ot&&setTimeout(Kn,0)});var rn=X(window,"resize",function(){xt.parentNode?tr(!0):rn()},!0);X(N,"keyup",ai(Ln)),X(N,"input",Xn),X(N,"keydown",ai(Cn)),X(N,"keypress",ai(kn)),X(N,"focus",An),X(N,"blur",On),s.dragDrop&&(X(St,"dragstart",wn),X(St,"dragenter",sn),X(St,"dragover",sn),X(St,"drop",ai(bn))),X(St,"paste",function(){Kn(),Xn()}),X(N,"paste",Xn),X(N,"cut",ai(function(){s.readOnly||qn("")})),E&&X(Et,"mouseup",function(){document.activeElement==N&&N.blur(),Kn()});var on;try{on=document.activeElement==N}catch(un){}on||s.autofocus?setTimeout(An,20):On();var fn=xt.CodeMirror={getValue:dn,setValue:ai(pn),getSelection:zn,replaceSelection:ai(qn),focus:function(){window.focus(),Kn(),An(),Xn()},setOption:function(e,t){var n=s[e];s[e]=t,e=="mode"||e=="indentUnit"?Er():e=="readOnly"&&t=="nocursor"?(On(),N.blur()):e=="readOnly"&&!t?Jn(!0):e=="theme"?Tr():e=="lineWrapping"&&n!=t?ai(xr)():e=="tabSize"?tr(!0):e=="keyMap"&&Nr();if(e=="lineNumbers"||e=="gutter"||e=="firstLineNumber"||e=="theme"||e=="lineNumberFormatter")Sr(),tr(!0)},getOption:function(e){return s[e]},undo:ai(Dn),redo:ai(Pn),indentLine:ai(function(e,t){typeof t!="string"&&(t==null?t=s.smartIndent?"smart":"prev":t=t?"add":"subtract"),an(e)&&wr(e,t)}),indentSelection:ai(br),historySize:function(){return{undo:nn.done.length,redo:nn.undone.length}},clearHistory:function(){nn=new B},setHistory:function(e){nn=new B,nn.done=e.done,nn.undone=e.undone},getHistory:function(){return nn.time=0,{done:nn.done.concat([]),undone:nn.undone.concat([])}},matchBrackets:ai(function(){ei(!0)}),getTokenAt:ai(function(e){return e=hr(e),ln(e.line).getTokenAt(kt,ni(e.line),s.tabSize,e.ch)}),getStateAfter:function(e){return e=cr(e==null?Lt.size-1:e),ni(e+1)},cursorCoords:function(e,t){return e==null&&(e=Mt.inverted),this.charCoords(e?Mt.from:Mt.to,t)},charCoords:function(e,t){return e=hr(e),t=="local"?jr(e,!1):t=="div"?jr(e,!0):Ir(e)},coordsChar:function(e){var t=Y(gt);return Fr(e.x-t.left,e.y-t.top)},markText:ai(kr),setBookmark:Lr,findMarksAt:Ar,setMarker:ai(Or),clearMarker:ai(Mr),setLineClass:ai(Dr),hideLine:ai(function(e){return Pr(e,!0)}),showLine:ai(function(e){return Pr(e,!1)}),onDeleteLine:function(e,t){if(typeof e=="number"){if(!an(e))return null;e=ln(e)}return(e.handlers||(e.handlers=[])).push(t),e},lineInfo:Hr,getViewport:function(){return{from:$t,to:Jt}},addWidget:function(e,t,n,r,i){e=jr(hr(e));var s=e.yBot,o=e.x;t.style.position="absolute",Et.appendChild(t);if(r=="over")s=e.y;else if(r=="near"){var u=Math.max(St.offsetHeight,Lt.height*zr()),a=Math.max(Et.clientWidth,gt.clientWidth)-Jr();e.yBot+t.offsetHeight>u&&e.y>t.offsetHeight&&(s=e.y-t.offsetHeight),o+t.offsetWidth>a&&(o=a-t.offsetWidth)}t.style.top=s+$r()+"px",t.style.left=t.style.right="",i=="right"?(o=Et.clientWidth-t.offsetWidth,t.style.right="0px"):(i=="left"?o=0:i=="middle"&&(o=(Et.clientWidth-t.offsetWidth)/2),t.style.left=o+Jr()+"px"),n&&Yn(o,s,o+t.offsetWidth,s+t.offsetHeight)},lineCount:function(){return Lt.size},clipPos:hr,getCursor:function(e){return e==null&&(e=Mt.inverted),st(e?Mt.from:Mt.to)},somethingSelected:function(){return!rt(Mt.from,Mt.to)},setCursor:ai(function(e,t,n){t==null&&typeof e.line=="number"?lr(e.line,e.ch,n):lr(e,t,n)}),setSelection:ai(function(e,t,n){(n?ur:ar)(hr(e),hr(t||e))}),getLine:function(e){if(an(e))return ln(e).text},getLineHandle:function(e){if(an(e))return ln(e)},setLine:ai(function(e,t){an(e)&&In(t,{line:e,ch:0},{line:e,ch:ln(e).text.length})}),removeLine:ai(function(e){an(e)&&In("",{line:e,ch:0},hr({line:e+1,ch:0}))}),replaceRange:ai(In),getRange:function(e,t,n){return Un(hr(e),hr(t),n)},triggerOnKeyDown:ai(Cn),execCommand:function(e){return u[e](fn)},moveH:ai(dr),deleteH:ai(vr),moveV:ai(mr),toggleOverwrite:function(){jt?(jt=!1,et.className=et.className.replace(" CodeMirror-overwrite","")):(jt=!0,et.className+=" CodeMirror-overwrite")},posFromIndex:function(e){var t=0,n;return Lt.iter(0,Lt.size,function(r){var i=r.text.length+1;if(i>e)return n=e,!0;e-=i,++t}),hr({line:t,ch:n})},indexFromPos:function(e){if(e.line<0||e.ch<0)return 0;var t=e.ch;return Lt.iter(0,e.line,function(e){t+=e.text.length+1}),t},scrollTo:function(e,t){e!=null&&(St.scrollLeft=e),t!=null&&(q.scrollTop=St.scrollTop=t),tr([])},getScrollInfo:function(){return{x:St.scrollLeft,y:q.scrollTop,height:q.scrollHeight,width:St.scrollWidth}},setSize:function(e,t){function n(e){return e=String(e),/^\d+$/.test(e)?e+"px":e}e!=null&&(xt.style.width=n(e)),t!=null&&(St.style.height=n(t)),fn.refresh()},operation:function(e){return ai(e)()},compoundChange:function(e){return fi(e)},refresh:function(){tr(!0,null,Ht),q.scrollHeight>Ht&&(q.scrollTop=Ht)},getInputField:function(){return N},getWrapperElement:function(){return xt},getScrollerElement:function(){return St},getGutterElement:function(){return bt}},Sn,Nn=null,Vn="";Cr.prototype.clear=ai(function(){var e=Infinity,t=-Infinity;for(var n=0,r=this.set.length;n<r;++n){var i=this.set[n],s=i.marked;if(!s||!i.parent)continue;var o=D(i);e=Math.min(e,o),t=Math.max(t,o);for(var u=0;u<s.length;++u)s[u].marker==this&&s.splice(u--,1)}e!=Infinity&&Rt.push({from:e,to:t+1})}),Cr.prototype.find=function(){var e,t;for(var n=0,r=this.set.length;n<r;++n){var i=this.set[n],s=i.marked;for(var o=0;o<s.length;++o){var u=s[o];if(u.marker==this)if(u.from!=null||u.to!=null){var a=D(i);a!=null&&(u.from!=null&&(e={line:a,ch:u.from}),u.to!=null&&(t={line:a,ch:u.to}))}}}return{from:e,to:t}};var qr,Rr,Ur,Wr,Xr=0,Qr,Zr={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<"},ui=0;for(var li in o)o.propertyIsEnumerable(li)&&!fn.propertyIsEnumerable(li)&&(fn[li]=o[li]);return fn}function f(e){return typeof e=="string"?a[e]:e}function l(e,t,n,r,i){function s(t){t=f(t);var n=t[e];if(n===!1)return i&&i(),!0;if(n!=null&&r(n))return!0;if(t.nofallthrough)return i&&i(),!0;var o=t.fallthrough;if(o==null)return!1;if(Object.prototype.toString.call(o)!="[object Array]")return s(o);for(var u=0,a=o.length;u<a;++u)if(s(o[u]))return!0;return!1}return t&&s(t)?!0:s(n)}function c(e){var t=vt[W(e,"keyCode")];return t=="Ctrl"||t=="Alt"||t=="Shift"||t=="Mod"}function x(e,t){if(t===!0)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function T(e,t,n){return e.startState?e.startState(t,n):!0}function N(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8}function C(e,t,n,r){this.from=e,this.to=t,this.style=n,this.marker=r}function k(e){this.from=e,this.to=e,this.line=null}function A(e){this.text=e,this.height=1}function O(e){this.lines=e,this.parent=null;for(var t=0,n=e.length,r=0;t<n;++t)e[t].parent=this,r+=e[t].height;this.height=r}function M(e){this.children=e;var t=0,n=0;for(var r=0,i=e.length;r<i;++r){var s=e[r];t+=s.chunkSize(),n+=s.height,s.parent=this}this.size=t,this.height=n,this.parent=null}function _(e,t){while(!e.lines)for(var n=0;;++n){var r=e.children[n],i=r.chunkSize();if(t<i){e=r;break}t-=i}return e.lines[t]}function D(e){if(e.parent==null)return null;var t=e.parent,n=ct(t.lines,e);for(var r=t.parent;r;t=r,r=r.parent)for(var i=0,s=r.children.length;;++i){if(r.children[i]==t)break;n+=r.children[i].chunkSize()}return n}function P(e,t){var n=0;e:do{for(var r=0,i=e.children.length;r<i;++r){var s=e.children[r],o=s.height;if(t<o){e=s;continue e}t-=o,n+=s.chunkSize()}return n}while(!e.lines);for(var r=0,i=e.lines.length;r<i;++r){var u=e.lines[r],a=u.height;if(t<a)break;t-=a}return n+r}function H(e,t){var n=0;e:do{for(var r=0,i=e.children.length;r<i;++r){var s=e.children[r],o=s.chunkSize();if(t<o){e=s;continue e}t-=o,n+=s.height}return n}while(!e.lines);for(var r=0;r<t;++r)n+=e.lines[r].height;return n}function B(){this.time=0,this.done=[],this.undone=[],this.compound=0,this.closed=!1}function j(){R(this)}function F(e){return e.stop||(e.stop=j),e}function I(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function q(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function R(e){I(e),q(e)}function U(e){return e.target||e.srcElement}function z(e){var t=e.which;return t==null&&(e.button&1?t=1:e.button&2?t=3:e.button&4&&(t=2)),n&&e.ctrlKey&&t==1&&(t=3),t}function W(e,t){var n=e.override&&e.override.hasOwnProperty(t);return n?e.override[t]:e[t]}function X(e,t,n,r){if(typeof e.addEventListener=="function"){e.addEventListener(t,n,!1);if(r)return function(){e.removeEventListener(t,n,!1)}}else{var i=function(e){n(e||window.event)};e.attachEvent("on"+t,i);if(r)return function(){e.detachEvent("on"+t,i)}}}function V(){this.id=null}function G(e,t,n){t==null&&(t=e.search(/[^\s\u00a0]/),t==-1&&(t=e.length));for(var r=0,i=0;r<t;++r)e.charAt(r)==" "?i+=n-i%n:++i;return i}function Y(e,t){try{var n=e.getBoundingClientRect();n={top:n.top,left:n.left}}catch(r){n={top:0,left:0}}if(!t)if(window.pageYOffset==null){var i=document.documentElement||document.body.parentNode;i.scrollTop==null&&(i=document.body),n.top+=i.scrollTop,n.left+=i.scrollLeft}else n.top+=window.pageYOffset,n.left+=window.pageXOffset;return n}function Z(e){return e.textContent||e.innerText||e.nodeValue||""}function tt(e){while(et.length<=e)et.push(et[et.length-1]+" ");return et[e]}function nt(e){t?(e.selectionStart=0,e.selectionEnd=e.value.length):e.select()}function rt(e,t){return e.line==t.line&&e.ch==t.ch}function it(e,t){return e.line<t.line||e.line==t.line&&e.ch<t.ch}function st(e){return{line:e.line,ch:e.ch}}function ot(e,t,n,r){var i=document.createElement(e);n&&(i.className=n),r&&(i.style.cssText=r);if(typeof t=="string")ft(i,t);else if(t)for(var s=0;s<t.length;++s)i.appendChild(t[s]);return i}function ut(e){return e.innerHTML="",e}function at(e,t){ut(e).appendChild(t)}function ft(e,t){v?(e.innerHTML="",e.appendChild(document.createTextNode(t))):e.textContent=t}function lt(e,t){if(!t)return 0;if(!e)return t.length;for(var n=e.length,r=t.length;n>=0&&r>=0;--n,--r)if(e.charAt(n)!=t.charAt(r))break;return r+1}function ct(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;++n)if(e[n]==t)return n;return-1}function ht(e){return/\w/.test(e)||e.toUpperCase()!=e.toLowerCase()}e.defaults={value:"",mode:null,theme:"default",indentUnit:2,indentWithTabs:!1,smartIndent:!0,tabSize:4,keyMap:"default",extraKeys:null,electricChars:!0,autoClearEmptyLines:!1,onKeyEvent:null,onDragEvent:null,lineWrapping:!1,lineNumbers:!1,gutter:!1,fixedGutter:!1,firstLineNumber:1,readOnly:!1,dragDrop:!0,onChange:null,onCursorActivity:null,onViewportChange:null,onGutterClick:null,onUpdate:null,onFocus:null,onBlur:null,onScroll:null,matchBrackets:!1,cursorBlinkRate:530,workTime:100,workDelay:200,pollInterval:100,undoDepth:40,tabindex:null,autofocus:null,lineNumberFormatter:function(e){return e}};var t=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),n=t||/Mac/.test(navigator.platform),r=/Win/.test(navigator.platform),i=e.modes={},s=e.mimeModes={};e.defineMode=function(t,n){!e.defaults.mode&&t!="null"&&(e.defaults.mode=t);if(arguments.length>2){n.dependencies=[];for(var r=2;r<arguments.length;++r)n.dependencies.push(arguments[r])}i[t]=n},e.defineMIME=function(e,t){s[e]=t},e.resolveMode=function(t){if(typeof t=="string"&&s.hasOwnProperty(t))t=s[t];else if(typeof t=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return e.resolveMode("application/xml");return typeof t=="string"?{name:t}:t||{name:"null"}},e.getMode=function(t,n){var n=e.resolveMode(n),r=i[n.name];return r?r(t,n):e.getMode(t,"text/plain")},e.listModes=function(){var e=[];for(var t in i)i.propertyIsEnumerable(t)&&e.push(t);return e},e.listMIMEs=function(){var e=[];for(var t in s)s.propertyIsEnumerable(t)&&e.push({mime:t,mode:s[t]});return e};var o=e.extensions={};e.defineExtension=function(e,t){o[e]=t};var u=e.commands={selectAll:function(e){e.setSelection({line:0,ch:0},{line:e.lineCount()-1})},killLine:function(e){var t=e.getCursor(!0),n=e.getCursor(!1),r=!rt(t,n);!r&&e.getLine(t.line).length==t.ch?e.replaceRange("",t,{line:t.line+1,ch:0}):e.replaceRange("",t,r?n:{line:t.line})},deleteLine:function(e){var t=e.getCursor().line;e.replaceRange("",{line:t,ch:0},{line:t})},undo:function(e){e.undo()},redo:function(e){e.redo()},goDocStart:function(e){e.setCursor(0,0,!0)},goDocEnd:function(e){e.setSelection({line:e.lineCount()-1},null,!0)},goLineStart:function(e){e.setCursor(e.getCursor().line,0,!0)},goLineStartSmart:function(e){var t=e.getCursor(),n=e.getLine(t.line),r=Math.max(0,n.search(/\S/));e.setCursor(t.line,t.ch<=r&&t.ch?0:r,!0)},goLineEnd:function(e){e.setSelection({line:e.getCursor().line},null,!0)},goLineUp:function(e){e.moveV(-1,"line")},goLineDown:function(e){e.moveV(1,"line")},goPageUp:function(e){e.moveV(-1,"page")},goPageDown:function(e){e.moveV(1,"page")},goCharLeft:function(e){e.moveH(-1,"char")},goCharRight:function(e){e.moveH(1,"char")},goColumnLeft:function(e){e.moveH(-1,"column")},goColumnRight:function(e){e.moveH(1,"column")},goWordLeft:function(e){e.moveH(-1,"word")},goWordRight:function(e){e.moveH(1,"word")},delCharLeft:function(e){e.deleteH(-1,"char")},delCharRight:function(e){e.deleteH(1,"char")},delWordLeft:function(e){e.deleteH(-1,"word")},delWordRight:function(e){e.deleteH(1,"word")},indentAuto:function(e){e.indentSelection("smart")},indentMore:function(e){e.indentSelection("add")},indentLess:function(e){e.indentSelection("subtract")},insertTab:function(e){e.replaceSelection(" ","end")},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.replaceSelection(" ","end")},transposeChars:function(e){var t=e.getCursor(),n=e.getLine(t.line);t.ch>0&&t.ch<n.length-1&&e.replaceRange(n.charAt(t.ch)+n.charAt(t.ch-1),{line:t.line,ch:t.ch-1},{line:t.line,ch:t.ch+1})},newlineAndIndent:function(e){e.replaceSelection("\n","end"),e.indentLine(e.getCursor().line)},toggleOverwrite:function(e){e.toggleOverwrite()}},a=e.keyMap={};a.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharRight",Backspace:"delCharLeft",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite"},a.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Alt-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goWordLeft","Ctrl-Right":"goWordRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delWordLeft","Ctrl-Delete":"delWordRight","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore",fallthrough:"basic"},a.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goWordLeft","Alt-Right":"goWordRight","Cmd-Left":"goLineStart","Cmd-Right":"goLineEnd","Alt-Backspace":"delWordLeft","Ctrl-Alt-Backspace":"delWordRight","Alt-Delete":"delWordRight","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore",fallthrough:["basic","emacsy"]},a["default"]=n?a.macDefault:a.pcDefault,a.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageUp","Shift-Ctrl-V":"goPageDown","Ctrl-D":"delCharRight","Ctrl-H":"delCharLeft","Alt-D":"delWordRight","Alt-Backspace":"delWordLeft","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},e.fromTextArea=function(t,n){function s(){t.value=a.getValue()}n||(n={}),n.value=t.value,!n.tabindex&&t.tabindex&&(n.tabindex=t.tabindex);if(n.autofocus==null){var r=document.body;try{r=document.activeElement}catch(i){}n.autofocus=r==t||t.getAttribute("autofocus")!=null&&r==document.body}if(t.form){var o=X(t.form,"submit",s,!0);if(typeof t.form.submit=="function"){var u=t.form.submit;t.form.submit=function f(){s(),t.form.submit=u,t.form.submit(),t.form.submit=f}}}t.style.display="none";var a=e(function(e){t.parentNode.insertBefore(e,t.nextSibling)},n);return a.save=s,a.getTextArea=function(){return t},a.toTextArea=function(){s(),t.parentNode.removeChild(a.getWrapperElement()),t.style.display="",t.form&&(o(),typeof t.form.submit=="function"&&(t.form.submit=u))},a};var h=/gecko\/\d{7}/i.test(navigator.userAgent),p=/MSIE \d/.test(navigator.userAgent),d=/MSIE [1-7]\b/.test(navigator.userAgent),v=/MSIE [1-8]\b/.test(navigator.userAgent),m=p&&document.documentMode==5,g=/WebKit\//.test(navigator.userAgent),y=/Chrome\//.test(navigator.userAgent),b=/Opera\//.test(navigator.userAgent),w=/Apple Computer/.test(navigator.vendor),E=/KHTML\//.test(navigator.userAgent),S=/Mac OS X 10\D([7-9]|\d\d)\D/.test(navigator.userAgent);e.copyState=x,e.startState=T,N.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==0},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if(typeof e=="string")var n=t==e;else var n=t&&(e.test?e.test(t):e(t));if(n)return++this.pos,t},eatWhile:function(e){var t=this.pos;while(this.eat(e));return this.pos>t},eatSpace:function(){var e=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},backUp:function(e){this.pos-=e},column:function(){return G(this.string,this.start,this.tabSize)},indentation:function(){return G(this.string,null,this.tabSize)},match:function(e,t,n){if(typeof e!="string"){var i=this.string.slice(this.pos).match(e);return i&&i.index>0?null:(i&&t!==!1&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e};if(r(this.string).indexOf(r(e),this.pos)==this.pos)return t!==!1&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},e.StringStream=N,C.prototype={attach:function(e){this.marker.set.push(e)},detach:function(e){var t=ct(this.marker.set,e);t>-1&&this.marker.set.splice(t,1)},split:function(e,t){if(this.to<=e&&this.to!=null)return null;var n=this.from<e||this.from==null?null:this.from-e+t,r=this.to==null?null:this.to-e+t;return new C(n,r,this.style,this.marker)},dup:function(){return new C(null,null,this.style,this.marker)},clipTo:function(e,t,n,r,i){e&&r>this.from&&(r<this.to||this.to==null)?this.from=null:this.from!=null&&this.from>=t&&(this.from=Math.max(r,this.from)+i),n&&(t<this.to||this.to==null)&&(t>this.from||this.from==null)?this.to=null:this.to!=null&&this.to>t&&(this.to=r<this.to?this.to+i:t)},isDead:function(){return this.from!=null&&this.to!=null&&this.from>=this.to},sameSet:function(e){return this.marker==e.marker}},k.prototype={attach:function(e){this.line=e},detach:function(e){this.line==e&&(this.line=null)},split:function(e,t){if(e<this.from)return this.from=this.to=this.from-e+t,this},isDead:function(){return this.from>this.to},clipTo:function(e,t,n,r,i){(e||t<this.from)&&(n||r>this.to)?(this.from=0,this.to=-1):this.from>t&&(this.from=this.to=Math.max(r,this.from)+i)},sameSet:function(e){return!1},find:function(){return!this.line||!this.line.parent?null:{line:D(this.line),ch:this.from}},clear:function(){if(this.line){var e=ct(this.line.marked,this);e!=-1&&this.line.marked.splice(e,1),this.line=null}}};var L=" ";h||p&&!d?L="\u200b":b&&(L=""),A.inheritMarks=function(e,t){var n=new A(e),r=t&&t.marked;if(r)for(var i=0;i<r.length;++i)if(r[i].to==null&&r[i].style){var s=n.marked||(n.marked=[]),o=r[i],u=o.dup();s.push(u),u.attach(n)}return n},A.prototype={replace:function(e,t,n){var r=this.marked,i=t==null?this.text.length:t;this.text=this.text.slice(0,e)+n+this.text.slice(i),this.stateAfter=this.styles=null;if(r){var s=n.length-(i-e);for(var o=0;o<r.length;++o){var u=r[o];u.clipTo(e==null,e||0,t==null,i,s),u.isDead()&&(u.detach(this),r.splice(o--,1))}}},split:function(e,t){var n=this.marked,r=new A(t+this.text.slice(e));if(n)for(var i=0;i<n.length;++i){var s=n[i],o=s.split(e,t.length);o&&(r.marked||(r.marked=[]),r.marked.push(o),o.attach(r),o==s&&n.splice(i--,1))}return r},append:function(e){var t=this.text.length,n=e.marked,r=this.marked;this.text+=e.text,this.styles=this.stateAfter=null;if(r)for(var i=0;i<r.length;++i)r[i].to==null&&(r[i].to=t);if(n&&n.length){r||(this.marked=r=[]);e:for(var i=0;i<n.length;++i){var s=n[i];if(!s.from)for(var o=0;o<r.length;++o){var u=r[o];if(u.to==t&&u.sameSet(s)){u.to=s.to==null?null:s.to+t,u.isDead()&&(u.detach(this),n.splice(i--,1));continue e}}r.push(s),s.attach(this),s.from+=t,s.to!=null&&(s.to+=t)}}},fixMarkEnds:function(e){var t=this.marked,n=e.marked;if(!t)return;e:for(var r=0;r<t.length;++r){var i=t[r],s=i.to==null;if(s&&n)for(var o=0;o<n.length;++o){var u=n[o];if(!u.sameSet(i)||u.from!=null)continue;if(i.from==this.text.length&&u.to==0){n.splice(o,1),t.splice(r--,1);continue e}s=!1;break}s&&(i.to=this.text.length)}},fixMarkStarts:function(){var e=this.marked;if(!e)return;for(var t=0;t<e.length;++t)e[t].from==null&&(e[t].from=0)},addMark:function(e){e.attach(this),this.marked==null&&(this.marked=[]),this.marked.push(e),this.marked.sort(function(e,t){return(e.from||0)-(t.from||0)})},highlight:function(e,t,n){var r=new N(this.text,n),i=this.styles||(this.styles=[]),s=i.length=0;this.text==""&&e.blankLine&&e.blankLine(t);while(!r.eol()){var o=e.token(r,t),u=r.current();r.start=r.pos,s&&i[s-1]==o?i[s-2]+=u:u&&(i[s++]=u,i[s++]=o);if(r.pos>5e3){i[s++]=this.text.slice(r.pos),i[s++]=null;break}}},process:function(e,t,n){var r=new N(this.text,n);this.text==""&&e.blankLine&&e.blankLine(t);while(!r.eol()&&r.pos<=5e3)e.token(r,t),r.start=r.pos},getTokenAt:function(e,t,n,r){var i=this.text,s=new N(i,n);while(s.pos<r&&!s.eol()){s.start=s.pos;var o=e.token(s,t)}return{start:s.start,end:s.pos,string:s.current(),className:o||null,state:t}},indentation:function(e){return G(this.text,null,e)},getContent:function(e,t,n){function u(t,n,o){if(!n)return;r&&p&&n.charAt(0)==" "&&(n="\u00a0"+n.slice(1)),r=!1;if(!s.test(n)){i+=n.length;var u=document.createTextNode(n)}else{var u=document.createDocumentFragment(),a=0;for(;;){s.lastIndex=a;var f=s.exec(n),l=f?f.index-a:n.length-a;l&&(u.appendChild(document.createTextNode(n.slice(a,a+l))),i+=l);if(!f)break;a+=l+1;if(f[0]==" "){var c=e-i%e;u.appendChild(ot("span",tt(c),"cm-tab")),i+=c}else{var h=ot("span","\u2022","cm-invalidchar");h.title="\\u"+f[0].charCodeAt(0).toString(16),u.appendChild(h),i+=1}}}o?t.appendChild(ot("span",[u],o)):t.appendChild(u)}function m(e){return e?"cm-"+e.replace(/ +/g," cm-"):null}var r=!0,i=0,s=/[\t\u0000-\u0019\u200b\u2028\u2029\uFEFF]/g,o=ot("pre"),a=u;if(t!=null){var f=0,l=o.anchor=ot("span");a=function(e,r,i){var s=r.length;if(t>=f&&t<f+s){t>f&&(u(e,r.slice(0,t-f),i),n&&e.appendChild(ot("wbr"))),e.appendChild(l);var o=t-f;u(l,b?r.slice(o,o+1):r.slice(o),i),b&&u(e,r.slice(o+1),i),t--,f+=s}else f+=s,u(e,r,i),f==t&&f==v?(ft(l,L),e.appendChild(l)):f>t+10&&/\s/.test(r)&&(a=function(){})}}var c=this.styles,h=this.text,d=this.marked,v=h.length;if(!h&&t==null)a(o," ");else if(!d||!d.length)for(var g=0,y=0;y<v;g+=2){var w=c[g],E=c[g+1],S=w.length;y+S>v&&(w=w.slice(0,v-y)),y+=S,a(o,w,m(E))}else{var x=0,g=0,T="",E,N=0,C=d[0].from||0,k=[],A=0,O=function(){var e;while(A<d.length&&((e=d[A]).from==x||e.from==null))e.style!=null&&k.push(e),++A;C=A<d.length?d[A].from:Infinity;for(var t=0;t<k.length;++t){var n=k[t].to;n==null&&(n=Infinity),n==x?k.splice(t--,1):C=Math.min(n,C)}},M=0;while(x<v){C==x&&O();var _=Math.min(v,C);for(;;){if(T){var D=x+T.length,P=E;for(var H=0;H<k.length;++H)P=(P?P+" ":"")+k[H].style;a(o,D>_?T.slice(0,_-x):T,P);if(D>=_){T=T.slice(_-x),x=_;break}x=D}T=c[g++],E=m(c[g++])}}}return o},cleanUp:function(){this.parent=null;if(this.marked)for(var e=0,t=this.marked.length;e<t;++e)this.marked[e].detach(this)}},O.prototype={chunkSize:function(){return this.lines.length},remove:function(e,t,n){for(var r=e,i=e+t;r<i;++r){var s=this.lines[r];this.height-=s.height,s.cleanUp();if(s.handlers)for(var o=0;o<s.handlers.length;++o)n.push(s.handlers[o])}this.lines.splice(e,t)},collapse:function(e){e.splice.apply(e,[e.length,0].concat(this.lines))},insertHeight:function(e,t,n){this.height+=n,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var r=0,i=t.length;r<i;++r)t[r].parent=this},iterN:function(e,t,n){for(var r=e+t;e<r;++e)if(n(this.lines[e]))return!0}},M.prototype={chunkSize:function(){return this.size},remove:function(e,t,n){this.size-=t;for(var r=0;r<this.children.length;++r){var i=this.children[r],s=i.chunkSize();if(e<s){var o=Math.min(t,s-e),u=i.height;i.remove(e,o,n),this.height-=u-i.height,s==o&&(this.children.splice(r--,1),i.parent=null);if((t-=o)==0)break;e=0}else e-=s}if(this.size-t<25){var a=[];this.collapse(a),this.children=[new O(a)],this.children[0].parent=this}},collapse:function(e){for(var t=0,n=this.children.length;t<n;++t)this.children[t].collapse(e)},insert:function(e,t){var n=0;for(var r=0,i=t.length;r<i;++r)n+=t[r].height;this.insertHeight(e,t,n)},insertHeight:function(e,t,n){this.size+=t.length,this.height+=n;for(var r=0,i=this.children.length;r<i;++r){var s=this.children[r],o=s.chunkSize();if(e<=o){s.insertHeight(e,t,n);if(s.lines&&s.lines.length>50){while(s.lines.length>50){var u=s.lines.splice(s.lines.length-25,25),a=new O(u);s.height-=a.height,this.children.splice(r+1,0,a),a.parent=this}this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(this.children.length<=10)return;var e=this;do{var t=e.children.splice(e.children.length-5,5),n=new M(t);if(!e.parent){var r=new M(e.children);r.parent=e,e.children=[r,n],e=r}else{e.size-=n.size,e.height-=n.height;var i=ct(e.parent.children,e);e.parent.children.splice(i+1,0,n)}n.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()},iter:function(e,t,n){this.iterN(e,t-e,n)},iterN:function(e,t,n){for(var r=0,i=this.children.length;r<i;++r){var s=this.children[r],o=s.chunkSize();if(e<o){var u=Math.min(t,o-e);if(s.iterN(e,u,n))return!0;if((t-=u)==0)break;e=0}else e-=o}}},B.prototype={addChange:function(e,t,n){this.undone.length=0;var r=+(new Date),i=this.done[this.done.length-1],s=i&&i[i.length-1],o=r-this.time;if(this.compound&&i&&!this.closed)i.push({start:e,added:t,old:n});else if(o>400||!s||this.closed||s.start>e+n.length||s.start+s.added<e)this.done.push([{start:e,added:t,old:n}]),this.closed=!1;else{var u=Math.max(0,s.start-e),a=Math.max(0,e+n.length-(s.start+s.added));for(var f=u;f>0;--f)s.old.unshift(n[f-1]);for(var f=a;f>0;--f)s.old.push(n[n.length-f]);u&&(s.start=e),s.added+=t-(n.length-u-a)}this.time=r},startCompound:function(){this.compound++||(this.closed=!0)},endCompound:function(){--this.compound||(this.closed=!0)}},e.e_stop=R,e.e_preventDefault=I,e.e_stopPropagation=q,e.connect=X,V.prototype={set:function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)}};var $=e.Pass={toString:function(){return"CodeMirror.Pass"}},J=function(){if(v)return!1;var e=ot("div");return"draggable"in e||"dragDrop"in e}(),K=function(){var e=ot("textarea");return e.value="foo\nbar",e.value.indexOf("\r")>-1?"\r\n":"\n"}(),Q=/^$/;h?Q=/$'/:w?Q=/\-[^ \-?]|\?[^ !'\"\),.\-\/:;\?\]\}]/:y&&(Q=/\-[^ \-\.?]|\?[^ \-\.?\]\}:;!'\"\),\/]|[\.!\"#&%\)*+,:;=>\]|\}~][\(\{\[<]|\$'/);var et=[""];e.setTextContent=ft;var pt="\n\nb".split(/\n/).length!=3?function(e){var t=0,n=[],r=e.length;while(t<=r){var i=e.indexOf("\n",t);i==-1&&(i=e.length);var s=e.slice(t,e.charAt(i-1)=="\r"?i-1:i),o=s.indexOf("\r");o!=-1?(n.push(s.slice(0,o)),t+=o+1):(n.push(s),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)};e.splitLines=pt;var dt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(t){return!1}}:function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return!t||t.parentElement()!=e?!1:t.compareEndPoints("StartToEnd",t)!=0};e.defineMode("null",function(){return{token:function(e){e.skipToEnd()}}}),e.defineMIME("text/plain","null");var vt={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",91:"Mod",92:"Mod",93:"Mod",109:"-",107:"=",127:"Delete",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63276:"PageUp",63277:"PageDown",63275:"End",63273:"Home",63234:"Left",63232:"Up",63235:"Right",63233:"Down",63302:"Insert",63272:"Delete"};return e.keyNames=vt,function(){for(var e=0;e<10;e++)vt[e+48]=String(e);for(var e=65;e<=90;e++)vt[e]=String.fromCharCode(e);for(var e=1;e<=12;e++)vt[e+111]=vt[e+63235]="F"+e}(),e}(),CodeMirror.defineMode("clojure",function(e,t){function h(e){var t={},n=e.split(" ");for(var r=0;r<n.length;++r)t[n[r]]=!0;return t}function y(e,t,n){this.indent=e,this.type=t,this.prev=n}function b(e,t,n){e.indentStack=new y(t,n,e.indentStack)}function w(e){e.indentStack=e.indentStack.prev}function E(e,t){if(e==="0"&&t.eat(/x/i))return t.eatWhile(g.hex),!0;if(e=="+"||e=="-")t.eat(g.sign),e=t.next();return g.digit.test(e)?(t.eat(e),t.eatWhile(g.digit),"."==t.peek()&&(t.eat("."),t.eatWhile(g.digit)),t.eat(g.exponent)&&(t.eat(g.sign),t.eatWhile(g.digit)),!0):!1}var n="builtin",r="comment",i="string",s="tag",o="atom",u="number",a="bracket",f="keyword",l=2,c=1,p=h("true false nil"),d=h("defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle"),v=h("* *1 *2 *3 *agent* *allow-unresolved-vars* *assert *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - / < <= = == > >= accessor aclone agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? extend extend-protocol extend-type extends? extenders false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reify reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq"),m=h("ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch let letfn binding loop for doseq dotimes when-let if-let defstruct struct-map assoc testing deftest handler-case handle dotrace deftrace"),g={digit:/\d/,digit_or_colon:/[\d:]/,hex:/[0-9a-f]/i,sign:/[+-]/,exponent:/e/i,keyword_char:/[^\s\(\[\;\)\]]/,basic:/[\w\$_\-]/,lang_keyword:/[\w*+!\-_?:\/]/};return{startState:function(){return{indentStack:null,indentation:0,mode:!1}},token:function(e,t){t.indentStack==null&&e.sol()&&(t.indentation=e.indentation());if(e.eatSpace())return null;var s=null;switch(t.mode){case"string":var c,h=!1;while((c=e.next())!=null){if(c=='"'&&!h){t.mode=!1;break}h=!h&&c=="\\"}s=i;break;default:var y=e.next();if(y=='"')t.mode="string",s=i;else if(y=="'"&&!g.digit_or_colon.test(e.peek()))s=o;else if(y==";")e.skipToEnd(),s=r;else if(E(y,e))s=u;else if(y=="("||y=="["){var S="",x=e.column(),T;if(y=="(")while((T=e.eat(g.keyword_char))!=null)S+=T;S.length>0&&(m.propertyIsEnumerable(S)||/^(?:def|with)/.test(S))?b(t,x+l,y):(e.eatSpace(),e.eol()||e.peek()==";"?b(t,x+1,y):b(t,x+e.current().length,y)),e.backUp(e.current().length-1),s=a}else if(y==")"||y=="]")s=a,t.indentStack!=null&&t.indentStack.type==(y==")"?"(":"[")&&w(t);else{if(y==":")return e.eatWhile(g.lang_keyword),o;e.eatWhile(g.basic),d&&d.propertyIsEnumerable(e.current())?s=f:v&&v.propertyIsEnumerable(e.current())?s=n:p&&p.propertyIsEnumerable(e.current())?s=o:s=null}}return s},indent:function(e,t){return e.indentStack==null?e.indentation:e.indentStack.indent}}}),CodeMirror.defineMIME("text/x-clojure","clojure")
View
130 resources/public/vendor/script/shAutoloader.js
@@ -1,130 +0,0 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/SyntaxHighlighter
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
- *
- * @version
- * 3.0.83 (July 02 2010)
- *
- * @copyright
- * Copyright (C) 2004-2010 Alex Gorbatchev.
- *
- * @license
- * Dual licensed under the MIT and GPL licenses.
- */
-(function() {
-
-var sh = SyntaxHighlighter;
-
-/**
- * Provides functionality to dynamically load only the brushes that a needed to render the current page.
- *
- * There are two syntaxes that autoload understands. For example:
- *
- * SyntaxHighlighter.autoloader(
- * [ 'applescript', 'Scripts/shBrushAppleScript.js' ],
- * [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ]
- * );
- *
- * or a more easily comprehendable one:
- *
- * SyntaxHighlighter.autoloader(
- * 'applescript Scripts/shBrushAppleScript.js',
- * 'actionscript3 as3 Scripts/shBrushAS3.js'
- * );
- */
-sh.autoloader = function()
-{
- var list = arguments,
- elements = sh.findElements(),
- brushes = {},
- scripts = {},
- all = SyntaxHighlighter.all,
- allCalled = false,
- allParams = null,
- i
- ;
-
- SyntaxHighlighter.all = function(params)
- {
- allParams = params;
- allCalled = true;
- };
-
- function addBrush(aliases, url)
- {
- for (var i = 0; i < aliases.length; i++)
- brushes[aliases[i]] = url;
- };
-
- function getAliases(item)
- {
- return item.pop
- ? item
- : item.split(/\s+/)
- ;
- }
-
- // create table of aliases and script urls
- for (i = 0; i < list.length; i++)
- {
- var aliases = getAliases(list[i]),
- url = aliases.pop()
- ;
-
- addBrush(aliases, url);
- }
-
- // dynamically add <script /> tags to the document body
- for (i = 0; i < elements.length; i++)
- {
- var url = brushes[elements[i].params.brush];
-
- if (!url)
- continue;
-
- scripts[url] = false;
- loadScript(url);
- }
-
- function loadScript(url)
- {
- var script = document.createElement('script'),
- done = false
- ;
-
- script.src = url;
- script.type = 'text/javascript';
- script.language = 'javascript';
- script.onload = script.onreadystatechange = function()
- {
- if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))
- {
- done = true;
- scripts[url] = true;
- checkAll();
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
- script.parentNode.removeChild(script);
- }
- };
-
- // sync way of adding script tags to the page
- document.body.appendChild(script);
- };
-
- function checkAll()
- {
- for(var url in scripts)
- if (scripts[url] == false)
- return;
-
- if (allCalled)
- SyntaxHighlighter.highlight(allParams);
- };
-};
-
-})();
View
189 resources/public/vendor/script/shBrushClojure.js
@@ -1,189 +0,0 @@
-/*!
- * Copyright © 2010 Sattvik Software & Technology Resources, Ltd. Co.
- * All rights reserved.
- *
- * sh-clojure may be used under the terms of either the GNU Lesser General Public
- * License (LGPL) or the Eclipse Public License (EPL). As a recipient of
- * sh-clojure, you may choose which license to receive the code under. See the
- * LICENSE file distributed with sh-clojure for details.
- *
- * Written by Daniel Solano Gómez
- *
- * Version 0.9.1 - 10 Apr 2010
- */
-
-function ClojureRegExp(pattern) {
- pattern = pattern + '(?=[[\\]{}(),\\s])';
- this.regex = new RegExp(pattern, 'g');
- this.lookBehind = /[\[\]{}(),\s]$/;
-}
-
-ClojureRegExp.prototype.exec = function (str) {
- var match, leftContext;
- while (match=this.regex.exec(str)) {
- leftContext = str.substring(0, match.index);
- if (this.lookBehind.test(leftContext)) {
- return match;
- }
- else {
- this.regex.lastIndex = match.index + 1;
- }
- }
- return null;
-};
-
-SyntaxHighlighter.brushes.Clojure = function () {
- var special_forms =
- '. def do fn if let loop monitor-enter monitor-exit new quote recur set! ' +
- 'throw try var',
- clojure_core =
- '* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* ' +
- '*command-line-args* *compile-files* *compile-path* *e *err* *file* ' +
- '*flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* ' +
- '*print-dup* *print-length* *print-level* *print-meta* *print-readably* ' +
- '*read-eval* *source-path* *use-context-classloader* ' +
- '*warn-on-reflection* + - -> -&gt; ->> -&gt;&gt; .. / < &lt; <= &lt;= = ' +
- '== > &gt; >= &gt;= accessor aclone ' +
- 'add-classpath add-watch agent agent-errors aget alength alias all-ns ' +
- 'alter alter-meta! alter-var-root amap ancestors and apply areduce ' +
- 'array-map aset aset-boolean aset-byte aset-char aset-double aset-float ' +
- 'aset-int aset-long aset-short assert assoc assoc! assoc-in associative? ' +
- 'atom await await-for await1 bases bean bigdec bigint binding bit-and ' +
- 'bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left ' +
- 'bit-shift-right bit-test bit-xor boolean boolean-array booleans ' +
- 'bound-fn bound-fn* butlast byte byte-array bytes cast char char-array ' +
- 'char-escape-string char-name-string char? chars chunk chunk-append ' +
- 'chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? ' +
- 'class class? clear-agent-errors clojure-version coll? comment commute ' +
- 'comp comparator compare compare-and-set! compile complement concat cond ' +
- 'condp conj conj! cons constantly construct-proxy contains? count ' +
- 'counted? create-ns create-struct cycle dec decimal? declare definline ' +
- 'defmacro defmethod defmulti defn defn- defonce defstruct delay delay? ' +
- 'deliver deref derive descendants destructure disj disj! dissoc dissoc! ' +
- 'distinct distinct? doall doc dorun doseq dosync dotimes doto double ' +
- 'double-array doubles drop drop-last drop-while empty empty? ensure ' +
- 'enumeration-seq eval even? every? false? ffirst file-seq filter find ' +
- 'find-doc find-ns find-var first float float-array float? floats flush ' +
- 'fn fn? fnext for force format future future-call future-cancel ' +
- 'future-cancelled? future-done? future? gen-class gen-interface gensym ' +
- 'get get-in get-method get-proxy-class get-thread-bindings get-validator ' +
- 'hash hash-map hash-set identical? identity if-let if-not ifn? import ' +
- 'in-ns inc init-proxy instance? int int-array integer? interleave intern ' +
- 'interpose into into-array ints io! isa? iterate iterator-seq juxt key ' +
- 'keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list ' +
- 'list* list? load load-file load-reader load-string loaded-libs locking ' +
- 'long long-array longs loop macroexpand macroexpand-1 make-array ' +
- 'make-hierarchy map map? mapcat max max-key memfn memoize merge ' +
- 'merge-with meta method-sig methods min min-key mod name namespace neg? ' +
- 'newline next nfirst nil? nnext not not-any? not-empty not-every? not= ' +
- ' ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ' +
- 'ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? ' +
- 'or parents partial partition pcalls peek persistent! pmap pop pop! ' +
- 'pop-thread-bindings pos? pr pr-str prefer-method prefers ' +
- 'primitives-classnames print print-ctor print-doc print-dup print-method ' +
- 'print-namespace-doc print-simple print-special-doc print-str printf ' +
- 'println println-str prn prn-str promise proxy proxy-call-with-super ' +
- 'proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot ' +
- 'rand rand-int range ratio? rational? rationalize re-find re-groups ' +
- 're-matcher re-matches re-pattern re-seq read read-line read-string ' +
- 'reduce ref ref-history-count ref-max-history ref-min-history ref-set ' +
- 'refer refer-clojure release-pending-sends rem remove remove-method ' +
- 'remove-ns remove-watch repeat repeatedly replace replicate require ' +
- 'reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq ' +
- 'rsubseq second select-keys send send-off seq seq? seque sequence ' +
- 'sequential? set set-validator! set? short short-array shorts ' +
- 'shutdown-agents slurp some sort sort-by sorted-map sorted-map-by ' +
- 'sorted-set sorted-set-by sorted? special-form-anchor special-symbol? ' +
- 'split-at split-with str stream? string? struct struct-map subs subseq ' +
- 'subvec supers swap! symbol symbol? sync syntax-symbol-anchor take ' +
- 'take-last take-nth take-while test the-ns time to-array to-array-2d ' +
- 'trampoline transient tree-seq true? type unchecked-add unchecked-dec ' +
- 'unchecked-divide unchecked-inc unchecked-multiply unchecked-negate ' +
- 'unchecked-remainder unchecked-subtract underive unquote ' +
- 'unquote-splicing update-in update-proxy use val vals var-get var-set ' +
- 'var? vary-meta vec vector vector? when when-first when-let when-not ' +
- 'while with-bindings with-bindings* with-in-str with-loading-context ' +
- 'with-local-vars with-meta with-open with-out-str with-precision xml-seq ' +
- 'zero? zipmap ';
-
- this.getKeywords = function (keywordStr) {
- // quote special characters
- keywordStr = keywordStr.replace(/[\-\[\]{}()*+?.\\\^$|,#]/g, "\\$&");
- // trim whitespace and convert to alternatives
- keywordStr = keywordStr.replace(/^\s+|\s+$/g, '').replace(/\s+/g, '|');
- // create pattern
- return '(?:' + keywordStr + ')';
- };
-
- this.regexList = [
- // comments
- { regex: new RegExp(';.*$', 'gm'),
- css: 'comments' },
- // strings
- { regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,
- css: 'string' },
- // regular expressions
- { regex: /#"(?:\.|(\\\")|[^\""\n])*"/g,
- css: 'string' },
- // vectors
- { regex: /\[|\]/g,
- css: 'keyword' },
- // amperstands
- { regex: /&(amp;)?/g,
- css: 'keyword' },
- // sets and maps
- { regex: /#?\{|\}/g,
- css: 'keyword' },
- // metadata
- { regex: /#\^\{/g,
- css: 'keyword' },
- // anonymous fn syntactic sugar
- { regex: /#\(|%/g,
- css: 'keyword' },
- // deref reader macro
- { regex: /@/g,
- css: 'keyword' },
- // (un)quoted sexprs
- { regex: /(['`]|~@?)[\[({]/g,
- css: 'keyword' },
- // lists
- { regex: /\(|\)/g,
- css: 'keyword' },
- // character literals
- { regex: /\\.\b/g,
- css: 'value' },
- // hexadecimal literals
- { regex: /[+\-]?\b0x[0-9A-F]+\b/gi,
- css: 'value' },
- // integer/octal/float/bigdecimal literals
- { regex: new ClojureRegExp("[+-]?\\b\\d+(\\.\\d*)?([eE][+-]?\\d+|M)?\\b"),
- css: 'value' },
- { regex: /^[+\-]?\b\d+(\.\d*)?([eE][+\-]?\d+|M)?\b/g,
- css: 'value' },
- // booleans+nil
- { regex: /\b(true|false|nil)\b/g,
- css: 'value' },
- // (un)quoted symbols
- { regex: /(`|#?'|~@?)[\w-.\/]+/g,
- css: 'color1' },
- // keywords
- { regex: /:[A-Za-z0-9_\-]+/g,
- css: 'constants' },
- // special forms
- { regex: new ClojureRegExp(this.getKeywords(special_forms)),
- css: 'preprocessor' },
- // type hints
- { regex: /\#\^[A-Za-z]\w*/g,
- css: 'preprocessor' },
- // clojure.core
- { regex: new ClojureRegExp(this.getKeywords(clojure_core)),
- css: 'functions' }
- ];
-
- this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);
-};
-
-SyntaxHighlighter.brushes.Clojure.prototype = new SyntaxHighlighter.Highlighter();
-SyntaxHighlighter.brushes.Clojure.aliases = ['clojure', 'Clojure', 'clj'];
-
-// vim: ts=2 sw=2 noet
View
1,721 resources/public/vendor/script/shCore.js
@@ -1,1721 +0,0 @@
-/**
- * SyntaxHighlighter
- * http://alexgorbatchev.com/SyntaxHighlighter
- *
- * SyntaxHighlighter is donationware. If you are using it, please donate.
- * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
- *
- * @version
- * 3.0.83 (July 02 2010)
- *
- * @copyright
- * Copyright (C) 2004-2010 Alex Gorbatchev.
- *
- * @license
- * Dual licensed under the MIT and GPL licenses.
- */
-//
-// Begin anonymous function. This is used to contain local scope variables without polutting global scope.
-//
-var SyntaxHighlighter = function() {
-
-// CommonJS
-if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')
-{
- XRegExp = require('XRegExp').XRegExp;
-}
-
-// Shortcut object which will be assigned to the SyntaxHighlighter variable.
-// This is a shorthand for local reference in order to avoid long namespace
-// references to SyntaxHighlighter.whatever...
-var sh = {
- defaults : {
- /** Additional CSS class names to be added to highlighter elements. */
- 'class-name' : '',
-
- /** First line number. */
- 'first-line' : 1,
-
- /**
- * Pads line numbers. Possible values are:
- *
- * false - don't pad line numbers.
- * true - automaticaly pad numbers with minimum required number of leading zeroes.
- * [int] - length up to which pad line numbers.
- */
- 'pad-line-numbers' : false,
-
- /** Lines to highlight. */
- 'highlight' : null,
-
- /** Title to be displayed above the code block. */
- 'title' : null,
-
- /** Enables or disables smart tabs. */
- 'smart-tabs' : true,
-
- /** Gets or sets tab size. */
- 'tab-size' : 4,
-
- /** Enables or disables gutter. */
- 'gutter' : true,
-
- /** Enables or disables toolbar. */
- 'toolbar' : true,
-
- /** Enables quick code copy and paste from double click. */
- 'quick-code' : true,
-
- /** Forces code view to be collapsed. */
- 'collapse' : false,
-
- /** Enables or disables automatic links. */
- 'auto-links' : true,
-
- /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */
- 'light' : false,
-
- 'html-script' : false
- },
-
- config : {
- space : '&nbsp;',
-
- /** Enables use of <SCRIPT type="syntaxhighlighter" /> tags. */
- useScriptTags : true,
-
- /** Blogger mode flag. */
- bloggerMode : false,
-
- stripBrs : false,
-
- /** Name of the tag that SyntaxHighlighter will automatically look for. */
- tagName : 'pre',
-
- strings : {
- expandSource : 'expand source',
- help : '?',
- alert: 'SyntaxHighlighter\n\n',
- noBrush : 'Can\'t find brush for: ',
- brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ',
-
- // this is populated by the build script
- aboutDialog : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>About SyntaxHighlighter</title></head><body style="font-family:Geneva,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;font-size:1em;text-align:center;"><div style="text-align:center;margin-top:1.5em;"><div style="font-size:xx-large;">SyntaxHighlighter</div><div style="font-size:.75em;margin-bottom:3em;"><div>version 3.0.83 (July 02 2010)</div><div><a href="http://alexgorbatchev.com/SyntaxHighlighter" target="_blank" style="color:#005896">http://alexgorbatchev.com/SyntaxHighlighter</a></div><div>JavaScript code syntax highlighter.</div><div>Copyright 2004-2010 Alex Gorbatchev.</div></div><div>If you like this script, please <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2930402" style="color:#005896">donate</a> to <br/>keep development active!</div></div></body></html>'
- }
- },
-
- /** Internal 'global' variables. */
- vars : {
- discoveredBrushes : null,
- highlighters : {}
- },
-
- /** This object is populated by user included external brush files. */
- brushes : {},
-
- /** Common regular expressions. */
- regexLib : {
- multiLineCComments : /\/\*[\s\S]*?\*\//gm,
- singleLineCComments : /\/\/.*$/gm,
- singleLinePerlComments : /#.*$/gm,
- doubleQuotedString : /"([^\\"\n]|\\.)*"/g,
- singleQuotedString : /'([^\\'\n]|\\.)*'/g,
- multiLineDoubleQuotedString : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'),
- multiLineSingleQuotedString : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'),
- xmlComments : /(&lt;|<)!--[\s\S]*?--(&gt;|>)/gm,
- url : /\w+:\/\/[\w-.\/?%&=:@;]*/g,
-
- /** <?= ?> tags. */
- phpScriptTags : { left: /(&lt;|<)\?=?/g, right: /\?(&gt;|>)/g },
-
- /** <%= %> tags. */
- aspScriptTags : { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },
-
- /** <script></script> tags. */
- scriptScriptTags : { left: /(&lt;|<)\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\/\s*script\s*(&gt;|>)/gi }
- },
-
- toolbar: {
- /**
- * Generates HTML markup for the toolbar.
- * @param {Highlighter} highlighter Highlighter instance.
- * @return {String} Returns HTML markup.
- */
- getHtml: function(highlighter)
- {
- var html = '<div class="toolbar">',
- items = sh.toolbar.items,
- list = items.list
- ;
-
- function defaultGetHtml(highlighter, name)
- {
- return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);
- };
-
- for (var i = 0; i < list.length; i++)
- html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);
-
- html += '</div>';
-
- return html;
- },
-
- /**
- * Generates HTML markup for a regular button in the toolbar.
- * @param {Highlighter} highlighter Highlighter instance.
- * @param {String} commandName Command name that would be executed.
- * @param {String} label Label text to display.
- * @return {String} Returns HTML markup.
- */
- getButtonHtml: function(highlighter, commandName, label)
- {
- return '<span><a href="#" class="toolbar_item'
- + ' command_' + commandName
- + ' ' + commandName
- + '">' + label + '</a></span>'
- ;
- },
-
- /**
- * Event handler for a toolbar anchor.
- */
- handler: function(e)
- {
- var target = e.target,
- className = target.className || ''
- ;
-
- function getValue(name)
- {
- var r = new RegExp(name + '_(\\w+)'),
- match = r.exec(className)
- ;
-
- return match ? match[1] : null;
- };
-
- var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),
- commandName = getValue('command')
- ;
-
- // execute the toolbar command
- if (highlighter && commandName)
- sh.toolbar.items[commandName].execute(highlighter);
-
- // disable default A click behaviour
- e.preventDefault();
- },
-
- /** Collection of toolbar items. */
- items : {
- // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.
- list: ['expandSource', 'help'],
-
- expandSource: {
- getHtml: function(highlighter)
- {
- if (highlighter.getParam('collapse') != true)
- return '';
-
- var title = highlighter.getParam('title');
- return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);
- },
-
- execute: function(highlighter)
- {
- var div = getHighlighterDivById(highlighter.id);
- removeClass(div, 'collapsed');
- }
- },
-
- /** Command to display the about dialog window. */
- help: {
- execute: function(highlighter)
- {
- var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),
- doc = wnd.document
- ;
-
- doc.write(sh.config.strings.aboutDialog);
- doc.close();
- wnd.focus();
- }
- }
- }
- },
-
- /**
- * Finds all elements on the page which should be processes by SyntaxHighlighter.
- *
- * @param {Object} globalParams Optional parameters which override element's
- * parameters. Only used if element is specified.
- *
- * @param {Object} element Optional element to highlight. If none is
- * provided, all elements in the current document
- * are returned which qualify.
- *
- * @return {Array} Returns list of <code>{ target: DOMElement, params: Object }</code> objects.
- */
- findElements: function(globalParams, element)
- {
- var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),
- conf = sh.config,
- result = []
- ;
-
- // support for <SCRIPT TYPE="syntaxhighlighter" /> feature
- if (conf.useScriptTags)
- elements = elements.concat(getSyntaxHighlighterScriptTags());
-
- if (elements.length === 0)
- return result;
-
- for (var i = 0; i < elements.length; i++)
- {
- var item = {
- target: elements[i],
- // local params take precedence over globals
- params: merge(globalParams, parseParams(elements[i].className))
- };
-
- if (item.params['brush'] == null)
- continue;
-
- result.push(item);
- }
-
- return result;
- },
-
- /**
- * Shorthand to highlight all elements on the page that are marked as
- * SyntaxHighlighter source code.
- *
- * @param {Object} globalParams Optional parameters which override element's
- * parameters. Only used if element is specified.
- *
- * @param {Object} element Optional element to highlight. If none is
- * provided, all elements in the current document
- * are highlighted.
- */
- highlight: function(globalParams, element)
- {
- var elements = this.findElements(globalParams, element),
- propertyName = 'innerHTML',
- highlighter = null,
- conf = sh.config
- ;
-
- if (elements.length === 0)
- return;
-
- for (var i = 0; i < elements.length; i++)
- {
- var element = elements[i],
- target = element.target,
- params = element.params,
- brushName = params.brush,
- code
- ;
-
- if (brushName == null)
- continue;
-
- // Instantiate a brush
- if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)
- {
- highlighter = new sh.HtmlScript(brushName);
- brushName = 'htmlscript';
- }
- else
- {
- var brush = findBrush(brushName);
-
- if (brush)
- highlighter = new brush();
- else
- continue;
- }
-
- code = target[propertyName];
-
- // remove CDATA from <SCRIPT/> tags if it's present
- if (conf.useScriptTags)
- code = stripCData(code);
-
- // Inject title if the attribute is present
- if ((target.title || '') != '')
- params.title = target.title;
-
- params['brush'] = brushName;
- highlighter.init(params);
- element = highlighter.getDiv(code);
-
- // carry over ID
- if ((target.id || '') != '')
- element.id = target.id;
-
- target.parentNode.replaceChild(element, target);
- }
- },
-
- /**
- * Main entry point for the SyntaxHighlighter.
- * @param {Object} params Optional params to apply to all highlighted elements.
- */
- all: function(params)
- {
- attachEvent(
- window,
- 'load',
- function() { sh.highlight(params); }
- );
- }
-}; // end of sh
-
-sh['all'] = sh.all;
-sh['highlight'] = sh.highlight;
-
-/**
- * Checks if target DOM elements has specified CSS class.
- * @param {DOMElement} target Target DOM element to check.
- * @param {String} className Name of the CSS class to check for.
- * @return {Boolean} Returns true if class name is present, false otherwise.
- */
-function hasClass(target, className)
-{
- return target.className.indexOf(className) != -1;
-};
-
-/**
- * Adds CSS class name to the target DOM element.
- * @param {DOMElement} target Target DOM element.
- * @param {String} className New CSS class to add.
- */
-function addClass(target, className)
-{
- if (!hasClass(target, className))
- target.className += ' ' + className;
-};
-
-/**
- * Removes CSS class name from the target DOM element.
- * @param {DOMElement} target Target DOM element.
- * @param {String} className CSS class to remove.
- */
-function removeClass(target, className)
-{
- target.className = target.className.replace(className, '');
-};
-
-/**
- * Converts the source to array object. Mostly used for function arguments and
- * lists returned by getElementsByTagName() which aren't Array objects.
- * @param {List} source Source list.
- * @return {Array} Returns array.
- */
-function toArray(source)
-{
- var result = [];
-
- for (var i = 0; i < source.length; i++)
- result.push(source[i]);
-
- return result;
-};
-
-/**
- * Splits block of text into lines.
- * @param {String} block Block of text.
- * @return {Array} Returns array of lines.
- */
-function splitLines(block)
-{
- return block.split('\n');
-}
-
-/**
- * Generates HTML ID for the highlighter.
- * @param {String} highlighterId Highlighter ID.
- * @return {String} Returns HTML ID.
- */
-function getHighlighterId(id)
-{
- var prefix = 'highlighter_';
- return id.indexOf(prefix) == 0 ? id : prefix + id;
-};
-
-/**
- * Finds Highlighter instance by ID.
- * @param {String} highlighterId Highlighter ID.
- * @return {Highlighter} Returns instance of the highlighter.
- */
-function getHighlighterById(id)
-{
- return sh.vars.highlighters[getHighlighterId(id)];
-};
-
-/**
- * Finds highlighter's DIV container.
- * @param {String} highlighterId Highlighter ID.
- * @return {Element} Returns highlighter's DIV element.
- */
-function getHighlighterDivById(id)
-{
- return document.getElementById(getHighlighterId(id));
-};
-
-/**
- * Stores highlighter so that getHighlighterById() can do its thing. Each
- * highlighter must call this method to preserve itself.
- * @param {Highilghter} highlighter Highlighter instance.
- */
-function storeHighlighter(highlighter)
-{
- sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;
-};
-
-/**
- * Looks for a child or parent node which has specified classname.
- * Equivalent to jQuery's $(container).find(".className")
- * @param {Element} target Target element.
- * @param {String} search Class name or node name to look for.
- * @param {Boolean} reverse If set to true, will go up the node tree instead of down.
- * @return {Element} Returns found child or parent element on null.
- */
-function findElement(target, search, reverse /* optional */)
-{
- if (target == null)
- return null;
-
- var nodes = reverse != true ? target.childNodes : [ target.parentNode ],
- propertyToFind = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',
- expectedValue,
- found
- ;
-
- expectedValue = propertyToFind != 'nodeName'
- ? search.substr(1)
- : search.toUpperCase()
- ;
-
- // main return of the found node